📄 option.c
字号:
/* 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 + -