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
db_rint(int c)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