📄 termtool.c
字号:
#include <stdio.h>#include <stdlib.h>#include <curses.h>#include <panel.h>#include <termio.h>#include <fcntl.h>#include <sys/file.h>#include <sys/ipc.h>#include <sys/shm.h>#include <signal.h>#include "srcc.h"WINDOW *nowwin,*filewin;char tmpname[20];struct termio newdes,olddes;int my_debug;FILE *fp;TermEnable(){ char ttyname[15]; char tmpname[15]; int i,j; DrawInput("input tty",ttyname,7); memset(tmpname,0,sizeof(tmpname)); sprintf(tmpname,"/dev/%s\0",ttyname); strcpy(ttyname,tmpname); AddTerm(ttyname,'X',' '); }TermDisable(){ char ttyname[15]; char tmpname[15]; int i,j; DrawInput("input tty",ttyname,7); memset(tmpname,0,sizeof(tmpname)); sprintf(tmpname,"/dev/%s\0",ttyname); strcpy(ttyname,tmpname); sprintf(shm,"%s\0",ttyname); sleep(1); sprintf(shm,"/dev/ttyxxx\0"); return; } DrawInput(Help,Input,length) char *Help,*Input; int length; { WINDOW *termw,*inputw; PANEL *pPanel1,*pPanel2; char chartmp; char tmpname[255]; int wsize; int keyid; wsize=strlen(Help); if ( wsize < length ) wsize=length; termw=newwin(5,wsize+6,8,(85-wsize-8)/2); pPanel1=new_panel(termw); if ( pPanel1 == NULL ) { delwin(termw); doupdate(); return ERROR; } nowwin=termw; boo(termw); mvwaddstr(termw,0,((*termw)._maxx-strlen(Help))/2,Help); wrefresh(termw); inputw=newwin(2,length+1,9,(80-length)/2); pPanel2=new_panel(inputw); if ( pPanel2 == NULL ) { del_panel(pPanel1); delwin(termw); update_panels(); delwin(inputw); doupdate(); return ERROR; } wmove(inputw,1,1); wattron(inputw,A_REVERSE); PutSpace(inputw,length); wmove(inputw,1,1); wrefresh(inputw); memset(tmpname,0x0,sizeof(tmpname)); while ((chartmp=mgetch(&keyid))!=13 ) { if (chartmp==BACKSPACE) { tmpname[strlen(tmpname)-1]='\0'; PutSpace(inputw,sizeof(tmpname)); } else sprintf(tmpname,"%s%c\0",tmpname,chartmp); if (strlen(tmpname) == length) break; mvwaddstr(inputw,1,1,tmpname); wrefresh(inputw); } wrefresh(inputw); sprintf(Input,"%s\0",tmpname); delwin(inputw); del_panel(pPanel1); update_panels(); doupdate(); wrefresh(inputw); delwin(termw); del_panel(pPanel2); wrefresh(termw); update_panels(); doupdate();} PutSpace(win,number)WINDOW *win;int number;{ int i; for (i=0;i<=number;i++) waddch(win,' ');}AddTerm(ttyname,speed,prgcode)char *ttyname;char speed;char prgcode;{ int termid; int pid1,pid2; long pgrp; int tin,tout,terr; speed=toupper(speed); sprintf(shm,"/dev/ttyxxx\0"); memset(tmpname,0,sizeof(tmpname)); strcpy(tmpname,ttyname,strlen(ttyname)); if ((pid1=fork(1))<0) { printf("ERROR to start a child process\n"); return(0); } if (pid1==0) { int ppid; int stat; int ret; pgrp=getpid(); setpgrp(pgrp); alarm(SLEEP); signal(SIGALRM,KillTty); termid=open(ttyname,O_RDWR); if (termid<0) { struct msg_stru msg; memset(msg,0,sizeof(msg)); basename(ttyname,msg.msg); msg.fun=0; msgsnd(msgid,&msg,sizeof(msg),0); exit(127); } dup2(termid,0); dup2(termid,1); dup2(termid,2); ioctl(termid,TCGETA,&olddes); ioctl(termid,TCGETA,&newdes); newdes.c_cflag|=(CS8|CREAD|HUPCL|IXON|IXOFF); switch (speed) { case 'O' : newdes.c_cflag|=B38400; break; case 'M' : newdes.c_cflag|=B9600; break; default : newdes.c_cflag|=B9600; break; } newdes.c_lflag=XCLUDE; ioctl(termid,TCSETA,&newdes); if ((ppid=fork()) < 0 ) { perror("error for child process\n"); exit(0); } if ( my_debug ) { fprintf(fp,"begin Main\n"); fflush(fp); } if (ppid==0) { int pid3; int stat; while ( 1 ) { if ( (pid3=fork()) == 0 ) { signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); switch(prgcode) { case 'o': execlp("/bin/su","su","-","las","-c","lxbs osys1",NULL); break; default : execlp("/bin/su","su","-","las","-c","lxbs cccbmain",NULL); break; } } while( wait(&stat) != pid3 ) ; } exit(0); } while( wait(&stat) != ppid ) ; } return(1); }CancelTerm(ttyname)char *ttyname;{int termid; int pgrp; int chpid; if ((termid=open(ttyname,O_RDWR)) < 0) { return(-1); } pgrp=0; pgrp=getpgrp(); close(termid); return(0);}CheckTty(){ return(0);} KillTty(){ FILE *zy; alarm(SLEEP); signal(SIGALRM,KillTty); if ( !strcmp(shm,tmpname) ) { sprintf(shm,"/dev/ttyxxx\0"); kill(0,9); exit(0); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -