/*
* Extensions: P. Felber
*/
-
#define VERSION "V01.75"
/*
* Case Sensitivity Flag
*/
-#define CASE_SENSITIVE 0
+#define CASE_SENSITIVE 1
/*)Module asmlnk.h
*
#define OTHERSYSTEM
#endif
+/*
+ * PATH_MAX
+ */
+#include <limits.h>
+#ifndef PATH_MAX /* POSIX, but not required */
+ #if defined(__BORLANDC__) || defined(_MSC_VER)
+ #include <stdlib.h>
+ #define PATH_MAX _MAX_PATH
+ #else
+ #define PATH_MAX 255 /* define a reasonable value */
+ #endif
+#endif
+
/*
* This file defines the format of the
* relocatable binary file.
*/
#ifdef SDK
-#define NCPS 32 /* characters per symbol */
+#define NCPS 80 /* characters per symbol. Used to be 32... */
#else /* SDK */
#define NCPS 8 /* characters per symbol */
#endif /* SDK */
/* #define NCPS 32 */ /* characters per symbol */
#define NDATA 16 /* actual data */
-#define NINPUT 128 /* Input buffer size */
+#define NINPUT PATH_MAX /* Input buffer size */
#define NHASH 64 /* Buckets in hash table */
#define HMASK 077 /* Hash mask */
#define NLPP 60 /* Lines per page */
#define NTXT 16 /* T values */
-#define FILSPC 80 /* File spec length */
+#define FILSPC PATH_MAX /* File spec length */
/*
* The "R_" relocation constants define values used in
/*
* Area types
*/
-#define A_CON 000 /* concatenate */
-#define A_OVR 004 /* overlay */
-#define A_REL 000 /* relocatable */
-#define A_ABS 010 /* absolute */
-#define A_NOPAG 000 /* non-paged */
-#define A_PAG 020 /* paged */
+#define A_CON 0000 /* concatenate */
+#define A_OVR 0004 /* overlay */
+#define A_REL 0000 /* relocatable */
+#define A_ABS 0010 /* absolute */
+#define A_NOPAG 0000 /* non-paged */
+#define A_PAG 0020 /* paged */
/*
* File types
*/
+#define F_INV 0 /* invalid */
#define F_STD 1 /* stdin */
#define F_LNK 2 /* File.lnk */
#define F_REL 3 /* File.rel */
/*
* General assembler address type
*/
-typedef unsigned int addr_t;
+typedef unsigned int Addr_T;
/*
* The structures of head, area, areax, and sym are created
{
struct area *a_ap; /* Area link */
struct areax *a_axp; /* Area extension link */
- addr_t a_addr; /* Beginning address of area */
- addr_t a_size; /* Total size of the area */
+ Addr_T a_addr; /* Beginning address of area */
+ Addr_T a_size; /* Total size of the area */
char a_type; /* Area subtype */
char a_flag; /* Flag byte */
char a_id[NCPS]; /* Name */
struct areax *a_axp; /* Area extension link */
struct area *a_bap; /* Base area link */
struct head *a_bhp; /* Base header link */
- addr_t a_addr; /* Beginning address of section */
- addr_t a_size; /* Size of the area in section */
+ Addr_T a_addr; /* Beginning address of section */
+ Addr_T a_size; /* Size of the area in section */
};
/*
struct areax *s_axp; /* Symbol area link */
char s_type; /* Symbol subtype */
char s_flag; /* Flag byte */
- addr_t s_addr; /* Address */
+ Addr_T s_addr; /* Address */
char s_id[NCPS]; /* Name */
};
{
struct area *s_area; /* Paged Area link */
struct areax *s_areax; /* Paged Area Extension Link */
- addr_t s_addr; /* Page address offset */
+ Addr_T s_addr; /* Page address offset */
};
/*
{
int aindex; /* Linking area */
int mode; /* Relocation mode */
- addr_t rtbase; /* Base address in section */
+ Addr_T rtbase; /* Base address in section */
int rindex; /* Area/Symbol reloaction index */
- addr_t rval; /* Area/Symbol offset value */
+ Addr_T rval; /* Area/Symbol offset value */
};
/*
char *libspc;
char *relfil;
char *filspc;
+ long offset; /*>=0 if rel file is embedded in a lib file at this offset*/
};
/*
extern char rb[NINPUT]; /* LST file text line being
* address relocated
*/
-extern char ctype[]; /* array of character types, one per
+extern unsigned char ctype[]; /* array of character types, one per
* ASCII character
*/
+extern char sdccopt[NINPUT];
+extern char sdccopt_module[NINPUT];
+extern char curr_module[NINPUT];
+
/*
* Character Type Definitions
*/
extern struct lfile *filep; /* The pointers (lfile *) filep,
* (lfile *) cfp, and (FILE *) sfp
* are used in conjunction with
- * the routine getline() to read
+ * the routine lk_getline() to read
* asmlnk commands from
* (1) the standard input or
* (2) or a command file
extern int rtcnt; /* count of elements in the
* rtval[] and rtflg[] arrays
*/
-extern addr_t rtval[]; /* data associated with relocation
+extern Addr_T rtval[]; /* data associated with relocation
*/
extern int rtflg[]; /* indicates if rtval[] value is
* to be sent to the output file.
extern char get();
extern VOID getfid();
extern VOID getid();
-extern int getline();
+extern int lk_getline();
extern int getmap();
extern char getnb();
extern int more();
extern VOID skip();
extern VOID unget();
+extern VOID chop_crlf();
/* lkarea.c */
extern VOID lkparea();
extern int symeq();
extern VOID syminit();
extern VOID symmod();
-extern addr_t symval();
+extern Addr_T symval();
/* lkeval.c */
extern int digit();
-extern addr_t eval();
-extern addr_t expr();
+extern Addr_T eval();
+extern Addr_T expr();
extern int oprio();
-extern addr_t term();
+extern Addr_T term();
/* lklist.c */
extern int dgt();
extern VOID slew();
/* lkrloc.c */
-extern addr_t adb_b();
-extern addr_t adb_hi();
-extern addr_t adb_lo();
-extern addr_t adw_w();
-extern addr_t adw_hi();
-extern addr_t adw_lo();
-extern addr_t evword();
+extern Addr_T adb_b();
+extern Addr_T adb_hi();
+extern Addr_T adb_lo();
+extern Addr_T adw_w();
+extern Addr_T adw_hi();
+extern Addr_T adw_lo();
+extern Addr_T evword();
extern VOID rele();
extern VOID reloc();
extern VOID relt();
extern VOID prntval();
/* lklibr.c */
-extern VOID addfile();
+extern int addfile();
extern VOID addlib();
extern VOID addpath();
extern int fndsym();
/* lkihx.c */
extern VOID ihx();
+
+/* lkgb.h */
+VOID gb(int in);
+VOID gg(int in);
+