home *** CD-ROM | disk | FTP | other *** search
- /**************************************************************************/
- /* Main.c - startup, etc. */
- /**************************************************************************/
-
- #include "GenerateIndex.h"
-
- extern struct WBStartup *_WBMsg;
- extern void _waitwbmsg(void);
-
- STRPTR InitialFile;
-
- const UBYTE VersTag[] = "$VER: GenerateIndex " VERSION " " DATE;
-
- const UBYTE Template[] = "FROM/M,TO,SETTINGS,"
- "RECURSIVELY/S,KEEPEMPTY/S,UNRECOGAREDOCS/S,"
- "AUTODOC/S,"
- "C/S,C_DEFINE/S,C_STRUCT/S,C_TYPEDEF/S,"
- "E/S,E_CONST/S,E_OBJECT/S,E_PROC/S,"
- "ASM/S,ASM_EQU/S,ASM_STRUCTURE/S,ASM_MACRO/S";
-
- const UBYTE CLI_Help[] = "\n"
- "GenerateIndex [[FROM] {wildcard}] [TO <file>] [SETTINGS <file>]\n"
- "\t[RECURSIVELY] [KEEPEMPTY] [UNRECOGAREDOCS]\n"
- "\t[AUTODOC]\n"
- "\t[C] [C_DEFINE] [C_STRUCT] [C_TYPEDEF]\n"
- "\t[E] [E_CONST] [E_OBJECT] [E_PROC]\n"
- "\t[ASM] [ASM_EQU] [ASM_STRUCTURE] [ASM_MACRO]\n"
- "\n"
- "- Not specifying FROM will open the GUI (ReqTools and Triton required)\n"
- "- A script is handy for Shell usage\n"
- "- Study the guide for more information\n"
- "\n";
-
- struct List FileList;
- struct RDArgs *Args;
- struct ReqToolsBase *ReqToolsBase;
- ULONG ParseResult[LAST_ARGUMENT], Options;
-
- /// _main( ) -- handle parsing of WB/Shell arguments
- __stkargs LONG
- _main(LONG argc, STRPTR argv)
- {
- ReqToolsBase = OpenLibrary("reqtools.library", 38);
-
- NewList(&FileList);
-
- if (_WBMsg)
- {
- struct DiskObject *diskobj;
-
- CurrentDir(_WBMsg->sm_ArgList->wa_Lock);
- if (diskobj = GetDiskObject(_WBMsg->sm_ArgList->wa_Name))
- {
- STRPTR arg;
-
- if (arg = FindToolType(diskobj->do_ToolTypes, "TO"))
- if (InitialFile = AllocVec(strlen(arg) + 1, NULL))
- strcpy(InitialFile, arg);
-
- if (arg = FindToolType(diskobj->do_ToolTypes, "SETTINGS"))
- LoadSettings(arg);
- else
- LoadSettings("ENV:FetchRefs_GI.prefs");
-
- FreeDiskObject(diskobj);
-
- GoGUI();
- } else
- CloseAll(IoErr());
- } else
- {
- if (Args = AllocDosObject(DOS_RDARGS, NULL))
- {
- Args->RDA_ExtHelp = CLI_Help; /* Activate extended help */
-
- if (ReadArgs(Template, ParseResult, Args)) /* Parse arguments */
- {
- /* Set options */
- if (ParseResult[SETTINGS])
- LoadSettings((STRPTR)ParseResult[SETTINGS]);
- else
- {
- if (ParseResult[AUTODOC])
- Settings.AutoDocPrf.Active = TRUE;
-
- if (ParseResult[CINC])
- Settings.CPrf.Active = TRUE;
- if (ParseResult[C_DEFINE])
- Settings.CPrf.Define = TRUE;
- if (ParseResult[C_STRUCT])
- Settings.CPrf.Struct = TRUE;
- if (ParseResult[C_TYPEDEF])
- Settings.CPrf.Typedef = TRUE;
-
- if (ParseResult[EINC])
- Settings.EPrf.Active = TRUE;
- if (ParseResult[E_CONST])
- Settings.EPrf.Const = TRUE;
- if (ParseResult[E_OBJECT])
- Settings.EPrf.Object = TRUE;
- if (ParseResult[E_PROC])
- Settings.EPrf.Proc = TRUE;
-
- if (ParseResult[ASMINC])
- Settings.AsmPrf.Active = TRUE;
- if (ParseResult[ASM_EQU])
- Settings.AsmPrf.Equ = TRUE;
- if (ParseResult[ASM_STRUCTURE])
- Settings.AsmPrf.Structure = TRUE;
- if (ParseResult[ASM_MACRO])
- Settings.AsmPrf.Macro = TRUE;
-
- if (ParseResult[RECURSIVELY])
- Settings.Recursively = TRUE;
- if (ParseResult[KEEPEMPTY])
- Settings.KeepEmpty = TRUE;
- if (ParseResult[UNRECOGAREDOCS])
- Settings.UnknownFiles = UNKNOWN_ARE_AUTODOCS;
- }
-
- if (ParseResult[TO])
- {
- if (!ParseResult[FROM])
- {
- if (InitialFile = AllocVec(strlen((STRPTR)ParseResult[TO]) + 1, NULL))
- strcpy(InitialFile, (STRPTR)ParseResult[TO]);
- } else
- LoadData((STRPTR)ParseResult[TO]);
- }
-
- if (!ParseResult[FROM])
- GoGUI();
- else if (ParseResult[TO])
- {
- /* Expand each wildcard (which can also be just a file) and generate index */
- ULONG count;
- STRPTR path;
- struct AnchorPath *fanchor;
-
- if (fanchor = AllocVec(sizeof(struct AnchorPath) + 256, MEMF_CLEAR))
- {
- fanchor->ap_Strlen = 256;
- for (count = 0; path = ((UBYTE **)ParseResult[FROM])[count]; count++)
- {
- if (!MatchFirst(path, fanchor))
- {
- do
- {
- STRPTR name;
-
- if (name = FullName(fanchor->ap_Buf))
- {
- if (fanchor->ap_Info.fib_DirEntryType < 0)
- IndexFile(name, "");
- else
- IndexRecursive(fanchor->ap_Buf, "");
- FreeVec(name);
- } else
- CloseAll(IoErr());
- } while (!MatchNext(fanchor));
- MatchEnd(fanchor);
- }
- }
- FreeVec(fanchor);
- SaveData((STRPTR)ParseResult[TO]);
- } else
- CloseAll(ERROR_NO_FREE_STORE);
- } else
- CloseAll(ERROR_REQUIRED_ARG_MISSING);
- } else
- CloseAll(IoErr());
- } else
- CloseAll(ERROR_NO_FREE_STORE);
- }
- CloseAll(0);
- }
- ///
-
- /// LoadSettings()
- void
- LoadSettings(STRPTR file)
- {
- BPTR fil;
-
- if (fil = Open(file, MODE_OLDFILE))
- {
- Read(fil, &Settings, sizeof(Settings));
- Close(fil);
- }
- }
- ///
- /// SaveSettings()
- void
- SaveSettings(STRPTR file)
- {
- BPTR fil;
-
- if (fil = Open(file, MODE_NEWFILE))
- {
- Write(fil, &Settings, sizeof(Settings));
- Close(fil);
- }
- }
- ///
-
- /// CloseAll(LONG error [, STRPTR errtxt])
- void
- CloseAll(LONG error, ...)
- {
- STRPTR errtxt;
- va_list args;
-
- va_start(args, error);
- errtxt = *(STRPTR *)args;
- va_end(args);
-
- FreeVec(InitialFile);
-
- if (Args)
- {
- FreeArgs(Args);
- FreeDosObject(DOS_RDARGS, Args);
- }
-
- ClearFileList();
-
- if (error)
- {
- UBYTE errortxt[80];
- static struct EasyStruct errreq = {
- sizeof(struct EasyStruct),
- 0,
- "GenerateIndex " VERSION " by Anders Melchiorsen",
- "%s\n(Error code #%ld)",
- "Quit"
- };
-
- if (error == ERROR_SPECIAL)
- {
- strcpy(errortxt, errtxt);
- errreq.es_TextFormat[2] = 0;
- } else
- Fault(error, "GenerateIndex", errortxt, 80);
-
- if (_WBMsg)
- EasyRequest(NULL, &errreq, NULL, errortxt, error);
- else
- {
- PutStr(errortxt);
- PutStr("\n");
- }
- }
-
- CloseLibrary(&ReqToolsBase->LibNode);
-
- _exit(error ? 5 : 0);
-
- _waitwbmsg(); /* Dummy reference; never actually called */
- }
- ///
-
- /// chkabort(void) -- disable DICE ^C check
- void
- chkabort(void)
- {
- return;
- }
- ///
-