Mercurial > hg > xemacs-beta
annotate netinstall/autoload.c @ 1346:01c57eb70ae9
[xemacs-hg @ 2003-03-09 02:27:27 by ben]
To: xemacs-patches@xemacs.org
i.c: Sleep between calls to check for I/O, since these calls are non-blocking.
behavior.el: Allow other keywords for forward compatibility.
cl-macs.el: Rewrite to eliminate byte-compiler warning when `return' is used
without `finally'.
cmdloop.el: Avoid truncated error messages for `end-of-file' and the like.
cmdloop.el: Avoid char-int error after syncing.
files.el: Eliminate byte-compile warnings.
printer.el: Fix line-width calculations.
#### This used to work. Someone's changes (perhaps by
Michael Sperber?) seem to have messed something up.
simple.el: Use new clear-left-side functions to avoid messages ending up on
the same line as other output.
xemacs.mak: Add override for info/ as well when separate source/build dirs.
xemacs.mak: Order sections in main build process and add comments. Add
additional dependencies to try and prevent later steps from
happening when failures in earlier steps have occurred.
Makefile.in.in: Order sections in main build process and add comments. Add
additional dependencies to try and prevent later steps from
happening when failures in earlier steps have occurred.
alloc.c: Don't arbitrarily clear Vconfigure_info_directory since it
messes up separate build/source dirs.
console.c, console.h, device-msw.c, device.c: Add accidentally omitted msprinter console and data descriptions.
print.c, console-msw.c: Add clear-left-side functionality to help keep stdio/stderr
output from separate sources on separate lines. Generalize
the different kinds of debugging output. Add dpa().
profile.c: Add better docs on Unix/Windows differences.
regex.c: Fix problems with rel-alloc compilation caused by previous patch.
emacs.c: Seg fault rather than abort on Cygwin, since gdb doesn't trap
aborts properly.
console-gtk-impl.h, console-gtk.h, console-msw.h, console-x-impl.h, console-x.h, dialog-gtk.c, dialog-x.c, event-msw.c, frame-gtk.c, frame-x.c, frameslots.h, glyphs-gtk.c, glyphs-x.c, gui-gtk.c, gui-x.c, inline.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, scrollbar-gtk.c, scrollbar-x.c, ui-gtk.c: Delete popup-data object. Delete menubar_data field from frames,
since its usage is frame-specific. Delete menubar-msw.h,
gui-x.h, gui-gtk.h. Clean up handling of lwlib callback data
GCPRO'ing and add missing GCPRO recomputation in widget code.
author | ben |
---|---|
date | Sun, 09 Mar 2003 02:27:46 +0000 |
parents | 3078fd1074e8 |
children |
rev | line source |
---|---|
448 | 1 /* |
2 * Copyright (c) 2000, Red Hat, Inc. | |
3 * | |
4 * This program is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * A copy of the GNU General Public License can be found at | |
10 * http://www.gnu.org/ | |
11 * | |
12 * Written by DJ Delorie <dj@cygnus.com> | |
13 * | |
14 */ | |
15 | |
16 #include "win32.h" | |
17 | |
18 typedef struct { | |
19 char *name; | |
20 HINSTANCE handle; | |
21 } DllInfo; | |
22 | |
23 #define DLL(n) static DllInfo n ## _info __asm__ (#n "_info") = { #n, 0} | |
24 | |
25 #define Auto(dll, func, size) \ | |
26 __asm__ ("\t.data"); \ | |
27 __asm__ ("\t.global\t_" #func "@" #size); \ | |
28 __asm__ ("_" #func "@" #size ":"); \ | |
29 __asm__ ("\tcall\tautoload_common"); \ | |
30 __asm__ ("\t.long\t" #dll "_info"); \ | |
31 __asm__ ("\t.ascii\t\"" #func "\\0\"") | |
32 | |
33 DLL (wininet); | |
34 | |
35 Auto (wininet, InternetAttemptConnect, 4); | |
36 Auto (wininet, InternetCloseHandle, 4); | |
37 Auto (wininet, InternetGetLastResponseInfoA, 12); | |
38 Auto (wininet, InternetOpenA, 20); | |
39 Auto (wininet, InternetOpenUrlA, 24); | |
40 Auto (wininet, InternetReadFile, 16); | |
41 Auto (wininet, InternetSetOptionA, 16); | |
42 Auto (wininet, InternetQueryOptionA, 16); | |
43 Auto (wininet, HttpQueryInfoA, 20); | |
44 Auto (wininet, HttpSendRequestA, 20); | |
45 | |
46 typedef struct { | |
47 DllInfo *dll; | |
48 char name[100]; | |
49 } AutoEntry; | |
50 | |
51 static void autoload_common () __asm__ ("autoload_common"); | |
52 | |
53 static void | |
54 autoload_common (int x) | |
55 { | |
56 int fp, rel; | |
57 unsigned char *proc; | |
58 HINSTANCE h; | |
59 AutoEntry *a; | |
60 | |
61 a = *(AutoEntry **)(&x - 1); | |
62 if (a->dll->handle == 0) | |
63 { | |
64 h = LoadLibrary (a->dll->name); | |
65 a->dll->handle = h; | |
66 } | |
67 fp = (int) GetProcAddress (a->dll->handle, a->name); | |
68 proc = ((unsigned char *)a) - 5; | |
69 rel = fp - (int)(a); /* now it's a relative call */ | |
70 *proc++ = 0xe9; /* jump near 32-bit relative */ | |
71 *proc++ = rel; | |
72 *proc++ = rel>>8; | |
73 *proc++ = rel>>16; | |
74 *proc++ = rel>>24; | |
75 | |
76 *(int *)(&x-1) = (int)proc-5; | |
77 } |