⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shell.c

📁 这是一个使用了 cursor 编程技术实现的车站自动售票系统的源代码
💻 C
字号:
#include<stdio.h>#include<stdlib.h>#include<curses.h>#include<fcntl.h>#include<string.h>#include<signal.h>#define	ONECOL	25#define	MAXITEM	20struct	operation{	char	title[80];	char	command[80];};char	*RP,*user,*devname,*TTY;char	p[20];main(int argc,char *argv[]){	struct	operation	op[MAXITEM];	int	choice;	user=getenv("IF");	sprintf(p,"/cx/etc/income.ini");	TTY=getenv("TTYNAME");	devname=(char *)ttyname(0);	if(!strcmp(user,p))	{		if(strcmp(devname,TTY))		{			printf("你不是合法用户!\n");			printf("你不是合法用户!\n");			printf("你不是合法用户!\n");			exit(1);		}	}		RP=getenv("ROOTPATH");	if(RP==NULL)	{		printf("\n\r环境变量'ROOTPATH'未初始化!\0x7\0x7\n\r");		return	-1;	}	signal(SIGINT,SIG_IGN);	initscr();	raw();	nonl();	noecho();	refresh();	while((choice=menu(op))!=-1)		execute(op,choice);	erase();	refresh();	endwin();}int	menu(struct operation op[]){	FILE	*fp;	char	fn[80],s[80],head[80],command[80];	int	nop,i;	char	ch;	int	firstl;	char	prompt[]="请选择('Q'退出): ";	char	*IF;	IF=getenv("IF");	if(IF==NULL)	{		printf("\n\r环境变量'IF'未初始化!\n\r");		return	-1;	}	strcpy(fn,IF);	fp=fopen(fn,"r");	if(fp==NULL)	{		sprintf(s,"文件 %s 打开失败!",fn);		showmsg(s);		getch();		refresh();		return	-1;	}	fgets(head,80,fp);	for(nop=0;nop<MAXITEM;nop++)		if(fscanf(fp,"%s%s",op[nop].title,op[nop].command)==EOF)			break;		else			if(op[nop].command[0]!='/')			{				sprintf(command,"%s/%s",RP,op[nop].command);				strcpy(op[nop].command,command);			}	fclose(fp);	firstl=(23-nop)/2;	showhead(firstl,head);	for(i=0;i<nop;i++)	{		if(i>=9)			ch='a'+i-9;		else			ch='1'+i;		sprintf(s,"%c. %s",ch,op[i].title);		mvaddstr(firstl+i,ONECOL,s);	}	mvaddstr(nop+firstl,ONECOL-5,"--------------------------");	mvaddstr(nop+firstl+1,ONECOL,prompt);	refresh();	while(1)	{		move(nop+firstl+1,ONECOL+strlen(prompt));		clrtoeol();		refresh();		ch=getch();		refresh();		if(ch=='q'||ch=='Q')			return	-1;		if(ch>='1'&&ch<='9'&&(ch-'1')<nop)			return	ch-'1';		if(ch>='a'&&ch<='z'&&(ch-'a'+9)<nop)			return	ch-'a'+9;		if(ch>='A'&&ch<='Z'&&(ch-'A'+9)<nop)			return	ch-'A'+9;		printf("\07\07");	}}showhead(int firstl,char *s){	mvaddstr(firstl-2,ONECOL+3,s);	mvaddstr(firstl-1,ONECOL-5,"--------------------------");	refresh();}int	execute(struct operation *op,int choice){	int	status;	erase();	refresh();	endwin();	if(fork()==0)		execl(op[choice].command,op[choice].command,NULL);	wait(&status);	initscr();	raw();	nonl();	noecho();	refresh();}showmsg(char s[]){	move(23,0);	clrtoeol();	mvaddstr(23,40-strlen(s)/2,s);	refresh();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -