summaryrefslogtreecommitdiffstats
path: root/makedev-1.4.1/makedev.c
diff options
context:
space:
mode:
Diffstat (limited to 'makedev-1.4.1/makedev.c')
-rw-r--r--makedev-1.4.1/makedev.c2296
1 files changed, 0 insertions, 2296 deletions
diff --git a/makedev-1.4.1/makedev.c b/makedev-1.4.1/makedev.c
deleted file mode 100644
index 59f16e0d3..000000000
--- a/makedev-1.4.1/makedev.c
+++ /dev/null
@@ -1,2296 +0,0 @@
-/*
- * makedev.c: Generate /dev entries
- *
- * Based on the MAKEDEV shell script, version 2.0, distributed with
- * util-linux 1.10 and written by Nick Holloway.
- *
- * A number of bugs were fixed, and some additional features added.
- * Written 10-Dec-94 by David A. Holland, dholland@husc.harvard.edu
- *
- * Copyright 1994, 1995. All rights reserved.
- * See the file LEGAL.NOTICE for conditions of redistribution.
- *
- * Bugs:
- * None known right now.
- *
- * History:
- *
- * Version 1.4a: Sun Feb 26 18:08:45 1995, faith@cs.unc.edu
- * Forced devinfo and makedev to be in /etc
- * Version 1.4: 15-Jan-95 Wrote man pages. Now reads DEVINFO.local.
- * Version 1.3: 31-Dec-94 Bug fixes. Added batches. Added omits.
- * Version 1.2: 11-Dec-94 Add configuration file parsing.
- * Version 1.1: 11-Dec-94 Distinguish block and character devices in the
- * table of major device numbers. Changed the name and format of the
- * update cache file to include the type. It appears that the old script
- * was broken in this regard.
- * Version 1.0: 10-Dec-94 Initial version.
- */
-
-static const char *version = "MAKEDEV-C version 1.4a";
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <pwd.h>
-#include <grp.h>
-#include <sys/stat.h>
-
-#define YES 1
-#define NO 0
-
-static int isverbose=NO; /* flag: print out what we do? */
-static int deletion=NO; /* flag: delete instead of create */
-static int donothing=NO; /* flag: don't actually do anything */
-
-/*
- * Proto for main operative function.
- */
-typedef enum { M_CREATE, M_OMIT } makeopts;
-static void make(const char *batch_or_grp_or_devname, makeopts);
-
-/*
- * Roll over and die.
- */
-static void crash(const char *msg) {
- fprintf(stderr, "MAKEDEV: %s\n", msg);
- exit(1);
-}
-
-/*
- * Print a warning.
- */
-static void warn(const char *format, ...) {
- va_list ap;
- va_start(ap, format);
- fprintf(stderr, "MAKEDEV: ");
- vfprintf(stderr, format, ap);
- fprintf(stderr, "\n");
- va_end(ap);
-}
-
-/*
- * Translate string name to uid.
- */
-static uid_t name2uid(const char *name) {
- struct passwd *p = getpwnam(name);
- if (!p) warn("undefined user: %s, using uid 0", name);
- return p ? p->pw_uid : 0; /* make things owned by root by default */
-}
-
-/*
- * Translate string name to gid.
- */
-static gid_t name2gid(const char *name) {
- struct group *g = getgrnam(name);
- if (!g) warn("undefined group: %s, using gid 0", name);
- return g ? g->gr_gid : 0; /* group 0 is a good default too */
-}
-
-/*
- * Proto for parser.
- */
-static void doparse(FILE *f, int filetype, const char *filename);
-
-/************************* device classes *************************/
-
-/*
- * A device class is a string attached to the device which tells us
- * what set of permissions and ownership should be used. This is the
- * table of classes.
- */
-
-typedef struct {
- const char *classname;
- const char *owner;
- const char *group;
- int mode;
-} devclass;
-
-#define MAXCLASSES 32
-static devclass classes[MAXCLASSES];
-static int nclasses=0;
-
-static void addclass(const char *name, const char *o, const char *g, int m) {
- if (nclasses>=MAXCLASSES) crash("out of space for device classes");
- classes[nclasses].classname = name;
- classes[nclasses].owner = o;
- classes[nclasses].group = g;
- classes[nclasses].mode = m;
- nclasses++;
- name2uid(o); /* check for undefined users/groups */
- name2gid(g);
-}
-
-static void loadclasses(void) {
- FILE *f = fopen("/etc/makedev.cfg", "r");
- if (!f) crash("can't find makedev.cfg");
- doparse(f, 4, "makedev.cfg");
- fclose(f);
-}
-
-/*
- * Return the index into the above table for a particular class name.
- */
-static int which_class(const char *name) {
- int i;
- for (i=0; i<nclasses; i++)
- if (!strcmp(classes[i].classname, name)) return i;
- return 0;
-}
-
-/*
- * Produce an "ls -l"-ish mode string.
- */
-static const char *modestring(int mode) {
- static char rv[12];
- int i,z;
- strcpy(rv, "rwxrwxrwx");
- for (i=8,z=1; i>=0; i--, z<<=1) if (!(mode&z)) rv[i]='-';
- return rv;
-}
-
-/*
- * Create (or delete, or update) a block or character device.
- */
-static void class_makedev(const char *name, const char *class,
- int major, int minor, char type) {
- int x = which_class(class), mode = classes[x].mode;
- const char *owner = classes[x].owner, *group = classes[x].group;
- if (isverbose) {
- if (deletion) printf("rm -f %s\n", name);
- else printf("%c%s 1 %-8s %-8s %3d, %3d for %s\n", type,
- modestring(mode), owner, group, major, minor, name);
- }
- if (donothing) return;
- if (unlink(name) && deletion) warn("Couldn't remove %s\n", name);
- if (!deletion) {
- dev_t q = (major<<8) | minor;
- if (mknod(name, type=='c' ? S_IFCHR : S_IFBLK, q) ||
- chown(name, name2uid(owner), name2gid(group)) ||
- chmod(name, mode)) {
- warn("couldn't create %s: %s", name, strerror(errno));
- }
- }
-}
-
-/************************* major number list *************************/
-
-/*
- * In Linux device major numbers can be allocated dynamically, so we go
- * look in /proc/devices to see what they are. This keeps track of things.
- */
-
-typedef struct {
- const char *procname;
- int flag;
-} majorentry;
-
-#define MAXMAJORS 256
-static majorentry cmajors[MAXMAJORS]; /* initialized to 0 */
-static majorentry bmajors[MAXMAJORS]; /* initialized to 0 */
-static int no_proc=0; /* true if we didn't find /proc/devices */
-
-/*
- * Store the name associated with a particular major device number.
- */
-static void set_major(const char *procname, int ischar, int num) {
- if (num<0 || num>255) {
- warn("warning: got bogus major number %d for %s", num, procname);
- return;
- }
- if (ischar) cmajors[num].procname=procname;
- else bmajors[num].procname=procname;
-}
-
-/*
- * Look up a major device number by name; return the default value
- * if provided. A default value of -1 implies the device is only
- * dynamic, and so if there's no entry we shouldn't even note its
- * existence.
- */
-static int get_major(const char *procname, int ischar, int defaalt) {
- int i;
- if (!procname) return defaalt;
- if (ischar) {
- for (i=0; i<MAXMAJORS; i++)
- if (cmajors[i].procname && !strcmp(cmajors[i].procname, procname))
- return i;
- }
- else {
- for (i=0; i<MAXMAJORS; i++)
- if (bmajors[i].procname && !strcmp(bmajors[i].procname, procname))
- return i;
- }
- return defaalt;
-}
-
-/*
- * Read /proc/devices.
- */
-static void setup_majors(void) {
- FILE *f = fopen("/proc/devices", "r");
- if (!f) {
- fprintf(stderr, "MAKEDEV: warning: can't read /proc/devices\n");
- no_proc = 1;
- return;
- }
- doparse(f, 1, "/proc/devices");
- fclose(f);
-}
-
-/************************** procname list *************************/
-
-/*
- * The names found in /proc/devices aren't usually quite the same
- * as the names we use. This is a mapping between the two namespaces.
- */
-typedef struct {
- const char *procname;
- const char *groupname;
-} namealias;
-
-#define MAXALIASES 100
-static namealias aliases[MAXALIASES];
-static int naliases=0;
-
-static void addalias(const char *procname, const char *groupname) {
- if (naliases>=MAXALIASES) crash("out of space for aliases");
- aliases[naliases].procname = procname;
- aliases[naliases].groupname = groupname;
- naliases++;
-}
-
-static void ignore_procname(const char *procname) {
- addalias(procname, NULL);
-}
-
-static const char *procnameof(const char *groupname) {
- int i;
- for (i=0; i<naliases; i++) if (!strcmp(groupname, aliases[i].groupname))
- return aliases[i].procname;
- return NULL;
-}
-
-static const char *groupnameof(const char *procname) {
- int i;
- for (i=0; i<naliases; i++) if (!strcmp(procname, aliases[i].procname))
- return aliases[i].groupname;
- return NULL;
-}
-
-/************************* batch list *************************/
-/*
- * Create a device "batch" - a bunch of devices or groups.
- * This is used for "generic" and automatically for disk entries.
- * (Disk entries for "hd" come up with groups hda, hdb, etc., but
- * "hd" itself needs to run these too.)
- */
-#define MAXTARGETS 32
-#define MAXBATCHES 16
-
-typedef struct {
- const char *name; /* name of batch */
- const char *targets[MAXTARGETS];
- int ntargets;
- int busy;
-} batch;
-
-static batch batches[MAXBATCHES];
-static int nbatches=0;
-
-/*
- * Start a new batch.
- */
-static batch *addbatch(const char *name) {
- batch *b;
- if (nbatches>=MAXBATCHES) crash("Out of space for batches");
- b = &batches[nbatches++];
- b->name = name;
- b->busy = NO;
- return b;
-}
-
-/*
- * Add something to a batch.
- */
-static batch *add2batch(batch *b, const char *target) {
- if (b->ntargets>=MAXTARGETS) {
- warn("Too many targets for batch %s (max %d)", b->name, MAXTARGETS);
- return b;
- }
- b->targets[b->ntargets++] = target;
- return b;
-}
-
-/*
- * Run a batch.
- */
-static void run_batch(const batch *b, makeopts m) {
- int i;
- for (i=0; i<b->ntargets; i++) make(b->targets[i], m);
-}
-
-/*
- * Try to run a batch; returns YES if it found one.
- */
-static int try_run_batch(const char *name, makeopts m) {
- int i;
- for (i=0; i<nbatches; i++) {
- if (!strcmp(name, batches[i].name)) {
- if (batches[i].busy) {
- warn("Found recursive batch definition for %s", batches[i].name);
- continue;
- }
- batches[i].busy=YES;
- run_batch(&batches[i], m);
- batches[i].busy=NO;
- return YES;
- }
- }
- return NO;
-}
-
-/************************* device list *************************/
-
-/*
- * Structure to remember the properties of an individual device.
- * NOTE: if the device is actually a symbolic link, the "class"
- * member is used to store the thing it should be linked to.
- */
-typedef struct {
- const char *name; /* file name to create */
- const char *grp; /* device "group" name (e.g. "busmice") */
- const char *class; /* device class ( -> owner and permissions) */
- int major, minor; /* device number */
- char type; /* 'c', 'b', or 'l' for symbolic link */
- int omit; /* don't make me if this is nonzero */
-} device;
-
-/*
- * Create a device (link or actual "special file") - special files are
- * passed on to class_makedev().
- */
-void makedev(device *d, makeopts m) {
- if (m==M_OMIT) {
- d->omit=1;
- }
- if (d->omit==1) return;
- if (d->type=='l') {
- if (isverbose) {
- if (deletion) printf("rm -f %s\n", d->name);
- else printf("lrwxrwxrwx %s -> %s\n", d->name, d->class);
- }
- if (donothing) return;
- if (unlink(d->name) && deletion) warn("Couldn't remove %s\n", d->name);
- if (!deletion) {
- if (symlink(d->class, d->name)) /* class holds thing pointed to */
- warn("couldn't link %s -> %s: %s", d->name, d->class, strerror(errno));
- }
- }
- else class_makedev(d->name, d->class, d->major, d->minor, d->type);
-}
-
-/*
- * Array of devices. We allocate it once from main(); it doesn't grow.
- * Should maybe make it growable sometime. This keeps track of all possible
- * devices. We build this thing first, and then create devices from it as
- * requested.
- */
-static device *devices = NULL;
-static int maxdevices, ndevices;
-
-/*
- * Allocate space for the device array.
- */
-static void allocate_devs(int nd) {
- devices = malloc(nd * sizeof(device));
- if (!devices) crash("Out of memory");
- ndevices = 0;
- maxdevices = nd;
-}
-
-/*
- * Check all the devices for having valid device classes.
- */
-static void check_classes(void) {
- int i;
- const char *q=NULL;
- for (i=0; i<ndevices; i++)
- if (devices[i].type!='l' && !devices[i].omit &&
- which_class(devices[i].class)<0) {
- if (!q || strcmp(q, devices[i].class)) {
- warn("Invalid device class %s for %s",
- devices[i].class, devices[i].name);
- q = devices[i].class;
- }
- devices[i].class = "default";
- }
-}
-
-/*
- * Create an entry in the device table for a single device.
- */
-static void init(const char *name, const char *grp, const char *class,
- int major, int minor, int type) {
- if (major < 0) return;
- if (!strchr("bcl", type)) {
- warn("invalid device type %c for %s (skipping)", type, name);
- return;
- }
- if (ndevices>=maxdevices) crash("out of space for devices");
- devices[ndevices].name = name;
- devices[ndevices].grp = grp;
- devices[ndevices].class = class;
- devices[ndevices].major = major;
- devices[ndevices].minor = minor;
- devices[ndevices].type = type;
- devices[ndevices].omit = 0;
- ndevices++;
-}
-
-/*
- * Create an entry for a symbolic link "device", such as /dev/fd
- * (which is a symbolic link to /proc/self/fd)
- */
-static void initlink(const char *name, const char *grp, const char *target) {
- init(name, grp, target, 0, 0, 'l');
-}
-
-/*
- * Init lots of devices. This creates a number of devices, numbered between
- * lo and hi. The idea is that "base" contains a %d or %x (or something like
- * that) in it which pulls in the number. The device group can also do this,
- * though this will in most cases not be useful. "baseminor" is the minor
- * number of the first device created.
- */
-static void initlots(const char *base, int lo, int hi, const char *grp,
- const char *class,
- int maj, int baseminor, int type) {
- char buf[32], gbuf[32];
- int i;
- if (maj<0) return;
- for (i=lo; i<hi; i++) {
- sprintf(buf, base, i);
- if (grp) sprintf(gbuf, grp, i); /* grp is permitted to contain a %d */
- init(strdup(buf), grp ? strdup(gbuf) : NULL, class,
- maj, baseminor+i-lo, type);
- }
-}
-
-/*
- * Init a whole (hard) disk's worth of devices - given `hd', it makes
- * hda1...hda8 through hdd1...hdd8 in one fell swoop. "low" and "high"
- * are the letters to use ('a' and 'd' for the previous example).
- * "nparts" is the number of partitions to create, ordinarily 8.
- * "maj" is the major device number; minmult is the multiplier for the
- * minor number. That is, if hda starts at 0, and hdb starts at 64, minmult
- * is 64.
- *
- * Note that it creates "hda", "hdb", etc. too, and puts things in the
- * groups "hda", "hdb", etc. as appropriate. The class is set to "disk".
- */
-static void initdisk(const char *base, int low, int high, int nparts,
- int maj, int minmult) {
- char buf[16], buf2[16];
- int i;
- batch *b;
- if (maj<0) return;
- if (low>=high) return;
- b = addbatch(base);
- for (i=low; i<=high; i++) {
- char *q;
- sprintf(buf, "%s%c", base, i);
- q = strdup(buf);
- init(q, q, "disk", maj, (i-low)*minmult, 'b');
- strcpy(buf2, buf);
- strcat(buf2, "%d");
- initlots(buf2, 1, nparts, buf, "disk", maj, (i-low)*minmult+1, 'b');
- add2batch(b, q);
- }
-}
-
-static void initdevs(void) {
- FILE *f = fopen("/etc/devinfo", "r");
- if (!f) crash("Can't find devinfo");
- doparse(f,3, "devinfo");
- fclose(f);
- f = fopen("/etc/devinfo.local", "r");
- if (!f) f = fopen("/usr/local/etc/devinfo.local", "r");
- if (f) {
- doparse(f,3, "devinfo.local");
- fclose(f);
- }
-}
-
-/************************** update *************************/
-
-/*
- * Call make() with our names for something that appeared in /proc/devices.
- */
-
-static void transmake(const char *procname, makeopts m) {
- const char *gname = groupnameof(procname);
- if (gname) make(gname, m);
-}
-
-/*
- * Update a device that appeared in MAKEDEV.cache. Whenever we update,
- * we save what we did into MAKEDEV.cache; this lets us avoid doing
- * them over the next time. We only do something if the device has
- * disappeared or the major number has changed.
- *
- * Note that this caching made the shell version go much faster (it took
- * around 15 seconds with the cache, vs. over a minute if the cache was
- * blown away.) For us, it still does, but it hardly matters: it shaves
- * one second off a two-second execution.
- *
- * Also note the old script used DEVICES instead of MAKEDEV.cache. We
- * changed because the old file didn't record whether something was
- * a block or character device; since the sets of numbers are independent,
- * this was bound to break.
- */
-static void update2(const char *name, int ischar, int major) {
- int now = get_major(name, ischar, -1);
- if (now<0) {
- deletion = 1; /* must have been zero if we're doing an update */
- transmake(name, M_CREATE);
- deletion = 0;
- }
- else if (now!=major) { /* oops, it moved; remake it */
- transmake(name, M_CREATE);
- if (ischar) cmajors[now].flag=1;
- else bmajors[now].flag=1;
- }
- else {
- if (ischar) cmajors[now].flag=1; /* unchanged; inhibit remaking it */
- else bmajors[now].flag=1; /* unchanged; inhibit remaking it */
- }
-}
-
-static void updatefromcache(const char *name, int major, int type) {
- update2(name, type=='c', major);
-}
-
-
-/*
- * Update. Read the information stored in MAKEDEV.cache from the last
- * update; fix anything that changed; then create any new devices that
- * weren't listed the last time. (We use the "flag" field in the
- * majors array to check this.) At that point, write out a new
- * cache file.
- */
-#define CACHEFILE "MAKEDEV.cache"
-
-static void update(void) {
- FILE *f;
- int i;
- if (no_proc) { warn("Couldn't read anything from /proc/devices"); return; }
- if (deletion) { warn("update and -d are incompatible"); return; }
- f = fopen(CACHEFILE, "r");
- if (f) {
- doparse(f, 2, CACHEFILE);
- fclose(f);
- }
- for (i=0; i<MAXMAJORS; i++) {
- if (cmajors[i].procname && !cmajors[i].flag) {
- transmake(cmajors[i].procname, M_CREATE);
- cmajors[i].flag=1;
- }
- if (bmajors[i].procname && !bmajors[i].flag) {
- transmake(bmajors[i].procname, M_CREATE);
- bmajors[i].flag=1;
- }
- }
- if (donothing) return;
- f = fopen(CACHEFILE, "w");
- if (f) {
- for (i=0; i<MAXMAJORS; i++) {
- if (cmajors[i].procname) fprintf(f, "%s %d char\n", cmajors[i].procname, i);
- if (bmajors[i].procname) fprintf(f, "%s %d block\n", bmajors[i].procname, i);
- }
- fclose(f);
- }
- else warn("warning: can't write MAKEDEV.cache");
-}
-
-/************************* work *************************/
-
-/*
- * Create (or delete, etc. according to flags) a device or device group.
- * The "generic" group is handled specially by recursing once.
- * "update" is handled specially; see update() below.
- * "local" issues a warning; people should use DEVINFO.local instead.
- */
-static void make(const char *what, makeopts m) {
- int i;
- if (!strcmp(what, "update")) {
- if (m!=M_CREATE) warn("update not compatible with those options");
- else update();
- }
- else if (!strcmp(what, "local")) {
- warn("The local target is obsolete.");
- }
- else if (!try_run_batch(what, m)) {
- int found=0;
- for (i=0; i<ndevices; i++) {
- if ((devices[i].grp && !strcmp(what, devices[i].grp)) ||
- !strcmp(what, devices[i].name)) {
- makedev(&devices[i], m);
- found = 1;
- }
- }
- if (!found) warn("unknown device or device group %s", what);
- }
-}
-
-/*
- * A major improvement over the shell version...
- */
-static void usage(void) {
- printf("MAKEDEV-C usage:\n");
- printf(" MAKEDEV-C [-vdcn] device [device...]\n");
- printf(" -v Verbose output\n");
- printf(" -d Remove specified devices\n");
- printf(" -c Create devices (default)\n");
- printf(" -n Don't actually do anything (implies -v)\n");
- printf(" -V Print version information\n");
- printf("\n");
-}
-
-/*
- * We should use getopt one of these days.
- */
-int main(int argc, char **argv) {
- int i,j, done=0;
- for (i=1; i<argc && argv[i][0]=='-' && !done; i++)
- for (j=1; argv[i][j] && !done; j++) switch(argv[i][j]) {
- case '-': done=1; break;
- case 'v': isverbose = 1; break;
- case 'd': deletion = 1; break;
- case 'c': deletion = 0; break;
- case 'n': donothing = 1; isverbose = 1; break;
- case 'h': usage(); exit(0);
- case 'V': printf("MAKEDEV-C: %s\n", version); exit(0);
- default: fprintf(stderr, "MAKEDEV-C: unknown flag %c\n", argv[i][j]);
- exit(1);
- }
- setup_majors(); /* read major device numbers from /proc */
- allocate_devs(1500); /* make space to hold devices */
- initdevs(); /* set up device structures */
- loadclasses(); /* load device classes from config file */
- check_classes(); /* make sure no devices have bogus classes */
- if (i==argc) warn("didn't do anything; try -h for help.");
- else for (; i<argc; i++) make(argv[i], M_CREATE);
- return 0;
-}
-
-
-
-/*
-
- AnaGram Parsing Engine
- Copyright (c) 1993, Parsifal Software.
- All Rights Reserved.
- This module may be copied and/or distributed at the discretion of the
- AnaGram licensee.
-
-*/
-
-
-
-#ifndef MAKEDEV_H
-#include "makedev.h"
-#endif
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
-#define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
-#define CONTEXT ((PCB).cs[(PCB).ssx])
-
-
-
-parse_pcb_type parse_pcb;
-#define PCB parse_pcb
-
-#line 698 "/usr/local/src/makedev/makedev.syn"
-/************************* parsing support *************************/
-
-/*
- * Don't use the built-in error printing.
- */
-#define SYNTAX_ERROR
-#define PARSER_STACK_OVERFLOW
-#define REDUCTION_TOKEN_ERROR
-
-static void doparse(FILE *f, int filetype, const char *filename) {
- char *x;
- int i=0, len;
- if (filetype<1 || filetype>4) crash("tried to parse a bad file type");
- if (filetype!=1) { /* /proc/devices won't stat intelligently */
- struct stat buf;
- if (fstat(fileno(f), &buf)) crash("fstat failed?!?");
- len = buf.st_size;
- }
- else len=1023;
- x = malloc(len+1);
- if (!x) crash("Out of memory");
-
- len = fread(x, 1, len, f); /* it shouldn't return a short count... */
- if (len<0) crash("fread failed?!?");
- x[len]=0;
-
- init_parse();
- PCB.input_code = filetype+'0';
- parse();
- PCB.column--; /* correct for the filetype token */
- while (!PCB.exit_flag) {
- PCB.input_code = x[i++];
- parse();
- }
- if (PCB.exit_flag == AG_SYNTAX_ERROR_CODE) {
- warn("syntax error: %s, line %d, column %d in file %s",
- PCB.error_message, PCB.line, PCB.column, filename);
- crash("Sorry, can't continue.");
- }
- else if (PCB.exit_flag != AG_SUCCESS_CODE) {
- crash("parser stack overflow!");
- }
-}
-
-#define STRINGSIZE 8192
-static char string_space[STRINGSIZE];
-static int stringptr=0;
-
-static const char *string_start(int c) {
- if (stringptr>=STRINGSIZE) crash("out of string space");
- return string_space[stringptr]=c, string_space+stringptr++;
-}
-
-static void string_push(int c) {
- if (stringptr>=STRINGSIZE) crash("out of string space");
- string_space[stringptr++] = c;
-}
-
-static void string_finish(void) {
- string_push(0);
-}
-
-
-#line 790 "makedev.c"
-#line 840 "/usr/local/src/makedev/makedev.syn"
- static const char *cur_group=NULL, *cur_class=NULL;
- static int cur_type;
- static int cur_maj=0, cur_min=0, cur_bot=0, cur_top=0, ishex=0;
-
- static void dhsproc(const char *g, const char *p, int t, int m) {
- cur_group = g;
- cur_type = t;
- cur_maj = get_major(p, (t=='c'), m);
- cur_min = 0;
- cur_bot = cur_top = ishex = 0;
- if (p) addalias(p,g);
- }
-
- static void newdev(const char *n) {
- if (cur_maj<0) return;
- init(n, cur_group, cur_class, cur_maj, cur_min, cur_type);
- }
- static void devrange(const char *n, const char *n1) {
- char temp[32];
- if (cur_maj<0) return;
- sprintf(temp, "%s%%d%s", n, n1 ? n1 : "");
- initlots(temp, cur_bot, cur_top, cur_group, cur_class,
- cur_maj, cur_min, cur_type);
- }
- static void doinitlink(const char *src, const char *tg) {
- if (cur_maj>=0) initlink(src, cur_group, tg);
- }
-
-#line 820 "makedev.c"
-#ifndef CONVERT_CASE
-#define CONVERT_CASE(c) (c)
-#endif
-#ifndef TAB_SPACING
-#define TAB_SPACING 8
-#endif
-
-#define ag_rp_1(n, s) (set_major(s,YES,n))
-
-#define ag_rp_2(n, s) (set_major(s,NO,n))
-
-#define ag_rp_3(n, maj, t) (updatefromcache(n,maj,t))
-
-#define ag_rp_4() ('b')
-
-#define ag_rp_5() ('c')
-
-#define ag_rp_8(n, i) (add2batch(addbatch(n), i))
-
-#define ag_rp_9(b, i) (add2batch(b,i))
-
-#define ag_rp_10(n) (n)
-
-#define ag_rp_11(n) (ignore_procname(n))
-
-#define ag_rp_12(t, g, p) (dhsproc(g,p,t,-1))
-
-#define ag_rp_13(t, g, p, m) (dhsproc(g,p,t,m))
-
-#define ag_rp_14(t, g, m) (dhsproc(g,NULL,t,m))
-
-#define ag_rp_15(classname) (classname)
-
-#define ag_rp_16(c, min) ((cur_class=c, cur_min=min))
-
-#define ag_rp_17(a, b) (cur_bot=a, cur_top=b, ishex=0)
-
-#define ag_rp_18(a, b) (cur_bot=a, cur_top=b, ishex=1)
-
-#define ag_rp_19(n) (newdev(n))
-
-#define ag_rp_20(n, n1) (devrange(n,n1))
-
-#define ag_rp_21(n) (devrange(n,NULL))
-
-#define ag_rp_22(n, a, b, p, m) (initdisk(n, a, b, p, cur_maj, m))
-
-#define ag_rp_23(n, tg) (doinitlink(n, tg))
-
-#define ag_rp_24(n) (n)
-
-#define ag_rp_25(n) (n)
-
-#define ag_rp_26(n) (n)
-
-#define ag_rp_27(n, o, g, m) (addclass(n,o,g,m))
-
-#define ag_rp_28(n) (make(n, M_OMIT))
-
-#define ag_rp_29(n) (make(n, M_OMIT))
-
-#define ag_rp_30(n) (n)
-
-#define ag_rp_31(s) (string_finish(), s)
-
-#define ag_rp_32(s) (s)
-
-#define ag_rp_33(c) (string_start(c))
-
-#define ag_rp_34(s, c) (string_push(c), s)
-
-#define ag_rp_35(s) (string_finish(), s)
-
-#define ag_rp_36(c) (string_start(c))
-
-#define ag_rp_37(s, c) (string_push(c), s)
-
-#define ag_rp_38(c) (c)
-
-#define ag_rp_39() ('\\')
-
-#define ag_rp_40() ('"')
-
-#define ag_rp_41(d) (d-'0')
-
-#define ag_rp_42(n, d) (n*10 + d-'0')
-
-#define ag_rp_43(d) (d)
-
-#define ag_rp_44(n, d) (16*n+d)
-
-#define ag_rp_45(d) (d)
-
-#define ag_rp_46(n, d) (16*n+d)
-
-#define ag_rp_47(d) (d-'0')
-
-#define ag_rp_48(d) (10 + (d&7))
-
-#define ag_rp_49(d) (d-'0')
-
-#define ag_rp_50(n, d) (n*8+d-'0')
-
-#define ag_rp_51(x, t) (x+t)
-
-#define ag_rp_52(x, t) (x-t)
-
-#define ag_rp_53(t, f) (t*f)
-
-#define ag_rp_54(f) (-f)
-
-#define ag_rp_55(x) (x)
-
-
-#define READ_COUNTS
-#define WRITE_COUNTS
-static parse_vs_type ag_null_value;
-#define V(i,t) (*(t *) (&(PCB).vs[(PCB).ssx + i]))
-#define VS(i) (PCB).vs[(PCB).ssx + i]
-
-#ifndef GET_CONTEXT
-#define GET_CONTEXT CONTEXT = (PCB).input_context
-#endif
-
-typedef enum {
- ag_action_1,
- ag_action_2,
- ag_action_3,
- ag_action_4,
- ag_action_5,
- ag_action_6,
- ag_action_7,
- ag_action_8,
- ag_action_9,
- ag_action_10,
- ag_action_11,
- ag_action_12
-} ag_parser_action;
-
-static int ag_ap;
-
-
-
-static const unsigned char ag_rpx[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
- 0, 0, 0, 3, 4, 5, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 42, 43, 44,
- 45, 46, 47, 48, 0, 49, 50, 0, 51, 0, 0, 52, 53
-};
-
-static unsigned char ag_key_itt[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-static unsigned short ag_key_pt[] = {
- 1,121, 1,122, 1,125, 1,126, 1,138, 1,139,0
-};
-
-static unsigned char ag_key_ch[] = {
- 0, 47,255, 42,255, 42, 47,255, 88,120,255, 97,108,255,104,108,255, 45,
- 47, 48, 66, 67, 98, 99,105,111,255, 42, 47,255, 47, 99,111,255, 42, 47,
- 255, 97,108,255, 47, 98, 99,105,255, 42, 47,255, 47,255, 42, 47,255, 47,
- 66, 67,255, 47, 99,111,255, 97,108,255, 47, 98, 99,105,255, 47,255, 47,
- 66, 67,255, 42, 47,255, 97,108,255,104,108,255, 47, 66, 67, 98, 99,105,
- 111,255, 97,108,255,104,108,255, 47, 66, 67, 98, 99,105,111,255, 99,111,
- 255, 97,108,255, 98, 99,105,255, 66, 67,255, 42, 47,255, 45, 47,255, 88,
- 120,255, 47, 48,255, 42, 47,255, 47, 98, 99,255, 98, 99,255, 42, 47,255,
- 97,108,255,104,108,255, 47, 98, 99,105,111,255, 45,255, 88,120,255, 48,
- 255
-};
-
-static unsigned char ag_key_act[] = {
- 0,3,4,3,4,0,0,4,0,0,4,7,7,4,7,7,4,3,2,2,3,3,2,2,7,7,4,0,0,4,2,7,7,4,0,
- 0,4,7,7,4,2,2,7,7,4,0,0,4,2,4,0,0,4,2,3,3,4,3,7,7,4,7,7,4,3,2,7,7,4,3,
- 4,3,3,3,4,0,0,4,7,7,4,7,7,4,2,3,3,2,2,7,7,4,7,7,4,7,7,4,3,3,3,2,2,7,7,
- 4,7,7,4,7,7,4,2,7,7,4,3,3,4,0,0,4,3,2,4,0,0,4,3,2,4,0,0,4,2,7,7,4,7,7,
- 4,0,0,4,7,7,4,7,7,4,2,2,2,7,7,4,3,4,0,0,4,2,4
-};
-
-static unsigned char ag_key_parm[] = {
- 0, 80, 0, 84, 0, 80, 86, 0,145,144, 0, 6, 0, 0, 2, 8, 0,137,
- 0, 0,118,117, 0, 0, 4, 10, 0, 80, 86, 0, 0, 8, 10, 0, 80, 86,
- 0, 6, 0, 0, 0, 0, 2, 4, 0, 80, 86, 0, 0, 0, 80, 86, 0, 0,
- 118,117, 0, 86, 8, 10, 0, 6, 0, 0, 86, 0, 2, 4, 0, 86, 0, 86,
- 118,117, 0, 80, 86, 0, 6, 0, 0, 2, 8, 0, 0,118,117, 0, 0, 4,
- 10, 0, 6, 0, 0, 2, 8, 0, 86,118,117, 0, 0, 4, 10, 0, 8, 10,
- 0, 6, 0, 0, 0, 2, 4, 0,118,117, 0, 80, 86, 0,137, 0, 0,145,
- 144, 0, 80, 0, 0, 80, 86, 0, 0, 0, 2, 0, 0, 2, 0, 80, 86, 0,
- 6, 0, 0, 2, 8, 0, 0, 0, 0, 4, 10, 0,137, 0,145,144, 0, 0,
- 0
-};
-
-static unsigned short ag_key_jmp[] = {
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 38, 42, 0, 46, 49, 0, 4,
- 5, 8, 6, 20, 11, 14, 53, 59, 0, 0, 0, 0, 27, 63, 68, 0, 0, 0,
- 0, 72, 76, 0, 34, 37, 80, 84, 0, 0, 0, 0, 45, 0, 0, 0, 0, 50,
- 90,104, 0,122,124,129, 0,135,139, 0,133, 61,143,147, 0,153, 0,155,
- 157,171, 0, 0, 0, 0,221,225, 0,229,232, 0, 75,189,203, 78, 81,236,
- 242, 0,280,284, 0,288,291, 0,246,248,262, 92, 95,295,301, 0,305,310,
- 0,314,318, 0,109,322,326, 0,332,346, 0, 0, 0, 0,364,119, 0, 0,
- 0, 0,366,125, 0, 0, 0, 0,131,368,373, 0,377,382, 0, 0, 0, 0,
- 386,390, 0,394,397, 0,141,144,147,401,407, 0,411, 0, 0, 0, 0,158,
- 0
-};
-
-static unsigned short ag_key_index[] = {
- 1, 3, 17, 0, 3, 3, 30, 40, 48, 53, 57, 64, 69, 71, 0, 0, 84, 98,
- 106,112, 0,116, 0, 1, 1, 0, 0,106, 48, 48, 48, 48, 1, 1, 0, 0,
- 0, 69,112, 0,122, 48, 0, 0, 48, 48, 69, 69,116, 48, 69, 69, 0,128,
- 0, 0, 0, 69, 0, 69, 0, 0,134,138, 0, 0, 0,128, 0, 0, 69, 48,
- 69, 0,150, 64, 0,156, 0, 69, 0,116, 0,116, 69, 0, 0, 0, 1, 0,
- 0, 69, 69, 0, 1, 0,128,161, 0, 0, 0, 0, 0, 69, 69, 0, 57, 0,
- 0, 0, 69, 0, 64, 69, 1, 0, 1, 1, 0, 0, 0, 0, 0,161, 64, 48,
- 69, 69, 48, 0,128, 0, 48, 0, 0,161,161, 69, 69, 69, 69, 0, 0, 0,
- 0, 0,128,161,161,128,161, 1, 0, 69, 69, 0, 1, 0, 69, 0
-};
-
-static unsigned char ag_key_ends[] = {
-42,0, 47,0, 62,0, 108,111,99,107,32,100,101,118,105,99,101,115,58,0,
-104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,58,0,
-116,99,104,0, 111,99,107,0, 97,114,0, 97,115,115,0,
-103,110,111,114,101,0, 109,105,116,0, 108,97,115,115,0,
-109,105,116,0, 116,99,104,0, 111,99,107,0, 104,97,114,0,
-103,110,111,114,101,0, 108,111,99,107,32,100,101,118,105,99,101,115,58,0,
-104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,58,0,
-47,0, 108,97,115,115,0, 109,105,116,0, 47,0, 116,99,104,0,
-111,99,107,0, 104,97,114,0, 103,110,111,114,101,0, 47,0, 47,0,
-108,111,99,107,32,100,101,118,105,99,101,115,58,0,
-104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,58,0,
-108,111,99,107,32,100,101,118,105,99,101,115,58,0,
-104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,58,0,
-116,99,104,0, 111,99,107,0, 97,114,0, 97,115,115,0,
-103,110,111,114,101,0, 109,105,116,0, 47,0,
-108,111,99,107,32,100,101,118,105,99,101,115,58,0,
-104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,58,0,
-116,99,104,0, 111,99,107,0, 97,114,0, 97,115,115,0,
-103,110,111,114,101,0, 109,105,116,0, 108,97,115,115,0,
-109,105,116,0, 116,99,104,0, 111,99,107,0, 104,97,114,0,
-103,110,111,114,101,0, 108,111,99,107,32,100,101,118,105,99,101,115,58,0,
-104,97,114,97,99,116,101,114,32,100,101,118,105,99,101,115,58,0,
-62,0, 42,0, 108,111,99,107,0, 104,97,114,0, 108,111,99,107,0,
-104,97,114,0, 116,99,104,0, 111,99,107,0, 97,114,0, 97,115,115,0,
-103,110,111,114,101,0, 109,105,116,0, 62,0,
-};
-#define AG_TCV(x) (((int)(x) >= -1 && (int)(x) <= 255) ? ag_tcv[(x) + 1] : 0)
-
-static const unsigned char ag_tcv[] = {
- 18, 18,152,152,152,152,152,152,152,152,150, 93,152,152,150,152,152,152,
- 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,151,153, 95,
- 87,153,153,153,153,130,128,149,148,127,133,153,135,154,113,114,115,116,
- 154,154,154,155,155,131,153,153,129,153,153,153,156,156,156,156,156,156,
- 157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
- 157,157,134, 99,132,153,157,153,156,119,120,156,156,156,157,157,157,157,
- 157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,124,153,
- 123,153,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 152,152,152,152,152
-};
-
-#ifndef SYNTAX_ERROR
-#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
- (PCB).error_message, (PCB).line, (PCB).column)
-#endif
-
-#ifndef FIRST_LINE
-#define FIRST_LINE 1
-#endif
-
-#ifndef FIRST_COLUMN
-#define FIRST_COLUMN 1
-#endif
-
-
-#ifndef PARSER_STACK_OVERFLOW
-#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
- "\nParser stack overflow, line %d, column %d\n",\
- (PCB).line, (PCB).column);}
-#endif
-
-#ifndef REDUCTION_TOKEN_ERROR
-#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
- "\nReduction token error, line %d, column %d\n", \
- (PCB).line, (PCB).column);}
-#endif
-
-
-typedef enum
- {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
- ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
-
-
-static void ag_track(void) {
- int ag_k = 0;
- while (ag_k < (PCB).rx) {
- int ag_ch = (PCB).lab[ag_k++];
- switch (ag_ch) {
- case '\n':
- (PCB).column = 1, (PCB).line++;
- case '\r':
- case '\f':
- break;
- case '\t':
- (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
- break;
- default:
- (PCB).column++;
- }
- }
- ag_k = 0;
- while ((PCB).rx < (PCB).fx) (PCB).lab[ag_k++] = (PCB).lab[(PCB).rx++];
- (PCB).fx = ag_k;
- (PCB).rx = 0;
-}
-
-
-static void ag_prot(void) {
- int ag_k = 38 - ++(PCB).btsx;
- if (ag_k <= (PCB).ssx) {
- (PCB).exit_flag = AG_STACK_ERROR_CODE;
- PARSER_STACK_OVERFLOW;
- return;
- }
- (PCB).bts[(PCB).btsx] = (PCB).sn;
- (PCB).bts[ag_k] = (PCB).ssx;
- (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
- (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
-}
-
-static void ag_undo(void) {
- if ((PCB).drt == -1) return;
- while ((PCB).btsx) {
- int ag_k = 38 - (PCB).btsx;
- (PCB).sn = (PCB).bts[(PCB).btsx--];
- (PCB).ssx = (PCB).bts[ag_k];
- (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
- (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
- }
- (PCB).token_number = (parse_token_type) (PCB).drt;
- (PCB).ssx = (PCB).dssx;
- (PCB).sn = (PCB).dsn;
- (PCB).drt = -1;
-}
-
-
-static const unsigned char ag_tstt[] = {
-151,150,80,0,2,111,112,
-157,156,155,154,153,152,151,150,149,148,135,134,133,132,131,130,129,128,127,
- 124,123,120,119,116,115,114,113,99,95,93,87,0,82,83,
-151,150,80,0,2,
-116,115,114,113,0,5,6,8,10,12,
-157,156,155,154,153,152,151,150,149,148,135,134,133,132,131,130,129,128,127,
- 124,123,120,119,116,115,114,113,99,95,93,87,0,
-84,0,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-139,138,93,87,86,0,3,13,14,15,85,88,92,140,
-126,125,122,121,120,119,93,87,86,0,3,11,14,15,85,88,92,140,
-157,156,133,120,119,95,93,87,86,0,3,9,14,15,85,88,92,140,
-118,117,93,87,86,0,3,7,14,15,85,88,92,140,
-157,156,155,154,153,152,151,150,149,148,135,134,133,132,131,130,129,128,127,
- 124,123,120,119,116,115,114,113,99,95,87,18,0,90,91,
-93,0,
-151,150,80,0,2,111,112,
-157,156,155,154,139,138,133,127,126,125,123,122,121,120,119,118,117,116,115,
- 114,113,95,93,87,86,18,0,3,88,92,140,
-139,138,0,69,70,71,72,73,75,
-126,125,122,121,120,119,0,29,30,31,32,33,34,35,36,42,45,
-157,156,133,120,119,95,0,1,4,26,27,28,141,142,
-118,117,0,16,17,19,22,
-157,156,155,154,153,152,151,150,149,148,135,134,133,132,131,130,129,128,127,
- 124,123,120,119,116,115,114,113,99,95,87,18,0,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-157,156,133,124,120,119,95,0,1,4,26,37,141,142,
-157,156,133,120,119,95,0,1,4,26,141,142,
-139,138,18,0,69,71,72,73,75,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-130,0,50,
-157,156,133,120,119,95,0,1,4,26,46,141,142,
-124,0,37,
-157,156,133,124,120,119,95,93,87,86,0,3,14,15,37,85,88,92,140,
-126,125,122,121,120,119,18,0,29,30,31,32,33,34,36,42,45,
-157,156,155,154,153,151,149,148,135,134,133,132,131,130,129,128,127,124,123,
- 120,119,116,115,114,113,99,87,0,96,97,
-151,150,80,0,2,111,112,
-157,156,155,154,151,150,133,120,119,116,115,114,113,80,0,2,111,112,
-155,154,116,115,114,113,0,25,100,
-157,156,133,120,119,95,18,0,1,4,26,27,141,142,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-87,86,0,3,14,85,88,92,140,
-87,86,0,3,14,85,88,92,140,
-118,117,18,0,16,19,22,
-151,150,80,0,2,111,112,
-157,156,133,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-87,86,0,3,14,85,88,92,140,
-131,0,57,
-151,150,80,0,2,111,112,
-157,156,133,120,119,95,0,1,4,26,51,141,142,
-124,0,37,
-127,123,0,41,48,49,
-157,156,133,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-157,156,133,120,119,95,0,1,4,26,38,65,141,142,
-157,156,133,123,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-99,95,0,
-157,156,155,154,153,151,149,148,135,134,133,132,131,130,129,128,127,124,123,
- 120,119,116,115,114,113,99,95,87,0,97,
-151,150,80,0,2,111,112,
-155,154,122,121,120,119,116,115,114,113,0,29,30,31,32,33,100,
-155,154,116,115,114,113,0,23,24,25,100,
-155,154,116,115,114,113,0,20,21,25,100,
-157,156,133,120,119,95,0,1,4,26,76,77,141,142,
-151,150,80,0,2,111,112,
-157,156,133,120,119,95,0,1,4,26,141,142,
-129,127,0,48,52,
-157,156,133,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-151,150,80,0,2,111,112,
-157,156,133,123,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-157,156,133,120,119,95,0,1,4,26,47,141,142,
-151,150,80,0,2,111,112,
-126,125,122,121,120,119,93,87,86,18,0,3,14,15,85,88,92,140,
-157,156,133,120,119,95,0,1,4,26,43,44,141,142,
-137,134,130,0,50,55,56,59,60,68,
-157,156,133,120,119,95,0,1,4,26,38,39,40,65,141,142,
-87,86,0,3,14,85,88,92,140,
-157,156,155,154,133,120,119,116,115,114,113,95,0,1,4,26,100,141,142,
-155,154,116,115,114,113,0,23,25,100,
-157,156,155,154,133,120,119,116,115,114,113,95,0,1,4,26,100,141,142,
-155,154,116,115,114,113,0,20,25,100,
-157,156,133,127,123,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-157,156,133,123,120,119,95,0,1,4,26,41,76,141,142,
-157,156,133,120,119,95,0,1,4,26,141,142,
-155,154,116,115,114,113,0,25,100,
-151,150,80,0,2,111,112,
-157,156,133,120,119,95,0,1,4,26,53,141,142,
-157,156,133,120,119,95,0,1,4,26,47,141,142,
-157,156,133,127,123,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-157,156,133,127,123,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-157,156,133,123,120,119,95,0,1,4,26,41,43,141,142,
-151,150,80,0,2,111,112,
-157,156,133,120,119,95,0,1,4,26,141,142,
-151,150,80,0,2,111,112,
-157,156,155,154,145,144,133,120,119,116,115,114,113,0,25,63,66,100,101,102,
- 103,
-157,156,133,130,120,119,95,0,1,4,26,50,55,56,65,141,142,
-157,156,133,120,119,95,0,1,4,26,141,142,
-131,0,57,
-157,156,133,120,119,95,0,1,4,26,38,65,141,142,
-123,0,41,
-87,86,0,3,14,85,88,92,140,
-87,86,0,3,14,85,88,92,140,
-127,0,48,49,
-139,138,93,87,86,18,0,3,14,15,85,88,92,140,
-154,116,115,114,113,0,74,78,106,
-155,154,128,116,115,114,113,0,54,100,
-128,127,0,48,54,
-157,156,133,127,123,120,119,95,93,87,86,0,3,14,15,85,88,92,140,
-127,0,48,49,
-126,125,122,121,120,119,93,87,86,18,0,3,14,15,85,88,92,140,
-87,86,0,3,14,85,88,92,140,
-151,150,80,0,2,111,112,
-133,0,61,
-151,150,80,0,2,111,112,
-151,150,80,0,2,111,112,
-156,155,154,120,119,116,115,114,113,0,100,104,105,
-156,155,154,133,120,119,116,115,114,113,0,61,100,104,105,
-155,154,133,116,115,114,113,0,61,100,
-130,0,50,55,56,
-128,0,54,
-155,154,145,144,133,130,116,115,114,113,0,25,50,58,61,63,100,101,102,103,
- 107,109,
-126,125,122,121,120,119,93,87,86,18,0,3,14,15,85,88,92,140,
-151,150,80,0,2,111,112,
-154,116,115,114,113,0,106,
-87,86,0,3,14,85,88,92,140,
-151,150,80,0,2,111,112,
-155,154,116,115,114,113,0,25,100,
-151,150,80,0,2,111,112,
-157,156,133,120,119,0,66,
-151,150,80,0,2,111,112,
-156,155,154,120,119,116,115,114,113,0,64,100,104,105,
-155,154,116,115,114,113,0,25,100,
-155,154,145,144,133,130,116,115,114,113,0,25,50,58,61,63,100,101,102,103,
- 107,109,
-155,154,145,144,133,130,116,115,114,113,0,25,50,61,63,100,101,102,103,109,
-156,155,154,120,119,116,115,114,113,0,100,104,105,
-155,154,116,115,114,113,0,100,
-149,0,110,
-148,133,87,86,0,3,14,61,85,88,92,108,140,
-155,154,128,116,115,114,113,0,54,100,
-132,0,62,
-156,155,154,132,120,119,116,115,114,113,0,62,100,104,105,
-155,154,132,116,115,114,113,0,62,100,
-148,133,128,0,54,61,108,
-151,150,80,0,2,111,112,
-155,154,145,144,133,130,116,115,114,113,0,25,50,61,63,100,101,102,103,109,
-155,154,145,144,133,130,116,115,114,113,0,25,50,61,63,100,101,102,103,107,
- 109,
-151,150,80,0,2,111,112,
-155,154,145,144,133,130,116,115,114,113,0,25,50,61,63,100,101,102,103,107,
- 109,
-151,150,80,0,2,111,112,
-155,154,116,115,114,113,0,25,100,
-149,0,110,
-149,0,110,
-155,154,135,116,115,114,113,0,67,100,
-151,150,80,0,2,111,112,
-155,154,116,115,114,113,0,25,100,
-155,154,116,115,114,113,87,86,0,3,14,85,88,92,100,140,
- 0
-};
-
-
-static unsigned char ag_astt[1821] = {
- 1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,8,1,1,9,9,1,5,3,1,1,1,1,7,0,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
- 9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,7,1,1,1,5,1,1,3,1,1,1,5,1,1,3,1,1,1,5,1,1,3,
- 1,1,1,5,1,1,3,8,8,8,1,1,7,1,3,1,1,1,1,1,1,8,8,8,8,8,8,8,1,1,7,1,3,1,1,1,1,
- 1,1,8,8,8,8,8,8,8,1,1,7,1,3,1,1,1,1,1,1,8,8,8,1,1,7,1,3,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,3,3,7,1,1,1,5,
- 1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,1,1,5,7,3,1,1,1,1,1,7,
- 1,1,1,1,1,1,1,1,1,1,1,1,7,1,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,7,2,2,1,1,1,1,1,
- 1,1,7,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
- 9,5,1,1,1,5,1,1,3,1,1,1,5,1,1,3,2,2,2,1,2,2,1,7,2,2,1,1,1,1,2,2,2,2,2,1,7,
- 2,2,1,1,1,1,1,3,7,3,3,3,1,1,1,1,1,5,1,1,3,1,1,1,5,1,1,3,1,1,1,5,1,1,3,1,1,
- 1,5,1,1,3,1,1,1,5,1,1,3,1,1,1,5,1,1,3,1,7,1,2,2,2,2,2,1,7,2,2,1,1,1,1,1,7,
- 1,8,8,8,1,8,8,8,8,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,1,2,2,2,2,3,1,1,1,
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,7,1,2,1,1,1,5,1,1,3,
- 10,10,10,10,1,1,10,10,10,10,10,10,10,1,5,1,1,3,1,1,1,1,1,1,7,1,2,2,2,2,2,2,
- 1,3,7,2,2,1,3,1,1,1,1,1,5,1,1,3,1,1,1,5,1,1,3,1,1,8,1,1,1,1,1,1,1,1,8,1,1,
- 1,1,1,1,1,1,3,7,3,1,1,1,1,1,5,1,1,3,8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,1,1,
- 8,1,2,1,1,1,1,1,7,1,1,1,1,5,1,1,3,2,2,2,2,2,1,7,2,2,2,1,1,1,1,7,1,1,1,8,1,
- 1,1,8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,2,2,2,2,2,1,7,2,2,2,3,1,1,1,8,8,8,8,
- 8,8,8,8,1,1,7,1,1,1,1,1,1,1,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 2,2,2,2,2,1,2,2,7,2,1,1,1,5,1,1,3,1,1,1,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,1,1,
- 1,1,1,7,1,1,1,2,1,1,1,1,1,1,7,1,1,1,2,2,2,2,2,2,1,7,2,2,1,1,1,1,1,1,1,1,5,
- 1,1,3,2,2,2,2,2,1,7,2,2,1,1,1,1,1,7,1,1,8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,
- 1,1,1,5,1,1,3,5,5,5,5,5,5,5,8,1,1,7,1,3,3,1,1,1,1,2,2,2,2,2,1,7,2,2,2,1,1,
- 1,1,1,1,5,1,1,3,5,5,5,5,5,5,8,1,1,5,7,1,3,3,1,1,1,1,2,2,2,2,2,1,7,2,2,1,1,
- 1,1,1,1,1,1,7,1,1,2,1,1,1,2,2,2,2,2,1,8,2,2,2,1,1,1,1,1,1,1,1,8,1,2,1,1,1,
- 1,2,2,1,1,2,2,2,1,1,1,1,1,7,2,2,1,2,1,1,1,1,1,1,1,1,5,3,1,2,2,2,1,1,2,2,2,
- 1,1,1,1,1,7,2,2,1,2,1,1,1,1,1,1,1,1,5,3,1,2,8,8,8,8,8,8,8,8,8,1,1,7,1,1,1,
- 1,1,1,1,2,2,2,1,2,2,1,7,2,2,1,1,3,1,1,2,2,2,2,2,1,7,2,2,1,1,1,1,1,1,1,1,1,
- 7,1,2,1,1,1,5,1,1,3,2,2,2,2,2,1,7,2,2,2,1,1,1,2,2,2,2,2,1,7,2,2,2,1,1,1,5,
- 5,5,5,5,5,5,5,8,1,1,7,1,2,2,1,1,1,1,8,8,8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,
- 2,2,2,1,2,2,1,7,2,2,1,1,3,1,1,1,1,1,5,1,1,3,2,2,2,2,2,1,7,2,2,1,1,1,1,1,1,
- 5,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,2,1,1,1,2,2,2,1,2,2,1,7,2,2,2,1,
- 1,2,1,1,1,2,2,2,2,2,1,7,2,2,1,1,1,1,7,1,2,2,2,2,2,1,5,2,2,2,3,1,1,1,1,7,1,
- 1,1,8,1,2,1,1,1,1,1,1,8,1,2,1,1,1,1,1,5,1,2,5,5,8,1,1,5,7,1,3,3,1,1,1,1,1,
- 1,1,1,1,7,1,1,2,1,1,1,1,1,1,1,7,2,2,1,1,7,1,2,5,5,5,5,5,5,5,5,8,1,1,7,1,2,
- 2,1,1,1,1,1,5,1,2,5,5,5,5,5,5,8,1,1,5,7,1,3,3,1,1,1,1,1,1,8,1,2,1,1,1,1,1,
- 1,1,5,1,1,3,1,7,1,1,1,1,5,1,1,3,1,1,1,5,1,1,3,1,1,1,1,1,1,1,1,1,7,2,2,2,1,
- 1,1,1,1,1,1,1,1,1,7,1,2,2,2,1,1,1,1,1,1,1,7,1,2,1,7,1,1,2,1,7,2,1,1,1,1,1,
- 1,1,1,1,1,7,1,1,1,1,1,2,1,1,1,1,1,5,5,5,5,5,5,8,1,1,5,7,1,3,3,1,1,1,1,1,1,
- 1,5,1,1,3,1,1,1,1,1,4,2,1,1,8,1,2,1,1,1,1,1,1,1,5,1,1,3,1,1,1,1,1,1,7,1,2,
- 1,1,1,5,1,1,3,1,1,1,1,1,7,1,1,1,1,5,1,1,3,1,1,1,1,1,1,1,1,1,7,1,2,2,2,1,1,
- 1,1,1,1,7,1,2,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,7,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,5,2,2,2,1,1,1,1,1,1,5,2,1,5,1,1,
- 1,1,1,8,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,2,1,7,1,1,1,1,1,1,1,1,1,1,1,7,2,
- 2,2,2,1,1,1,1,1,1,1,7,2,2,1,1,1,7,2,1,1,1,1,1,5,1,1,3,1,1,1,1,1,1,1,1,1,1,
- 7,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,2,1,1,1,1,1,1,1,1,5,1,1,
- 3,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,2,1,1,1,1,1,1,1,1,5,1,1,3,1,1,1,1,1,1,7,1,
- 2,1,4,1,1,4,1,1,1,1,1,1,1,1,7,1,2,1,1,1,5,1,1,3,1,1,1,1,1,1,7,1,2,1,1,1,1,
- 1,1,1,1,8,1,2,1,1,1,2,1,11
-};
-
-
-static unsigned char ag_pstt[] = {
-2,2,1,3,2,2,3,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,
-122,122,1,124,122,
-6,7,8,9,3,0,13,12,11,10,
-74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
- 74,74,74,74,74,74,76,
-77,5,
-2,2,1,123,2,2,128,
-2,2,1,123,2,2,127,
-2,2,1,123,2,2,126,
-2,2,1,123,2,2,125,
-18,18,15,14,14,10,17,4,18,18,17,14,15,16,
-19,19,19,19,19,19,15,14,14,11,17,3,19,19,17,14,15,16,
-20,20,20,20,20,20,15,14,14,12,17,2,20,20,17,14,15,16,
-21,21,15,14,14,13,17,1,21,21,17,14,15,16,
-22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
- 22,22,22,22,22,22,85,22,88,
-89,15,
-2,2,1,123,2,2,152,
-80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,15,14,14,
- 80,17,79,14,15,16,
-23,24,18,27,27,27,27,26,25,
-32,33,28,29,30,31,19,34,22,23,24,25,38,38,37,36,35,
-92,92,92,92,92,39,20,90,91,42,43,43,41,40,
-44,45,21,48,48,47,46,
-84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
- 84,84,84,84,84,84,86,
-2,2,1,123,2,2,151,
-2,2,1,123,2,2,150,
-92,92,92,49,92,92,39,25,90,91,51,50,41,40,
-92,92,92,92,92,39,26,90,91,52,41,40,
-23,24,62,27,61,61,61,26,25,
-2,2,1,123,2,2,134,
-2,2,1,123,2,2,133,
-2,2,1,123,2,2,132,
-2,2,1,123,2,2,131,
-2,2,1,123,2,2,138,
-2,2,1,123,2,2,137,
-53,34,54,
-92,92,92,92,92,39,35,90,91,55,56,41,40,
-49,36,57,
-58,58,58,49,58,58,58,15,14,14,37,17,58,58,59,17,14,15,16,
-32,33,28,29,30,31,28,38,34,22,23,24,25,27,37,36,35,
-97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
- 60,97,39,61,95,
-2,2,1,123,2,2,154,
-93,93,93,93,2,2,93,93,93,93,93,93,93,1,123,2,2,153,
-62,62,62,62,62,62,42,63,100,
-92,92,92,92,92,39,20,43,90,91,42,19,41,40,
-2,2,1,123,2,2,130,
-2,2,1,123,2,2,129,
-14,14,15,17,64,17,14,15,16,
-14,14,15,17,65,17,14,15,16,
-44,45,9,48,8,47,46,
-2,2,1,123,2,2,136,
-66,66,66,66,66,66,15,14,14,50,17,66,66,17,14,15,16,
-14,14,15,17,66,17,14,15,16,
-67,52,68,
-2,2,1,123,2,2,142,
-92,92,92,92,92,39,54,90,91,58,69,41,40,
-49,55,70,
-71,74,73,75,72,73,
-76,76,76,76,76,76,15,14,14,57,17,76,76,17,14,15,16,
-92,92,92,92,92,39,58,90,91,57,34,77,41,40,
-78,78,78,78,78,78,78,15,14,14,59,17,78,78,17,14,15,16,
-98,99,60,
-97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
- 60,94,97,61,96,
-2,2,1,123,2,2,155,
-62,62,28,29,30,31,62,62,62,62,63,79,22,23,24,25,101,
-62,62,62,62,62,62,64,81,81,80,100,
-62,62,62,62,62,62,65,83,83,82,100,
-92,92,92,92,92,39,66,90,91,84,85,85,41,40,
-2,2,1,123,2,2,143,
-92,92,92,92,92,39,68,90,91,86,41,40,
-88,71,69,87,89,
-90,90,90,90,90,90,15,14,14,70,17,90,90,17,14,15,16,
-2,2,1,123,2,2,139,
-5,5,5,5,5,5,5,15,14,14,72,17,41,41,17,14,15,16,
-92,92,92,92,92,39,73,90,91,43,91,41,40,
-2,2,1,123,2,2,135,
-5,5,5,5,5,5,15,14,14,5,75,17,38,38,17,14,15,16,
-92,92,92,92,92,39,76,90,91,92,93,93,41,40,
-94,96,53,77,99,100,52,98,97,95,
-92,92,92,92,92,39,102,90,91,57,101,101,102,77,41,40,
-14,14,15,17,21,17,14,15,16,
-92,92,62,62,92,92,92,62,62,62,62,39,80,90,91,103,101,41,40,
-62,62,62,62,62,62,15,14,80,100,
-92,92,62,62,92,92,92,62,62,62,62,39,82,90,91,104,101,41,40,
-62,62,62,62,62,62,12,11,82,100,
-105,105,105,105,105,105,105,105,15,14,14,84,17,105,105,17,14,15,16,
-92,92,92,74,92,92,39,85,90,91,84,106,68,41,40,
-92,92,92,92,92,39,86,90,91,107,41,40,
-62,62,62,62,62,62,87,108,100,
-2,2,1,123,2,2,141,
-92,92,92,92,92,39,89,90,91,59,109,41,40,
-92,92,92,92,92,39,90,90,91,43,110,41,40,
-5,5,5,5,5,5,5,5,15,14,14,91,17,42,42,17,14,15,16,
-111,111,111,111,111,111,111,111,15,14,14,92,17,111,111,17,14,15,16,
-92,92,92,74,92,92,39,93,90,91,92,112,36,41,40,
-2,2,1,123,2,2,149,
-92,92,92,92,92,39,95,90,91,113,41,40,
-2,2,1,123,2,2,146,
-114,114,62,62,116,117,114,114,114,62,62,62,62,97,120,119,115,100,118,118,
- 118,
-92,92,92,53,92,92,39,98,90,91,57,99,100,54,121,41,40,
-92,92,92,92,92,39,99,90,91,122,41,40,
-67,100,123,
-92,92,92,92,92,39,32,90,91,57,30,77,41,40,
-74,102,124,
-14,14,15,17,17,17,14,15,16,
-14,14,15,17,16,17,14,15,16,
-71,40,72,70,
-5,5,15,14,14,5,106,17,69,69,17,14,15,16,
-125,125,125,125,125,107,127,126,110,
-62,62,128,62,62,62,62,108,47,101,
-128,71,109,129,45,
-5,5,5,5,5,5,5,5,15,14,14,110,17,39,39,17,14,15,16,
-71,40,72,44,
-5,5,5,5,5,5,15,14,14,5,112,17,37,37,17,14,15,16,
-14,14,15,17,56,17,14,15,16,
-2,2,1,123,2,2,148,
-130,115,131,
-2,2,1,123,2,2,157,
-2,2,1,123,2,2,156,
-132,62,62,132,132,62,62,62,62,118,108,104,109,
-132,62,62,130,132,132,62,62,62,62,119,133,108,105,109,
-62,62,130,62,62,62,62,120,134,101,
-53,121,99,100,53,
-128,122,48,
-62,62,116,117,130,53,62,62,62,62,123,138,135,140,136,137,100,118,118,118,
- 139,139,
-5,5,5,5,5,5,15,14,14,5,124,17,33,33,17,14,15,16,
-2,2,1,123,2,2,159,
-125,125,125,125,125,71,111,
-14,14,15,17,65,17,14,15,16,
-2,2,1,123,2,2,140,
-62,62,62,62,62,62,129,141,100,
-2,2,1,123,2,2,145,
-114,114,114,114,114,131,142,
-2,2,1,123,2,2,158,
-132,62,62,132,132,62,62,62,62,133,143,108,106,109,
-62,62,62,62,62,62,134,144,100,
-62,62,116,117,130,53,62,62,62,62,135,138,135,145,136,137,100,118,118,118,
- 139,139,
-62,62,116,117,130,53,62,62,62,62,136,138,135,136,137,100,118,118,118,119,
-132,62,62,132,132,62,62,62,62,118,108,105,109,
-62,62,62,62,62,62,117,101,
-146,112,147,
-149,130,14,14,15,17,49,148,17,14,15,150,16,
-62,62,128,62,62,62,62,141,46,101,
-151,142,152,
-132,62,62,151,132,132,62,62,62,62,143,51,108,107,109,
-62,62,151,62,62,62,62,144,50,101,
-149,130,128,145,120,148,150,
-2,2,1,123,2,2,161,
-62,62,116,117,130,53,62,62,62,62,147,138,135,136,137,100,118,118,118,116,
-62,62,116,117,130,53,62,62,62,62,148,138,135,136,137,100,118,118,118,153,
- 153,
-2,2,1,123,2,2,160,
-62,62,116,117,130,53,62,62,62,62,150,138,135,136,137,100,118,118,118,154,
- 154,
-2,2,1,123,2,2,144,
-62,62,62,62,62,62,152,155,100,
-146,114,147,
-146,113,147,
-62,62,156,62,62,62,62,155,157,101,
-2,2,1,123,2,2,147,
-62,62,62,62,62,62,157,158,100,
-62,62,62,62,62,62,14,14,15,17,55,17,14,15,101,16,
- 0
-};
-
-
-static const unsigned short ag_sbt[] = {
- 0, 7, 41, 46, 56, 88, 90, 97, 104, 111, 118, 132, 150, 168,
- 182, 216, 218, 225, 256, 265, 282, 296, 303, 335, 342, 349, 363, 375,
- 384, 391, 398, 405, 412, 419, 426, 429, 442, 445, 464, 481, 511, 518,
- 536, 545, 559, 566, 573, 582, 591, 598, 605, 622, 631, 634, 641, 654,
- 657, 663, 680, 694, 712, 715, 745, 752, 769, 780, 791, 805, 812, 824,
- 829, 846, 853, 871, 884, 891, 909, 923, 933, 949, 958, 977, 987,1006,
- 1016,1035,1050,1062,1071,1078,1091,1104,1123,1142,1157,1164,1176,1183,
- 1204,1221,1233,1236,1250,1253,1262,1271,1275,1289,1298,1308,1313,1332,
- 1336,1354,1363,1370,1373,1380,1387,1400,1415,1425,1430,1433,1455,1473,
- 1480,1487,1496,1503,1512,1519,1526,1533,1547,1556,1578,1598,1611,1619,
- 1622,1635,1645,1648,1663,1673,1680,1687,1707,1728,1735,1756,1763,1772,
- 1775,1778,1788,1795,1804,1820
-};
-
-
-static const unsigned short ag_sbe[] = {
- 3, 38, 44, 50, 87, 89, 93, 100, 107, 114, 123, 141, 159, 173,
- 213, 217, 221, 251, 258, 271, 288, 298, 334, 338, 345, 356, 369, 378,
- 387, 394, 401, 408, 415, 422, 427, 435, 443, 455, 471, 508, 514, 532,
- 542, 552, 562, 569, 575, 584, 594, 601, 614, 624, 632, 637, 647, 655,
- 659, 672, 686, 704, 714, 743, 748, 762, 775, 786, 797, 808, 818, 826,
- 838, 849, 863, 877, 887, 901, 915, 926, 939, 951, 970, 983, 999,1012,
- 1027,1042,1056,1068,1074,1084,1097,1115,1134,1149,1160,1170,1179,1196,
- 1211,1227,1234,1242,1251,1255,1264,1272,1281,1294,1305,1310,1324,1333,
- 1346,1356,1366,1371,1376,1383,1396,1410,1422,1426,1431,1443,1465,1476,
- 1485,1489,1499,1509,1515,1524,1529,1542,1553,1566,1588,1607,1617,1620,
- 1626,1642,1646,1658,1670,1676,1683,1697,1717,1731,1745,1759,1769,1773,
- 1776,1785,1791,1801,1812,1820
-};
-
-
-static const unsigned char ag_fl[] = {
- 2,2,2,2,2,0,1,1,2,3,1,2,3,1,2,3,3,3,1,2,3,4,1,1,1,1,1,2,3,1,2,0,1,6,3,
- 1,2,6,4,5,0,2,4,1,3,6,8,6,3,4,5,5,2,4,3,10,4,1,1,1,1,2,3,1,1,7,3,1,2,6,
- 3,1,1,1,2,0,1,3,1,2,1,1,1,1,2,0,1,0,2,2,1,1,1,2,3,1,2,1,2,2,1,2,1,1,2,
- 2,1,2,1,1,1,2,1,3,3,1,3,1,1,2,3,1,2,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-};
-
-static const unsigned char ag_ptt[] = {
- 0, 5, 5, 5, 5, 15, 15, 17, 17, 7, 21, 21, 16, 24, 24, 16, 20, 23,
- 28, 28, 9, 27, 29, 29, 29, 29, 35, 35, 11, 39, 39, 40, 40, 34, 34, 44,
- 44, 34, 34, 46, 49, 49, 46, 47, 43, 36, 36, 36, 55, 56, 59, 59, 38, 38,
- 38, 38, 38, 65, 51, 53, 70, 70, 13, 69, 69, 71, 72, 77, 77, 72, 76, 74,
- 2, 82, 82, 83, 83, 2, 85, 85, 14, 88, 88, 90, 90, 91, 91, 92, 92,140,
- 26, 26,141,141,142, 96, 96, 97, 97, 97, 25, 25,103,103, 63, 63, 64, 64,
- 104,104, 78, 78, 58, 58, 58,107,107,109,109,109,109,111,111,112,112, 6,
- 8, 10, 12, 19, 22, 30, 31, 32, 33, 41, 37, 42, 45, 48, 54, 52, 50, 57,
- 62, 61, 60, 67, 66, 68, 73, 75, 3, 1, 4,100,101,102,105,106,108,110
-};
-
-
-
-
-static void ag_ra(void)
-{
- switch(ag_rpx[ag_ap]) {
- case 1: ag_rp_1(V(0,int), V(1,const char *)); break;
- case 2: ag_rp_2(V(0,int), V(1,const char *)); break;
- case 3: ag_rp_3(V(0,const char *), V(1,int), V(2,char)); break;
- case 4: V(0,char) = ag_rp_4(); break;
- case 5: V(0,char) = ag_rp_5(); break;
- case 6: V(0,batch *) = ag_rp_8(V(0,const char *), V(3,const char *)); break;
- case 7: V(0,batch *) = ag_rp_9(V(0,batch *), V(2,const char *)); break;
- case 8: V(0,const char *) = ag_rp_10(V(0,const char *)); break;
- case 9: ag_rp_11(V(0,const char *)); break;
- case 10: ag_rp_12(V(0,char), V(2,const char *), V(4,const char *)); break;
- case 11: ag_rp_13(V(0,char), V(2,const char *), V(4,const char *), V(6,int)); break;
- case 12: ag_rp_14(V(0,char), V(2,const char *), V(4,int)); break;
- case 13: V(0,const char *) = ag_rp_15(V(1,const char *)); break;
- case 14: ag_rp_16(V(0,const char *), V(2,int)); break;
- case 15: ag_rp_17(V(1,int), V(3,int)); break;
- case 16: ag_rp_18(V(1,int), V(3,int)); break;
- case 17: ag_rp_19(V(0,const char *)); break;
- case 18: ag_rp_20(V(0,const char *), V(2,const char *)); break;
- case 19: ag_rp_21(V(0,const char *)); break;
- case 20: ag_rp_22(V(0,const char *), V(2,int), V(4,int), V(6,int), V(8,int)); break;
- case 21: ag_rp_23(V(0,const char *), V(2,const char *)); break;
- case 22: V(0,const char *) = ag_rp_24(V(0,const char *)); break;
- case 23: V(0,const char *) = ag_rp_25(V(0,const char *)); break;
- case 24: V(0,const char *) = ag_rp_26(V(0,const char *)); break;
- case 25: ag_rp_27(V(1,const char *), V(3,const char *), V(4,const char *), V(5,int)); break;
- case 26: ag_rp_28(V(1,const char *)); break;
- case 27: ag_rp_29(V(0,const char *)); break;
- case 28: V(0,int) = ag_rp_30(V(0,int)); break;
- case 29: V(0,const char *) = ag_rp_31(V(0,const char *)); break;
- case 30: V(0,const char *) = ag_rp_32(V(0,const char *)); break;
- case 31: V(0,const char *) = ag_rp_33(V(0,int)); break;
- case 32: V(0,const char *) = ag_rp_34(V(0,const char *), V(1,int)); break;
- case 33: V(0,const char *) = ag_rp_35(V(1,const char *)); break;
- case 34: V(0,const char *) = ag_rp_36(V(0,char)); break;
- case 35: V(0,const char *) = ag_rp_37(V(0,const char *), V(1,char)); break;
- case 36: V(0,char) = ag_rp_38(V(0,int)); break;
- case 37: V(0,char) = ag_rp_39(); break;
- case 38: V(0,char) = ag_rp_40(); break;
- case 39: V(0,int) = ag_rp_41(V(0,int)); break;
- case 40: V(0,int) = ag_rp_42(V(0,int), V(1,int)); break;
- case 41: V(0,int) = ag_rp_43(V(1,int)); break;
- case 42: V(0,int) = ag_rp_44(V(0,int), V(1,int)); break;
- case 43: V(0,int) = ag_rp_45(V(0,int)); break;
- case 44: V(0,int) = ag_rp_46(V(0,int), V(1,int)); break;
- case 45: V(0,int) = ag_rp_47(V(0,int)); break;
- case 46: V(0,int) = ag_rp_48(V(0,int)); break;
- case 47: V(0,int) = ag_rp_49(V(0,int)); break;
- case 48: V(0,int) = ag_rp_50(V(0,int), V(1,int)); break;
- case 49: V(0,int) = ag_rp_51(V(0,int), V(2,int)); break;
- case 50: V(0,int) = ag_rp_52(V(0,int), V(2,int)); break;
- case 51: V(0,int) = ag_rp_53(V(0,int), V(2,int)); break;
- case 52: V(0,int) = ag_rp_54(V(1,int)); break;
- case 53: V(0,int) = ag_rp_55(V(1,int)); break;
- }
-}
-
-#define TOKEN_NAMES parse_token_names
-const char *parse_token_names[158] = {
- "file format",
- "identifier",
- "white space",
- "simple eol",
- "quoted string",
- "file format",
- "",
- "devices",
- "",
- "cache",
- "",
- "devinfo",
- "",
- "config",
- "eol",
- "",
- "device list",
- "",
- "eof",
- "",
- "character device",
- "",
- "",
- "block device",
- "",
- "number",
- "name",
- "cachedevice",
- "",
- "devicetype",
- "",
- "",
- "",
- "",
- "device block",
- "",
- "device header spec",
- "",
- "device decl",
- "",
- "",
- "",
- "",
- "ignoramus",
- "",
- "",
- "batch list",
- "batch item",
- "",
- "",
- "",
- "groupname",
- "",
- "procname",
- "",
- "class",
- "device tail",
- "",
- "expr",
- "device range",
- "",
- "",
- "",
- "hex number",
- "auto hex",
- "devname",
- "letter",
- "",
- "",
- "config decl",
- "",
- "class decl",
- "omit decl",
- "",
- "mode",
- "",
- "single omit",
- "",
- "octal number",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "qstring",
- "qstring char",
- "qchar",
- "",
- "digit",
- "",
- "",
- "",
- "hex digit",
- "",
- "octal digit",
- "term",
- "",
- "factor",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "letter",
- "",
- "",
- "",
- "simple eol",
- "identifier",
- "quoted string",
- "digit",
- "",
- "",
- "",
- "octal digit",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-
-};
-
-static char ag_msg[82];
-static char ag_mst[] = "Missing %s";
-static char ag_uet[] = "Unexpected %s";
-static char ag_ac[4] = "' '";
-
-static void ag_diagnose(void) {
- int ag_snd = (PCB).sn, ag_k;
- const char *ag_p;
- const char *ag_fmt = ag_uet;
-
- ag_k = ag_sbt[ag_snd];
- if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
- ag_p = TOKEN_NAMES[ag_tstt[ag_k]];
- ag_fmt = ag_mst;
- }
- else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
- ag_p = TOKEN_NAMES[(PCB).token_number];
- }
- else if (isprint((*(PCB).lab)) && (*(PCB).lab) != '\\') {
- ag_ac[1] = (*(PCB).lab);
- ag_p = ag_ac;
- }
- else ag_p = "input";
- sprintf(ag_msg, ag_fmt, ag_p);
- (PCB).error_message = ag_msg;
-
-
-}
-static int ag_action_1_r_proc(void);
-static int ag_action_2_r_proc(void);
-static int ag_action_3_r_proc(void);
-static int ag_action_4_r_proc(void);
-static int ag_action_1_s_proc(void);
-static int ag_action_3_s_proc(void);
-static int ag_action_1_proc(void);
-static int ag_action_2_proc(void);
-static int ag_action_3_proc(void);
-static int ag_action_4_proc(void);
-static int ag_action_5_proc(void);
-static int ag_action_6_proc(void);
-static int ag_action_7_proc(void);
-static int ag_action_8_proc(void);
-static int ag_action_9_proc(void);
-static int ag_action_10_proc(void);
-static int ag_action_11_proc(void);
-static int ag_action_8_proc(void);
-
-
-static int (*ag_r_procs_scan[])(void) = {
- ag_action_1_r_proc,
- ag_action_2_r_proc,
- ag_action_3_r_proc,
- ag_action_4_r_proc
-};
-
-static int (*ag_s_procs_scan[])(void) = {
- ag_action_1_s_proc,
- ag_action_2_r_proc,
- ag_action_3_s_proc,
- ag_action_4_r_proc
-};
-
-static int (*ag_gt_procs_scan[])(void) = {
- ag_action_1_proc,
- ag_action_2_proc,
- ag_action_3_proc,
- ag_action_4_proc,
- ag_action_5_proc,
- ag_action_6_proc,
- ag_action_7_proc,
- ag_action_8_proc,
- ag_action_9_proc,
- ag_action_10_proc,
- ag_action_11_proc,
- ag_action_8_proc
-};
-
-
-static int ag_action_10_proc(void) {
- (PCB).btsx = 0, (PCB).drt = -1;
- ag_track();
- return 0;
-}
-
-static int ag_action_11_proc(void) {
- (PCB).btsx = 0, (PCB).drt = -1;
- (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
- (PCB).ssx--;
- ag_ra();
- (PCB).ssx++;
- ag_track();
- return 0;
-}
-
-static int ag_action_3_r_proc(void) {
- int ag_sd = ag_fl[ag_ap] - 1;
- if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
- (PCB).btsx = 0, (PCB).drt = -1;
- (PCB).reduction_token = (parse_token_type) ag_ptt[ag_ap];
- ag_ra();
- return 1;
-}
-
-static int ag_action_3_s_proc(void) {
- int ag_sd = ag_fl[ag_ap] - 1;
- if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
- (PCB).btsx = 0, (PCB).drt = -1;
- (PCB).reduction_token = (parse_token_type) ag_ptt[ag_ap];
- ag_ra();
- return 1;
-}
-
-static int ag_action_4_r_proc(void) {
- int ag_sd = ag_fl[ag_ap] - 1;
- if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
- (PCB).reduction_token = (parse_token_type) ag_ptt[ag_ap];
- return 1;
-}
-
-static int ag_action_2_proc(void) {
- (PCB).btsx = 0, (PCB).drt = -1;
- if ((PCB).ssx >= 38) {
- (PCB).exit_flag = AG_STACK_ERROR_CODE;
- PARSER_STACK_OVERFLOW;
- }
- (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
- (PCB).ss[(PCB).ssx] = (PCB).sn;
- (PCB).ssx++;
- (PCB).sn = ag_ap;
- ag_track();
- return 0;
-}
-
-static int ag_action_9_proc(void) {
- if((PCB).drt == -1) {
- (PCB).drt=(PCB).token_number;
- (PCB).dssx=(PCB).ssx;
- (PCB).dsn=(PCB).sn;
- }
- ag_prot();
- (PCB).ss[(PCB).ssx] = (PCB).sn;
- (PCB).ssx++;
- (PCB).sn = ag_ap;
- (PCB).rx = 0;
- return (PCB).exit_flag == AG_RUNNING_CODE;
-}
-
-static int ag_action_2_r_proc(void) {
- (PCB).ssx++;
- (PCB).sn = ag_ap;
- return 0;
-}
-
-static int ag_action_7_proc(void) {
- --(PCB).ssx;
- (PCB).exit_flag = AG_SUCCESS_CODE;
- (PCB).rx = 0;
- return 0;
-}
-
-static int ag_action_1_proc(void) {
- (PCB).exit_flag = AG_SUCCESS_CODE;
- ag_track();
- return 0;
-}
-
-static int ag_action_1_r_proc(void) {
- (PCB).exit_flag = AG_SUCCESS_CODE;
- return 0;
-}
-
-static int ag_action_1_s_proc(void) {
- (PCB).exit_flag = AG_SUCCESS_CODE;
- return 0;
-}
-
-static int ag_action_4_proc(void) {
- int ag_sd = ag_fl[ag_ap] - 1;
- (PCB).reduction_token = (parse_token_type) ag_ptt[ag_ap];
- (PCB).btsx = 0, (PCB).drt = -1;
- (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
- if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
- else (PCB).ss[(PCB).ssx] = (PCB).sn;
- ag_track();
- while ((PCB).exit_flag == AG_RUNNING_CODE) {
- unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
- unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
- do {
- unsigned ag_tx = (ag_t1 + ag_t2)/2;
- if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
- else ag_t2 = ag_tx;
- } while (ag_t1 < ag_t2);
- ag_ap = ag_pstt[ag_t1];
- if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
- }
- return 0;
-}
-
-static int ag_action_3_proc(void) {
- int ag_sd = ag_fl[ag_ap] - 1;
- (PCB).btsx = 0, (PCB).drt = -1;
- (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).lab;
- if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
- else (PCB).ss[(PCB).ssx] = (PCB).sn;
- ag_track();
- (PCB).reduction_token = (parse_token_type) ag_ptt[ag_ap];
- ag_ra();
- while ((PCB).exit_flag == AG_RUNNING_CODE) {
- unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
- unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
- do {
- unsigned ag_tx = (ag_t1 + ag_t2)/2;
- if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
- else ag_t2 = ag_tx;
- } while (ag_t1 < ag_t2);
- ag_ap = ag_pstt[ag_t1];
- if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
- }
- return 0;
-}
-
-static int ag_action_8_proc(void) {
- ag_undo();
- (PCB).rx = 0;
- (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
- ag_diagnose();
- SYNTAX_ERROR;
- {(PCB).rx = 1; ag_track();}
- return (PCB).exit_flag == AG_RUNNING_CODE;
-}
-
-static int ag_action_5_proc(void) {
- int ag_sd = ag_fl[ag_ap];
- if((PCB).drt == -1) {
- (PCB).drt=(PCB).token_number;
- (PCB).dssx=(PCB).ssx;
- (PCB).dsn=(PCB).sn;
- }
- if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
- else {
- ag_prot();
- (PCB).ss[(PCB).ssx] = (PCB).sn;
- }
- (PCB).rx = 0;
- (PCB).reduction_token = (parse_token_type) ag_ptt[ag_ap];
- ag_ra();
- while ((PCB).exit_flag == AG_RUNNING_CODE) {
- unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
- unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
- do {
- unsigned ag_tx = (ag_t1 + ag_t2)/2;
- if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
- else ag_t2 = ag_tx;
- } while (ag_t1 < ag_t2);
- ag_ap = ag_pstt[ag_t1];
- if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
- }
- return (PCB).exit_flag == AG_RUNNING_CODE;
-}
-
-static int ag_action_6_proc(void) {
- int ag_sd = ag_fl[ag_ap];
- (PCB).reduction_token = (parse_token_type) ag_ptt[ag_ap];
- if((PCB).drt == -1) {
- (PCB).drt=(PCB).token_number;
- (PCB).dssx=(PCB).ssx;
- (PCB).dsn=(PCB).sn;
- }
- if (ag_sd) {
- (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
- }
- else {
- ag_prot();
- (PCB).vs[(PCB).ssx] = ag_null_value;
- (PCB).ss[(PCB).ssx] = (PCB).sn;
- }
- (PCB).rx = 0;
- while ((PCB).exit_flag == AG_RUNNING_CODE) {
- unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
- unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
- do {
- unsigned ag_tx = (ag_t1 + ag_t2)/2;
- if (ag_tstt[ag_tx] < (const unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
- else ag_t2 = ag_tx;
- } while (ag_t1 < ag_t2);
- ag_ap = ag_pstt[ag_t1];
- if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
- }
- return (PCB).exit_flag == AG_RUNNING_CODE;
-}
-
-
-void init_parse(void) {
- unsigned ag_t1 = 0;
- (PCB).rx = (PCB).fx = 0;
- (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
- (PCB).exit_flag = AG_RUNNING_CODE;
- (PCB).key_sp = NULL;
- (PCB).key_state = 0;
- (PCB).line = FIRST_LINE;
- (PCB).column = FIRST_COLUMN;
- (PCB).btsx = 0, (PCB).drt = -1;
- while (ag_tstt[ag_t1] == 0) {
- ag_ap = ag_pstt[ag_t1];
- (ag_gt_procs_scan[ag_astt[ag_t1]])();
- ag_t1 = ag_sbt[(PCB).sn];
- }
-}
-
-void parse(void) {
- (PCB).lab[(PCB).fx++] = (PCB).input_code;
- while ((PCB).exit_flag == AG_RUNNING_CODE) {
- while (1) {
- unsigned char *ag_p;
- int ag_ch;
- if ((PCB).rx >= (PCB).fx) return;
- ag_ch = CONVERT_CASE((PCB).lab[(PCB).rx++]);
- if ((PCB).key_sp) {
- if (ag_ch != *(PCB).key_sp++) {
- (PCB).rx = (PCB).save_index;
- (PCB).key_sp = NULL;
- (PCB).key_state = 0;
- break;
- } else if (*(PCB).key_sp) continue;
- if (ag_key_act[(PCB).key_state] == ag_cf_end_key) {
- int ag_k1;
- int ag_k2;
- if ((PCB).rx >= (PCB).fx) {
- (PCB).rx--;
- (PCB).key_sp--;
- return;
- }
- (PCB).key_sp = NULL;
- ag_k1 = ag_key_parm[(PCB).key_state];
- ag_k2 = ag_key_pt[ag_k1];
- if (ag_key_itt[ag_k2 + CONVERT_CASE((PCB).lab[(PCB).rx])])
- (PCB).rx = (PCB).save_index;
- else {
- (PCB).token_number = (parse_token_type) ag_key_pt[ag_k1+1];
- (PCB).key_state = 0;
- }
- break;
- }
- else {
- (PCB).token_number = (parse_token_type) ag_key_parm[(PCB).key_state];
- (PCB).key_state = 0;
- (PCB).key_sp = NULL;
- }
- break;
- }
- if ((PCB).key_state == 0) {
- (PCB).token_number = (parse_token_type) AG_TCV(ag_ch);
- if (((PCB).key_state = ag_key_index[(PCB).sn]) == 0) break;
- (PCB).save_index = 1;
- }
- ag_p = &ag_key_ch[(PCB).key_state];
- while (*ag_p < ag_ch) ag_p++;
- if (*ag_p == ag_ch) {
- (PCB).key_state = (int)(ag_p - ag_key_ch);
- switch (ag_key_act[(PCB).key_state]) {
- case ag_cf_set_key: {
- int ag_k1;
- int ag_k2;
- if ((PCB).rx >= (PCB).fx) {
- (PCB).rx--;
- return;
- }
- ag_k1 = ag_key_parm[(PCB).key_state];
- ag_k2 = ag_key_pt[ag_k1];
- (PCB).key_state = ag_key_jmp[(PCB).key_state];
- if (ag_key_itt[ag_k2 + CONVERT_CASE((PCB).lab[(PCB).rx])]) break;
- (PCB).save_index = (PCB).rx;
- (PCB).token_number = (parse_token_type) ag_key_pt[ag_k1+1];
- break;
- }
- case ag_set_key:
- (PCB).save_index = (PCB).rx;
- (PCB).token_number = (parse_token_type) ag_key_parm[(PCB).key_state];
- case ag_jmp_key:
- (PCB).key_state = ag_key_jmp[(PCB).key_state];
- continue;
- case ag_cf_end_key:
- case ag_end_key:
- (PCB).key_sp = ag_key_ends + ag_key_jmp[(PCB).key_state];
- continue;
- case ag_accept_key:
- (PCB).token_number = (parse_token_type) ag_key_parm[(PCB).key_state];
- (PCB).key_state = 0;
- break;
- case ag_cf_accept_key: {
- int ag_k1;
- int ag_k2;
- if ((PCB).rx >= (PCB).fx) {
- (PCB).rx--;
- return;
- }
- ag_k1 = ag_key_parm[(PCB).key_state];
- ag_k2 = ag_key_pt[ag_k1];
- if (ag_key_itt[ag_k2 + CONVERT_CASE((PCB).lab[(PCB).rx])])
- (PCB).rx = (PCB).save_index;
- else {
- (PCB).rx--;
- (PCB).token_number = (parse_token_type) ag_key_pt[ag_k1+1];
- (PCB).key_state = 0;
- }
- break;
- }
- }
- break;
- } else {
- (PCB).rx = (PCB).save_index;
- (PCB).key_state = 0;
- break;
- }
- }
-
- {
- unsigned ag_t1 = ag_sbt[(PCB).sn];
- unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
- do {
- unsigned ag_tx = (ag_t1 + ag_t2)/2;
- if (ag_tstt[ag_tx] > (const unsigned char)(PCB).token_number)
- ag_t1 = ag_tx + 1;
- else ag_t2 = ag_tx;
- } while (ag_t1 < ag_t2);
- if (ag_tstt[ag_t1] != (PCB).token_number) ag_t1 = ag_sbe[(PCB).sn];
- ag_ap = ag_pstt[ag_t1];
- (ag_gt_procs_scan[ag_astt[ag_t1]])();
- }
- }
-
-}
-
-