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