diff options
Diffstat (limited to 'cms.bas')
-rw-r--r-- | cms.bas | 108 |
1 files changed, 108 insertions, 0 deletions
@@ -0,0 +1,108 @@ +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 |