Annotation of src/usr.bin/mg/def.h, Revision 1.25
1.25 ! vincent 1: /* $OpenBSD: def.h,v 1.24 2002/01/18 08:37:08 art Exp $ */
1.6 niklas 2:
1.1 deraadt 3: /*
4: * This file is the general header file for all parts
1.4 millert 5: * of the Mg display editor. It contains all of the
1.1 deraadt 6: * general definitions and macros. It also contains some
7: * conditional compilation flags. All of the per-system and
8: * per-terminal definitions are in special header files.
9: * The most common reason to edit this file would be to zap
10: * the definition of CVMVAS or BACKUP.
11: */
1.4 millert 12: #include "sysdef.h" /* Order is critical. */
1.1 deraadt 13: #include "ttydef.h"
14: #include "chrdef.h"
15:
16: #ifdef NO_MACRO
17: #ifndef NO_STARTUP
1.4 millert 18: #define NO_STARTUP /* NO_MACRO implies NO_STARTUP */
1.1 deraadt 19: #endif
20: #endif
21:
1.18 mickey 22: typedef int (*PF)(); /* generally useful type */
1.1 deraadt 23:
24: /*
25: * Table sizes, etc.
26: */
1.7 art 27: #define NFILEN 1024 /* Length, file name. */
28: #define NBUFN NFILEN /* Length, buffer name. */
1.4 millert 29: #define NLINE 256 /* Length, line. */
30: #define PBMODES 4 /* modes per buffer */
31: #define NKBDM 256 /* Length, keyboard macro. */
32: #define NPAT 80 /* Length, pattern. */
33: #define HUGE 1000 /* A rather large number. */
34: #define NSRCH 128 /* Undoable search commands. */
35: #define NXNAME 64 /* Length, extended command. */
36: #define NKNAME 20 /* Length, key names */
1.1 deraadt 37: /*
38: * Universal.
39: */
1.4 millert 40: #define FALSE 0 /* False, no, bad, etc. */
41: #define TRUE 1 /* True, yes, good, etc. */
42: #define ABORT 2 /* Death, ^G, abort, etc. */
1.1 deraadt 43:
1.4 millert 44: #define KPROMPT 2 /* keyboard prompt */
1.1 deraadt 45:
46: /*
47: * These flag bits keep track of
48: * some aspects of the last command. The CFCPCN
49: * flag controls goal column setting. The CFKILL
50: * flag controls the clearing versus appending
51: * of data in the kill buffer.
52: */
1.4 millert 53: #define CFCPCN 0x0001 /* Last command was C-P, C-N */
54: #define CFKILL 0x0002 /* Last command was a kill */
55: #define CFINS 0x0004 /* Last command was self-insert */
1.1 deraadt 56:
57: /*
58: * File I/O.
59: */
1.4 millert 60: #define FIOSUC 0 /* Success. */
61: #define FIOFNF 1 /* File not found. */
62: #define FIOEOF 2 /* End of file. */
63: #define FIOERR 3 /* Error. */
64: #define FIOLONG 4 /* long line partially read */
1.1 deraadt 65:
66: /*
67: * Directory I/O.
68: */
1.4 millert 69: #define DIOSUC 0 /* Success. */
70: #define DIOEOF 1 /* End of file. */
71: #define DIOERR 2 /* Error. */
1.1 deraadt 72:
73: /*
74: * Display colors.
75: */
1.4 millert 76: #define CNONE 0 /* Unknown color. */
77: #define CTEXT 1 /* Text color. */
78: #define CMODE 2 /* Mode line color. */
79:
80: /*
1.22 millert 81: * Flags for keyboard invoked functions.
1.4 millert 82: */
83: #define FFUNIV 1 /* universal argument */
84: #define FFNEGARG 2 /* negitive only argument */
85: #define FFOTHARG 4 /* other argument */
86: #define FFARG 7 /* any argument */
87: #define FFRAND 8 /* Called by other function */
1.1 deraadt 88:
89: /*
90: * Flags for "eread".
91: */
1.4 millert 92: #define EFFUNC 0x0001 /* Autocomplete functions. */
93: #define EFBUF 0x0002 /* Autocomplete buffers. */
94: #define EFFILE 0x0004 /* " files (maybe someday) */
95: #define EFAUTO 0x0007 /* Some autocompleteion on */
96: #define EFNEW 0x0008 /* New prompt. */
97: #define EFCR 0x0010 /* Echo CR at end; last read. */
1.20 art 98: #define EFDEF 0x0020 /* buffer contains default args */
1.1 deraadt 99:
100: /*
101: * Flags for "ldelete"/"kinsert"
102: */
103: #define KNONE 0
104: #define KFORW 1
105: #define KBACK 2
106:
107: /*
108: * All text is kept in circularly linked
109: * lists of "LINE" structures. These begin at the
110: * header line (which is the blank line beyond the
111: * end of the buffer). This line is pointed to by
112: * the "BUFFER". Each line contains a the number of
113: * bytes in the line (the "used" size), the size
114: * of the text array, and the text. The end of line
115: * is not stored as a byte; it's implied. Future
116: * additions will include update hints, and a
117: * list of marks into the line.
118: */
1.4 millert 119: typedef struct LINE {
1.18 mickey 120: struct LINE *l_fp; /* Link to the next line */
121: struct LINE *l_bp; /* Link to the previous line */
122: int l_size; /* Allocated size */
123: int l_used; /* Used size */
1.1 deraadt 124: #ifndef ZEROARRAY
1.18 mickey 125: char l_text[1]; /* A bunch of chars. */
1.1 deraadt 126: #else
1.18 mickey 127: char l_text[]; /* A bunch of chars. */
1.1 deraadt 128: #endif
1.4 millert 129: } LINE;
1.1 deraadt 130:
131: /*
132: * The rationale behind these macros is that you
133: * could (with some editing, like changing the type of a line
134: * link from a "LINE *" to a "REFLINE", and fixing the commands
135: * like file reading that break the rules) change the actual
136: * storage representation of lines to use something fancy on
137: * machines with small address spaces.
138: */
139: #define lforw(lp) ((lp)->l_fp)
140: #define lback(lp) ((lp)->l_bp)
141: #define lgetc(lp, n) (CHARMASK((lp)->l_text[(n)]))
142: #define lputc(lp, n, c) ((lp)->l_text[(n)]=(c))
143: #define llength(lp) ((lp)->l_used)
144: #define ltext(lp) ((lp)->l_text)
145:
146: /*
147: * All repeated structures are kept as linked lists of structures.
148: * All of these start with a LIST structure (except lines, which
149: * have their own abstraction). This will allow for
150: * later conversion to generic list manipulation routines should
151: * I decide to do that. it does mean that there are four extra
152: * bytes per window. I feel that this is an acceptable price,
153: * considering that there are usually only one or two windows.
154: */
155: typedef struct LIST {
156: union {
1.18 mickey 157: struct MGWIN *l_wp;
158: struct BUFFER *x_bp; /* l_bp is used by LINE */
159: struct LIST *l_nxt;
1.1 deraadt 160: } l_p;
1.4 millert 161: char *l_name;
1.1 deraadt 162: } LIST;
1.4 millert 163:
1.1 deraadt 164: /*
165: * Usual hack - to keep from uglifying the code with lotsa
166: * references through the union, we #define something for it.
167: */
168: #define l_next l_p.l_nxt
169:
170: /*
171: * There is a window structure allocated for
172: * every active display window. The windows are kept in a
173: * big list, in top to bottom screen order, with the listhead at
174: * "wheadp". Each window contains its own values of dot and mark.
175: * The flag field contains some bits that are set by commands
176: * to guide redisplay; although this is a bit of a compromise in
177: * terms of decoupling, the full blown redisplay is just too
178: * expensive to run for every input character.
179: */
1.4 millert 180: typedef struct MGWIN {
1.18 mickey 181: LIST w_list; /* List header */
182: struct BUFFER *w_bufp; /* Buffer displayed in window */
183: struct LINE *w_linep; /* Top line in the window */
184: struct LINE *w_dotp; /* Line containing "." */
185: struct LINE *w_markp; /* Line containing "mark" */
186: int w_doto; /* Byte offset for "." */
187: int w_marko; /* Byte offset for "mark" */
188: char w_toprow; /* Origin 0 top row of window */
189: char w_ntrows; /* # of rows of text in window */
190: char w_force; /* If NZ, forcing row. */
191: char w_flag; /* Flags. */
1.4 millert 192: } MGWIN;
1.1 deraadt 193: #define w_wndp w_list.l_p.l_wp
194: #define w_name w_list.l_name
195:
196: /*
197: * Window flags are set by command processors to
198: * tell the display system what has happened to the buffer
199: * mapped by the window. Setting "WFHARD" is always a safe thing
200: * to do, but it may do more work than is necessary. Always try
201: * to set the simplest action that achieves the required update.
202: * Because commands set bits in the "w_flag", update will see
203: * all change flags, and do the most general one.
204: */
1.4 millert 205: #define WFFORCE 0x01 /* Force reframe. */
206: #define WFMOVE 0x02 /* Movement from line to line. */
207: #define WFEDIT 0x04 /* Editing within a line. */
208: #define WFHARD 0x08 /* Better to a full display. */
209: #define WFMODE 0x10 /* Update mode line. */
1.1 deraadt 210:
211: /*
212: * Text is kept in buffers. A buffer header, described
213: * below, exists for every buffer in the system. The buffers are
214: * kept in a big list, so that commands that search for a buffer by
215: * name can find the buffer header. There is a safe store for the
216: * dot and mark in the header, but this is only valid if the buffer
217: * is not being displayed (that is, if "b_nwnd" is 0). The text for
218: * the buffer is kept in a circularly linked list of lines, with
219: * a pointer to the header line in "b_linep".
220: */
1.4 millert 221: typedef struct BUFFER {
1.18 mickey 222: LIST b_list; /* buffer list pointer */
223: struct BUFFER *b_altb; /* Link to alternate buffer */
224: struct LINE *b_dotp; /* Link to "." LINE structure */
225: struct LINE *b_markp; /* ditto for mark */
226: struct LINE *b_linep; /* Link to the header LINE */
227: struct MAPS_S *b_modes[PBMODES]; /* buffer modes */
228: int b_doto; /* Offset of "." in above LINE */
229: int b_marko; /* ditto for the "mark" */
230: short b_nmodes; /* number of non-fundamental modes */
231: char b_nwnd; /* Count of windows on buffer */
232: char b_flag; /* Flags */
233: char b_fname[NFILEN];/* File name */
234: struct fileinfo b_fi; /* File attributes */
1.4 millert 235: } BUFFER;
1.1 deraadt 236: #define b_bufp b_list.l_p.x_bp
237: #define b_bname b_list.l_name
238:
1.4 millert 239: #define BFCHG 0x01 /* Changed. */
240: #define BFBAK 0x02 /* Need to make a backup. */
1.1 deraadt 241: #ifdef NOTAB
1.4 millert 242: #define BFNOTAB 0x04 /* no tab mode */
1.1 deraadt 243: #endif
1.4 millert 244: #define BFOVERWRITE 0x08 /* overwrite mode */
1.1 deraadt 245:
246: /*
247: * This structure holds the starting position
248: * (as a line/offset pair) and the number of characters in a
249: * region of a buffer. This makes passing the specification
250: * of a region around a little bit easier.
251: */
1.4 millert 252: typedef struct {
1.18 mickey 253: struct LINE *r_linep; /* Origin LINE address. */
254: int r_offset; /* Origin LINE offset. */
255: RSIZE r_size; /* Length in characters. */
1.4 millert 256: } REGION;
257:
258: /*
259: * Prototypes.
260: */
261:
1.5 millert 262: /* tty.c X */
1.16 art 263: void ttinit __P((void));
264: void ttreinit __P((void));
265: void tttidy __P((void));
266: void ttmove __P((int, int));
267: void tteeol __P((void));
268: void tteeop __P((void));
269: void ttbeep __P((void));
270: void ttinsl __P((int, int, int));
271: void ttdell __P((int, int, int));
272: void ttwindow __P((int, int));
273: void ttnowindow __P((void));
274: void ttcolor __P((int));
275: void ttresize __P((void));
1.4 millert 276:
277: /* ttyio.c */
1.16 art 278: void ttopen __P((void));
1.5 millert 279: int ttraw __P((void));
1.16 art 280: void ttclose __P((void));
1.5 millert 281: int ttcooked __P((void));
282: int ttputc __P((int));
1.16 art 283: void ttflush __P((void));
1.5 millert 284: int ttgetc __P((void));
1.9 art 285: int ttwait __P((int));
1.5 millert 286: int typeahead __P((void));
1.4 millert 287:
288: /* dir.c */
1.16 art 289: void dirinit __P((void));
1.5 millert 290: int changedir __P((int, int));
291: int showcwdir __P((int, int));
1.4 millert 292:
293: /* dired.c */
1.5 millert 294: int dired __P((int, int));
295: int d_otherwindow __P((int, int));
296: int d_undel __P((int, int));
297: int d_undelbak __P((int, int));
298: int d_findfile __P((int, int));
299: int d_ffotherwindow __P((int, int));
300: int d_expunge __P((int, int));
301: int d_copy __P((int, int));
302: int d_del __P((int, int));
303: int d_rename __P((int, int));
304:
305: /* file.c X */
306: int fileinsert __P((int, int));
307: int filevisit __P((int, int));
308: int poptofile __P((int, int));
309: BUFFER *findbuffer __P((char *));
310: int readin __P((char *));
311: int insertfile __P((char *, char *, int));
312: int filewrite __P((int, int));
313: int filesave __P((int, int));
314: int buffsave __P((BUFFER *));
315: int makebkfile __P((int, int));
316: int writeout __P((BUFFER *, char *));
1.18 mickey 317: void upmodes __P((BUFFER *));
1.5 millert 318:
319: /* line.c X */
1.18 mickey 320: LINE *lalloc __P((int));
321: LINE *lallocx __P((int));
1.16 art 322: void lfree __P((LINE *));
1.18 mickey 323: void lchange __P((int));
1.5 millert 324: int linsert __P((int, int));
325: int lnewline __P((void));
326: int ldelete __P((RSIZE, int));
1.18 mickey 327: int ldelnewline __P((void));
1.5 millert 328: int lreplace __P((RSIZE, char *, int));
1.18 mickey 329: void kdelete __P((void));
1.5 millert 330: int kinsert __P((int, int));
331: int kremove __P((int));
332:
333: /* window.c X */
334: int reposition __P((int, int));
335: int refresh __P((int, int));
336: int nextwind __P((int, int));
337: int prevwind __P((int, int));
338: int onlywind __P((int, int));
339: int splitwind __P((int, int));
340: int enlargewind __P((int, int));
341: int shrinkwind __P((int, int));
342: int delwind __P((int, int));
343: MGWIN *wpopup __P((void));
1.4 millert 344:
345: /* buffer.c */
1.5 millert 346: BUFFER *bfind __P((char *, int));
347: int poptobuffer __P((int, int));
348: int killbuffer __P((int, int));
349: int savebuffers __P((int, int));
350: int listbuffers __P((int, int));
1.11 art 351: int addlinef __P((BUFFER *, char *, ...));
1.12 art 352: #define addline(bp, text) addlinef(bp, "%s", text)
1.5 millert 353: int anycb __P((int));
354: int bclear __P((BUFFER *));
355: int showbuffer __P((BUFFER *, MGWIN *, int));
356: MGWIN *popbuf __P((BUFFER *));
357: int bufferinsert __P((int, int));
358: int usebuffer __P((int, int));
359: int notmodified __P((int, int));
360: int popbuftop __P((BUFFER *));
1.4 millert 361:
362: /* display.c */
1.24 art 363: int vtresize __P((int, int, int));
1.18 mickey 364: void vtinit __P((void));
365: void vttidy __P((void));
366: void update __P((void));
1.5 millert 367:
368: /* echo.c X */
1.16 art 369: void eerase __P((void));
1.5 millert 370: int eyorn __P((char *));
371: int eyesno __P((char *));
1.18 mickey 372: void ewprintf __P((const char *fmt, ...));
1.5 millert 373: int ereply __P((const char *, char *, int, ...));
374: int eread __P((const char *, char *, int, int, ...));
375: int getxtra __P((LIST *, LIST *, int, int));
1.16 art 376: void free_file_list __P((LIST *));
1.4 millert 377:
378: /* fileio.c */
1.5 millert 379: int ffropen __P((char *, BUFFER *));
380: int ffwopen __P((char *, BUFFER *));
381: int ffclose __P((BUFFER *));
382: int ffputbuf __P((BUFFER *));
383: int ffgetline __P((char *, int, int *));
1.18 mickey 384: int fbackupfile __P((char *));
385: char *adjustname __P((char *));
386: char *startupfile __P((char *));
387: int copy __P((char *, char *));
1.5 millert 388: BUFFER *dired_ __P((char *));
389: int d_makename __P((LINE *, char *));
1.18 mickey 390: LIST *make_file_list __P((char *));
1.4 millert 391:
1.5 millert 392: /* kbd.c X */
393: int do_meta __P((int, int));
394: int bsmap __P((int, int));
1.16 art 395: void ungetkey __P((int));
1.5 millert 396: int getkey __P((int));
397: int doin __P((void));
398: int rescan __P((int, int));
399: int universal_argument __P((int, int));
400: int digit_argument __P((int, int));
401: int negative_argument __P((int, int));
402: int selfinsert __P((int, int));
403: int quote __P((int, int));
1.4 millert 404:
405: /* main.c */
1.5 millert 406: int ctrlg __P((int, int));
407: int quit __P((int, int));
1.4 millert 408:
409: /* ttyio.c */
1.18 mickey 410: void panic __P((char *));
1.4 millert 411:
412: /* cinfo.c */
1.18 mickey 413: char *keyname __P((char *, size_t, int));
1.4 millert 414:
415: /* basic.c */
1.5 millert 416: int gotobol __P((int, int));
417: int backchar __P((int, int));
418: int gotoeol __P((int, int));
419: int forwchar __P((int, int));
420: int gotobob __P((int, int));
421: int gotoeob __P((int, int));
422: int forwline __P((int, int));
423: int backline __P((int, int));
1.16 art 424: void setgoal __P((void));
1.5 millert 425: int getgoal __P((LINE *));
426: int forwpage __P((int, int));
427: int backpage __P((int, int));
428: int forw1page __P((int, int));
429: int back1page __P((int, int));
430: int pagenext __P((int, int));
1.16 art 431: void isetmark __P((void));
1.5 millert 432: int setmark __P((int, int));
433: int swapmark __P((int, int));
434: int gotoline __P((int, int));
435:
436: /* random.c X */
437: int showcpos __P((int, int));
438: int getcolpos __P((void));
439: int twiddle __P((int, int));
440: int openline __P((int, int));
441: int newline __P((int, int));
442: int deblank __P((int, int));
443: int justone __P((int, int));
444: int delwhite __P((int, int));
445: int indent __P((int, int));
446: int forwdel __P((int, int));
447: int backdel __P((int, int));
448: int killline __P((int, int));
449: int yank __P((int, int));
450: int space_to_tabstop __P((int, int));
451:
452: /* extend.c X */
453: int insert __P((int, int));
454: int bindtokey __P((int, int));
455: int localbind __P((int, int));
456: int define_key __P((int, int));
457: int unbindtokey __P((int, int));
458: int localunbind __P((int, int));
459: int extend __P((int, int));
460: int evalexpr __P((int, int));
461: int evalbuffer __P((int, int));
462: int evalfile __P((int, int));
463: int load __P((char *));
464: int excline __P((char *));
465:
466: /* help.c X */
467: int desckey __P((int, int));
468: int wallchart __P((int, int));
469: int help_help __P((int, int));
470: int apropos_command __P((int, int));
471:
472: /* paragraph.c X */
473: int gotobop __P((int, int));
474: int gotoeop __P((int, int));
475: int fillpara __P((int, int));
476: int killpara __P((int, int));
477: int fillword __P((int, int));
478: int setfillcol __P((int, int));
479:
480: /* word.c X */
481: int backword __P((int, int));
482: int forwword __P((int, int));
483: int upperword __P((int, int));
484: int lowerword __P((int, int));
485: int capword __P((int, int));
486: int delfword __P((int, int));
487: int delbword __P((int, int));
488: int inword __P((void));
489:
490: /* region.c X */
491: int killregion __P((int, int));
492: int copyregion __P((int, int));
493: int lowerregion __P((int, int));
494: int upperregion __P((int, int));
495: int prefixregion __P((int, int));
496: int setprefix __P((int, int));
497:
498: /* search.c X */
499: int forwsearch __P((int, int));
500: int backsearch __P((int, int));
501: int searchagain __P((int, int));
502: int forwisearch __P((int, int));
503: int backisearch __P((int, int));
504: int queryrepl __P((int, int));
505: int forwsrch __P((void));
506: int backsrch __P((void));
507: int readpattern __P((char *));
508:
509: /* spawn.c X */
510: int spawncli __P((int, int));
511:
512: /* ttykbd.c X */
513: void ttykeymapinit __P((void));
514: void ttykeymaptidy __P((void));
515:
516: /* match.c X */
517: int showmatch __P((int, int));
518:
519: /* version.c X */
520: int showversion __P((int, int));
521:
522: #ifndef NO_MACRO
523: /* macro.c X */
524: int definemacro __P((int, int));
525: int finishmacro __P((int, int));
526: int executemacro __P((int, int));
527: #endif /* !NO_MACRO */
528:
529: /* modes.c X */
530: int indentmode __P((int, int));
531: int fillmode __P((int, int));
532: int blinkparen __P((int, int));
533: #ifdef NOTAB
534: int notabmode __P((int, int));
535: #endif /* NOTAB */
536: int overwrite __P((int, int));
537: int set_default_mode __P((int,int));
538:
539: #ifdef REGEX
540: /* re_search.c X */
541: int re_forwsearch __P((int, int));
542: int re_backsearch __P((int, int));
543: int re_searchagain __P((int, int));
544: int re_queryrepl __P((int, int));
545: int setcasefold __P((int, int));
546: int delmatchlines __P((int, int));
547: int delnonmatchlines __P((int, int));
548: int cntmatchlines __P((int, int));
549: int cntnonmatchlines __P((int, int));
550: #endif /* REGEX */
1.1 deraadt 551:
552: /*
553: * Externals.
554: */
1.5 millert 555: extern BUFFER *bheadp;
556: extern BUFFER *curbp;
557: extern MGWIN *curwp;
558: extern MGWIN *wheadp;
559: extern int thisflag;
560: extern int lastflag;
561: extern int curgoal;
562: extern int epresf;
563: extern int sgarbf;
564: extern int mode;
565: extern int nrow;
566: extern int ncol;
567: extern int ttrow;
568: extern int ttcol;
569: extern int tttop;
570: extern int ttbot;
571: extern int tthue;
572: extern int defb_nmodes;
573: extern int defb_flag;
1.17 mickey 574: extern const char cinfo[];
1.5 millert 575: extern char *keystrings[];
1.25 ! vincent 576: extern char pat[NPAT];
1.5 millert 577: #ifndef NO_DPROMPT
578: extern char prompt[];
579: #endif /* !NO_DPROMPT */
580:
581: /*
582: * Globals.
583: */
584: int tceeol;
585: int tcinsl;
586: int tcdell;
587: