aboutsummaryrefslogtreecommitdiffstats
path: root/cms.bas
diff options
context:
space:
mode:
Diffstat (limited to 'cms.bas')
-rw-r--r--cms.bas108
1 files changed, 108 insertions, 0 deletions
diff --git a/cms.bas b/cms.bas
new file mode 100644
index 0000000..b157233
--- /dev/null
+++ b/cms.bas
@@ -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
Un proyecto texto-plano.xyz