home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / e / amiga_e / src / utils / edoc2guide.e < prev    next >
Text File  |  1992-09-02  |  3KB  |  97 lines

  1. /* Bin/Edoc2Guide
  2.  
  3. To save space (why really?), but also to make converting future docs
  4. easy, E.doc is only distributed as ascii file, which can be turned into
  5. a .guide by using this program. (compiled version is in the bin/ dir.)
  6.  
  7. 1> edoc2guide e:docs/e.doc
  8.  
  9. will produce a file e.doc.guide, which you might wish to rename to just
  10. 'e.guide'.
  11.  
  12. WARNING: The AmigaGuide datatype (multiview) seems to skip all "\"
  13.          chars in the text, which is quite irritating with '\n' etc.
  14.          This is a bug, since AmigaGuide v34 does it right. I would advice
  15.          to read the doc with v34 anyway, since it's better in other respects
  16.          too.
  17.  
  18. */
  19.  
  20. OPT OSVERSION=37
  21.  
  22. MODULE 'tools/file'
  23.  
  24. PROC main() HANDLE
  25.   DEF m=NIL,l,n,list,myargs:PTR TO LONG,rdargs=NIL,fh=NIL,outf[50]:STRING
  26.   IF (rdargs:=ReadArgs('DOC/A',myargs:=[0],NIL))=NIL THEN Raise("RDAR")
  27.   m,l:=readfile(myargs[])
  28.   list:=stringsinfile(m,l,n:=countstrings(m,l))
  29.   StrCopy(outf,myargs[])
  30.   StrAdd(outf,'.guide')
  31.   IF (fh:=Open(outf,NEWFILE))=NIL THEN Raise("OPEN")
  32.   process(fh,list,n)
  33. EXCEPT DO
  34.   IF fh THEN Close(fh)
  35.   IF rdargs THEN FreeArgs(rdargs)
  36.   IF m THEN freefile(m)
  37.   SELECT exception
  38.     CASE "RDAR"; WriteF('Bad Args!\n')
  39.     CASE "NEW";  WriteF('No Mem!\n')
  40.     CASE "OPEN"; WriteF('Couldn''t open file!\n')
  41.   ENDSELECT
  42. ENDPROC
  43.  
  44. PROC process(fh,list:PTR TO LONG,num)
  45.   DEF line,l:PTR TO CHAR,c,s[500]:STRING,a,b,d
  46.   Fputs(fh,'@database "e.guide"\n@node MAIN\n@title "Amiga E v3.0a"\n')
  47.   FOR line:=0 TO num-1
  48.      l:=list[line]
  49.      IF StrCmp(l,'\t    ',5)
  50.        IF l[6]="."
  51.          c:=l[5]
  52.          IF cap(c)
  53.            StringF(s,'\t  @{"  \c. \s  " link CH_\d\c }',c,l+8,a,c)
  54.            l:=s
  55.          ENDIF
  56.        ENDIF
  57.      ELSE
  58.        a,b:=Val(l)
  59.        IF b
  60.          c:=l[b]
  61.          IF cap(c)
  62.            IF (l[b+1]=".") AND (l[b+2]=" ")
  63.              IF StrCmp(list[line+1],'------',6)
  64.                StringF(s,'@endnode\n@node CH_\d\c\n@title "\s"\n\s',a,c,l,l)
  65.                l:=s
  66.              ENDIF
  67.            ENDIF
  68.          ENDIF
  69.        ELSEIF StrCmp(l,'+-----',6)
  70.          IF StrCmp(list[line+1],'|',1)
  71.            IF StrCmp(list[line+2],'+-----',6)
  72.              line:=line+3
  73.              l:=list[line]
  74.            ENDIF
  75.          ENDIF
  76.        ELSEIF (b:=InStr(l,'(see ',0))<>-1
  77.          b:=b+5
  78.          l[b-1]:=0
  79.          a,c:=Val(l+b)
  80.          IF c
  81.            d:=b+c
  82.            c:=l[d]
  83.            IF cap(c)
  84.              StringF(s,'\s @{" \d\c " link CH_\d\c }\s',l,a,c,a,c,l+d+1)
  85.              l:=s
  86.            ENDIF
  87.          ENDIF
  88.        ENDIF
  89.      ENDIF
  90.      Fputs(fh,l)
  91.      FputC(fh,"\n")
  92.   ENDFOR
  93.   Fputs(fh,'@endnode\n')
  94. ENDPROC
  95.  
  96. PROC cap(c) IS IF c>="A" THEN c<="Z" ELSE FALSE
  97.