Re: How about the argument ``-nosplash'' in ap_UnixApp.cpp

Ming-I Hsieh (mihs@wm28.csie.ncu.edu.tw)
Wed, 16 Jun 1999 19:22:14 +0800


<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
Jeff Hostetler wrote:
yes, we should probably do a parse at the very beginning
and probably set some App member variables or globals or
something and then let the splash code and the later code
which processes everything else to just reference them.

the reason that we have 2 distinct places which look thru
argv is historical.  originally, the only thing we did
with the command line was get the (single, optional)
filename -- and we didn't need it until all the class
registration and the initial window and all its widgets
were created -- this could take some time.

if we let the parse code populate a ut_hash or ut_alphahash
of the arguments (and their optional values) of the keywords
and a ut_vector of the filenames to load, then everything
should be fine.  these could be stored in XAP_App -- the
absolute base class for the application and then referenced
wherever....

and yes, let getopt do all the parsing dirty work in cross-
platform code....

thoughts ?? opinions ??
jeff

If we use getopt_long, I think we should check the argument, --nosplash, in
ParseCommandLine, and we should call _showSplash in ParseCommandLine,
not main.
Do we need an usage like: ?

gzip 1.2.4 (18 Aug 93)
usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...]
 -c --stdout      write on standard output, keep original files unchanged
 -d --decompress  decompress
 -f --force       force overwrite of output file and compress links
 -h --help        give this help
 -l --list        list compressed file contents
 -L --license     display software license
 -n --no-name     do not save or restore the original name and time stamp
 -N --name        save or restore the original name and time stamp
 -q --quiet       suppress all warnings
 -r --recursive   operate recursively on directories
 -S .suf  --suffix .suf     use suffix .suf on compressed files
 -t --test        test compressed file integrity
 -v --verbose     verbose mode
 -V --version     display version number
 -1 --fast        compress faster
 -9 --best        compress better
 file...          files to (de)compress. If none given, use standard input.

And what option do we need?
-s
-d
-l
-n
????? :)

-- following are a sample of ParseCommandLine() using getopt_long;
#include "getopt.h"
struct option longopts[] =
{
        {"script",      1, 0, 's'},
        {"dumpstrings", 0, 0, 'd'},
        {"lib",         1, 0, 'l'},
        {"nosplash",    0, 0, 'n'},
        {0,             0, 0,  0 }
};

void AP_UnixApp::ParseCommandLine(void)
{
        // parse the command line
        // <app> [--script <scriptname>]* [--dumpstrings]
        //       [--lib <AbiSuiteLibDirectory>] [<documentname>]*
 
        // TODO when we refactor the App classes, consider moving
        // TODO this to app-specific, cross-platform.

        // TODO replace this with getopt or something similar.
 
        // Unix puts the program name in argv[0], so [1] is the first argument.

        int k;
        int kWindowsOpened = 0;
        UT_Bool bShowSplash = UT_TRUE;

        while ((k = getopt_long(m_pArgs->m_argc, m_pArgs->m_argv, "s:dnl:",
                longopts, (int *)0)) != EOF) {
                switch (k) {
                case 's':
                        // [--script scriptname]
                        break;
                case 'd':
#ifdef DEBUG
                        {
                        AP_BuiltinStringSet * pBuiltinStringSet =
                                new AP_BuiltinStringSet(this,
                                AP_PREF_DEFAULT_StringSet);
                        pBuiltinStringSet->dumpBuiltinSet("EnUS.strings");
                        delete pBuiltinStringSet;
                        }
#endif
                        break;
                case 'n':
                        bShowSplash = UT_FALSE;
                        break;
                case 'l':
                        // [--lib <AbiSuiteLibDirectory>]
                        // we've already processed this when we initialized
                        // the App class
                        break;
                default:
                        UT_DEBUGMSG(("Unknown command line option [%s]\n",
                                m_pArgs->m_argv[optind]));
                        // TODO don't know if it has a following argument
                        //      or not -- assume not
                        break;
                }
        }

        AP_UnixFrame *pFirstUnixFrame = new AP_UnixFrame(this);
        pFirstUnixFrame->initialize();
        while (optind < m_pArgs->m_argc) {
                if (pFirstUnixFrame == NULL) {
                        pFirstUnixFrame = new AP_UnixFrame(this);
                        pFirstUnixFrame->initialize();
                        kWindowsOpened++;
                }
                if (pFirstUnixFrame->loadDocument(m_pArgs->m_argv[optind],
                        IEFT_Unknown)) {
                        pFirstUnixFrame = NULL;
                } else {
                        // A simple message box to tell user that we
                        // can't open a bogus pathname! :)
                        char message[2048];
                        g_snprintf(message, 2048,
                        "Cannot open file %s.", m_pArgs->m_argv[optind]);
                        messageBoxOK(message);
                }
                optind++;
        }

        if (pFirstUnixFrame != NULL) {
                if (kWindowsOpened == 0) {
                        pFirstUnixFrame->loadDocument(NULL, IEFT_Unknown);
                } else {
                        forgetFrame(pFirstUnixFrame);
                        delete pFirstUnixFrame;
                }
        }

        if (bShowSplash) _showSplash(NULL, NULL);
}



This archive was generated by hypermail 1.03b2.