21 DIM SHARED AS STRING LOFN
31 SUB c_CTOR CDECL(
BYVAL O
AS Options
PTR)
33 IF 0 =
LEN(.LfnPnN)
THEN .LfnPnN = .OutPath & LFN_FILE
36 IF OPEN(.LfnPnN
FOR INPUT AS #fnr)
THEN
37 MSG_CONT(
"not present (List fo Function Names)")
39 LOFN =
STRING(
LOF(fnr), 0)
85 VAR fnam = .SubStr(.NamTok)
86 IF OPT->Types = OPT->C_STYLE
THEN
87 VAR i =
INSTRREV(fnam,
".")
88 Code(
"#include " &
LEFT(fnam, i))
89 IF LCASE(
RIGHT(fnam, 4)) =
".bi""" THEN Code(
"h""")
ELSE Code(
"c""")
91 Code(
"#include " & fnam)
93 IF OPT->InTree
THEN .Include(
TRIM(fnam,
""""))
112 IF *.StaTok = .TOK_MACR
THEN
113 VAR a = .NamTok[1], l = .CurTok[1] - a
114 Code(
MID(.Buf, a + 1, l) &
" /* (multi line FreeBASIC #MACRO) ")
116 Code(
MID(.Buf, a + 1, e - a) &
" */ ")
118 VAR a = .NamTok[1], l = .DivTok[-2] + .DivTok[-1] - a
119 Code(
MID(.Buf, a + 1, l))
122 IF l > 0
THEN Code(
" /* " &
MID(.Buf, a + 1, e - a) &
" */")
141 var futo = .FunTok, nato = .NamTok
144 OPT->CreateFunction(P)
151 VAR cna =
UCASE(.SubStr(nato)) _
156 SELECT CASE AS CONST *t
159 IF *t = .TOK_WITH
THEN wtype =
""
164 IF *t > .TOK_EOS
andalso *t < .TOK_COMSL
THEN t += 3
ELSE EXIT WHILE
166 wtype =
TRIM(
MID(.Buf, p + 2, *(t-2) + *(t-1) - p - 1))
167 IF wtype[0] =
ASC(
"*")
THEN wtype =
MID(wtype, 2) &
"->" ELSE wtype &=
"."
172 FOR i
AS INTEGER =
LEN(
LOFN) - 2
TO 0 STEP -1
174 WHILE (.Buf[x]
AND &b11011111) = (
LOFN[i]
AND &b11011111)
179 SELECT CASE AS CONST LOFN[i]
180 CASE ASC(LFN_SEP) : g = 0 : x += 2
182 IF .Buf[x] =
ASC(
".")
ORELSE .Buf[x] =
ASC(
">")
THEN
184 IF *tt = .TOK_MEOP
ORELSE *tt = .TOK_DOT _
185 THEN tt -= 3
ELSE tt += 3 : x = tt[1] + 1 : g = 0 :
EXIT WHILE
186 IF .Buf[tt[4] - 1] <
ASC(
"A")
THEN tt += 3 : x = tt[1] + 2 : g = 1 :
EXIT WHILE
187 IF *tt = .TOK_WORD
THEN tt -= 3
ELSE tt += 6 : x = tt[1] + 1 : g = 1 :
EXIT WHILE
192 VAR z = i : i =
INSTRREV(
LOFN, LFN_SEP, z)
193 IF cna <>
UCASE(
MID(
LOFN, i + 1, z - i))
THEN
195 if MID(
LOFN, i + 1, z - i) <>
MID(
LOFN, z + 2, l)
then EXIT WHILE
196 g = 1 : x += 2 : wtype =
MID(.Buf, z, l) &
"."
201 CASE ELSE :
EXIT WHILE
204 IF g
THEN Code(
" " & wtype &
MID(.Buf, x, l) &
"();") _
205 ELSE Code(
" " &
MID(.Buf, x, l) &
"();")
210 WHILE i > 0
ANDALSO LOFN[i] <>
ASC(LFN_SEP) : i -= 1 :
WEND
238 IF 0 = .ListCount
THEN
239 SELECT CASE AS CONST *.StaTok
240 CASE .TOK_CONS : Code(
"const ")
241 CASE .TOK_STAT : Code(
"static ")
242 CASE .TOK_COMM : Code(
"common ")
243 CASE .TOK_EXRN : Code(
"extern ")
244 CASE .TOK_TYPE : Code(
"typedef ")
245 IF 0 = .FunTok
ANDALSO .TypTok > .NamTok
THEN Code(
"struct ")
249 IF .FunTok
THEN : OPT->CreateFunction(P)
250 ELSEIF .TypTok
THEN : OPT->CreateVariable(P)
252 IF 0 = .ListCount
ANDALSO *.StaTok = .TOK_VAR
THEN Code(
"VAR ")
253 Code(.SubStr(.NamTok))
254 IF .BitTok
THEN Code(.BitIni)
257 IF *.CurTok <= .TOK_EOS
THEN Code(
";") :
EXIT SUB
258 IF .NamTok > .TypTok
THEN Code(
", ") _
278 IF 0 = .ListCount
THEN Code(
STRING(.LevelCount * 2,
" "))
279 Code(.SubStr(.NamTok))
281 IF *.CurTok <> .TOK_END
THEN Code(
", ")
298 SELECT CASE AS CONST *.Tk1
299 CASE .TOK_PRIV : Code(
"private:")
300 CASE .TOK_PROT : Code(
"protected:")
301 CASE .TOK_PUBL : Code(
"public:")
302 CASE .TOK_ENUM, .TOK_UNIO, .TOK_TYPE, .TOK_CLAS :
c_Block(P)
304 IF 0 = .ListCount
THEN Code(
STRING(.LevelCount * 2,
" "))
305 IF *.Tk1 = .TOK_DECL
THEN OPT->CreateFunction(P) : Code(
";") :
EXIT SUB
306 IF .FunTok
THEN OPT->CreateFunction(P) _
307 ELSE OPT->CreateVariable(P)
308 IF *.CurTok <= .TOK_EOS
THEN Code(
";") :
EXIT SUB
309 IF .NamTok > .TypTok
THEN Code(
",")
ELSE Code(
"; ")
329 IF .LevelCount
THEN Code(
STRING(.LevelCount * 2,
" "))
330 SELECT CASE AS CONST IIF(.LevelCount, *.Tk1, *.StaTok)
331 CASE .TOK_TYPE, .TOK_CLAS
332 IF OPT->Types = OPT->FB_STYLE
THEN
333 Code(
"class " & .BlockNam)
335 IF *t = .TOK_EXDS
THEN Code(
" : public " & .SubStr(t + 3))
340 IF 0 = .LevelCount
ANDALSO LEN(.BlockNam)
THEN Code(
"typedef ")
341 Code(
"struct " & .BlockNam &
"{")
345 IF 0 = .LevelCount
ANDALSO LEN(.BlockNam)
THEN Code(
"typedef ")
346 Code(
"union " & .BlockNam &
"{")
349 IF 0 = .LevelCount
ANDALSO LEN(.BlockNam)
THEN Code(
"typedef ")
350 Code(
"enum " & .BlockNam &
"{")
352 CASE ELSE : Code(
"-???-")
356 IF OPT->Types = OPT->C_STYLE
ANDALSO LEN(.BlockNam)
THEN
357 SELECT CASE AS CONST IIF(.LevelCount, *.Tk1, *.StaTok)
358 CASE .TOK_TYPE, .TOK_CLAS, .TOK_ENUM, .TOK_UNIO
359 fin &=
" " & .BlockNam
364 IF .LevelCount
THEN Code(
STRING(.LevelCount * 2,
" "))