📄 main.c
字号:
/* Copyright (c) 1985 Ceriel J.H. Jacobs */# ifndef lintstatic char rcsid[] = "$Header: main.c,v 1.2 92/04/13 13:16:02 philip Exp $";# endif# define _MAIN_# include "in_all.h"# if USG_OPEN# include <fcntl.h># endif# if BSD4_2_OPEN# include <sys/file.h># endif# if POSIX_OPEN# include <sys/types.h># include <fcntl.h># endif# include "main.h"# include "term.h"# include "options.h"# include "output.h"# include "process.h"# include "commands.h"# include "display.h"# include "prompt.h"char *strcpy();STATIC int initialize();# ifdef SIGTSTPSTATIC int suspsig();# endifintmain(argc,argv) register char ** argv; { register char ** av; if (! isatty(1)) { no_tty = 1; } argv[argc] = 0; progname = argv[0]; if ((av = readoptions(argv)) == (char **) 0 || initialize(*av ? 1 : 0)) { if (no_tty) { close(1); (VOID) dup(2); } putline("Usage: "); putline(argv[0]); putline(" [-c] [-u] [-n] [-q] [-number] [+command] [file ... ]\n"); flush(); exit(1); } if (no_tty) { *--av = "cat"; execve("/bin/cat", av, (char *) 0); } else processfiles(argc-(av-argv), av); (VOID) quit(); /* NOTREACHED */}char *mktemp();/* * Open temporary file for reading and writing. * Panic if it fails */static char indexfile[30], tempfile[30];intopentemp(i) { register fildes; register char *f; f = i ? mktemp(indexfile) : mktemp(tempfile);# if BSD4_2_OPEN || USG_OPEN || POSIX_OPEN if ((fildes = open(f,O_RDWR|O_TRUNC|O_CREAT,0600)) < 0) {# else if ((fildes = creat(f,0600)) <= 0 || close(fildes) < 0 || (fildes = open(f,2)) < 0) {# endif panic("Couldn't open temporary file"); } (VOID) unlink(f); return fildes;}/* * Collect initializing stuff here. */STATIC intinitialize(x) { if (!(nopipe = x)) { /* * Reading from pipe */ if (isatty(0)) { return 1; } stdf = dup(0); /* Duplicate file descriptor of input */ if (no_tty) return 0; /* * Make sure standard input is from the terminal. */ (VOID) close(0);# if BSD4_2_OPEN || USG_OPEN || POSIX_OPEN if (open("/dev/tty",O_RDONLY,0) != 0) {# else if (open("/dev/tty",0) != 0) {# endif putline("Couldn't open terminal\n"); flush(); exit(1); } } if (no_tty) return 0; (VOID) strcpy(tempfile,"/usr/tmp/yap_XXXXXX"); (VOID) strcpy(indexfile,"/usr/tmp/yap-XXXXXX"); /* * Handle signals. * Catch QUIT, DELETE and ^Z */ (VOID) signal(SIGQUIT,SIG_IGN); (VOID) signal(SIGINT, catchdel); ini_terminal();# ifdef SIGTSTP if (signal(SIGTSTP,SIG_IGN) == SIG_DFL) { (VOID) signal(SIGTSTP,suspsig); }# endif (VOID) signal(SIGQUIT,quit); return 0;}intcatchdel() { (VOID) signal(SIGINT, catchdel); interrupt = 1;}# ifdef SIGTSTP/* * We had a SIGTSTP signal. * Suspend, by a call to this routine. */VOIDsuspend() { nflush(); resettty(); (VOID) signal(SIGTSTP,SIG_DFL);#if BSD4_2_OPEN sigsetmask(sigblock(0)&~(1 << (SIGTSTP - 1)));#endif (VOID) kill(0, SIGTSTP); /* * We are not here anymore ... * * * But we arive here ... */ inittty(); putline(TI); flush(); (VOID) signal(SIGTSTP,suspsig);}/* * SIGTSTP signal handler. * Just indicate that we had one, ignore further ones and return. */STATIC intsuspsig() { suspend(); if (DoneSetJmp) longjmp(SetJmpBuf, 1);}# endif/* * quit : called on exit. * I bet you guessed that much. */intquit() { clrbline(); resettty(); flush(); exit(0);}/* * Exit, but nonvoluntarily. * At least tell the user why. */VOIDpanic(s) char *s; { putline("\007\007\007\r\n"); putline(s); putline("\r\n"); quit();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -