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