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

📄 break.c

📁 GNU FreeDOS兼容MS DOS很好的东东.
💻 C
字号:
/****************************************************************//*                                                              *//*                            break.c                           *//*                            FreeDOS                           *//*                                                              *//*   Control Break detection and handling                       *//*                                                              *//*                   Copyright (c) 1999                         *//*                         Steffen Kaiser                       *//*                      All Rights Reserved                     *//*                                                              *//* This file is part of DOS-C.                                  *//*                                                              *//* DOS-C is free software; you can redistribute it and/or       *//* modify it under the terms of the GNU General Public License  *//* as published by the Free Software Foundation; either version *//* 2, or (at your option) any later version.                    *//*                                                              *//* DOS-C is distributed in the hope that it will be useful, but *//* WITHOUT ANY WARRANTY; without even the implied warranty of   *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    *//* the GNU General Public License for more details.             *//*                                                              *//* You should have received a copy of the GNU General Public    *//* License along with DOS-C; see the file COPYING.  If not,     *//* write to the Free Software Foundation, 675 Mass Ave,         *//* Cambridge, MA 02139, USA.                                    *//****************************************************************/#include "portab.h"#include "globals.h"#include "proto.h"#ifdef VERSION_STRINGSstatic BYTE *RcsId =    "$Id: break.c,v 1.17 2004/04/14 15:40:50 bartoldeman Exp $";#endif#define CB_FLG *(UBYTE FAR*)MK_FP(0x0, 0x471)#define CB_MSK 0x80/* Check for ^Break/^C. * Three sources are available: *       1) flag at 40:71 bit 7 *       2) syscon stream (usually CON:) *       3) i/o stream (if unequal to syscon, e.g. AUX) */unsigned char ctrl_break_pressed(void){  return CB_FLG & CB_MSK;}unsigned char check_handle_break(struct dhdr FAR **pdev){  unsigned char c = CTL_C;  if (!ctrl_break_pressed())    c = (unsigned char)ndread(&syscon);  if (c != CTL_C && *pdev != syscon)    c = (unsigned char)ndread(pdev);  if (c == CTL_C)    handle_break(pdev, -1);  return c;}/* * Handles a ^Break state * * Actions: *       1) clear the ^Break flag *       2) clear the STDIN stream *       3) echo ^C to sft_out or pdev if sft_out==-1 *       4) decrease the InDOS flag as the kernel drops back to user space *       5) invoke INT-23 and never come back */void handle_break(struct dhdr FAR **pdev, int sft_out){  char *buf = "^C\r\n";  CB_FLG &= ~CB_MSK;            /* reset the ^Break flag */  con_flush(pdev);  if (sft_out == -1)    cooked_write(pdev, 4, buf);  else    DosRWSft(sft_out, 4, buf, XFR_FORCE_WRITE);  if (!ErrorMode)               /* within int21_handler, InDOS is not incremented */    if (InDOS)      --InDOS;                  /* fail-safe */  spawn_int23();                /* invoke user INT-23 and never come back */}

⌨️ 快捷键说明

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