1: /* C K C D E B . H */ 2: 3: /* 4: This file is included by all C-Kermit modules, including the modules 5: that aren't specific to Kermit (like the command parser and the ck?tio and 6: ck?fio modules. It specifies format codes for debug(), tlog(), and similar 7: functions, and includes any necessary definitions to be used by all C-Kermit 8: modules, and also includes some feature selection compile-time switches, and 9: also system- or compiler-dependent definitions, plus #includes and prototypes 10: required by all C-Kermit modules. 11: */ 12: 13: /* 14: Author: Frank da Cruz (fdc@columbia.edu, FDCCU@CUVMA.BITNET), 15: Columbia University Center for Computing Activities. 16: First released January 1985. 17: Copyright (C) 1985, 1992, Trustees of Columbia University in the City of New 18: York. Permission is granted to any individual or institution to use this 19: software as long as it is not sold for profit. This copyright notice must be 20: retained. This software may not be included in commercial products without 21: written permission of Columbia University. 22: */ 23: 24: /* 25: Etymology: The name of this file means "C-Kermit Common-C-Language Debugging 26: Header", because originally it contained only the formats (F000-F111) for 27: the debug() and tlog() functions. See how it has grown... 28: */ 29: 30: #ifndef CKCDEB_H /* Don't include me more than once. */ 31: #define CKCDEB_H 32: 33: #ifdef OS2 /* For OS/2 debugging */ 34: #include "ckoker.h" 35: #endif /* OS2 */ 36: 37: #include <stdio.h> /* Begin by including this. */ 38: #include <ctype.h> /* and this. */ 39: 40: #ifdef MAC 41: /* 42: * The MAC doesn't use standard stdio routines. 43: */ 44: #undef getchar 45: #undef putchar 46: #endif /* MAC */ 47: 48: /* System-type compilation switches */ 49: 50: #ifdef FT21 /* Fortune For:Pro 2.1 implies 1.8 */ 51: #ifndef FT18 52: #define FT18 53: #endif /* FT18 */ 54: #endif /* FT21 */ 55: 56: #ifdef AIXPS2 /* AIXPS2 implies AIX370 */ 57: #ifndef AIX370 58: #define AIX370 59: #endif /* AIX370 */ 60: #endif /* AIXPS2 */ 61: 62: #ifdef AIX370 /* AIX PS/2 or 370 implies BSD4 */ 63: #ifndef BSD4 64: #define BSD4 65: #endif /* BSD4 */ 66: #endif /* AIX370 */ 67: 68: #ifdef DGUX540 /* DG UX 5.40 implies Sys V R 4 */ 69: #ifndef SVR4 70: #define SVR4 71: #endif /* SVR4 */ 72: #endif /* DGUX540 */ 73: 74: #ifdef SUNOS41 /* SUNOS41 implies SUNOS4 */ 75: #ifndef SUNOS4 76: #define SUNOS4 77: #endif /* SUNOS4 */ 78: #endif /* SUNOS41 */ 79: 80: #ifdef SUN4S5 /* Sun-4 System V environment */ 81: #ifndef SVR3 /* implies System V R3 or later */ 82: #define SVR3 83: #endif /* SVR3 */ 84: #endif /* SUN4S5 */ 85: 86: #ifdef MIPS /* MIPS System V environment */ 87: #ifndef SVR3 /* implies System V R3 or later */ 88: #define SVR3 89: #endif /* SVR3 */ 90: #endif /* MIPS */ 91: 92: /* 93: 4.4BSD is a mixture of System V R4, POSIX, and 4.3BSD. 94: */ 95: #ifdef BSD44 /* 4.4 BSD */ 96: #ifndef SVR4 /* BSD44 implies SVR4 */ 97: #define SVR4 98: #endif /* SVR4 */ 99: #ifndef NOSETBUF /* NOSETBUF is safe */ 100: #define NOSETBUF 101: #endif /* NOSETBUF */ 102: #ifndef DIRENT /* Uses <dirent.h> */ 103: #define DIRENT 104: #endif /* DIRENT */ 105: #endif /* BSD44 */ 106: 107: #ifdef SVR3 /* SVR3 implies ATTSV */ 108: #ifndef ATTSV 109: #define ATTSV 110: #endif /* ATTSV */ 111: #endif /* SVR3 */ 112: 113: #ifdef SVR4 /* SVR4 implies ATTSV */ 114: #ifndef ATTSV 115: #define ATTSV 116: #endif /* ATTSV */ 117: #ifndef SVR3 /* ...as well as SVR3 */ 118: #define SVR3 119: #endif /* SVR3 */ 120: #endif /* SVR4 */ 121: 122: #ifdef UTSV /* UTSV implies ATTSV */ 123: #ifndef ATTSV 124: #define ATTSV 125: #endif /* ATTSV */ 126: #endif /* UTSV */ 127: 128: #ifdef XENIX /* XENIX implies ATTSV */ 129: #ifndef ATTSV 130: #define ATTSV 131: #endif /* ATTSV */ 132: #endif /* XENIX */ 133: 134: #ifdef AUX /* AUX implies ATTSV */ 135: #ifndef ATTSV 136: #define ATTSV 137: #endif /* ATTSV */ 138: #endif /* AUX */ 139: 140: #ifdef ATT7300 /* ATT7300 implies ATTSV */ 141: #ifndef ATTSV 142: #define ATTSV 143: #endif /* ATTSV */ 144: #endif /* ATT7300 */ 145: 146: #ifdef ATT6300 /* ATT6300 implies ATTSV */ 147: #ifndef ATTSV 148: #define ATTSV 149: #endif /* ATTSV */ 150: #endif /* ATT6300 */ 151: 152: #ifdef HPUX /* HPUX implies ATTSV */ 153: #ifndef ATTSV 154: #define ATTSV 155: #endif /* ATTSV */ 156: #endif /* HPUX */ 157: 158: #ifdef ISIII /* ISIII implies ATTSV */ 159: #ifndef ATTSV 160: #define ATTSV 161: #endif /* ATTSV */ 162: #endif /* ISIII */ 163: 164: #ifdef NEXT /* NEXT implies BSD4 */ 165: #ifndef BSD4 166: #define BSD4 167: #endif /* BSD4 */ 168: #endif /* NEXT */ 169: 170: #ifdef SUNOS4 /* SUNOS4 implies BSD4 */ 171: #ifndef BSD4 172: #define BSD4 173: #endif /* BSD4 */ 174: #endif /* SUNOS4 */ 175: 176: #ifdef BSD41 /* BSD41 implies BSD4 */ 177: #ifndef BSD4 178: #define BSD4 179: #endif /* BSD4 */ 180: #endif /* BSD41 */ 181: 182: #ifdef BSD43 /* BSD43 implies BSD4 */ 183: #ifndef BSD4 184: #define BSD4 185: #endif /* BSD4 */ 186: #endif /* BSD43 */ 187: 188: #ifdef BSD4 /* BSD4 implies ANYBSD */ 189: #ifndef ANYBSD 190: #define ANYBSD 191: #endif /* ANYBSD */ 192: #endif /* BSD4 */ 193: 194: #ifdef BSD29 /* BSD29 implies ANYBSD */ 195: #ifndef ANYBSD 196: #define ANYBSD 197: #endif /* ANYBSD */ 198: #endif /* BSD29 */ 199: 200: #ifdef ATTSV /* ATTSV implies UNIX */ 201: #ifndef UNIX 202: #define UNIX 203: #endif /* UNIX */ 204: #endif /* ATTSV */ 205: 206: #ifdef ANYBSD /* ANYBSD implies UNIX */ 207: #ifndef UNIX 208: #define UNIX 209: #endif /* UNIX */ 210: #endif /* ANYBSD */ 211: 212: #ifdef POSIX /* POSIX implies UNIX */ 213: #ifndef UNIX 214: #define UNIX 215: #endif /* UNIX */ 216: #ifndef DIRENT /* and DIRENT, i.e. <dirent.h> */ 217: #ifndef SDIRENT 218: #define DIRENT 219: #endif /* SDIRENT */ 220: #endif /* DIRENT */ 221: #ifndef NOFILEH /* POSIX doesn't use <sys/file.h> */ 222: #define NOFILEH 223: #endif /* NOFILEH */ 224: #endif /* POSIX */ 225: 226: #ifdef V7 227: #ifndef UNIX 228: #define UNIX 229: #endif /* UNIX */ 230: #endif /* V7 */ 231: 232: #ifdef COHERENT 233: #ifndef UNIX 234: #define UNIX 235: #endif /* UNIX */ 236: #endif /* COHERENT */ 237: 238: #ifdef MINIX 239: #ifndef UNIX 240: #define UNIX 241: #endif /* UNIX */ 242: #endif /* MINIX */ 243: /* 244: The symbol SVORPOSIX is defined for both AT&T and POSIX compilations 245: to make it easier to select items that System V and POSIX have in common, 246: but which BSD, V7, etc, do not have. 247: */ 248: #ifdef ATTSV 249: #ifndef SVORPOSIX 250: #define SVORPOSIX 251: #endif /* SVORPOSIX */ 252: #endif /* ATTSV */ 253: 254: #ifdef POSIX 255: #ifndef SVORPOSIX 256: #define SVORPOSIX 257: #endif /* SVORPOSIX */ 258: #endif /* POSIX */ 259: 260: /* 261: The symbol SVR4ORPOSIX is defined for both AT&T System V R4 and POSIX 262: compilations to make it easier to select items that System V R4 and POSIX 263: have in common, but which BSD, V7, and System V R3 and earlier, etc, do 264: not have. 265: */ 266: #ifdef POSIX 267: #ifndef SVR4ORPOSIX 268: #define SVR4ORPOSIX 269: #endif /* SVR4ORPOSIX */ 270: #endif /* POSIX */ 271: #ifdef SVR4 272: #ifndef SVR4ORPOSIX 273: #define SVR4ORPOSIX 274: #endif /* SVR4ORPOSIX */ 275: #endif /* SVR4 */ 276: 277: /* 278: The symbol BSD44ORPOSIX is defined for both 4.4BSD and POSIX compilations 279: to make it easier to select items that 4.4BSD and POSIX have in common, 280: but which System V, BSD, V7, etc, do not have. 281: */ 282: #ifdef BSD44 283: #ifndef BSD44ORPOSIX 284: #define BSD44ORPOSIX 285: #endif /* BSD44ORPOSIX */ 286: #endif /* BSD44 */ 287: 288: #ifdef POSIX 289: #ifndef BSD44ORPOSIX 290: #define BSD44ORPOSIX 291: #endif /* BSD44ORPOSIX */ 292: #endif /* POSIX */ 293: 294: #ifdef apollo /* May be ANSI-C, check further */ 295: #ifdef __STDCPP__ 296: #define CK_ANSIC /* Yes, this is real ANSI-C */ 297: #define SIG_V 298: #else 299: #define NOANSI /* Nope, not ANSI */ 300: #undef __STDC__ /* Even though it say it is! */ 301: #define SIG_I 302: #endif /* __STDCPP__ */ 303: #endif /* apollo */ 304: 305: #ifdef POSIX /* -DPOSIX on cc command line */ 306: #ifndef _POSIX_SOURCE /* Implies _POSIX_SOURCE */ 307: #define _POSIX_SOURCE 308: #endif /* _POSIX_SOURCE */ 309: #endif /* POSIX */ 310: 311: /* 312: ANSI C? That is, do we have function prototypes, new-style 313: function declarations, and parameter type checking and coercion? 314: */ 315: #ifdef MAC /* MPW C is ANSI */ 316: #ifndef NOANSI 317: #ifndef CK_ANSIC 318: #define CK_ANSIC 319: #endif /* CK_ANSIC */ 320: #endif /* NOANSI */ 321: #endif /* MAC */ 322: 323: #ifndef NOANSI 324: #ifdef __STDC__ /* __STDC__ means ANSI C */ 325: #ifndef CK_ANSIC 326: #define CK_ANSIC 327: #endif /* CK_ANSIC */ 328: #endif /* __STDC__ */ 329: #endif /* NOANSI */ 330: /* 331: _PROTOTYP() is used for forward declarations of functions so we can have 332: parameter and return value type checking if the compiler offers it. 333: __STDC__ should be defined by the compiler only if function prototypes are 334: allowed. Otherwise, we get old-style forward declarations. Our own private 335: CK_ANSIC symbol tells whether we use ANSI C prototypes. To force use of 336: ANSI prototypes, include -DCK_ANSIC on the cc command line. To disable the 337: use of ANSI prototypes, include -DNOANSI. 338: */ 339: #ifdef CK_ANSIC 340: #define _PROTOTYP( func, parms ) func parms 341: #else /* Not ANSI C */ 342: #define _PROTOTYP( func, parms ) func() 343: #endif /* CK_ANSIC */ 344: 345: /* 346: Altos-specific items: 486, 586, 986 models... 347: */ 348: #ifdef A986 349: #define M_VOID 350: #define void int 351: #define CHAR char 352: #define SIG_I 353: #endif /* A986 */ 354: 355: /* Void type */ 356: 357: #ifndef VOID /* Used throughout all C-Kermit */ 358: #ifdef CK_ANSIC /* modules... */ 359: #define VOID void 360: #else 361: #define VOID int 362: #endif /* CK_ANSIC */ 363: #endif /* VOID */ 364: 365: /* Signal type */ 366: 367: #ifndef SIG_V /* signal() type, if not def'd yet */ 368: #ifndef SIG_I 369: #ifdef OS2 370: #define SIG_V 371: #else 372: #ifdef POSIX 373: #define SIG_V 374: #else 375: #ifdef SVR3 /* System V R3 and later */ 376: #define SIG_V 377: #else 378: #ifdef SUNOS4 /* SUNOS V 4.0 and later */ 379: #ifndef sun386 380: #define SIG_V 381: #else 382: #define SIG_I 383: #endif /* sun386 */ 384: #else 385: #ifdef NEXT /* NeXT */ 386: #define SIG_V 387: #else 388: #ifdef AIX370 389: #define SIG_V 390: #define SIGTYP __SIGVOID /* AIX370 */ 391: #else 392: #define SIG_I 393: #endif /* AIX370 */ 394: #endif /* NEXT */ 395: #endif /* SUNOS4 */ 396: #endif /* SVR3 */ 397: #endif /* POSIX */ 398: #endif /* OS2 */ 399: #endif /* SIG_I */ 400: #endif /* SIG_V */ 401: 402: #ifdef SIG_I 403: #define SIGRETURN return(0) 404: #ifndef SIGTYP 405: #define SIGTYP int 406: #endif /* SIGTYP */ 407: #endif /* SIG_I */ 408: 409: #ifdef SIG_V 410: #define SIGRETURN return 411: #ifndef SIGTYP 412: #define SIGTYP void 413: #endif /* SIGTYP */ 414: #endif /* SIG_V */ 415: 416: #ifndef SIGTYP 417: #define SIGTYP int 418: #endif /* SIGTYP */ 419: 420: #ifndef SIGRETURN 421: #define SIGRETURN return(0) 422: #endif /* SIGRETURN */ 423: 424: /* We want all characters to be unsigned if the compiler supports it */ 425: 426: #ifdef PROVX1 427: typedef char CHAR; 428: /* typedef long LONG; */ 429: typedef int void; 430: #else 431: #ifdef MINIX 432: typedef unsigned char CHAR; 433: #else 434: #ifdef V7 435: typedef char CHAR; 436: #else 437: #ifdef C70 438: typedef char CHAR; 439: /* typedef long LONG; */ 440: #else 441: #ifdef BSD29 442: typedef char CHAR; 443: /* typedef long LONG; */ 444: #else 445: #ifdef datageneral 446: #define CHAR unsigned char /* 3.22 compiler */ 447: #else 448: #ifdef CHAR 449: #undef CHAR 450: #endif /* CHAR */ 451: typedef unsigned char CHAR; 452: #endif /* datageneral */ 453: #endif /* BSD29 */ 454: #endif /* C70 */ 455: #endif /* V7 */ 456: #endif /* MINIX */ 457: #endif /* PROVX1 */ 458: 459: /* 460: Debug and transaction logging is included automatically unless you define 461: NODEBUG or NOTLOG. Do this if you want to save the space and overhead. 462: (Note, in version 4F these definitions changed from "{}" to the null string 463: to avoid problems with semicolons after braces, as in: "if (x) tlog(this); 464: else tlog(that);" 465: */ 466: #ifndef NODEBUG 467: #ifndef DEBUG 468: #define DEBUG 469: #endif /* DEBUG */ 470: #else 471: #ifdef DEBUG 472: #undef DEBUG 473: #endif /* DEBUG */ 474: #endif /* NODEBUG */ 475: 476: #ifndef NOTLOG 477: #ifndef TLOG 478: #define TLOG 479: #endif /* TLOG */ 480: #endif /* NOTLOG */ 481: 482: /* debug() macro style selection. */ 483: 484: #ifdef MAC 485: #ifndef IFDEBUG 486: #define IFDEBUG 487: #endif /* IFDEBUG */ 488: #endif /* MAC */ 489: 490: #ifdef OS2 491: #ifndef IFDEBUG 492: #define IFDEBUG 493: #endif /* IFDEBUG */ 494: #endif /* OS2 */ 495: 496: #ifndef DEBUG 497: /* Compile all the debug() statements away. Saves a lot of space and time. */ 498: #define debug(a,b,c,d) 499: #else 500: #ifndef CKCMAI 501: /* Debugging included. Declare debug log flag in main program only. */ 502: extern int deblog; 503: #endif /* CKCMAI */ 504: /* Now define the debug() macro. */ 505: #ifdef IFDEBUG 506: /* Use this form to avoid function calls: */ 507: #define debug(a,b,c,d) if (deblog) dodebug(a,b,(char *)c,(long)d) 508: #else 509: /* Use this form to save space: */ 510: #define debug(a,b,c,d) dodebug(a,b,(char *)c,(long)d) 511: #endif /* MAC */ 512: _PROTOTYP(int dodebug,(int, char *, char *, long)); 513: #endif /* DEBUG */ 514: 515: #ifndef TLOG 516: #define tlog(a,b,c,d) 517: #else 518: _PROTOTYP(VOID tlog,(int, char *, char *, long)); 519: #endif /* TLOG */ 520: 521: /* Formats for debug() and tlog() */ 522: 523: #define F000 0 524: #define F001 1 525: #define F010 2 526: #define F011 3 527: #define F100 4 528: #define F101 5 529: #define F110 6 530: #define F111 7 531: 532: /* Kermit feature selection */ 533: 534: #ifdef MAC /* For Macintosh, no escape */ 535: #define NOPUSH /* to operating system */ 536: #endif /* MAC */ 537: 538: #ifdef UNIX 539: #ifndef NOPARSEN 540: #define PARSENSE /* Automatic parity detection */ 541: #endif /* NOPARSEN */ 542: #endif /* UNIX */ /* for Unix */ 543: 544: #ifdef VMS /* ... and VMS */ 545: #ifndef NOPARSEN 546: #define PARSENSE 547: #endif /* NOPARSEN */ 548: #endif /* VMS */ 549: 550: #ifdef MAC /* and Macintosh */ 551: #ifndef NOPARSEN 552: #define PARSENSE 553: #endif /* NOPARSEN */ 554: #endif /* MAC */ 555: 556: #ifdef VMS /* Use dynamic memory allocation */ 557: #ifndef DYNAMIC 558: #define DYNAMIC /* in VMS version. */ 559: #endif /* DYNAMIC */ 560: #endif /* VMS */ 561: 562: #ifndef CK_LBRK /* Can send Long BREAK */ 563: 564: #ifdef UNIX /* (everybody but OS-9) */ 565: #define CK_LBRK 566: #endif /* UNIX */ 567: #ifdef VMS 568: #define CK_LBRK 569: #endif /* VMS */ 570: #ifdef datageneral 571: #define CK_LBRK 572: #endif /* datageneral */ 573: #ifdef GEMDOS 574: #define CK_LBRK 575: #endif /* GEMDOS */ 576: #ifdef OS2 577: #define CK_LBRK 578: #endif /* OS2 */ 579: #ifdef AMIGA 580: #define CK_LBRK 581: #endif /* AMIGA */ 582: 583: #endif /* CK_LBRK */ 584: 585: /* Carrier treatment */ 586: /* These are defined here because they are shared by the system dependent */ 587: /* and the system independent modules. */ 588: 589: #define CAR_OFF 0 /* On: heed carrier always, except during DIAL. */ 590: #define CAR_ON 1 /* Off: ignore carrier always. */ 591: #define CAR_AUT 2 /* Auto: heed carrier, but only if line is declared */ 592: /* to be a modem line, and only during CONNECT. */ 593: 594: /* Hangup by modem command supported by default */ 595: 596: #ifndef NODIAL 597: #ifndef NOMDMHUP 598: #ifndef MDMHUP 599: #define MDMHUP 600: #endif /* MDMHUP */ 601: #endif /* NOMDMHUP */ 602: #endif /* NODIAL */ 603: 604: /* Types of flow control available */ 605: 606: #define CK_XONXOFF /* Everybody can do this, right? */ 607: 608: #ifdef AMIGA /* Commodore Amiga */ 609: #define CK_RTSCTS /* has RTS/CTS */ 610: #endif /* AMIGA */ 611: 612: #ifdef SUN4S5 /* SunOS in System V environment */ 613: #define CK_RTSCTS 614: #else /* SunOS 4.0/4.1 in BSD environment */ 615: #ifdef SUNOS4 /* SunOS 4.0+later supports RTS/CTS */ 616: #ifdef SUNOS41 /* Easy in 4.1 and later */ 617: #define CK_RTSCTS 618: #else /* Harder in 4.0 */ 619: #ifndef __GNUC__ /* (see tthflow() in ckutio.c) */ 620: #ifndef GNUC 621: #define CK_RTSCTS /* Only if not using GNU gcc */ 622: #endif /* __GNUC__ */ 623: #endif /* GNUC */ 624: #endif /* SUNOS41 */ 625: #endif /* SUNOS4 */ 626: #endif /* SUN4S5 */ 627: 628: #ifdef BSD44 /* And in 4.4 BSD */ 629: #define CK_RTSCTS 630: #endif /* BSD44 */ 631: 632: #ifdef TERMIOX /* Sys V R4 <termiox.h> */ 633: #define CK_RTSCTS /* has RTS/CTS */ 634: #define CK_DTRCD /* and DTR/CD */ 635: #endif /* TERMIOX */ 636: #ifdef STERMIOX /* Sys V R4 <sys/termiox.h> */ 637: #define CK_RTSCTS /* Ditto. */ 638: #define CK_DTRCD 639: #endif /* STERMIOX */ 640: 641: /* 642: Systems where we can expand tilde at the beginning of file or directory names 643: */ 644: #ifdef POSIX 645: #ifndef DTILDE 646: #define DTILDE 647: #endif /* DTILDE */ 648: #endif /* POSIX */ 649: #ifdef BSD4 650: #ifndef DTILDE 651: #define DTILDE 652: #endif /* DTILDE */ 653: #endif /* BSD4 */ 654: #ifdef ATTSV 655: #ifndef DTILDE 656: #define DTILDE 657: #endif /* DTILDE */ 658: #endif /* ATTSV */ 659: #ifdef OSK 660: #ifndef DTILDE 661: #define DTILDE 662: #endif /* DTILDE */ 663: #endif /* OSK */ 664: #ifdef HPUX /* I don't know why this is */ 665: #ifndef DTILDE /* necessary, since -DHPUX */ 666: #define DTILDE /* automatically defines ATTSV */ 667: #endif /* DTILDE */ /* (see above) ... */ 668: #endif /* HPUX */ 669: 670: /* Line delimiter for text files */ 671: 672: /* 673: If the system uses a single character for text file line delimitation, 674: define NLCHAR to the value of that character. For text files, that 675: character will be converted to CRLF upon output, and CRLF will be converted 676: to that character on input during text-mode (default) packet operations. 677: */ 678: #ifdef MAC /* Macintosh */ 679: #define NLCHAR 015 680: #else 681: #ifdef OSK /* OS-9/68K */ 682: #define NLCHAR 015 683: #else /* All Unix-like systems */ 684: #define NLCHAR 012 685: #endif /* OSK */ 686: #endif /* MAC */ 687: 688: /* 689: At this point, if there's a system that uses ordinary CRLF line 690: delimitation AND the C compiler actually returns both the CR and 691: the LF when doing input from a file, then #undef NLCHAR. 692: */ 693: #ifdef OS2 /* OS/2 */ 694: #undef NLCHAR 695: #endif /* OS2 */ 696: 697: #ifdef GEMDOS /* Atari ST */ 698: #undef NLCHAR 699: #endif /* GEMDOS */ 700: 701: /* 702: VMS file formats are so complicated we need to do all the conversion 703: work in the CKVFIO module, so we tell the rest of C-Kermit not to fiddle 704: with the bytes. 705: */ 706: 707: #ifdef vms 708: #undef NLCHAR 709: #endif /* vms */ 710: 711: /* The device name of a job's controlling terminal */ 712: /* Special for VMS, same for all Unixes (?), not used by Macintosh */ 713: 714: #ifdef vms 715: #define CTTNAM "TT:" 716: #else 717: #ifdef datageneral 718: #define CTTNAM "@output" 719: #else 720: #ifdef OSK 721: extern char myttystr[]; 722: #define CTTNAM myttystr 723: #else 724: #ifdef OS2 725: #define CTTNAM "con" 726: #else 727: #ifdef UNIX 728: #define CTTNAM "/dev/tty" 729: #else 730: #ifdef GEMDOS 731: #define CTTNAM "aux:" 732: #else /* Anyone else... */ 733: #define CTTNAM "stdout" /* This is a kludge used by Mac */ 734: #endif /* GEMDOS */ 735: #endif /* UNIX */ 736: #endif /* OS2 */ 737: #endif /* OSK */ 738: #endif /* datageneral */ 739: #endif /* vms */ 740: 741: #ifdef SUNS4S5 742: #define tolower _tolower 743: #define toupper _toupper 744: #endif /* SUNS4S5 */ 745: 746: /* Error number */ 747: 748: #ifndef VMS 749: #ifndef OS2 750: /* 751: The following declaration causes problems for VMS and OS/2, in which 752: errno is an "extern volatile int noshare"... 753: */ 754: extern int errno; /* Needed by most modules. */ 755: #endif /* OS2 */ 756: #endif /* VMS */ 757: 758: /* File System Defaults */ 759: 760: #ifdef VMS 761: #define DBLKSIZ 512 762: #define DLRECL 512 763: #else 764: #define DBLKSIZ 0 765: #define DLRECL 0 766: #endif 767: 768: /* Program return codes for DECUS C and UNIX (VMS uses UNIX codes) */ 769: 770: #ifdef decus 771: #define GOOD_EXIT IO_NORMAL 772: #define BAD_EXIT IO_ERROR 773: #else 774: #define GOOD_EXIT 0 775: #define BAD_EXIT 1 776: #endif /* decus */ 777: 778: /* Special hack for Fortune, which doesn't have <sys/file.h>... */ 779: 780: #ifdef FT18 781: #define FREAD 0x01 782: #define FWRITE 0x10 783: #endif /* FT18 */ 784: 785: /* Special hack for OS-9/68k */ 786: #ifdef OSK 787: #define SIGALRM 30 /* May always cancel I/O */ 788: #define SIGARB 1234 /* Arbitrary for I/O */ 789: SIGTYP (*signal())(); 790: #endif /* OSK */ 791: 792: #ifdef OS2 793: #ifdef putchar /* MSC 5.1 simply uses a macro which causes */ 794: #undef putchar /* no problems. */ 795: #endif /* putchar */ 796: #endif /* OS2 */ 797: 798: #ifdef MINIX 799: #ifdef putchar 800: #undef putchar 801: #endif /* putchar */ 802: #define putchar(c) {putc(c,stdout);fflush(stdout);} 803: #endif /* MINIX */ 804: 805: /* Escape/quote character used by the command parser */ 806: 807: #define CMDQ '\\' 808: 809: /* Symbols for RS-232 modem signals */ 810: 811: #define KM_FG 1 /* Frame ground */ 812: #define KM_TXD 2 /* Transmit */ 813: #define KM_RXD 3 /* Receive */ 814: #define KM_RTS 4 /* Request to Send */ 815: #define KM_CTS 5 /* Clear to Send */ 816: #define KM_DSR 6 /* Data Set Ready */ 817: #define KM_SG 7 /* Signal ground */ 818: #define KM_DCD 8 /* Carrier Detect */ 819: #define KM_DTR 20 /* Data Terminal Ready */ 820: #define KM_RI 22 /* Ring Indication */ 821: 822: /* Bit mask values for modem signals */ 823: 824: #define BM_CTS 0001 /* Clear to send (From DCE) */ 825: #define BM_DSR 0002 /* Dataset ready (From DCE) */ 826: #define BM_DCD 0004 /* Carrier (From DCE) */ 827: #define BM_RNG 0010 /* Ring Indicator (From DCE) */ 828: #define BM_DTR 0020 /* Data Terminal Ready (From DTE) */ 829: #define BM_RTS 0040 /* Request to Send (From DTE) */ 830: 831: /* Codes for full duplex flow control */ 832: 833: #define FLO_NONE 0 /* None */ 834: #define FLO_XONX 1 /* Xon/Xoff (soft) */ 835: #define FLO_RTSC 2 /* RTS/CTS (hard) */ 836: #define FLO_DTRC 3 /* DTR/CD (hard) */ 837: #define FLO_ETXA 4 /* ETX/ACK (soft) */ 838: #define FLO_STRG 5 /* String-based (soft) */ 839: #define FLO_DIAL 6 /* DIALing kludge */ 840: #define FLO_DIAX 7 /* Cancel dialing kludge */ 841: #define FLO_DTRT 8 /* DTR/CTS (hard) */ 842: #define FLO_KEEP 9 /* Keep, i.e. don't touch or change */ 843: 844: /* And finally... */ 845: 846: #ifdef COMMENT /* Make sure this is NOT defined! */ 847: #undef COMMENT 848: #endif /* COMMENT */ 849: 850: /* Structure definitions for Kermit file attributes */ 851: /* All strings come as pointer and length combinations */ 852: /* Empty string (or for numeric variables, -1) = unused attribute. */ 853: 854: struct zstr { /* string format */ 855: int len; /* length */ 856: char *val; /* value */ 857: }; 858: struct zattr { /* Kermit File Attribute structure */ 859: long lengthk; /* (!) file length in K */ 860: struct zstr type; /* (") file type (text or binary) */ 861: struct zstr date; /* (#) file creation date yyyymmdd[ hh:mm[:ss]] */ 862: struct zstr creator; /* ($) file creator id */ 863: struct zstr account; /* (%) file account */ 864: struct zstr area; /* (&) area (e.g. directory) for file */ 865: struct zstr passwd; /* (') password for area */ 866: long blksize; /* (() file blocksize */ 867: struct zstr access; /* ()) file access: new, supersede, append, warn */ 868: struct zstr encoding; /* (*) encoding (transfer syntax) */ 869: struct zstr disp; /* (+) disposition (mail, message, print, etc) */ 870: struct zstr lprotect; /* (,) protection (local syntax) */ 871: struct zstr gprotect; /* (-) protection (generic syntax) */ 872: struct zstr systemid; /* (.) ID for system of origin */ 873: struct zstr recfm; /* (/) record format */ 874: struct zstr sysparam; /* (0) system-dependent parameter string */ 875: long length; /* (1) exact length on system of origin */ 876: struct zstr charset; /* (2) transfer syntax character set */ 877: struct zstr reply; /* This goes last, used for attribute reply */ 878: }; 879: 880: /* Kermit file information structure */ 881: 882: struct filinfo { 883: int bs; /* Blocksize */ 884: int cs; /* Character set */ 885: long rl; /* Record length */ 886: int org; /* Organization */ 887: int fmt; /* Record format */ 888: int cc; /* Carriage control */ 889: int typ; /* Type (text/binary) */ 890: int dsp; /* Disposition */ 891: char *os_specific; /* OS-specific attributes */ 892: unsigned int lblopts; /* LABELED FILE options bitmask */ 893: }; 894: 895: /* VMS values for LABELED FILE options bitmask */ 896: 897: #ifdef VMS 898: #define LBL_NAM 1 /* Ignore incoming name if set */ 899: #define LBL_PTH 2 /* Use complete path if set */ 900: #define LBL_ACL 4 /* Preserve ACLs if set */ 901: #define LBL_BCK 8 /* Preserve backup date if set */ 902: #define LBL_OWN 16 /* Preserve ownership if set */ 903: #endif /* VMS */ 904: 905: /* 906: Data types. First the header file for data types so we can pick up the 907: types used for pids, uids, and gids. Override this section by putting 908: -DCKTYP_H=xxx on the command line to specify the header file where your 909: system defines these types. 910: */ 911: #ifdef OSK /* OS-9 */ 912: #include <types.h> 913: #else /* General case, not OS-9 */ 914: #ifndef CKTYP_H 915: #ifndef VMS 916: #ifndef MAC 917: #ifndef AMIGA 918: #define CKTYP_H <sys/types.h> 919: #endif /* AMIGA */ 920: #endif /* MAC */ 921: #endif /* VMS */ 922: #endif /* CKTYP_H */ 923: 924: #ifdef GEMDOS 925: #undef CKTYP_H 926: #include <types.h> 927: #endif /* GEMDOS */ 928: 929: #ifdef CKTYP_H /* Include it. */ 930: #ifdef COHERENT /* Except for COHERENT */ 931: #include <sys/types.h> 932: #else 933: #ifdef datageneral 934: #include <sys/types.h> /* Compiler didn't like other */ 935: #else 936: #include CKTYP_H 937: #endif /* datageneral */ 938: #endif /* COHERENT */ 939: #endif /* CKTYP_H */ 940: 941: #endif /* OSK */ /* End of types.h section */ 942: 943: /* 944: Data type for pids. If your system uses a different type, put something 945: like -DPID_T=pid_t on command line, or override here. 946: */ 947: #ifndef PID_T 948: #define PID_T int 949: #endif /* PID_T */ 950: /* 951: Data types for uids and gids. Same deal as for pids. 952: Wouldn't be nice if there was a preprocessor test to find out if a 953: typedef existed? 954: */ 955: #ifdef VMS 956: /* Not used in VMS so who cares */ 957: #define UID_T int 958: #define GID_T int 959: #endif /* VMS */ 960: 961: #ifdef POSIX 962: /* Or would it be better (or worse?) to use _POSIX_SOURCE here? */ 963: #ifndef UID_T 964: #define UID_T uid_t 965: #endif /* UID_T */ 966: #ifndef GID_T 967: #define GID_T gid_t 968: #endif /* GID_T */ 969: #else /* Not POSIX */ 970: #ifdef SVR4 971: /* SVR4 and later have uid_t and gid_t. */ 972: /* SVR3 and earlier use int, or unsigned short, or.... */ 973: #ifndef UID_T 974: #define UID_T uid_t 975: #endif /* UID_T */ 976: #ifndef GID_T 977: #define GID_T gid_t 978: #endif /* GID_T */ 979: #else /* Not SVR4 */ 980: #ifdef BSD43 981: #ifndef UID_T 982: #define UID_T uid_t 983: #endif /* UID_T */ 984: #ifndef GID_T 985: #define GID_T gid_t 986: #endif /* GID_T */ 987: #else /* Not BSD43 */ 988: /* Default these to int for older UNIX versions */ 989: #ifndef UID_T 990: #define UID_T int 991: #endif /* UID_T */ 992: #ifndef GID_T 993: #define GID_T int 994: #endif /* GID_T */ 995: #endif /* BSD43 */ 996: #endif /* SVR4 */ 997: #endif /* POSIX */ 998: 999: /* 1000: getpwuid() arg type, which is not necessarily the same as UID_T, 1001: e.g. in SCO UNIX SVR3, it's int. 1002: */ 1003: #ifndef PWID_T 1004: #define PWID_T UID_T 1005: #endif /* PWID_T */ 1006: 1007: #ifdef NEXT /* Argument for wait() */ 1008: #include <sys/wait.h> 1009: typedef union wait WAIT_T; 1010: #else 1011: #ifdef POSIX 1012: #include <sys/wait.h> 1013: #define WAIT_T pid_t 1014: #else 1015: typedef int WAIT_T; 1016: #endif /* POSIX */ 1017: #endif /* NEXT */ 1018: 1019: /* Forward declarations of system-dependent functions callable from all */ 1020: /* C-Kermit modules. */ 1021: 1022: /* File-related functions from system-dependent file i/o module */ 1023: 1024: _PROTOTYP( int zkself, (void) ); 1025: _PROTOTYP( int zopeni, (int, char *) ); 1026: _PROTOTYP( int zopeno, (int, char *, struct zattr *, struct filinfo *) ); 1027: _PROTOTYP( int zclose, (int) ); 1028: #ifndef MAC 1029: _PROTOTYP( int zchin, (int, int *) ); 1030: #endif /* MAC */ 1031: _PROTOTYP( int zsinl, (int, char *, int) ); 1032: _PROTOTYP( int zinfill, (void) ); 1033: _PROTOTYP( int zsout, (int, char*) ); 1034: _PROTOTYP( int zsoutl, (int, char*) ); 1035: _PROTOTYP( int zsoutx, (int, char*, int) ); 1036: _PROTOTYP( int zchout, (int, char) ); 1037: _PROTOTYP( int zoutdump, (void) ); 1038: _PROTOTYP( int zsyscmd, (char *) ); 1039: _PROTOTYP( int zshcmd, (char *) ); 1040: _PROTOTYP( int chkfn, (int) ); 1041: _PROTOTYP( long zchki, (char *) ); 1042: _PROTOTYP( int iswild, (char *) ); 1043: _PROTOTYP( int zchko, (char *) ); 1044: _PROTOTYP( int zdelet, (char *) ); 1045: _PROTOTYP( VOID zrtol, (char *,char *) ); 1046: _PROTOTYP( VOID zltor, (char *,char *) ); 1047: _PROTOTYP( VOID zstrip, (char *,char **) ); 1048: _PROTOTYP( int zchdir, (char *) ); 1049: _PROTOTYP( char * zhome, (void) ); 1050: _PROTOTYP( char * zgtdir, (void) ); 1051: _PROTOTYP( int zxcmd, (int, char *) ); 1052: #ifndef MAC 1053: _PROTOTYP( int zclosf, (int) ); 1054: #endif /* MAC */ 1055: _PROTOTYP( int zxpand, (char *) ); 1056: _PROTOTYP( int znext, (char *) ); 1057: _PROTOTYP( int zchkspa, (char *, long) ); 1058: _PROTOTYP( VOID znewn, (char *, char **) ); 1059: _PROTOTYP( int zrename, (char *, char *) ); 1060: _PROTOTYP( int zsattr, (struct zattr *) ); 1061: _PROTOTYP( int zfree, (char *) ); 1062: _PROTOTYP( char * zfcdat, (char *) ); 1063: _PROTOTYP( int zstime, (char *, struct zattr *, int) ); 1064: _PROTOTYP( int zmail, (char *, char *) ); 1065: _PROTOTYP( int zprint, (char *, char *) ); 1066: _PROTOTYP( char * tilde_expand, (char *) ); 1067: 1068: /* Functions from system-dependent terminal i/o module */ 1069: 1070: _PROTOTYP( int ttopen, (char *, int *, int, int) ); /* tty functions */ 1071: #ifndef MAC 1072: _PROTOTYP( int ttclos, (int) ); 1073: #endif /* MAC */ 1074: _PROTOTYP( int tthang, (void) ); 1075: _PROTOTYP( int ttres, (void) ); 1076: _PROTOTYP( int ttpkt, (long, int, int) ); 1077: #ifndef MAC 1078: _PROTOTYP( int ttvt, (long, int) ); 1079: #endif /* MAC */ 1080: _PROTOTYP( int ttsspd, (int) ); 1081: _PROTOTYP( long ttgspd, (void) ); 1082: _PROTOTYP( int ttflui, (void) ); 1083: _PROTOTYP( int ttfluo, (void) ); 1084: _PROTOTYP( int ttchk, (void) ); 1085: _PROTOTYP( int ttxin, (int, CHAR *) ); 1086: _PROTOTYP( int ttol, (CHAR *, int) ); 1087: _PROTOTYP( int ttoc, (char) ); 1088: _PROTOTYP( int ttinc, (int) ); 1089: _PROTOTYP( int ttscarr, (int) ); 1090: _PROTOTYP( int ttgmdm, (void) ); 1091: _PROTOTYP( int ttsndb, (void) ); 1092: _PROTOTYP( int ttsndlb, (void) ); 1093: #ifdef PARSENSE 1094: #ifdef UNIX 1095: _PROTOTYP( int ttinl, (CHAR *, int, int, CHAR, CHAR, int) ); 1096: #else 1097: #ifdef VMS 1098: _PROTOTYP( int ttinl, (CHAR *, int, int, CHAR, CHAR, int) ); 1099: #else 1100: _PROTOTYP( int ttinl, (CHAR *, int, int, CHAR, CHAR) ); 1101: #endif /* VMS */ 1102: #endif /* UNIX */ 1103: #else 1104: _PROTOTYP( int ttinl, (CHAR *, int, int, CHAR) ); 1105: #endif /* PARSENSE */ 1106: 1107: /* Console functions */ 1108: 1109: _PROTOTYP( int congm, (void) ); 1110: #ifdef COMMENT 1111: _PROTOTYP( VOID conint, (SIGTYP (*)(int, int), SIGTYP (*)(int, int)) ); 1112: #else 1113: _PROTOTYP( VOID conint, (SIGTYP (*)(int), SIGTYP (*)(int)) ); 1114: #endif 1115: _PROTOTYP( VOID connoi, (void) ); 1116: _PROTOTYP( int concb, (char) ); 1117: _PROTOTYP( int conbin, (char) ); 1118: _PROTOTYP( int conres, (void) ); 1119: _PROTOTYP( int conoc, (char) ); 1120: _PROTOTYP( int conxo, (int, char *) ); 1121: _PROTOTYP( int conol, (char *) ); 1122: _PROTOTYP( int conola, (char *[]) ); 1123: _PROTOTYP( int conoll, (char *) ); 1124: _PROTOTYP( int conchk, (void) ); 1125: _PROTOTYP( int coninc, (int) ); 1126: _PROTOTYP( int psuspend, (int) ); 1127: _PROTOTYP( int priv_ini, (void) ); 1128: _PROTOTYP( int priv_on, (void) ); 1129: _PROTOTYP( int priv_off, (void) ); 1130: _PROTOTYP( int priv_can, (void) ); 1131: _PROTOTYP( int priv_chk, (void) ); 1132: _PROTOTYP( int priv_opn, (char *, int) ); 1133: 1134: _PROTOTYP( int sysinit, (void) ); /* Misc Kermit functions */ 1135: _PROTOTYP( int syscleanup, (void) ); 1136: _PROTOTYP( int msleep, (int) ); 1137: _PROTOTYP( VOID rtimer, (void) ); 1138: _PROTOTYP( int gtimer, (void) ); 1139: _PROTOTYP( VOID ttimoff, (void) ); 1140: _PROTOTYP( VOID ztime, (char **) ); 1141: _PROTOTYP( int parchk, (CHAR *, CHAR, int) ); 1142: _PROTOTYP( VOID doexit, (int, int) ); 1143: _PROTOTYP( int askmore, (void) ); 1144: _PROTOTYP( VOID fatal, (char *) ); 1145: 1146: /* Key mapping support */ 1147: 1148: #ifdef NOICP 1149: #ifndef NOSETKEY 1150: #define NOSETKEY 1151: #endif /* NOSETKEY */ 1152: #endif /* NOICP */ 1153: 1154: _PROTOTYP( int congks, (int) ); 1155: #ifndef NOSETKEY 1156: #ifdef OS2 1157: #define KMSIZE 768 1158: typedef int KEY; 1159: typedef CHAR *MACRO; 1160: extern int wideresult; 1161: _PROTOTYP( VOID keymapinit, (void) ); 1162: #else /* Not OS2 */ 1163: /* 1164: Catch-all for systems where we don't know how to read keyboard scan 1165: codes > 255. Note: CHAR (i.e. unsigned char) is very important here. 1166: */ 1167: #define KMSIZE 256 1168: typedef CHAR KEY; 1169: typedef CHAR * MACRO; 1170: #define congks coninc 1171: #endif /* OS2 */ 1172: #endif /* NOSETKEY */ 1173: 1174: /* 1175: Function prototypes for system and library functions. 1176: */ 1177: #ifdef _POSIX_SOURCE 1178: #ifndef VMS 1179: #ifndef MAC 1180: #define CK_ANSILIBS 1181: #endif /* MAC */ 1182: #endif /* VMS */ 1183: #endif /* _POSIX_SOURCE */ 1184: 1185: #ifdef NEXT 1186: #define CK_ANSILIBS 1187: #endif /* NEXT */ 1188: 1189: #ifdef SVR4 1190: #define CK_ANSILIBS 1191: #endif /* SVR4 */ 1192: 1193: #ifdef OS2 1194: #define KANJI 1195: #define CK_ANSILIBS 1196: #define MYCURSES 1197: #define CK_RTSCTS 1198: #ifdef __IBMC__ 1199: #define S_IFMT 0xF000 1200: #define timezone _timezone 1201: #endif /* __IBMC__ */ 1202: #include <io.h> 1203: #ifdef __EMX__ 1204: #ifndef __32BIT__ 1205: #define __32BIT__ 1206: #endif /* __32BIT__ */ 1207: #include <sys/timeb.h> 1208: #else 1209: #include <direct.h> 1210: #define SIGALRM SIGUSR1 1211: _PROTOTYP( unsigned alarm, (unsigned) ); 1212: _PROTOTYP( unsigned sleep, (unsigned) ); 1213: #endif /* __EMX__ */ 1214: _PROTOTYP( long zdskspace, (int) ); 1215: _PROTOTYP( int zchdsk, (int) ); 1216: _PROTOTYP( int conincraw, (int) ); 1217: _PROTOTYP( int ttiscom, (int f) ); 1218: _PROTOTYP( int IsFileNameValid, (char *) ); 1219: _PROTOTYP( void ChangeNameForFAT, (char *) ); 1220: _PROTOTYP( char *GetLoadPath, (void) ); 1221: #endif /* OS2 */ 1222: 1223: #ifdef MYCURSES /* MYCURSES implies CK_CURSES */ 1224: #ifndef CK_CURSES 1225: #define CK_CURSES 1226: #endif /* CK_CURSES */ 1227: #endif /* MYCURSES */ 1228: 1229: #ifdef CK_ANSILIBS 1230: /* 1231: String library functions. 1232: For ANSI C, get prototypes from <string.h>. 1233: Otherwise, skip the prototypes. 1234: */ 1235: #include <string.h> 1236: 1237: /* 1238: Prototypes for other commonly used library functions, such as 1239: malloc, free, getenv, atol, atoi, and exit. Otherwise, no prototypes. 1240: */ 1241: #include <stdlib.h> 1242: #ifdef DIAB /* DIAB DS90 */ 1243: /* #include <commonC.h> */ 1244: #include <sys/wait.h> 1245: #ifdef COMMENT 1246: extern void exit(int status); 1247: extern void _exit(int status); 1248: extern int uname(struct utsname *name); 1249: #endif /* COMMENT */ 1250: extern int chmod(char *path, int mode); 1251: extern int ioctl(int fildes, int request, ...); 1252: extern int rdchk(int ttyfd); 1253: extern int nap(int m); 1254: #ifdef COMMENT 1255: extern int getppid(void); 1256: #endif /* COMMENT */ 1257: extern int _filbuf(FILE *stream); 1258: extern int _flsbuf(char c,FILE *stream); 1259: #endif /* DIAB */ 1260: 1261: /* 1262: Prototypes for UNIX functions like access, alarm, chdir, sleep, fork, 1263: and pause. Otherwise, no prototypes. 1264: */ 1265: #ifdef NEXT 1266: #include <libc.h> 1267: #else 1268: #ifndef AMIGA 1269: #ifndef OS2 1270: #include <unistd.h> 1271: #endif /* OS2 */ 1272: #endif /* AMIGA */ 1273: #endif /* NEXT */ 1274: 1275: #else /* Not ANSI libs... */ 1276: 1277: #ifdef MAC 1278: #include <String.h> 1279: #include <StdLib.h> 1280: #endif /* MAC */ 1281: 1282: #ifdef SUNOS41 1283: #include <unistd.h> 1284: #include <stdlib.h> 1285: #else 1286: /* 1287: It is essential that these are declared correctly! 1288: */ 1289: _PROTOTYP( char * malloc, (unsigned int) ); 1290: _PROTOTYP( char * getenv, (char *) ); 1291: _PROTOTYP( long atol, (char *) ); 1292: #endif /* SUNOS4 */ 1293: #endif /* CK_ANSILIBS */ 1294: 1295: #ifndef NULL /* In case NULL is still not defined */ 1296: #define NULL 0L 1297: /* or #define NULL 0 */ 1298: /* or #define NULL ((char *) 0) */ 1299: /* or #define NULL ((void *) 0) */ 1300: #endif /* NULL */ 1301: 1302: /* Funny names for library functions department... */ 1303: 1304: #ifdef ZILOG 1305: #define setjmp setret 1306: #define longjmp longret 1307: #define jmp_buf ret_buf 1308: #define getcwd curdir 1309: #endif /* ZILOG */ 1310: 1311: #endif /* CKCDEB_H */ 1312: 1313: /* End of ckcdeb.h */