Annotation of researchv10no/cmd/bcp/abort.h, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1989, 1990 AT&T --- All Rights Reserved.              */
                      2: /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T.                */
                      3: /* The copyright notice does not imply actual or intended publication. */
                      4: /* AUTHORS:                                            */
                      5: /*     H. S. Baird - ATT-BL MH - first versions        */
                      6: 
                      7: /* abort.h - three terse message, warning, and abort functions.
                      8:        out(s,a,...)     print message to stdout
                      9:        err(s,a,...)     print warning to stderr
                     10:        abort(s,a,...)   complain to stderr and exit abnormally.
                     11:    The 's' argument is a printf string, and the 'a',... are (up to 15) arguments
                     12:    matching %-fields.  These routines prefix the program name and append `\n' to
                     13:    the printf string, then write to:
                     14:          `out': stdout
                     15:          `err' & `abort': stderr
                     16:    Abort also says " - abort", and exits abnormally.
                     17:    This #include should be preceded by `#define CMDNAME "xxx"'  so that `xxx:'
                     18:    will be prefixed to msg and abort strings. */
                     19: 
                     20: #ifndef CMDNAME
                     21: #define CMDNAME "hsb"
                     22: #endif
                     23: 
                     24: #define MSGMAX 120
                     25: 
                     26: #ifndef boolean
                     27: #define boolean int
                     28: #define T 1
                     29: #define F 0
                     30: #endif
                     31: 
                     32: /* WARNING: these function-call versions do not port well:
                     33:    e.g. floating-point arguments are botched on MIPS and SGI machines */
                     34: 
                     35: out(s,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15)
                     36:     char *s;
                     37: {   static char m[MSGMAX];
                     38:        strcpy(m,CMDNAME);
                     39:        strcat(m,": ");
                     40:        strcat(m,s);
                     41:        strcat(m,"\n");
                     42:        fprintf(stdout,m,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15);
                     43:        }
                     44: 
                     45: err(s,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15)
                     46:     char *s;
                     47: {   char m[MSGMAX];
                     48:        strcpy(m,CMDNAME);
                     49:        strcat(m,": ");
                     50:        strcat(m,s);
                     51:        strcat(m,"\n");
                     52:        fprintf(stderr,m,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15);
                     53:        }
                     54: 
                     55: abort(s,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15)
                     56:     char *s;
                     57: {   static char m[MSGMAX];
                     58:        strcpy(m,s);
                     59:        strcat(m," - abort");
                     60:        err(m,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15);
                     61:        exit(1);
                     62:        }
                     63: 
                     64: /* These hybrid macro/function forms ports well, but are awkward to use... */
                     65: 
                     66: char *_F(s)
                     67:    char *s;
                     68: {  static char m[MSGMAX];
                     69:        strcpy(m,CMDNAME);
                     70:        strcat(m,": ");
                     71:        strcat(m,s);
                     72:        strcat(m,"\n");
                     73:        return(m);
                     74:        }
                     75: 
                     76: #define out0(Z) fprintf(stdout,_F(Z))
                     77: #define out1(Z,A) fprintf(stdout,_F(Z),A)
                     78: #define out2(Z,A,B) fprintf(stdout,_F(Z),A,B)
                     79: #define out3(Z,A,B,C) fprintf(stdout,_F(Z),A,B,C)
                     80: #define out4(Z,A,B,C,D) fprintf(stdout,_F(Z),A,B,C,D)
                     81: #define out5(Z,A,B,C,D,E) fprintf(stdout,_F(Z),A,B,C,D,E)
                     82: #define out6(Z,A,B,C,D,E,F) fprintf(stdout,_F(Z),A,B,C,D,E,F)
                     83: #define out7(Z,A,B,C,D,E,F,G) fprintf(stdout,_F(Z),A,B,C,D,E,F,G)
                     84: #define out8(Z,A,B,C,D,E,F,G,H) fprintf(stdout,_F(Z),A,B,C,D,E,F,G,H)
                     85: #define out9(Z,A,B,C,D,E,F,G,H,I) fprintf(stdout,_F(Z),A,B,C,D,E,F,G,H,I)
                     86: #define out10(Z,A,B,C,D,E,F,G,H,I,J) fprintf(stdout,_F(Z),A,B,C,D,E,F,G,H,I,J)
                     87: #define out11(Z,A,B,C,D,E,F,G,H,I,J,K) fprintf(stdout,_F(Z),A,B,C,D,E,F,G,H,I,J,K)
                     88: 
                     89: #define err0(Z) fprintf(stderr,_F(Z))
                     90: #define err1(Z,A) fprintf(stderr,_F(Z),A)
                     91: #define err2(Z,A,B) fprintf(stderr,_F(Z),A,B)
                     92: #define err3(Z,A,B,C) fprintf(stderr,_F(Z),A,B,C)
                     93: #define err4(Z,A,B,C,D) fprintf(stderr,_F(Z),A,B,C,D)
                     94: #define err5(Z,A,B,C,D,E) fprintf(stderr,_F(Z),A,B,C,D,E)
                     95: #define err6(Z,A,B,C,D,E,F) fprintf(stderr,_F(Z),A,B,C,D,E,F)
                     96: #define err7(Z,A,B,C,D,E,F,G) fprintf(stderr,_F(Z),A,B,C,D,E,F,G)
                     97: #define err8(Z,A,B,C,D,E,F,G,H) fprintf(stderr,_F(Z),A,B,C,D,E,F,G,H)
                     98: #define err9(Z,A,B,C,D,E,F,G,H,I) fprintf(stderr,_F(Z),A,B,C,D,E,F,G,H,I)
                     99: #define err10(Z,A,B,C,D,E,F,G,H,I,J) fprintf(stderr,_F(Z),A,B,C,D,E,F,G,H,I,J)
                    100: #define err11(Z,A,B,C,D,E,F,G,H,I,J,K) fprintf(stderr,_F(Z),A,B,C,D,E,F,G,H,I,J,K)
                    101: 
                    102: char *_G(s)
                    103:    char *s;
                    104: {  static char m[MSGMAX];
                    105:        strcpy(m,CMDNAME);
                    106:        strcat(m,": ");
                    107:        strcat(m,s);
                    108:        strcat(m," - abort\n");
                    109:        return(m);
                    110:        }
                    111: 
                    112: #define abort0(Z) fprintf(stderr,_G(Z))
                    113: #define abort1(Z,A) fprintf(stderr,_G(Z),A)
                    114: #define abort2(Z,A,B) fprintf(stderr,_G(Z),A,B)
                    115: #define abort3(Z,A,B,C) fprintf(stderr,_G(Z),A,B,C)
                    116: #define abort4(Z,A,B,C,D) fprintf(stderr,_G(Z),A,B,C,D)
                    117: #define abort5(Z,A,B,C,D,E) fprintf(stderr,_G(Z),A,B,C,D,E)
                    118: #define abort6(Z,A,B,C,D,E,F) fprintf(stderr,_G(Z),A,B,C,D,E,F)
                    119: #define abort7(Z,A,B,C,D,E,F,G) fprintf(stderr,_G(Z),A,B,C,D,E,F,G)
                    120: #define abort8(Z,A,B,C,D,E,F,G,H) fprintf(stderr,_G(Z),A,B,C,D,E,F,G,H)
                    121: #define abort9(Z,A,B,C,D,E,F,G,H,I) fprintf(stderr,_G(Z),A,B,C,D,E,F,G,H,I)
                    122: #define abort10(Z,A,B,C,D,E,F,G,H,I,J) fprintf(stderr,_G(Z),A,B,C,D,E,F,G,H,I,J)
                    123: #define abort11(Z,A,B,C,D,E,F,G,H,I,J,K) fprintf(stderr,_G(Z),A,B,C,D,E,F,G,H,I,J,K)
                    124: 
                    125: boolean ask_more()
                    126: {   FILE *tty;
                    127:     char reply[20];
                    128:     static int skip = 0;
                    129:        if(skip<=0) {
                    130:                fputs("MORE? ",(tty=fopen("/dev/tty","w")));  fclose(tty);
                    131:                fgets(reply,20,(tty=fopen("/dev/tty","r")));  fclose(tty);
                    132:                switch (reply[0]) {
                    133:                        case '\0': case 'y': case 'Y':
                    134:                                return(T);
                    135:                        case 'n': case 'N': case 'q': case 'Q':
                    136:                                return(F);
                    137:                        case '0': case '1': case '2': case '3': case '4':
                    138:                        case '5': case '6': case '7': case '8': case '9':
                    139:                                skip = atoi(reply);
                    140:                                return(T);
                    141:                        case '*':
                    142:                                skip = INT_MAX;
                    143:                                return(T);
                    144:                        default:
                    145:                                skip = 0;
                    146:                                return(T);
                    147:                        };
                    148:                }
                    149:        else skip--;
                    150:        return(T);
                    151:        }
                    152: 
                    153: boolean ask_quit()
                    154: {   FILE *tty;
                    155:     char reply[20];
                    156:        fputs("QUIT? ",(tty=fopen("/dev/tty","w")));  fclose(tty);
                    157:        fgets(reply,20,(tty=fopen("/dev/tty","r")));  fclose(tty);
                    158:        switch (reply[0]) {
                    159:                case 'y': case 'Y':
                    160:                        return(F);
                    161:                case 'n': case 'N': case 'q': case 'Q':
                    162:                        return(T);
                    163:                };
                    164:        return(F);
                    165:        }
                    166: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.