rem Purpose: re-define externals to only 6 characters for CMS rem Author: Howard Wulf, AF5NE rem Date: 2015-02-10 rem Usage: implementation defined rem Example: rem ~/bwbasic cms.bas rem rem ------------------------------------------------------------------------------- rem File File Name IN/OUT Description rem #1 "bwbasic.h" INPUT read looking for "extern" statements rem #2 "cms.h" OUTPUT written with "#define" statements rem ------------------------------------------------------------------------------- rem Variable Description rem N The number of "extern" statements so far processed rem E$ The constant value "extern " rem E The length of E$ rem L$ The input line read from "bwbasic.h" rem M$ The next line from "bwbasic.h" when L$ does not contain a semicolon rem X The location of special characters in L$ rem H$ The hexadecimal value of N rem ------------------------------------------------------------------------------- rem let N = 0 let E$ = "extern " let E = len( E$ ) open "bwbasic.h" for input as #1 open "cms.txt" for output as #2 while not eof( #1 ) line input #1, L$ L$ = trim$( L$ ) if left$( L$, E ) = E$ then rem extern .... while instr( L$, ";" ) = 0 ' read more lines until we get a semicolon line input #1, M$ M$ = trim$( M$ ) L$ = L$ + " " + M$ wend rem extern ...; L$ = trim$(mid$( L$, E + 1 )) ' truncate trailing semicolon X = instr( L$, ";" ) if X > 0 then L$ = trim$(left$( L$, X - 1 )) end if ' truncate trailing parenthesis X = instr( L$, "(" ) if X > 0 then L$ = trim$(left$( L$, X - 1 )) end if ' truncate trailing bracket X = instr( L$, "[" ) if X > 0 then L$ = trim$(left$( L$, X - 1 )) end if ' find the last word X = instr(L$, " " ) while X > 0 L$ = trim$(mid$( L$, X + 1 )) X = instr(L$, " " ) wend ' skip leading asterick while left$( L$, 1 ) = "*" L$ = trim$(mid$( L$, 2 )) wend if L$ = "main" or L$ = "putenv" or L$="sleep" then ' ignore magic function name else ' pad for alignment REM L$ = L$ + space$(32) REM L$ = left$( L$, 32 ) REM H$ = "00000" + hex$(N) REM H$ = right$( H$, 5 ) REM print #2, "#define ";L$;" X";H$ REM N = N + 1 if len( L$ ) > 0 then print #2, L$ end if end if end if wend close #2 close #1 REM sort before assigning value if shell( "sort < cms.txt > cms.out" ) = 0 then N = 0 open "cms.out" for input as #1 open "cms.h" for output as #2 while not eof(#1) line input #1, L$ L$ = trim$(L$) if len(L$) then ' pad for alignment L$ = L$ + space$(32) L$ = left$( L$, 32 ) H$ = "00000" + hex$(N) H$ = right$( H$, 5 ) print #2, "#define ";L$;" X";H$ N = N + 1 end if wend close #2 close #1 rem Cleanup temporary files kill "cms.txt" kill "cms.out" end if end