Annotation of 43BSDTahoe/new/B/src/bsmall/b2scr.c, revision 1.1

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
        !             2: /* $Header: b2scr.c,v 1.2 84/07/17 09:51:48 frank Exp $ */
        !             3: 
        !             4: /* B screen handling */
        !             5: #include "b.h"
        !             6: #include "b1obj.h"
        !             7: #include "b0con.h" /*for CLEAR_EOF*/
        !             8: #include "b2scr.h"
        !             9: #include "b2fil.h"
        !            10: 
        !            11: bool interactive, read_interactive, outeractive, filtered;
        !            12: bool at_nwl= Yes; /*Yes if currently at the start of an output line*/
        !            13: bool Eof, Eof0;
        !            14: FILE *ofile= stdout; bool woa, wnwl;
        !            15: FILE *ifile;           /* input file */
        !            16: FILE *sv_ifile;                /* copy of ifile for restoring after switching to read unit */
        !            17: value iname= Vnil;     /* input name */
        !            18: 
        !            19: jmp_buf reading[MAX_NMB_ACT_READS];
        !            20: intlet active_reads; 
        !            21: 
        !            22: string cmd_prompt= ">>> "; /* commands  */
        !            23: string eg_prompt=  "?\b";  /* READ EG   */
        !            24: string raw_prompt= "?\b";  /* READ RAW  */
        !            25: string qn_prompt=  "?\b";  /* questions */
        !            26: 
        !            27: 
        !            28: #define USE_YES_OR_NO \
        !            29: "\r*** Answer with yes or no (or use interrupt to duck the question)\n"
        !            30: 
        !            31: #define LAST_CHANCE \
        !            32: "*** This is your last chance. Take it. I really don't know what you want if\n\
        !            33:     %s\n\
        !            34:     So answer the question\n"
        !            35: 
        !            36: #define NO_THEN \
        !            37: "*** Well, I shall assume that your refusal to answer the question means no!\n"
        !            38: 
        !            39: Visible bool is_intended(m) string m; {
        !            40:        char answer; intlet try, k;
        !            41:        if (!interactive) return Yes;
        !            42:        if (outeractive) line();
        !            43:        fprintf(stderr, "*** %s\n", m);
        !            44:        for (try= 1; try<=4; try++){
        !            45:                answer= '?';
        !            46:                if (outeractive) at_nwl= No;
        !            47:                fprintf(stderr, qn_prompt);
        !            48:                while ((k= getchar()) != EOF && k != '\n') {
        !            49:                        if ((k == ' ' || k == '\t'));
        !            50:                        else if (answer == '?') answer= k;
        !            51:                }
        !            52:                if (k == EOF) {
        !            53:                        if (filtered) bye(0); /* Editor has died */
        !            54:                        CLEAR_EOF;
        !            55:                }
        !            56:                if (k == EOF && try < 4) {
        !            57:                        fprintf(stderr, USE_YES_OR_NO);
        !            58:                        if (outeractive) at_nwl= Yes;
        !            59:                } else {
        !            60:                        if (outeractive && k == '\n') at_nwl= Yes;
        !            61:                        if (answer == 'y' || answer == 'Y') return Yes;
        !            62:                        if (answer == 'n' || answer == 'N') return No;
        !            63:                        if (outeractive) line();
        !            64:                        fprintf(stderr,
        !            65:                                try == 1 ? "*** Please answer with yes or no\n" :
        !            66:                                try == 2 ? "*** Just yes or no, please\n" :
        !            67:                                try == 3 ? LAST_CHANCE :
        !            68:                                NO_THEN, m);
        !            69:                }
        !            70:        } /* end for */
        !            71:        return No;
        !            72: }
        !            73: 
        !            74: Visible Procedure redirect(of) FILE *of; {
        !            75:        ofile= of;
        !            76:        if (of == stdout) {
        !            77:                outeractive= woa;
        !            78:                at_nwl= wnwl;
        !            79:        } else {
        !            80:                woa= outeractive; outeractive= No;
        !            81:                wnwl= at_nwl; at_nwl= Yes;
        !            82:        }
        !            83: }
        !            84: 
        !            85: Hidden Procedure putch(c) char c; {
        !            86:        putc(c, ofile);
        !            87:        if (c == '\n') at_nwl= Yes;
        !            88:        else at_nwl= No;
        !            89: }
        !            90: 
        !            91: Visible Procedure newline() {
        !            92:        putch('\n');
        !            93:        fflush(stdout);
        !            94: }
        !            95: 
        !            96: Visible Procedure line() {
        !            97:        if (!at_nwl) newline();
        !            98: }
        !            99: 
        !           100: Visible Procedure wri_space() { /* Experiment: no space before outer strings */
        !           101:        if (!at_nwl) putch(' ');
        !           102: }
        !           103: 
        !           104: Visible Procedure writ(v) value v; {
        !           105:        wri(v, Yes, Yes, No);
        !           106:        fflush(stdout);
        !           107: }
        !           108: 
        !           109: #define Putch_sp() {if (!perm) putch(' ');}
        !           110: 
        !           111: bool lwt, last_was_text= No;
        !           112: 
        !           113: Visible Procedure wri(v, coll, outer, perm) value v; bool coll, outer, perm; {
        !           114:        if (outer && !at_nwl && (!Is_text(v) || !last_was_text)
        !           115:                  && (!Is_compound(v) || !coll)) putch(' ');
        !           116:        lwt= No;
        !           117:        if (Is_number(v)) {
        !           118:                if (perm) printnum(ofile, v);
        !           119:                else {
        !           120:                        string cp= convnum(v);
        !           121:                        while(*cp) putch(*cp++);
        !           122:                }
        !           123:        } else if (Is_text(v)) {
        !           124:                value ch; char c;
        !           125:                value s= size(v); int k, len;
        !           126:                if (large(s)) error("text too long to output");
        !           127:                else { len= intval(s); release(s); }
        !           128:                lwt= outer;
        !           129:                if (!outer) putch('\'');
        !           130:                k_Over_len {
        !           131:                        ch= thof(k+1, v);
        !           132:                        putch(c= charval(ch));
        !           133:                        if (!outer && (c == '\'' || c == '`'))
        !           134:                                putch(c);
        !           135:                        release(ch);
        !           136:                }
        !           137:                if (!outer) putch('\'');
        !           138:        } else if (Is_compound(v)) {
        !           139:                intlet k, len= Nfields(v);
        !           140:                outer&= coll;
        !           141:                if (!coll) putch('(');
        !           142:                k_Overfields {
        !           143:                        wri(*field(v, k), No, outer, perm);
        !           144:                        if (!Lastfield(k)) {
        !           145:                                if (!outer){
        !           146:                                        putch(',');
        !           147:                                        Putch_sp();
        !           148:                                }
        !           149:                        }
        !           150:                }
        !           151:                if (!coll) putch(')');
        !           152:        } else if (Is_list(v) || Is_ELT(v)) {
        !           153:                value ve; value s= size(v); int k, len;
        !           154:                if (large(s)) error("list too big to output");
        !           155:                else { len= intval(s); release(s); }
        !           156:                putch('{');
        !           157:                k_Over_len {
        !           158:                        wri(ve= thof(k+1, v), No, No, perm);
        !           159:                        release(ve);
        !           160:                        if (!Last(k)) {
        !           161:                                putch(';');
        !           162:                                Putch_sp();
        !           163:                        }
        !           164:                }
        !           165:                putch('}');
        !           166:        } else if (Is_table(v)) {
        !           167:                value s= size(v); int k, len;
        !           168:                if (large(s)) error("table too big to output");
        !           169:                else { len= intval(s); release(s); }
        !           170:                putch('{');
        !           171:                k_Over_len {
        !           172:                        putch('['); wri(*key(v, k), Yes, No, perm);
        !           173:                        putch(']'); putch(':'); Putch_sp();
        !           174:                        wri(*assoc(v, k), No, No, perm);
        !           175:                        if (!Last(k)) {
        !           176:                                putch(';');
        !           177:                                Putch_sp();
        !           178:                        }
        !           179:                }
        !           180:                putch('}');
        !           181:        } else {
        !           182:                if (bugs) { putch('?'); putch(Type(v)); putch('?'); }
        !           183:                else syserr("writing value of unknown type");
        !           184:        }
        !           185:        last_was_text= lwt;
        !           186: }
        !           187: 
        !           188: Visible Procedure vs_ifile() {
        !           189:        ifile= sv_ifile;
        !           190: }
        !           191: 
        !           192: Visible Procedure re_files() {
        !           193:        if (interactive && sv_ifile != ifile) {
        !           194:                if (ifile != stdin) fclose(ifile);
        !           195:                vs_ifile();
        !           196:                Eof= Eof0= No;
        !           197:        }
        !           198: }
        !           199: 
        !           200: Visible Procedure initscr() {
        !           201:        read_interactive= f_interactive(stdin) || filtered;
        !           202:        outeractive= f_interactive(stdout) || filtered;
        !           203: }
        !           204: 
        !           205: Visible Procedure re_screen() {
        !           206:        sv_ifile= ifile;
        !           207:        interactive= f_interactive(ifile) || (ifile == stdin && filtered);
        !           208: }

unix.superglobalmegacorp.com

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