home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d1xx
/
d171
/
sozobon-c
/
jas
/
jas.zoo
/
jas.h.orig
< prev
next >
Wrap
Text File
|
1988-11-09
|
3KB
|
163 lines
/*
* Copyright (c) 1988 by Sozobon, Limited. Author: Joseph M Treat
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to redistribute it freely, with the
* following restrictions:
* 1) No charge may be made other than reasonable charges for reproduction.
* 2) Modified versions must be clearly marked as such.
* 3) The authors are not responsible for any harmful consequences
* of using this software, even if they result from defects in it.
*/
#include <stdio.h>
#include <ctype.h>
#include <setjmp.h>
#define short int
typedef struct _sym {
struct _sym *next;
char *name;
long value;
unsigned short index;
unsigned short flags;
unsigned short access;
} SYM;
typedef struct {
struct _sym *psym;
long value;
} EXPR;
/*
* Flags for symbols
*/
#define UNK 0x0000
#define BSS 0x0100
#define TXT 0x0200
#define DAT 0x0400
#define SEGMT 0x0700
#define EXTERN 0x0800
#define GLOBAL 0x2000
#define EQUATED 0x4000
#define DEFINED 0x8000
typedef struct {
unsigned short mode;
unsigned char reg, inx;
EXPR expr;
} OPERAND;
typedef struct {
char mnemon[8];
unsigned short op0, op1;
char size;
char format[14];
unsigned char flags;
} INST;
typedef struct {
INST *inst;
OPERAND *op0, *op1;
short misc;
} STMT;
/*
* Flags for operand types
*/
#define O_NONE 0x0000
#define O_AN 0x0001
#define O_DN 0x0002
#define O_INDR 0x0004
#define O_DISP 0x0008
#define O_POST 0x0010
#define O_PRE 0x0020
#define O_INDX 0x0040
#define O_ABS 0x0080
#define O_PCRL 0x0100
#define O_PCIX 0x0200
#define O_IMM 0x0400
#define O_USP 0x0800
#define O_CCR 0x1000
#define O_SR 0x2000
#define O_REGS 0x4003
#define O_ALL 0x07ff
#define O_DMEM 0x00fc
#define O_DST 0x00fe
#define O_MEM 0x03fc
#define O_LAB 0x0380
#define O_STAT 0x03cc
#define O_WRT 0x00ec
#define O_RD 0x03dc
#define O_NAN 0x07fe
/*
* Flags for the size field
*/
#define S_B 0x01
#define S_W 0x02
#define S_L 0x04
#define S_BW S_B|S_W
#define S_BL S_B|S_L
#define S_WL S_W|S_L
#define S_BWL S_B|S_W|S_L
/*
* Flags for special actions and defaults
*/
#define F_B 0x01
#define F_W 0x02
#define F_L 0x04
#define F_TXT 0x08
#define F_Q 0x10
#define F_TV 0x20
#define F_MQ 0x40
#define F_PC 0x80
typedef struct _list {
struct _list *next;
union {
SYM *sym;
EXPR val;
} u;
} LIST;
/*
* Types of things that get generated
*/
#define GENSTMT 1
#define GENVALUE 2
#define GENRELOC 3
#define GENPCREL 4
#define GENBRNCH 5
#define CBLEN 512
typedef struct {
unsigned char nbits;
unsigned char action;
int line;
EXPR value;
} CBUF;
typedef struct _clist {
struct _clist *next;
short cnt, inx;
CBUF cblock[CBLEN];
} CLIST;
typedef struct _branch BRANCH;
struct _branch {
long where;
CBUF *cptr;
BRANCH *link;
};
#define ALLOC(n,t) ((t *) allocate( (unsigned) ( (n) * sizeof (t) ) ))
#define ALLO(t) ALLOC(1,t)
#define STRCPY(s) strcpy( ALLOC(1+strlen(s),char), s )
extern char *allocate(), *strcpy();