minor fixes
[ia32rtools.git] / run_mkpubinc.sh
index 8d6afe8..2935d7d 100755 (executable)
@@ -1,30 +1,48 @@
 #!/bin/sh
 set -e
 
-echo -n > $3
+public_inc=$1
+asm=$2
+c_list=$3
 
-cat $1 | fromdos | sed -e \
-'1,/^_rdata.*segment/d;/^_data_last/q;/^[[:blank:];]/d;/^;/d;/^_r\?data\>/d;' | awk '{print $1}' | \
+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
   case $a in
   __IMPORT_DESCRIPTOR*)
     continue
     ;;
+  _data)
+    continue
+    ;;
   *)
     ;;
   esac
 
-  echo "_$a equ $a" >> $3
-  echo "PUBLIC _$a" >> $3
+  echo "_$a equ $a" >> $public_inc
+  echo "PUBLIC _$a" >> $public_inc
 done
 
-echo "; funcs called from C" >> $3
+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
 
-cat $2 | \
-while read a; do
-#  echo "_$a equ $a" >> $3
-#  echo "PUBLIC _$a" >> $3
-  a=`echo $a | awk -F@ '{print $1}'`
-  echo "PUBLIC $a" >> $3
-done
+  echo "; funcs called from C" >> $public_inc
+
+  cat $c_list | \
+  while read a; do
+    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