home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
- * is provided to you without charge, and with no warranty. You may give *
- * away copies of JOVE, including sources, provided that this notice is *
- * included in all the files. *
- ***************************************************************************/
-
- /* jove.h header file to be included by EVERYONE */
-
-
- #include <setjmp.h>
-
- #ifndef TUNED
- # include "tune.h"
- #endif
-
- #ifndef MAC
- # include <sys/types.h>
- #else
- # include <types.h>
- #endif
-
-
- #ifdef MSDOS
- #include <string.h>
- #endif
-
-
- #if !(defined(MSDOS) || defined(MAC))
- #define void int
- #endif
-
- #if !(defined(IBMPC) || defined(MAC))
- # define TERMCAP
- # define ASCII
- #endif
-
- #ifdef ASCII /* seven bit characters */
- # define NCHARS 0200
- #else
- # define NCHARS 0400
- #endif
- #define CHARMASK (NCHARS -1)
-
- #define private static
-
- #ifndef BSD4_2
- # ifdef MENLO_JCL
- # ifndef EUNICE
- # define signal sigset
- # endif
- # endif /* MENLO_JCL */
- #endif
-
- #define EOF -1
-
- #ifdef MSDOS
- # define NULL ((char *)0)
- # define NIL ((char *)0)
- #else
- # ifdef MAC
- # define NULL 0L
- # define NIL 0L
- # else
- # define NULL 0
- # define NIL 0
- # endif /* MAC */
- #endif /* MSDOS */
- /* kinds of regular expression compiles */
- #define NORM 0 /* nothing special */
- #define OKAY_RE 1 /* allow regular expressions */
- #define IN_CB 2 /* in curly brace; implies OKAY_RE */
-
- /* return codes for command completion (all < 0 because >= 0 are
- legitimate offsets into array of strings */
-
- #define AMBIGUOUS -2 /* matches more than one at this point */
- #define UNIQUE -3 /* matches only one string */
- #define ORIGINAL -4 /* matches no strings at all! */
- #define NULLSTRING -5 /* just hit return without typing anything */
-
- /* values for the `flags' argument to complete */
- #define NOTHING 0 /* opposite of RET_STATE */
- #define RET_STATE 1 /* return state when we hit return */
- #define RCOMMAND 2 /* we are reading a joverc file */
- #define CASEIND 4 /* map all to lower case */
-
- #define SAVE 01 /* this macro needs saving to a file */
-
- #define LBSIZE BUFSIZ /* same as a logical disk block */
- #ifndef MSDOS
- #define FILESIZE 256
- #else /* MSDOS */
- #define FILESIZE 64
- #endif /* MSDOS */
-
- #define FORWARD 1
- #define BACKWARD -1
-
- #define CTL(c) (c & 037)
- #define META(c) (c | 0200)
- #define RUBOUT '\177'
- #define LF CTL('J')
- #define CR CTL('M')
- #define BS CTL('H')
- #define ESC '\033'
-
- #define HALF(wp) ((wp->w_height - 1) / 2)
- #define IsModified(b) (b->b_modified)
- #define SIZE(wp) (wp->w_height - 1)
- #define SavLine(a, b) (a->l_dline = putline(b))
- #define SetLine(line) DotTo(line, 0)
- #define bobp() (firstp(curline) && bolp())
- #define bolp() (curchar == 0)
- #define eobp() (lastp(curline) && eolp())
- #define eolp() (linebuf[curchar] == '\0')
- #define firstp(line) (line == curbuf->b_first)
- #define getDOT() getline(curline->l_dline, linebuf)
- #define isdirty(line) (line->l_dline & DIRTY)
- #define lastp(line) (line == curbuf->b_last)
- #define makedirty(line) line->l_dline |= DIRTY
- #define one_windp() (fwind->w_next == fwind)
-
- #define CharUpcase(c) (CaseEquiv[c])
-
- extern int BufSize;
-
- #define ARG_CMD 1
- #define LINECMD 2
- #define KILLCMD 3 /* so we can merge kills */
- #define YANKCMD 4 /* so we can do ESC Y (yank-pop) */
-
- /* Buffer type */
-
- #define B_SCRATCH 1 /* for internal things, e.g. minibuffer ... */
- #define B_FILE 2 /* normal file (We Auto-save these.) */
- #define B_PROCESS 3 /* process output in this buffer */
-
- /* Major modes */
- #define FUNDAMENTAL 0 /* Fundamental mode */
- #define TEXT 1 /* Text mode */
- #define CMODE 2 /* C mode */
- #ifdef LISP
- # define LISPMODE 3 /* Lisp mode */
- # define NMAJORS 4
- #else
- # define NMAJORS 3
- #endif
-
- /* Minor Modes */
- #define Indent (1 << 0) /* indent same as previous line after return */
- #define ShowMatch (1 << 1) /* paren flash mode */
- #define Fill (1 << 2) /* text fill mode */
- #define OverWrite (1 << 3) /* over write mode */
- #define Abbrev (1 << 4) /* abbrev mode */
-
- #define BufMinorMode(b, x) (b->b_minor & x)
-
- #define MinorMode(x) BufMinorMode(curbuf, x)
- #define MajorMode(x) (curbuf->b_major == x)
- #define SetMajor(x) ((curbuf->b_major = x), UpdModLine = YES)
-
- #ifdef ASCII
- extern char CharTable[NMAJORS][128];
- extern char CaseEquiv[128];
- #else /* IBMPC or MAC */
- extern char CharTable[NMAJORS][256];
- extern char CaseEquiv[256];
- #endif /* ASCII */
-
- /* setjmp/longjmp args for DoKeys() mainjmp */
- #define FIRSTCALL 0
- #define ERROR 1
- #define COMPLAIN 2 /* do the error without a getDOT */
- #define QUIT 3 /* leave this level of recursion */
-
- #define QUIET 1 /* sure, why not? */
-
- #define YES 1
- #define NO 0
- #define TRUE 1
- #define FALSE 0
- #define ON 1
- #define OFF 0
- #define YES_NODIGIT 2
-
- #define INT_OKAY 0
- #define INT_BAD -1
-
- extern char *Mainbuf,
- *HomeDir, /* home directory */
- key_strokes[], /* strokes that make up current command */
- *Inputp;
-
- extern int HomeLen; /* length of home directory */
-
- extern char NullStr[];
-
- #if defined(VMUNIX)||defined(MSDOS)
- extern char genbuf[LBSIZE],
- linebuf[LBSIZE],
- iobuff[LBSIZE];
- #else
- extern char *genbuf, /* scratch pad points at s_genbuf (see main()) */
- *linebuf, /* points at s_linebuf */
- *iobuff; /* for file reading ... points at s_iobuff */
- #endif
-
- extern int InJoverc,
- Interactive;
-
- #define READ 0
- #define WRITE 1
- extern int errno;
-
- extern jmp_buf mainjmp;
-
- #ifdef IPROCS
- typedef struct process Process;
- #endif
- typedef struct window Window;
- typedef struct position Bufpos;
- typedef struct mark Mark;
- typedef struct buffer Buffer;
- typedef struct line Line;
- typedef struct iobuf IOBUF;
- typedef struct data_obj {
- int Type;
- char *Name;
- } data_obj; /* points to cmd, macro, or variable */
-
- typedef data_obj *keymap[NCHARS];
-
- struct line {
- Line *l_prev, /* pointer to prev */
- *l_next; /* pointer to next */
- disk_line l_dline; /* pointer to disk location */
- };
-
- #ifdef IPROCS
- struct process {
- Process *p_next;
- #ifdef PIPEPROCS
- int p_toproc, /* read p_fromproc and write p_toproc */
- p_portpid, /* pid of child (the portsrv) */
- p_pid; /* pid of real child i.e. not portsrv */
- #else
- int p_fd, /* file descriptor of pty? opened r/w */
- p_pid; /* pid of child (the shell) */
- #endif
- Buffer *p_buffer; /* add output to end of this buffer */
- char *p_name; /* ... */
- char p_state, /* State */
- p_howdied, /* Killed? or Exited? */
- p_reason; /* If signaled, p_reason is the signal; else
- it is the the exit code */
- Mark *p_mark; /* where output left us */
- data_obj
- *p_cmd; /* command to call when process dies */
- };
- #endif /* IPROCS */
-
- struct window {
- Window *w_prev, /* circular list */
- *w_next;
- Buffer *w_bufp; /* buffer associated with this window */
- Line *w_top, /* top line */
- *w_line; /* current line */
- int w_char,
- w_height, /* window height */
- w_topnum, /* line number of the topline */
- w_dotcol, /* UpdWindow sets this ... */
- w_dotline, /* ... and this */
- w_flags,
- #define W_TOPGONE 01
- #define W_CURGONE 02 /* topline (curline) of window has been deleted
- since the last time a redisplay was called */
- #define W_VISSPACE 04
- #define W_NUMLINES 010
- w_LRscroll; /* amount of LeftRight scrolling in window */
- #ifdef MAC
- int w_topline; /* row number of top line in window */
- char **w_control; /* scroll bar for window */
- #endif
- };
-
- extern Window *fwind, /* first window in list */
- *curwind; /* current window */
-
- struct position {
- Line *p_line;
- int p_char;
- };
-
- struct mark {
- Line *m_line;
- int m_char;
- Mark *m_next; /* list of marks */
- #define M_FIXED 00
- #define M_FLOATER 01
- #define M_BIG_DELETE 02
- char m_flags; /* FLOATERing mark? */
- };
-
- struct buffer {
- #ifdef MAC
- int Type; /* kludge... to look like a data_obj */
- char *Name; /* Name will not be used */
- #endif
- Buffer *b_next; /* next buffer in chain */
- char *b_name, /* buffer name */
- *b_fname; /* file name associated with buffer */
- dev_t b_dev; /* device of file name. */
- ino_t b_ino; /* inode of file name */
- time_t b_mtime; /* last modify time ...
- to detect two people writing
- to the same file */
- Line *b_first, /* pointer to first line in list */
- *b_dot, /* current line */
- *b_last; /* last line in list */
- int b_char; /* current character in line */
-
- #define NMARKS 8 /* number of marks in the ring */
-
- Mark *b_markring[NMARKS], /* new marks are pushed here */
- *b_marks; /* all the marks for this buffer */
- char b_themark, /* current mark (in b_markring) */
- b_type, /* file, scratch, process, iprocess */
- b_ntbf, /* needs to be found when we
- first select? */
- b_modified; /* is the buffer modified? */
- int b_major, /* major mode */
- b_minor; /* and minor mode */
- keymap *b_keybinds; /* local bindings (if any) */
- #ifdef IPROCS
- Process *b_process; /* process we're attached to */
- #endif
- };
-
- struct macro {
- int Type; /* in this case a macro */
- char *Name; /* name is always second ... */
- int m_len, /* length of macro so we can use ^@ */
- m_buflen, /* memory allocated for it */
- m_flags;
- char *m_body; /* actual body of the macro */
- struct macro
- *m_nextm;
- };
-
- struct variable {
- int Type; /* in this case a variable */
- char *Name; /* name is always second */
- int *v_value,
- v_flags;
- };
-
- struct cmd {
- int Type;
- char *Name;
- #ifdef MAC
- void (*c_proc)();
- #else
- int (*c_proc)();
- #endif
- #ifdef MAC
- char c_map; /* prefix map for About Jove... */
- char c_key; /* key binding for About Jove... */
- #endif
- };
-
- extern keymap mainmap, /* various key maps */
- pref1map,
- pref2map,
- miscmap;
- #ifdef MAC /* used in About Jove... */
- #define F_MAINMAP '\001'
- #define F_PREF1MAP '\002'
- #define F_PREF2MAP '\003'
- #endif
-
- extern data_obj *LastCmd; /* last command invoked */
-
- extern char *ProcFmt;
-
- extern struct cmd commands[];
- extern struct macro *macros;
- extern struct variable variables[];
-
- extern struct macro
- *macstack[],
- KeyMacro;
-
- #define FUNCTION 1
- #define VARIABLE 2
- #define MACRO 3
- #ifdef MAC
- # define BUFFER 6 /* menus can point to buffers, too */
- # define STRING 7 /* a menu string or divider */
- #endif
-
- #define TYPEMASK 07
- #define MAJOR_MODE 010
- #define MINOR_MODE 020
- #define DefMajor(x) (FUNCTION|MAJOR_MODE|(x << 8))
- #define DefMinor(x) (FUNCTION|MINOR_MODE|(x << 8))
-
- extern Buffer *world, /* first buffer */
- *curbuf; /* pointer into world for current buffer */
-
- #define curline curbuf->b_dot
- #define curchar curbuf->b_char
-
- #define NUMKILLS 10 /* number of kills saved in the kill ring */
-
- #ifdef MAC /* when doing ~DIRTY, we need high bits set */
- # define DIRTY (disk_line) 01 /* just needs updating for some reason */
- #else
- # define DIRTY 01 /* just needs updating for some reason */
- #endif
- #define MODELINE 02 /* this is a modeline */
- #define L_MOD 04 /* this line has been modified internally */
-
- struct scrimage {
- int s_offset, /* offset to start printing at */
- s_flags, /* various flags */
- s_id, /* which buffer line */
- s_vln; /* Visible Line Number */
- Line *s_lp; /* so we can turn off red bit */
- Window *s_window; /* window that contains this line */
- };
-
- extern struct scrimage
- *DesiredScreen, /* what we want */
- *PhysScreen; /* what we got */
-
- /* Variable flags (that can be set). */
- #define V_BASE10 01 /* is integer in base 10 */
- #define V_BASE8 02 /* is integer in base 8 */
- #define V_BOOL 04 /* is a boolean */
- #define V_STRING 010 /* is a string */
- #define V_CHAR 020 /* is a character */
- #define V_FILENAME 040 /* a file name (implies V_STRING) */
- #define V_TYPEMASK 077 /* mask off the extra bits */
- #define V_MODELINE 0100 /* update modeline */
- #define V_CLRSCREEN 0200 /* clear and redraw screen */
- #define V_TTY_RESET 0400 /* redo the tty modes */
-
- #ifdef MAC
- #ifdef TXT_TO_C
- int /* kludge, so setmaps will compile with variables */
- #else
- extern int
- #endif /* TXT_TO_C */
- #else
- extern int
- #endif /* MAC */
-
- OKXonXoff, /* disable start/stop characters */
- MetaKey, /* this terminal has a meta key */
- VisBell, /* use visible bell (if possible) */
- WrapScan, /* make searches wrap */
- #ifndef MAC
- phystab, /* terminal's tabstop settings */
- #endif
- tabstop, /* expand tabs to this number of spaces */
- #ifdef BACKUPFILES
- BkupOnWrite, /* make backup files when writing */
- #endif
- RMargin, /* right margin */
- LMargin, /* left margin */
- ScrollStep, /* how should we scroll */
- #ifndef MAC
- WtOnMk, /* write files on compile-it command */
- #endif
- EndWNewline, /* end files with a blank line */
- MarkThresh, /* moves greater than MarkThresh will SetMark */
- PDelay, /* paren flash delay in tenths of a second */
- CIndIncrmt, /* how much each indentation level pushes
- over in C mode */
- CreatMode, /* default mode for creat'ing files */
- CaseIgnore, /* case ignore search */
- #ifdef ABBREV
- AutoCaseAbbrev, /* automatically do case on abbreviations */
- #endif
- MarksShouldFloat, /* adjust marks on insertion/deletion */
- UseRE, /* use regular expressions in search */
- SyncFreq, /* how often to sync the file pointers */
- BriteMode, /* make the mode line inverse? */
- OkayBadChars, /* allow bad characters in files created
- by JOVE */
- UpdFreq, /* how often to update modeline */
- UseBuffers, /* use buffers with Typeout() */
- #ifdef BIFF
- BiffChk, /* turn off/on biff with entering/exiting jove */
- #endif
- MailInt, /* mail check interval */
- #ifdef ID_CHAR
- UseIC, /* whether or not to use i/d char
- processesing */
- #endif
- SExitChar, /* type this to stop i-search */
- AbortChar, /* cancels command input */
- IntChar, /* ttysets this to generate QUIT */
- DoEVexpand, /* treat $foo as environment variable */
- #ifdef F_COMPLETION
- DispBadFs, /* display filenames with bad extensions? */
- #endif
- #ifdef IBMPC
- Fgcolor,
- Bgcolor,
- Mdcolor,
- #endif /* IBMPC */
- #ifdef F_COMPLETION
- DispBadFs, /* display filenames with bad extensions? */
- #endif
- ScrollAll, /* we current line scrolls, scroll whole window? */
- #ifndef MAC
- EWSize; /* size to make the error window */
- #else
- Macmode, /* see mac.c */
- Keyonly,
- Bufchange,
- Modechange,
- Windchange,
- EventCmd;
- #endif /* MAC */
-
- #ifdef MAC
- # ifdef TXT_TO_C /* kludge, for setmaps with variables */
- char
- # else
- extern char
- # endif /* TXT_TO_C */
- #else
- extern char
- #endif /* MAC */
-
- #ifndef MAC
- ErrFmtStr[256], /* format string for parse errors */
- #endif
- #ifdef IPROCS
- proc_prompt[128], /* process prompt */
- #endif
- #ifdef F_COMPLETION
- BadExtensions[128], /* extensions (e.g., ".o" to ignore) */
- #endif
- #ifdef CMT_FMT
- CmtFmt[80],
- #endif
- ModeFmt[120], /* mode line format string */
- #ifdef UNIX
- Mailbox[FILESIZE], /* mailbox name */
- #endif /* UNIX */
- TmpFilePath[FILESIZE], /* directory/device to store tmp files */
- TagFile[FILESIZE], /* default tag file */
- Shell[FILESIZE]; /* shell to use */
-
- extern int
- TOabort, /* flag set by Typeout() */
- io, /* file descriptor for reading and writing files */
- errormsg, /* last message was an error message
- so don't erase the error before it
- has been read */
- this_cmd, /* ... */
- last_cmd, /* last command ... to implement appending
- to kill buffer */
- RecDepth, /* recursion depth */
- InputPending, /* nonzero if there is input waiting to
- be processed */
- killptr, /* index into killbuf */
- CanScroll, /* can this terminal scroll? */
- Crashing, /* we are in the middle of crashing */
- Asking, /* are we on read a string from the terminal? */
- inIOread; /* so we know whether we can do a redisplay. */
-
- extern char Minibuf[LBSIZE];
-
- #define curmark (curbuf->b_markring[curbuf->b_themark])
- #define b_curmark(b) (b->b_markring[b->b_themark])
-
- extern Line *killbuf[NUMKILLS]; /* array of pointers to killed stuff */
-
- #define MESG_SIZE 128
- extern char mesgbuf[MESG_SIZE];
-
- struct screenline {
- char *s_line,
- *s_length;
- };
-
- extern int
- LastKeyStruck;
-
- extern int
- InMacDefine, /* are we defining a macro right now? */
-
- CapLine, /* cursor line and cursor column */
- CapCol,
-
- UpdModLine, /* whether we want to update the mode line */
- UpdMesg; /* update the message line */
-
- #define CATCH \
- {\
- jmp_buf sav_jmp; \
- \
- push_env(sav_jmp); \
- if (setjmp(mainjmp) == 0) {
-
- #define ONERROR \
- } else { \
-
- #define ENDCATCH \
- } \
- pop_env(sav_jmp); \
- }
-
- #include "externs.h"
-