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, 
" "))