rsalz@uunet.uu.net (Rich Salz) (09/13/88)
Submitted-by: Keith Gabryelski <ucsd!elgar!ag> Posting-number: Volume 16, Issue 4 Archive-name: conf/part04 #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # confsig.c # confstr.c # extern.h # structs.h export PATH; PATH=/bin:$PATH if test -f 'confsig.c' then echo shar: will not over-write existing file "'confsig.c'" else cat << \SHAR_EOF > 'confsig.c' #include "conf.h" int nsig = 16; char *sig_list[] = { "Unkown Signal: 0", "Hangup", "Interrupt", "Quit", "Illegal Instruction", "Trace Trap", "IOT Instruction", "EMT Instruction", "Floating Point Exception", "Kill", "Bus Error", "Segmentation Violation", "Bad Argument To System Call", "Write On A Pipe With No One To Read It", "Alarm Clock", "Software Termination Signal From Kill", }; fatal(sig) int sig; { int p; (void) printf("\nFatal Signal %d (%s).\n", sig, putsig(sig)); make_nice(FALSE); p = kill(cuser.cu_procid, sig); if (p < 0) (void) fprintf(stderr, "%s: Couldn't kill proccess %d (%s)\n", progname, cuser.cu_procid, puterr(errno)); (void) exit(-1); } char * putsig(sig) int sig; { static char qwerty[42]; (void) sprintf(qwerty, "Unknown Signal: %d", sig); return ((unsigned)sig >= nsig) ? qwerty : sig_list[sig]; } SHAR_EOF fi # end of overwriting check if test -f 'confstr.c' then echo shar: will not over-write existing file "'confstr.c'" else cat << \SHAR_EOF > 'confstr.c' #include "conf.h" unsigned int wordlen; char * parsestr(string, length, flags) char *string; int length, flags; { static char *retbuf; static int buflen = 0; static char *prevs; static int prevl; char *p; if (buflen == 0) retbuf = mymalloc((unsigned)(buflen = PAGESIZ)); p = retbuf; if (!length) { string = prevs; length = prevl; } while (length && isspace(*string)) { ++string; --length; } prevs = string; prevl = length; if (!length) { wordlen = linelen = 0; return NULL; } while (length && ((flags&THEREST) || (!isspace(*string) && (*string != ',') && (*string != '=')))) { if (*string == '"') { ++string; --length; while (length && (*string != '"')) { if (*string == '\\') { ++string; --length; if (length && isdigit(*string)) { int x, c; x = (*string++ - '0'); --length; if (length && isdigit(*string)) { x = (x * 10) + (*string++ - '0'); --length; if (length && isdigit(*string)) { c = (x * 10) + (*string - '0'); if (c < 256) { x = c; ++string; --length; } } } *p++ = x; } else if (length) { *p++ = *string++; --length; } } else { *p++ = *string++; --length; } } } else { if (*string == '\\') { ++string; --length; if (length && isdigit(*string)) { int x, c; x = (*string++ - '0'); --length; if (length && isdigit(*string)) { x = (x * 10) + (*string++ - '0'); --length; if (length && isdigit(*string)) { c = (x * 10) + (*string - '0'); if (c < 256) { x = c; ++string; --length; } } } *p++ = x; } else if (length) { *p++ = *string++; --length; } } else { *p++ = *string++; --length; } } } *p = '\0'; while (length && isspace(*string)) { ++string; --length; } if (length && ((*string == ',') || (*string == '='))) { ++string; --length; } prevs = string; prevl = length; linelen = length; wordlen = p - retbuf; return wordlen ? retbuf : NULL; } cpystr(to, from, length) register char *to, *from; register unsigned int length; { while(length--) *to++ = *from++; } char * puterr(error) int error; { static char qwerty[42]; (void) sprintf(qwerty, "Unknown error %d", error); return ((unsigned)error >= sys_nerr) ? qwerty : sys_errlist[error]; } SHAR_EOF fi # end of overwriting check if test -f 'extern.h' then echo shar: will not over-write existing file "'extern.h'" else cat << \SHAR_EOF > 'extern.h' extern errno; extern struct passwd *getpwuid(); extern FILE *fopen(), *popen(); extern char *getlogin(), *malloc(), *realloc(), *strchr(), *strrchr(); extern char *ttyname(), *getenv(), *strcpy(), *strncpy(), *strcat(); extern char *tgetstr(); extern void tputs(); extern char *sys_errlist[]; extern int sys_nerr; extern long lseek(); extern void free(), longjmp(); extern unsigned alarm(), sleep(); extern char *progname; extern int log_rfd, log_wfd, usr_fd; extern long ourplace; extern FILE *rec_fp; extern int confing, columns, lines; extern char ichar, qchar; extern char *wrdata, replytty[], replyname[]; extern unsigned wdlen; extern struct cusrfil cuser, tuser; extern struct clogfil clog, tlog; extern int banner, seeme, informe, lineinput, beep; extern int expand8bit, expandctrl; extern unsigned linelen, wordlen; extern int nice_exit(), write_log(); extern int version(), do_to(), messptr(), colprnt(), fatal(); extern int getopts(), getrc(), setopts(), dispchar(), do_ring(); extern char *logname, *homedir; extern char *pager, *shell, *normform, *lineform, *shoutform, *sendform; extern char *informform, *recfile; extern char *cls; #ifdef SYSV extern struct termio term, saveterm; #endif SYSV #ifdef BSD extern struct tchars chrstr; extern struct sgttyb ktty; extern int ttyflags; #endif BSD extern char *getline(), *mymalloc(), *myrealloc(), *puterr(); extern char *getword(), *parsestr(), *putsig(); SHAR_EOF fi # end of overwriting check if test -f 'structs.h' then echo shar: will not over-write existing file "'structs.h'" else cat << \SHAR_EOF > 'structs.h' /* * logfile (CONFLOG) struct * */ struct clogfil { int type; int f_line; unsigned int f_usrlen; unsigned int f_ttylen; unsigned int t_utlen; unsigned int messlen; }; /* * message type * */ #define NORMAL 0 #define SEND 1 #define SHOUT 2 #define INFORM 3 /* * userfile (CONFUSERS) struct * */ struct cusrfil { int cu_flags; char cu_cname[MAXNAMELEN]; char cu_tty[MAXTTYLEN]; int cu_line; short cu_procid; }; /* * cu_flags * */ #define USER_OFF 0 #define USER_ON 1 #define USER_RECORD 2 /* * Structure of valid options * */ struct varopts { char *name; int type; int *var; int extra; int (*var_func)(); }; /* * Some flags to go with varopt struct * */ #define BOOLEAN 0 #define NUMBER 1 #define STRING 2 #define VARMASK 3 #define DISPLAY 0 #define NODISPLAY 4 #define DISPLAYMASK 4 #define POINTER 1 #define ROUTINE 2 /* * Return values from setops * */ #define NOOPT 0 #define FOUNDOPT 1 #define AMBIGUOUS 2 /* * for the who routine * */ struct whostr { char name[MAXNAMELEN+1]; char tty[MAXTTYLEN+1]; int line; int flags; }; SHAR_EOF fi # end of overwriting check # End of shell archive exit 0 -- "If green is all there is to be, then green is good enough for me" - ktf [ Keith ] UUCP: {ucsd, cbosgd!crash, sdcsvax!crash, nosc!crash}!elgar!ag [Gabryelski] INET: ag@elgar.cts.com ARPA: elgar!ag@ucsd.edu -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.