汇编源代码大全

源代码在线查看: test2e.c

软件大小: 14099 K
上传用户: struggle10000
关键词: 汇编 代码大全
下载地址: 免注册下载 普通下载 VIP

相关代码

				/* TEST2E.C -- version to build TSR2E */
				
				#include 
				#include 
				#include 
				
				#include "put.h"
				
				#define MK_FP(seg,ofs) \
				    ((void far *)(((unsigned long)(seg) 				
				extern unsigned foreground_psp;     // in TSREXAMP.C
				extern int Send2E(char *command);   // in SEND2E.C
				    
				static char buf[80];
				static int running = 0;
				
				typedef enum { SAVE=0, RESTORE } SAVEREST;
				typedef void (interrupt far *INTVECT)();
				
				void interrupts(int restore)
				{
				    static INTVECT int_1b, int_23, int_24;
				    if (restore)
				    {
				        _dos_setvect(0x1b, int_1b);
				        _dos_setvect(0x23, int_23);
				        _dos_setvect(0x24, int_24);
				    }
				    else
				    {
				        int_1b = _dos_getvect(0x1b);
				        int_23 = _dos_getvect(0x23);
				        int_24 = _dos_getvect(0x24);
				    }
				}
				
				void application(void)
				{
				    // don't run if we are already running
				    if (running)
				        return;
				    running++;
				
				    // don't execute INT 2Eh if COMMAND.COM already running
				    // see if COMMAND.COM running by checking if current PSP is the
				    // same as its own parent
				    // THIS TEST IS IMPORTANT!  POPPING UP THIS 2E SHELL WHILE
				    // COMMAND.COM IS ALREADY RUNNING CAUSES A CRASH AS SOON AS
				    // YOU EXIT!
				    if (foreground_psp == 
				        *((unsigned far *) MK_FP(foreground_psp, 0x16)))
				    {
				        put_str("COMMAND.COM already running");
				        running--;
				        return;
				    }
				    
				    put_str("TSR COMMAND SHELL: type DOS commands, or BYE to quit\r\n");
				    for (;;)
				    {
				        put_str("$ ");
				        if (! get_str(buf, 80))
				            break;
				        // added since printing of book: accept EXIT as well as BYE
				        if ((strcmp(buf, "bye") == 0 || strcmp(buf, "BYE") == 0) ||
				            (strcmp(buf, "exit") == 0 || strcmp(buf, "EXIT") == 0))
				            break;
				        interrupts(SAVE);
				        Send2E(buf);
				        interrupts(RESTORE);
				    }
				    putstr("Bye");
				    running--;
				}
							

相关资源