Annotation of 43BSDTahoe/new/jove/jove.h, revision 1.1.1.1

1.1       root        1: /***************************************************************************
                      2:  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
                      3:  * is provided to you without charge, and with no warranty.  You may give  *
                      4:  * away copies of JOVE, including sources, provided that this notice is    *
                      5:  * included in all the files.                                              *
                      6:  ***************************************************************************/
                      7: 
                      8: /* jove.h header file to be included by EVERYONE */ 
                      9: 
                     10: 
                     11: #include <setjmp.h>
                     12: 
                     13: #ifndef TUNED
                     14: #   include "tune.h"
                     15: #endif
                     16: 
                     17: #ifndef MAC
                     18: #      include <sys/types.h>
                     19: #else
                     20: #      include <types.h>
                     21: #endif
                     22: 
                     23: 
                     24: #ifdef MSDOS
                     25: #include <string.h>
                     26: #endif
                     27: 
                     28: 
                     29: #if !(defined(MSDOS) || defined(MAC))
                     30: #define void int
                     31: #endif
                     32: 
                     33: #if !(defined(IBMPC) || defined(MAC))
                     34: #      define TERMCAP
                     35: #      define ASCII
                     36: #endif
                     37: 
                     38: #ifdef ASCII   /* seven bit characters */
                     39: #      define NCHARS 0200
                     40: #else
                     41: #      define NCHARS 0400
                     42: #endif
                     43: #define CHARMASK (NCHARS -1)
                     44: 
                     45: #define private        static
                     46: 
                     47: #ifndef BSD4_2
                     48: #   ifdef MENLO_JCL
                     49: #      ifndef EUNICE
                     50: #              define signal   sigset
                     51: #      endif
                     52: #   endif /* MENLO_JCL */
                     53: #endif
                     54: 
                     55: #define EOF    -1
                     56: 
                     57: #ifdef MSDOS
                     58: #      define NULL     ((char *)0)
                     59: #      define NIL      ((char *)0)
                     60: #else
                     61: #      ifdef MAC
                     62: #              define NULL 0L
                     63: #              define NIL 0L
                     64: #      else
                     65: #              define NULL 0
                     66: #              define NIL 0
                     67: #      endif /* MAC */
                     68: #endif /* MSDOS */
                     69: /* kinds of regular expression compiles */
                     70: #define NORM   0       /* nothing special */
                     71: #define OKAY_RE        1       /* allow regular expressions */
                     72: #define IN_CB  2       /* in curly brace; implies OKAY_RE */
                     73: 
                     74: /* return codes for command completion (all < 0 because >= 0 are
                     75:    legitimate offsets into array of strings */
                     76: 
                     77: #define AMBIGUOUS      -2      /* matches more than one at this point */
                     78: #define UNIQUE         -3      /* matches only one string */
                     79: #define ORIGINAL       -4      /* matches no strings at all! */
                     80: #define NULLSTRING     -5      /* just hit return without typing anything */
                     81: 
                     82: /* values for the `flags' argument to complete */
                     83: #define NOTHING                0       /* opposite of RET_STATE */
                     84: #define RET_STATE      1       /* return state when we hit return */
                     85: #define RCOMMAND       2       /* we are reading a joverc file */
                     86: #define CASEIND                4       /* map all to lower case */
                     87: 
                     88: #define SAVE           01      /* this macro needs saving to a file */
                     89: 
                     90: #define        LBSIZE          BUFSIZ  /* same as a logical disk block */
                     91: #ifndef MSDOS
                     92: #define FILESIZE       256
                     93: #else /* MSDOS */
                     94: #define FILESIZE       64
                     95: #endif /* MSDOS */
                     96: 
                     97: #define FORWARD                1
                     98: #define BACKWARD       -1
                     99: 
                    100: #define CTL(c)         (c & 037)
                    101: #define META(c)                (c | 0200)
                    102: #define RUBOUT         '\177'
                    103: #define LF             CTL('J')
                    104: #define CR             CTL('M')
                    105: #define BS             CTL('H')
                    106: #define ESC            '\033'
                    107: 
                    108: #define HALF(wp)       ((wp->w_height - 1) / 2)
                    109: #define IsModified(b)  (b->b_modified)
                    110: #define SIZE(wp)       (wp->w_height - 1)
                    111: #define SavLine(a, b)  (a->l_dline = putline(b))
                    112: #define SetLine(line)  DotTo(line, 0)
                    113: #define bobp()         (firstp(curline) && bolp())
                    114: #define bolp()         (curchar == 0)
                    115: #define eobp()         (lastp(curline) && eolp())
                    116: #define eolp()         (linebuf[curchar] == '\0')
                    117: #define firstp(line)   (line == curbuf->b_first)
                    118: #define getDOT()       getline(curline->l_dline, linebuf)
                    119: #define isdirty(line)  (line->l_dline & DIRTY)
                    120: #define lastp(line)    (line == curbuf->b_last)
                    121: #define makedirty(line)        line->l_dline |= DIRTY
                    122: #define one_windp()    (fwind->w_next == fwind)
                    123: 
                    124: #define CharUpcase(c)  (CaseEquiv[c])
                    125: 
                    126: extern int     BufSize;
                    127: 
                    128: #define ARG_CMD                1
                    129: #define LINECMD                2
                    130: #define KILLCMD                3       /* so we can merge kills */
                    131: #define YANKCMD                4       /* so we can do ESC Y (yank-pop) */
                    132: 
                    133: /* Buffer type */
                    134: 
                    135: #define B_SCRATCH      1       /* for internal things, e.g. minibuffer ... */
                    136: #define B_FILE         2       /* normal file (We Auto-save these.) */
                    137: #define B_PROCESS      3       /* process output in this buffer */
                    138: 
                    139: /* Major modes */
                    140: #define FUNDAMENTAL    0       /* Fundamental mode */
                    141: #define TEXT           1       /* Text mode */
                    142: #define CMODE          2       /* C mode */
                    143: #ifdef LISP
                    144: #      define LISPMODE         3       /* Lisp mode */
                    145: #      define NMAJORS          4
                    146: #else
                    147: #      define NMAJORS  3
                    148: #endif
                    149: 
                    150: /* Minor Modes */
                    151: #define Indent         (1 << 0)        /* indent same as previous line after return */
                    152: #define ShowMatch      (1 << 1)        /* paren flash mode */
                    153: #define Fill           (1 << 2)        /* text fill mode */
                    154: #define OverWrite      (1 << 3)        /* over write mode */
                    155: #define Abbrev         (1 << 4)        /* abbrev mode */
                    156: 
                    157: #define BufMinorMode(b, x)     (b->b_minor & x)
                    158: 
                    159: #define MinorMode(x)   BufMinorMode(curbuf, x)
                    160: #define MajorMode(x)   (curbuf->b_major == x)
                    161: #define SetMajor(x)    ((curbuf->b_major = x), UpdModLine = YES)
                    162: 
                    163: extern char    CharTable[NMAJORS][NCHARS];
                    164: extern char    CaseEquiv[NCHARS];
                    165: 
                    166: /* setjmp/longjmp args for DoKeys() mainjmp */
                    167: #define FIRSTCALL      0
                    168: #define ERROR          1
                    169: #define COMPLAIN       2       /* do the error without a getDOT */
                    170: #define QUIT           3       /* leave this level of recursion */
                    171: 
                    172: #define QUIET          1       /* sure, why not? */
                    173: 
                    174: #define YES            1
                    175: #define NO             0
                    176: #define TRUE           1
                    177: #define FALSE          0
                    178: #define ON             1
                    179: #define OFF            0
                    180: #define YES_NODIGIT    2
                    181: 
                    182: #define INT_OKAY       0
                    183: #define INT_BAD                -1
                    184: 
                    185: extern char    *Mainbuf,
                    186:                *HomeDir,       /* home directory */
                    187:                key_strokes[],  /* strokes that make up current command */
                    188:                *Inputp;
                    189: 
                    190: extern int     HomeLen;        /* length of home directory */
                    191: 
                    192: extern char    NullStr[];
                    193: 
                    194: #if defined(VMUNIX)||defined(MSDOS)
                    195: extern char    genbuf[LBSIZE],
                    196:                linebuf[LBSIZE],
                    197:                iobuff[LBSIZE];
                    198: #else
                    199: extern char    *genbuf,        /* scratch pad points at s_genbuf (see main()) */
                    200:                *linebuf,       /* points at s_linebuf */
                    201:                *iobuff;        /* for file reading ... points at s_iobuff */
                    202: #endif
                    203: 
                    204: extern int     InJoverc,
                    205:                Interactive;
                    206: 
                    207: #define        READ    0
                    208: #define        WRITE   1
                    209: extern int     errno;
                    210: 
                    211: extern jmp_buf mainjmp;
                    212: 
                    213: #ifdef IPROCS
                    214: typedef struct process Process;
                    215: #endif
                    216: typedef struct window  Window;
                    217: typedef struct position        Bufpos;
                    218: typedef struct mark    Mark;
                    219: typedef struct buffer  Buffer;
                    220: typedef struct line    Line;
                    221: typedef struct iobuf   IOBUF;
                    222: typedef struct data_obj {
                    223:        int     Type;
                    224:        char    *Name;
                    225: } data_obj;    /* points to cmd, macro, or variable */
                    226: 
                    227: typedef data_obj       *keymap[NCHARS];
                    228: 
                    229: struct line {
                    230:        Line    *l_prev,                /* pointer to prev */
                    231:                *l_next;                /* pointer to next */
                    232:        disk_line       l_dline;        /* pointer to disk location */
                    233: };
                    234: 
                    235: #ifdef IPROCS
                    236: struct process {
                    237:        Process *p_next;
                    238: #ifdef PIPEPROCS
                    239:        int     p_toproc,       /* read p_fromproc and write p_toproc */
                    240:                p_portpid,      /* pid of child (the portsrv) */
                    241:                p_pid;          /* pid of real child i.e. not portsrv */
                    242: #else
                    243:        int     p_fd,           /* file descriptor of pty? opened r/w */
                    244:                p_pid;          /* pid of child (the shell) */
                    245: #endif
                    246:        Buffer  *p_buffer;      /* add output to end of this buffer */
                    247:        char    *p_name;        /* ... */
                    248:        char    p_state,        /* State */
                    249:                p_howdied,      /* Killed? or Exited? */
                    250:                p_reason;       /* If signaled, p_reason is the signal; else
                    251:                                   it is the the exit code */
                    252:        Mark    *p_mark;        /* where output left us */
                    253:        data_obj
                    254:                *p_cmd;         /* command to call when process dies */
                    255: };
                    256: #endif /* IPROCS */
                    257: 
                    258: struct window {
                    259:        Window  *w_prev,        /* circular list */
                    260:                *w_next;
                    261:        Buffer  *w_bufp;        /* buffer associated with this window */
                    262:        Line    *w_top,         /* top line */
                    263:                *w_line;        /* current line */
                    264:        int     w_char,
                    265:                w_height,       /* window height */
                    266:                w_topnum,       /* line number of the topline */
                    267:                w_dotcol,       /* UpdWindow sets this ... */
                    268:                w_dotline,      /* ... and this */
                    269:                w_flags,
                    270: #define        W_TOPGONE       01
                    271: #define        W_CURGONE       02      /* topline (curline) of window has been deleted
                    272:                                   since the last time a redisplay was called */
                    273: #define W_VISSPACE     04
                    274: #define W_NUMLINES     010
                    275:                w_LRscroll;     /* amount of LeftRight scrolling in window */
                    276: #ifdef MAC
                    277:        int     w_topline;      /* row number of top line in window */
                    278:        char **w_control;       /* scroll bar for window */
                    279: #endif
                    280: };
                    281: 
                    282: extern Window  *fwind,         /* first window in list */
                    283:                *curwind;       /* current window */
                    284: 
                    285: struct position {
                    286:        Line    *p_line;
                    287:        int     p_char;
                    288: };
                    289: 
                    290: struct mark {
                    291:        Line    *m_line;
                    292:        int     m_char;
                    293:        Mark    *m_next;        /* list of marks */
                    294: #define M_FIXED                00
                    295: #define M_FLOATER      01
                    296: #define M_BIG_DELETE   02
                    297:        char    m_flags;        /* FLOATERing mark? */
                    298: };
                    299: 
                    300: struct buffer {
                    301: #ifdef MAC
                    302:        int Type;               /* kludge... to look like a data_obj */
                    303:        char *Name;             /* Name will not be used */
                    304: #endif 
                    305:        Buffer  *b_next;                /* next buffer in chain */
                    306:        char    *b_name,                /* buffer name */
                    307:                *b_fname;               /* file name associated with buffer */
                    308:        dev_t   b_dev;                  /* device of file name. */
                    309:        ino_t   b_ino;                  /* inode of file name */
                    310:        time_t  b_mtime;                /* last modify time ...
                    311:                                           to detect two people writing
                    312:                                           to the same file */
                    313:        Line    *b_first,               /* pointer to first line in list */
                    314:                *b_dot,                 /* current line */
                    315:                *b_last;                /* last line in list */
                    316:        int     b_char;                 /* current character in line */
                    317: 
                    318: #define NMARKS 8                       /* number of marks in the ring */
                    319: 
                    320:        Mark    *b_markring[NMARKS],    /* new marks are pushed here */
                    321:                *b_marks;               /* all the marks for this buffer */
                    322:        char    b_themark,              /* current mark (in b_markring) */
                    323:                b_type,                 /* file, scratch, process, iprocess */
                    324:                b_ntbf,                 /* needs to be found when we
                    325:                                           first select? */
                    326:                b_modified;             /* is the buffer modified? */
                    327:        int     b_major,                /* major mode */
                    328:                b_minor;                /* and minor mode */
                    329:        keymap  *b_keybinds;            /* local bindings (if any) */
                    330: #ifdef IPROCS
                    331:        Process *b_process;             /* process we're attached to */
                    332: #endif
                    333: };
                    334: 
                    335: struct macro {
                    336:        int     Type;           /* in this case a macro */
                    337:        char    *Name;          /* name is always second ... */
                    338:        int     m_len,          /* length of macro so we can use ^@ */
                    339:                m_buflen,       /* memory allocated for it */
                    340:                m_flags;
                    341:        char    *m_body;        /* actual body of the macro */
                    342:        struct macro
                    343:                *m_nextm;
                    344: };
                    345: 
                    346: struct variable {
                    347:        int     Type;           /* in this case a variable */
                    348:        char    *Name;          /* name is always second */
                    349:        int     *v_value,
                    350:                v_flags;
                    351: };
                    352: 
                    353: struct cmd {
                    354:        int     Type;
                    355:        char    *Name;
                    356: #ifdef MAC
                    357:        void (*c_proc)();
                    358: #else
                    359:        int (*c_proc)();
                    360: #endif
                    361: #ifdef MAC
                    362:        char c_map;                     /* prefix map for About Jove... */
                    363:        char c_key;                     /* key binding for About Jove... */
                    364: #endif
                    365: };
                    366: 
                    367: extern keymap  mainmap,        /* various key maps */
                    368:                pref1map,
                    369:                pref2map,
                    370:                miscmap;
                    371: #ifdef MAC                                     /* used in About Jove... */             
                    372:        #define F_MAINMAP '\001'
                    373:        #define F_PREF1MAP '\002'
                    374:        #define F_PREF2MAP '\003'
                    375: #endif
                    376: 
                    377: extern data_obj        *LastCmd;       /* last command invoked */
                    378: 
                    379: extern char    *ProcFmt;
                    380: 
                    381: extern struct cmd      commands[];
                    382: extern struct macro    *macros;
                    383: extern struct variable variables[];
                    384: 
                    385: extern struct macro
                    386:        *macstack[],
                    387:        KeyMacro;
                    388: 
                    389: #define FUNCTION       1
                    390: #define VARIABLE       2
                    391: #define MACRO          3
                    392: #ifdef MAC
                    393: #      define BUFFER           6       /* menus can point to buffers, too */
                    394: #      define STRING           7       /* a menu string or divider */
                    395: #endif
                    396: 
                    397: #define TYPEMASK       07
                    398: #define MAJOR_MODE     010
                    399: #define MINOR_MODE     020
                    400: #define DefMajor(x)    (FUNCTION|MAJOR_MODE|(x << 8))
                    401: #define DefMinor(x)    (FUNCTION|MINOR_MODE|(x << 8))
                    402: 
                    403: extern Buffer  *world,         /* first buffer */
                    404:                *curbuf;        /* pointer into world for current buffer */
                    405: 
                    406: #define curline        curbuf->b_dot
                    407: #define curchar curbuf->b_char
                    408: 
                    409: #define NUMKILLS       10      /* number of kills saved in the kill ring */
                    410: 
                    411: #ifdef MAC             /* when doing ~DIRTY, we need high bits set */
                    412: #      define DIRTY    (disk_line) 01  /* just needs updating for some reason */
                    413: #else
                    414: #      define DIRTY    01      /* just needs updating for some reason */
                    415: #endif
                    416: #define MODELINE       02      /* this is a modeline */
                    417: #define L_MOD          04      /* this line has been modified internally */
                    418: 
                    419: struct scrimage {
                    420:        int     s_offset,       /* offset to start printing at */
                    421:                s_flags,        /* various flags */
                    422:                s_id,           /* which buffer line */
                    423:                s_vln;          /* Visible Line Number */
                    424:        Line    *s_lp;          /* so we can turn off red bit */
                    425:        Window  *s_window;      /* window that contains this line */
                    426: };
                    427: 
                    428: extern struct scrimage
                    429:        *DesiredScreen,         /* what we want */
                    430:        *PhysScreen;            /* what we got */
                    431: 
                    432: /* Variable flags (that can be set). */
                    433: #define V_BASE10       01      /* is integer in base 10 */
                    434: #define V_BASE8                02      /* is integer in base 8 */
                    435: #define V_BOOL         04      /* is a boolean */
                    436: #define V_STRING       010     /* is a string */
                    437: #define V_CHAR         020     /* is a character */
                    438: #define V_FILENAME     040     /* a file name (implies V_STRING) */
                    439: #define V_TYPEMASK     077     /* mask off the extra bits */
                    440: #define V_MODELINE     0100    /* update modeline */
                    441: #define V_CLRSCREEN    0200    /* clear and redraw screen */
                    442: #define V_TTY_RESET    0400    /* redo the tty modes */
                    443: 
                    444: #ifdef MAC
                    445: #ifdef TXT_TO_C
                    446: int            /* kludge, so setmaps will compile with variables */
                    447: #else
                    448: extern int
                    449: #endif /* TXT_TO_C */
                    450: #else
                    451: extern int
                    452: #endif /* MAC */
                    453: 
                    454:        OKXonXoff,              /* disable start/stop characters */
                    455:        MetaKey,                /* this terminal has a meta key */
                    456:        VisBell,                /* use visible bell (if possible) */
                    457:        WrapScan,               /* make searches wrap */
                    458: #ifndef MAC
                    459:        phystab,                /* terminal's tabstop settings */ 
                    460: #endif
                    461:        tabstop,                /* expand tabs to this number of spaces */
                    462: #ifdef BACKUPFILES
                    463:        BkupOnWrite,            /* make backup files when writing */
                    464: #endif
                    465:        RMargin,                /* right margin */
                    466:        LMargin,                /* left margin */
                    467:        ScrollStep,             /* how should we scroll */
                    468: #ifndef MAC
                    469:        WtOnMk,                 /* write files on compile-it command */
                    470: #endif
                    471:        EndWNewline,            /* end files with a blank line */
                    472:        MarkThresh,             /* moves greater than MarkThresh will SetMark */
                    473:        PDelay,                 /* paren flash delay in tenths of a second */
                    474:        CIndIncrmt,             /* how much each indentation level pushes
                    475:                                   over in C mode */
                    476:        CreatMode,              /* default mode for creat'ing files */
                    477:        CaseIgnore,             /* case ignore search */
                    478: #ifdef ABBREV
                    479:        AutoCaseAbbrev,         /* automatically do case on abbreviations */
                    480: #endif
                    481:        MarksShouldFloat,       /* adjust marks on insertion/deletion */
                    482:        UseRE,                  /* use regular expressions in search */
                    483:        SyncFreq,               /* how often to sync the file pointers */
                    484:        BriteMode,              /* make the mode line inverse? */
                    485:        OkayBadChars,           /* allow bad characters in files created
                    486:                                   by JOVE */
                    487:        UpdFreq,                /* how often to update modeline */
                    488:        UseBuffers,             /* use buffers with Typeout() */
                    489: #ifdef BIFF
                    490:        BiffChk,                /* turn off/on biff with entering/exiting jove */
                    491: #endif
                    492:        MailInt,                /* mail check interval */
                    493: #ifdef ID_CHAR
                    494:        UseIC,                  /* whether or not to use i/d char
                    495:                                   processesing */
                    496: #endif
                    497:        SExitChar,              /* type this to stop i-search */
                    498:        AbortChar,              /* cancels command input */
                    499:        IntChar,                /* ttysets this to generate QUIT */
                    500:        DoEVexpand,             /* treat $foo as environment variable */
                    501: #ifdef F_COMPLETION
                    502:        DispBadFs,              /* display filenames with bad extensions? */
                    503: #endif 
                    504: #ifdef IBMPC
                    505:        Fgcolor,
                    506:        Bgcolor,
                    507:        Mdcolor,
                    508: #endif /* IBMPC */
                    509: #ifdef F_COMPLETION
                    510:        DispBadFs,              /* display filenames with bad extensions? */
                    511: #endif
                    512:        ScrollAll,              /* we current line scrolls, scroll whole window? */
                    513: #ifndef MAC
                    514:        EWSize;                 /* size to make the error window */
                    515: #else  
                    516:        Macmode,        /* see mac.c */
                    517:        Keyonly,
                    518:        Bufchange,
                    519:        Modechange,
                    520:        Windchange,
                    521:        EventCmd;
                    522: #endif /* MAC */
                    523: 
                    524: #ifdef MAC
                    525: #      ifdef TXT_TO_C  /* kludge, for setmaps with variables */
                    526: char
                    527: #      else
                    528: extern char
                    529: #      endif /* TXT_TO_C */
                    530: #else
                    531: extern char
                    532: #endif /* MAC */
                    533: 
                    534: #ifndef MAC
                    535:        ErrFmtStr[256],         /* format string for parse errors */
                    536: #endif
                    537: #ifdef IPROCS
                    538:        proc_prompt[128],       /* process prompt */
                    539: #endif
                    540: #ifdef F_COMPLETION
                    541:        BadExtensions[128],     /* extensions (e.g., ".o" to ignore) */
                    542: #endif
                    543: #ifdef CMT_FMT
                    544:        CmtFmt[80],
                    545: #endif
                    546:        ModeFmt[120],           /* mode line format string */
                    547: #ifdef UNIX
                    548:        Mailbox[FILESIZE],              /* mailbox name */
                    549: #endif /* UNIX */
                    550:        TmpFilePath[FILESIZE],  /* directory/device to store tmp files */
                    551:        TagFile[FILESIZE],              /* default tag file */
                    552:        Shell[FILESIZE];                /* shell to use */
                    553: 
                    554: extern int
                    555:        TOabort,        /* flag set by Typeout() */
                    556:        io,             /* file descriptor for reading and writing files */
                    557:        errormsg,       /* last message was an error message
                    558:                           so don't erase the error before it
                    559:                           has been read */
                    560:        this_cmd,       /* ... */
                    561:        last_cmd,       /* last command ... to implement appending
                    562:                           to kill buffer */
                    563:        RecDepth,       /* recursion depth */
                    564:        InputPending,   /* nonzero if there is input waiting to
                    565:                           be processed */
                    566:        killptr,        /* index into killbuf */
                    567:        CanScroll,      /* can this terminal scroll? */
                    568:        Crashing,       /* we are in the middle of crashing */
                    569:        Asking,         /* are we on read a string from the terminal? */
                    570:        inIOread;       /* so we know whether we can do a redisplay. */
                    571: 
                    572: extern char    Minibuf[LBSIZE];
                    573: 
                    574: #define curmark                (curbuf->b_markring[curbuf->b_themark])
                    575: #define b_curmark(b)   (b->b_markring[b->b_themark])
                    576: 
                    577: extern Line    *killbuf[NUMKILLS];     /* array of pointers to killed stuff */
                    578: 
                    579: #define MESG_SIZE 128
                    580: extern char    mesgbuf[MESG_SIZE];
                    581: 
                    582: struct screenline {
                    583:        char    *s_line,
                    584:                *s_length;
                    585: };
                    586: 
                    587: extern int
                    588:        LastKeyStruck;
                    589: 
                    590: extern int
                    591:        InMacDefine,    /* are we defining a macro right now? */
                    592: 
                    593:        CapLine,        /* cursor line and cursor column */
                    594:        CapCol,
                    595: 
                    596:        UpdModLine,     /* whether we want to update the mode line */
                    597:        UpdMesg;        /* update the message line */
                    598: 
                    599: #define CATCH \
                    600: {\
                    601:        jmp_buf sav_jmp; \
                    602: \
                    603:        push_env(sav_jmp); \
                    604:        if (setjmp(mainjmp) == 0) {
                    605: 
                    606: #define ONERROR \
                    607:        } else { \
                    608: 
                    609: #define ENDCATCH \
                    610:        } \
                    611:        pop_env(sav_jmp); \
                    612: }
                    613: 
                    614: #include "externs.h"

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.