Release 0.0.3

WHAT'S NEW with version 0.0.3:
    - Fixed bug with sector sizes.
    - Registers at program startup are now set correctly.
    - Segment fixups for relocatable-segment internal entry points.
    - Fixed bug in DOS PSP structure.
    - Some resource loading is done.
    - Added "return" ordinal type to build program.
    - Added comment capability to build program.
diff --git a/Makefile b/Makefile
index 54dff6d..aeaa47a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-CFLAGS=-g
+CFLAGS=-g -DDEBUG_RESOURCE
 
 ######################################################################
 # FILES:
@@ -11,12 +11,15 @@
 DLL_LENGTH=256
 
 BUILDOBJS=dll_kernel.o dll_user.o dll_gdi.o dll_unixlib.o \
-	  dll_kernel_tab.o dll_user_tab.o dll_gdi_tab.o dll_unixlib_tab.o
+	  dll_win87em.o dll_shell.o \
+	  dll_kernel_tab.o dll_user_tab.o dll_gdi_tab.o dll_unixlib_tab.o \
+	  dll_win87em_tab.o dll_shell_tab.o
 
 MUST_BE_LINKED_FIRST=if1632.o $(BUILDOBJS)
 
 OBJS=$(MUST_BE_LINKED_FIRST) \
-	dump.o heap.o ldt.o kernel.o relay.o selector.o user.o wine.o
+	dump.o heap.o ldt.o kernel.o relay.o resource.o \
+	selector.o user.o wine.o
 
 TARGET=wine
 LIBS=-lldt
@@ -47,3 +50,9 @@
 
 dll_unixlib.S dll_unixlib_tab.c: build unixlib.spec
 	build unixlib.spec
+
+dll_win87em.S dll_win87em_tab.c: build win87em.spec
+	build win87em.spec
+
+dll_shell.S dll_shell_tab.c: build shell.spec
+	build shell.spec
diff --git a/README b/README
index 09eb3de..3bcf6c8 100644
--- a/README
+++ b/README
@@ -2,9 +2,19 @@
 warranty.  It is my intent to cover this code with the Gnu Public
 License.
 
-So here goes release 0.0.2 of the Windows loader.  It will do some 
-relocations and then run the program.  The program test.exe is a 
-Windows executable.  Try the command "wine test.exe".
+So here goes release 0.0.3 of the Windows loader.  It will do some 
+relocations and then run the program.  I have successfully loaded 
+the Windows solitaire game.  Try it.  It currently stops a call to
+GetObject().
+
+WHAT'S NEW with version 0.0.3:
+    - Fixed bug with sector sizes.
+    - Registers at program startup are now set correctly.
+    - Segment fixups for relocatable-segment internal entry points.
+    - Fixed bug in DOS PSP structure.
+    - Some resource loading is done.
+    - Added "return" ordinal type to build program.
+    - Added comment capability to build program.
 
 WHAT'S NEW with version 0.0.2:
 
@@ -34,10 +44,12 @@
     - Make changes to the kernel to allow more than 32 LDT entries.
     - Trap and handle DOS and DPMI calls.
     - Windows emulation library (connect to Peter MacDonald's library).
-    - Set registers correctly when starting Windows program.
     - Allowing loading of 16-bit DLLs for use with program.
-    - global memory allocation
-    - complete and improve local heap allocation
+    - global memory allocation.
+    - complete and improve local heap allocation.
+    - Handle self-loading applications.
+    - Deal with callback functions.
+    - Resource loading
 
 INSTALLATION:
 
diff --git a/build b/build
deleted file mode 100755
index d47f542..0000000
--- a/build
+++ /dev/null
Binary files differ
diff --git a/build-spec.txt b/build-spec.txt
index 61937bf..25dfed6 100644
--- a/build-spec.txt
+++ b/build-spec.txt
@@ -8,12 +8,18 @@
 		 HANDLERNAME([ARGNUM [ARGNUM [...]]])
 
 ORDINAL equate EXPORTNAME DATA
+
+ORDINAL return EXPORTNAME ARGLENGTH RETVALUE
+
+# COMMENT_TEXT
+
 --------------------
 General:
 
     "name", "id" and "length" fields are mandatory.  Specific ordinal 
 declarations are optional, but the default handler will print an
-error message.
+error message.  Lines whose first character is a '#' will be ignored
+as comments.
 
 Variable ordinals:
 
diff --git a/build.c b/build.c
index f7dd03d..8905cc9 100644
--- a/build.c
+++ b/build.c
@@ -1,6 +1,6 @@
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
+static char RCSId[] = "$Id: build.c,v 1.2 1993/06/30 14:24:33 root Exp root $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -17,6 +17,7 @@
 #define FUNCTYPE_REG	19
 
 #define EQUATETYPE_ABS	18
+#define TYPE_RETURN	20
 
 #define MAX_ORDINALS	1024
 
@@ -45,6 +46,12 @@
     int arg_indices_32[16];
 } ORDFUNCDEF;
 
+typedef struct ordinal_return_definition_s
+{
+    int arg_size;
+    int ret_value;
+} ORDRETDEF;
+
 ORDDEF OrdinalDefinitions[MAX_ORDINALS];
 
 char LowerDLLName[80];
@@ -146,16 +153,26 @@
 	ParseBuffer = malloc(512);
 	ParseNext = ParseBuffer;
 	Line++;
-	if (fgets(ParseBuffer, 511, SpecFp) == NULL)
-	    return NULL;
+	while (1)
+	{
+	    if (fgets(ParseBuffer, 511, SpecFp) == NULL)
+		return NULL;
+	    if (ParseBuffer[0] != '#')
+		break;
+	}
     }
 
     while ((token = GetTokenInLine()) == NULL)
     {
 	ParseNext = ParseBuffer;
 	Line++;
-	if (fgets(ParseBuffer, 511, SpecFp) == NULL)
-	    return NULL;
+	while (1)
+	{
+	    if (fgets(ParseBuffer, 511, SpecFp) == NULL)
+		return NULL;
+	    if (ParseBuffer[0] != '#')
+		break;
+	}
     }
 
     return token;
@@ -388,6 +405,50 @@
 }
 
 int
+ParseReturn(int ordinal)
+{
+    ORDDEF *odp;
+    ORDRETDEF *rdp;
+    char *token;
+    char *endptr;
+    int value;
+    
+    if (ordinal >= MAX_ORDINALS)
+    {
+	fprintf(stderr, "%d: Ordinal number too large\n", Line);
+	exit(1);
+    }
+
+    rdp = malloc(sizeof(*rdp));
+    
+    odp = &OrdinalDefinitions[ordinal];
+    strcpy(odp->export_name, GetToken());
+    odp->valid = 1;
+    odp->type = TYPE_RETURN;
+    odp->additional_data = rdp;
+
+    token = GetToken();
+    rdp->arg_size = strtol(token, &endptr, 0);
+    if (endptr == NULL || *endptr != '\0')
+    {
+	fprintf(stderr, "%d: Expected number value, got '%s'\n", Line,
+		token);
+	exit(1);
+    }
+
+    token = GetToken();
+    rdp->ret_value = strtol(token, &endptr, 0);
+    if (endptr == NULL || *endptr != '\0')
+    {
+	fprintf(stderr, "%d: Expected number value, got '%s'\n", Line,
+		token);
+	exit(1);
+    }
+
+    return 0;
+}
+
+int
 ParseOrdinal(int ordinal)
 {
     char *token;
@@ -415,6 +476,8 @@
 	return ParseExportFunction(ordinal, FUNCTYPE_REG);
     else if (stricmp(token, "equate") == 0)
 	return ParseEquate(ordinal);
+    else if (stricmp(token, "return") == 0)
+	return ParseReturn(ordinal);
     else
     {
 	fprintf(stderr, 
@@ -509,6 +572,7 @@
 {
     ORDDEF *odp;
     ORDFUNCDEF *fdp;
+    ORDRETDEF *rdp;
     FILE *fp;
     char filename[80];
     char buffer[80];
@@ -553,6 +617,7 @@
 	else
 	{
 	    fdp = odp->additional_data;
+	    rdp = odp->additional_data;
 	    
 	    switch (odp->type)
 	    {
@@ -573,6 +638,18 @@
 		OutputVariableCode(fp, ".long", odp);
 		break;
 
+	      case TYPE_RETURN:
+		fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
+		fprintf(fp, "\tmovw\t$%d,%%ax\n", rdp->ret_value & 0xffff);
+		fprintf(fp, "\tmovw\t$%d,%%dx\n", 
+			(rdp->ret_value >> 16) & 0xffff);
+		fprintf(fp, "\t.byte\t0x66\n");
+		if (rdp->arg_size != 0)
+		    fprintf(fp, "\tlret\t$%d\n", rdp->arg_size);
+		else
+		    fprintf(fp, "\tlret\n");
+		break;
+
 	      case FUNCTYPE_REG:
 		fprintf(fp, "_%s_Ordinal_%d:\n", UpperDLLName, i);
 		fprintf(fp, "\tpushw\t%%ax\n");
diff --git a/dlls.h b/dlls.h
index a43a9e0..87d3dc8 100644
--- a/dlls.h
+++ b/dlls.h
@@ -1,4 +1,4 @@
-/* $Id$
+/* $Id: dlls.h,v 1.1 1993/06/29 15:55:18 root Exp $
  */
 /*
  * Copyright  Robert J. Amstadt, 1993
@@ -52,5 +52,7 @@
 extern struct dll_table_entry_s USER_table[];
 extern struct dll_table_entry_s GDI_table[];
 extern struct dll_table_entry_s UNIXLIB_table[];
+extern struct dll_table_entry_s WIN87EM_table[];
+extern struct dll_table_entry_s SHELL_table[];
 
 #endif /* DLLS_H */
diff --git a/dump.c b/dump.c
index 72edc7a..6c21f9e 100644
--- a/dump.c
+++ b/dump.c
@@ -1,9 +1,6 @@
-/* $Id$
- */
+static char RCSId[] = "$Id: dump.c,v 1.1 1993/06/29 15:55:18 root Exp $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
 
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
diff --git a/gdi-ordinals b/gdi-ordinals
new file mode 100644
index 0000000..55fcf49
--- /dev/null
+++ b/gdi-ordinals
@@ -0,0 +1,283 @@
+  1   1  4e0c  SETBKCOLOR exported, shared data
+  2   1  4e22  SETBKMODE exported
+  3   1  4b46  SETMAPMODE exported, shared data
+  4   1  4e6b  SETROP2 exported
+  5   1  5218  SETRELABS exported
+  6   1  4eb9  SETPOLYFILLMODE exported
+  7   1  4e92  SETSTRETCHBLTMODE exported
+  8   1  4a00  SETTEXTCHARACTEREXTRA exported, shared data
+  9   1  4df8  SETTEXTCOLOR exported, shared data
+ 10   1  49ec  SETTEXTJUSTIFICATION exported, shared data
+ 11   1  4ee0  SETWINDOWORG exported, shared data
+ 12   4  06c8  SETWINDOWEXT exported
+ 13   1  4f14  SETVIEWPORTORG exported, shared data
+ 14   4  06fc  SETVIEWPORTEXT exported
+ 15   1  4b12  OFFSETWINDOWORG exported
+ 16   4  0764  SCALEWINDOWEXT exported
+ 17   1  4ade  OFFSETVIEWPORTORG exported
+ 18   4  0730  SCALEVIEWPORTEXT exported
+ 19  21  0e96  LINETO exported, shared data
+ 20  21  0eaa  MOVETO exported, shared data
+ 21   1  4c50  EXCLUDECLIPRECT exported
+ 22   1  4c84  INTERSECTCLIPRECT exported
+ 23   9  1030  ARC exported, shared data
+ 24   9  101c  ELLIPSE exported, shared data
+ 25  15  08fc  FLOODFILL exported, shared data
+ 26   9  1044  PIE exported, shared data
+ 27  25  0000  RECTANGLE exported, shared data
+ 28   9  106c  ROUNDRECT exported, shared data
+ 29   1  4c14  PATBLT exported, shared data
+ 30   1  48cb  SAVEDC exported, shared data
+ 31  23  0383  SETPIXEL exported, shared data
+ 32   1  4d3a  OFFSETCLIPRGN exported, shared data
+ 33   1  4f95  TEXTOUT exported, shared data
+ 34   1  4bfa  BITBLT exported, shared data
+ 35   1  4be0  STRETCHBLT exported, shared data
+ 36  24  0000  POLYGON exported, shared data
+ 37  21  0ede  POLYLINE exported, shared data
+ 38   7  06d1  ESCAPE exported, shared data
+ 39   1  48b7  RESTOREDC exported, shared data
+ 40  26  0000  FILLRGN exported, shared data
+ 41  26  003a  FRAMERGN exported, shared data
+ 42   1  4dbd  INVERTRGN exported, shared data
+ 43  26  0020  PAINTRGN exported, shared data
+ 44   1  4c98  SELECTCLIPRGN exported, shared data
+ 45   1  4dd7  SELECTOBJECT exported, shared data
+ 46   1  79f4  __GP exported, shared data
+ 47   1  4d4e  COMBINERGN exported, shared data
+ 48   1  4929  CREATEBITMAP exported, shared data
+ 49   1  4943  CREATEBITMAPINDIRECT exported, shared data
+ 50   4  05d7  CREATEBRUSHINDIRECT exported, shared data
+ 51   4  05f1  CREATECOMPATIBLEBITMAP exported
+ 52   1  47c4  CREATECOMPATIBLEDC exported, shared data
+ 53   1  480a  CREATEDC exported
+ 54   9  020e  CREATEELLIPTICRGN exported, shared data
+ 55   9  0f99  CREATEELLIPTICRGNINDIRECT exported, shared data
+ 56   3  1589  CREATEFONT exported, shared data
+ 57   3  15b1  CREATEFONTINDIRECT exported, shared data
+ 58   4  05a7  CREATEHATCHBRUSH exported, shared data
+ 59   1  1ec0  WEP exported, shared data
+ 60   4  05c3  CREATEPATTERNBRUSH exported, shared data
+ 61   1  48f3  CREATEPEN exported, shared data
+ 62   1  490f  CREATEPENINDIRECT exported, shared data
+ 63   9  0fb3  CREATEPOLYGONRGN exported, shared data
+ 64   1  59cd  CREATERECTRGN exported, shared data
+ 65   1  4cb2  CREATERECTRGNINDIRECT exported, shared data
+ 66   4  017a  CREATESOLIDBRUSH exported, shared data
+ 67   1  4a14  DPTOLP exported
+ 68   1  4897  DELETEDC exported, shared data
+ 69   1  48df  DELETEOBJECT exported, shared data
+ 70   5  05a7  ENUMFONTS exported, shared data
+ 71   4  0678  ENUMOBJECTS exported, shared data
+ 72   1  4ccc  EQUALRGN exported, shared data
+ 73   1  16a5  EXCLUDEVISRECT exported
+ 74   1  4a76  GETBITMAPBITS exported
+ 75   1  515d  GETBKCOLOR exported, shared data
+ 76   1  5142  GETBKMODE exported
+ 77   1  4c64  GETCLIPBOX exported, shared data
+ 78   1  5157  GETCURRENTPOSITION exported
+ 79   1  5154  GETDCORG exported
+ 80   1  4a96  GETDEVICECAPS exported, shared data
+ 81   1  513f  GETMAPMODE exported
+ 82   4  06a8  GETOBJECT exported, shared data
+ 83  23  036f  GETPIXEL exported, shared data
+ 84   1  5139  GETPOLYFILLMODE exported
+ 85   1  5133  GETROP2 exported
+ 86   1  5145  GETRELABS exported
+ 87   1  4a5a  GETSTOCKOBJECT exported, shared data
+ 88   1  513c  GETSTRETCHBLTMODE exported
+ 89  16  0c63  GETTEXTCHARACTEREXTRA exported, shared data
+ 90   1  5160  GETTEXTCOLOR exported, shared data
+ 91   1  4b8d  GETTEXTEXTENT exported, shared data
+ 92   3  166a  GETTEXTFACE exported, shared data
+ 93   3  169a  GETTEXTMETRICS exported, shared data
+ 94   1  5151  GETVIEWPORTEXT exported
+ 95   1  514b  GETVIEWPORTORG exported
+ 96   1  514e  GETWINDOWEXT exported
+ 97   1  5148  GETWINDOWORG exported
+ 98   1  16a2  INTERSECTVISRECT exported
+ 99   1  4a37  LPTODP exported
+100  23  039b  LINEDDA exported, shared data
+101   1  4d26  OFFSETRGN exported, shared data
+102   1  2929  OFFSETVISRGN exported, shared data
+103   1  4da9  PTVISIBLE exported, shared data
+104   1  4d06  RECTVISIBLE exported, shared data
+105   1  1635  SELECTVISRGN exported, shared data
+106   1  4aaa  SETBITMAPBITS exported
+117   1  1118  SETDCORG exported, shared data
+119   2  0e25  ADDFONTRESOURCE exported, shared data
+121   1  2067  DEATH exported, shared data
+122   1  208e  RESURRECTION exported, shared data
+123  19  1603  PLAYMETAFILE exported, shared data
+124  19  1624  GETMETAFILE exported, shared data
+125  20  248b  CREATEMETAFILE exported, shared data
+126  20  24a5  CLOSEMETAFILE exported, shared data
+127  19  15ef  DELETEMETAFILE exported, shared data
+128   1  41b0  MULDIV exported, shared data
+129   1  076c  SAVEVISRGN exported, shared data
+130   1  07b2  RESTOREVISRGN exported, shared data
+131   1  200a  INQUIREVISRGN exported, shared data
+132   7  073d  SETENVIRONMENT exported, shared data
+133   7  0707  GETENVIRONMENT exported, shared data
+134   1  4b6d  GETRGNBOX exported, shared data
+135  15  087f  SCANLR exported, shared data
+136   6  0507  REMOVEFONTRESOURCE exported, shared data
+148   1  4c28  SETBRUSHORG exported, shared data
+149   1  515a  GETBRUSHORG exported
+150   1  4c3c  UNREALIZEOBJECT exported, shared data
+151  20  246b  COPYMETAFILE exported, shared data
+153   1  47d8  CREATEIC exported
+154   1  4aca  GETNEARESTCOLOR exported, shared data
+155   7  052d  QUERYABORT exported, shared data
+156   4  0605  CREATEDISCARDABLEBITMAP exported
+159  20  24b9  GETMETAFILEBITS exported, shared data
+160  20  24cd  SETMETAFILEBITS exported, shared data
+161   1  4d95  PTINREGION exported, shared data
+162   1  49b8  GETBITMAPDIMENSION exported, shared data
+163   1  4984  SETBITMAPDIMENSION exported, shared data
+169   1  4352  ISDCDIRTY exported, shared data
+170   1  439b  SETDCSTATUS exported, shared data
+172   1  4d81  SETRECTRGN exported, shared data
+173   1  5130  GETCLIPRGN exported, shared data
+175  19  166a  ENUMMETAFILE exported, shared data
+176  19  163e  PLAYMETAFILERECORD exported, shared data
+179   1  0601  GETDCSTATE exported, shared data
+180   1  0615  SETDCSTATE exported, shared data
+181   1  4ce6  RECTINREGION exported, shared data
+190  31  04ec  SETDCHOOK exported, shared data
+191  31  04b5  GETDCHOOK exported, shared data
+192   1  76b0  SETHOOKFLAGS exported, shared data
+193  31  0526  SETBOUNDSRECT exported, shared data
+194   1  76e4  GETBOUNDSRECT exported, shared data
+195   1  1ac6  SELECTBITMAP exported, shared data
+196  20  24e1  SETMETAFILEBITSBETTER exported, shared data
+201  13  014a  DMBITBLT exported
+202  13  014f  DMCOLORINFO exported
+206  13  0163  DMENUMDFONTS exported
+207  13  0169  DMENUMOBJ exported
+208  13  0159  DMOUTPUT exported
+209  13  0154  DMPIXEL exported
+210  13  015e  DMREALIZEOBJECT exported
+211  13  00df  DMSTRBLT exported, shared data
+212  13  016e  DMSCANLR exported
+213  13  0171  BRUTE exported, shared data
+214  13  0000  DMEXTTEXTOUT exported, shared data
+215  13  0130  DMGETCHARWIDTH exported, shared data
+216  13  0136  DMSTRETCHBLT exported, shared data
+217  13  013b  DMDIBBITS exported, shared data
+218  13  0140  DMSTRETCHDIBITS exported, shared data
+219  13  0145  DMSETDIBTODEV exported, shared data
+220  13  024d  DMTRANSPOSE exported, shared data
+230  27  0000  CREATEPQ exported
+231  27  00fb  MINPQ exported
+232  27  00fe  EXTRACTPQ exported
+233  27  0045  INSERTPQ exported
+234  27  01dc  SIZEPQ exported
+235  27  01cb  DELETEPQ exported
+240  28  01c3  OPENJOB exported, shared data
+241  28  08eb  WRITESPOOL exported, shared data
+242  28  0e82  WRITEDIALOG exported, shared data
+243  28  1292  CLOSEJOB exported, shared data
+244  28  13e0  DELETEJOB exported, shared data
+245  28  1802  GETSPOOLJOB exported, shared data
+246  28  06a1  STARTSPOOLPAGE exported, shared data
+247  28  1112  ENDSPOOLPAGE exported, shared data
+248  28  18e4  QUERYJOB exported, shared data
+250  28  0000  COPY exported, shared data
+253  28  0ff3  DELETESPOOLPAGE exported, shared data
+254  28  156f  SPOOLFILE exported, shared data
+300   5  093c  ENGINEENUMERATEFONT exported, shared data
+301   6  0560  ENGINEDELETEFONT exported, shared data
+302   3  2b2d  ENGINEREALIZEFONT exported, shared data
+303   3  2c8a  ENGINEGETCHARWIDTH exported, shared data
+304   5  0993  ENGINESETFONTCONTEXT exported, shared data
+305   7  09e9  ENGINEGETGLYPHBMP exported, shared data
+306   7  1184  ENGINEMAKEFONTDIR exported, shared data
+307   7  083d  GETCHARABCWIDTHS exported, shared data
+308   7  0876  GETOUTLINETEXTMETRICS exported, shared data
+309   7  0795  GETGLYPHOUTLINE exported, shared data
+310   7  0763  CREATESCALABLEFONTRESOURCE exported, shared data
+311   7  07fc  GETFONTDATA exported, shared data
+312   7  0d8a  CONVERTOUTLINEFONTFILE exported, shared data
+313   7  0d36  GETRASTERIZERCAPS exported, shared data
+314   1  669a  ENGINEEXTTEXTOUT exported, shared data
+330   5  05d7  ENUMFONTFAMILIES exported, shared data
+332   7  0896  GETKERNINGPAIRS exported, shared data
+345   1  5136  GETTEXTALIGN exported, shared data
+346   1  4e49  SETTEXTALIGN exported, shared data
+348   9  1058  CHORD exported, shared data
+349   3  163f  SETMAPPERFLAGS exported, shared data
+350   3  15cb  GETCHARWIDTH exported, shared data
+351   1  4f48  EXTTEXTOUT exported, shared data
+352   1  0a2e  GETPHYSICALFONTHANDLE exported, shared data
+353   3  160b  GETASPECTRATIOFILTER exported, shared data
+354   1  1fdf  SHRINKGDIHEAP exported, shared data
+355  48  02ef  FTRAPPING0 exported, shared data
+360  22  0023  CREATEPALETTE exported, shared data
+361  22  0271  GDISELECTPALETTE exported, shared data
+362  22  1088  GDIREALIZEPALETTE exported, shared data
+363  22  0050  GETPALETTEENTRIES exported, shared data
+364  22  00d2  SETPALETTEENTRIES exported, shared data
+365  22  101d  REALIZEDEFAULTPALETTE exported, shared data
+366  22  0109  UPDATECOLORS exported, shared data
+367  22  0000  ANIMATEPALETTE exported, shared data
+368  22  00be  RESIZEPALETTE exported, shared data
+370  22  0073  GETNEARESTPALETTEINDEX exported, shared data
+372  15  0910  EXTFLOODFILL exported, shared data
+373  22  00f5  SETSYSTEMPALETTEUSE exported, shared data
+374  22  00aa  GETSYSTEMPALETTEUSE exported, shared data
+375  22  0087  GETSYSTEMPALETTEENTRIES exported, shared data
+376  31  009c  RESETDC exported, shared data
+377  31  0045  STARTDOC exported, shared data
+378  31  002e  ENDDOC exported, shared data
+379  31  0068  STARTPAGE exported, shared data
+380  31  0017  ENDPAGE exported, shared data
+381  31  007c  SETABORTPROC exported, shared data
+382  31  0000  ABORTDOC exported, shared data
+400   1  420e  FASTWINDOWFRAME exported, shared data
+401   2  0403  GDIMOVEBITMAP exported, shared data
+403   2  042a  GDIINIT2 exported, shared data
+405   2  012e  FINALGDIINIT exported, shared data
+407   1  0ec1  CREATEUSERBITMAP exported
+409   4  0200  CREATEUSERDISCARDABLEBITMAP exported
+410  19  1490  ISVALIDMETAFILE exported, shared data
+411   1  511a  GETCURLOGFONT exported, shared data
+412  22  0b0c  ISDCCURRENTPALETTE exported, shared data
+439  11  0202  STRETCHDIBITS exported, shared data
+440  11  0000  SETDIBITS exported, shared data
+441  11  0196  GETDIBITS exported, shared data
+442  11  006c  CREATEDIBITMAP exported, shared data
+443  11  010a  SETDIBITSTODEVICE exported, shared data
+444   9  01be  CREATEROUNDRECTRGN exported, shared data
+445   4  0619  CREATEDIBPATTERNBRUSH exported, shared data
+449  11  1015  DEVICECOLORMATCH exported, shared data
+450  24  0023  POLYPOLYGON exported, shared data
+451   9  0fe3  CREATEPOLYPOLYGONRGN exported, shared data
+452  21  19a0  GDISEEGDIDO exported, shared data
+460   1  7690  GDITASKTERMINATION exported, shared data
+461   1  76a2  SETOBJECTOWNER exported, shared data
+462   1  1ec6  ISGDIOBJECT exported, shared data
+463   1  0e68  MAKEOBJECTPRIVATE exported, shared data
+464  19  1862  FIXUPBOGUSPUBLISHERMETAFILE exported, shared data
+465   1  29b7  RECTVISIBLE_EHH exported, shared data
+466   1  2aab  RECTINREGION_EHH exported, shared data
+467   1  56a3  UNICODETOANSI exported, shared data
+468   1  49cc  GETBITMAPDIMENSIONEX exported, shared data
+469   1  5eb5  GETBRUSHORGEX exported
+470   1  5ed8  GETCURRENTPOSITIONEX exported
+471   1  4bb4  GETTEXTEXTENTPOINT exported, shared data
+472   1  5f27  GETVIEWPORTEXTEX exported
+473   1  5f4a  GETVIEWPORTORGEX exported
+474   1  5f6d  GETWINDOWEXTEX exported
+475   1  5f90  GETWINDOWORGEX exported
+476   1  4af2  OFFSETVIEWPORTORGEX exported
+477   1  4b26  OFFSETWINDOWORGEX exported
+478   1  4998  SETBITMAPDIMENSIONEX exported, shared data
+479   4  0710  SETVIEWPORTEXTEX exported
+480   1  4f28  SETVIEWPORTORGEX exported, shared data
+481   4  06dc  SETWINDOWEXTEX exported
+482   1  4ef4  SETWINDOWORGEX exported, shared data
+483  21  0ebe  MOVETOEX exported, shared data
+484   4  0744  SCALEVIEWPORTEXTEX exported
+485   4  0778  SCALEWINDOWEXTEX exported
+486   3  161f  GETASPECTRATIOFILTEREX exported, shared data
diff --git a/gdi.spec b/gdi.spec
index 9f87b18..3537537 100644
--- a/gdi.spec
+++ b/gdi.spec
@@ -1,3 +1,5 @@
+# $Id: gdi.spec,v 1.2 1993/06/30 14:24:33 root Exp root $
+#
 name	gdi
 id	3
-length	256
+length	490
diff --git a/heap.c b/heap.c
index 156e9c8..b6e7f9c 100644
--- a/heap.c
+++ b/heap.c
@@ -1,4 +1,4 @@
-static char RCSId[] = "$Id$";
+static char RCSId[] = "$Id: heap.c,v 1.1 1993/06/29 15:55:18 root Exp $";
 static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
 
 #include <stdio.h>
@@ -34,7 +34,7 @@
     MDESC *m, *m_new;
     
 #ifdef HEAP_DEBUG
-    fprintf(stderr, "LocalAlloc: flags %x, bytes %d, ", flags, bytes);
+    printf("LocalAlloc: flags %x, bytes %d, ", flags, bytes);
 #endif
 
     /*
@@ -63,7 +63,7 @@
 	    m->length -= (m_new->length + sizeof(MDESC));
 
 #ifdef HEAP_DEBUG
-	    fprintf(stderr, "Returning %x\n", (int) (m + 1));
+	    printf("Returning %x\n", (int) (m + 1));
 #endif
 	    return (void *) (m + 1);
 	}
@@ -80,13 +80,13 @@
 	    m->next->prev = m->prev;
 	
 #ifdef HEAP_DEBUG
-	fprintf(stderr, "Returning %x\n", (int) (m + 1));
+	printf("Returning %x\n", (int) (m + 1));
 #endif
 	return (void *) (m + 1);
     }
 
 #ifdef HEAP_DEBUG
-    fprintf(stderr, "Returning 0\n");
+    printf("Returning 0\n");
 #endif
     return 0;
 }
diff --git a/if1632.S b/if1632.S
index 7d2bbed..807d32e 100644
--- a/if1632.S
+++ b/if1632.S
@@ -36,7 +36,7 @@
 	.text
 
 /**********************************************************************
- *	int CallTo16(unsigned long csip, unsigned long sssp,
+ *	int CallToInit16(unsigned long csip, unsigned long sssp,
  *		     unsigned short ds)
  *
  *	Stack:	 	0	ebp
@@ -48,8 +48,8 @@
  *			16	target ds
  */
 	.align	4
-	.globl _CallTo16
-_CallTo16:
+	.globl _CallToInit16
+_CallToInit16:
 	pushl	%ebp
 	movl	%esp,%ebp
 
@@ -76,13 +76,17 @@
 	movl	%ebp,saved_ebp
 
 	/*
-	 * Load ds, es, sp, ss & bp
+	 * Load initial registers
 	 */
-	movl	$0,%eax
+	movw	_WIN_StackSize,%bx
+	movw	_WIN_HeapSize,%cx
+	movl	$0,%esi
+	xorl	%eax,%eax
 	movw	_PSPSelector,%ax
 	movw	%ax,%es
 	movw	16(%ebp),%ax
 	movw	%ax,%ds
+	movl	%eax,%edi
 	xorl	%eax,%eax
 	movw	12(%ebp),%ax
 	movl	%eax,%esp
@@ -257,6 +261,8 @@
 	popl	saved_16esp
 
 	popw	%es
+/*	movw	_PSPSelector,%ax
+	movw	%ax,%es */
 	popw	%ds
 
 	.align	2,0x90
@@ -283,12 +289,11 @@
 	/*
 	 * Last, we need to load the return values.
 	 */
+	movl	$0,%esi
 	movw	$1,%ax
 	movw	%gs:_WIN_StackSize,%cx
 	movw	$1,%dx
 	movw	0x80,%bx
-	movl	$0,%esi
-	movl	$1,%edi
 
 	.byte	0x66
 	lret
diff --git a/kernel-ordinals b/kernel-ordinals
new file mode 100644
index 0000000..f3ad91d
--- /dev/null
+++ b/kernel-ordinals
@@ -0,0 +1,233 @@
+  1   1  93ce  FATALEXIT exported, shared data
+  2   1  9d6f  EXITKERNEL exported
+  3   3  07c6  GETVERSION exported
+  4   2  28b7  LOCALINIT exported
+  5   1  0543  LOCALALLOC exported
+  6   1  0587  LOCALREALLOC exported
+  7   1  055f  LOCALFREE exported
+  8   1  0573  LOCALLOCK exported
+  9   1  05bd  LOCALUNLOCK exported
+ 10   1  05a9  LOCALSIZE exported
+ 11   1  8d6a  LOCALHANDLE exported
+ 12   1  05d1  LOCALFLAGS exported
+ 13   1  8d85  LOCALCOMPACT exported
+ 14   2  0278  LOCALNOTIFY exported
+ 15   1  022b  GLOBALALLOC exported
+ 16   1  028c  GLOBALREALLOC exported
+ 17   1  0247  GLOBALFREE exported
+ 18   1  0278  GLOBALLOCK exported
+ 19   1  02cb  GLOBALUNLOCK exported
+ 20   1  02b7  GLOBALSIZE exported
+ 21   1  0264  GLOBALHANDLE exported
+ 22   1  02e8  GLOBALFLAGS exported
+ 23   1  03b3  LOCKSEGMENT exported
+ 24   1  03c7  UNLOCKSEGMENT exported
+ 25   1  1105  GLOBALCOMPACT exported
+ 26   1  0e39  GLOBALFREEALL exported
+ 28   1  1190  GLOBALMASTERHANDLE exported
+ 29   1  7d21  YIELD exported
+ 30   1  7ca8  WAITEVENT exported
+ 31   1  7d92  POSTEVENT exported
+ 32   1  7df0  SETPRIORITY exported
+ 33   1  81e5  LOCKCURRENTTASK exported
+ 34   1  7de3  SETTASKQUEUE exported
+ 35   1  7d9d  GETTASKQUEUE exported
+ 36   1  842c  GETCURRENTTASK exported
+ 37   3  024e  GETCURRENTPDB exported
+ 38   1  7dc5  SETTASKSIGNALPROC exported
+ 41   1  9c8e  ENABLEDOS exported
+ 42   1  9c8f  DISABLEDOS exported
+ 45   2  0244  LOADMODULE exported
+ 46   2  0176  FREEMODULE exported
+ 47   2  01bb  GETMODULEHANDLE exported
+ 48   2  01d2  GETMODULEUSAGE exported
+ 49   2  01e6  GETMODULEFILENAME exported
+ 50   2  019e  GETPROCADDRESS exported
+ 51   3  00a8  MAKEPROCINSTANCE exported
+ 52   3  00c5  FREEPROCINSTANCE exported
+ 53   1  4927  CALLPROCINSTANCE exported
+ 54   2  0219  GETINSTANCEDATA exported
+ 55   3  08ee  CATCH exported
+ 56   3  0928  THROW exported
+ 57   1  0663  GETPROFILEINT exported, shared data
+ 58   1  0689  GETPROFILESTRING exported, shared data
+ 59   1  0763  WRITEPROFILESTRING exported, shared data
+ 60   3  0008  FINDRESOURCE exported
+ 61   1  0126  LOADRESOURCE exported
+ 62   1  018b  LOCKRESOURCE exported
+ 63   1  0177  FREERESOURCE exported
+ 64   1  0140  ACCESSRESOURCE exported
+ 65   1  019f  SIZEOFRESOURCE exported
+ 66   1  015d  ALLOCRESOURCE exported
+ 67   3  002e  SETRESOURCEHANDLER exported
+ 68   3  041a  INITATOMTABLE exported
+ 69   1  4942  FINDATOM exported
+ 70   1  493f  ADDATOM exported
+ 71   1  01b9  DELETEATOM exported
+ 72   1  01cd  GETATOMNAME exported
+ 73   1  01fd  GETATOMHANDLE exported
+ 74   1  05e5  OPENFILE exported
+ 75   3  04be  OPENPATHNAME exported
+ 76   3  04b6  DELETEPATHNAME exported
+ 77   1  83cd  RESERVED1 exported
+ 78   1  83ca  RESERVED2 exported
+ 79   1  83c4  RESERVED3 exported
+ 80   1  83c7  RESERVED4 exported
+ 81   1  046e  _LCLOSE exported
+ 82   1  04e6  _LREAD exported
+ 83   1  048d  _LCREAT exported
+ 84   1  04b8  _LLSEEK exported
+ 85   1  0443  _LOPEN exported
+ 86   1  0516  _LWRITE exported
+ 87   1  838e  RESERVED5 exported
+ 88   1  836f  LSTRCPY exported
+ 89   1  837f  LSTRCAT exported
+ 90   1  82f6  LSTRLEN exported
+ 91   2  268d  INITTASK exported
+ 92   3  0508  GETTEMPDRIVE exported
+ 93   1  48fa  GETCODEHANDLE exported
+ 94   3  03ce  DEFINEHANDLETABLE exported
+ 95   2  022d  LOADLIBRARY exported
+ 96   2  018a  FREELIBRARY exported
+ 97   3  00dc  GETTEMPFILENAME exported
+ 98   1  5c17  GETLASTDISKCHANGE exported
+ 99   1  0bc5  GETLPERRMODE exported
+100   2  2ab7  VALIDATECODESEGMENTS exported
+101   1  1d92  NOHOOKDOSCALL exported
+102   1  1d98  DOS3CALL exported
+103   1  9e19  NETBIOSCALL exported
+104   1  03db  GETCODEINFO exported
+105   3  07d9  GETEXEVERSION exported
+106   1  2ede  SETSWAPAREASIZE exported
+107   3  0132  SETERRORMODE exported
+108   1  11c6  SWITCHSTACKTO exported
+109   1  123c  SWITCHSTACKBACK exported
+110   1  7bac  PATCHCODEHANDLE exported
+111   1  02fc  GLOBALWIRE exported
+112   1  0310  GLOBALUNWIRE exported
+113 254  0003  __AHSHIFT exported
+114 254  0008  __AHINCR exported
+115   1  999b  OUTPUTDEBUGSTRING exported
+116   2  2797  INITLIB exported
+117   1  7d3e  OLDYIELD exported
+118   1  7da7  GETTASKQUEUEDS exported
+119   1  7db5  GETTASKQUEUEES exported
+120   1  72d4  UNDEFDYNLINK exported
+121   1  8db0  LOCALSHRINK exported
+122   1  81ff  ISTASKLOCKED exported
+123   1  4638  KBDRST exported
+124   1  9c90  ENABLEKERNEL exported
+125   1  9c91  DISABLEKERNEL exported
+126   1  2ea7  MEMORYFREED exported
+127   1  06d7  GETPRIVATEPROFILEINT exported, shared data
+128   1  0709  GETPRIVATEPROFILESTRING exported, shared data
+129   1  0795  WRITEPRIVATEPROFILESTRING exported, shared data
+130   3  0888  FILECDR exported
+131   3  08ce  GETDOSENVIRONMENT exported
+132   3  07ab  GETWINFLAGS exported
+133   1  4e78  GETEXEPTR exported
+134   3  0054  GETWINDOWSDIRECTORY exported
+135   3  007e  GETSYSTEMDIRECTORY exported
+136   3  0675  GETDRIVETYPE exported
+137   1  0211  FATALAPPEXIT exported
+138   2  1e4d  GETHEAPSPACES exported
+139   1  612c  DOSIGNAL exported
+140   3  068c  SETSIGHANDLER exported
+141   1  8014  INITTASK1 exported
+150   1  7cff  DIRECTEDYIELD exported
+151   3  07e6  WINOLDAPCALL exported
+152   3  08e2  GETNUMTASKS exported
+154   1  034c  GLOBALNOTIFY exported
+155   1  119f  GETTASKDS exported
+156   1  4632  LIMITEMSPAGES exported
+157   1  4639  GETCURPID exported
+158   1  7e3e  ISWINOLDAPTASK exported
+159   1  0ec5  GLOBALHANDLENORIP exported
+160   1  a940  EMSCOPY exported
+161   2  29c9  LOCALCOUNTFREE exported
+162   2  2a01  LOCALHEAPSIZE exported
+163   1  0338  GLOBALLRUOLDEST exported
+164   1  0324  GLOBALLRUNEWEST exported
+165   1  9e0c  A20PROC exported
+166   2  028f  WINEXEC exported
+167   1  4f02  GETEXPWINVER exported
+168   1  84b8  DIRECTRESALLOC exported
+169   1  0404  GETFREESPACE exported
+170   1  00d0  ALLOCCSTODSALIAS exported
+171   1  00e4  ALLOCDSTOCSALIAS exported
+172   1  21fb  ALLOCALIAS exported
+173 254  f000  __ROMBIOS exported
+174 254  a000  __A000H exported
+175   1  1d9e  ALLOCSELECTOR exported
+176   1  00f8  FREESELECTOR exported
+177   1  010c  PRESTOCHANGOSELECTOR exported
+178 254  0001  __WINFLAGS exported
+179 254  d000  __D000H exported
+180   1  26b9  LONGPTRADD exported
+181 254  b000  __B000H exported
+182 254  b800  __B800H exported
+183 254  0000  __0000H exported
+184   1  139a  GLOBALDOSALLOC exported
+185   1  13d4  GLOBALDOSFREE exported
+186   1  2252  GETSELECTORBASE exported
+187   1  2725  SETSELECTORBASE exported
+188   1  2755  GETSELECTORLIMIT exported
+189   1  276d  SETSELECTORLIMIT exported
+190 254  e000  __E000H exported
+191   1  0363  GLOBALPAGELOCK exported
+192   1  0377  GLOBALPAGEUNLOCK exported
+193 254  0040  __0040H exported
+194 254  f000  __F000H exported
+195 254  c000  __C000H exported
+196   1  279b  SELECTORACCESSRIGHTS exported
+197   1  038b  GLOBALFIX exported
+198   1  039f  GLOBALUNFIX exported
+199   1  0647  SETHANDLECOUNT exported
+200   1  3e4e  VALIDATEFREESPACES exported
+201   1  9ada  REPLACEINST exported
+202   3  081d  REGISTERPTRACE exported
+203   1  946e  DEBUGBREAK exported
+204   3  014e  SWAPRECORDING exported
+205   1  97e0  CVWBREAK exported
+206   1  1df5  ALLOCSELECTORARRAY exported
+207   1  8425  ISDBCSLEADBYTE exported
+310   2  2a0c  LOCALHANDLEDELTA exported
+311   1  9eaf  GETSETKERNELDOSPROC exported
+314   1  9835  DEBUGDEFINESEGMENT exported
+315   1  708b  WRITEOUTPROFILES exported, shared data
+316   1  127e  GETFREEMEMINFO exported
+318   1  9ecf  FATALEXITHOOK exported
+319   1  52fc  FLUSHCACHEDFILEHANDLE exported
+320   1  7e50  ISTASK exported
+323   2  1e9b  ISROMMODULE exported
+324   1  94cf  LOGERROR exported, shared data
+325   1  94f2  LOGPARAMERROR exported, shared data
+326   2  1ea0  ISROMFILE exported
+327   1  949b  K327 exported
+328   1  94ce  _DEBUGOUTPUT exported
+329   1  94c5  K329 exported
+332   4  0218  THHOOK exported
+334   1  4b62  ISBADREADPTR exported
+335   1  4b83  ISBADWRITEPTR exported
+336   1  4c28  ISBADCODEPTR exported
+337   1  4c4e  ISBADSTRINGPTR exported
+338   1  4c72  HASGPHANDLER exported
+339   1  a70e  DIAGQUERY exported
+340   1  a71d  DIAGOUTPUT exported
+341   3  084c  TOOLHELPHOOK exported
+342   1  a820  __GP exported, shared data
+343   2  0689  REGISTERWINOLDAPHOOK exported
+344   2  06f3  GETWINOLDAPHOOKS exported
+345   1  4d39  ISSHAREDSELECTOR exported
+346   1  4ba5  ISBADHUGEREADPTR exported
+347   1  4be5  ISBADHUGEWRITEPTR exported
+348   1  4d5c  HMEMCPY exported
+349   1  4dec  _HREAD exported
+350   1  4df1  _HWRITE exported
+351   1  5e92  BUNNY_351 exported
+353   1  831f  LSTRCPYN exported
+354   1  9eeb  GETAPPCOMPATFLAGS exported
+355   1  9f2a  GETWINDEBUGINFO exported, shared data
+356   1  9f36  SETWINDEBUGINFO exported, shared data
+403   1  29f1  K403 exported
+404   1  29ae  K404 exported
diff --git a/kernel.c b/kernel.c
index 4c57006..cf23a44 100644
--- a/kernel.c
+++ b/kernel.c
@@ -1,4 +1,4 @@
-static char RCSId[] = "$Id$";
+static char RCSId[] = "$Id: kernel.c,v 1.1 1993/06/29 15:55:18 root Exp $";
 static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
 
 #include <stdio.h>
@@ -28,7 +28,7 @@
 	segment = *(Stack16Frame + 6);
 
 #ifdef RELAY_DEBUG
-    fprintf(stderr, "LockSegment: segment %x\n", segment);
+    printf("LockSegment: segment %x\n", segment);
 #endif
 
     return segment;
@@ -44,7 +44,7 @@
 	segment = *(Stack16Frame + 6);
 
 #ifdef RELAY_DEBUG
-    fprintf(stderr, "UnlockSegment: segment %x\n", segment);
+    printf("UnlockSegment: segment %x\n", segment);
 #endif
 
     return segment;
@@ -57,7 +57,7 @@
 KERNEL_WaitEvent(int task)
 {
 #ifdef RELAY_DEBUG
-    fprintf(stderr, "WaitEvent: task %d\n", task);
+    printf("WaitEvent: task %d\n", task);
 #endif
     return 0;
 }
@@ -68,7 +68,7 @@
 KERNEL_GetModuleFileName(int module, char *filename, int bytes)
 {
 #ifdef RELAY_DEBUG
-    fprintf(stderr, "GetModuleFileName: module %d, filename %x, bytes %d\n", 
+    printf("GetModuleFileName: module %d, filename %x, bytes %d\n", 
 	    module, filename, bytes);
 #endif
     
diff --git a/kernel.spec b/kernel.spec
index 58a0f0a..127fabe 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -1,8 +1,10 @@
+# $Id: kernel.spec,v 1.2 1993/06/30 14:24:33 root Exp root $
+#
 name	kernel
 id	1
-length	256
+length	410
 
-3   pascal GetVersion() KERNEL_GetVersion()
+3   return GetVersion 0 0x301
 5   pascal LocalAlloc(word word) HEAP_LocalAlloc(1 2)
 23  pascal LockSegment(s_word) KERNEL_LockSegment(1)
 24  pascal UnlockSegment(s_word) KERNEL_UnlockSegment(1)
diff --git a/ldt.c b/ldt.c
index facad91..7ab12df 100644
--- a/ldt.c
+++ b/ldt.c
@@ -1,8 +1,6 @@
-/* $Id$
- */
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
+static char RCSId[] = "$Id: ldt.c,v 1.1 1993/06/29 15:55:18 root Exp $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
diff --git a/ldtlib.c b/ldtlib.c
index 137130d..cfd2e25 100644
--- a/ldtlib.c
+++ b/ldtlib.c
@@ -1,8 +1,6 @@
-/* $Id$
- */
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
+static char RCSId[] = "$Id: ldtlib.c,v 1.1 1993/06/29 15:55:18 root Exp $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
diff --git a/neexe.h b/neexe.h
index d92b4a6..c1b0070 100644
--- a/neexe.h
+++ b/neexe.h
@@ -1,4 +1,4 @@
-/* $Id: neexe.h,v 1.1 1993/06/09 03:28:10 root Exp root $
+/* $Id: neexe.h,v 1.3 1993/06/30 14:24:33 root Exp root $
  */
 /*
  * Copyright  Robert J. Amstadt, 1993
@@ -143,9 +143,9 @@
     unsigned short pspNextParagraph;
     unsigned char  pspReserved1;
     unsigned char  pspDispatcher[5];
-    unsigned long  pspTerminateVector;
-    unsigned long  pspControlCVector;
-    unsigned long  pspCritErrorVector;
+    unsigned short pspTerminateVector[2];
+    unsigned short pspControlCVector[2];
+    unsigned short pspCritErrorVector[2];
     unsigned short pspReserved2[11];
     unsigned short pspEnvironment;
     unsigned short pspReserved3[23];
@@ -155,4 +155,63 @@
     unsigned char  pspCommandTail[128];
 };
 
+/*
+ * Entry table structures.
+ */
+struct entry_tab_header_s
+{
+    unsigned char n_entries;
+    unsigned char seg_number;
+};
+
+struct entry_tab_movable_s
+{
+    unsigned char flags;
+    unsigned char int3f[2];
+    unsigned char seg_number;
+    unsigned short offset;
+};
+
+struct entry_tab_fixed_s
+{
+    unsigned char flags;
+    unsigned char offset[2];
+};
+
+/*
+ * Resource table structures.
+ */
+struct resource_nameinfo_s
+{
+    unsigned short offset;
+    unsigned short length;
+    unsigned short flags;
+    unsigned short id;
+    unsigned short handle;
+    unsigned short usage;
+};
+
+struct resource_typeinfo_s
+{
+    unsigned short type_id;	/* Type identifier */
+    unsigned short count;	/* Number of resources of this type */
+    unsigned long  reserved;
+    /*
+     * Name info array.
+     */
+};
+
+#define NE_RSCTYPE_ACCELERATOR		0x8009
+#define NE_RSCTYPE_BITMAP		0x8002
+#define NE_RSCTYPE_CURSOR		0x8001
+#define NE_RSCTYPE_DIALOG		0x8005
+#define NE_RSCTYPE_FONT			0x8008
+#define NE_RSCTYPE_FONTDIR		0x8007
+#define NE_RSCTYPE_GROUP_CURSOR		0x800c
+#define NE_RSCTYPE_GROUP_ICON		0x800e
+#define NE_RSCTYPE_ICON			0x8003
+#define NE_RSCTYPE_MENU			0x8004
+#define NE_RSCTYPE_RCDATA		0x800a
+#define NE_RSCTYPE_STRING		0x8006
+
 #endif /* NEEXE_H */
diff --git a/prototypes.h b/prototypes.h
index 0b6b8ed..526079fc 100644
--- a/prototypes.h
+++ b/prototypes.h
@@ -1,4 +1,4 @@
-/* $Id$
+/* $Id: prototypes.h,v 1.1 1993/06/29 15:55:18 root Exp $
  */
 /*
  * Copyright  Robert J. Amstadt, 1993
@@ -26,7 +26,14 @@
 			struct segment_descriptor_s *selecetor_table,
 			int segment_num);
 extern struct  dll_table_entry_s *FindDLLTable(char *dll_name);
+extern unsigned int GetEntryPointFromOrdinal(int fd, 
+					     struct mz_header_s *mz_header, 
+					     struct ne_header_s *ne_header, 
+					     int ordinal);
 
 extern char WIN_CommandLine[];
+extern struct mz_header_s *CurrentMZHeader;
+extern struct ne_header_s *CurrentNEHeader;
+extern int CurrentNEFile;
 
 #endif /* PROTOTYPES_H */
diff --git a/relay.c b/relay.c
index 067d0ab..0dc6d49 100644
--- a/relay.c
+++ b/relay.c
@@ -1,8 +1,5 @@
-/* $Id$
- */
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
+static char RCSId[] = "$Id: relay.c,v 1.1 1993/06/29 15:55:18 root Exp $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -20,12 +17,16 @@
 #include "prototypes.h"
 #include "dlls.h"
 
-struct dll_name_table_entry_s dll_builtin_table[4] =
+#define N_BUILTINS	6
+
+struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS] =
 {
-    { "KERNEL",  KERNEL_table, 	256, 1 },
-    { "USER",    USER_table, 	256, 2 },
-    { "GDI",     GDI_table, 	256, 3 },
-    { "UNIXLIB", UNIXLIB_table, 256, 4 },
+    { "KERNEL",  KERNEL_table, 	410, 1 },
+    { "USER",    USER_table, 	540, 2 },
+    { "GDI",     GDI_table, 	490, 3 },
+    { "UNIXLIB", UNIXLIB_table,  10, 4 },
+    { "WIN87EM", WIN87EM_table,  10, 5 },
+    { "SHELL",   SHELL_table,   256, 6 },
 };
 
 unsigned short *Stack16Frame;
@@ -170,7 +171,7 @@
 {
     int i;
 
-    for (i = 0; i < 4; i++)
+    for (i = 0; i < N_BUILTINS; i++)
 	if (strcmp(dll_builtin_table[i].dll_name, dll_name) == 0)
 	    return dll_builtin_table[i].dll_table;
     
@@ -185,11 +186,11 @@
 {
     int i, limit;
 
-    for (i = 0; i < 4; i++)
+    for (i = 0; i < N_BUILTINS; i++)
 	if (dll_table == dll_builtin_table[i].dll_table)
 	    break;
     
-    if (i == 4)
+    if (i == N_BUILTINS)
 	return 0;
 
     limit = dll_builtin_table[i].dll_table_length;
diff --git a/resource.c b/resource.c
new file mode 100644
index 0000000..7d674bc
--- /dev/null
+++ b/resource.c
@@ -0,0 +1,242 @@
+static char RCSId[] = "$Id: resource.c,v 1.3 1993/06/30 14:24:33 root Exp root $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "prototypes.h"
+#include "neexe.h"
+
+#define MIN(a,b)	((a) < (b) ? (a) : (b))
+
+typedef struct resource_data_s
+{
+    int resource_type;
+    void *resource_data;
+} RSCD;
+
+RSCD *Resources;
+int ResourceArraySize;
+
+/**********************************************************************
+ *					AddResource
+ */
+int
+AddResource(int type, void *data)
+{
+    RSCD *r;
+    int i;
+    int j;
+    
+    /*
+     * Find free resource id.
+     */
+    r = Resources;
+    for (i = 0; i < ResourceArraySize; i++, r++)
+	if (r->resource_type == 0)
+	    break;
+    
+    /*
+     * Do we need to add more resource slots?
+     */
+    if (i == ResourceArraySize)
+    {
+	if (ResourceArraySize > 0)
+	    r = realloc(Resources, (ResourceArraySize + 32) * sizeof(RSCD));
+	else
+	    r = malloc(32 * sizeof(RSCD));
+	if (r == NULL)
+	    return 0;
+
+	for (j = ResourceArraySize; j < ResourceArraySize + 32; j++)
+	    r[j].resource_type = 0;
+	
+	ResourceArraySize += 32;
+	Resources = r;
+	r = &Resources[i];
+    }
+    
+    /*
+     * Add new resource to list.
+     */
+    r->resource_type = type;
+    r->resource_data = data;
+
+    /*
+     * Return a unique handle.
+     */
+    return i + 1;
+}
+
+/**********************************************************************
+ *					FindResourceByNumber
+ */
+int
+FindResourceByNumber(struct resource_nameinfo_s *result_p,
+		     int type_id, int resource_id)
+{
+    struct resource_typeinfo_s typeinfo;
+    struct resource_nameinfo_s nameinfo;
+    unsigned short size_shift;
+    int i;
+
+    /*
+     * Move to beginning of resource table.
+     */
+    lseek(CurrentNEFile, (CurrentMZHeader->ne_offset +
+			  CurrentNEHeader->resource_tab_offset), SEEK_SET);
+    
+    /*
+     * Read block size.
+     */
+    if (read(CurrentNEFile, &size_shift, sizeof(size_shift)) != 
+	sizeof(size_shift))
+    {
+	return -1;
+    }
+    
+    /*
+     * Find resource.
+     */
+    typeinfo.type_id = 0xffff;
+    while (typeinfo.type_id != 0)
+    {
+	if (read(CurrentNEFile, &typeinfo, sizeof(typeinfo)) !=
+	    sizeof(typeinfo))
+	{
+	    return -1;
+	}
+	if (typeinfo.type_id != 0)
+	{
+	    for (i = 0; i < typeinfo.count; i++)
+	    {
+		if (read(CurrentNEFile, &nameinfo, sizeof(nameinfo)) != 
+		    sizeof(nameinfo))
+		{
+		    return -1;
+		}
+
+#if defined(DEBUG_RESOURCE) && defined(VERBOSE_DEBUG)
+		if (type_id == typeinfo.type_id)
+		{
+		    printf("FindResource: type id = %d, resource id = %x\n",
+			   type_id, nameinfo.id);
+		}
+#endif
+		if ((type_id == -1 || typeinfo.type_id == type_id) &&
+		    nameinfo.id == resource_id)
+		{
+		    memcpy(result_p, &nameinfo, sizeof(nameinfo));
+		    return size_shift;
+		}
+	    }
+	}
+    }
+    
+    return -1;
+}
+
+/**********************************************************************
+ *					RSC_LoadString
+ */
+int
+RSC_LoadString(int instance, int resource_id, char *buffer, int buflen)
+{
+    struct resource_nameinfo_s nameinfo;
+    unsigned short target_id;
+    unsigned char string_length;
+    int size_shift;
+    int string_num;
+    int i;
+
+#ifdef DEBUG_RESOURCE
+    printf("LoadString: instance = %04x, id = %d, "
+	   "buffer = %08x, length = %d\n",
+	   instance, resource_id, buffer, buflen);
+#endif
+    
+    /*
+     * Find string entry.
+     */
+    target_id = (resource_id >> 4) + 0x8001;
+    string_num = resource_id & 0x000f;
+
+    size_shift = FindResourceByNumber(&nameinfo, NE_RSCTYPE_STRING, target_id);
+    if (size_shift == -1)
+	return 0;
+    
+    lseek(CurrentNEFile, (int) nameinfo.offset << size_shift, SEEK_SET);
+
+    for (i = 0; i < string_num; i++)
+    {
+	read(CurrentNEFile, &string_length, 1);
+	lseek(CurrentNEFile, string_length, SEEK_CUR);
+    }
+			
+    read(CurrentNEFile, &string_length, 1);
+    i = MIN(string_length, buflen - 1);
+    read(CurrentNEFile, buffer, i);
+    buffer[i] = '\0';
+#ifdef DEBUG_RESOURCE
+    printf("            '%s'\n", buffer);
+#endif
+    return i;
+}
+
+/**********************************************************************
+ *					RSC_LoadBitmap
+ */
+int 
+RSC_LoadBitmap(int instance, char *bmp_name)
+{
+    struct resource_nameinfo_s nameinfo;
+    void *image;
+    int image_size;
+    int size_shift;
+    
+#ifdef DEBUG_RESOURCE
+    printf("LoadBitmap: instance = %04x, name = %08x\n",
+	   instance, bmp_name);
+#endif
+    /*
+     * Built-in bitmaps
+     */
+    if (instance == 0)
+    {
+	return 0;
+    }
+    /*
+     * Get bitmap by ordinal
+     */
+    else if (((int) bmp_name & 0xffff0000) == 0)
+    {
+	size_shift = FindResourceByNumber(&nameinfo, NE_RSCTYPE_BITMAP,
+					  (int) bmp_name | 0x8000);
+    }
+    /*
+     * Get bitmap by name
+     */
+    else
+    {
+	size_shift = -1;
+    }
+    if (size_shift == -1)
+	return 0;
+
+    /*
+     * Read bitmap.
+     */
+    lseek(CurrentNEFile, ((int) nameinfo.offset << size_shift), SEEK_SET);
+
+    image_size = nameinfo.length << size_shift;
+    image = malloc(image_size);
+    if (image == NULL || read(CurrentNEFile, image, image_size) != image_size)
+    {
+	free(image);
+	return 0;
+    }
+
+    /*
+     * Add to resource list.
+     */
+    return AddResource(NE_RSCTYPE_BITMAP, image);
+}
diff --git a/segmem.h b/segmem.h
index 39a0225..3495c8f 100644
--- a/segmem.h
+++ b/segmem.h
@@ -1,4 +1,4 @@
-/* $Id$
+/* $Id: segmem.h,v 1.1 1993/06/29 15:55:18 root Exp $
  */
 /*
  * Copyright  Robert J. Amstadt, 1993
diff --git a/selector.c b/selector.c
index 449e9ba..ba3a654 100644
--- a/selector.c
+++ b/selector.c
@@ -1,8 +1,5 @@
-/* $Id: exedump.c,v 1.1 1993/06/09 03:28:10 root Exp root $
- */
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
+static char RCSId[] = "$Id: selector.c,v 1.1 1993/06/29 15:55:18 root Exp $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -29,6 +26,78 @@
 extern void KERNEL_Ordinal_102();
 extern void UNIXLIB_Ordinal_0();
 
+/**********************************************************************
+ *					GetEntryPointFromOrdinal
+ */
+unsigned int 
+GetEntryPointFromOrdinal(int fd, struct mz_header_s *mz_header, 
+			 struct ne_header_s *ne_header, int ordinal)
+{
+    struct entry_tab_header_s eth;
+    struct entry_tab_movable_s etm;
+    struct entry_tab_fixed_s etf;
+    int current_ordinal;
+    int i;
+    
+    /*
+     * Move to the beginning of the entry table.
+     */
+    lseek(fd, mz_header->ne_offset + ne_header->entry_tab_offset, SEEK_SET);
+
+    /*
+     * Let's walk through the table until we get to our entry.
+     */
+    current_ordinal = 1;
+    while (1)
+    {
+	/*
+	 * Read header for this bundle.
+	 */
+	if (read(fd, &eth, sizeof(eth)) != sizeof(eth))
+	    myerror("Error reading entry table");
+	
+	if (eth.n_entries == 0)
+	    return 0;
+
+	if (eth.seg_number == 0)
+	{
+	    current_ordinal++;
+	    continue;
+	}
+
+	/*
+	 * Read each of the bundle entries.
+	 */
+	for (i = 0; i < eth.n_entries; i++, current_ordinal++)
+	{
+	    if (eth.seg_number >= 0xfe)
+	    {
+		if (read(fd, &etm, sizeof(etm)) != sizeof(etm))
+		    myerror("Error reading entry table");
+
+		if (current_ordinal == ordinal)
+		{
+		    return ((unsigned int) 
+			    (SelectorTable[etm.seg_number - 1].base_addr + 
+			     etm.offset));
+		}
+	    }
+	    else
+	    {
+		if (read(fd, &etf, sizeof(etf)) != sizeof(etf))
+		    myerror("Error reading entry table");
+
+		if (current_ordinal == ordinal)
+		{
+		    return ((unsigned int) 
+			    (SelectorTable[eth.seg_number - 1].base_addr + 
+			     (int) etf.offset[0] + 
+			     ((int) etf.offset[1] << 8)));
+		}
+	    }
+	}
+    }
+}
 
 /**********************************************************************
  *					GetDOSEnvironment
@@ -113,9 +182,12 @@
     usp = (unsigned short *) &psp->pspDispatcher[1];
     *usp       = (unsigned short) KERNEL_Ordinal_102;
     *(usp + 1) = 0x23;
-    psp->pspTerminateVector = 0x00230000 | ((int) UNIXLIB_Ordinal_0 & 0xffff);
-    psp->pspControlCVector = 0x00230000 | ((int) UNIXLIB_Ordinal_0 & 0xffff);
-    psp->pspCritErrorVector = 0x00230000 | ((int) UNIXLIB_Ordinal_0 & 0xffff);
+    psp->pspTerminateVector[0] = (unsigned short) UNIXLIB_Ordinal_0;
+    psp->pspTerminateVector[1] = 0x0023;
+    psp->pspControlCVector[0] = (unsigned short) UNIXLIB_Ordinal_0;
+    psp->pspControlCVector[1] = 0x0023;
+    psp->pspCritErrorVector[0] = (unsigned short) UNIXLIB_Ordinal_0;
+    psp->pspCritErrorVector[1] = 0x0023;
     psp->pspEnvironment = SelectorTable[EnvironmentSelectorIdx].selector;
     psp->pspCommandTailCount = 1;
     strcpy(psp->pspCommandTail, "\r");
@@ -161,6 +233,14 @@
     zfile = fopen("/dev/zero","r");
     for (i = 0; i < ne_header->n_segment_tab; i++, s++)
     {
+#ifdef DEBUG_SEGMENT
+	printf("  %2d: OFFSET %04.4x, LENGTH %04.4x, ",
+	       i + 1, seg_table[i].seg_data_offset, 
+	       seg_table[i].seg_data_length);
+	printf("FLAGS %04.4x, MIN ALLOC %04.4x\n",
+	       seg_table[i].seg_flags, seg_table[i].min_alloc);
+#endif
+
 	/*
 	 * Store the flags in our table.
 	 */
@@ -231,9 +311,10 @@
 	    /*
 	     * Image in file.
 	     */
-	    status = lseek(fd, seg_table[i].seg_data_offset * 512, SEEK_SET);
+	    status = lseek(fd, seg_table[i].seg_data_offset * 
+			   (1 << ne_header->align_shift_count), SEEK_SET);
 	    if(read(fd, s->base_addr, old_length) != old_length)
-	      myerror("Unable to read segment from file");
+		myerror("Unable to read segment from file");
 	}
 	/*
 	 * Create entry in LDT for this segment.
diff --git a/shell.spec b/shell.spec
new file mode 100644
index 0000000..79f46d9
--- /dev/null
+++ b/shell.spec
@@ -0,0 +1,5 @@
+# $Id: shell.spec,v 1.2 1993/06/30 14:24:33 root Exp root $
+#
+name	shell
+id	5
+length	256
diff --git a/test.exe b/test.exe
deleted file mode 100755
index 3a75f7c..0000000
--- a/test.exe
+++ /dev/null
Binary files differ
diff --git a/unixlib.spec b/unixlib.spec
index 7b5b9dd..e24d02f 100644
--- a/unixlib.spec
+++ b/unixlib.spec
@@ -1,5 +1,7 @@
+# $Id: unixlib.spec,v 1.2 1993/06/30 14:24:33 root Exp root $
+#
 name	unixlib
 id	4
-length	256
+length	10
 
-1   c _DebugPrintString(ptr) DebugPrintString(1)
\ No newline at end of file
+1   c _DebugPrintString(ptr) DebugPrintString(1)
diff --git a/user-ordinals b/user-ordinals
new file mode 100644
index 0000000..6df81ba
--- /dev/null
+++ b/user-ordinals
@@ -0,0 +1,413 @@
+  1   1  ab5d  MESSAGEBOX exported, shared data
+  2   3  0059  OLDEXITWINDOWS exported, shared data
+  3   5  0165  ENABLEOEMLAYER exported, shared data
+  4   5  01a2  DISABLEOEMLAYER exported, shared data
+  5   5  03a2  INITAPP exported, shared data
+  6   1  81d4  POSTQUITMESSAGE exported, shared data
+  7   5  0303  EXITWINDOWS exported, shared data
+  8   3  0232  WEP exported, shared data
+ 10   1  a8e8  SETTIMER exported, shared data
+ 11   1  744c  BEAR11 exported, shared data
+ 12   1  a905  KILLTIMER exported, shared data
+ 13   1  729f  GETTICKCOUNT exported, shared data
+ 14   1  7439  GETTIMERRESOLUTION exported
+ 15   1  729f  GETCURRENTTIME exported, shared data
+ 16   1  abc5  CLIPCURSOR exported, shared data
+ 17   1  abab  GETCURSORPOS exported, shared data
+ 18   1  a8d4  SETCAPTURE exported, shared data
+ 19   1  28bd  RELEASECAPTURE exported, shared data
+ 20   1  8161  SETDOUBLECLICKTIME exported, shared data
+ 21   1  8171  GETDOUBLECLICKTIME exported, shared data
+ 22   1  a875  SETFOCUS exported, shared data
+ 23   1  8183  GETFOCUS exported, shared data
+ 24  13  24e7  REMOVEPROP exported, shared data
+ 25   1  1c95  GETPROP exported, shared data
+ 26  13  24ca  SETPROP exported, shared data
+ 27  13  2504  ENUMPROPS exported, shared data
+ 28   1  1874  CLIENTTOSCREEN exported, shared data
+ 29   1  189e  SCREENTOCLIENT exported, shared data
+ 30   1  713c  WINDOWFROMPOINT exported, shared data
+ 31   1  192d  ISICONIC exported, shared data
+ 32   1  1825  GETWINDOWRECT exported, shared data
+ 33   1  1828  GETCLIENTRECT exported, shared data
+ 34   1  a919  ENABLEWINDOW exported, shared data
+ 35   1  1912  ISWINDOWENABLED exported, shared data
+ 36   1  ab25  GETWINDOWTEXT exported, shared data
+ 37   1  ab05  SETWINDOWTEXT exported, shared data
+ 38   1  ab49  GETWINDOWTEXTLENGTH exported, shared data
+ 39   1  a971  BEGINPAINT exported, shared data
+ 40   1  a991  ENDPAINT exported, shared data
+ 41   8  0f1b  CREATEWINDOW exported, shared data
+ 42  14  103e  SHOWWINDOW exported, shared data
+ 43  14  1088  CLOSEWINDOW exported, shared data
+ 44  14  1074  OPENICON exported, shared data
+ 45   7  1836  BRINGWINDOWTOTOP exported, shared data
+ 46   2  0dde  GETPARENT exported, shared data
+ 47   1  1802  ISWINDOW exported, shared data
+ 48   1  1bd3  ISCHILD exported, shared data
+ 49   1  1c28  ISWINDOWVISIBLE exported, shared data
+ 50   6  1f72  FINDWINDOW exported, shared data
+ 51   1  1a6c  BEAR51 exported, shared data
+ 52  14  03f0  ANYPOPUP exported, shared data
+ 53   8  0faa  DESTROYWINDOW exported, shared data
+ 54   1  ad20  ENUMWINDOWS exported, shared data
+ 55   1  ad03  ENUMCHILDWINDOWS exported, shared data
+ 56   7  17a6  MOVEWINDOW exported, shared data
+ 57   8  0e7c  REGISTERCLASS exported, shared data
+ 58   8  0eeb  GETCLASSNAME exported, shared data
+ 59   1  a949  SETACTIVEWINDOW exported, shared data
+ 60   1  818d  GETACTIVEWINDOW exported, shared data
+ 61  13  23dd  SCROLLWINDOW exported, shared data
+ 62  18  1a00  SETSCROLLPOS exported, shared data
+ 63  18  1a22  GETSCROLLPOS exported, shared data
+ 64  18  1a44  SETSCROLLRANGE exported, shared data
+ 65  18  1a66  GETSCROLLRANGE exported, shared data
+ 66   1  a60b  GETDC exported, shared data
+ 67   1  a5f7  GETWINDOWDC exported, shared data
+ 68   1  a61f  RELEASEDC exported, shared data
+ 69   1  ab97  SETCURSOR exported, shared data
+ 70   1  822c  SETCURSORPOS exported, shared data
+ 71   1  150c  SHOWCURSOR exported, shared data
+ 72   1  1d3d  SETRECT exported, shared data
+ 73   1  1d64  SETRECTEMPTY exported, shared data
+ 74   1  1d7d  COPYRECT exported, shared data
+ 75   1  1d9a  ISRECTEMPTY exported, shared data
+ 76   1  1dc0  PTINRECT exported, shared data
+ 77   1  1df4  OFFSETRECT exported, shared data
+ 78   1  1e19  INFLATERECT exported, shared data
+ 79   1  1e3e  INTERSECTRECT exported, shared data
+ 80   1  1ea6  UNIONRECT exported, shared data
+ 81   1  ac40  FILLRECT exported, shared data
+ 82   1  acd0  INVERTRECT exported, shared data
+ 83   1  ac88  FRAMERECT exported, shared data
+ 84  13  239c  DRAWICON exported, shared data
+ 85   6  1e91  DRAWTEXT exported, shared data
+ 86  13  0229  BEAR86 exported, shared data
+ 87  25  263b  DIALOGBOX exported, shared data
+ 88  25  26e5  ENDDIALOG exported, shared data
+ 89  24  09ce  CREATEDIALOG exported, shared data
+ 90  25  2804  ISDIALOGMESSAGE exported, shared data
+ 91  25  26f9  GETDLGITEM exported, shared data
+ 92  25  2741  SETDLGITEMTEXT exported, shared data
+ 93  25  2761  GETDLGITEMTEXT exported, shared data
+ 94  25  270d  SETDLGITEMINT exported, shared data
+ 95  25  2721  GETDLGITEMINT exported, shared data
+ 96  25  2789  CHECKRADIOBUTTON exported, shared data
+ 97  25  2775  CHECKDLGBUTTON exported, shared data
+ 98  25  279d  ISDLGBUTTONCHECKED exported, shared data
+ 99  37  0fdf  DLGDIRSELECT exported, shared data
+100  37  0fb1  DLGDIRLIST exported, shared data
+101  25  27b1  SENDDLGITEMMESSAGE exported, shared data
+102   2  0cd2  ADJUSTWINDOWRECT exported, shared data
+103  25  2853  MAPDIALOGRECT exported, shared data
+104   1  1bab  MESSAGEBEEP exported, shared data
+105   6  1f5e  FLASHWINDOW exported, shared data
+106   1  4f46  GETKEYSTATE exported, shared data
+107   1  a7fc  DEFWINDOWPROC exported, shared data
+108   1  a68f  GETMESSAGE exported, shared data
+109   1  a744  PEEKMESSAGE exported, shared data
+110   1  a7b7  POSTMESSAGE exported, shared data
+111   1  a786  SENDMESSAGE exported, shared data
+112   1  3dc4  WAITMESSAGE exported, shared data
+113   1  a6b2  TRANSLATEMESSAGE exported, shared data
+114   1  a6fb  DISPATCHMESSAGE exported, shared data
+115   1  3c37  REPLYMESSAGE exported, shared data
+116   1  a7e8  POSTAPPMESSAGE exported, shared data
+118   1  8214  REGISTERWINDOWMESSAGE exported, shared data
+119   1  81ae  GETMESSAGEPOS exported, shared data
+120   1  81a1  GETMESSAGETIME exported, shared data
+121   1  ad68  SETWINDOWSHOOK exported, shared data
+122   1  a827  CALLWINDOWPROC exported, shared data
+123   1  a85b  CALLMSGFILTER exported, shared data
+124   1  a95d  UPDATEWINDOW exported, shared data
+125   1  aa27  INVALIDATERECT exported, shared data
+126   1  aa67  INVALIDATERGN exported, shared data
+127   1  aa47  VALIDATERECT exported, shared data
+128   1  aa93  VALIDATERGN exported, shared data
+129   2  0d8e  GETCLASSWORD exported, shared data
+130   2  0da2  SETCLASSWORD exported, shared data
+131   2  0db6  GETCLASSLONG exported, shared data
+132   2  0dca  SETCLASSLONG exported, shared data
+133   2  0d06  GETWINDOWWORD exported, shared data
+134   2  0d1a  SETWINDOWWORD exported, shared data
+135   2  0d3a  GETWINDOWLONG exported, shared data
+136   2  0d4e  SETWINDOWLONG exported, shared data
+137  39  0710  OPENCLIPBOARD exported, shared data
+138  39  0643  CLOSECLIPBOARD exported, shared data
+139  39  0261  EMPTYCLIPBOARD exported, shared data
+140  39  00ee  GETCLIPBOARDOWNER exported, shared data
+141  39  02f4  SETCLIPBOARDDATA exported, shared data
+142  39  0425  GETCLIPBOARDDATA exported, shared data
+143  39  0075  COUNTCLIPBOARDFORMATS exported, shared data
+144  39  06bb  ENUMCLIPBOARDFORMATS exported, shared data
+145   1  8214  REGISTERCLIPBOARDFORMAT exported, shared data
+146  39  0752  GETCLIPBOARDFORMATNAME exported, shared data
+147  39  0724  SETCLIPBOARDVIEWER exported, shared data
+148  39  00f9  GETCLIPBOARDVIEWER exported, shared data
+149  39  0738  CHANGECLIPBOARDCHAIN exported, shared data
+150   9  1076  LOADMENU exported, shared data
+151   9  0806  CREATEMENU exported, shared data
+152   9  118e  DESTROYMENU exported, shared data
+153   9  10db  CHANGEMENU exported, shared data
+154   9  11a2  CHECKMENUITEM exported, shared data
+155   9  11c7  ENABLEMENUITEM exported, shared data
+156   9  1160  GETSYSTEMMENU exported, shared data
+157   9  10ad  GETMENU exported, shared data
+158   9  10c1  SETMENU exported, shared data
+159   9  11ec  GETSUBMENU exported, shared data
+160  10  30c3  DRAWMENUBAR exported, shared data
+161   9  10fd  GETMENUSTRING exported, shared data
+162  19  0b49  HILITEMENUITEM exported, shared data
+163  13  2521  CREATECARET exported, shared data
+164  13  0bfa  DESTROYCARET exported, shared data
+165  13  0db8  SETCARETPOS exported, shared data
+166  13  254f  HIDECARET exported, shared data
+167  13  2563  SHOWCARET exported, shared data
+168   3  24fd  SETCARETBLINKTIME exported, shared data
+169  13  0d8f  GETCARETBLINKTIME exported, shared data
+170   4  04c0  ARRANGEICONICWINDOWS exported, shared data
+171   2  0e3c  WINHELP exported, shared data
+172  23  0ceb  SWITCHTOTHISWINDOW exported, shared data
+173  12  169b  LOADCURSOR exported, shared data
+174  12  1712  LOADICON exported, shared data
+175  12  167e  LOADBITMAP exported, shared data
+176  12  17af  LOADSTRING exported, shared data
+177  12  1661  LOADACCELERATORS exported, shared data
+178  19  0af4  TRANSLATEACCELERATOR exported, shared data
+179   1  a92d  GETSYSTEMMETRICS exported, shared data
+180   1  8135  GETSYSCOLOR exported, shared data
+181  41  186f  SETSYSCOLORS exported, shared data
+182   1  74f4  BEAR182 exported, shared data
+183  13  0d9a  GETCARETPOS exported, shared data
+184   1  490e  QUERYSENDMESSAGE exported, shared data
+185  10  30d7  GRAYSTRING exported, shared data
+186   1  1cee  SWAPMOUSEBUTTON exported
+187   9  00fe  ENDMENU exported, shared data
+188   1  a772  SETSYSMODALWINDOW exported, shared data
+189   1  19d4  GETSYSMODALWINDOW exported, shared data
+190   1  a9b1  GETUPDATERECT exported, shared data
+191   1  abf9  CHILDWINDOWFROMPOINT exported, shared data
+192   1  3dba  INSENDMESSAGE exported, shared data
+193  39  0030  ISCLIPBOARDFORMATAVAILABLE exported, shared data
+194  37  104d  DLGDIRSELECTCOMBOBOX exported, shared data
+195  37  101f  DLGDIRLISTCOMBOBOX exported, shared data
+196   6  1f1d  TABBEDTEXTOUT exported, shared data
+197   6  1edc  GETTABBEDTEXTEXTENT exported, shared data
+198  15  0875  CASCADECHILDWINDOWS exported, shared data
+199  15  0956  TILECHILDWINDOWS exported, shared data
+200  40  09d9  OPENCOMM exported, shared data
+201  40  09f6  SETCOMMSTATE exported, shared data
+202  40  0a13  GETCOMMSTATE exported, shared data
+203  40  0acd  GETCOMMERROR exported, shared data
+204  40  0a3d  READCOMM exported, shared data
+205  40  0a85  WRITECOMM exported, shared data
+206  40  0b1d  TRANSMITCOMMCHAR exported, shared data
+207  40  0aaf  CLOSECOMM exported, shared data
+208  40  0b3b  SETCOMMEVENTMASK exported, shared data
+209  40  0b64  GETCOMMEVENTMASK exported, shared data
+210  40  0b8d  SETCOMMBREAK exported, shared data
+211  40  0bab  CLEARCOMMBREAK exported, shared data
+212  40  0a67  UNGETCOMMCHAR exported, shared data
+213  40  0af4  BUILDCOMMDCB exported, shared data
+214  40  0be7  ESCAPECOMMFUNCTION exported, shared data
+215  40  0bc9  FLUSHCOMM exported, shared data
+216  41  181e  USERSEEUSERDO exported, shared data
+217   9  0163  LOOKUPMENUHANDLE exported, shared data
+218  25  2667  DIALOGBOXINDIRECT exported, shared data
+219  24  09fa  CREATEDIALOGINDIRECT exported, shared data
+220   9  1093  LOADMENUINDIRECT exported, shared data
+221  13  2409  SCROLLDC exported, shared data
+222   1  a889  GETKEYBOARDSTATE exported, shared data
+223   1  a8a3  SETKEYBOARDSTATE exported, shared data
+224   1  ad54  GETWINDOWTASK exported, shared data
+225   1  ad37  ENUMTASKWINDOWS exported, shared data
+226   1  4983  LOCKINPUT exported, shared data
+227  19  0ac0  GETNEXTDLGGROUPITEM exported, shared data
+228  19  0ada  GETNEXTDLGTABITEM exported, shared data
+229   2  0df2  GETTOPWINDOW exported, shared data
+230   2  08f2  GETNEXTWINDOW exported, shared data
+231   1  4afb  GETSYSTEMDEBUGSTATE exported, shared data
+232   7  17ba  SETWINDOWPOS exported, shared data
+233  14  109c  SETPARENT exported, shared data
+234   1  ad9a  UNHOOKWINDOWSHOOK exported, shared data
+235   1  adc4  DEFHOOKPROC exported, shared data
+236   1  8197  GETCAPTURE exported, shared data
+237   1  a9d1  GETUPDATERGN exported, shared data
+238   1  a9fa  EXCLUDEUPDATERGN exported, shared data
+239  25  2690  DIALOGBOXPARAM exported, shared data
+240  25  26bc  DIALOGBOXINDIRECTPARAM exported, shared data
+241  24  0a29  CREATEDIALOGPARAM exported, shared data
+242  24  0a55  CREATEDIALOGINDIRECTPARAM exported, shared data
+243  25  0aa3  GETDIALOGBASEUNITS exported, shared data
+244   1  2094  EQUALRECT exported, shared data
+245  40  0c06  ENABLECOMMNOTIFICATION exported, shared data
+246   5  05de  EXITWINDOWSEXEC exported, shared data
+247   1  14ca  GETCURSOR exported, shared data
+248  39  0600  GETOPENCLIPBOARDWINDOW exported, shared data
+249   1  4f59  GETASYNCKEYSTATE exported, shared data
+250   9  113b  GETMENUSTATE exported, shared data
+251   2  0e5c  SENDDRIVERMESSAGE exported, shared data
+252  41  18cb  OPENDRIVER exported, shared data
+253  41  18f1  CLOSEDRIVER exported, shared data
+254  41  1905  GETDRIVERMODULEHANDLE exported, shared data
+255   2  0e70  DEFDRIVERPROC exported, shared data
+256   2  0eaf  GETDRIVERINFO exported, shared data
+257   2  0e84  GETNEXTDRIVER exported, shared data
+258   1  18c8  MAPWINDOWPOINTS exported, shared data
+259   7  00b5  BEGINDEFERWINDOWPOS exported, shared data
+260   7  17eb  DEFERWINDOWPOS exported, shared data
+261   7  1822  ENDDEFERWINDOWPOS exported, shared data
+262   2  0e1a  GETWINDOW exported, shared data
+263   9  1217  GETMENUITEMCOUNT exported, shared data
+264   9  1200  GETMENUITEMID exported, shared data
+265  14  1060  SHOWOWNEDPOPUPS exported, shared data
+266   1  56b0  SETMESSAGEQUEUE exported, shared data
+267  18  1aa0  SHOWSCROLLBAR exported, shared data
+268   1  21cd  GLOBALADDATOM exported, shared data
+269   1  2236  GLOBALDELETEATOM exported, shared data
+270   1  2251  GLOBALFINDATOM exported, shared data
+271   1  226f  GLOBALGETATOMNAME exported, shared data
+272   1  1930  ISZOOMED exported, shared data
+273  41  1716  CONTROLPANELINFO exported, shared data
+274  23  0d8e  GETNEXTQUEUEWINDOW exported, shared data
+275   1  77a7  REPAINTSCREEN exported, shared data
+276   1  6eea  LOCKMYTASK exported, shared data
+277  25  27c5  GETDLGCTRLID exported, shared data
+278   1  19ca  GETDESKTOPHWND exported, shared data
+279  41  0a51  OLDSETDESKPATTERN exported, shared data
+280   9  1174  SETSYSTEMMENU exported, shared data
+282   6  1f95  SELECTPALETTE exported, shared data
+283   6  1fd1  REALIZEPALETTE exported, shared data
+284  41  1740  GETFREESYSTEMRESOURCES exported, shared data
+285  41  1736  BEAR285 exported, shared data
+286   1  19ca  GETDESKTOPWINDOW exported, shared data
+287   2  0e06  GETLASTACTIVEPOPUP exported, shared data
+288   1  81bb  GETMESSAGEEXTRAINFO exported, shared data
+289   1  4b59  KEYBD_EVENT exported, shared data
+290   1  aabf  REDRAWWINDOW exported, shared data
+291   1  adde  SETWINDOWSHOOKEX exported, shared data
+292   1  ae14  UNHOOKWINDOWSHOOKEX exported, shared data
+293   1  ae35  CALLNEXTHOOKEX exported, shared data
+294  13  23c9  LOCKWINDOWUPDATE exported, shared data
+299   1  507a  MOUSE_EVENT exported, shared data
+301  26  0000  BOZOSLIVEHERE exported, shared data
+306  10  1587  BEAR306 exported, shared data
+308  25  27d9  DEFDLGPROC exported, shared data
+309   1  abdf  GETCLIPCURSOR exported, shared data
+314   1  09bc  SIGNALPROC exported, shared data
+319  13  246c  SCROLLWINDOWEX exported, shared data
+320   1  9325  SYSERRORBOX exported, shared data
+321   1  a8bd  SETEVENTHOOK exported, shared data
+322  41  0e6e  WINOLDAPPHACKOMATIC exported, shared data
+323   1  244f  GETMESSAGE2 exported, shared data
+324   1  7766  FILLWINDOW exported, shared data
+325   1  76eb  PAINTRECT exported, shared data
+326   6  02d2  GETCONTROLBRUSH exported, shared data
+331   1  4f36  ENABLEHARDWAREINPUT exported
+332   1  3df2  USERYIELD exported, shared data
+333   1  334e  ISUSERIDLE exported, shared data
+334   1  4fed  GETQUEUESTATUS exported, shared data
+335   1  501c  GETINPUTSTATE exported, shared data
+336  12  0deb  LOADCURSORICONHANDLER exported, shared data
+337   1  530a  GETMOUSEEVENTPROC exported, shared data
+341   1  1798  _FFFE_FARFRAME exported, shared data
+343   1  9c7c  GETFILEPORTNAME exported, shared data
+356  12  0ff1  LOADDIBCURSORHANDLER exported, shared data
+357  12  100d  LOADDIBICONHANDLER exported, shared data
+358   9  0fa0  ISMENU exported, shared data
+359   1  a64c  GETDCEX exported, shared data
+362   1  8a00  DCHOOK exported, shared data
+368  12  176f  COPYICON exported, shared data
+369  12  16f8  COPYCURSOR exported, shared data
+370  14  0fde  GETWINDOWPLACEMENT exported, shared data
+371  14  100e  SETWINDOWPLACEMENT exported, shared data
+372  12  1789  GETINTERNALICONHEADER exported, shared data
+373   1  20b8  SUBTRACTRECT exported, shared data
+400   3  2570  FINALUSERINIT exported, shared data
+402  39  077c  GETPRIORITYCLIPBOARDFORMAT exported, shared data
+403   8  0ea5  UNREGISTERCLASS exported, shared data
+404   8  0ec2  GETCLASSINFO exported, shared data
+406  12  16b8  CREATECURSOR exported, shared data
+407  12  172f  CREATEICON exported, shared data
+408  12  0000  CREATECURSORICONINDIRECT exported, shared data
+410   9  122e  INSERTMENU exported, shared data
+411   9  1250  APPENDMENU exported, shared data
+412   9  1294  REMOVEMENU exported, shared data
+413   9  12b6  DELETEMENU exported, shared data
+414   9  1272  MODIFYMENU exported, shared data
+415   9  0813  CREATEPOPUPMENU exported, shared data
+416   9  132a  TRACKPOPUPMENU exported, shared data
+417   9  07ab  GETMENUCHECKMARKDIMENSIONS exported, shared data
+418   9  12d8  SETMENUITEMBITMAPS exported, shared data
+420  16  055a  _WSPRINTF exported, shared data
+421  16  0518  WVSPRINTF exported, shared data
+422  37  0fff  DLGDIRSELECTEX exported, shared data
+423  37  106d  DLGDIRSELECTCOMBOBOXEX exported, shared data
+430  11  0359  LSTRCMP exported, shared data
+431  11  0365  ANSIUPPER exported, shared data
+432  11  0381  ANSILOWER exported, shared data
+433  11  0203  ISCHARALPHA exported, shared data
+434  11  0208  ISCHARALPHANUMERIC exported, shared data
+435  11  020d  ISCHARUPPER exported, shared data
+436  11  0212  ISCHARLOWER exported, shared data
+437  11  039d  ANSIUPPERBUFF exported, shared data
+438  11  03b7  ANSILOWERBUFF exported, shared data
+445  15  1a6e  DEFFRAMEPROC exported, shared data
+447  15  1a82  DEFMDICHILDPROC exported, shared data
+451  15  1aad  TRANSLATEMDISYSACCEL exported, shared data
+452   8  0f57  CREATEWINDOWEX exported, shared data
+454   2  0cec  ADJUSTWINDOWRECTEX exported, shared data
+455  12  052b  GETICONID exported, shared data
+456  12  0328  LOADICONHANDLER exported, shared data
+457  12  175b  DESTROYICON exported, shared data
+458  12  16e4  DESTROYCURSOR exported, shared data
+459  12  01bb  DUMPICON exported, shared data
+460  14  0a85  GETINTERNALWINDOWPOS exported, shared data
+461  14  0aef  SETINTERNALWINDOWPOS exported, shared data
+462  15  0276  CALCCHILDSCROLL exported, shared data
+463  15  053f  SCROLLCHILDREN exported, shared data
+464  14  0fbe  DRAGOBJECT exported, shared data
+465  14  035e  DRAGDETECT exported, shared data
+466   1  ac0d  DRAWFOCUSRECT exported, shared data
+470  11  02e7  STRINGFUNC exported, shared data
+471  11  035f  LSTRCMPI exported, shared data
+472  11  03d1  ANSINEXT exported, shared data
+473  11  03eb  ANSIPREV exported, shared data
+480   1  1d38  GETUSERLOCALOBJTYPE exported, shared data
+481   1  4d6c  HARDWARE_EVENT exported, shared data
+482  18  1ac2  ENABLESCROLLBAR exported, shared data
+483  41  1895  SYSTEMPARAMETERSINFO exported, shared data
+484   1  b664  __GP exported, shared data
+499  22  005c  WNETERRORTEXT exported, shared data
+501  22  0a68  WNETOPENJOB exported, shared data
+502  22  0a9d  WNETCLOSEJOB exported, shared data
+503  22  0b40  WNETABORTJOB exported, shared data
+504  22  0acc  WNETHOLDJOB exported, shared data
+505  22  0ae9  WNETRELEASEJOB exported, shared data
+506  22  0b06  WNETCANCELJOB exported, shared data
+507  22  0b23  WNETSETJOBCOPIES exported, shared data
+508  22  09ca  WNETWATCHQUEUE exported, shared data
+509  22  09f9  WNETUNWATCHQUEUE exported, shared data
+510  22  0a16  WNETLOCKQUEUEDATA exported, shared data
+511  22  0a4b  WNETUNLOCKQUEUEDATA exported, shared data
+512  22  0992  WNETGETCONNECTION exported, shared data
+513  22  08a6  WNETGETCAPS exported, shared data
+514  22  08c7  WNETDEVICEMODE exported, shared data
+515  22  08de  WNETBROWSEDIALOG exported, shared data
+516  22  0914  WNETGETUSER exported, shared data
+517  22  0940  WNETADDCONNECTION exported, shared data
+518  22  0975  WNETCANCELCONNECTION exported, shared data
+519  22  0b63  WNETGETERROR exported, shared data
+520  22  0b80  WNETGETERRORTEXT exported, shared data
+521  22  0847  WNETENABLE exported, shared data
+522  22  084e  WNETDISABLE exported, shared data
+523  22  0478  WNETRESTORECONNECTION exported, shared data
+524  22  0855  WNETWRITEJOB exported, shared data
+525  22  085e  WNETCONNECTDIALOG exported, shared data
+526  22  0867  WNETDISCONNECTDIALOG exported, shared data
+527  22  0870  WNETCONNECTIONDIALOG exported, shared data
+528  22  0879  WNETVIEWQUEUEDIALOG exported, shared data
+529  22  088b  WNETPROPERTYDIALOG exported, shared data
+530  22  0894  WNETGETDIRECTORYTYPE exported, shared data
+531  22  089d  WNETDIRECTORYNOTIFY exported, shared data
+532  22  0882  WNETGETPROPERTYTEXT exported, shared data
diff --git a/user.c b/user.c
index 7b3ceed..8f7ac82 100644
--- a/user.c
+++ b/user.c
@@ -1,4 +1,4 @@
-static char RCSId[] = "$Id$";
+static char RCSId[] = "$Id: user.c,v 1.1 1993/06/29 15:55:18 root Exp $";
 static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
 
 #include <stdio.h>
diff --git a/user.spec b/user.spec
index 152ef18..1bc3a9a 100644
--- a/user.spec
+++ b/user.spec
@@ -1,5 +1,9 @@
+# $Id: user.spec,v 1.2 1993/06/30 14:24:33 root Exp root $
+#
 name	user
 id	2
-length	256
+length	540
 
-5   pascal InitApp(word) USER_InitApp(1)
\ No newline at end of file
+5   pascal InitApp(word) USER_InitApp(1)
+175 pascal LoadBitmap(word ptr) RSC_LoadBitmap(1 2)
+176 pascal LoadString(word word ptr s_word) RSC_LoadString(1 2 3 4)
diff --git a/win87em.spec b/win87em.spec
new file mode 100644
index 0000000..5044d2d
--- /dev/null
+++ b/win87em.spec
@@ -0,0 +1,5 @@
+# $Id: win87em.spec,v 1.2 1993/06/30 14:24:33 root Exp root $
+#
+name	win87em
+id	5
+length	10
diff --git a/windows.h b/windows.h
new file mode 100644
index 0000000..7d89f66
--- /dev/null
+++ b/windows.h
@@ -0,0 +1,27 @@
+#ifndef WINDOWS_H
+#define WINDOWS_H
+
+typedef struct tagRGBQUAD
+{
+    unsigned char rgbBlue;
+    unsigned char rgbGreen;
+    unsigned char rgbRed;
+    unsigned char rgbReserved;
+};
+
+typedef struct tagBITMAPINFOHEADER
+{
+    unsigned long biSize;
+    unsigned long biWidth;
+    unsigned long biHeight;
+    unsigned short biPlanes;
+    unsigned short biBitCount;
+    unsigned long biCompression;
+    unsigned long biSizeImage;
+    unsigned long biXPelsPerMeter;
+    unsigned long biYPelsPerMeter;
+    unsigned long biClrUsed;
+    unsigned long biClrImportant;
+} BITMAPINFOHEADER;
+
+#endif
diff --git a/wine b/wine
deleted file mode 100755
index 57d7234..0000000
--- a/wine
+++ /dev/null
Binary files differ
diff --git a/wine.c b/wine.c
index 85d3844..3e53965 100644
--- a/wine.c
+++ b/wine.c
@@ -1,8 +1,5 @@
-/* $Id: exedump.c,v 1.1 1993/06/09 03:28:10 root Exp root $
- */
-/*
- * Copyright  Robert J. Amstadt, 1993
- */
+static char RCSId[] = "$Id: wine.c,v 1.1 1993/06/29 15:55:18 root Exp $";
+static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -20,13 +17,18 @@
 #include "prototypes.h"
 #include "dlls.h"
 
-extern int CallTo16(unsigned long csip, unsigned long sssp, unsigned short ds);
+extern int CallToInit16(unsigned long csip, unsigned long sssp, 
+			unsigned short ds);
 extern void CallTo32();
 
 unsigned short WIN_StackSize;
+unsigned short WIN_HeapSize;
 
 char **Argv;
 int Argc;
+struct mz_header_s *CurrentMZHeader;
+struct ne_header_s *CurrentNEHeader;
+int CurrentNEFile;
 
 /**********************************************************************
  *					DebugPrintString
@@ -34,7 +36,7 @@
 int
 DebugPrintString(char *str)
 {
-    fprintf(stderr, "%s", str);
+    printf("%s", str);
     return 0;
 }
 
@@ -119,8 +121,12 @@
     if (ne_header->header_type[0] != 'N' || ne_header->header_type[1] != 'E')
 	myerror("This is not a Windows program");
 
+    CurrentMZHeader = mz_header;
+    CurrentNEHeader = ne_header;
+    CurrentNEFile   = fd;
+
     WIN_StackSize = ne_header->stack_length;
-    
+    WIN_HeapSize = ne_header->local_heap_length;
 
     /*
      * Create segment selectors.
@@ -146,7 +152,6 @@
 	}
     }
 
-    close(fd);
     /*
      * Fixup stack and jump to start.
      */
@@ -156,7 +161,7 @@
     ss_reg = selector_table[ne_header->ss-1].selector;
     sp_reg = ne_header->sp;
 
-    rv = CallTo16(cs_reg << 16 | ip_reg, ss_reg << 16 | sp_reg, ds_reg);
+    rv = CallToInit16(cs_reg << 16 | ip_reg, ss_reg << 16 | sp_reg, ds_reg);
     printf ("rv = %x\n", rv);
 }
 
@@ -244,7 +249,8 @@
     if (i == 0)
 	i = 0x10000;
 
-    status = lseek(fd, seg->seg_data_offset * 512 + i, SEEK_SET);
+    status = lseek(fd, seg->seg_data_offset * 
+		       (1 << ne_header->align_shift_count) + i, SEEK_SET);
     n_entries = 0;
     read(fd, &n_entries, sizeof(short int));
     rep = (struct relocation_entry_s *)
@@ -273,6 +279,15 @@
 	    }
 	    
  	    dll_table = FindDLLTable(dll_name);
+	    if (dll_table == NULL)
+	    {
+		char s[80];
+		
+		sprintf(s, "Bad DLL name '%s'", dll_name);
+		myerror(s);
+		return -1;
+	    }
+
 	    ordinal = rep->target2;
 	    selector = dll_table[ordinal].selector;
 	    address  = (unsigned int) dll_table[ordinal].address;
@@ -289,6 +304,14 @@
 		return -1;
 	    }
  	    dll_table = FindDLLTable(dll_name);
+	    if (dll_table == NULL)
+	    {
+		char s[80];
+		
+		sprintf(s, "Bad DLL name '%s'", dll_name);
+		myerror(s);
+		return -1;
+	    }
 
 	    if (GetImportedName(fd, mz_header, ne_header, 
 				rep->target2, func_name) == NULL)
@@ -305,7 +328,48 @@
 	    break;
 	    
 	  case NE_RELTYPE_INTERNAL:
+	    if (rep->target1 == 0x00ff)
+	    {
+		address  = GetEntryPointFromOrdinal(fd, mz_header, ne_header,
+						    rep->target2);
+		selector = (address >> 16) & 0xffff;
+		address &= 0xffff;
+	    }
+	    else
+	    {
+		selector = selector_table[rep->target1-1].selector;
+		address  = rep->target2;
+	    }
+	    
+#ifdef DEBUG_FIXUP
+	    printf("%d: %04.4x:%04.4x\n", i + 1, selector, address);
+#endif
+	    break;
+
+	  case 7:
+	    /* Relocation type 7:
+	     *
+	     *    These appear to be used as fixups for the Windows
+	     * floating point emulator.  Let's just ignore them and
+	     * try to use the hardware floating point.  Linux should
+	     * successfully emulate the coprocessor if it doesn't
+	     * exist.
+	     */
+#ifdef DEBUG_FIXUP
+	    printf("%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,  ",
+		   i + 1, rep->address_type, rep->relocation_type, 
+		   rep->offset);
+	    printf("TARGET %04.4x %04.4x\n", rep->target1, rep->target2);
+#endif
+	    continue;
+	    
 	  default:
+#ifdef DEBUG_FIXUP
+	    printf("%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,  ",
+		   i + 1, rep->address_type, rep->relocation_type, 
+		   rep->offset);
+	    printf("TARGET %04.4x %04.4x\n", rep->target1, rep->target2);
+#endif
 	    free(rep1);
 	    return -1;
 	}
@@ -337,7 +401,23 @@
 
 	    break;
 	    
+	  case NE_RADDR_SELECTOR:
+	    do {
+		next_addr = *sp;
+		*sp     = (unsigned short) selector;
+		sp = (unsigned short *) ((char *) sel->base_addr + next_addr);
+	    } 
+	    while (next_addr != 0xffff);
+
+	    break;
+	    
 	  default:
+#ifdef DEBUG_FIXUP
+	    printf("%d: ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,  ",
+		   i + 1, rep->address_type, rep->relocation_type, 
+		   rep->offset);
+	    printf("TARGET %04.4x %04.4x\n", rep->target1, rep->target2);
+#endif
 	    free(rep1);
 	    return -1;
 	}
diff --git a/winetest/main.c b/winetest/main.c
deleted file mode 100755
index de7d738..0000000
--- a/winetest/main.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*	MAIN.C

- *

- *	PURPOSE: 

- *

- *	FUNCTIONS:

- *          WinMain() - Initializes app, calls all other functions.

- */

-

-#include <windows.h>

-#include <stdarg.h>

-#include <stdio.h>

-#include <stdlib.h>

-

-/*

- *	Globals

- */

-char	szAppName[] = "WineTest";

-

-extern long FAR PASCAL WineTestWndProc(HWND hwnd, unsigned message,

-                                       WORD wParam, LONG lParam);

-/* extern void FAR __cdecl DebugPrintString(const char FAR *str); */

-

-/*						WinMain

- */

-int PASCAL 

-WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine, int cmdShow)

-{

-    DebugPrintString("Hello\n");

-

-    return 0;

-#if 0    

-    HWND	hwnd;

-    MSG		msg;

-    WNDCLASS	wndclass;

-

-    if (hPrevInstance)

-    {

-	MessageBox(NULL, "This application is already running.", szAppName, 

-			MB_OK | MB_ICONEXCLAMATION | MB_SYSTEMMODAL);

-	return NULL;

-    }

-

-    wndclass.style		= CS_HREDRAW | CS_VREDRAW;

-    wndclass.lpfnWndProc	= WineTestWndProc;

-    wndclass.cbClsExtra		= 0;

-    wndclass.cbWndExtra		= 0;

-    wndclass.hInstance		= hInstance;

-    wndclass.hIcon		= LoadIcon(NULL, IDI_APPLICATION);

-    wndclass.hCursor		= LoadCursor(NULL, IDC_ARROW);

-    wndclass.hbrBackground	= GetStockObject(WHITE_BRUSH);

-    wndclass.lpszMenuName	= "MainMenu";

-    wndclass.lpszClassName	= szAppName;

-

-    RegisterClass(&wndclass);

-

-    hwnd = CreateWindow(szAppName, "Wine Tester",

-			WS_OVERLAPPEDWINDOW,

-			CW_USEDEFAULT,

-			CW_USEDEFAULT,

-			CW_USEDEFAULT,

-			CW_USEDEFAULT,

-			NULL, 

-    			NULL,

-			hInstance, 

-			NULL);

-    ShowWindow(hwnd, cmdShow);

-    UpdateWindow(hwnd);

-

-    while (GetMessage(&msg, NULL, NULL, NULL))

-    {

-        TranslateMessage((LPMSG) &msg);

-	DispatchMessage((LPMSG) &msg);

-    }

-

-    return msg.wParam;

-#endif /* 0 */

-}

-

-

-/*						WineTestWndProc

- */

-long FAR PASCAL 

-WineTestWndProc(HWND hwnd, unsigned message, WORD wParam, LONG lParam)

-{

-    static HANDLE hInstance;

-    FARPROC DlgProcInst;

-    LONG parm;

-

-    switch (message)

-    {

-	case WM_CREATE:

-	    hInstance = ((LPCREATESTRUCT) lParam)->hInstance;

-	    return 0;

-

-        case WM_DESTROY:

-            PostQuitMessage(0);

-            return 0;

-    }

-

-    return DefWindowProc(hwnd, message, wParam, lParam);

-}

diff --git a/winetest/makefile b/winetest/makefile
deleted file mode 100755
index 5f111dd..0000000
--- a/winetest/makefile
+++ /dev/null
@@ -1,47 +0,0 @@
-####################################################################

-#

-#   PPI standard windows makefile

-#

-####################################################################

-

-####################################################################

-#

-#   Compiler options

-#

-AFLAGS=/ML /LA

-CFLAGS=-AM -Ozaxb2 -Gr -G2 -Zpei -W3 -DWINVER=0x0301

-LFLAGS=/CO

-

-####################################################################

-#

-#   Object files and target

-#

-OBJS=main.obj

-DIALOGS=

-TARGET=winetest

-

-####################################################################

-#

-#   Standard rules

-#

-ROOTS=$(OBJS:.obj=)

-

-all: $(TARGET).exe

-

-version:

-	coall -r$(RELEASE)

-	$(MAKE) all

-

-$(TARGET).res: $(TARGET).rc $(TARGET).h $(DIALOGS)

-	rc -r $(TARGET).rc

-

-$(TARGET).exe: $(TARGET).res $(TARGET).def $(TARGET).h $(OBJS)

-        link @<<

-$(ROOTS) /NOD $(LFLAGS)

-$@

-$(TARGET) /MAP:FULL

-libw slibcewn oldnames

-$(TARGET).def

-<<

-	rc -30 $(TARGET).res

-

diff --git a/winetest/winetest.def b/winetest/winetest.def
deleted file mode 100755
index bd9dbcc..0000000
--- a/winetest/winetest.def
+++ /dev/null
@@ -1,11 +0,0 @@
-NAME	     WINETEST

-

-DESCRIPTION  'Wine Tester'

-EXETYPE      WINDOWS

-STUB	     'WINSTUB.EXE'

-CODE	     PRELOAD MOVEABLE DISCARDABLE

-DATA	     PRELOAD MOVEABLE SINGLE 

-HEAPSIZE     8192

-STACKSIZE    8192

-EXPORTS      WineTestWndProc

-IMPORTS      UNIXLIB._DebugPrintString

diff --git a/winetest/winetest.h b/winetest/winetest.h
deleted file mode 100755
index c280412..0000000
--- a/winetest/winetest.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/*  $Id$

- */

diff --git a/winetest/winetest.rc b/winetest/winetest.rc
deleted file mode 100755
index af8228e..0000000
--- a/winetest/winetest.rc
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <windows.h>

-

-MainMenu MENU

-BEGIN

-    POPUP "&File"

-    BEGIN

-        MENUITEM "E&xit",               	100

-        MENUITEM SEPARATOR

-        MENUITEM "&About...",           	101

-    END

-END