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

📄 vars.h

📁 早期freebsd实现
💻 H
字号:
/*- * Copyright (c) 1980, 1993 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)vars.h	8.1 (Berkeley) 6/6/93 */#include <stdio.h>/* * px - Berkeley Pascal interpreter * * Version 4.0, January 1981 * * Original version by Ken Thompson * * Substantial revisions by Bill Joy and Chuck Haley * November-December 1976 * * Rewritten for VAX 11/780 by Kirk McKusick * Fall 1978 * * Rewritten in ``C'' using libpc by Kirk McKusick * Winter 1981 * * Px is described in detail in the "PX 4.0 Implementation Notes" * The source code for px is in several major pieces: * *	int.c		C main program which reads in interpreter code *	interp.c	Driver including main interpreter loop and *			the interpreter instructions grouped by their *			positions in the interpreter table. *	utilities.c	Interpreter exit, backtrace, and runtime statistics. * * In addition there are several headers defining mappings for panic * names into codes, and a definition of the interpreter transfer * table. These are made by the script make.ed1 in this directory and  * the routine opc.c from ${PASCALDIR}. (see the makefile for details) */#define PXPFILE		"pmon.out"#define	BITSPERBYTE	8#define	BITSPERLONG	(BITSPERBYTE * sizeof(long))#define HZ		100#define NAMSIZ		76#define MAXFILES	32#define PREDEF		2#ifdef ADDR32#ifndef tahoe#define STDLVL		((struct iorec *)(0x7ffffff1))#define GLVL		((struct iorec *)(0x7ffffff0))#else tahoe#define STDLVL		((struct iorec *)(0xbffffff1))#define GLVL		((struct iorec *)(0xbffffff0))#endif tahoe#endif ADDR32#ifdef ADDR16#define STDLVL		((struct iorec *)(0xfff1))#define GLVL		((struct iorec *)(0xfff0))#endif ADDR16#define FILNIL		((struct iorec *)(0))#define INPUT		((struct iorec *)(&input))#define OUTPUT		((struct iorec *)(&output))#define ERR		((struct iorec *)(&_err))#define	PX	0	/* normal run of px */#define	PIX	1	/* load and go */#define	PIPE	2	/* bootstrap via a pipe */#define	PDX	3	/* invoked by the debugger "pdx" */#define releq 0#define relne 2#define rellt 4#define relgt 6#define relle 8#define relge 10typedef enum {FALSE, TRUE} bool;/* * interrupt and allocation routines */extern long createtime;extern char *PALLOC();extern char *malloc();extern long time();extern intr();extern memsize();extern syserr();extern liberr();/* * stack routines and structures */struct sze8 {	char element[8];};/* * emulated pc types */union progcntr {	char *cp;	unsigned char *ucp;	short *sp;	unsigned short *usp;	long *lp;	double *dbp;	struct hdr *hdrp;	struct sze8 *s8p;};/* * THE RUNTIME DISPLAY * * The entries in the display point to the active static block marks. * The first entry in the display is for the global variables, * then the procedure or function at level one, etc. * Each display entry points to a stack frame as shown: * *		base of stack frame *		  --------------- *		  |		| *		  | block mark  | *		  |		| *		  ---------------  <-- display entry "stp" points here *		  |             |  <-- display entry "locvars" points here *		  |   local	| *		  |  variables  | *		  |		| *		  --------------- *		  |		| *		  |  expression | *		  |  temporary  | *		  |  storage	| *		  |		| *		  - - - - - - - - * * The information in the block mark is thus at positive offsets from * the display.stp pointer entries while the local variables are at negative * offsets from display.locvars. The block mark actually consists of * two parts. The first part is created at CALL and the second at entry, * i.e. BEGIN. Thus: * *		------------------------- *		|			| *		|  Saved lino		| *		|  Saved lc		| *		|  Saved dp		| *		|			| *		------------------------- *		|			| *		|  Saved (dp)		| *		|			| *		|  Pointer to current 	| *		|   routine header info	| *		|			| *		|  Saved value of	| *		|   "curfile"		| *		|			| *		|  Empty tos value	| *		|			| *		------------------------- *//* * program variables */extern union display	_display;	/* runtime display */extern struct dispsave	*_dp;		/* ptr to active frame */extern long		_lino;		/* current line number */extern int		_argc;		/* number of passed args */extern char		**_argv;	/* values of passed args */extern bool		_nodump;	/* TRUE => no post mortum dump */extern long		_runtst;	/* TRUE => runtime tests */extern long		_mode;		/* execl by PX, PIPE, or PIX */extern long		_stlim;		/* statement limit */extern long		_stcnt;		/* statement count */extern long		_seed;		/* random number seed */extern char		*_maxptr;	/* maximum valid pointer */extern char		*_minptr;	/* minimum valid pointer */extern long		*_pcpcount;	/* pointer to pxp buffer */extern long		_cntrs;		/* number of counters */extern long		_rtns;		/* number of routine cntrs *//* * The file i/o routines maintain a notion of a "current file". * A pointer to this file structure is kept in "curfile". * * file structures */struct iorechd {	char		*fileptr;	/* ptr to file window */	long		lcount;		/* number of lines printed */	long		llimit;		/* maximum number of text lines */	FILE		*fbuf;		/* FILE ptr */	struct iorec	*fchain;	/* chain to next file */	struct iorec	*flev;		/* ptr to associated file variable */	char		*pfname;	/* ptr to name of file */	short		funit;		/* file status flags */	short		fblk;		/* index into active file table */	long		fsize;		/* size of elements in the file */	char		fname[NAMSIZ];	/* name of associated UNIX file */};struct iorec {	char		*fileptr;	/* ptr to file window */	long		lcount;		/* number of lines printed */	long		llimit;		/* maximum number of text lines */	FILE		*fbuf;		/* FILE ptr */	struct iorec	*fchain;	/* chain to next file */	struct iorec	*flev;		/* ptr to associated file variable */	char		*pfname;	/* ptr to name of file */	short		funit;		/* file status flags */	short		fblk;		/* index into active file table */	long		fsize;		/* size of elements in the file */	char		fname[NAMSIZ];	/* name of associated UNIX file */	char		buf[BUFSIZ];	/* I/O buffer */	char		window[1];	/* file window element */};/* * unit flags */#define	FDEF	0x80	/* 1 => reserved file name */#define	FTEXT	0x40	/* 1 => text file, process EOLN */#define	FWRITE	0x20	/* 1 => open for writing */#define	FREAD	0x10	/* 1 => open for reading */#define	TEMP	0x08	/* 1 => temporary file */#define	SYNC	0x04	/* 1 => window is out of sync */#define	EOLN	0x02	/* 1 => at end of line */#define	EOFF	0x01	/* 1 => at end of file *//* * file routines */extern struct iorec	*GETNAME();extern char		*MKTEMP();/* * file record variables */extern struct iorechd	_fchain;	/* head of active file chain */extern struct iorec	*_actfile[];	/* table of active files */extern long		_filefre;	/* last used entry in _actfile *//* * standard files */extern struct iorechd	input;extern struct iorechd	output;extern struct iorechd	_err;/* * Px execution profile array */#ifdef PROFILE#define	NUMOPS 256extern long _profcnts[NUMOPS];#endif PROFILE

⌨️ 快捷键说明

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