⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm0.h

📁 坦尼保姆
💻 H
字号:
/* $Header: comm0.h,v 2.11 91/12/17 14:54:56 ceriel Exp $ *//* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". *//* @(#)comm0.h	1.8 *//* * All preprocessor based options/constants/functions *//* ========== ON/OFF options (use #define in mach0.c) ========== *//* * The following options are available, to be set/removed in "mach0.c": *	THREE_PASS:	three passes needed for branch optimization *	BYTES_REVERSED:	lowest target address for word high-order byte *	WORDS_REVERSED:	lowest target address for long high-order byte *	LISTING:	include listing facilities *	RELOCATION:	relocatable code generated *	DEBUG:		for debugging purposes only *	TMPDIR:		directory for temporary files *	ASLD:		combined assembler/linker *//* ========== constants (use #undef, #define in mach0.c) ========== *//* table sizes */#define	STRINGMAX	200	/* <= 256 */#define	SECTMAX		64#define	NAMEMAX		80#define	MEMINCR		2048/* Some character constants for parsing */#define	ASC_LPAR	'['#define	ASC_RPAR	']'#define	ASC_SQUO	'\''#define	ASC_DQUO	'"'#define	ASC_COMM	'!'#define	ISALPHA(c)	(isalpha(c) || (c) == '_' || (c) == '.')#define	ISALNUM(c)	(isalnum(c) || (c) == '_')#define	GENLAB		"I"		/* compiler generated labels */#define	valu_t		short		/* type of expression values */#define	ADDR_T		unsigned short	/* type of dot */#define	word_t		short		/* type of keyword value *//* * NOTE: word_t is introduced to reduce the tokenfile size for machines * with large expressions but smaller opcodes (68000) */#define	ALIGNWORD	1#define	ALIGNSECT	1#define	machstart(x)	/* nothing */#define	machfinish(x)	/* nothing */#define	SETBASE(sp)	((long)(sp)->s_base)#define	VALWIDTH	4/* ========== Machine dependent option/constant settings ========== */#include	"mach0.c"/* ========== default option setting ========== */#ifndef ASLD#ifndef RELOCATIONseparate linker only possible if relocation info produced#endif /* RELOCATION */#endif /* ASLD */#ifndef DEBUG#define	DEBUG	1#endif/* ========== Machine independent type declarations ========== */#ifdef _include_include	<stdio.h>_include	<ctype.h>_include	<signal.h>#else#include	<stdio.h>#include	<ctype.h>#include	<signal.h>#endif#ifdef ASLD#include	"arch.h"#endif#include	"out.h"#if DEBUG == 0#define	assert(ex)	/* nothing */#endif#if DEBUG == 1#define	assert(ex)	{if (!(ex)) assert1();}#endif#if DEBUG == 2#define	assert(ex)	{if (!(ex)) assert2(__FILE__, __LINE__);}#endif#define	CTRL(x) 	((x) & 037)#define	lowb(z)		((int)(z) & 0xFF)#define	loww(z)		((int)(z) & 0xFFFF)#define	fitb(x)		((((x) + 0x80) & ~((int)0xFF)) == 0)#define	fitw(x)		((((x) + 0x8000L) & ~0xFFFFL) == 0)#define	fit(x)		if (!(x)) nofit()#define	PASS_1		0#define	PASS_2		1#define	PASS_3		2#ifdef THREE_PASS#define	PASS_SYMB	(pass != PASS_1)#define	PASS_RELO	(pass != PASS_1)#else#define	PASS_SYMB	1#define	PASS_RELO	1#endif /* THREE_PASS */#ifdef ASLD#define	RELOMOVE(a,b)	/* empty */#else#define	RELOMOVE(a,b)	{a = b; b = 0;}#endif/* symbol table management */#define	H_SIZE		307		/* hash size, must be od */#define	H_KEY		(0*H_SIZE)	/* key symbol headers */#define	H_LOCAL		(1*H_SIZE)	/* module symbol headers */#ifdef ASLD#define	H_GLOBAL	(2*H_SIZE)	/* external symbol headers */#define	H_TOTAL		(3*H_SIZE)#else#define	H_TOTAL		(2*H_SIZE)#endif/* numeric label table management */#define	FB_SIZE		10#define	FB_HEAD		(0*FB_SIZE)#define	FB_TAIL		(1*FB_SIZE)#define	FB_BACK		(2*FB_SIZE)#define	FB_FORW		(3*FB_SIZE)/* miscellaneous */#define	KEYDEFINE	0#define KEYSECT		12#define	DOTGAIN		DOTSCT->s_gain/* ========== type declarations ========== */struct expr_t {	short	typ;	valu_t	val;};typedef	struct expr_t	expr_t;struct item_t {	struct item_t *		i_next;	/* linked lists with same hash value */	short	i_type;	/*	 * the i_type field is used for two different purposes:	 *	- the token type for keywords, returned by yylex()	 *	- the symbol type for IDENT and FBSYM tokens	 */	valu_t	i_valu;		/* symbol value */	char	*i_name;	/* symbol name */};struct common_t {	struct common_t *		c_next;	struct item_t *c_it;#ifndef ASLD	valu_t	c_size;#endif};typedef struct common_t	common_t;typedef	struct item_t	item_t;struct sect_t {	short	s_flag;		/* some flag bits */	ADDR_T	s_base;		/* section base */	ADDR_T	s_size;		/* section size */	ADDR_T	s_comm;		/* length of commons */	ADDR_T	s_zero;		/* delayed emit1(0) */	ADDR_T	s_lign;		/* section alignment */	long	s_foff;		/* section file offset */	item_t	*s_item;	/* points to section name */#ifdef THREE_PASS	ADDR_T	s_gain;		/* gain in PASS_2 */#endif};typedef	struct sect_t	sect_t;/* ========== flag field bits ========== *//* s_flag bits: */#define	BASED		1	/* at fixed position *//* sflag bits: */#define	SYM_EXT		001	/* external symbols */#define	SYM_LOC		002	/* local symbols */#define	SYM_LAB		004	/* local, compiler-generated labels */#define	SYM_SMB		010	/* .symb symbols */#define	SYM_LIN		020	/* .line and .file */#define	SYM_SCT		040	/* section names */#define	SYM_DEF		073	/* default value *//* * extra type bits out of S_ETC, internal use only * S_VAR: *  - type not known at end of PASS_1 (S_VAR|S_UND) *  - value not known at end of PASS_2 (S_VAR|S_ABS) * S_DOT: *  - dot expression */#define	S_VAR		0x0200#define	S_DOT		0x0400/* should be tested by preprocessor * due to error in preprocessor it cannot * test performed at compiletime by a switch now * #if (S_ETC|S_COM|S_VAR|S_DOT) != S_ETC * incorrect type bits * #endif *//* parts of the a.out file */#define	PARTEMIT	0#define	PARTRELO	1#define	PARTNAME	2#define	PARTCHAR	3#define	PARTS		4#ifdef BYTES_REVERSED#ifdef WORDS_REVERSED#define MACHREL_BWR	(RELBR|RELWR)#else#define	MACHREL_BWR	(RELBR)#endif#else#ifdef WORDS_REVERSED#define	MACHREL_BWR	(RELWR)#else#define	MACHREL_BWR	(0)#endif#endifextern FILE *fopen();   /* some systems don't have this in stdio.h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -