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
gripe defined in line 70; used 1 times
help defined in line 85; used 1 times
isredirected defined in line 153; used 1 times
setout defined in line 119; never used
unsetout defined in line 142; used 1 times

Defined variables

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

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: 1086
Valid CSS Valid XHTML 1.0 Strict