Unified · Split
| @@ -5,7 +5,15 @@ · 4 unmodified lines | ||
| 5 | 5 | |
| 6 | 6 | typedef vlong int64; |
| 7 | 7 | |
| 8 | +/* | |
| 9 | + * basic types in all loaders | |
| 10 | + */ | |
| 11 | + | |
| 12 | +typedef struct Adr Adr; | |
| 8 | 13 | typedef struct Auto Auto; |
| 14 | +typedef struct Count Count; | |
| 15 | +typedef struct Ieee Ieee; | |
| 16 | +typedef struct Prog Prog; | |
| 9 | 17 | typedef struct Sym Sym; |
| 10 | 18 | |
| 11 | 19 | #ifndef EXTERN |
| @@ -14,7 +22,9 @@ typedef struct Sym Sym; · 2 unmodified lines | ||
| 14 | 22 | |
| 15 | 23 | #define LIBNAMELEN 300 |
| 16 | 24 | |
| 17 | −#define SIGNINTERN (1729*325*1729) | |
| 25 | +#define P ((Prog*)0) | |
| 26 | +#define S ((Sym*)0) | |
| 27 | +#define TNAME (curtext&&curtext->from.sym?curtext->from.sym->name:noname) | |
| 18 | 28 | |
| 19 | 29 | struct Auto |
| 20 | 30 | { |
| @@ -24,10 +34,122 @@ struct Auto · 3 unmodified lines | ||
| 24 | 34 | short type; |
| 25 | 35 | }; |
| 26 | 36 | |
| 37 | +struct Count | |
| 38 | +{ | |
| 39 | + long count; | |
| 40 | + long outof; | |
| 41 | +}; | |
| 42 | + | |
| 43 | +enum | |
| 44 | +{ | |
| 45 | + | |
| 46 | + STRINGSZ = 200, | |
| 47 | + NHASH = 10007, | |
| 48 | + NHUNK = 100000, | |
| 49 | + MAXIO = 8192, | |
| 50 | + MAXHIST = 20, /* limit of path elements for history symbols */ | |
| 51 | +}; | |
| 52 | + | |
| 53 | +#define SIGNINTERN (1729*325*1729) /* signature of internal functions such as _div */ | |
| 54 | + | |
| 55 | +EXTERN union | |
| 56 | +{ | |
| 57 | + struct | |
| 58 | + { | |
| 59 | + uchar obuf[MAXIO]; /* output buffer */ | |
| 60 | + uchar ibuf[MAXIO]; /* input buffer */ | |
| 61 | + } u; | |
| 62 | + char dbuf[1]; | |
| 63 | +} buf; | |
| 64 | + | |
| 65 | +#define cbuf u.obuf | |
| 66 | +#define xbuf u.ibuf | |
| 67 | + | |
| 68 | +EXTERN int cbc; | |
| 69 | +EXTERN uchar* cbp; | |
| 70 | +EXTERN int cout; | |
| 71 | +EXTERN char debug[128]; | |
| 72 | +EXTERN char fnuxi4[4]; | |
| 73 | +EXTERN char fnuxi8[8]; | |
| 74 | +EXTERN Sym* hash[NHASH]; | |
| 75 | +EXTERN Sym* histfrog[MAXHIST]; | |
| 76 | +EXTERN int histfrogp; | |
| 77 | +EXTERN int histgen; | |
| 78 | +EXTERN char* library[50]; | |
| 79 | +EXTERN char* libraryobj[50]; | |
| 80 | +EXTERN int libraryp; | |
| 81 | +EXTERN int xrefresolv; | |
| 82 | +EXTERN char inuxi1[1]; | |
| 83 | +EXTERN char inuxi2[2]; | |
| 84 | +EXTERN char inuxi4[4]; | |
| 85 | +EXTERN uchar inuxi8[8]; | |
| 86 | +EXTERN char* thestring; | |
| 87 | +EXTERN char thechar; | |
| 88 | + | |
| 89 | +EXTERN int doexp, dlm; | |
| 90 | +EXTERN int imports, nimports; | |
| 91 | +EXTERN int exports, nexports; | |
| 92 | +EXTERN char* EXPTAB; | |
| 93 | +EXTERN Prog undefp; | |
| 94 | + | |
| 95 | +#define UP (&undefp) | |
| 96 | + | |
| 97 | +void addhist(long, int); | |
| 98 | +void addlib(char*); | |
| 27 | 99 | void addlibpath(char*); |
| 100 | +void addlibroot(void); | |
| 101 | +vlong atolwhex(char*); | |
| 102 | +Prog* brchain(Prog*); | |
| 103 | +Prog* brloop(Prog*); | |
| 104 | +void cflush(void); | |
| 105 | +void ckoff(Sym*, long); | |
| 106 | +void collapsefrog(Sym*); | |
| 107 | +void cput(int); | |
| 108 | +void diag(char*, ...); | |
| 109 | +void errorexit(void); | |
| 110 | +double cputime(void); | |
| 111 | +void dodata(void); | |
| 112 | +void export(void); | |
| 28 | 113 | int fileexists(char*); |
| 114 | +int find1(long, int); | |
| 115 | +char* findlib(char*); | |
| 29 | 116 | char* findlib(char*); |
| 117 | +void follow(void); | |
| 118 | +void gethunk(void); | |
| 119 | +long hunkspace(void); | |
| 30 | 120 | uchar* readsome(int, uchar*, uchar*, uchar*, int); |
| 31 | −void collapsefrog(Sym*); | |
| 32 | −void addlib(char*); | |
| 33 | −void addlibroot(void); | |
| 121 | +void* halloc(usize); | |
| 122 | +void histtoauto(void); | |
| 123 | +double ieeedtod(Ieee*); | |
| 124 | +long ieeedtof(Ieee*); | |
| 125 | +void import(void); | |
| 126 | +int isobjfile(char*); | |
| 127 | +void loadlib(void); | |
| 128 | +Sym* lookup(char*, int); | |
| 129 | +void mkfwd(void); | |
| 130 | +void* mysbrk(ulong); | |
| 131 | +void nopstat(char*, Count*); | |
| 132 | +void objfile(char*); | |
| 133 | +void patch(void); | |
| 134 | +void prasm(Prog*); | |
| 135 | +Prog* prg(void); | |
| 136 | +void readundefs(char*, int); | |
| 137 | +uchar* readsome(int, uchar*, uchar*, uchar*, int); | |
| 138 | +void readundefs(char*, int); | |
| 139 | +vlong rnd(vlong, long); | |
| 140 | +void strnput(char*, int); | |
| 141 | +void undef(void); | |
| 142 | +void undefsym(Sym*); | |
| 143 | +void xdefine(char*, int, long); | |
| 144 | +void xfol(Prog*); | |
| 145 | +void zerosig(char*); | |
| 146 | + | |
| 147 | +#pragma varargck type "A" int | |
| 148 | +#pragma varargck type "A" uint | |
| 149 | +#pragma varargck type "C" int | |
| 150 | +#pragma varargck type "D" Adr* | |
| 151 | +#pragma varargck type "N" Adr* | |
| 152 | +#pragma varargck type "P" Prog* | |
| 153 | +#pragma varargck type "S" char* | |
| 154 | + | |
| 155 | +#pragma varargck argpos diag 1 | |