various additions
[ia32rtools.git] / run_mkpubinc.sh
index dc016c9..2935d7d 100755 (executable)
@@ -1,9 +1,13 @@
 #!/bin/sh
 set -e
 
-echo -n > $1
+public_inc=$1
+asm=$2
+c_list=$3
 
-cat $2 | fromdos | sed -e \
+echo -n > $public_inc
+
+cat $asm | fromdos | sed -e \
 '1,/^_rdata.*segment/d;/^_data.*\<ends\>/q;/^[[:blank:];]/d;/^;/d;/^_r\?data\>/d;' | awk '{print $1}' | \
 while read a; do
   test -z "$a" && continue
@@ -18,18 +22,27 @@ while read a; do
     ;;
   esac
 
-  echo "_$a equ $a" >> $1
-  echo "PUBLIC _$a" >> $1
+  echo "_$a equ $a" >> $public_inc
+  echo "PUBLIC _$a" >> $public_inc
 done
 
-if test -n "$3"; then
-  echo "; funcs called from C" >> $1
+if test -n "$c_list"; then
+  # make a list of functions in asm
+  grep '\<endp\>' $asm | awk '{print $1}' | grep -v '\<rm_' \
+    > ${asm}_funcs || true
+
+  echo "; funcs called from C" >> $public_inc
 
-  cat $3 | \
+  cat $c_list | \
   while read a; do
-#    echo "_$a equ $a" >> $1
-#    echo "PUBLIC _$a" >> $1
-    a=`echo $a | awk -F@ '{print $1}'`
-    echo "PUBLIC $a" >> $1
+    name=`echo $a | awk -F@ '{print $1}'`
+    n=`grep "\<$name\>" ${asm}_funcs` || \
+    n=`grep "\<_$name\>" ${asm}_funcs` || true
+    if test -z "$n"; then
+      echo "\"$name\" is expected to be in asm, but was not found"
+      rm $public_inc
+      exit 1
+    fi
+    echo "PUBLIC $n" >> $public_inc
   done
 fi