Split the build program in several files.
Renamed it 'winebuild' to avoid possible conflicts.
Cleaned up command-line parsing.
Make it understand -fPIC instead of -pic.
Merged call16.s and call32.s generated files.
diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h
new file mode 100644
index 0000000..38de5ea
--- /dev/null
+++ b/tools/winebuild/build.h
@@ -0,0 +1,174 @@
+/*
+ * Copyright 1993 Robert J. Amstadt
+ * Copyright 1995 Martin von Loewis
+ * Copyright 1995, 1996, 1997 Alexandre Julliard
+ * Copyright 1997 Eric Youngdale
+ * Copyright 1999 Ulrich Weigand
+ */
+
+#ifndef __WINE_BUILD_H
+#define __WINE_BUILD_H
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef NEED_UNDERSCORE_PREFIX
+# define PREFIX "_"
+#else
+# define PREFIX
+#endif
+
+#ifdef HAVE_ASM_STRING
+# define STRING ".string"
+#else
+# define STRING ".ascii"
+#endif
+
+#if defined(__GNUC__) && !defined(__svr4__)
+# define USE_STABS
+#else
+# undef USE_STABS
+#endif
+
+typedef enum
+{
+ TYPE_BYTE, /* byte variable (Win16) */
+ TYPE_WORD, /* word variable (Win16) */
+ TYPE_LONG, /* long variable (Win16) */
+ TYPE_PASCAL_16, /* pascal function with 16-bit return (Win16) */
+ TYPE_PASCAL, /* pascal function with 32-bit return (Win16) */
+ TYPE_ABS, /* absolute value (Win16) */
+ TYPE_REGISTER, /* register function */
+ TYPE_INTERRUPT, /* interrupt handler function (Win16) */
+ TYPE_STUB, /* unimplemented stub */
+ TYPE_STDCALL, /* stdcall function (Win32) */
+ TYPE_CDECL, /* cdecl function (Win32) */
+ TYPE_VARARGS, /* varargs function (Win32) */
+ TYPE_EXTERN, /* external symbol (Win32) */
+ TYPE_FORWARD, /* forwarded function (Win32) */
+ TYPE_NBTYPES
+} ORD_TYPE;
+
+typedef enum
+{
+ SPEC_INVALID,
+ SPEC_WIN16,
+ SPEC_WIN32
+} SPEC_TYPE;
+
+typedef enum
+{
+ SPEC_MODE_DLL,
+ SPEC_MODE_GUIEXE,
+ SPEC_MODE_CUIEXE
+} SPEC_MODE;
+
+typedef struct
+{
+ int n_values;
+ int *values;
+} ORD_VARIABLE;
+
+typedef struct
+{
+ int n_args;
+ char arg_types[32];
+ char link_name[80];
+} ORD_FUNCTION;
+
+typedef struct
+{
+ int value;
+} ORD_ABS;
+
+typedef struct
+{
+ char link_name[80];
+} ORD_EXTERN;
+
+typedef struct
+{
+ char link_name[80];
+} ORD_FORWARD;
+
+typedef struct
+{
+ ORD_TYPE type;
+ int ordinal;
+ int offset;
+ int lineno;
+ char name[80];
+ union
+ {
+ ORD_VARIABLE var;
+ ORD_FUNCTION func;
+ ORD_ABS abs;
+ ORD_EXTERN ext;
+ ORD_FORWARD fwd;
+ } u;
+} ORDDEF;
+
+ /* Offset of a structure field relative to the start of the struct */
+#define STRUCTOFFSET(type,field) ((int)&((type *)0)->field)
+
+ /* Offset of register relative to the start of the CONTEXT struct */
+#define CONTEXTOFFSET(reg) STRUCTOFFSET(CONTEXT86,reg)
+
+ /* Offset of register relative to the start of the STACK16FRAME struct */
+#define STACK16OFFSET(reg) STRUCTOFFSET(STACK16FRAME,reg)
+
+ /* Offset of register relative to the start of the STACK32FRAME struct */
+#define STACK32OFFSET(reg) STRUCTOFFSET(STACK32FRAME,reg)
+
+ /* Offset of the stack pointer relative to %fs:(0) */
+#define STACKOFFSET (STRUCTOFFSET(TEB,cur_stack))
+
+
+#define MAX_ORDINALS 2048
+#define MAX_IMPORTS 16
+
+/* global functions */
+
+extern void *xmalloc (size_t size);
+extern void *xrealloc (void *ptr, size_t size);
+extern char *xstrdup( const char *str );
+extern char *strupper(char *s);
+extern void fatal_error( const char *msg, ... );
+extern void dump_bytes( FILE *outfile, const unsigned char *data, int len, const char *label );
+
+extern void BuildGlue( FILE *outfile, FILE *infile );
+extern void BuildRelays( FILE *outfile );
+extern void BuildSpec16File( FILE *outfile );
+extern void BuildSpec32File( FILE *outfile );
+extern SPEC_TYPE ParseTopLevel( FILE *file );
+
+/* global variables */
+
+extern int current_line;
+extern int nb_entry_points;
+extern int nb_names;
+extern int nb_imports;
+extern int Base;
+extern int Limit;
+extern int DLLHeapSize;
+extern int UsePIC;
+extern int debugging;
+
+extern unsigned short code_selector;
+extern unsigned short data_selector;
+
+extern char DLLName[80];
+extern char DLLFileName[80];
+extern char DLLInitFunc[80];
+extern char rsrc_name[80];
+extern char *DLLImports[MAX_IMPORTS];
+extern const char *input_file_name;
+extern const char *output_file_name;
+
+extern ORDDEF EntryPoints[MAX_ORDINALS];
+extern ORDDEF *Ordinals[MAX_ORDINALS];
+extern ORDDEF *Names[MAX_ORDINALS];
+extern SPEC_MODE SpecMode;
+
+#endif /* __WINE_BUILD_H */