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

📄 system.c

📁 早期freebsd实现
💻 C
字号:
/*- * Copyright (c) 1988, 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[] = "@(#)system.c	8.1 (Berkeley) 6/6/93";#endif /* not lint */#include <stdio.h>#include "../general/general.h"#include "../ctlr/api.h"#include "spint.h"#include "../general/globals.h"static Spint spinted;static char command[256];static int need_to_start = 0;/* * shell_continue() actually runs the command, and looks for API * requests coming back in. * * We are called from the main loop in telnet.c. */intshell_continue(){    /*     * spint_start() returns when either the command has finished, or when     * the required interrupt comes in.  In the latter case, the appropriate     * thing to do is to process the interrupt, and then return to     * the interrupt issuer by calling spint_continue().     */    if (need_to_start) {	need_to_start = 0;	spint_start(command, &spinted);    }    if (spinted.done == 0) {	/* Process request */	handle_api(&spinted.regs, &spinted.sregs);	spint_continue(&spinted);    } else {	char inputbuffer[100];	if (spinted.rc != 0) {	    fprintf(stderr, "Process generated a return code of 0x%x.\n",								spinted.rc);	}	printf("[Hit return to continue]");	fflush(stdout);	(void) gets(inputbuffer);	shell_active = 0;	setconnmode();	ConnectScreen();    }    return shell_active;}/* * Called from telnet.c to fork a lower command.com.  We * use the spint... routines so that we can pick up * interrupts generated by application programs. */intshell(argc,argv)int	argc;char	*argv[];{    ClearElement(spinted);    spinted.int_no = API_INTERRUPT_NUMBER;    if (argc == 1) {	command[0] = 0;    } else {	char *cmdptr;	int length;	argc--;	argv++;	strcpy(command, " /c");	cmdptr = command+strlen(command);	while (argc) {	    if ((cmdptr+strlen(*argv)) >= (command+sizeof command)) {		fprintf(stderr, "Argument list too long at argument *%s*.\n",			    *argv);		return 0;	    }	    *cmdptr++ = ' ';		/* Blank separators */	    strcpy(cmdptr, *argv);	    cmdptr += strlen(cmdptr);	    argc--;	    argv++;	}	length = strlen(command)-1;	if (length < 0) {	    length = 0;	}	command[0] = length;    }    need_to_start = 1;    shell_active = 1;    return 1;			/* Go back to main loop */}

⌨️ 快捷键说明

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