1 /* $Id: def.h,v 1.15.2.2 2003/03/08 01:22:35 amura Exp $ */
2 /*
3  * This file is the general header file for all parts
4  * of the MicroEMACS display editor. It contains all of the
5  * general definitions and macros. It also contains some
6  * conditional compilation flags. All of the per-system and
7  * per-terminal definitions are in special header files.
8  * The most common reason to edit this file would be to zap
9  * the definition of CVMVAS or BACKUP.
10  */
11 
12 /*
13  * $Log: def.h,v $
14  * Revision 1.15.2.2  2003/03/08 01:22:35  amura
15  * NOTAB is always enabled
16  *
17  * Revision 1.15.2.1  2003/03/08 00:17:23  amura
18  * fix query-replace bug, too
19  *
20  * Revision 1.15  2001/05/25 15:36:52  amura
21  * now buffers have only one mark (before windows have one mark)
22  *
23  * Revision 1.14  2001/02/18 17:07:27  amura
24  * append AUTOSAVE feature (but NOW not work)
25  *
26  * Revision 1.13  2001/02/11 15:40:24  amura
27  * some function are changed to static for speed/size
28  *
29  * Revision 1.12  2001/02/01 16:30:39  amura
30  * add vtsetsize() definition and change NFILEN size for amiga
31  *
32  * Revision 1.11  2001/01/17 18:33:14  amura
33  * add prototype of ishojo() and some change for WIN32
34  *
35  * Revision 1.10  2001/01/05 14:07:00  amura
36  * first implementation of Hojo Kanji support
37  *
38  * Revision 1.9  2000/12/27 16:56:00  amura
39  * change d_makename() params for conservative reason, and bugfix in dires_()
40  *
41  * Revision 1.8  2000/12/14 18:12:13  amura
42  * use alloca() and more memory secure
43  *
44  * Revision 1.7  2000/09/21 17:28:29  amura
45  * replace macro _WIN32 to WIN32 for Cygwin
46  *
47  * Revision 1.6  2000/07/22 20:50:54  amura
48  * redefine NFILEN macro
49  *
50  * Revision 1.5  2000/07/20 12:45:17  amura
51  * support undo with auto-fill mode
52  *
53  * Revision 1.4  2000/06/27 01:49:42  amura
54  * import to CVS
55  *
56  * Revision 1.3  2000/06/01 05:25:06  amura
57  * Undo support
58  *
59  * Revision 1.2  2000/05/01  23:04:38  amura
60  * undo test version
61  *
62  * Revision 1.1  1999/05/19  03:52:32  amura
63  * Initial revision
64  *
65  */
66 /* 90.01.29	Modified for Ng 1.0 by S.Yoshida */
67 
68 #include	<stdlib.h>
69 #include	<string.h>
70 #include	"sysdef.h"		/* Order is critical.		*/
71 #include	"ttydef.h"
72 #include	"chrdef.h"
73 
74 /*
75  * If your system and/or compiler does not support the "void" type
76  * then define NO_VOID_TYPE in sysdef.h.  In the absence of some
77  * other definition for VOID, the default in that case will be to
78  * turn it into an int, which works with most compilers that don't
79  * support void.  In the absence of any definition of VOID or
80  * NO_VOID_TYPE, the default is to assume void is supported, which
81  * should be the case for most modern C compilers.
82  */
83 
84 #ifdef NO_VOID_TYPE
85 #  undef VOID
86 #  define VOID int			/* Default for no void is int */
87 #  define VOIDptr char*
88 #else
89 #ifndef VOID
90 #  define VOID void			/* Just use normal void */
91 #  define VOIDptr void*
92 #endif /* VOID */
93 #endif /* NO_VOID_TYPE */
94 
95 #ifdef	NO_MACRO
96 #ifndef NO_STARTUP
97 #define NO_STARTUP			/* NO_MACRO implies NO_STARTUP */
98 #endif
99 #endif
100 
101 #ifdef SUPPORT_ANSI
102 #define pro(x) x
103 #else
104 #define pro(x) ()
105 #endif
106 
107 typedef int (*PF) pro((int, int)); /* generaly useful type */
108 
109 /*
110  * Table sizes, etc.
111  */
112 #if defined(MSDOS)
113 #define NFILEN	80			/* Length, file name.		*/
114 #elif defined(HUMAN68K)
115 #define NFILEN	128			/* Length, file name.		*/
116 #elif defined(AMIGA)
117 #define NFILEN	256			/* Length, file name.		*/
118 #else /* Maybe Win32 or UN*X */
119 #define NFILEN	1024			/* Length, file name.		*/
120 #endif
121 #define NBUFN	32			/* Length, buffer name.		*/
122 #define NLINE	256			/* Length, line.		*/
123 #define NINPUT	32			/* Length, small minibuf input	*/
124 #define PBMODES 8			/* modes per buffer		*/
125 #define NKBDM	256			/* Length, keyboard macro.	*/
126 #define NPAT	80			/* Length, pattern.		*/
127 #define HUGE	1000			/* A rather large number.	*/
128 #define NSRCH	128			/* Undoable search commands.	*/
129 #define NXNAME	64			/* Length, extended command.	*/
130 #define NKNAME	20			/* Length, key names		*/
131 #define UNDOSIZE 10			/* Undo buffer size		*/
132 /*
133  * Universal.
134  */
135 #define FALSE	0			/* False, no, bad, etc.		*/
136 #define TRUE	1			/* True, yes, good, etc.	*/
137 #define ABORT	2			/* Death, ^G, abort, etc.	*/
138 
139 #define KPROMPT 2			/* keyboard prompt		*/
140 
141 /*
142  * These flag bits keep track of
143  * some aspects of the last command. The CFCPCN
144  * flag controls goal column setting. The CFKILL
145  * flag controls the clearing versus appending
146  * of data in the kill buffer.
147  */
148 #define CFCPCN	0x0001			/* Last command was C-P, C-N	*/
149 #define CFKILL	0x0002			/* Last command was a kill	*/
150 #define CFINS	0x0004			/* Last command was self-insert */
151 #define CFINS2	0x0008			/* Last command was insert	*/
152 
153 /*
154  * File I/O.
155  */
156 #define FIOSUC	0			/* Success.			*/
157 #define FIOFNF	1			/* File not found.		*/
158 #define FIOEOF	2			/* End of file.			*/
159 #define FIOERR	3			/* Error.			*/
160 #define FIOLONG 4			/* long line partially read	*/
161 
162 /*
163  * Directory I/O.
164  */
165 #define DIOSUC	0			/* Success.			*/
166 #define DIOEOF	1			/* End of file.			*/
167 #define DIOERR	2			/* Error.			*/
168 
169 /*
170  * Display colors.
171  */
172 #define CNONE	0			/* Unknown color.		*/
173 #define CTEXT	1			/* Text color.			*/
174 #define CMODE	2			/* Mode line color.		*/
175 
176 /* Flags for keyboard involked functions */
177 
178 #define FFUNIV		1		/* universal argument		*/
179 #define FFNEGARG	2		/* negitive only argument	*/
180 #define FFOTHARG	4		/* other argument		*/
181 #define FFARG		7		/* any argument			*/
182 #define FFRAND		8		/* Called by other function	*/
183 
184 /*
185  * Flags for "eread".
186  */
187 #define EFFUNC	0x0001			/* Autocomplete functions.	*/
188 #define EFBUF	0x0002			/* Autocomplete buffers.	*/
189 #define EFFILE	0x0004			/* " files (maybe someday)	*/
190 #define EFAUTO	0x0007			/* Some autocompleteion on	*/
191 #define EFNEW	0x0008			/* New prompt.			*/
192 #define EFCR	0x0010			/* Echo CR at end; last read.	*/
193 
194 /*
195  * Flags for "ldelete"/"kinsert"
196  */
197 
198 #define KNONE	0
199 #define KFORW	1
200 #define KBACK	2
201 #ifdef KANJI
202 #define KNOKANJI	0x80
203 #define KFLAGS(n)	((n) & 0x0f)
204 #endif
205 
206 /*
207  * All text is kept in circularly linked
208  * lists of "LINE" structures. These begin at the
209  * header line (which is the blank line beyond the
210  * end of the buffer). This line is pointed to by
211  * the "BUFFER". Each line contains a the number of
212  * bytes in the line (the "used" size), the size
213  * of the text array, and the text. The end of line
214  * is not stored as a byte; it's implied. Future
215  * additions will include update hints, and a
216  * list of marks into the line.
217  */
218 typedef struct	LINE {
219 	struct	LINE *l_fp;		/* Link to the next line	*/
220 	struct	LINE *l_bp;		/* Link to the previous line	*/
221 	short	l_size;			/* Allocated size		*/
222 	short	l_used;			/* Used size			*/
223 #ifndef ZEROARRAY
224 	char	l_text[1];		/* A bunch of characters.	*/
225 #else
226 	char	l_text[];		/* A bunch of characters.	*/
227 #endif
228 }	LINE;
229 
230 /*
231  * The rationale behind these macros is that you
232  * could (with some editing, like changing the type of a line
233  * link from a "LINE *" to a "REFLINE", and fixing the commands
234  * like file reading that break the rules) change the actual
235  * storage representation of lines to use something fancy on
236  * machines with small address spaces.
237  */
238 #define lforw(lp)	((lp)->l_fp)
239 #define lback(lp)	((lp)->l_bp)
240 #define lgetc(lp, n)	(CHARMASK((lp)->l_text[(n)]))
241 #define lputc(lp, n, c) ((lp)->l_text[(n)]=(c))
242 #define llength(lp)	((lp)->l_used)
243 #define ltext(lp)	((lp)->l_text)
244 
245 /*
246  * All repeated structures are kept as linked lists of structures.
247  * All of these start with a LIST structure (except lines, which
248  * have their own abstraction). This will allow for
249  * later conversion to generic list manipulation routines should
250  * I decide to do that. it does mean that there are four extra
251  * bytes per window. I feel that this is an acceptable price,
252  * considering that there are usually only one or two windows.
253  */
254 typedef struct LIST {
255 	union {
256 		struct WINDOW	*l_wp;
257 		struct BUFFER	*x_bp;	/* l_bp is used by LINE */
258 		struct LIST	*l_nxt;
259 	} l_p;
260 	char	*l_name;
261 } LIST;
262 /*
263  * Usual hack - to keep from uglifying the code with lotsa
264  * references through the union, we #define something for it.
265  */
266 #define l_next	l_p.l_nxt
267 
268 /*
269  * There is a window structure allocated for
270  * every active display window. The windows are kept in a
271  * big list, in top to bottom screen order, with the listhead at
272  * "wheadp". Each window contains its own value of dot.
273  * The flag field contains some bits that are set by commands
274  * to guide redisplay; although this is a bit of a compromise in
275  * terms of decoupling, the full blown redisplay is just too
276  * expensive to run for every input character.
277  */
278 typedef struct	WINDOW {
279 	LIST	w_list;			/* List header		       */
280 	struct	BUFFER *w_bufp;		/* Buffer displayed in window	*/
281 	struct	LINE *w_linep;		/* Top line in the window	*/
282 	struct	LINE *w_dotp;		/* Line containing "."		*/
283 	short	w_lines;		/* Top line displayed line number */
284 	short	w_doto;			/* Byte offset for "."		*/
285 	char	w_toprow;		/* Origin 0 top row of window	*/
286 	char	w_ntrows;		/* # of rows of text in window	*/
287 	char	w_force;		/* If NZ, forcing row.		*/
288 	char	w_flag;			/* Flags.			*/
289 	char	w_dotlines;		/* line containing "." on tty lines */
290 }	WINDOW;
291 #define w_wndp	w_list.l_p.l_wp
292 #define w_name	w_list.l_name
293 
294 /*
295  * Window flags are set by command processors to
296  * tell the display system what has happened to the buffer
297  * mapped by the window. Setting "WFHARD" is always a safe thing
298  * to do, but it may do more work than is necessary. Always try
299  * to set the simplest action that achieves the required update.
300  * Because commands set bits in the "w_flag", update will see
301  * all change flags, and do the most general one.
302  */
303 #define WFFORCE 0x01			/* Force reframe.		*/
304 #define WFMOVE	0x02			/* Movement from line to line.	*/
305 #define WFEDIT	0x04			/* Editing within a line.	*/
306 #define WFHARD	0x08			/* Better to a full display.	*/
307 #define WFMODE	0x10			/* Update mode line.		*/
308 
309 /*
310  * Text is kept in buffers. A buffer header, described
311  * below, exists for every buffer in the system. The buffers are
312  * kept in a big list, so that commands that search for a buffer by
313  * name can find the buffer header. There is a safe store for the
314  * dot and mark in the header, but this is only valid if the buffer
315  * is not being displayed (that is, if "b_nwnd" is 0). The text for
316  * the buffer is kept in a circularly linked list of lines, with
317  * a pointer to the header line in "b_linep".
318  */
319 typedef struct	BUFFER {
320 	LIST	b_list;			/* buffer list pointer		*/
321 	struct	BUFFER *b_altb;		/* Link to alternate buffer	*/
322 	struct	LINE *b_dotp;		/* Link to "." LINE structure	*/
323 	struct	LINE *b_markp;		/* ditto for mark		*/
324 	struct	LINE *b_linep;		/* Link to the header LINE	*/
325 	struct	MAPS_S *b_modes[PBMODES]; /* buffer modes		*/
326 	short	b_doto;			/* Offset of "." in above LINE	*/
327 	short	b_marko;		/* ditto for the "mark"		*/
328 	short	b_nmodes;		/* number of non-fundamental modes */
329 	char	b_nwnd;			/* Count of windows on buffer	*/
330 	char	b_flag;			/* Flags			*/
331 	char	*b_fname;		/* File name			*/
332 #ifdef	EXTD_DIR
333 	char	*b_cwd;			/* Current working directory for
334 					   this buffer.  By Tillanosoft */
335 #endif
336 #ifdef	KANJI	/* 90.01.29  by S.Yoshida */
337 	char	b_kfio;			/* Local KANJI file I/O code.	*/
338 #endif	/* KANJI */
339 #ifdef  VARIABLE_TAB
340 	char	b_tabwidth;		/* Local TAB width		*/
341 #endif  /* VARIABLE_TAB */
342 #ifdef	UNDO
343 	struct	UNDO_DATA *b_ustack[UNDOSIZE+1];
344 					/* Undo stack data		*/
345 	short	b_utop;			/* Undo stack top		*/
346 	short	b_ubottom;		/* Undo stack bottom		*/
347 	struct	UNDO_DATA **b_ulast;	/* Last edited undo data	*/
348 #endif	/* UNDO */
349 }	BUFFER;
350 #define b_bufp	b_list.l_p.x_bp
351 #define b_bname b_list.l_name
352 
353 #define BFCHG	0x01			/* Changed.			*/
354 #define BFBAK	0x02			/* Need to make a backup.	*/
355 #define BFNOTAB 0x04			/* no tab mode			*/
356 #define BFOVERWRITE 0x08		/* overwrite mode		*/
357 #ifdef	KANJI	/* 90.01.29  by S.Yoshida */
358 #define	BFAUTOFILL 0x10			/* autofill mode with KANJI.	*/
359 
360 #define	NOCONV	0			/* No KANJI conversion.		*/
361 #define	SJIS	1			/* KANJI code is Shift-JIS.	*/
362 #define	JIS	2			/* KANJI code is JIS.		*/
363 #define	EUC	3			/* KANJI code is EUC.		*/
364 #define	NIL	4			/* Not decided.			*/
365 #define	T	5			/* Guess.			*/
366 #endif	/* KANJI */
367 #ifdef	READONLY	/* 91.01.05  by S.Yoshida */
368 #define	BFRONLY	0x20			/* Read only mode.		*/
369 #endif	/* READONLY */
370 #ifdef CANNA
371 #define BFCANNA 0x40
372 #endif
373 #ifdef	AUTOSAVE	/* 96.12.24 by M.Suzuki	*/
374 #define	BFACHG	0x80			/* Auto save after changed.	*/
375 #endif	/* AUTOSAVE */
376 
377 #ifdef ADDFUNC
378 #define MG_RATIO_ALL -1 /* used at dotpos() to return value */
379 #define MG_RATIO_TOP -2 /* used at dotpos() to return value */
380 #define MG_RATIO_BOT -3 /* used at dotpos() to return value */
381 #endif
382 
383 /*
384  * This structure holds the starting position
385  * (as a line/offset pair) and the number of characters in a
386  * region of a buffer. This makes passing the specification
387  * of a region around a little bit easier.
388  */
389 typedef struct	{
390 	struct	LINE *r_linep;		/* Origin LINE address.		*/
391 	short	r_offset;		/* Origin LINE offset.		*/
392 	RSIZE	r_size;			/* Length in characters.	*/
393 }	REGION;
394 
395 /*
396  * Externals.
397  */
398 extern	int	thisflag;
399 extern	int	lastflag;
400 extern	int	curgoal;
401 extern	int	epresf;
402 extern	int	sgarbf;
403 extern	int	mode;
404 extern	WINDOW	*curwp;
405 extern	BUFFER	*curbp;
406 extern	WINDOW	*wheadp;
407 extern	BUFFER	*bheadp;
408 extern	char	pat[];
409 extern	BUFFER	*bfind();
410 extern	WINDOW	*popbuf();
411 extern	WINDOW	*wpopup();
412 extern	LINE	*lalloc();
413 extern	LINE	*lallocx();
414 #ifdef SUPPORT_ANSI
415 extern VOID ewprintf pro((char *fp, ... ));
416 #else
417 extern VOID ewprintf pro((va_alist));
418 #endif
419 extern VOID eerase();
420 extern	int	nrow;
421 extern	int	ncol;
422 extern	int	ttrow;
423 extern	int	ttcol;
424 extern	int	tceeol;
425 extern	int	tcinsl;
426 extern	int	tcdell;
427 extern	char	cinfo[];
428 extern	char	*keystrings[];
429 extern	VOID	update();
430 extern	char	*keyname();
431 extern	char	*adjustname();
432 extern	VOID	kdelete();
433 extern	VOID	lchange();
434 
435 /*
436    Should the 'ifdef' be applied for the following function declarations.
437    For example, kttputc() should be declared only if the KANJI macro is
438    defined.
439  */
440 
441 extern int forwchar pro((int, int));
442 extern int setmark pro((int, int));
443 extern int backline pro((int, int));
444 extern VOID warnreadonly pro((void));
445 extern int getgoal pro((LINE *));
446 extern int backpage pro((int, int));
447 extern int countlines pro((LINE	*));
448 extern int colrow pro((LINE *, short, int *, int *));
449 extern short skipline pro((LINE *, int));
450 extern int nextwind pro((int, int));
451 #ifdef SUPPORT_ANSI
452 extern int ereply pro((char *, char *, int , ... ));
453 extern int eread pro((char *, char *, int, int, ...));
454 #else
455 extern int ereply pro((va_alist));
456 extern int eread pro((va_alist));
457 #endif
458 extern int getcolpos pro((void));
459 extern int showbuffer pro((BUFFER *, WINDOW *, int));
460 extern int bclear pro((BUFFER *));
461 extern int anycb pro((int));
462 extern int addline pro((BUFFER *, char *));
463 extern int eyorn pro((char *));
464 extern int eyesno pro((char *));
465 extern int buffsave pro((BUFFER *));
466 extern VOID ksetbufcode pro((BUFFER *));
467 extern int newline pro((int, int));
468 extern int selfinsert pro((int, int));
469 extern int cm_indent pro((int, int));
470 extern int cm_term pro((int, int));
471 extern int linsert pro((int, int));
472 extern int ldelete pro((RSIZE, int));
473 extern int lnewline pro((void));
474 extern int panic pro((char *));
475 extern int name_fent pro((char *, int));
476 extern int splitwind pro((int, int));
477 extern int delwind pro((int, int));
478 extern int ttmove pro((int, int));
479 extern VOID eargset pro((char *));
480 extern int killbuffer pro((int, int));
481 extern int forwpage pro((int, int));
482 extern int d_undelbak pro((int, int));
483 extern int d_makename pro((LINE *, char *, int));
484 extern int readin pro((char *));
485 extern int fchkreadonly pro((char *));
486 #ifdef WIN32
487 extern int unlink pro((const char *));
488 extern int rmdir pro((const char *));
489 extern int rename pro((const char *, const char *));
490 #endif
491 extern int copy pro((char *, char *));
492 extern int ttopen pro((void));
493 extern int ttinit pro((void));
494 extern int ttcolor pro((int));
495 extern int ttnowindow pro((void));
496 extern int tteeol pro((void));
497 extern int tttidy pro((void));
498 extern int ttflush pro((void));
499 extern int ttclose pro((void));
500 extern int typeahead pro((void));
501 extern int tteeop pro((void));
502 #ifdef HANKANA
503 extern VOID putline pro((int, int, unsigned char *, unsigned char *, short));
504 #else
505 extern VOID putline pro((int, int, unsigned char *, short));
506 #endif
507 extern int vtputs pro((char *));
508 extern int kdispbufcode pro((BUFFER *));
509 extern int ttinsl pro((int, int, int));
510 extern int ttdell pro((int, int, int));
511 extern int fepmode_off pro((void));
512 extern int getkey pro((int));
513 extern VOID ungetkey pro((int));
514 extern int ctrlg pro((int, int));
515 extern int complete_del_list pro((void));
516 extern int complete_scroll_down pro((void));
517 extern int complete_scroll_up pro((void));
518 extern int complete_list_names pro((char *, int));
519 extern int ttputc pro((int));
520 extern int kttputc pro((int));
521 extern int excline pro((char *));
522 extern int load pro((char *));
523 extern int ffropen pro((char *));
524 extern VOID ksetfincode pro((BUFFER *));
525 extern int ffgetline pro((char *, int, int *));
526 extern int kcodeconv pro((char *, int, BUFFER *));
527 extern int ffclose pro((void));
528 extern int insertfile pro((char *, char *));
529 extern int ffisdir pro((char *));
530 extern int dired pro((int, int));
531 extern int cmode pro((int, int));
532 extern int kcodecount pro((char *, int));
533 extern int ldelnewline pro((void));
534 extern int writeout pro((BUFFER *, char *));
535 extern int fgetfilemode pro((char *));
536 extern int fbackupfile pro((char *));
537 extern int ffwopen pro((char *));
538 extern int ffputbuf pro((BUFFER *));
539 extern int popbuftop pro((BUFFER *));
540 extern VOID upmodes pro((BUFFER *));
541 extern VOID vtputc pro((int));
542 extern int ttgetc pro((void));
543 extern int ttungetc pro((int));
544 extern int bufjtoe pro((char *, int));
545 extern int bufstoe pro((char *, int));
546 extern VOID bufetos pro((char *, int));
547 extern int charcategory pro((int, int));
548 extern VOID PutLine pro((int, unsigned char *, short));
549 extern VOID kgetkeyflush pro((void));
550 extern VOID kdselectcode pro((int));
551 extern VOID kfselectcode pro((FILE *, int));
552 extern VOID initcategory pro((int));
553 extern int ttwait pro((void));
554 extern int kgetkey pro((void));
555 extern int fepmode_on pro((void));
556 extern int negative_argument pro((int, int));
557 extern int digit_argument pro((int, int));
558 extern int fillword pro((int, int));
559 extern int kcinsert pro((unsigned short *, unsigned short, int));
560 extern int kcdelete pro((unsigned short *, unsigned short, int));
561 extern int kinsert pro((int, int));
562 extern int kgrow pro((int));
563 extern int backchar pro((int, int));
564 extern int printversion pro((void));
565 extern VOID Exit pro((int));
566 extern int printoptions pro((void));
567 extern VOID dirinit pro((void));
568 extern VOID dirend pro((void));
569 extern int doin pro((void));
570 extern int ttbeep pro((void));
571 extern int gotoeop pro((int, int));
572 extern int inword pro((void));
573 extern int isbolkchar pro((int, int));
574 extern int iseolkchar pro((int, int));
575 extern int killregion pro((int, int));
576 extern int delwhite pro((int, int));
577 extern int backdel pro((int, int));
578 extern int receive_clipboard pro((void));
579 extern int kremove pro((int));
580 extern int re_readpattern pro((char *));
581 extern int re_forwsrch pro((void));
582 extern int re_backsrch pro((void));
583 extern int re_doreplace pro((RSIZE, char *, int));
584 extern int lreplace pro((RSIZE, char *, int));
585 extern int killmatches pro((int));
586 extern int countmatches pro((int));
587 extern int getregion pro((REGION *));
588 extern int setprefix pro((int, int));
589 extern int forwline pro((int, int));
590 extern int readpattern pro((char *));
591 extern int forwsrch pro((void));
592 extern int backsrch pro((void));
593 extern int isearch pro((int));
594 extern VOID vtsetsize pro((int, int));
595 extern int ttresize pro((void));
596 extern int shrinkwind pro((int, int));
597 extern int forwword pro((int, int));
598 extern int incategory pro((void));
599 extern int iskanji pro((void));
600 #ifdef	HOJO_KANJI
601 extern int ishojo pro((void));
602 #endif
603 extern int iskword pro((int, int));
604 extern int gotobol pro((int, int));
605 #ifdef	EXTD_DIR
606 extern VOID ensurecwd pro((void));
607 extern VOID edefset pro((char *));
608 #endif
609 extern int rescan pro((int, int));
610 #ifdef	AUTOSAVE
611 extern VOID autosave_check pro((int));
612 extern VOID autosave_handler pro((void));
613 extern VOID autosave_name pro((char*, char*, int));
614 extern VOID del_autosave_file pro((char*));
615 extern VOID clean_autosave_file pro((void));
616 #endif
617 
618 /*
619  * Standard I/O.
620  */
621 #ifndef SUPPORT_ANSI
622 extern VOIDptr malloc();
623 extern VOIDptr realloc();
624 #endif
625 
626 #ifdef	CANNA
627 VOID canna_init();
628 VOID canna_end();
629 #endif
630