# # Extract module and dependencies for a library from sib-pair.f95 # if [ "$1" = "-h" ] || [ $# = 0 ] then echo "Extract module and dependencies for a library from sib-pair.f95" echo "Usage: demodulator " exit fi awk -v target="$1" ' BEGIN { totmod = 0 } $0 == "#if !(FREESTANDING_SCHEME)" && target == "scheme_lang" { while ($1 != "#endif") { getline } getline } $1 == "module" { totmod++ module[$2] = 1 nuse[$2]=0 inmod=$2 } $1 == "use" { curr=$2 new=1 for (i=1;i<=nuse[inmod];i++) { if (curr==use[inmod,i]) { new=0 break } } if (new) { nuse[inmod]++ use[inmod, nuse[inmod]]=$2 } } $1 == "end" && $2 == "module" && $3 == inmod { inmod="" } END { if (target == "") target = "scheme_lang" for (i = 1; i <= nuse[target]; i++) { curr=use[target,i] hash[use[target,i]] = i } do { sofar=nuse[target] for (i = 1; i <= nuse[target]; i++) { curr=use[target,i] for (j=1; j <= nuse[curr]; j++) { if (!(use[curr,j] in hash)) { nuse[target]++ hash[use[curr,j]] = nuse[target] use[target, nuse[target]]=use[curr,j] } } } } while (sofar == nuse[target]) for (i = 1; i <= nuse[target]; i++) { print use[target,i] } print target }' sib-pair.f95 | # # now extract the modules # awk ' BEGIN { print "!" print "! Modules extracted from Sib-pair " strftime("%Y%m%d", systime()) print "!" } { n++ use[$1]=n print "! " $1 } END { while(getline < "sib-pair.f95") { if ($1 == "module" && $2 in use) { print "!" pr = 1 } if (pr && $1 == "end" && $2 == "module") { print $0 pr = 0 } if (pr) print $0 } }'