# 2.11BSD#431 - /usr/src/ucb/PORT/pascal/pdx/tree/misc.c

##### Functions

    edit              X
    gripe             X
    help              X
    isredirected      X
    setout            X
    unsetout          X

##### Variables

    so_fd             X

##### Macros

    DEF_EDITOR        X

       1: /*
       2:  * Copyright (c) 1980 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)misc.c	5.1 (Berkeley) 6/6/85";
       9: #endif not lint
      10:
      11: /*
      12:  * Miscellaneous commands "edit" and "help".
      13:  * Also, output redirection routine "setout" and "unsetout".
      14:  */
      15:
      16: #include "defs.h"
      17: #include "tree.h"
      18: #include "command.h"
      19: #include "object.h"
      20: #include "mappings.h"
      21: #include "sym.h"
      22: #include "symtab.h"
      23:
      24: extern char *getenv();
      25:
      26: #define DEF_EDITOR  "vi"
      27:
      28: /*
      29:  * Invoke an editor on the given file.  Which editor to use might change
      30:  * installation to installation.  For now, we use "vi".  In any event,
      31:  * the environment variable "EDITOR" overrides any default.
      32:  */
      33:
      34: edit(filename)
      35: char *filename;
      36: {
      37:     char *ed;
      38:     FILE *fp;
      39:     SYM *s;
      40:     ADDRESS addr;
      41:     char buff[10];
      42:
      43:     if ((ed = getenv("EDITOR")) == NIL) {
      44:         ed = DEF_EDITOR;
      45:     }
      46:     fp = fopen(filename, "r");
      47:     if (fp == NIL) {
      48:         s = st_lookup(symtab, filename);
      49:         if (s == NIL) {
      50:             error("can't read \"%s\"", filename);
      51:         }
      52:         s = which(s);
      53:         if (!isblock(s)) {
      54:             error("can't read \"%s\"", filename);
      55:         }
      56:         addr = firstline(s);
      57:         filename = srcfilename(addr);
      58:         sprintf(buff, "+%d", srcline(addr));
      59:         call(ed, stdin, stdout, buff, filename, NIL);
      60:     } else {
      61:         fclose(fp);
      62:         call(ed, stdin, stdout, filename, NIL);
      63:     }
      64: }
      65:
      66: /*
      67:  * Send some nasty mail to the current pdx support person.
      68:  */
      69:
      70: gripe()
      71: {
      72:     char *maintainer = "linton@ucbvax";
      73:
      74:     puts("Type control-D to end your message.  Be sure to include");
      75:     puts("your name and the name of the file you are debugging.");
      76:     putchar('\n');
      77:     call("Mail", stdin, stdout, maintainer, NIL);
      78:     puts("Thank you.");
      79: }
      80:
      81: /*
      82:  * Give the user some help.
      83:  */
      84:
      85: help()
      86: {
      87:     puts("pdx command subset summary:");
      88:     putchar('\n');
      89:     puts("run                    - begin execution of the program");
      90:     puts("cont                   - continue execution");
      91:     puts("step                   - single step one line");
      92:     puts("next                   - step to next line (skip over calls)");
      93:     puts("trace <line#>          - trace execution of the line");
      94:     puts("trace <proc>           - trace calls to the procedure");
      95:     puts("trace <var>            - trace changes to the variable");
      96:     puts("trace <exp> at <line#> - print <exp> when <line> is reached");
      97:     puts("stop at <line>         - suspend execution at the line");
      98:     puts("stop in <proc>         - suspend execution when <proc> is called");
      99:     puts("status                 - print trace/stop's in effect");
     100:     puts("delete <number>        - remove trace or stop of given number");
     101:     puts("call <proc>            - call the procedure");
     102:     puts("where                  - print currently active procedures");
     103:     puts("print <exp>            - print the value of the expression");
     104:     puts("whatis <name>          - print the declaration of the name");
     105:     puts("list <line>, <line>    - list source lines");
     106:     puts("edit <proc>            - edit file containing <proc>");
     107:     puts("gripe                  - send mail to the person in charge of pdx");
     108:     puts("quit                   - exit pdx");
     109: }
     110:
     111: /*
     112:  * Divert output to the given file name.
     113:  * Cannot redirect to an existing file.
     114:  */
     115:
     116: LOCAL int so_fd;
     117: LOCAL BOOLEAN notstdout;
     118:
     119: setout(filename)
     120: char *filename;
     121: {
     122:     FILE *fp;
     123:
     124:     if ((fp = fopen(filename, "r")) != NIL) {
     125:         fclose(fp);
     126:         error("%s: file already exists", filename);
     127:     } else {
     128:         so_fd = dup(1);
     129:         close(1);
     130:         if (creat(filename, 0666) == NIL) {
     131:             unsetout();
     132:             error("can't create %s", filename);
     133:         }
     134:         notstdout = TRUE;
     135:     }
     136: }
     137:
     138: /*
     139:  * Revert output to standard output.
     140:  */
     141:
     142: unsetout()
     143: {
     144:     fflush(stdout);
     145:     close(1);
     146:     if (dup(so_fd) != 1) {
     147:         panic("standard out dup failed");
     148:     }
     149:     close(so_fd);
     150:     notstdout = FALSE;
     151: }
     152:
     153: BOOLEAN isredirected()
     154: {
     155:     return(notstdout);
     156: }

#### Defined functions

edit defined in line 34; used 1 times

- in /usr/src/ucb/PORT/pascal/pdx/tree/eval.c line 393

gripe defined in line 70; used 1 times

- in /usr/src/ucb/PORT/pascal/pdx/tree/eval.c line 401

help defined in line 85; used 1 times

- in /usr/src/ucb/PORT/pascal/pdx/tree/eval.c line 405

isredirected defined in line 153; used 1 times

- in /usr/src/ucb/PORT/pascal/pdx/tree/prtree.c line 38

setout defined in line 119; never used
unsetout defined in line 142; used 1 times

- in line 131

#### Defined variables

sccsid defined in line 8; never used
so_fd defined in line 116; used 3 times

- in line 128, 146-149(2)

#### Defined macros

DEF_EDITOR defined in line 26; used 1 times

- in line 44

Last modified: 1985-06-07 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 736 |