home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
DEMOS
/
UB_68020.LZH
/
conv.b
< prev
next >
Wrap
Text File
|
1996-05-21
|
4KB
|
205 lines
#SET NewLine=$0d
#SET BackSlash=$5c
#SET LineLength=200
DIM KW:STRING[9]
DIM Pad:STRING[15]
DIM Nest:BYTE
DIM DataType:STRING[28]
DIM Ctr:LONG
DIM Ptr:LONG
DIM VarName:STRING[28]
DIM VarNames(20):STRING[28]
DIM VarNameCnt:BYTE
DIM FindTHEN:BYTE
DIM InpFile:BYTE
DIM OutFile:BYTE
DIM SrcBuf:STRING[LineLength]
DIM DstBuf:STRING[LineLength]
DIM AltBuf:STRING[LineLength]
DIM RawData:STRING[1]
DIM RawByte:BYTE
DIM FileName:STRING[28]
FileName=NextArg
IF LEN(FileName)=0 THEN
PRINT "No input file."
END
ENDIF
IF FileName="-?" THEN
PRINT
PRINT "conv filename"
PRINT
PRINT "Reads filename as input and creates converted file as filename.b"
PRINT
END
ENDIF
STATUS:OPEN #InpFile,FileName:READ+BINARY
IF STATUS=-1 THEN
PRINT "Cannot open input file."
END
ENDIF
FileName=FileName+".b"
STATUS:OPEN #OutFile,FileName:READ+BINARY
IF STATUS<>-1 THEN
CLOSE #OutFile
PRINT "Overwrite ";FileName;"?";
INPUT " ",RawData
IF RawData<>"y" AND RawData<>"Y" THEN
END
ELSE
STATUS: DELETE FileName
IF STATUS=-1 THEN
PRINT "Cannot delete ";FileName
END
ENDIF
ENDIF
ENDIF
STATUS:CREATE #OutFile,FileName:WRITE+BINARY
IF STATUS=-1 THEN
PRINT "Cannot open output file"
ENDIF
Nest=0
MainLoop
GOSUB GetLine
IF LEN(RawData)=0 THEN
CLOSE #InpFile,#OutFile
END
ENDIF
KW=""
FOR Ctr=1 TO 9
EXITIF MID$(AltBuf,Ctr,1)=" "
KW=KW+MID$(AltBuf,Ctr,1)
NEXT Ctr
IF KW="procedure" THEN MainLoop
IF KW="endif" OR KW="endwhile" OR KW="endloop" OR KW="until" OR KW="next" THEN
DEC Nest
ENDIF
IF LEFT$(SrcBuf,1)>="1" AND LEFT$(SrcBuf,1)<="9" THEN
DstBuf=""
ELSE
GOSUB Indent
DstBuf=Pad
ENDIF
IF KW="exitif" OR KW="endexit" THEN
IF DstBuf=" " THEN
DstBuf=" "
ELSE
DstBuf=LEFT$(DstBuf,LEN(DstBuf)-1)
ENDIF
DstBuf=DstBuf+SrcBuf
WRITE #OutFile,DstBuf
GOTO MainLoop
ENDIF
IF KW="else" THEN
IF DstBuf=" " THEN
DstBuf=" "
ELSE
DstBuf=LEFT$(DstBuf,LEN(DstBuf)-1)
ENDIF
DstBuf=DstBuf+LEFT$(SrcBuf,4)
WRITE #OutFile,DstBuf
IF LEN(SrcBuf)=4 THEN MainLoop
GOSUB Indent
AltBuf=Pad
AltBuf=AltBuf+RIGHT$(SrcBuf,LEN(SrcBuf)-5)
WRITE #OutFile,AltBuf
GOTO MainLoop
ENDIF
IF LEFT$(AltBuf,2)="if" THEN
FindTHEN=SUBSTR("then",AltBuf)
IF LEN(AltBuf)=FindTHEN+3 THEN StdCase
RawData=MID$(AltBuf,FindTHEN+5,1)
IF RawData>="0" AND RawData<="9" THEN StdCase
DstBuf=DstBuf+LEFT$(SrcBuf,FindTHEN+3)
WRITE #OutFile,DstBuf
INC Nest
GOSUB Indent
AltBuf=Pad
AltBuf=AltBuf+RIGHT$(SrcBuf,LEN(SrcBuf)-LEN(DstBuf))
WRITE #OutFile,AltBuf
GOTO MainLoop
ENDIF
IF KW="dim" THEN
VarNameCnt=1
Ptr=4
VarLoop1
VarName=""
VarLoop2
GOSUB Scan
IF RawData=" " THEN VarLoop2
IF RawData=":" THEN VarType
IF RawData="," THEN
VarNames(VarNameCnt)=VarName
VarName=""
INC VarNameCnt
GOTO VarLoop1
ENDIF
VarName=VarName+RawData
GOTO VarLoop2
VarType
DataType=""
VarTypeLp
GOSUB Scan
IF RawData=";" OR Ptr>LEN(SrcBuf) THEN Declare
DataType=DataType+RawData
GOTO VarTypeLp
Declare
VarNames(VarNameCnt)=VarName
FOR Ctr=1 TO VarNameCnt
DstBuf=" DIM "+VarNames(Ctr)+":"+DataType
WRITE #OutFile,DstBuf
NEXT Ctr
IF RawData=";" THEN
VarNameCnt=1
GOTO VarLoop1
ELSE
GOTO MainLoop
ENDIF
ENDIF
StdCase
DstBuf=DstBuf+SrcBuf
WRITE #OutFile,DstBuf
IF KW="if" AND RIGHT$(DstBuf,1)>"9" THEN
INC Nest
ENDIF
IF KW="while" OR KW="loop" OR KW="repeat" OR KW="for" THEN
INC Nest
ENDIF
GOTO MainLoop
GetLine
SrcBuf=""
RawData=""
AltBuf=""
WHILE NOT(EOF(#InpFile)) DO
GET #InpFile,RawData
RawByte=ASC(RawData)
EXITIF RawByte=NewLine or RawByte=BackSlash
IF RawByte<>$09 AND RawByte<>$20 OR LEN(SrcBuf)<>0 THEN
SrcBuf=SrcBuf+RawData
IF RawByte>=$41 AND RawByte<=$5a THEN
RawByte=BITSET(RawByte,5)
RawData=CHR$(RawByte)
ENDIF
AltBuf=AltBuf+RawData
ENDIF
ENDWHILE
RETURN
Scan
INC Ptr
RawData=MID$(SrcBuf,Ptr,1)
RETURN
Indent
IF Nest=0 THEN
Pad=" "
RETURN
ENDIF
Pad=""
FOR Ctr=1 TO Nest
Pad=Pad+CHR$(9)
NEXT Ctr
RETURN