Annotation of 43BSD/contrib/B/src/bed/help.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
                      2: static char rcsid[] = "$Header: help.c,v 2.6 85/08/22 16:03:38 timo Exp $";
                      3: 
                      4: /*
                      5:  * B editor -- Print help blurb.
                      6:  */
                      7: 
                      8: #include "feat.h"
                      9: 
                     10: #ifdef HELPFUL
                     11: 
                     12: #include "unix.h"
                     13: 
                     14: #ifdef IBMPC
                     15: #define getchar() getch()
                     16: #endif IBMPC
                     17: 
                     18: #ifdef SIGNAL
                     19: #include <signal.h>
                     20: #endif SIGNAL
                     21: 
                     22: #ifdef SGTTY_H
                     23: #include <sgtty.h>
                     24: #endif SGTTY_H
                     25: 
                     26: #include "b.h"
                     27: 
                     28: string unixerror();
                     29: 
                     30: #ifndef HELPBLURB
                     31: #define HELPBLURB "/usr/new/lib/B/Bed_help"
                     32: #endif
                     33: 
                     34: #define SOBIT 0200
                     35: 
                     36: extern int winheight;
                     37: extern int llength;
                     38: extern int winstart;
                     39: 
                     40: 
                     41: /*
                     42:  * Interrupt catcher while printing message.
                     43:  */
                     44: 
                     45: Hidden int intr;
                     46: 
                     47: #ifdef SIGNAL
                     48: Hidden Procedure
                     49: stop()
                     50: {
                     51:        intr = Yes;
                     52:        signal(SIGINT, stop);
                     53: }
                     54: #endif SIGNAL
                     55: 
                     56: 
                     57: /*
                     58:  * Print help blurb.
                     59:  * This is done through the standard screen interface.
                     60:  * An interrupt during the printing only stops the printing.
                     61:  * The user must type [return] to continue.
                     62:  */
                     63: 
                     64: Visible bool
                     65: help()
                     66: {
                     67:        FILE *fp;
                     68:        string helpblurb;
                     69:        char buffer[81];
                     70:        int len = sizeof buffer;
                     71:        string cp;
                     72: #ifdef SIGNAL
                     73:        int (*prevsig)();
                     74: #endif SIGNAL
                     75: #ifdef SGTTY_H
                     76:        struct sgttyb tty;
                     77: #endif SGTTY_H
                     78:        int c;
                     79:        
                     80:        helpblurb = getenv("BED_HELP");
                     81:        if (!helpblurb || !helpblurb[0])
                     82:                helpblurb = HELPBLURB;
                     83:        fp = fopen(helpblurb, "r");
                     84:        if (!fp) {
                     85:                error("Sorry, I can't help [%s]", unixerror(helpblurb));
                     86:                return No;
                     87:        }
                     88: #ifdef SIGNAL
                     89:        intr = No;
                     90:        prevsig = signal(SIGINT, stop);
                     91: #endif SIGNAL
                     92:        if (llength < (sizeof buffer)-1)
                     93:                len = llength+1;
                     94:        while (!intr && fgets(buffer, len, fp)) {
                     95:                cp = index(buffer, '\n');
                     96:                if (cp)
                     97:                        *cp = '\0';
                     98:                trmputdata(winheight, winheight, 0, buffer);
                     99:                trmscrollup(0, winheight, 1);
                    100:                trmsync(winheight, 0);
                    101:        }
                    102:        fclose(fp);
                    103: #ifdef SIGNAL
                    104:        signal(SIGINT, prevsig);
                    105:        if (intr)
                    106:                trmundefined();
                    107:                /* UNIX discards output when interrupted */
                    108:                /* so output position is uncertain */
                    109: #endif SIGNAL
                    110:        trmputdata(winheight, winheight, 0, "");
                    111:        strcpy(buffer, "Press [return] to continue");
                    112:        for (cp = buffer; *cp; )
                    113:                *cp++ |= SOBIT;
                    114:        trmputdata(winheight, winheight, 0, buffer);
                    115:        trmsync(winheight, cp - buffer);
                    116:        c = getchar();
                    117:        while (c != '\n' && c != '\r' && c != EOF) {
                    118:                trmbell();
                    119:                c = getchar();
                    120:        }
                    121:        trmputdata(winheight, winheight, 0, "");
                    122:        winstart = winheight;
                    123:        return Yes;
                    124: }
                    125: #endif HELPFUL

unix.superglobalmegacorp.com

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