22 DIM SHARED AS STRING LOFN
32 SUB c_CTOR CDECL(
BYVAL O
AS Options
PTR)
34 IF OPEN(LFN_FILE
FOR INPUT AS #fnr)
THEN EXIT SUB
36 LOFN =
STRING(
LOF(fnr), 0)
80 VAR fnam = .
SubStr(.NamTok)
81 IF OPT->Types = OPT->C_STYLE
THEN
82 VAR i =
INSTRREV(fnam,
".")
83 Code(
"#include " &
LEFT(fnam, i))
84 IF LCASE(
RIGHT(fnam, 4)) =
".bi""" THEN Code(
"h""")
ELSE Code(
"c""")
86 Code(
"#include " & fnam)
88 IF OPT->InTree
THEN .
Include(
TRIM(fnam,
""""))
107 IF *.StaTok = .TOK_MACR
THEN
108 VAR a = .NamTok[1], l = .CurTok[1] - a
109 Code(
MID(.Buf, a + 1, l) &
" /* (multi line FreeBASIC #MACRO) ")
111 Code(
MID(.Buf, a + 1, e - a) &
" */ ")
113 VAR a = .NamTok[1], l = .DivTok[-2] + .DivTok[-1] - a
114 Code(
MID(.Buf, a + 1, l))
117 IF l > 0
THEN Code(
" /* " &
MID(.Buf, a + 1, e - a) &
" */")
136 var futo = .FunTok, nato = .NamTok
139 OPT->CreateFunction(P)
146 VAR cna =
UCASE(.
SubStr(nato)) _
151 SELECT CASE AS CONST *t
154 IF *t = .TOK_WITH
THEN wtype =
""
159 IF *t > .TOK_EOS
andalso *t < .TOK_COMSL
THEN t += 3
ELSE EXIT WHILE
161 wtype =
TRIM(
MID(.Buf, p + 2, *(t-2) + *(t-1) - p - 1))
162 IF wtype[0] =
ASC(
"*")
THEN wtype =
MID(wtype, 2) &
"->" ELSE wtype &=
"."
167 FOR i
AS INTEGER =
LEN(
LOFN) - 2
TO 0 STEP -1
169 WHILE (.Buf[x]
AND &b11011111) = (
LOFN[i]
AND &b11011111)
174 SELECT CASE AS CONST LOFN[i]
175 CASE ASC(LFN_SEP) : g = 0 : x += 2
177 IF .Buf[x] =
ASC(
".")
ORELSE .Buf[x] =
ASC(
">")
THEN
179 IF *tt = .TOK_MEOP
ORELSE *tt = .TOK_DOT _
180 THEN tt -= 3
ELSE tt += 3 : x = tt[1] + 1 : g = 0 :
EXIT WHILE
181 IF .Buf[tt[4] - 1] <
ASC(
"A")
THEN tt += 3 : x = tt[1] + 2 : g = 1 :
EXIT WHILE
182 IF *tt = .TOK_WORD
THEN tt -= 3
ELSE tt += 6 : x = tt[1] + 1 : g = 1 :
EXIT WHILE
187 VAR z = i : i =
INSTRREV(
LOFN, LFN_SEP, z)
188 IF cna <>
UCASE(
MID(
LOFN, i + 1, z - i))
THEN
190 if MID(
LOFN, i + 1, z - i) <>
MID(
LOFN, z + 2, l)
then EXIT WHILE
191 g = 1 : x += 2 : wtype =
MID(.Buf, z, l) &
"."
196 CASE ELSE :
EXIT WHILE
199 IF g
THEN Code(
" " & wtype &
MID(.Buf, x, l) &
"();") _
200 ELSE Code(
" " &
MID(.Buf, x, l) &
"();")
205 WHILE i > 0
ANDALSO LOFN[i] <>
ASC(LFN_SEP) : i -= 1 :
WEND
233 IF 0 = .ListCount
THEN
234 SELECT CASE AS CONST *.StaTok
235 CASE .TOK_CONS : Code(
"const ")
236 CASE .TOK_STAT : Code(
"static ")
237 CASE .TOK_COMM : Code(
"common ")
238 CASE .TOK_EXRN : Code(
"extern ")
239 CASE .TOK_TYPE : Code(
"typedef ")
240 IF 0 = .FunTok
ANDALSO .TypTok > .NamTok
THEN Code(
"struct ")
244 IF .FunTok
THEN : OPT->CreateFunction(P)
245 ELSEIF .TypTok
THEN : OPT->CreateVariable(P)
247 IF 0 = .ListCount
THEN Code(
"VAR ")
249 IF .BitTok
THEN Code(.BitIni)
252 IF *.CurTok <= .TOK_EOS
THEN Code(
";") :
EXIT SUB
253 IF .NamTok > .TypTok _
274 IF 0 = .ListCount
THEN Code(
STRING(.LevelCount * 2,
" "))
277 IF *.CurTok <> .TOK_END
THEN Code(
", ")
294 SELECT CASE AS CONST *.Tk1
295 CASE .TOK_PRIV : Code(
"private:")
296 CASE .TOK_PROT : Code(
"protected:")
297 CASE .TOK_PUBL : Code(
"public:")
298 CASE .TOK_ENUM, .TOK_UNIO, .TOK_TYPE, .TOK_CLAS :
c_Block(P)
300 IF 0 = .ListCount
THEN Code(
STRING(.LevelCount * 2,
" "))
301 IF *.Tk1 = .TOK_DECL
THEN OPT->CreateFunction(P) : Code(
";") :
EXIT SUB
302 IF .FunTok
THEN OPT->CreateFunction(P) _
303 ELSE OPT->CreateVariable(P)
304 IF *.CurTok <= .TOK_EOS
THEN Code(
";") :
EXIT SUB
305 IF .NamTok > .TypTok
THEN Code(
",")
ELSE Code(
"; ")
325 IF .LevelCount
THEN Code(
STRING(.LevelCount * 2,
" "))
326 SELECT CASE AS CONST IIF(.LevelCount, *.Tk1, *.StaTok)
327 CASE .TOK_TYPE, .TOK_CLAS
328 IF OPT->Types = OPT->FB_STYLE
THEN
329 Code(
"class " & .BlockNam)
331 IF *t = .TOK_EXDS
THEN Code(
" : public " & .
SubStr(t + 3))
336 IF 0 = .LevelCount
ANDALSO LEN(.BlockNam)
THEN Code(
"typedef ")
337 Code(
"struct " & .BlockNam &
"{")
341 IF 0 = .LevelCount
ANDALSO LEN(.BlockNam)
THEN Code(
"typedef ")
342 Code(
"union " & .BlockNam &
"{")
345 IF 0 = .LevelCount
ANDALSO LEN(.BlockNam)
THEN Code(
"typedef ")
346 Code(
"enum " & .BlockNam &
"{")
348 CASE ELSE : Code(
"-???-")
352 IF .LevelCount
THEN Code(
STRING(.LevelCount * 2,
" "))