1 /* $OpenBSD: db_rint.c,v 1.1 2022/07/12 17:12:31 jca Exp $ */ 2 /* $NetBSD: db_machdep.c,v 1.17 1999/06/20 00:58:23 ragge Exp $ */ 3 4 /* 5 * Mach Operating System 6 * Copyright (c) 1991,1990 Carnegie Mellon University 7 * All Rights Reserved. 8 * 9 * Permission to use, copy, modify and distribute this software and its 10 * documentation is hereby granted, provided that both the copyright 11 * notice and this permission notice appear in all copies of the 12 * software, derivative works or modified versions, and any portions 13 * thereof, and that both notices appear in supporting documentation. 14 * 15 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 16 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 17 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 18 * 19 * Carnegie Mellon requests users of this software to return to 20 * 21 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 22 * School of Computer Science 23 * Carnegie Mellon University 24 * Pittsburgh PA 15213-3890 25 * 26 * any improvements or extensions that they make and grant Carnegie the 27 * rights to redistribute these changes. 28 */ 29 30 #include <sys/types.h> 31 #include <sys/systm.h> 32 33 #include <ddb/db_var.h> 34 35 /* 36 * db_rint: enters ddb(4) if the "ESC D" sequence is matched. 37 * Returns: 38 * - 0 if the character isn't part of the escape sequence 39 * - 1 if the character is part of the escape sequence and should be skipped 40 * - 2 if the character isn't the end of an escape sequence, and an ESC 41 * character should be inserted before it. 42 */ 43 int 44 db_rint(int c) 45 { 46 static int ddbescape = 0; 47 48 if (ddbescape && ((c & 0x7f) == 'D')) { 49 if (db_console) 50 db_enter(); 51 ddbescape = 0; 52 return 1; 53 } 54 55 if ((ddbescape == 0) && ((c & 0x7f) == 27)) { 56 ddbescape = 1; 57 return 1; 58 } 59 60 if (ddbescape) { 61 ddbescape = 0; 62 return 2; 63 } 64 65 ddbescape = 0; 66 return 0; 67 } 68