home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume14 / jove4.9 / part08 / jove.h next >
C/C++ Source or Header  |  1988-04-25  |  16KB  |  620 lines

  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. #ifdef ASCII
  164. extern char    CharTable[NMAJORS][128];
  165. extern char    CaseEquiv[128];
  166. #else /* IBMPC or MAC */
  167. extern char    CharTable[NMAJORS][256];
  168. extern char    CaseEquiv[256];
  169. #endif /* ASCII */
  170.  
  171. /* setjmp/longjmp args for DoKeys() mainjmp */
  172. #define FIRSTCALL    0
  173. #define ERROR        1
  174. #define COMPLAIN    2    /* do the error without a getDOT */
  175. #define QUIT        3    /* leave this level of recursion */
  176.  
  177. #define QUIET        1    /* sure, why not? */
  178.  
  179. #define YES        1
  180. #define NO        0
  181. #define TRUE        1
  182. #define FALSE        0
  183. #define ON        1
  184. #define OFF        0
  185. #define YES_NODIGIT    2
  186.  
  187. #define INT_OKAY    0
  188. #define INT_BAD        -1
  189.  
  190. extern char    *Mainbuf,
  191.         *HomeDir,    /* home directory */
  192.         key_strokes[],    /* strokes that make up current command */
  193.         *Inputp;
  194.  
  195. extern int    HomeLen;    /* length of home directory */
  196.  
  197. extern char    NullStr[];
  198.  
  199. #if defined(VMUNIX)||defined(MSDOS)
  200. extern char    genbuf[LBSIZE],
  201.         linebuf[LBSIZE],
  202.         iobuff[LBSIZE];
  203. #else
  204. extern char    *genbuf,    /* scratch pad points at s_genbuf (see main()) */
  205.         *linebuf,    /* points at s_linebuf */
  206.         *iobuff;    /* for file reading ... points at s_iobuff */
  207. #endif
  208.  
  209. extern int    InJoverc,
  210.         Interactive;
  211.  
  212. #define    READ    0
  213. #define    WRITE    1
  214. extern int    errno;
  215.  
  216. extern jmp_buf    mainjmp;
  217.  
  218. #ifdef IPROCS
  219. typedef struct process    Process;
  220. #endif
  221. typedef struct window    Window;
  222. typedef struct position    Bufpos;
  223. typedef struct mark    Mark;
  224. typedef struct buffer    Buffer;
  225. typedef struct line    Line;
  226. typedef struct iobuf    IOBUF;
  227. typedef struct data_obj {
  228.     int    Type;
  229.     char    *Name;
  230. } data_obj;    /* points to cmd, macro, or variable */
  231.  
  232. typedef data_obj    *keymap[NCHARS];
  233.  
  234. struct line {
  235.     Line    *l_prev,        /* pointer to prev */
  236.         *l_next;        /* pointer to next */
  237.     disk_line    l_dline;    /* pointer to disk location */
  238. };
  239.  
  240. #ifdef IPROCS
  241. struct process {
  242.     Process    *p_next;
  243. #ifdef PIPEPROCS
  244.     int    p_toproc,    /* read p_fromproc and write p_toproc */
  245.         p_portpid,    /* pid of child (the portsrv) */
  246.         p_pid;        /* pid of real child i.e. not portsrv */
  247. #else
  248.     int    p_fd,        /* file descriptor of pty? opened r/w */
  249.         p_pid;        /* pid of child (the shell) */
  250. #endif
  251.     Buffer    *p_buffer;    /* add output to end of this buffer */
  252.     char    *p_name;    /* ... */
  253.     char    p_state,    /* State */
  254.         p_howdied,    /* Killed? or Exited? */
  255.         p_reason;    /* If signaled, p_reason is the signal; else
  256.                    it is the the exit code */
  257.     Mark    *p_mark;    /* where output left us */
  258.     data_obj
  259.         *p_cmd;        /* command to call when process dies */
  260. };
  261. #endif /* IPROCS */
  262.  
  263. struct window {
  264.     Window    *w_prev,    /* circular list */
  265.         *w_next;
  266.     Buffer    *w_bufp;    /* buffer associated with this window */
  267.     Line    *w_top,        /* top line */
  268.         *w_line;    /* current line */
  269.     int    w_char,
  270.         w_height,    /* window height */
  271.         w_topnum,    /* line number of the topline */
  272.         w_dotcol,    /* UpdWindow sets this ... */
  273.         w_dotline,    /* ... and this */
  274.         w_flags,
  275. #define    W_TOPGONE    01
  276. #define    W_CURGONE    02    /* topline (curline) of window has been deleted
  277.                    since the last time a redisplay was called */
  278. #define W_VISSPACE    04
  279. #define W_NUMLINES    010
  280.         w_LRscroll;    /* amount of LeftRight scrolling in window */
  281. #ifdef MAC
  282.     int    w_topline;    /* row number of top line in window */
  283.     char **w_control;    /* scroll bar for window */
  284. #endif
  285. };
  286.  
  287. extern Window    *fwind,        /* first window in list */
  288.         *curwind;    /* current window */
  289.  
  290. struct position {
  291.     Line    *p_line;
  292.     int    p_char;
  293. };
  294.  
  295. struct mark {
  296.     Line    *m_line;
  297.     int    m_char;
  298.     Mark    *m_next;    /* list of marks */
  299. #define M_FIXED        00
  300. #define M_FLOATER    01
  301. #define M_BIG_DELETE    02
  302.     char    m_flags;    /* FLOATERing mark? */
  303. };
  304.  
  305. struct buffer {
  306. #ifdef MAC
  307.     int Type;        /* kludge... to look like a data_obj */
  308.     char *Name;        /* Name will not be used */
  309. #endif    
  310.     Buffer    *b_next;        /* next buffer in chain */
  311.     char    *b_name,        /* buffer name */
  312.         *b_fname;        /* file name associated with buffer */
  313.     dev_t    b_dev;            /* device of file name. */
  314.     ino_t    b_ino;            /* inode of file name */
  315.     time_t    b_mtime;        /* last modify time ...
  316.                        to detect two people writing
  317.                        to the same file */
  318.     Line    *b_first,        /* pointer to first line in list */
  319.         *b_dot,            /* current line */
  320.         *b_last;        /* last line in list */
  321.     int    b_char;            /* current character in line */
  322.  
  323. #define NMARKS    8            /* number of marks in the ring */
  324.  
  325.     Mark    *b_markring[NMARKS],    /* new marks are pushed here */
  326.         *b_marks;        /* all the marks for this buffer */
  327.     char    b_themark,        /* current mark (in b_markring) */
  328.         b_type,            /* file, scratch, process, iprocess */
  329.         b_ntbf,            /* needs to be found when we
  330.                        first select? */
  331.         b_modified;        /* is the buffer modified? */
  332.     int    b_major,        /* major mode */
  333.         b_minor;        /* and minor mode */
  334.     keymap    *b_keybinds;        /* local bindings (if any) */
  335. #ifdef IPROCS
  336.     Process    *b_process;        /* process we're attached to */
  337. #endif
  338. };
  339.  
  340. struct macro {
  341.     int    Type;        /* in this case a macro */
  342.     char    *Name;        /* name is always second ... */
  343.     int    m_len,        /* length of macro so we can use ^@ */
  344.         m_buflen,    /* memory allocated for it */
  345.         m_flags;
  346.     char    *m_body;    /* actual body of the macro */
  347.     struct macro
  348.         *m_nextm;
  349. };
  350.  
  351. struct variable {
  352.     int    Type;        /* in this case a variable */
  353.     char    *Name;        /* name is always second */
  354.     int    *v_value,
  355.         v_flags;
  356. };
  357.  
  358. struct cmd {
  359.     int    Type;
  360.     char    *Name;
  361. #ifdef MAC
  362.     void (*c_proc)();
  363. #else
  364.     int (*c_proc)();
  365. #endif
  366. #ifdef MAC
  367.     char c_map;            /* prefix map for About Jove... */
  368.     char c_key;            /* key binding for About Jove... */
  369. #endif
  370. };
  371.  
  372. extern keymap    mainmap,    /* various key maps */
  373.         pref1map,
  374.         pref2map,
  375.         miscmap;
  376. #ifdef MAC                    /* used in About Jove... */        
  377.     #define F_MAINMAP '\001'
  378.     #define F_PREF1MAP '\002'
  379.     #define F_PREF2MAP '\003'
  380. #endif
  381.  
  382. extern data_obj    *LastCmd;    /* last command invoked */
  383.  
  384. extern char    *ProcFmt;
  385.  
  386. extern struct cmd    commands[];
  387. extern struct macro    *macros;
  388. extern struct variable    variables[];
  389.  
  390. extern struct macro
  391.     *macstack[],
  392.     KeyMacro;
  393.  
  394. #define FUNCTION    1
  395. #define VARIABLE    2
  396. #define MACRO        3
  397. #ifdef MAC
  398. #    define BUFFER        6    /* menus can point to buffers, too */
  399. #    define STRING        7    /* a menu string or divider */
  400. #endif
  401.  
  402. #define TYPEMASK    07
  403. #define MAJOR_MODE    010
  404. #define MINOR_MODE    020
  405. #define DefMajor(x)    (FUNCTION|MAJOR_MODE|(x << 8))
  406. #define DefMinor(x)    (FUNCTION|MINOR_MODE|(x << 8))
  407.  
  408. extern Buffer    *world,        /* first buffer */
  409.         *curbuf;    /* pointer into world for current buffer */
  410.  
  411. #define curline    curbuf->b_dot
  412. #define curchar curbuf->b_char
  413.  
  414. #define NUMKILLS    10    /* number of kills saved in the kill ring */
  415.  
  416. #ifdef MAC        /* when doing ~DIRTY, we need high bits set */
  417. #    define DIRTY    (disk_line) 01    /* just needs updating for some reason */
  418. #else
  419. #    define DIRTY    01    /* just needs updating for some reason */
  420. #endif
  421. #define MODELINE    02    /* this is a modeline */
  422. #define L_MOD        04    /* this line has been modified internally */
  423.  
  424. struct scrimage {
  425.     int    s_offset,    /* offset to start printing at */
  426.         s_flags,    /* various flags */
  427.         s_id,        /* which buffer line */
  428.         s_vln;        /* Visible Line Number */
  429.     Line    *s_lp;        /* so we can turn off red bit */
  430.     Window    *s_window;    /* window that contains this line */
  431. };
  432.  
  433. extern struct scrimage
  434.     *DesiredScreen,        /* what we want */
  435.     *PhysScreen;        /* what we got */
  436.  
  437. /* Variable flags (that can be set). */
  438. #define V_BASE10    01    /* is integer in base 10 */
  439. #define V_BASE8        02    /* is integer in base 8 */
  440. #define V_BOOL        04    /* is a boolean */
  441. #define V_STRING    010    /* is a string */
  442. #define V_CHAR        020    /* is a character */
  443. #define V_FILENAME    040    /* a file name (implies V_STRING) */
  444. #define V_TYPEMASK    077    /* mask off the extra bits */
  445. #define V_MODELINE    0100    /* update modeline */
  446. #define V_CLRSCREEN    0200    /* clear and redraw screen */
  447. #define V_TTY_RESET    0400    /* redo the tty modes */
  448.  
  449. #ifdef MAC
  450. #ifdef TXT_TO_C
  451. int        /* kludge, so setmaps will compile with variables */
  452. #else
  453. extern int
  454. #endif /* TXT_TO_C */
  455. #else
  456. extern int
  457. #endif    /* MAC */
  458.  
  459.     OKXonXoff,        /* disable start/stop characters */
  460.     MetaKey,        /* this terminal has a meta key */
  461.     VisBell,        /* use visible bell (if possible) */
  462.     WrapScan,        /* make searches wrap */
  463. #ifndef MAC
  464.     phystab,        /* terminal's tabstop settings */ 
  465. #endif
  466.     tabstop,        /* expand tabs to this number of spaces */
  467. #ifdef BACKUPFILES
  468.     BkupOnWrite,        /* make backup files when writing */
  469. #endif
  470.     RMargin,        /* right margin */
  471.     LMargin,        /* left margin */
  472.     ScrollStep,        /* how should we scroll */
  473. #ifndef MAC
  474.     WtOnMk,            /* write files on compile-it command */
  475. #endif
  476.     EndWNewline,        /* end files with a blank line */
  477.     MarkThresh,        /* moves greater than MarkThresh will SetMark */
  478.     PDelay,            /* paren flash delay in tenths of a second */
  479.     CIndIncrmt,        /* how much each indentation level pushes
  480.                    over in C mode */
  481.     CreatMode,        /* default mode for creat'ing files */
  482.     CaseIgnore,        /* case ignore search */
  483. #ifdef ABBREV
  484.     AutoCaseAbbrev,        /* automatically do case on abbreviations */
  485. #endif
  486.     MarksShouldFloat,    /* adjust marks on insertion/deletion */
  487.     UseRE,            /* use regular expressions in search */
  488.     SyncFreq,        /* how often to sync the file pointers */
  489.     BriteMode,        /* make the mode line inverse? */
  490.     OkayBadChars,        /* allow bad characters in files created
  491.                    by JOVE */
  492.     UpdFreq,        /* how often to update modeline */
  493.     UseBuffers,        /* use buffers with Typeout() */
  494. #ifdef BIFF
  495.     BiffChk,        /* turn off/on biff with entering/exiting jove */
  496. #endif
  497.     MailInt,        /* mail check interval */
  498. #ifdef ID_CHAR
  499.     UseIC,            /* whether or not to use i/d char
  500.                    processesing */
  501. #endif
  502.     SExitChar,        /* type this to stop i-search */
  503.     AbortChar,        /* cancels command input */
  504.     IntChar,        /* ttysets this to generate QUIT */
  505.     DoEVexpand,        /* treat $foo as environment variable */
  506. #ifdef F_COMPLETION
  507.      DispBadFs,        /* display filenames with bad extensions? */
  508. #endif    
  509. #ifdef IBMPC
  510.     Fgcolor,
  511.     Bgcolor,
  512.     Mdcolor,
  513. #endif /* IBMPC */
  514. #ifdef F_COMPLETION
  515.     DispBadFs,        /* display filenames with bad extensions? */
  516. #endif
  517.     ScrollAll,        /* we current line scrolls, scroll whole window? */
  518. #ifndef MAC
  519.     EWSize;            /* size to make the error window */
  520. #else    
  521.     Macmode,    /* see mac.c */
  522.     Keyonly,
  523.     Bufchange,
  524.     Modechange,
  525.     Windchange,
  526.     EventCmd;
  527. #endif    /* MAC */
  528.  
  529. #ifdef MAC
  530. #    ifdef TXT_TO_C    /* kludge, for setmaps with variables */
  531. char
  532. #    else
  533. extern char
  534. #    endif /* TXT_TO_C */
  535. #else
  536. extern char
  537. #endif /* MAC */
  538.  
  539. #ifndef MAC
  540.     ErrFmtStr[256],        /* format string for parse errors */
  541. #endif
  542. #ifdef IPROCS
  543.     proc_prompt[128],    /* process prompt */
  544. #endif
  545. #ifdef F_COMPLETION
  546.     BadExtensions[128],    /* extensions (e.g., ".o" to ignore) */
  547. #endif
  548. #ifdef CMT_FMT
  549.     CmtFmt[80],
  550. #endif
  551.     ModeFmt[120],        /* mode line format string */
  552. #ifdef UNIX
  553.     Mailbox[FILESIZE],        /* mailbox name */
  554. #endif /* UNIX */
  555.     TmpFilePath[FILESIZE],    /* directory/device to store tmp files */
  556.     TagFile[FILESIZE],        /* default tag file */
  557.     Shell[FILESIZE];        /* shell to use */
  558.  
  559. extern int
  560.     TOabort,    /* flag set by Typeout() */
  561.     io,        /* file descriptor for reading and writing files */
  562.     errormsg,    /* last message was an error message
  563.                so don't erase the error before it
  564.                has been read */
  565.     this_cmd,    /* ... */
  566.     last_cmd,    /* last command ... to implement appending
  567.                to kill buffer */
  568.     RecDepth,    /* recursion depth */
  569.     InputPending,    /* nonzero if there is input waiting to
  570.                be processed */
  571.      killptr,    /* index into killbuf */
  572.     CanScroll,    /* can this terminal scroll? */
  573.     Crashing,    /* we are in the middle of crashing */
  574.     Asking,        /* are we on read a string from the terminal? */
  575.     inIOread;    /* so we know whether we can do a redisplay. */
  576.  
  577. extern char    Minibuf[LBSIZE];
  578.  
  579. #define curmark        (curbuf->b_markring[curbuf->b_themark])
  580. #define b_curmark(b)    (b->b_markring[b->b_themark])
  581.  
  582. extern Line    *killbuf[NUMKILLS];    /* array of pointers to killed stuff */
  583.  
  584. #define MESG_SIZE 128
  585. extern char    mesgbuf[MESG_SIZE];
  586.  
  587. struct screenline {
  588.     char    *s_line,
  589.         *s_length;
  590. };
  591.  
  592. extern int
  593.     LastKeyStruck;
  594.  
  595. extern int
  596.     InMacDefine,    /* are we defining a macro right now? */
  597.  
  598.     CapLine,    /* cursor line and cursor column */
  599.     CapCol,
  600.  
  601.     UpdModLine,    /* whether we want to update the mode line */
  602.     UpdMesg;    /* update the message line */
  603.  
  604. #define CATCH \
  605. {\
  606.     jmp_buf    sav_jmp; \
  607. \
  608.     push_env(sav_jmp); \
  609.     if (setjmp(mainjmp) == 0) {
  610.  
  611. #define ONERROR \
  612.     } else { \
  613.  
  614. #define ENDCATCH \
  615.     } \
  616.     pop_env(sav_jmp); \
  617. }
  618.  
  619. #include "externs.h"
  620.