1 /* @(#)cmd6.c 8.1 (Berkeley) 6/6/93 */ 2 /* $NetBSD: cmd6.c,v 1.8 2009/04/14 08:50:06 lukem Exp $ */ 3 4 /* 5 * Copyright (c) 1983, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * This code is derived from software contributed to Berkeley by 9 * Edward Wang at The University of California, Berkeley. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. Neither the name of the University nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36 #include "defs.h" 37 #include "window_string.h" 38 #include "char.h" 39 40 /* 41 * Debugging commands. 42 */ 43 44 void debug_str(void); 45 46 void 47 c_debug(void) 48 { 49 struct ww *w; 50 51 if (!terse) 52 wwputs("[m(smap) n(ns) o(os) s(string) v(nvis) w(win)]? ", 53 cmdwin); 54 wwcurtowin(cmdwin); 55 while (wwpeekc() < 0) 56 wwiomux(); 57 if (!terse) 58 wwputc('\n', cmdwin); 59 switch (wwgetc()) { 60 case 'm': 61 wwdumpsmap(); 62 break; 63 case 'n': 64 wwdumpns(); 65 break; 66 case 'o': 67 wwdumpos(); 68 break; 69 case 's': 70 debug_str(); 71 break; 72 case 'v': 73 if ((w = getwin()) != NULL) 74 wwdumpnvis(w); 75 break; 76 case 'w': 77 if ((w = getwin()) != NULL) 78 wwdumpwin(w); 79 break; 80 default: 81 wwbell(); 82 } 83 } 84 85 void 86 debug_str(void) 87 { 88 #ifdef STR_DEBUG 89 struct ww *w; 90 struct string *s; 91 92 if ((w = openiwin(wwnrow - 3, "Allocated Strings")) == NULL) { 93 error("Can't open string window: %s.", wwerror()); 94 return; 95 } 96 for (s = str_head.s_forw; s != &str_head; s = s->s_forw) { 97 if (more(w, 0) == 2) 98 goto out; 99 wwprintf(w, "(%p)\t\"%s\"\n", s->s_data, s->s_data); 100 } 101 waitnl(w); 102 out: 103 closeiwin(w); 104 #else 105 error("No string debugging."); 106 #endif 107 } 108