Annotation of 43BSD/contrib/jove/jove.h, revision 1.1

1.1     ! root        1: /*************************************************************************
        !             2:  * This program is copyright (C) 1985, 1986 by Jonathan Payne.  It is    *
        !             3:  * provided to you without charge for use only on a licensed Unix        *
        !             4:  * system.  You may copy JOVE provided that this notice is included with *
        !             5:  * the copy.  You may not sell copies of this program or versions        *
        !             6:  * modified for use on microcomputer systems, unless the copies are      *
        !             7:  * included with a Unix system distribution and the source is provided.  *
        !             8:  *************************************************************************/
        !             9: 
        !            10: /* jove.h header file to be included by EVERYONE */
        !            11: 
        !            12: #include <setjmp.h>
        !            13: #include <sys/types.h>
        !            14: 
        !            15: #ifndef TUNED
        !            16: #   include "tune.h"
        !            17: #endif
        !            18: 
        !            19: #define private        static
        !            20: 
        !            21: #ifndef BSD4_2
        !            22: #   ifdef MENLO_JCL
        !            23: #      ifndef EUNICE
        !            24: #              define signal   sigset
        !            25: #      endif
        !            26: #   endif MENLO_JCL
        !            27: #endif
        !            28: 
        !            29: #define EOF    -1
        !            30: #define NULL   0
        !            31: #define NIL    0
        !            32: 
        !            33: /* kinds of regular expression compiles */
        !            34: #define NORM   0       /* nothing special */
        !            35: #define OKAY_RE        1       /* allow regular expressions */
        !            36: #define IN_CB  2       /* in curly brace; implies OKAY_RE */
        !            37: 
        !            38: /* return codes for command completion (all < 0 because >= 0 are
        !            39:    legitimate offsets into array of strings */
        !            40: 
        !            41: #define AMBIGUOUS      -2      /* matches more than one at this point */
        !            42: #define UNIQUE         -3      /* matches only one string */
        !            43: #define ORIGINAL       -4      /* matches no strings at all! */
        !            44: #define NULLSTRING     -5      /* just hit return without typing anything */
        !            45: 
        !            46: /* values for the `flags' argument to complete */
        !            47: #define NOTHING                0       /* opposite of RET_STATE */
        !            48: #define RET_STATE      1       /* return state when we hit return */
        !            49: #define RCOMMAND       2       /* we are reading a joverc file */
        !            50: 
        !            51: #define DEFINE         01      /* defining this macro */
        !            52: #define EXECUTE                02      /* executing this macro */
        !            53: #define SAVE           04      /* this macro needs saving to a file */
        !            54: 
        !            55: #define        LBSIZE          BUFSIZ  /* same as a logical disk block */
        !            56: #define FILESIZE       256
        !            57: 
        !            58: #define FORWARD                1
        !            59: #define BACKWARD       -1
        !            60: 
        !            61: #define CTL(c)         ('c' & 037)
        !            62: #define META(c)                ('c' | 0200)
        !            63: #define RUBOUT         '\177'
        !            64: #define LF             CTL(J)
        !            65: #define CR             CTL(M)
        !            66: #define BS             CTL(H)
        !            67: #define ESC            `\033'
        !            68: 
        !            69: #define DoTimes(f, n)  exp_p = 1, exp = n, f
        !            70: #define HALF(wp)       ((wp->w_height - 1) / 2)
        !            71: #define IsModified(b)  (b->b_modified)
        !            72: #define SIZE(wp)       (wp->w_height - 1)
        !            73: #define SavLine(a, b)  (a->l_dline = putline(b))
        !            74: #define SetLine(line)  DotTo(line, 0)
        !            75: #define bobp()         (firstp(curline) && bolp())
        !            76: #define bolp()         (curchar == 0)
        !            77: #define eobp()         (lastp(curline) && eolp())
        !            78: #define eolp()         (linebuf[curchar] == '\0')
        !            79: #define firstp(line)   (line == curbuf->b_first)
        !            80: #define getDOT()       getline(curline->l_dline, linebuf)
        !            81: #define isdirty(line)  (line->l_dline & DIRTY)
        !            82: #define lastp(line)    (line == curbuf->b_last)
        !            83: #define makedirty(line)        line->l_dline |= DIRTY
        !            84: #define one_windp()    (fwind->w_next == fwind)
        !            85: 
        !            86: extern int     OkayAbort,      /* okay to abort redisplay */
        !            87:                BufSize;
        !            88: 
        !            89: #define ARG_CMD                1
        !            90: #define LINECMD                2
        !            91: #define KILLCMD                3       /* so we can merge kills */
        !            92: #define YANKCMD                4       /* so we can do ESC Y (yank-pop) */
        !            93: 
        !            94: /* Buffer type */
        !            95: 
        !            96: #define B_SCRATCH      1       /* for internal things, e.g. minibuffer ... */
        !            97: #define B_FILE         2       /* normal file (We Auto-save these.) */
        !            98: #define B_PROCESS      3       /* process output in this buffer */
        !            99: #define B_IPROCESS     4       /* interactive process attached to this buffer */
        !           100: 
        !           101: /* Major modes */
        !           102: #define FUNDAMENTAL    0       /* Fundamental mode */
        !           103: #define TEXT           1       /* Text mode */
        !           104: #define CMODE          2       /* C mode */
        !           105: #ifdef LISP
        !           106: #      define LISPMODE         3       /* Lisp mode */
        !           107: #      define NMAJORS          4
        !           108: #else
        !           109: #      define NMAJORS  3
        !           110: #endif
        !           111: 
        !           112: /* Minor Modes */
        !           113: #define Indent         (1 << 0)        /* indent same as previous line after return */
        !           114: #define ShowMatch      (1 << 1)        /* paren flash mode */
        !           115: #define Fill           (1 << 2)        /* text fill mode */
        !           116: #define OverWrite      (1 << 3)        /* over write mode */
        !           117: #define Abbrev         (1 << 4)        /* abbrev mode */
        !           118: 
        !           119: #define BufMinorMode(b, x)     (b->b_minor & x)
        !           120: 
        !           121: #define MinorMode(x)   BufMinorMode(curbuf, x)
        !           122: #define MajorMode(x)   (curbuf->b_major == x)
        !           123: #define SetMajor(x)    ((curbuf->b_major = x), UpdModLine++)
        !           124: 
        !           125: extern char    CharTable[NMAJORS][128];
        !           126: 
        !           127: /* setjmp/longjmp args for DoKeys() mainjmp */
        !           128: #define FIRSTCALL      0
        !           129: #define ERROR          1
        !           130: #define COMPLAIN       2       /* do the error without a getDOT */
        !           131: #define QUIT           3       /* leave this level of recusion */
        !           132: 
        !           133: #define QUIET          1       /* sure, why not? */
        !           134: 
        !           135: #define YES            1
        !           136: #define NO             0
        !           137: #define TRUE           1
        !           138: #define FALSE          0
        !           139: #define ON             1
        !           140: #define OFF            0
        !           141: 
        !           142: extern char    *Mainbuf,
        !           143:                *HomeDir,       /* home directory */
        !           144:                key_strokes[],  /* strokes that make up current command */
        !           145:                *Inputp;
        !           146: 
        !           147: extern int     HomeLen;        /* length of home directory */
        !           148: 
        !           149: extern char    NullStr[];
        !           150: 
        !           151: #ifdef VMUNIX
        !           152: extern char    genbuf[LBSIZE],
        !           153:                linebuf[LBSIZE],
        !           154:                iobuff[LBSIZE];
        !           155: #else
        !           156: extern char    *genbuf,        /* scratch pad points at s_genbuf (see main()) */
        !           157:                *linebuf,       /* points at s_linebuf */
        !           158:                *iobuff;        /* for file reading ... points at s_iobuff */
        !           159: #endif
        !           160: 
        !           161: extern int     InJoverc,
        !           162:                Interactive;
        !           163: 
        !           164: #define        READ    0
        !           165: #define        WRITE   1
        !           166: extern int     errno;
        !           167: 
        !           168: extern jmp_buf mainjmp;
        !           169: 
        !           170: typedef struct window  Window;
        !           171: typedef struct position        Bufpos;
        !           172: typedef struct mark    Mark;
        !           173: typedef struct buffer  Buffer;
        !           174: typedef struct line    Line;
        !           175: typedef struct iobuf   IOBUF;
        !           176: 
        !           177: struct line {
        !           178:        Line    *l_prev,                /* pointer to prev */
        !           179:                *l_next;                /* pointer to next */
        !           180:        disk_line       l_dline;        /* pointer to disk location */
        !           181: };
        !           182: 
        !           183: struct window {
        !           184:        Window  *w_prev,        /* circular list */
        !           185:                *w_next;
        !           186:        Buffer  *w_bufp;        /* buffer associated with this window */
        !           187:        Line    *w_top,         /* top line */
        !           188:                *w_line;        /* current line */
        !           189:        int     w_char,
        !           190:                w_height,       /* window height */
        !           191:                w_topnum,       /* line number of the topline */
        !           192:                w_offset,       /* currently unused */
        !           193:                w_numlines,     /* display line numbervs in this window? */
        !           194:                w_visspace,     /* display whitespace visibly? */
        !           195:                w_dotcol,       /* UpdWindow sets this ... */
        !           196:                w_dotline,      /* ... and this */
        !           197:                w_flags;
        !           198: #define        TOPGONE 01
        !           199: #define        CURGONE 02      /* topline (curline) of window has been deleted
        !           200:                           since the last time a redisplay was called */
        !           201: };
        !           202: 
        !           203: extern Window  *fwind,         /* first window in list */
        !           204:                *curwind;       /* current window */
        !           205: 
        !           206: struct position {
        !           207:        Line    *p_line;
        !           208:        int     p_char;
        !           209: };
        !           210: 
        !           211: struct mark {
        !           212:        Line    *m_line;
        !           213:        int     m_char;
        !           214:        Mark    *m_next;        /* list of marks */
        !           215: #define FLOATER        1
        !           216:        char    m_floater;      /* FLOATERing mark? */
        !           217: };
        !           218: 
        !           219: struct buffer {
        !           220:        Buffer  *b_next;                /* next buffer in chain */
        !           221:        char    *b_name,                /* buffer name */
        !           222:                *b_fname;               /* file name associated with buffer */
        !           223:        ino_t   b_ino;                  /* inode of file name */
        !           224:        time_t  b_mtime;                /* last modify time ...
        !           225:                                           to detect two people writing
        !           226:                                           to the same file */
        !           227:        Line    *b_first,               /* pointer to first line in list */
        !           228:                *b_dot,                 /* current line */
        !           229:                *b_last;                /* last line in list */
        !           230:        int     b_char;                 /* current character in line */
        !           231: 
        !           232: #define NMARKS 16                      /* number of marks in the ring */
        !           233: 
        !           234:        Mark    *b_markring[NMARKS],    /* new marks are pushed saved here */
        !           235:                *b_marks;               /* all the marks for this buffer */
        !           236:        int     b_themark;              /* current mark */
        !           237:        char    b_type,                 /* file, scratch, process, iprocess */
        !           238:                b_ntbf,                 /* needs to be found when we
        !           239:                                           first select? */
        !           240:                b_modified;             /* is the buffer modified? */
        !           241:        int     b_major,                /* major mode */
        !           242:                b_minor;                /* and minor mode */
        !           243: };
        !           244: 
        !           245: struct macro {
        !           246:        int     Type;           /* in this case a macro */
        !           247:        char    *Name;          /* name is always second ... */
        !           248:        int     m_len,          /* length of macro so we can use ^@ */
        !           249:                m_buflen,       /* memory allocated for it */
        !           250:                m_offset,       /* index into body for defining and running */
        !           251:                m_flags,        /* defining/running this macro? */
        !           252:                m_ntimes;       /* number of times to run this macro */
        !           253:        char    *m_body;        /* actual body of the macro */
        !           254:        struct macro
        !           255:                *m_nextm;
        !           256: };
        !           257: 
        !           258: struct variable {
        !           259:        int     Type;           /* in this case a variable */
        !           260:        char    *Name;          /* name is always second */
        !           261:        int     *v_value,
        !           262:                v_flags;
        !           263: };
        !           264: 
        !           265: struct cmd {
        !           266:        int     Type;
        !           267:        char    *Name;
        !           268:        int     (*c_proc)();
        !           269: };
        !           270: 
        !           271: typedef struct data_obj {
        !           272:        int     Type;
        !           273:        char    *Name;
        !           274: } data_obj;    /* points to cmd, macro, or variable */
        !           275: 
        !           276: extern data_obj
        !           277:        *mainmap[],     /* various key maps */
        !           278:        *pref1map[],
        !           279:        *pref2map[],
        !           280:        *miscmap[],
        !           281:        *LastCmd;       /* Last command invoked */
        !           282: 
        !           283: extern char    *ProcFmt;
        !           284: 
        !           285: extern struct cmd      commands[];
        !           286: extern struct macro    *macros;
        !           287: extern struct variable variables[];
        !           288: 
        !           289: extern struct macro
        !           290:        *macstack[],
        !           291:        KeyMacro;
        !           292: 
        !           293: #define FUNCTION       1
        !           294: #define VARIABLE       2
        !           295: #define MACRO          3
        !           296: #define TYPEMASK       07
        !           297: #define MAJOR_MODE     010
        !           298: #define MINOR_MODE     020
        !           299: #define DefMajor(x)    (FUNCTION|MAJOR_MODE|(x << 8))
        !           300: #define DefMinor(x)    (FUNCTION|MINOR_MODE|(x << 8))
        !           301: 
        !           302: extern Buffer  *world,                 /* first buffer */
        !           303:                *curbuf;                /* pointer into world for current buffer */
        !           304: 
        !           305: #define NUMKILLS       10      /* number of kills saved in the kill ring */
        !           306: 
        !           307: #define DIRTY          01      /* just needs updating for some reason */
        !           308: #define MODELINE       02      /* this is a modeline */
        !           309: #define L_MOD          04      /* this line has been modified internally */
        !           310: 
        !           311: struct scrimage {
        !           312:        int     s_offset,       /* offset to start printing at */
        !           313:                s_flags,        /* various flags */
        !           314:                s_id,           /* which buffer line */
        !           315:                s_vln;          /* Visible Line Number */
        !           316:        Line    *s_lp;          /* so we can turn off red bit */
        !           317:        Window  *s_window;      /* window that contains this line */
        !           318: };
        !           319: 
        !           320: extern struct scrimage
        !           321:        *DesiredScreen,         /* what we want */
        !           322:        *PhysScreen;            /* what we got */
        !           323: 
        !           324: /* Variable flags (that can be set). */
        !           325: #define V_BASE10       01      /* is integer in base 10 */
        !           326: #define V_BASE8                02      /* is integer in base 8 */
        !           327: #define V_BOOL         04      /* is a boolean */
        !           328: #define V_STRING       010     /* is a string */
        !           329: #define V_CHAR         020     /* is a character */
        !           330: #define V_TYPEMASK     037     /* mask off the display bits */
        !           331: #define V_MODELINE     040     /* update modeline */
        !           332: #define V_CLRSCREEN    0100    /* clear and redraw screen */
        !           333: #define V_TTY_RESET    0200    /* redo the tty modes because we may want
        !           334:                                   to change some things */
        !           335: 
        !           336: extern int
        !           337:        OKXonXoff,              /* disable start/stop characters */
        !           338:        MetaKey,                /* this terminal has a meta key */
        !           339:        VisBell,                /* use visible bell (if possible) */
        !           340:        WrapScan,               /* make searches wrap */
        !           341:        phystab,                /* terminal's tabstop settings */ 
        !           342:        tabstop,                /* expand tabs to this number of spaces */
        !           343: #ifdef BACKUPFILES
        !           344:        BkupOnWrite,            /* make backup files when writing */
        !           345: #endif
        !           346:        RMargin,                /* right margin */
        !           347:        LMargin,                /* left margin */
        !           348:        ScrollStep,             /* how should we scroll */
        !           349:        WtOnMk,                 /* write files on compile-it command */
        !           350:        EndWNewline,            /* end files with a blank line */
        !           351:        MarkThresh,             /* moves greater than MarkThresh
        !           352:                                   will SetMark */
        !           353:        PDelay,                 /* paren flash delay in tenths of a second */
        !           354:        CIndIncrmt,             /* how much each indentation level pushes
        !           355:                                   over in C mode */
        !           356:        CreatMode,              /* default mode for creat'ing files */
        !           357:        CaseIgnore,             /* case ignore search */
        !           358: #ifdef ABBREV
        !           359:        AutoCaseAbbrev,         /* automatically do case on abbreviations */
        !           360: #endif
        !           361:        MarksShouldFloat,       /* adjust marks on insertion/deletion */
        !           362:        UseRE,                  /* use regular expressions in search */
        !           363:        SyncFreq,               /* how often to sync the file pointers */
        !           364:        BriteMode,              /* make the mode line inverse? */
        !           365:        OkayBadChars,           /* allow bad characters in files created
        !           366:                                   by JOVE */
        !           367:        UpdFreq,                /* how often to update modeline */
        !           368:        UseBuffers,             /* use buffers with Typeout() */
        !           369: #ifdef BIFF
        !           370:        BiffChk,                /* turn off/on biff with entering/exiting jove */
        !           371: #endif
        !           372:        MailInt,                /* mail check interval */
        !           373: #ifdef ID_CHAR
        !           374:        UseIC,                  /* whether or not to use i/d char
        !           375:                                   processesing */
        !           376:        SExitChar,              /* type this to stop i-search */
        !           377: #endif
        !           378:        EWSize;                 /* size to make the error window */
        !           379: 
        !           380: extern char
        !           381: #ifdef IPROCS
        !           382:        proc_prompt[80],        /* process prompt */
        !           383: #endif
        !           384: #ifdef F_COMPLETION
        !           385:        BadExtensions[128],     /* extensions (e.g., ".o" to ignore) */
        !           386: #endif
        !           387: #ifdef CMT_FMT
        !           388:        CmtFmt[80],
        !           389: #endif
        !           390:        ModeFmt[120],           /* mode line format string */
        !           391:        Mailbox[128],           /* mailbox name */
        !           392:        TagFile[128],           /* default tag file */
        !           393:        Shell[40];              /* shell to use */
        !           394: 
        !           395: extern int
        !           396:        exp,            /* argument count */
        !           397:        exp_p,          /* argument count is supplied */
        !           398: 
        !           399:        TOabort,        /* flag set by Typeout() */
        !           400:        io,             /* file descriptor for reading and writing files */
        !           401:        errormsg,       /* last message was an error message
        !           402:                           so don't erase the error before it
        !           403:                           has been read */
        !           404:        this_cmd,       /* ... */
        !           405:        last_cmd,       /* last command ... to implement appending
        !           406:                           to kill buffer */
        !           407:        RecDepth,       /* recursion depth */
        !           408:        InputPending,   /* nonzero if there is input waiting to
        !           409:                           be processed */
        !           410:        killptr,        /* index into killbuf */
        !           411:        CanScroll,      /* can this terminal scroll? */
        !           412:        Crashing,       /* we are in the middle of crashing */
        !           413:        Asking,         /* are we on read a string from the terminal? */
        !           414:        inIOread;       /* so we know whether we can do a redisplay. */
        !           415: 
        !           416: extern char    Minibuf[LBSIZE];
        !           417: 
        !           418: #define curline        curbuf->b_dot
        !           419: #define curchar curbuf->b_char
        !           420: 
        !           421: #define curmark                (curbuf->b_markring[curbuf->b_themark])
        !           422: #define b_curmark(b)   (b->b_markring[b->b_themark])
        !           423: 
        !           424: extern Line    *killbuf[NUMKILLS];     /* array of pointers to killed stuff */
        !           425: 
        !           426: #define MESG_SIZE 128
        !           427: extern char    mesgbuf[MESG_SIZE];
        !           428: 
        !           429: struct screenline {
        !           430:        char    *s_line,
        !           431:                *s_length;
        !           432: };
        !           433: 
        !           434: extern int
        !           435:        LastKeyStruck;
        !           436: 
        !           437: extern int
        !           438:        stackp,
        !           439: 
        !           440:        CapLine,        /* cursor line and cursor column */
        !           441:        CapCol,
        !           442: 
        !           443:        UpdModLine,     /* whether we want to update the mode line */
        !           444:        UpdMesg;        /* update the message line */
        !           445: 
        !           446: #define CATCH \
        !           447: {\
        !           448:        jmp_buf sav_jmp; \
        !           449: \
        !           450:        push_env(sav_jmp); \
        !           451:        if (setjmp(mainjmp) == 0) {
        !           452: 
        !           453: #define ONERROR \
        !           454:        } else { \
        !           455: 
        !           456: #define ENDCATCH \
        !           457:        } \
        !           458:        pop_env(sav_jmp); \
        !           459: }
        !           460: 
        !           461: extern int
        !           462:        read(),
        !           463:        write();
        !           464:        getch();
        !           465: 
        !           466: extern time_t  time();
        !           467: extern long    lseek();
        !           468: 
        !           469: extern disk_line
        !           470:        putline();
        !           471: 
        !           472: extern data_obj
        !           473:        *findcom(),
        !           474:        *findvar(),
        !           475:        *findmac();
        !           476: 
        !           477: extern Line
        !           478:        *next_line(),
        !           479:        *prev_line(),
        !           480:        *nbufline(),
        !           481:        *reg_delete(),
        !           482:        *lastline(),
        !           483:        *listput();
        !           484: 
        !           485: extern char
        !           486:        *getsearch(),
        !           487:        *pwd(),
        !           488:        *itoa(),
        !           489:        *get_time(),
        !           490:        *copystr(),
        !           491:        *basename(),
        !           492:        *filename(),
        !           493:        *getblock(),
        !           494:        *IOerr(),
        !           495:        *index(),
        !           496:        *ask(),
        !           497:        *do_ask(),
        !           498:        *ask_buf(),
        !           499:        *ask_file(),
        !           500:        *getline(),
        !           501:        *lcontents(),
        !           502:        *getblock(),
        !           503:        *malloc(),
        !           504:        *emalloc(),
        !           505:        *mktemp(),
        !           506:        *realloc(),
        !           507:        *ltobuf(),
        !           508:        *lbptr(),
        !           509:        *rindex(),
        !           510:        *getenv(),
        !           511:        *tgoto(),
        !           512:        *pr_name(),
        !           513:        *sprint(),
        !           514:        *StrIndex();
        !           515: 
        !           516: extern Bufpos
        !           517:        *docompiled(),
        !           518:        *dosearch(),
        !           519:        *DoYank(),
        !           520:        *c_indent(),
        !           521: #ifdef LISP
        !           522:        *lisp_indent(),
        !           523: #endif
        !           524:        *m_paren();
        !           525: 
        !           526: extern Mark
        !           527:        *CurMark(),
        !           528:        *MakeMark();
        !           529: 
        !           530: extern Window
        !           531:        *windlook(),
        !           532:        *windbp(),
        !           533:        *div_wind();
        !           534: 
        !           535: extern data_obj
        !           536:        **IsPrefix();
        !           537: 
        !           538: extern Buffer
        !           539:        *do_find(),
        !           540:        *do_select(),
        !           541:        *mak_buf(),
        !           542:        *buf_exists(),
        !           543:        *file_exists();
        !           544: 
        !           545: struct cmd *
        !           546:        FindCmd();

unix.superglobalmegacorp.com

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