static void tcapclose(void) { putpad(tgoto(CM, 0, term.t_nrow)); putpad(TE); ttflush(); ttclose(); }
void ansiclose(void) { #if COLOR ansifcol(7); ansibcol(0); #endif ttclose(); }
/* * panic - just exit, as quickly as we can. */ void panic(char *s) { ttclose(); (void) fputs("panic: ", stderr); (void) fputs(s, stderr); (void) fputc('\n', stderr); exit(1); }
smgclose() { #ifdef NEVER smgputs( end_mouse); #endif #if KEYPAD if ((orgchar.tt2 & TT2$M_APP_KEYPAD)==0) smgputs(numeric_keypad); #endif ttclose(); }
/* * Tidy up the virtual display system * in anticipation of a return back to the host * operating system. Right now all we do is position * the cursor to the last line, erase the line, and * close the terminal channel. */ void vttidy (void) { ttcolor (CTEXT); ttnowindow (); /* No scroll window. */ ttmove (nrow - 1, 0); /* Echo line. */ tteeol (); tttidy (); ttflush (); ttclose (); }
/* * panic - just exit, as quickly as we can. */ void panic(char *s) { static int panicking = 0; if (panicking) return; else panicking = 1; ttclose(); (void) fputs("panic: ", stderr); (void) fputs(s, stderr); (void) fputc('\n', stderr); exit(1); }
static int tinfoclose(void) { if(!Pmaster){ if(gmode&MDFKEY) puts("\033[99l"); /* reset UW-NCSA telnet keys */ if(_termcap_end) /* any clean up terminfo requires */ putpad(_termcap_end); } ttclose(); /* return ignored */ return(0); }
Dpause() { #ifdef hpux return FALSE; #else #if BSDUNIX || LINUX extern int sgarbf; (*term.t_move)( term.t_nrow - 1, 0 ); (*term.t_eeop)(); ttflush(); ttclose(); killpg(getpgrp(0), 18); /* SIGTSTP -- stop the current program */ ttopen(); sgarbf = TRUE; window_refresh(FALSE, 1); #endif return( TRUE ); #endif }
spawncli(f, n) { fortran void comlv$(); ttcolor(CTEXT); ttnowindow(); ttmove(nrow-1, 0); if (epresf != FALSE) { tteeol(); epresf = FALSE; } ttclose(); comlv$(); sgarbf = TRUE; /* Force repaint. */ ttopen(); #ifndef NO_DIR (void) dirinit(); /* current directory may have changed */ #endif return (TRUE); }
/*ARGSUSED*/ spawncli(f, n) { register void (*oisig)(); int status; #ifdef EXTD_DIR ensurecwd(); #endif if (shellp == NULL) { shellp = getenv("SHELL"); if (shellp == NULL) shellp = getenv("shell"); if (shellp == NULL) shellp = "command.x"; /* Safer. */ } ttcolor(CTEXT); ttnowindow(); ttmove(nrow-1, 0); if (epresf != FALSE) { tteeol(); epresf = FALSE; } ttclose(); sgarbf = TRUE; /* Force repaint. */ oisig = signal(SIGINT, SIG_IGN); #ifdef EXTD_DIR dirend(); #endif if (spawnlp(P_WAIT, shellp, shellp, NULL) == -1) { status = FALSE; } else { status = TRUE; } (VOID) signal(SIGINT, oisig); ttopen(); if(status == FALSE) { ewprintf("Failed to run %s", shellp); sleep(2); /* Show this message for 2 sec */ /* before refresh screen. */ } dirinit(); return (status); }
/* * bktoshell - suspend and wait to be woken up */ int bktoshell(int f, int n) { UCS z = CTRL | 'Z'; if(!(gmode&MDSSPD)){ unknown_command(z); return(FALSE); } if(Pmaster){ if(!Pmaster->suspend){ unknown_command(z); return(FALSE); } if((*Pmaster->suspend)() == NO_OP_COMMAND){ int rv; if(km_popped){ term.t_mrow = 2; curwp->w_ntrows -= 2; } clearcursor(); mlerase(); rv = (*Pmaster->showmsg)('x'); ttresize(); picosigs(); if(rv) /* Did showmsg corrupt the display? */ pico_refresh(0, 1); /* Yes, repaint */ mpresf = 1; if(km_popped){ term.t_mrow = 0; curwp->w_ntrows += 2; } } else{ ttresize(); pclear(0, term.t_nrow); pico_refresh(0, 1); } return(TRUE); } if(gmode&MDSPWN){ char *shell; int dummy; vttidy(); movecursor(0, 0); (*term.t_eeop)(); printf("\n\n\nUse \"exit\" to return to Pi%s\n", (gmode & MDBRONLY) ? "lot" : "co"); system((shell = (char *)getenv("SHELL")) ? shell : "/bin/csh"); rtfrmshell(dummy); /* fixup tty */ } else { movecursor(term.t_nrow-1, 0); peeol(); movecursor(term.t_nrow, 0); peeol(); movecursor(term.t_nrow, 0); printf("\n\n\nUse \"fg\" to return to Pi%s\n", (gmode & MDBRONLY) ? "lot" : "co"); ttclose(); movecursor(term.t_nrow, 0); peeol(); (*term.t_flush)(); signal(SIGCONT, rtfrmshell); /* prepare to restart */ signal(SIGTSTP, SIG_DFL); /* prepare to stop */ kill(0, SIGTSTP); } return(TRUE); }
void cleanup(void) { #ifdef VMS extern BOOLEAN DidCleanup; #endif /* VMS */ /* * Cleanup signals - just in case. Ignore further interrupts. - mhc: * 11/2/91 */ #ifndef NOSIGHUP (void) signal(SIGHUP, SIG_IGN); #endif /* NOSIGHUP */ (void) signal(SIGTERM, SIG_IGN); #ifndef VMS /* use ttclose() from cleanup() for VMS */ (void) signal(SIGINT, SIG_IGN); #endif /* !VMS */ if (LYCursesON) { LYmove(LYlines - 1, 0); LYclrtoeol(); lynx_stop_all_colors(); LYrefresh(); stop_curses(); } #ifdef EXP_CHARTRANS_AUTOSWITCH /* * Currently implemented only for LINUX: Restore original font. */ UCChangeTerminalCodepage(-1, (LYUCcharset *) 0); #endif /* EXP_CHARTRANS_AUTOSWITCH */ #ifdef USE_PERSISTENT_COOKIES /* * This can go right here for now. We need to work up a better place * to save cookies for the next release, preferably whenever a new * persistent cookie is received or used. Some sort of protocol to * handle two processes writing to the cookie file needs to be worked * out as well. */ if (persistent_cookies) LYStoreCookies(LYCookieSaveFile); #endif cleanup_files(); #ifdef VMS ttclose(); DidCleanup = TRUE; #endif /* VMS */ /* * If we're looking at memory leaks, hang onto the trace file, since there * is no memory freed in this function, and it is a nuisance to not be able * to trace the cleanup activity -TD */ #ifndef LY_FIND_LEAKS LYCloseTracelog(); #endif }
tool(void) { char buf[BUFSIZ],*p; unsigned short div2(char *,char **); struct KEY kk,*kp; size_t cnt; FILE *fp; int i,sts; keyptr = key; ininame = "keys.ini"; if((fp= fopen(ininame,"r")) == NULL) { /* Curent directory */ if((p= getenv("KEYS")) != NULL) { fp= fopen(p,"r"); /* Env val directory */ } } if(fp == NULL) { #ifndef UNIX _searchenv(ininame,"PATH",buf); #else sprintf(buf,"/usr/local/etc/%s", ininame); #endif if((fp= fopen(buf,"r")) == NULL) return(NG); /* PATH directory */ } if((keyptr = (struct KEY *)calloc(KEYDEFMAX,sizeof(struct KEY))) == NULL) abort(); cnt= 0; while(fgets(buf,BUFSIZ,fp) != NULL) { crcut(buf); if(buf[0] == ';' || buf[0] == '*' || buf[0] == '#') continue; if((kk.code = div2(buf,&p)) == 0xffff) { keyptr = key; break; } kk.keyword = buf; kp = lfind(&kk, key, &key_count,sizeof(struct KEY),cpkey); if(kp == NULL) { if(othset(&kk,buf,p) == NG) { ndprintf("Keyword not found [%s]!\n",buf); if(ynchk("Continue ?") != YES) { #if (defined TEXT98) popscrn(); #elif (defined UNIX) ttclose(); #else batch("///",NULL); #endif exit(1); } } continue; } kk.func = kp->func; kk.helpmsg = kp->helpmsg; if(key_count < KEYDEFMAX) { if(cnt) kp = lfind(&kk, keyptr, &cnt,sizeof(struct KEY), codekey); else kp= NULL; if(kp == NULL) { kk.keyword= memgets(buf); lsearch(&kk, keyptr, &cnt, sizeof(struct KEY), codekey); } } } key_count= cnt; fclose(fp); }
static void tcapopen(void) { char *t, *p; char tcbuf[1024]; char *tv_stype; char err_str[72]; int int_col, int_row; #if PKCODE && USE_BROKEN_OPTIMIZATION if (!term_init_ok) { #endif if ((tv_stype = getenv("TERM")) == NULL) { puts("Environment variable TERM not defined!"); exit(1); } #if defined __hpux__ || defined __HP_cc || defined __HP_aCC if ((tgetent(tcbuf, tv_stype)) != 0) { #else if ((tgetent(tcbuf, tv_stype)) != 1) { #endif sprintf(err_str, "Unknown terminal type %s!", tv_stype); puts(err_str); exit(1); } /* Get screen size from system, or else from termcap. */ getscreensize(&int_col, &int_row); term.t_nrow = int_row - 1; term.t_ncol = int_col; if ((term.t_nrow <= 0) && (term.t_nrow = (short) tgetnum("li") - 1) == -1) { puts("termcap entry incomplete (lines)"); exit(1); } if ((term.t_ncol <= 0) && (term.t_ncol = (short) tgetnum("co")) == -1) { puts("Termcap entry incomplete (columns)"); exit(1); } #ifdef SIGWINCH term.t_mrow = MAXROW; term.t_mcol = MAXCOL; #else term.t_mrow = term.t_nrow > MAXROW ? MAXROW : term.t_nrow; term.t_mcol = term.t_ncol > MAXCOL ? MAXCOL : term.t_ncol; #endif p = tcapbuf; t = tgetstr("pc", &p); if (t) PC = *t; else PC = 0; CL = tgetstr("cl", &p); CM = tgetstr("cm", &p); CE = tgetstr("ce", &p); UP = tgetstr("up", &p); SE = tgetstr("se", &p); SO = tgetstr("so", &p); if (SO != NULL) revexist = TRUE; #if PKCODE if (tgetnum("sg") > 0) { /* can reverse be used? P.K. */ revexist = FALSE; SE = NULL; SO = NULL; } TI = tgetstr("ti", &p); /* terminal init and exit */ TE = tgetstr("te", &p); #endif if (CL == NULL || CM == NULL || UP == NULL) { puts("Incomplete termcap entry\n"); exit(1); } if (CE == NULL) /* will we be able to use clear to EOL? */ eolexist = FALSE; #if SCROLLCODE CS = tgetstr("cs", &p); SF = tgetstr("sf", &p); SR = tgetstr("sr", &p); DL = tgetstr("dl", &p); AL = tgetstr("al", &p); if (CS && SR) { if (SF == NULL) /* assume '\n' scrolls forward */ SF = "\n"; term.t_scroll = tcapscroll_reg; } else if (DL && AL) { term.t_scroll = tcapscroll_delins; } else { term.t_scroll = NULL; } #endif if (p >= &tcapbuf[TCAPSLEN]) { puts("Terminal description too big!\n"); exit(1); } #if PKCODE && USE_BROKEN_OPTIMIZATION term_init_ok = 1; } #endif ttopen(); } #if PKCODE static void tcapclose(void) { putpad(tgoto(CM, 0, term.t_nrow)); putpad(TE); ttflush(); ttclose(); }
/*ARGSUSED*/ spawncli(f, n) { extern char *strrchr(); register int pid; register int wpid; register VOID (*oqsig)(); register VOID (*oisig)(); #ifdef ADDFUNC /* 93.07.08 by S.Yoshida */ #ifdef SIGWINCH /* 93.07.08 by S.Yoshida */ register VOID (*owsig)(); #endif #ifdef SIGTSTP /* 93.07.08 by S.Yoshida */ register int omask; #endif #endif /* ADDFUNC */ int status = FALSE; int errp = FALSE; #ifdef XKEYS /* 92.03.16 by Gen KUROKI */ ttykeymaptidy(); #endif /* XKEYS */ if (shellp == NULL) { shellp = getenv("SHELL"); if (shellp == NULL) shellp = getenv("shell"); if (shellp == NULL) shellp = "/bin/sh"; /* Safer. */ shname = strrchr( shellp, '/' ); shname = shname ? shname+1 : shellp; } ttcolor(CTEXT); ttnowindow(); #ifdef ADDFUNC /* 93.07.08 by S.Yoshida */ #ifdef SIGTSTP /* 93.07.08 by S.Yoshida */ if (strcmp(shellp, "/bin/csh") == 0) { if (epresf != FALSE) { ttmove(nrow-1, 0); tteeol(); epresf = FALSE; } /* Csh types a "\n" */ ttmove(nrow-2, 0); /* before "Stopped". */ } else { #endif #endif ttmove(nrow-1, 0); if (epresf != FALSE) { tteeol(); epresf = FALSE; } #ifdef ADDFUNC /* 93.07.08 by S.Yoshida */ #ifdef SIGTSTP /* 93.07.08 by S.Yoshida */ } #endif #endif ttclose(); sgarbf = TRUE; /* Force repaint. */ #ifdef ADDFUNC /* 93.07.08 by S.Yoshida */ #ifdef SIGTSTP /* 93.07.08 by S.Yoshida */ # ifdef HAVE_GETSID if (job_control) { # else if (strcmp(shellp, "/bin/sh")!=0 || getenv("BASH_VERSION") || getenv("BASH")) { /* C shell, ksh or bash */ # endif /* omask = sigsetmask(0); */ oqsig = signal(SIGQUIT, SIG_IGN); oisig = signal(SIGINT, SIG_IGN); #ifdef SIGWINCH /* 93.07.08 by S.Yoshida */ owsig = signal(SIGWINCH, SIG_IGN); #endif (void) kill(0, SIGTSTP); /* (void) sigsetmask(omask); */ signal(SIGINT, oisig); signal(SIGQUIT, oqsig); #ifdef SIGWINCH /* 93.07.08 by S.Yoshida */ signal(SIGWINCH, owsig); #endif } else { /* Bourne shell. */ #endif /* SIGTSTP */ #endif /* ADDFUNC */ oqsig = signal(SIGQUIT, SIG_IGN); oisig = signal(SIGINT, SIG_IGN); #ifdef ADDFUNC /* 93.07.08 by S.Yoshida */ #ifdef SIGWINCH /* 93.07.08 by S.Yoshida */ owsig = signal(SIGWINCH, SIG_IGN); #endif #endif if ((pid=fork()) == 0) { (void) signal(SIGINT, oisig); (void) signal(SIGQUIT, oqsig); #ifdef ADDFUNC /* 93.07.08 by S.Yoshida */ #ifdef SIGWINCH /* 93.07.08 by S.Yoshida */ (void) signal(SIGWINCH, owsig); #endif #endif #ifdef EXTD_DIR dirend(); #endif execlp(shellp, shname, "-i", (char *)NULL); _exit(1); /* Should do better! */ } else if (pid > 0) { while ((wpid=wait(&status))>=0 && wpid!=pid) ; } else errp = TRUE; signal(SIGINT, oisig); signal(SIGQUIT, oqsig); #ifdef ADDFUNC /* 93.07.08 by S.Yoshida */ #ifdef SIGWINCH /* 93.07.08 by S.Yoshida */ signal(SIGWINCH, owsig); #endif #ifdef SIGTSTP /* 93.07.08 by S.Yoshida */ } #endif #endif ttopen(); #ifdef SIGWINCH /* by A.ITO 21 Jan. 1991 / by S.Yoshida */ refresh(FFRAND, 0); /* May be resized. */ #endif if(errp) ewprintf("Failed to create process"); #ifdef XKEYS /* 92.03.16 by Gen KUROKI */ ttykeypadstart(); #endif /* XKEYS */ return !( errp | status ); } #ifndef NO_SHELL /* 91.01.10 by K.Maeda */ #include <sys/types.h> #include <sys/stat.h> /* * Call process in subshell. * Execute COMMAND binding standard input to file INPUT. * NULL as INPUT means standard input should be bound to * /dev/null or whatever equivalent in your OS. * All output during the execution (including standard error output) * should go into a scratch file, whose name call_process() returns. * Return value NULL means error in some stage of the execution. * In that case, scratch file should be deleted. */ char * call_process(command, input) char *command; char *input; { char buf[256]; char *tmp; static char tmpbuf[20]; int ostdin, ostdout, ostderr, in, out, s; extern char *mktemp(); strcpy(tmpbuf, "/tmp/ngXXXXXX"); if ((tmp = mktemp(tmpbuf)) == NULL) return NULL; if ((in = open(input ? input : "/dev/null", 0)) < 0) return NULL; if ((out = creat(tmp, S_IREAD | S_IWRITE)) < 0) { close(in); return NULL; } ostdin = dup(0); ostdout = dup(1); ostderr = dup(2); if (ostdin < 0 || ostdout < 0 || ostderr < 0) { s = -1; goto skip; } #ifndef SVR2 /* 91.02.04 SVR3 or later. by Junn Ohta */ dup2(in, 0); dup2(out, 1); dup2(out, 2); #else /* SVR2 */ close(0); dup(in); close(1); dup(out); close(2); dup(out); #endif /* SVR2 */ strcpy(buf, command); #ifdef EXTD_DIR ensurecwd(); #endif s = system(buf); close(in); close(out); #ifndef SVR2 /* 91.02.04 SVR3 or later. by Junn Ohta */ dup2(ostdin, 0); dup2(ostdout, 1); dup2(ostderr, 2); #else /* SVR2 */ close(0); dup(ostdin); close(1); dup(ostdout); close(2); dup(ostderr); #endif /* SVR2 */ skip: close(ostdin); close(ostdout); close(ostderr); if (s == -1) { unlink(tmp); return NULL; } return tmp; }