Mercurial > emacs
view lib-src/hexl.c @ 2439:b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
This isn't specific to X, and it allows us to avoid #including
xterm.h in files that don't really have anything to do with X.
* blockinput.h: New file.
* xterm.h (BLOCK_INPUT, UNBLOCK_INPUT, TOTALLY_UNBLOCK_INPUT,
UNBLOCK_INPUT_RESIGNAL): These are now in blockinput.h.
(x_input_blocked, x_pending_input): Deleted; there are analogs
in blockinput.h called interrupt_input_blocked and
interrupt_input_pending.
* keyboard.c (interrupt_input_blocked, interrupt_input_pending):
New variables, used by the macros in blockinput.h.
* xterm.c: #include blockinput.h.
(x_input_blocked, x_pending_input): Deleted.
(XTread_socket): Test and set interrupt_input_blocked and
interrupt_input_pending instead of the old variables.
* alloc.c, xfaces.c, xfns.c, xmenu.c, xselect.c, keymap.c:
#include blockinput.h.
* eval.c: #include blockinput.h instead of xterm.h.
* keyboard.c: #include blockinput.h.
(input_poll_signal): Just test
interrupt_input_blocked, instead of testing HAVE_X_WINDOWS and
x_input_blocked.
Block the processing of interrupt input while we're manipulating the
malloc heap.
* alloc.c: (xfree): New function, to make it easy to free things
safely.
(xmalloc, xrealloc): Block X input while doing the deed.
(VALIDATE_LISP_STORAGE, gc_sweep, compact_strings): Use xfree
instead of free.
(uninterrupt_malloc): New function, to install input-blocking
hooks into the GNU malloc routines.
* emacs.c [not SYSTEM_MALLOC] (main): Call uninterrupt_malloc
on startup.
* alloc.c: (make_interval, make_float, Fcons, Fmake_vector,
Fmake_symbol, Fmake_marker, make_uninit_string, Fgarbage_collect):
Use xmalloc instead of malloc; don't bother to check if out of
memory here.
(Fgarbage_collect): Call xrealloc instead of realloc.
* buffer.c: Use xmalloc and xfree instead of malloc and free;
don't bother to check if out of memory here.
(Fget_buffer_create): Put BLOCK_INPUT/UNBLOCK_INPUT pair around
calls to ralloc routines.
* insdel.c: Same.
* lisp.h (xfree): New extern declaration.
* xfaces.c (xfree): Don't #define this to be free; use the
definition in alloc.c.
* dispnew.c, doc.c, doprnt.c, fileio.c, lread.c, term.c, xfns.c,
xmenu.c, xterm.c: Use xfree instead of free.
* hftctl.c: Use xfree and xmalloc instead of free and malloc.
* keymap.c (current_minor_maps): BLOCK_INPUT while calling realloc
and malloc.
* search.c: Since the regexp routines can malloc, BLOCK_INPUT
while runing them. #include blockinput.h.
* sysdep.c: #include blockinput.h. Call xfree and xmalloc instead
of free and malloc. BLOCK_INPUT around routines which we know
will call malloc.
ymakefile (keyboard.o, keymap.o, search.o, sysdep.o, xfaces.o,
xfns.o, xmenu.o, xterm.o, xselect.o, alloc.o, eval.o): Note that
these depend on blockinput.h.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Wed, 31 Mar 1993 10:55:33 +0000 |
parents | 7c9f757a985a |
children | 44e193cc8f49 |
line wrap: on
line source
#include <stdio.h> #include <ctype.h> #define DEFAULT_GROUPING 0x01 #define DEFAULT_BASE 16 #undef TRUE #undef FALSE #define TRUE (1) #define FALSE (0) extern void exit(), perror(); int base = DEFAULT_BASE, un_flag = FALSE, iso_flag = FALSE, endian = 1; int group_by = DEFAULT_GROUPING; char *progname; main(argc, argv) int argc; char *argv[]; { register long address; char string[18]; FILE *fp; progname = *argv++; --argc; /* ** -hex hex dump ** -oct Octal dump ** -group-by-8-bits ** -group-by-16-bits ** -group-by-32-bits ** -group-by-64-bits ** -iso iso character set. ** -big-endian Big Endian ** -little-endian Little Endian ** -un || -de from hexl format to binary. ** -- End switch list. ** <filename> dump filename ** - (as filename == stdin) */ while (*argv && *argv[0] == '-' && (*argv)[1]) { /* A switch! */ if (!strcmp(*argv, "--")) { --argc; argv++; break; } else if (!strcmp(*argv, "-un") || !strcmp(*argv, "-de")) { un_flag = TRUE; --argc; argv++; } else if (!strcmp(*argv, "-hex")) { base = 16; --argc; argv++; } else if (!strcmp(*argv, "-iso")) { iso_flag = TRUE; --argc; argv++; } else if (!strcmp(*argv, "-oct")) { base = 8; --argc; argv++; } else if (!strcmp(*argv, "-big-endian")) { endian = 1; --argc; argv++; } else if (!strcmp(*argv, "-little-endian")) { endian = 0; --argc; argv++; } else if (!strcmp(*argv, "-group-by-8-bits")) { group_by = 0x00; --argc; argv++; } else if (!strcmp(*argv, "-group-by-16-bits")) { group_by = 0x01; --argc; argv++; } else if (!strcmp(*argv, "-group-by-32-bits")) { group_by = 0x03; --argc; argv++; } else if (!strcmp(*argv, "-group-by-64-bits")) { group_by = 0x07; endian = 0; --argc; argv++; } else { (void) fprintf(stderr, "%s: invalid switch: \"%s\".\n", progname, *argv); usage(); } } do { if (*argv == NULL) fp = stdin; else { char *filename = *argv++; if (!strcmp(filename, "-")) fp = stdin; else if ((fp = fopen(filename, "r")) == NULL) { perror(filename); continue; } } if (un_flag) { char buf[18]; for (;;) { register int i, c, d; #define hexchar(x) (isdigit(x) ? x - '0' : x - 'a' + 10) (void) fread(buf, 1, 10, fp); /* skip 10 bytes */ for (i=0; i < 16; ++i) { if ((c = getc(fp)) == ' ' || c == EOF) break; d = getc(fp); c = hexchar(c) * 0x10 + hexchar(d); (void) putchar(c); if ((i&group_by) == group_by) (void) getc(fp); } if (c == ' ') { while ((c = getc(fp)) != '\n' && c != EOF) ; if (c == EOF) break; } else { if (i < 16) break; (void) fread(buf, 1, 18, fp); /* skip 18 bytes */ } } } else { address = 0; string[0] = ' '; string[17] = '\0'; for (;;) { register int i, c; for (i=0; i < 16; ++i) { if ((c = getc(fp)) == EOF) { if (!i) break; (void) fputs(" ", stdout); string[i+1] = '\0'; } else { if (!i) (void) printf("%08x: ", address); if (iso_flag) string[i+1] = (c < 0x20 || (c >= 0x7F && c < 0xa0)) ? '.' :c; else string[i+1] = (c < 0x20 || c >= 0x7F) ? '.' : c; (void) printf("%02x", c); } if ((i&group_by) == group_by) (void) putchar(' '); } if (i) (void) puts(string); if (c == EOF) break; address += 0x10; } } if (fp != stdin) (void) close(fp); } while (*argv != NULL); return 0; } usage() { (void) fprintf(stderr, "usage: %s [-de] [-iso]\n", progname); exit(1); }