# 2.11BSD#431 - /usr/src/new/PORT/B/src/bed/main.c

##### Functions

    asserr            X
    endall            X
    initall           X
    main              X
    syserr            X

##### Variables

    dflag             X
    hushbaby          X
    nostandout        X
    slowterminal      X

##### Macros

    MAXSAVE           X
    SAVEPOSFILE       X

       1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
       2: static char rcsid[] = "$Header: main.c,v 2.5 85/08/22 16:05:00 timo Exp $";
       3:
       4: /*
       5:  * B editor -- Main program (init/exit processing), error handling.
       6:  */
       7:
       8: /*
       9:  * The B editor is a structured editor for a programming language
      10:  * for beginners and non-professional computer users.
      11:  * [L.G.L.T. Meertens: Draft Proposal for the B programming language,
      12:  * Mathematical Centre, Amsterdam, 1982, ISBN 90 6169 238 2.]
      13:  * Note that `B' is only a provisional name for the language.
      14:  * The editor uses a subset of the run-time system for the B
      15:  * interpreter, so that they may be linked together in a later stage.
      16:  * Also the sharing strategy of the B run-time routines makes a very
      17:  * elegant and powerful UNDO-mechanism possible.
      18:  */
      19:
      20: #include "b.h" /* Contains definitions like string, etc. */
      21: #include "feat.h"
      22: #include "bobj.h"
      23:
      24:
      25: #ifdef SAVEPOS
      26: #define SAVEPOSFILE ".Bed_pos" /* Last focus position database */
      27: #define MAXSAVE 50 /* Maximum number of entries kept in SAVEPOSFILE */
      28: #endif SAVEPOS
      29:
      30:
      31: /* Command line flags */
      32:
      33: bool dflag; /* -d: debugging output wanted */
      34:
      35: bool slowterminal;
      36:     /* -s: the terminal is so slow that long messages are annoying */
      37:
      38: bool hushbaby; /* -h: no bells are to be heard */
      39:
      40: #ifdef COMMENTED_OUT /* Lower levels don't respond to this */
      41: bool nostandout; /* -n: inhibit use of standout */
      42: #endif COMMENTED_OUT
      43:
      44:
      45: /*
      46:  * Main program -- call module initializations, do some work,
      47:  * call module shut-off code, exit.
      48:  */
      49:
      50: Visible Procedure
      51: main(argc, argv)
      52:     int argc;
      53:     string *argv;
      54: {
      55:     bool initdone = No;
      56:     bool status = Yes;
      57:     int lineno = 0;
      58:     string arg0 = argv[0];
      59:     string cp;
      60:     string filename;
      61:     extern string malloc();
      62:
      63:     cp = rindex(arg0, '/');
      64:     if (cp)
      65:         arg0 = cp+1;
      66:
      67:     /* Process UNIX command line options */
      68:     for (; argc > 1 && argv[1][0] == '-'; --argc, ++argv) {
      69:         switch (argv[1][1]) {
      70:
      71: #ifndef NDEBUG
      72:         case 'd':
      73:             dflag = Yes;
      74:             break;
      75: #endif NDEBUG
      76:
      77:         case 'h':
      78:             hushbaby = Yes;
      79:             break;
      80:
      81: #ifdef COMMENTED_OUT /* Lower levels don't respond to this */
      82:         case 'n':
      83:             nostandout = Yes;
      84:             break;
      85: #endif COMMENTED_OUT
      86:
      87:         case 's':
      88:             slowterminal = Yes;
      89:             break;
      90:
      91:         default:
      92:             fprintf(stderr,
      93:                 "*** Usage: %s [-h] [-s] %s\n",
      94:                 arg0,
      95: #ifdef FILEARGS
      96:                 "[ [+lineno] file ] ...");
      97: #else !FILEARGS
      98:                 "");
      99: #endif !FILEARGS
     100:             exit(1);
     101:
     102:         }
     103:     }
     104:
     105:     /* Setbuf must be called before any output is produced! */
     106:     setbuf(stdout, malloc((unsigned)BUFSIZ));
     107:
     108: #ifdef FILEARGS
     109:     for (; status && argc > 1; --argc, ++argv) {
     110:         if (argv[1][0] == '+') { /* +lineno option */
     111:             lineno = atoi(argv[1] + 1);
     112:         }
     113:         else {
     114:             filename = argv[1];
     115:             if (!initdone) {
     116:                 initall();
     117:                 initdone = Yes;
     118:             }
     119:             status = demo(filename, lineno);
     120:             lineno = 0;
     121:         }
     122:     }
     123: #endif FILEARGS
     124:     if (!initdone) {
     125: #ifdef BTOP
     126:         initall();
     127:         mainloop();
     128: #else BTOP
     129: #ifndef FILEARGS
     130:         Deliberate error. You should define at least one of BTOP and FILEARGS;
     131: #endif !FILEARGS
     132:         fprintf(stderr, "*** No file edited\n");
     133:         exit(0);
     134: #endif BTOP
     135:     }
     136:     endall();
     137:     objstats();
     138:     if (status)
     139:         objcheck();
     140:     else
     141:         objdump();
     142:     return !status;
     143: }
     144:
     145:
     146: /*
     147:  * Module initializations -- for each module xxxx that needs dynamic
     148:  * initialization, call a routine named initxxxx.
     149:  * The order is determined by the inter-module dependencies.
     150:  * Also note that all terminal- and screen-related initializations are called
     151:  * indirectly by initterm().
     152:  */
     153:
     154: Hidden Procedure
     155: initall()
     156: {
     157: #ifndef NDEBUG
     158:     if (dflag)
     159:         fprintf(stderr, "*** initall();\n\r");
     160: #endif NDEBUG
     161:     initfile();
     162:     initkeys();
     163:     initgram();
     164: #ifdef USERSUGG
     165:     initsugg();
     166: #endif USERSUGG
     167:     initunix();
     168:     initterm();
     169: }
     170:
     171:
     172: /*
     173:  * Module shut-off code -- for each module xxxx that needs dynamic
     174:  * shut-off code (what is the inverse of `initialization'?),
     175:  * call a routine named endxxxx.
     176:  * Endall is also called (from module "unix") when a signal or interrupt
     177:  * causes termination.
     178:  */
     179:
     180: Visible Procedure
     181: endall()
     182: {
     183:     if (dflag)
     184:         fprintf(stderr, "*** endall();\n\r");
     185:     endterm();
     186:     enddemo();
     187:     endunix();
     188:     enderro();
     189: #ifdef USERSUGG
     190:     endsugg();
     191: #endif USERSUGG
     192: }
     193:
     194:
     195:
     196: /*
     197:  * System error -- abort the editor with a short error message.
     198:  * Should only be called for catastrophic, unrecoverable errors
     199:  * or those that `cannot happen'.
     200:  */
     201:
     202: /* VARARGS 1 */
     203: Visible Procedure
     204: syserr(fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
     205:     string fmt;
     206: {
     207: #ifdef BTOP
     208:     termchild();
     209: #endif BTOP
     210:     endall();
     211:     fprintf(stderr, "*** System error: ");
     212:     fprintf(stderr, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
     213:     fprintf(stderr, "\n");
     214: #ifndef NDEBUG
     215:     fprintf(stderr, "*** Core dump for B guru: ");
     216:     fflush(stderr);
     217:     abort();
     218: #else
     219:     fflush(stderr);
     220:     _exit(1);
     221: #endif
     222:     /* NOTREACHED */
     223: }
     224:
     225:
     226: /*
     227:  * Assertion error.
     228:  * Call syserr with information about where something was wrong.
     229:  * (Sorry, WHAT was wrong must be dug out of the core dump.)
     230:  */
     231:
     232: Visible Procedure
     233: asserr(file, line)
     234:     string file;
     235:     int line;
     236: {
     237:     syserr("Assertion failed: file %s, line %d", file, line);
     238:     /* NOTREACHED */
     239: }

#### Defined functions

asserr defined in line 232; never used
endall defined in line 180; used 3 times

- in line 136, 210
- in /usr/src/new/PORT/B/src/bed/unix.c line 68

initall defined in line 154; used 2 times

- in line 116, 126

main defined in line 50; never used
syserr defined in line 203; used 1 times

- in line 237

#### Defined variables

dflag defined in line 33; used 22 times

- in line 73, 158, 183
- in /usr/src/new/PORT/B/src/bed/bobj.c line 70, 483
- in /usr/src/new/PORT/B/src/bed/cell.c line 171
- in /usr/src/new/PORT/B/src/bed/getc.c line 589, 639, 645
- in /usr/src/new/PORT/B/src/bed/gram.c line 154
- in /usr/src/new/PORT/B/src/bed/scrn.c line 181, 386
- in /usr/src/new/PORT/B/src/bed/sugg.c line 51, 218, 224
- in /usr/src/new/PORT/B/src/bed/term.c line 29, 47
- in /usr/src/new/PORT/B/src/bed/unix.c line 104, 150, 171, 204, 406

hushbaby defined in line 38; used 2 times

- in line 78
- in /usr/src/new/PORT/B/src/bed/erro.c line 47

nostandout defined in line 41; used 1 times

- in line 83

rcsid defined in line 2; never used
slowterminal defined in line 35; used 3 times

- in line 88
- in /usr/src/new/PORT/B/src/bed/demo.c line 445
- in /usr/src/new/PORT/B/src/bed/unix.c line 283

#### Defined macros

MAXSAVE defined in line 27; never used
SAVEPOSFILE defined in line 26; never used

Last modified: 1985-08-27 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 831 |