Mercurial > hg > xemacs-beta
view lib-src/insert-data-in-exec.c @ 4627:fdc76fec36d3
Vastly expand the characters x-compose.el supports.
2009-03-01 Aidan Kehoe <kehoea@parhasard.net>
* x-compose.el:
Document an XIM bug, and how one might work around it.
(define-compose-map):
Revise this macro, call it with compose-caron-map,
compose-macron-map, compose-breve-map, compose-dot-map,
compose-doubleacute-map, compose-ogonek-map, compose-hook-map,
compose-horn-map as well as the previous existing maps.
(compose-map):
Add entries for caron, macron, doubleacute, ogonek, breve and
abovedot to this map.
Add an assert, this code assumes that a non-Mule build has no
character codes above U+00FF.
Incorporate all the precomposed Latin characters in
UnicodeData.txt that we can into the maps, deciding at runtime on
which exactly depending on whether this is a non-Mule or a Mule
build.
Remove a commented-out old X11 bug workaround.
Use #'flet instead of defun + unintern for
#'alias-colon-to-doublequote.
Correct #'electric-diacritic to work with the keyboard macro
versions of the maps.
(compose-help):
This has been turned off since 1994; no-one appears to have
noticed, since the normal help mechanism offers similar
functionality and is actually maintained. Removed entirely.
Remove a superflous setting of a default value for ctl-arrow.
* x-init.el (x-initialize-compose):
Support the new dead key maps we just added to x-compose.el with
autoloads here.
| author | Aidan Kehoe <kehoea@parhasard.net> |
|---|---|
| date | Sun, 01 Mar 2009 11:11:46 +0000 |
| parents | 261c5cd19207 |
| children | dfc9fe46c294 |
line wrap: on
line source
/* Copies the dump file inside the xemacs executable */ #include <stdio.h> #include <stdlib.h> #include <string.h> static const unsigned char key[] = { 255, 6, 1, 2, 3, 4, 255, 3, 9, 62, 255, 10, 4, 61, 255 }; int main(int argc, char **argv) { FILE *te, *xe, *dump; unsigned char *xed, *p; long size, size_dump, size1, i; long max_size, offset; char msg[65536]; if(argc != 6 && (argc != 3 || strcmp(argv[1], "-s"))) { fprintf(stderr, "Usage:\n%s temacs xemacs.dmp xemacs size offset\n%s -s xemacs.dmp\n", argv[0], argv[0]); exit(1); } if(argc == 3) { sprintf(msg, "Opening %s failed", argv[2]); dump = fopen(argv[2], "rb+"); if(!dump) { perror(msg); exit(1); } if(fseek(dump, 0, SEEK_END)) { perror("fseek end dump"); exit(1); } size = ftell(dump); if(size == -1) { perror("ftell dump"); exit(1); } printf("%ld\n", size); exit(0); } max_size = strtol(argv[4], 0, 10); offset = strtol(argv[5], 0, 10); sprintf(msg, "Opening %s failed", argv[1]); te = fopen(argv[1], "rb"); if(!te) { perror(msg); exit(1); } if(fseek(te, 0, SEEK_END)) { perror("fseek end"); exit(1); } size = ftell(te); if(size == -1) { perror("ftell"); exit(1); } if(fseek(te, 0, SEEK_SET)) { perror("fseek beginning"); exit(1); } xed = malloc(size); if(!xed) { perror("malloc"); exit(1); } size1 = fread(xed, 1, size, te); if(size1 != size) { if(ferror(te)) { perror("fread temacs"); exit(1); } fprintf(stderr, "Fread returned %ld, expected %ld ?\n", size1, size); exit(1); } if(fclose(te)) { perror("fclose temacs"); exit(1); } p = xed; for(i=0; i<size-(long)sizeof(key); i++) { if(!memcmp(p, key, sizeof(key))) goto found; p++; } fprintf(stderr, "dumped_data key not found in executable.\n"); exit(1); found: fprintf(stderr, "dumped_data found at offset 0x%lx, patching.\n", i); sprintf(msg, "Opening %s failed", argv[2]); dump = fopen(argv[2], "rb"); if(!dump) { perror(msg); exit(1); } if(fseek(dump, 0, SEEK_END)) { perror("fseek end dump"); exit(1); } size_dump = ftell(dump); if(size_dump == -1) { perror("ftell dump"); exit(1); } if(size_dump > max_size) { fprintf(stderr, "Dump file too big for available space (max=%ld, dump=%ld)\n", max_size, size_dump); exit(2); } if(fseek(dump, 0, SEEK_SET)) { perror("fseek beginning dump"); exit(1); } size1 = fread(xed+i+offset, 1, size_dump, dump); if(size1 != size_dump) { if(ferror(dump)) { perror("fread dump"); exit(1); } fprintf(stderr, "Fread dump returned %ld, expected %ld ?\n", size1, size_dump); exit(1); } if(fclose(dump)) { perror("fclose dump"); exit(1); } memset(xed+i, 0, offset); xed[i ] = size_dump; xed[i+1] = size_dump >> 8; xed[i+2] = size_dump >> 16; xed[i+3] = size_dump >> 24; fprintf(stderr, "dumped_data found at offset 0x%lx, patching.\n", i); sprintf(msg, "Opening %s failed", argv[3]); xe = fopen(argv[3], "wb"); if(!xe) { perror(msg); exit(1); } size1 = fwrite(xed, 1, size, xe); if(size1 != size) { if(ferror(xe)) { perror("fwrite xemacs"); exit(1); } fprintf(stderr, "Fwrite xemacs returned %ld, expected %ld ?\n", size1, size); exit(1); } if(fclose(xe)) { perror("fclose xemacs"); exit(1); } exit(0); }
