38 IF OPEN ERR (
AS #Efnr)
THEN ?PROJ_NAME &
": " &
"couldn't open STDERR" : Efnr = 0 :
EXIT CONSTRUCTOR
53 IF DllEmitter
THEN DYLIBFREE(DllEmitter)
73 IF LEN(
COMMAND(p))
ANDALSO LEFT(
COMMAND(p), 1) <>
"-" THEN
75 SELECT CASE AS CONST ASC(
COMMAND(p))
76 CASE ASC(
""""),
ASC(
"'") :
RETURN MID(
COMMAND(p), 2,
LEN(
COMMAND(p)) - 2)
77 END SELECT :
RETURN COMMAND(p)
78 END IF : Errr =
", parameter expected [" &
COMMAND(Idx) &
"]" :
RETURN ""
101 VAR i = 1, emi =
"", par =
""
102 WHILE LEN(
COMMAND(i))
103 SELECT CASE AS CONST ASC(
COMMAND(i))
105 SELECT CASE COMMAND(i)
106 CASE "-f",
"--file-mode"
107 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
110 CASE "-g",
"--geany-mode"
111 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
113 EmitTyp = GTK_DOC_TEMPLATES
115 CASE "-l",
"--list-mode"
116 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
118 EmitTyp = FUNCTION_NAMES
119 CASE "-s",
"--syntax-mode"
120 IF RunMode <> DEF_MODE
THEN Errr &=
", multiple run modes" :
RETURN ERROR_MESSAGE
122 EmitTyp = SYNTAX_REPAIR
124 CASE "-a",
"--asterix" : Asterix = 1
125 CASE "-c",
"--cstyle"
129 CASE "-d",
"--doc-comments" : Docom = 1
130 CASE "-t",
"--tree" : InTree = 1
132 CASE "-e",
"--emitter"
133 IF LEN(emi)
THEN Errr &=
", multiple emitter setting" :
RETURN ERROR_MESSAGE
135 IF 0 =
LEN(emi)
THEN Errr &=
", invalid emitter setting" :
RETURN ERROR_MESSAGE
136 CASE "-o",
"--outpath"
137 IF LEN(OutPath)
THEN Errr &=
", multiple outpaths" :
RETURN ERROR_MESSAGE
139 IF 0 =
LEN(OutPath)
THEN Errr &=
", invalid outpath" :
RETURN ERROR_MESSAGE
140 CASE "-r",
"--recursiv" : InRecursiv = 1
142 CASE "-h",
"--help" :
RETURN HELP_MESSAGE
143 CASE "-v",
"--version" :
RETURN VERSION_MESSAGE
145 CASE ELSE : par &= !
"\t" &
COMMAND(i)
148 SELECT CASE AS CONST ASC(
COMMAND(i))
149 CASE ASC(
""""),
ASC(
"'")
150 InFiles &=
MID(
COMMAND(i), 2,
LEN(
COMMAND(i)) - 2) & !
"\n"
151 CASE ELSE : InFiles &=
COMMAND(i) & !
"\n"
157 IF LEN(par)
THEN Errr &=
"unknown options '" & par &
"'"
159 IF 0 =
LEN(InFiles)
ANDALSO RunMode = DEF_MODE
THEN RunMode = HELP_MESSAGE
161 RETURN IIF(
LEN(Errr), ERROR_MESSAGE, RunMode)
191 CASE LEFT(
"C_SOURCE", l) : EmitTyp = C_SOURCE
192 CASE LEFT(
"FUNCTIONNAMES", l) : EmitTyp = FUNCTION_NAMES
193 CASE LEFT(
"GTKDOCTEMPLATES", l) : EmitTyp = GTK_DOC_TEMPLATES
194 CASE LEFT(
"DOXYGENTEMPLATES", l) : EmitTyp = DOXYGEN_TEMPLATES
195 CASE LEFT(
"SYNTAXHIGHLIGHTING", l) : EmitTyp = SYNTAX_REPAIR
196 CASE ELSE : EmitTyp = EXTERNAL
200 VAR r =
NEW EmitterIF
202 Errr &=
", no plugin support on DOS platform!"
204 SELECT CASE AS CONST EmitTyp
207 CASE GTK_DOC_TEMPLATES :
init_gtk(r)
211 DllEmitter =
DYLIBLOAD(F)
212 IF 0 = DllEmitter
THEN Errr &=
", couldn't load plugin " & F :
EXIT SELECT
213 DIM ini
AS FUNCTION CDECL(
BYVAL AS EmitterIF
PTR,
BYREF AS STRING)
AS EmitterIF
PTR _
214 =
DYLIBSYMBOL(DllEmitter,
"EMITTERINIT")
215 IF 0 = ini
THEN Errr &=
", no EMITTERINIT function in emitter " & F :
EXIT SELECT
216 EmitIF = ini(r, P) : EmitTyp = EXTERNAL
236 VAR path_l =
LEN(p), f =
""
237 IF LEN(Path)
THEN p &= Path & SLASH
239 IF InRecursiv > 0
THEN
240 VAR res = 0, n =
DIR(
"*", fbDirectory, res), t =
""
242 IF res = fbDirectory
ANDALSO n <>
"." ANDALSO n <>
".." THEN t &= n & NL
246 VAR a = 1, e = a, l =
LEN(t)
250 IF 0 =
CHDIR(n)
THEN f &=
scanFiles(Patt, n) :
CHDIR (
"..")
255 VAR n =
DIR(Patt), f_l =
LEN(f)
261 IF RunMode = FILE_MODE
ANDALSO f_l >
LEN(f)
ANDALSO checkDir(OutPath & p)
THEN f =
""
277 FUNCTION Options.addPath(
BYREF P1
AS STRING,
BYREF P2
AS STRING)
AS STRING
278 IF LEN(P1)
ANDALSO RIGHT(P1, 1) <> SLASH
THEN P1 &= SLASH
279 IF 0 =
LEN(P2)
ORELSE P2 =
"." THEN RETURN P1
280 IF RIGHT(P2, 1) <> SLASH
THEN P2 &= SLASH
282 IF P2[0] =
ASC(
"/")
THEN RETURN P2
284 IF MID(P2, 2, 1) =
":" THEN RETURN P2
286 VAR i =
LEN(P1), s = 1
287 WHILE MID(P2, s, 3) = *DirUp
288 i =
INSTRREV(P1, SLASH, i - 1) :
IF 0 = i
THEN RETURN MID(P2, s)
291 IF MID(P2, s, 2) =
MID(*DirUp, 2)
THEN s += 2
292 RETURN LEFT(P1, i) &
MID(P2, s)
306 VAR a = 1, e = a, l =
LEN(P), cupa =
CURDIR()
308 IF LEFT(P, 1) =
"/" THEN a = 2 :
CHDIR(
"/")
310 IF MID(P, 2, 1) =
":" THEN a = 4 :
CHDIR(
LEFT(P, 3))
314 e =
INSTR(a, P, SLASH) :
IF e = 0
THEN e = l + 1
315 VAR n =
MID(P, a, e - a)
316 IF 0 =
CHDIR(n)
THEN a = e + 1 :
CONTINUE DO
318 IF 0 =
CHDIR(n)
THEN a = e + 1 :
CONTINUE DO
320 LOOP UNTIL a > l :
CHDIR(cupa) :
RETURN IIF(a > l, 0, 1)
335 IF 0 =
LEN(InFiles)
THEN
336 SELECT CASE AS CONST RunMode
337 CASE SYNT_MODE, LIST_MODE : InFiles = !
"Doxyfile\n"
338 CASE ELSE : InFiles = !
"*.bas\n*.bi\n"
342 IF 0 =
LEN(OutPath)
ANDALSO RunMode = FILE_MODE
THEN
343 OutPath =
".." & SLASH
344 SELECT CASE AS CONST EmitTyp
345 CASE C_SOURCE : OutPath &=
"c_src"
346 CASE SYNTAX_REPAIR : OutPath &=
"fb_html"
347 CASE ELSE : OutPath &=
"src"
350 OutPath =
addPath(cupa, OutPath)
352 IF RunMode = DEF_MODE
THEN
354 OPEN CONS FOR OUTPUT AS #Ocha
357 IF EmitIF->CTOR_
THEN EmitIF->CTOR_(@
THIS)
362 , l =
LEN(InFiles) - 1
365 SELECT CASE AS CONST InFiles[i]
367 CASE ASC(
"*"),
ASC(
"?") : inpat = 1
368 CASE ASC(SLASH) : inslsh = i
371 doFile(
MID(InFiles, a + 1, i - a))
375 VAR path =
MID(InFiles, a + 1, inslsh - a)
377 ERROUT(
"couldn't change dir to " & path)
379 IF InTree
THEN StartPath =
addPath(cupa, path)
380 in_pattern =
scanFiles(
MID(InFiles, inslsh + 2, i - inslsh - 1),
"")
383 in_pattern =
scanFiles(
MID(InFiles, a + 1, i - a),
"")
386 VAR aa = 1, ee = aa, ll =
LEN(in_pattern)
388 ee =
INSTR(aa + 1, in_pattern, !
"\n")
389 doFile(
MID(in_pattern, aa, ee - aa))
392 IF inslsh
THEN CHDIR(cupa) : StartPath = cupa : inslsh = 0
398 IF EmitIF->DTOR_
THEN EmitIF->DTOR_(@
THIS)
399 SELECT CASE AS CONST RunMode
400 CASE LIST_MODE :
IF Ocha
THEN CLOSE #Ocha : MSG_LINE(LFN_FILE) : MSG_CONT(
"written")
401 CASE ELSE :
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 LCASE(
RIGHT(Fnam, 4)) =
".bas" ORELSE _
433 LCASE(
RIGHT(Fnam, 3)) =
".bi" THEN
435 MSG_LINE(OutPath & LFN_FILE)
437 IF 0 = Ocha
THEN MSG_CONT(
"error (couldn't write)") :
EXIT SUB
441 Pars->File_(Fnam, InTree)
442 IF LEN(
Pars->ErrMsg)
THEN MSG_CONT(
Pars->ErrMsg)
446 VAR doxy =
NEW DoxyUDT(Fnam) _
447 , recu = InRecursiv _
452 IF 0 = doxy->Length
THEN
453 MSG_CONT(doxy->Errr) :
DELETE doxy
455 IF CHDIR(Fnam)
THEN MSG_CONT(
"error (couldn't change directory)") :
EXIT SUB
456 doxy =
NEW DoxyUDT(
"Doxyfile")
457 IF 0 = doxy->Length
THEN MSG_CONT(doxy->Errr) :
DELETE doxy :
EXIT SUB
460 InRecursiv =
IIF(doxy->Tag(RECURSIVE) =
"YES", 1, 0)
461 VAR in_path =
addPath(StartPath, doxy->Tag(INPUT_TAG))
463 IF CHDIR(in_path)
THEN
464 MSG_CONT(
"error (couldn't change to " & in_path &
")")
467 IF 0 =
LEN(patt)
THEN
468 MSG_CONT(
"error (no input files in " & in_path &
")")
470 MSG_CONT(
"scanned") _
472 MSG_LINE(StartPath & LFN_FILE)
475 MSG_CONT(
"error (couldn't write)")
478 VAR a = 1, e = a, l =
LEN(patt)
480 e =
INSTR(a + 1, patt, !
"\n")
481 Pars->File_(
MID(patt, a, e - a), InTree)
482 MSG_LINE(
MID(patt, a, e - a)) : MSG_CONT(
"scanned")
485 CLOSE #Ocha : MSG_LINE(StartPath & LFN_FILE) : MSG_CONT(
"written")
495 STATIC AS STRING out_name
496 VAR a = 1, i =
INSTRREV(Fnam,
".")
497 out_name =
LEFT(Fnam, i)
500 IF LEFT(out_name, 1) =
"/" THEN a = 2
502 IF MID(out_name, 2, 1) =
":" THEN a = 2 : out_name[1] = out_name[0]
504 WHILE MID(out_name, a, 3) = *DirUp
507 IF MID(out_name, a, 2) =
MID(*DirUp, 2)
THEN a += 2
508 out_name =
MID(out_name, a)
510 VAR path = OutPath &
LEFT(out_name,
INSTRREV(out_name, SLASH))
512 ERROUT(
"couldn't create directory " & path)
514 out_name = OutPath & out_name & *
IIF(
RIGHT(FNam, 3) =
".bi", @
"h", @
"c")
516 IF OPEN(out_name
FOR OUTPUT AS #Ocha)
THEN
517 ERROUT(
"couldn't write " & out_name)
519 Pars->File_(Fnam, InTree)
521 MSG_LINE(Fnam) :
IF LEN(
Pars->ErrMsg)
THEN MSG_CONT(
Pars->ErrMsg)