📄 misc.c
字号:
/*- * Copyright (c) 1980, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifndef lintstatic char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 6/6/93";#endif /* not lint *//* * Miscellaneous commands "edit" and "help". * Also, output redirection routine "setout" and "unsetout". */#include "defs.h"#include "tree.h"#include "command.h"#include "object.h"#include "mappings.h"#include "sym.h"#include "symtab.h"extern char *getenv();#define DEF_EDITOR "vi"/* * Invoke an editor on the given file. Which editor to use might change * installation to installation. For now, we use "vi". In any event, * the environment variable "EDITOR" overrides any default. */edit(filename)char *filename;{ char *ed; FILE *fp; SYM *s; ADDRESS addr; char buff[10]; if ((ed = getenv("EDITOR")) == NIL) { ed = DEF_EDITOR; } fp = fopen(filename, "r"); if (fp == NIL) { s = st_lookup(symtab, filename); if (s == NIL) { error("can't read \"%s\"", filename); } s = which(s); if (!isblock(s)) { error("can't read \"%s\"", filename); } addr = firstline(s); filename = srcfilename(addr); sprintf(buff, "+%d", srcline(addr)); call(ed, stdin, stdout, buff, filename, NIL); } else { fclose(fp); call(ed, stdin, stdout, filename, NIL); }}/* * Send some nasty mail to the current pdx support person. */gripe(){ char *maintainer = "4bsd-bugs@Berkeley.EDU"; puts("Type control-D to end your message. Be sure to include"); puts("your name and the name of the file you are debugging."); putchar('\n'); call("Mail", stdin, stdout, maintainer, NIL); puts("Thank you.");}/* * Give the user some help. */help(){ puts("pdx command subset summary:"); putchar('\n'); puts("run - begin execution of the program"); puts("cont - continue execution"); puts("step - single step one line"); puts("next - step to next line (skip over calls)"); puts("trace <line#> - trace execution of the line"); puts("trace <proc> - trace calls to the procedure"); puts("trace <var> - trace changes to the variable"); puts("trace <exp> at <line#> - print <exp> when <line> is reached"); puts("stop at <line> - suspend execution at the line"); puts("stop in <proc> - suspend execution when <proc> is called"); puts("status - print trace/stop's in effect"); puts("delete <number> - remove trace or stop of given number"); puts("call <proc> - call the procedure"); puts("where - print currently active procedures"); puts("print <exp> - print the value of the expression"); puts("whatis <name> - print the declaration of the name"); puts("list <line>, <line> - list source lines"); puts("edit <proc> - edit file containing <proc>"); puts("gripe - send mail to the person in charge of pdx"); puts("quit - exit pdx");}/* * Divert output to the given file name. * Cannot redirect to an existing file. */LOCAL int so_fd;LOCAL BOOLEAN notstdout;setout(filename)char *filename;{ FILE *fp; if ((fp = fopen(filename, "r")) != NIL) { fclose(fp); error("%s: file already exists", filename); } else { so_fd = dup(1); close(1); if (creat(filename, 0666) == NIL) { unsetout(); error("can't create %s", filename); } notstdout = TRUE; }}/* * Revert output to standard output. */unsetout(){ fflush(stdout); close(1); if (dup(so_fd) != 1) { panic("standard out dup failed"); } close(so_fd); notstdout = FALSE;}BOOLEAN isredirected(){ return(notstdout);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -