37 IF OPEN ERR (
AS #Efnr)
THEN ?PROJ_NAME &
": " &
"couldn't open STDERR" : Efnr = 0 :
EXIT CONSTRUCTOR
52 IF DllEmitter
THEN DYLIBFREE(DllEmitter)
72 IF LEN(
COMMAND(p))
ANDALSO LEFT(
COMMAND(p), 1) <>
"-" THEN
74 SELECT CASE AS CONST ASC(
COMMAND(p))
75 CASE ASC(
""""),
ASC(
"'") :
RETURN MID(
COMMAND(p), 2,
LEN(
COMMAND(p)) - 2)
76 END SELECT :
RETURN COMMAND(p)
77 END IF : Errr =
", parameter expected [" &
COMMAND(Idx) &
"]" :
RETURN ""
100 VAR i = 1, emi =
"", par =
""
101 WHILE LEN(
COMMAND(i))
102 SELECT CASE AS CONST ASC(
COMMAND(i))
104 SELECT CASE COMMAND(i)
105 CASE "-f",
"--file-mode"
106 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
109 CASE "-g",
"--geany-mode"
110 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
112 EmitTyp = GTK_DOC_TEMPLATES
114 CASE "-l",
"--list-mode"
115 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
117 EmitTyp = FUNCTION_NAMES
118 CASE "-s",
"--syntax-mode"
119 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
121 EmitTyp = SYNTAX_REPAIR
123 CASE "-a",
"--asterix" : Asterix = 1
124 CASE "-c",
"--cstyle"
128 CASE "-d",
"--doc-comments" : DoCom = 1
129 CASE "-t",
"--tree" : InTree = 1
131 CASE "-e",
"--emitter"
132 IF LEN(emi)
THEN Errr &=
", multiple emitter setting" :
RETURN ERROR_MESSAGE
134 IF 0 =
LEN(emi)
THEN Errr &=
", empty emitter setting" :
RETURN ERROR_MESSAGE
135 CASE "-L",
"--ListFunctionNames"
136 IF LEN(LfnPnN)
THEN Errr &=
", multiple lfn-file setting" :
RETURN ERROR_MESSAGE
138 IF 0 =
LEN(LfnPnN)
THEN Errr &=
", empty lfn-file setting" :
RETURN ERROR_MESSAGE
139 CASE "-o",
"--outpath"
140 IF LEN(OutPath)
THEN Errr &=
", multiple outpaths" :
RETURN ERROR_MESSAGE
142 IF 0 =
LEN(OutPath)
THEN Errr &=
", empty outpath" :
RETURN ERROR_MESSAGE
143 CASE "-r",
"--recursiv" : InRecursiv = 1
145 CASE "-h",
"--help" :
RETURN HELP_MESSAGE
146 CASE "-v",
"--version" :
RETURN VERSION_MESSAGE
148 CASE ELSE : par &= !
"\t" &
COMMAND(i)
151 SELECT CASE AS CONST ASC(
COMMAND(i))
152 CASE ASC(
""""),
ASC(
"'")
153 InFiles &=
MID(
COMMAND(i), 2,
LEN(
COMMAND(i)) - 2) & !
"\n"
154 CASE ELSE : InFiles &=
COMMAND(i) & !
"\n"
162 IF 0 =
LEN(InFiles)
ANDALSO RunMode = DEF_MODE
THEN RunMode = HELP_MESSAGE
163 Pars =
NEW Parser(EmitIF)
164 RETURN IIF(
LEN(Errr), ERROR_MESSAGE, RunMode)
194 CASE LEFT(
"C_SOURCE", l) : EmitTyp = C_SOURCE
195 CASE LEFT(
"FUNCTIONNAMES", l) : EmitTyp = FUNCTION_NAMES
196 CASE LEFT(
"GTKDOCTEMPLATES", l) : EmitTyp = GTK_DOC_TEMPLATES
197 CASE LEFT(
"DOXYGENTEMPLATES", l) : EmitTyp = DOXYGEN_TEMPLATES
198 CASE LEFT(
"SYNTAXHIGHLIGHTING", l) : EmitTyp = SYNTAX_REPAIR
199 CASE ELSE : EmitTyp = EXTERNAL
203 VAR r =
NEW EmitterIF
205 Errr &=
", no plugin support on DOS platform!"
207 SELECT CASE AS CONST EmitTyp
210 CASE GTK_DOC_TEMPLATES :
init_gtk(r)
214 DllEmitter =
DYLIBLOAD(F)
215 IF 0 = DllEmitter
THEN Errr &=
", couldn't load plugin " & F :
EXIT SELECT
216 DIM ini
AS FUNCTION CDECL(
BYVAL AS EmitterIF
PTR,
BYREF AS STRING)
AS EmitterIF
PTR _
217 =
DYLIBSYMBOL(DllEmitter,
"EMITTERINIT")
218 IF 0 = ini
THEN Errr &=
", no EMITTERINIT function in emitter " & F :
EXIT SELECT
219 EmitIF = ini(r, P) : EmitTyp = EXTERNAL
220 IF LEN(P)
THEN Errr &=
", unknown options '" & P &
"'"
240 VAR path_l =
LEN(p), f =
""
241 IF LEN(Path)
THEN p &= Path & SLASH
243 IF InRecursiv > 0
THEN
244 VAR res = 0, n =
DIR(
"*", fbDirectory, res), t =
""
246 IF res = fbDirectory
ANDALSO n <>
"." ANDALSO n <>
".." THEN t &= n & NL
250 VAR a = 1, e = a, l =
LEN(t)
254 IF 0 =
CHDIR(n)
THEN f &=
scanFiles(Patt, n) :
CHDIR (
"..")
259 VAR n =
DIR(Patt), f_l =
LEN(f)
265 IF RunMode = FILE_MODE
ANDALSO f_l >
LEN(f)
ANDALSO checkDir(OutPath & p)
THEN f =
""
281 FUNCTION Options.addPath(
BYREF P1
AS STRING,
BYREF P2
AS STRING)
AS STRING
282 IF LEN(P1)
ANDALSO RIGHT(P1, 1) <> SLASH
THEN P1 &= SLASH
283 IF 0 =
LEN(P2)
ORELSE P2 =
"." THEN RETURN P1
284 IF RIGHT(P2, 1) <> SLASH
THEN P2 &= SLASH
286 IF P2[0] =
ASC(
"/")
THEN RETURN P2
288 IF MID(P2, 2, 1) =
":" THEN RETURN P2
290 VAR i =
LEN(P1), s = 1
291 WHILE MID(P2, s, 3) = *DirUp
292 i =
INSTRREV(P1, SLASH, i - 1) :
IF 0 = i
THEN RETURN MID(P2, s)
295 IF MID(P2, s, 2) =
MID(*DirUp, 2)
THEN s += 2
296 RETURN LEFT(P1, i) &
MID(P2, s)
310 VAR a = 1, e = a, l =
LEN(P), cupa =
CURDIR()
312 IF LEFT(P, 1) =
"/" THEN a = 2 :
CHDIR(
"/")
314 IF MID(P, 2, 1) =
":" THEN a = 4 :
CHDIR(
LEFT(P, 3))
318 e =
INSTR(a, P, SLASH) :
IF e = 0
THEN e = l + 1
319 VAR n =
MID(P, a, e - a)
320 IF 0 =
CHDIR(n)
THEN a = e + 1 :
CONTINUE DO
322 IF 0 =
CHDIR(n)
THEN a = e + 1 :
CONTINUE DO
324 LOOP UNTIL a > l :
CHDIR(cupa) :
RETURN IIF(a > l, 0, 1)
339 IF 0 =
LEN(InFiles)
THEN
340 SELECT CASE AS CONST RunMode
341 CASE SYNT_MODE, LIST_MODE : InFiles = !
"Doxyfile\n"
342 CASE ELSE : InFiles = !
"*.bas\n*.bi\n"
346 IF 0 =
LEN(OutPath)
ANDALSO RunMode = FILE_MODE
THEN
347 OutPath =
".." & SLASH
348 SELECT CASE AS CONST EmitTyp
349 CASE C_SOURCE : OutPath &=
"c_src"
350 CASE SYNTAX_REPAIR : OutPath &=
"fb_html"
351 CASE ELSE : OutPath &=
"src"
354 OutPath =
addPath(cupa, OutPath)
355 IF RunMode = DEF_MODE
THEN
357 OPEN CONS FOR OUTPUT AS #Ocha
360 IF EmitIF->CTOR_
THEN EmitIF->CTOR_(@
THIS)
365 , l =
LEN(InFiles) - 1
368 SELECT CASE AS CONST InFiles[i]
370 CASE ASC(
"*"),
ASC(
"?") : inpat = 1
371 CASE ASC(SLASH) : inslsh = i
374 doFile(
MID(InFiles, a + 1, i - a))
378 VAR path =
MID(InFiles, a + 1, inslsh - a)
380 ERROUT(
"couldn't change dir to " & path)
382 IF InTree
THEN StartPath =
addPath(cupa, path)
383 in_pattern =
scanFiles(
MID(InFiles, inslsh + 2, i - inslsh - 1),
"")
386 in_pattern =
scanFiles(
MID(InFiles, a + 1, i - a),
"")
389 VAR aa = 1, ee = aa, ll =
LEN(in_pattern)
391 ee =
INSTR(aa + 1, in_pattern, !
"\n")
392 doFile(
MID(in_pattern, aa, ee - aa))
395 IF inslsh
THEN CHDIR(cupa) : StartPath = cupa : inslsh = 0
401 IF EmitIF->DTOR_
THEN EmitIF->DTOR_(@
THIS)
402 IF Ocha
THEN CLOSE #Ocha
415 SELECT CASE AS CONST RunMode
418 Pars->File_(Fnam, InTree)
419 IF LEN(
Pars->ErrMsg)
THEN MSG_CONT(
Pars->ErrMsg)
421 IF LCASE(
RIGHT(Fnam, 4)) =
".bas" ORELSE _
422 LCASE(
RIGHT(Fnam, 3)) =
".bi" THEN
424 Pars->File_(Fnam, InTree)
425 IF LEN(
Pars->ErrMsg)
THEN MSG_CONT(
Pars->ErrMsg)
427 VAR nix =
NEW Highlighter(
Pars)
432 IF 0 = Ocha
THEN EXIT SUB
433 IF LCASE(
RIGHT(Fnam, 4)) =
".bas" ORELSE _
434 LCASE(
RIGHT(Fnam, 3)) =
".bi" THEN
436 Pars->File_(Fnam, InTree)
437 IF LEN(
Pars->ErrMsg)
THEN MSG_CONT(
Pars->ErrMsg)
441 VAR doxy =
NEW DoxyUDT(Fnam) _
442 , recu = InRecursiv _
447 IF 0 = doxy->Length
THEN
448 MSG_CONT(doxy->Errr) :
DELETE doxy
450 IF CHDIR(Fnam)
THEN MSG_CONT(
"error (couldn't change directory)") :
EXIT SUB
451 doxy =
NEW DoxyUDT(
"Doxyfile")
452 IF 0 = doxy->Length
THEN MSG_CONT(doxy->Errr) :
DELETE doxy :
EXIT SUB
455 InRecursiv = doxy->Flag(RECURSIVE)
456 VAR in_path =
addPath(StartPath, doxy->Tag(INPUT_TAG))
458 IF CHDIR(in_path)
THEN
459 MSG_CONT(
"error (couldn't change to " & in_path &
")")
462 IF 0 =
LEN(patt)
THEN
463 MSG_CONT(
"error (no input files in " & in_path &
")")
466 VAR a = 1, e = a, l =
LEN(patt)
468 e =
INSTR(a + 1, patt, !
"\n")
469 Pars->File_(
MID(patt, a, e - a), InTree)
470 MSG_LINE(
MID(patt, a, e - a)) : MSG_CONT(
"scanned")
481 STATIC AS STRING out_name
482 VAR a = 1, i =
INSTRREV(Fnam,
".")
483 out_name =
LEFT(Fnam, i)
486 IF LEFT(out_name, 1) =
"/" THEN a = 2
488 IF MID(out_name, 2, 1) =
":" THEN a = 2 : out_name[1] = out_name[0]
490 WHILE MID(out_name, a, 3) = *DirUp
493 IF MID(out_name, a, 2) =
MID(*DirUp, 2)
THEN a += 2
494 out_name =
MID(out_name, a)
496 VAR path = OutPath &
LEFT(out_name,
INSTRREV(out_name, SLASH))
498 ERROUT(
"couldn't create directory " & path)
500 out_name = OutPath & out_name & *
IIF(
RIGHT(FNam, 3) =
".bi", @
"h", @
"c")
502 IF OPEN(out_name
FOR OUTPUT AS #Ocha)
THEN
503 ERROUT(
"couldn't write " & out_name)
505 Pars->File_(Fnam, InTree)
507 MSG_LINE(Fnam) :
IF LEN(
Pars->ErrMsg)
THEN MSG_CONT(
Pars->ErrMsg)