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