⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 option.c

📁 debug source code under unix platform.
💻 C
📖 第 1 页 / 共 4 页
字号:
/* Display the quick-reference help summary. */staticvoidshowoptions(void){    char **s, **t;    __mp_diag("Available options:\n\n");    for (s = options_help, t = s + 1; *s != NULL; s += 2, t += 2)        if (**s != '\0')        {            __mp_diag("    %s", *s);            if (*t != NULL)                __mp_diag("=<%s>", *t);            __mp_diag("\n");        }        else            __mp_diag("\t%s\n", *t);    __mp_diag("\n");}/* The main option parsing routine. */MP_GLOBALvoid__mp_parseoptions(infohead *h){    char *a, *f, *o, *p, *s, *t;    unsigned long d, m, n;    int i, l, q;    l = 0;    f = p = t = NULL;    if (((s = getenv(MP_OPTIONS)) == NULL) || (*s == '\0'))        return;    if (strlen(s) + 1 > sizeof(options))    {        __mp_error(ET_MAX, AT_MAX, NULL, 0, "%s: environment variable too "                   "long\n", MP_OPTIONS);        return;    }    /* We shouldn't modify the original string returned by getenv() since     * that would modify the environment, and it may be placed in read-only     * memory anyway.     */    strcpy(options, s);    s = options;    while (*s != '\0')    {        i = 0;        while (isspace(*s))            s++;        if (*s == '\0')            break;        if (*s != '=')        {            /* Scan the option keyword.             */            for (o = s, q = 0; ((q == 1) || !isspace(*s)) && (*s != '\0') &&                 (*s != '='); s++)                if (*s == '"')                {                    /* Remove any quotes from the keyword.                     */                    __mp_memcopy(s, s + 1, strlen(s));                    q = (q == 0) ? 1 : 0;                    s--;                }            if ((*s != '\0') && (*s != '='))            {                *s++ = '\0';                i = 1;            }        }        else            o = "";        if ((*s == '=') && (i == 0))        {            /* Scan the option value.             */            *s++ = '\0';            for (a = s, q = 0; ((q == 1) || !isspace(*s)) && (*s != '\0'); s++)                if (*s == '"')                {                    /* Remove any quotes from the value.                     */                    __mp_memcopy(s, s + 1, strlen(s));                    q = (q == 0) ? 1 : 0;                    s--;                }            if (*s != '\0')                *s++ = '\0';        }        else            a = "";        if (*o != '\0')        {            /* We now have an option keyword and possibly an associated             * value, so we can now check for valid keywords.             */            i = OE_UNRECOGNISED;            switch (toupper(*o))            {              case 'A':                if (matchoption(o, "ALLOCBYTE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else if (n > 0xFF)                        i = OE_BIGNUMBER;                    else                    {                        h->alloc.abyte = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "ALLOCSTOP"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->astop = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "ALLOWOFLOW"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_ALLOWOFLOW;                }                else if (matchoption(o, "AUTOSAVE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->prof.autosave = n;                        i = OE_RECOGNISED;                    }                break;              case 'C':                if (matchoption(o, "CHECK"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (!readrange(a, &m, &n, &d))                        i = OE_BADRANGE;                    else                    {                        h->lrange = m;                        h->urange = n;                        h->check = d;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "CHECKALL"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_CHECKALLOCS | FLG_CHECKREALLOCS |                                FLG_CHECKFREES | FLG_CHECKMEMORY;                }                else if (matchoption(o, "CHECKALLOCS"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_CHECKALLOCS;                }                else if (matchoption(o, "CHECKFORK"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_CHECKFORK;                }                else if (matchoption(o, "CHECKFREES"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_CHECKFREES;                }                else if (matchoption(o, "CHECKMEMORY"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_CHECKMEMORY;                }                else if (matchoption(o, "CHECKREALLOCS"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_CHECKREALLOCS;                }                break;              case 'D':                if (matchoption(o, "DEFALIGN"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if ((a[readnumber(a, (long *) &n, 1)] != '\0') ||                             (n == 0))                        i = OE_BADNUMBER;                    else if (n > h->alloc.heap.memory.page)                        i = OE_BIGNUMBER;                    else                    {                        h->alloc.heap.memory.align = __mp_poweroftwo(n);                        i = OE_RECOGNISED;                    }                break;              case 'E':                if (matchoption(o, "EDIT"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;#if TARGET == TARGET_UNIX                    __mp_diagflags &= ~FLG_LIST;                    __mp_diagflags |= FLG_EDIT;#endif /* TARGET */                }                break;              case 'F':                if (matchoption(o, "FAILFREQ"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->ffreq = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "FAILSEED"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->fseed = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "FREEBYTE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else if (n > 0xFF)                        i = OE_BIGNUMBER;                    else                    {                        h->alloc.fbyte = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "FREESTOP"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->fstop = n;                        i = OE_RECOGNISED;                    }                break;              case 'H':                if (matchoption(o, "HELP"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    l = 1;                }                else if (matchoption(o, "HTML"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    __mp_diagflags |= FLG_HTMLNEXT;                }                break;              case 'L':                if (matchoption(o, "LARGEBOUND"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        if (n == 0)                            h->prof.lbound = MP_LARGEBOUND;                        else                            h->prof.lbound = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "LEAKTABLE"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_LEAKTABLE;                }                else if (matchoption(o, "LIMIT"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->limit = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "LIST"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;#if TARGET == TARGET_UNIX                    __mp_diagflags &= ~FLG_EDIT;                    __mp_diagflags |= FLG_LIST;#endif /* TARGET */                }                else if (matchoption(o, "LOGALL"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_LOGALLOCS | FLG_LOGREALLOCS | FLG_LOGFREES |                                FLG_LOGMEMORY;                }                else if (matchoption(o, "LOGALLOCS"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_LOGALLOCS;                }                else if (matchoption(o, "LOGFILE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else                    {                        f = a;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "LOGFREES"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_LOGFREES;                }                else if (matchoption(o, "LOGMEMORY"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_LOGMEMORY;                }                else if (matchoption(o, "LOGREALLOCS"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -