home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / DEMOS / UB_68000.LZH / conv.b < prev    next >
Text File  |  1996-05-21  |  4KB  |  205 lines

  1. #SET NewLine=$0d
  2. #SET BackSlash=$5c
  3. #SET LineLength=200
  4.  
  5.  DIM KW:STRING[9]
  6.  DIM Pad:STRING[15]
  7.  DIM Nest:BYTE
  8.  DIM DataType:STRING[28]
  9.  DIM Ctr:LONG
  10.  DIM Ptr:LONG
  11.  DIM VarName:STRING[28]
  12.  DIM VarNames(20):STRING[28]
  13.  DIM VarNameCnt:BYTE
  14.  DIM FindTHEN:BYTE
  15.  DIM InpFile:BYTE
  16.  DIM OutFile:BYTE
  17.  DIM SrcBuf:STRING[LineLength]
  18.  DIM DstBuf:STRING[LineLength]
  19.  DIM AltBuf:STRING[LineLength]
  20.  DIM RawData:STRING[1]
  21.  DIM RawByte:BYTE
  22.  DIM FileName:STRING[28]
  23.  
  24.  FileName=NextArg
  25.  IF LEN(FileName)=0 THEN
  26.     PRINT "No input file."
  27.     END
  28.  ENDIF
  29.  IF FileName="-?" THEN
  30.     PRINT
  31.     PRINT "conv filename"
  32.     PRINT
  33.     PRINT "Reads filename as input and creates converted file as filename.b"
  34.     PRINT
  35.     END
  36.  ENDIF
  37.  STATUS:OPEN #InpFile,FileName:READ+BINARY
  38.  IF STATUS=-1 THEN
  39.     PRINT "Cannot open input file."
  40.     END
  41.  ENDIF
  42.  FileName=FileName+".b"
  43.  STATUS:OPEN #OutFile,FileName:READ+BINARY
  44.  IF STATUS<>-1 THEN
  45.     CLOSE #OutFile
  46.     PRINT "Overwrite ";FileName;"?";
  47.     INPUT " ",RawData
  48.     IF RawData<>"y" AND RawData<>"Y" THEN
  49.         END
  50.     ELSE
  51.         STATUS: DELETE FileName
  52.         IF STATUS=-1 THEN
  53.             PRINT "Cannot delete ";FileName
  54.             END
  55.         ENDIF
  56.     ENDIF
  57.  ENDIF
  58.  STATUS:CREATE #OutFile,FileName:WRITE+BINARY
  59.  IF STATUS=-1 THEN
  60.     PRINT "Cannot open output file"
  61.  ENDIF
  62.  Nest=0
  63. MainLoop
  64.  GOSUB GetLine
  65.  IF LEN(RawData)=0 THEN
  66.     CLOSE #InpFile,#OutFile
  67.     END
  68.  ENDIF
  69.  KW=""
  70.  FOR Ctr=1 TO 9
  71.     EXITIF MID$(AltBuf,Ctr,1)=" "
  72.     KW=KW+MID$(AltBuf,Ctr,1)
  73.  NEXT Ctr
  74.  IF KW="procedure" THEN MainLoop
  75.  IF KW="endif" OR KW="endwhile" OR KW="endloop" OR KW="until" OR KW="next" THEN
  76.     DEC Nest
  77.  ENDIF
  78.  IF LEFT$(SrcBuf,1)>="1" AND LEFT$(SrcBuf,1)<="9" THEN
  79.     DstBuf=""
  80.  ELSE
  81.     GOSUB Indent
  82.     DstBuf=Pad
  83.  ENDIF
  84.  IF KW="exitif" OR KW="endexit" THEN
  85.     IF DstBuf="    " THEN
  86.         DstBuf=" "
  87.     ELSE
  88.         DstBuf=LEFT$(DstBuf,LEN(DstBuf)-1)
  89.     ENDIF
  90.     DstBuf=DstBuf+SrcBuf
  91.     WRITE #OutFile,DstBuf
  92.     GOTO MainLoop
  93.  ENDIF
  94.  IF KW="else" THEN
  95.     IF DstBuf="    " THEN
  96.         DstBuf=" "
  97.     ELSE
  98.         DstBuf=LEFT$(DstBuf,LEN(DstBuf)-1)
  99.     ENDIF
  100.     DstBuf=DstBuf+LEFT$(SrcBuf,4)
  101.     WRITE #OutFile,DstBuf
  102.     IF LEN(SrcBuf)=4 THEN MainLoop
  103.     GOSUB Indent
  104.     AltBuf=Pad
  105.     AltBuf=AltBuf+RIGHT$(SrcBuf,LEN(SrcBuf)-5)
  106.     WRITE #OutFile,AltBuf
  107.     GOTO MainLoop
  108.  ENDIF
  109.  IF LEFT$(AltBuf,2)="if" THEN
  110.     FindTHEN=SUBSTR("then",AltBuf)
  111.     IF LEN(AltBuf)=FindTHEN+3 THEN StdCase
  112.     RawData=MID$(AltBuf,FindTHEN+5,1)
  113.     IF RawData>="0" AND RawData<="9" THEN StdCase
  114.     DstBuf=DstBuf+LEFT$(SrcBuf,FindTHEN+3)
  115.     WRITE #OutFile,DstBuf
  116.     INC Nest
  117.     GOSUB Indent
  118.     AltBuf=Pad
  119.     AltBuf=AltBuf+RIGHT$(SrcBuf,LEN(SrcBuf)-LEN(DstBuf))
  120.     WRITE #OutFile,AltBuf
  121.     GOTO MainLoop
  122.  ENDIF
  123.  IF KW="dim" THEN
  124.     VarNameCnt=1
  125.     Ptr=4
  126. VarLoop1
  127.     VarName=""
  128. VarLoop2
  129.     GOSUB Scan
  130.     IF RawData=" " THEN VarLoop2
  131.     IF RawData=":" THEN VarType
  132.     IF RawData="," THEN
  133.         VarNames(VarNameCnt)=VarName
  134.         VarName=""
  135.         INC VarNameCnt
  136.         GOTO VarLoop1
  137.     ENDIF
  138.     VarName=VarName+RawData
  139.     GOTO VarLoop2
  140. VarType
  141.     DataType=""
  142. VarTypeLp
  143.     GOSUB Scan
  144.     IF RawData=";" OR Ptr>LEN(SrcBuf) THEN Declare
  145.     DataType=DataType+RawData
  146.     GOTO VarTypeLp
  147. Declare
  148.     VarNames(VarNameCnt)=VarName
  149.     FOR Ctr=1 TO VarNameCnt
  150.         DstBuf=" DIM "+VarNames(Ctr)+":"+DataType
  151.         WRITE #OutFile,DstBuf
  152.     NEXT Ctr
  153.     IF RawData=";" THEN
  154.         VarNameCnt=1
  155.         GOTO VarLoop1
  156.      ELSE
  157.         GOTO MainLoop
  158.     ENDIF
  159.  ENDIF
  160. StdCase
  161.  DstBuf=DstBuf+SrcBuf
  162.  WRITE #OutFile,DstBuf
  163.  IF KW="if" AND RIGHT$(DstBuf,1)>"9" THEN
  164.     INC Nest
  165.  ENDIF
  166.  IF KW="while" OR KW="loop" OR KW="repeat" OR KW="for" THEN
  167.     INC Nest
  168.  ENDIF
  169.  GOTO MainLoop
  170.  
  171. GetLine
  172.  SrcBuf=""
  173.  RawData=""
  174.  AltBuf=""
  175.  WHILE NOT(EOF(#InpFile)) DO
  176.     GET #InpFile,RawData
  177.     RawByte=ASC(RawData)
  178.     EXITIF RawByte=NewLine or RawByte=BackSlash
  179.     IF RawByte<>$09 AND RawByte<>$20 OR LEN(SrcBuf)<>0 THEN
  180.         SrcBuf=SrcBuf+RawData
  181.         IF RawByte>=$41 AND RawByte<=$5a THEN
  182.             RawByte=BITSET(RawByte,5)
  183.             RawData=CHR$(RawByte)
  184.         ENDIF
  185.         AltBuf=AltBuf+RawData
  186.     ENDIF
  187.  ENDWHILE
  188.  RETURN
  189.  
  190. Scan
  191.  INC Ptr
  192.  RawData=MID$(SrcBuf,Ptr,1)
  193.  RETURN
  194.  
  195. Indent
  196.  IF Nest=0 THEN
  197.     Pad=" "
  198.     RETURN
  199.  ENDIF
  200.  Pad=""
  201.  FOR Ctr=1 TO Nest
  202.     Pad=Pad+CHR$(9)
  203.  NEXT Ctr
  204.  RETURN
  205.