home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / misc / inter41 / l2wh / l2whindx.awk < prev    next >
Text File  |  1994-05-23  |  7KB  |  208 lines

  1. # L2WHINDX.awk interrup.hpj
  2. # -- finish group pages
  3. #    create page for index of groups
  4. #    create page for index of control block formats
  5. # uses DOS's comspec, SORT.EXE
  6.  
  7. function suboem(s) {  # -- escape RTF specials
  8.   sos=s; s=""
  9.   gsub(/\\/,"\\\\",sos);  gsub(/\{/,"\\{",sos); gsub(/\}/,"\\}",sos)
  10.   gsub(/\\'/,"\\.'",sos)  # HC31.EXE V3.10.445 knows no \[rl](dbl)?quote !
  11.   gsub(/\0201/,"{\\'FC}",sos)  # -- german u umlaut ibm-oem 0x81=129d
  12.   gsub(/[\0177-\0377]/,".",sos)  # -- ibm-oem 0x7F-0xFF
  13.   return sos
  14. }
  15.  
  16. function disbtnout(afile) {
  17.   print ""ftn["!"]"{DisableButton(\"btn_Group\")}}" >> afile
  18. }
  19.  
  20. function crnewpage(afile) {
  21.   system("copy l2whcrtf.npg "afile" >> \\dev\\nul")
  22. }
  23.  
  24. function wreortf(afile) { # -- appends end-of-page and '}' to rtf-file      
  25.   printf "\n\\par"pardtx"\\page\n}\n" >> afile
  26. }
  27.  
  28. function hex2dec(ahexs,   i, m) {
  29.   adecs=0 ;  m=1
  30.   for (i=length(ahexs); i > 0; i--) {
  31.     adecs = adecs + 0 + (m * \
  32.              (index(hexdigits,toupper(substr(ahexs,i,1)))-1)+0)
  33.     m = 16 * m
  34.   }
  35.   ahexs=""; i=""; m=""
  36.   return adecs""
  37. }
  38.  
  39. function escre(s) {     # -- kill regexp specials
  40.   sos=s; s=""
  41.   gsub(/[\$\{\}\*\+\(\)\/\\]/,".",sos)
  42.   gsub(/[\,\&\|\"\?\[\]\^]/,".",sos)
  43.   return sos
  44. }
  45.  
  46. function addfmtskey(aintid,formname,intdescr,    fks,n,i)  {
  47.   # -- append pseudotopic to fkeyfile
  48.   #  using topicnames like 'Format of BlockFormatName: [INTsubgroup-]INTFunctionName'
  49.   #  and keynames line 'FORMATS for INTGroupname'
  50.   print ""ftn["#"]"fkj_"aintid"}" >> fkeyfile
  51.   n=split(""intdescr"",fks," - ")+0
  52.   if (n+0 <= 1) fks[1]=""intdescr""
  53.   print ""ftn["$"]"{Format of "suboem(formname)" in "suboem(intdescr)"}}" >> fkeyfile
  54.   print ""ftn["K"]"{FORMATS for "suboem(fks[1])";" >> fkeyfile
  55.   if (n+0 > 2) print ""suboem(fks[2])";" >> fkeyfile
  56.   print "\n"suboem(formname)";"suboem(fks[1])";Formats}}" >> fkeyfile
  57.   keycnt=keycnt+2
  58.   print ""ftn["!"]"{JI(`',`id_"aintid"')}}" >> fkeyfile
  59.   fks=""
  60.   print "\\page" >> fkeyfile
  61. }
  62.  
  63. function makefmtspage(afile,   s,sa,j,i,intid,idescr,tmpfile) {
  64.   system("copy "afile" "ftmpfile"")
  65.   crnewpage(afile); crnewpage(fkeyfile)
  66.   print ""ftn["#"]formatsid"}" >> afile
  67.   s="Index to Formats"
  68.   print ""ftn["$"]""s"}" >> afile
  69.   print ""ftn["K"]"{"s";Formats;Blocks;" >> afile
  70.   print "Control Blocks;Argument Blocks;Parameter Blocks;" >> afile
  71.   print "Buffers;Request Buffers;Reply Buffers}}" >> afile
  72. #  print ""ftn["+"]"Seq}" >> afile
  73.   disbtnout(afile)
  74.   print "\\keepn{\\fs30\\b\\cf4 "s"" >> afile
  75.   print "   {\\plain\\fs14\\cf0 [Search Key is 'FORMATS for <agroup>']}" >> afile
  76.   print "}\\par\\pard" >> afile
  77.   print "{\\tx240\\li240\\fi-240}\n" >> afile
  78.   j=1
  79.   while (j+0 > 0 && (getline < ftmpfile > 0)) {
  80.     printf ""$1"      \r" >> console
  81.     intid=$1
  82.     i=index($0," "); sa=suboem(substr($0,i+1))
  83.     sa=toupper(substr(sa,1,1))""substr(sa,2)""
  84.     j=(getline idescr < ftmpfile)+0
  85.     i=match(idescr,/ - /); idescr=tolower(substr(idescr,i+3))
  86.     printf ("{\\strike{%s}}{\\v id_"intid"}:\n",sa) >> afile
  87.     printf (" %s.\\par\n",suboem(idescr)) >> afile
  88.     addfmtskey(""intid"",""sa"",""idescr"")
  89.   }
  90.   close(ftmpfile)
  91.   wreortf(afile); print "\n\\par"pardtx"\n}" >> fkeyfile
  92.   close(afile); close(fkeyfile)
  93.  
  94.   if (j == 0) {
  95.     print "L2WHINDX ERROR: a formatentry in "afile" has no 2 lines" >> console
  96.     exit 1
  97.   }
  98.  # system("del "ftmpfile"")
  99. }
  100.  
  101. function updallgroups(s1, gd) { # -- uses $0 !
  102.   gd=escre(grpdir)
  103.   if (""s1"" ~ "^"gd"") {
  104.     grpfile=""s1""
  105.     gid=""substr(s1,lsd+1,1)""hex2dec(substr(s1,lsd+2))
  106.     s=$4;  for (i=5; i <= NF; i++) s=s" "$i;  s=suboem(s)
  107.     print "{\\strike{"s"}}{\\v gid_"gid"}\\par" >> tmpfile
  108.   #  printf "Added gid_"gid"               \r" >> console
  109.     if (donttouchgrprtf !~ /T/) {
  110.       printf "Finishing "grpfile"\r" >> console
  111.       wreortf(grpfile); close(grpfile)
  112.     }
  113.   }
  114. }
  115.  
  116.  
  117. BEGIN {
  118.   # donttouchgrprtf="T"
  119.   console="\\dev\\con"
  120.  
  121.   grpdir="g\\"; intdir="i\\"
  122.   basename=ARGV[ARGC-1]
  123.   if ((i=index(basename,"\.")) > 0) basename=substr(basename,1,i-1)
  124.   rtfoutput=basename".rtf"; statefile=basename".sta"
  125.   rtffile=basename".rtf"; hpjfile=basename".hpj"
  126.  
  127.   fmtsfile=basename".fmt"; fkeyfile=basename".fik"
  128.   ftmpfile=basename".tmf"
  129.  
  130.   hlpfile=basename".hlp"; grpidxfile=""grpdir""basename".grp"
  131.   basegrpidxfn=""grpdir"IG.~"; allgroupsfile=basename".idx"
  132.   hexdigits="0123456789ABCDEF"; linkflag="!!L2WHCRTF!!"
  133.   lnkrtffile=basename".ltf"
  134.   contentsid="id_Index"; formatsid="id_Formats"
  135.   about="About Interrupt List"
  136.   ftnt="{\\footnote "; decint2164=100
  137.   ftn["#"]="#"ftnt; ftn["$"]="$"ftnt
  138.   ftn["K"]="K"ftnt; ftn["!"]="!"ftnt; ftn["+"]="+"ftnt
  139.   sortfile=basename".srt"
  140.   pardtx="\\pard\\tx960\\tx1920\\tx2880\\tx3840\\tx4800"
  141.   tmpfile=""basename".tmp"
  142.   eopfile=""basename".eop"
  143.  
  144.   print "Creating index to Formats in "fmtsfile" and "fkeyfile"" >> console
  145.   makefmtspage(fmtsfile)
  146.  
  147.   print "Creating "allgroupsfile" using [FILES] in "hpjfile >> console
  148.   lsd=length(grpdir)
  149.   atfiles="F"
  150.   #    read group-page files from HPJ file
  151. }
  152.  
  153.  
  154. atfiles ~ /F/ && ""$1"" !~ /^\[FI/ { # -- skip to [FILES] section
  155.   next
  156. }
  157.  
  158. atfiles ~ /F/ { # -- skip over [FILES] line
  159.   atfiles="T"
  160.   next
  161. }
  162.  
  163. atfiles ~ /T/ && ""$0"" !~ /^[ \t;iI]/ {
  164.   updallgroups($1)
  165.   next
  166. }
  167.  
  168. END {
  169.   # -- the ARGV[ARGC-1] hpjfile should be closed now
  170.   close(tmpfile)
  171.   # --- sort the groups
  172.   print "\nSorting groups..." >> console
  173.   system("sort < "tmpfile" > "sortfile"") # -- sort does not write Ctrl+Z !
  174.   print "Sorted in "sortfile"" >> console
  175.   system("del "tmpfile"")
  176.  
  177.   crnewpage(allgroupsfile)
  178.   print ""ftn["#"]contentsid"}" >> allgroupsfile
  179.   s="Index to Groups"
  180.   print ""ftn["$"]""s"}" >> allgroupsfile
  181.   print ""ftn["K"]"{"s";Groups, index to;Index}}" >> allgroupsfile
  182.   print ""ftn["+"]"Seq}" >> allgroupsfile
  183.   disbtnout(allgroupsfile)
  184.   print "\\keepn{\\fs30\\b\\cf4 "s"" >> allgroupsfile
  185.   print "   {\\plain\\fs14\\cf0 [Search Key is 'GROUP: <agroup>']}" >> allgroupsfile
  186.   print "}\\par\\pard" >> allgroupsfile
  187.   print "{\\tx240\\li240\\fi-240}\n" >> allgroupsfile
  188.   close(allgroupsfile)
  189.  
  190.   printf("\n\\par"pardtx"\\page\n}\n") > eopfile
  191.   close(eopfile)
  192.   system("copy /b "allgroupsfile"+"sortfile"+"eopfile" sorted.ltf >> \\dev\\nul")
  193.   system("del "sortfile" >> \\dev\\nul")
  194.   system("del "eopfile" >> \\dev\\nul")
  195.  
  196.   print "Finishing "allgroupsfile"" >> console
  197.   system("copy sorted.ltf "allgroupsfile" >> \\dev\\nul")
  198.   system("del sorted.ltf >> \\dev\\nul")
  199.   print ""allgroupsfile" ; Index to Groups" >> hpjfile
  200.   print ""lnkrtffile" ; Topic pages" >> hpjfile
  201.   print ""fmtsfile" ; Index to Formats" >> hpjfile
  202.   print ""fkeyfile" ; Keys to Formats" >> hpjfile
  203.   close(hpjfile)
  204.   print "Done" >> console
  205. }
  206.  
  207.  
  208.