home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
nasm097s.zip
/
MACROS.BAS
< prev
next >
Wrap
BASIC Source File
|
1997-10-01
|
5KB
|
176 lines
' INFO_1: Converter for STANDARD.MAC to MACRO.C
'
' INFO_2: Written by Mark Junker in 1997
' InterNet: mjs@prg.hannover.sgh-net.de
' FIDO: Mark Junker@2:2437/47.21
'
' COMMENT: To start the program press SHIFT+F5 within the QBasic IDE
' or start it from the command-line with QBASIC /RUN MACROS
'
DEFINT A-Z
DECLARE FUNCTION StrTrimLeft$ (a$, b$)
DECLARE FUNCTION StrTrimRight$ (a$, b$)
DECLARE FUNCTION StrTrim$ (a$, b$)
DECLARE SUB StrSplitString (SplitString$, SplitChars$, SplitField$(), SplitCount%)
DECLARE FUNCTION Min% (a%, b%)
DECLARE FUNCTION StrInstrLeft% (SearchStart%, SearchIn$, SearchFor$)
DECLARE FUNCTION StrAscii% (a$)
CLS
DIM LineData$(1 TO 2)
OPEN "I", 1, "STANDARD.MAC"
OPEN "O", 2, "macros.c"
PRINT #2, "/* This file auto-generated from standard.mac by macros.bas - don't edit it */"
PRINT #2, ""
PRINT #2, "static char *stdmac[] = {"
WHILE NOT EOF(1)
LINE INPUT #1, l$
CALL StrSplitString(l$, ";", LineData$(), SplitCount)
IF SplitCount THEN
LineData$(1) = StrTrim$(LineData$(1), CHR$(9) + " ")
IF LEN(LineData$(1)) THEN
PRINT #2, " " + CHR$(34) + LineData$(1) + CHR$(34) + ","
END IF
END IF
WEND
PRINT #2, " NULL"
PRINT #2, "};"
CLOSE 2
CLOSE 1
SYSTEM
FUNCTION Min% (a%, b%)
IF a% < b% THEN Min% = a% ELSE Min% = b%
END FUNCTION
FUNCTION StrAscii (a$)
IF LEN(a$) = 0 THEN
StrAscii = -1
ELSE
StrAscii = ASC(a$)
END IF
END FUNCTION
' same as =INSTR(SearchStart, SearchIn, ANY SearchFor$) in PowerBASIC(tm)
'
FUNCTION StrInstrLeft (SearchStart, SearchIn$, SearchFor$)
ValuesCount = LEN(SearchFor$)
MaxValue = LEN(SearchIn$) + 1
MinValue = MaxValue
FOR Counter1 = 1 TO ValuesCount
SearchChar$ = MID$(SearchFor$, Counter1, 1)
hVal2 = INSTR(SearchStart, SearchIn$, SearchChar$)
IF hVal2 > 0 THEN MinValue = Min%(hVal2, MinValue)
NEXT
IF MinValue = MaxValue THEN MinValue = 0
StrInstrLeft = MinValue
END FUNCTION
'
' This is a very damn fuckin' shit version of this splitting routine.
' At this time, it's not very useful :]
'
SUB StrSplitString (SplitString$, SplitChars$, SplitField$(), SplitCount)
StartIndex = LBOUND(SplitField$)
LastIndex = UBOUND(SplitField$)
ActualIndex& = StartIndex
SplitCount = 0
LastPos = 1
FoundPos = StrInstrLeft(LastPos, SplitString$, SplitChars$ + CHR$(34))
GetDirect = 0
EndLoop = 0
TempString$ = ""
DO WHILE FoundPos > 0
FoundCharVal = StrAscii(MID$(SplitString$, FoundPos, 1))
PosDiff = (FoundPos - LastPos) + 1
SELECT CASE FoundCharVal
CASE 34
TempString$ = TempString$ + MID$(SplitString$, LastPos, PosDiff - 1)
SELECT CASE EndLoop
CASE 0
EndLoop = 2
CASE 3
EndLoop = 0
END SELECT
CASE ELSE
TempString$ = TempString$ + MID$(SplitString$, LastPos, PosDiff - 1)
SplitField$(ActualIndex&) = TempString$
TempString$ = ""
ActualIndex& = ActualIndex& + 1
IF ActualIndex& > LastIndex THEN
ActualIndex& = LastIndex
EndLoop = 1
END IF
END SELECT
SELECT CASE EndLoop
CASE 0
DO
LastPos = FoundPos + 1
FoundPos = StrInstrLeft(LastPos, SplitString$, SplitChars$)
LOOP WHILE LastPos = FoundPos
FoundPos = StrInstrLeft(LastPos, SplitString$, SplitChars$ + CHR$(34))
CASE 1
FoundPos = 0
LastPos = LEN(SplitString$) + 1
CASE 2
EndLoop = 3
LastPos = FoundPos + 1
FoundPos = StrInstrLeft(LastPos, SplitString$, CHR$(34))
IF FoundPos = 0 THEN
SplitString$ = SplitString$ + CHR$(34)
FoundPos = LEN(SplitString$)
END IF
END SELECT
LOOP
IF EndLoop = 0 THEN
IF LEN(TempString$) > 0 THEN
SplitField$(ActualIndex&) = TempString$
ELSEIF LastPos <= LEN(SplitString$) THEN
SplitField$(ActualIndex&) = MID$(SplitString$, LastPos)
ELSE
ActualIndex& = ActualIndex& - 1
END IF
END IF
FOR a = ActualIndex& + 1 TO LastIndex
SplitField$(a) = ""
NEXT
SplitCount = (ActualIndex& - StartIndex) + 1
END SUB
FUNCTION StrTrim$ (a$, b$)
StrTrim$ = StrTrimRight$(StrTrimLeft$(a$, b$), b$)
END FUNCTION
FUNCTION StrTrimLeft$ (a$, b$) 'public
p = 0
l = LEN(a$)
DO
p = p + 1
t$ = MID$(a$, p, 1)
LOOP WHILE (p < l) AND (INSTR(b$, t$) > 0)
StrTrimLeft$ = MID$(a$, p)
END FUNCTION
FUNCTION StrTrimRight$ (a$, b$) 'public
l = LEN(a$)
p = l + 1
DO
p = p - 1
IF p > 0 THEN
t$ = MID$(a$, p, 1)
ELSE
t$ = ""
END IF
LOOP WHILE (p > 0) AND (INSTR(b$, t$) > 0)
StrTrimRight$ = LEFT$(a$, p)
END FUNCTION