Initial revision
This commit is contained in:
		
							parent
							
								
									eb823929a1
								
							
						
					
					
						commit
						597d25decd
					
				
					 73 changed files with 3041 additions and 0 deletions
				
			
		
							
								
								
									
										14
									
								
								lang/pc/libpc/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								lang/pc/libpc/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| PC_TAIL=tail_pc.a | ||||
| 
 | ||||
| head: | ||||
| 	echo This Makefile needs arguments | ||||
| 
 | ||||
| clean: | ||||
| 	rm -f *.old | ||||
| 
 | ||||
| opr: | ||||
| 	make pr | opr | ||||
| 
 | ||||
| pr: | ||||
| 	@pr `echo * | sed s/$(PC_TAIL)//` | ||||
| 	@ar pv $(PC_TAIL) | pr -h $(PC_TAIL) | ||||
							
								
								
									
										11
									
								
								lang/pc/libpc/READ_ME
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								lang/pc/libpc/READ_ME
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| problems: | ||||
| - names of system call routines may clash with user routines | ||||
| - some modules in Pascal? | ||||
| - ttyio, stdio, pasio, unixio | ||||
| - mention all external references | ||||
| - list of routines and partitioning | ||||
| - size of sizes in asz,bcp,dis,new,opn,pac,unp: int or long ? | ||||
| 
 | ||||
| NOTE: | ||||
| The run files in mach/*/libpc show the actual usage of this | ||||
| library. | ||||
							
								
								
									
										22
									
								
								lang/pc/libpc/abi.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								lang/pc/libpc/abi.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| int _abi(i) int i; { | ||||
| 	return(i>=0 ? i : -i); | ||||
| } | ||||
							
								
								
									
										22
									
								
								lang/pc/libpc/abl.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								lang/pc/libpc/abl.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| long _abl(i) long i; { | ||||
| 	return(i>=0 ? i : -i); | ||||
| } | ||||
							
								
								
									
										22
									
								
								lang/pc/libpc/abr.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								lang/pc/libpc/abr.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| double _abr(r) double r; { | ||||
| 	return(r>=0 ? r : -r); | ||||
| } | ||||
							
								
								
									
										55
									
								
								lang/pc/libpc/arg.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								lang/pc/libpc/arg.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,55 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| /*
 | ||||
| /* function argc:integer; extern; */ | ||||
| /* function argv(i:integer):string; extern; */ | ||||
| /* procedure argshift; extern; */ | ||||
| /* function environ(i:integer):string; extern; */ | ||||
| 
 | ||||
| extern int	_pargc; | ||||
| extern char	**_pargv; | ||||
| extern char	**_penvp; | ||||
| 
 | ||||
| int argc() { | ||||
| 	return(_pargc); | ||||
| } | ||||
| 
 | ||||
| char *argv(i) { | ||||
| 	if (i >= _pargc) | ||||
| 		return(0); | ||||
| 	return(_pargv[i]); | ||||
| } | ||||
| 
 | ||||
| argshift() { | ||||
| 
 | ||||
| 	if (_pargc > 1) { | ||||
| 		--_pargc; | ||||
| 		_pargv++; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| char *environ(i) { | ||||
| 	char **p; char *q; | ||||
| 
 | ||||
| 	if (p = _penvp) | ||||
| 		while (q = *p++) | ||||
| 			if (i-- < 0) | ||||
| 				return(q); | ||||
| 	return(0); | ||||
| } | ||||
							
								
								
									
										32
									
								
								lang/pc/libpc/ass.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lang/pc/libpc/ass.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<em_abs.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern char	*_hol0(); | ||||
| extern		_trp(); | ||||
| 
 | ||||
| _ass(line,bool) int line,bool; { | ||||
| 
 | ||||
| 	if (bool==0) { | ||||
| 		LINO = line; | ||||
| 		_trp(EASS); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										28
									
								
								lang/pc/libpc/asz.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								lang/pc/libpc/asz.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| struct descr { | ||||
| 	int	low; | ||||
| 	int	diff; | ||||
| 	int	size; | ||||
| }; | ||||
| 
 | ||||
| int _asz(dp) struct descr *dp; { | ||||
| 	return(dp->size * (dp->diff + 1)); | ||||
| } | ||||
							
								
								
									
										91
									
								
								lang/pc/libpc/atn.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								lang/pc/libpc/atn.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| /*
 | ||||
| 	floating-point arctangent | ||||
| 
 | ||||
| 	atan returns the value of the arctangent of its | ||||
| 	argument in the range [-pi/2,pi/2]. | ||||
| 
 | ||||
| 	there are no error returns. | ||||
| 
 | ||||
| 	coefficients are #5077 from Hart & Cheney. (19.56D) | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| static double sq2p1	= 2.414213562373095048802e0; | ||||
| static double sq2m1	=  .414213562373095048802e0; | ||||
| static double pio2	= 1.570796326794896619231e0; | ||||
| static double pio4	=  .785398163397448309615e0; | ||||
| static double p4	=  .161536412982230228262e2; | ||||
| static double p3	=  .26842548195503973794141e3; | ||||
| static double p2	=  .11530293515404850115428136e4; | ||||
| static double p1	=  .178040631643319697105464587e4; | ||||
| static double p0	=  .89678597403663861959987488e3; | ||||
| static double q4	=  .5895697050844462222791e2; | ||||
| static double q3	=  .536265374031215315104235e3; | ||||
| static double q2	=  .16667838148816337184521798e4; | ||||
| static double q1	=  .207933497444540981287275926e4; | ||||
| static double q0	=  .89678597403663861962481162e3; | ||||
| 
 | ||||
| /*
 | ||||
| 	xatan evaluates a series valid in the | ||||
| 	range [-0.414...,+0.414...]. | ||||
| */ | ||||
| 
 | ||||
| static double | ||||
| xatan(arg) | ||||
| double arg; | ||||
| { | ||||
| 	double argsq; | ||||
| 	double value; | ||||
| 
 | ||||
| 	argsq = arg*arg; | ||||
| 	value = ((((p4*argsq + p3)*argsq + p2)*argsq + p1)*argsq + p0); | ||||
| 	value = value/(((((argsq + q4)*argsq + q3)*argsq + q2)*argsq + q1)*argsq + q0); | ||||
| 	return(value*arg); | ||||
| } | ||||
| 
 | ||||
| static double | ||||
| satan(arg) | ||||
| double arg; | ||||
| { | ||||
| 	if(arg < sq2m1) | ||||
| 		return(xatan(arg)); | ||||
| 	else if(arg > sq2p1) | ||||
| 		return(pio2 - xatan(1/arg)); | ||||
| 	else | ||||
| 		return(pio4 + xatan((arg-1)/(arg+1))); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
| 	atan makes its argument positive and | ||||
| 	calls the inner routine satan. | ||||
| */ | ||||
| 
 | ||||
| double | ||||
| _atn(arg) | ||||
| double arg; | ||||
| { | ||||
| 	if(arg>0) | ||||
| 		return(satan(arg)); | ||||
| 	else | ||||
| 		return(-satan(-arg)); | ||||
| } | ||||
							
								
								
									
										29
									
								
								lang/pc/libpc/bcp.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								lang/pc/libpc/bcp.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| int _bcp(sz,y,x) int sz; char *y,*x; { | ||||
| 
 | ||||
| 	while (--sz >= 0) { | ||||
| 		if (*x < *y) | ||||
| 			return(-1); | ||||
| 		if (*x++ > *y++) | ||||
| 			return(1); | ||||
| 	} | ||||
| 	return(0); | ||||
| } | ||||
							
								
								
									
										55
									
								
								lang/pc/libpc/bts.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								lang/pc/libpc/bts.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,55 @@ | |||
| # | ||||
| ; | ||||
| ; (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
| ; | ||||
| ;          This product is part of the Amsterdam Compiler Kit. | ||||
| ; | ||||
| ; Permission to use, sell, duplicate or disclose this software must be | ||||
| ; obtained in writing. Requests for such permissions may be sent to | ||||
| ; | ||||
| ;      Dr. Andrew S. Tanenbaum | ||||
| ;      Wiskundig Seminarium | ||||
| ;      Vrije Universiteit | ||||
| ;      Postbox 7161 | ||||
| ;      1007 MC Amsterdam | ||||
| ;      The Netherlands | ||||
| ; | ||||
| ;  | ||||
| 
 | ||||
| ; Author: J.W. Stevenson */ | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| #define	SIZE	0 | ||||
| #define	HIGH	EM_WSIZE | ||||
| #define	LOWB	2*EM_WSIZE | ||||
| #define	BASE	3*EM_WSIZE | ||||
| 
 | ||||
| ; _bts is called with four parameters: | ||||
| ;	- the initial set (BASE) | ||||
| ;	- low bound of range of bits (LOWB) | ||||
| ;	- high bound of range of bits (HIGH) | ||||
| ;	- set size in bytes (SIZE) | ||||
| 
 | ||||
|  exp $_bts | ||||
|  pro $_bts,0 | ||||
|  lal BASE	; address of initial set | ||||
|  lol SIZE | ||||
|  los EM_WSIZE	; load initial set | ||||
| 1 | ||||
|  lol LOWB	; low bound | ||||
|  lol HIGH	; high bound | ||||
|  bgt *2		; while low <= high | ||||
|  lol LOWB | ||||
|  lol SIZE | ||||
|  set ?		; create [low] | ||||
|  lol SIZE | ||||
|  ior ?		; merge with initial set | ||||
|  inl LOWB	; increment low bound | ||||
|  bra *1		; loop back | ||||
| 2 | ||||
|  lal BASE | ||||
|  lol SIZE | ||||
|  sts EM_WSIZE	; store result over initial set | ||||
|  ret 0 | ||||
|  end ? | ||||
							
								
								
									
										34
									
								
								lang/pc/libpc/buff.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lang/pc/libpc/buff.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_flush(); | ||||
| 
 | ||||
| /* procedure buff(var f:file of ?); */ | ||||
| 
 | ||||
| buff(f) struct file *f; { | ||||
| 	int sz; | ||||
| 
 | ||||
| 	if ((f->flags & (0377|WRBIT)) != (MAGIC|WRBIT)) | ||||
| 		return; | ||||
| 	_flush(f); | ||||
| 	sz = f->size; | ||||
| 	f->count = f->buflen = (sz>512 ? sz : 512-512%sz); | ||||
| } | ||||
							
								
								
									
										94
									
								
								lang/pc/libpc/catch.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								lang/pc/libpc/catch.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,94 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #include	<em_abs.h> | ||||
| #include	<em_path.h> | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| #define	MESLEN		30 | ||||
| 
 | ||||
| extern struct file	*_curfil; | ||||
| 
 | ||||
| extern int		_pargc; | ||||
| extern char		**_pargv; | ||||
| extern char		**_penvp; | ||||
| 
 | ||||
| extern char		*_hol0(); | ||||
| extern			_trp(); | ||||
| extern			exit(); | ||||
| extern int		open(); | ||||
| extern int		read(); | ||||
| extern int		write(); | ||||
| 
 | ||||
| /* Modified not to use a table of indices any more. This circumvents yet 
 | ||||
|    another point where byte order in words would make you lose. | ||||
|  */ | ||||
| 
 | ||||
| _catch(erno) unsigned erno; { | ||||
| 	char		*p,*q,**qq; | ||||
| 	unsigned	i; | ||||
| 	int		fd; | ||||
| 	char		*pp[8]; | ||||
| 	char		mes[MESLEN]; | ||||
| 	char		c; | ||||
| 
 | ||||
| 	qq = pp; | ||||
| 	if (p = FILN) | ||||
| 		*qq++ = p; | ||||
| 	else | ||||
| 		*qq++ = _pargv[0]; | ||||
| 	p = &("xxxxx: "[5]); | ||||
| 	if (i = LINO) { | ||||
| 		*qq++ = ", "; | ||||
| 		do | ||||
| 			*--p = i % 10 + '0'; | ||||
| 		while (i /= 10); | ||||
| 	} | ||||
| 	*qq++ = p; | ||||
| 	if ((erno & ~037) == 0140 && (_curfil->flags&0377)==MAGIC) {  | ||||
| 		/* file error */ | ||||
| 		*qq++ = "file "; | ||||
| 		*qq++ = _curfil->fname; | ||||
| 		*qq++ = ": "; | ||||
| 	} | ||||
| 	if ((fd=open(RTERR_PATH,0))<0) | ||||
| 		goto error; | ||||
| 	/* skip to correct message */ | ||||
| 	for(i=0;i<erno;i++) | ||||
| 		do if (read(fd,&c,1)!=1) | ||||
| 			goto error; | ||||
| 		while (c!= '\n'); | ||||
| 	if(read(fd,mes,MESLEN-1)<=0) | ||||
| 		goto error; | ||||
| 	mes[MESLEN-1]=0; | ||||
| 	for(i=0;i<MESLEN-1;i++) | ||||
| 		if(mes[i]=='\n') | ||||
| 			mes[i+1]=0; | ||||
| 	*qq++ = mes; | ||||
| 	*qq = 0; | ||||
| 	qq = pp; | ||||
| 	while (q = *qq++) { | ||||
| 		p = q; | ||||
| 		while (*p) | ||||
| 			p++; | ||||
| 		if (write(2,q,p-q) < 0) | ||||
| 			; | ||||
| 	} | ||||
| 	exit(erno); | ||||
| error: | ||||
| 	_trp(erno); | ||||
| } | ||||
							
								
								
									
										36
									
								
								lang/pc/libpc/clock.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								lang/pc/libpc/clock.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| /* function clock:integer; extern; */ | ||||
| 
 | ||||
| extern int	times(); | ||||
| 
 | ||||
| struct tbuf { | ||||
| 	long	utime; | ||||
| 	long	stime; | ||||
| 	long	cutime; | ||||
| 	long	cstime; | ||||
| }; | ||||
| 
 | ||||
| int clock() { | ||||
| 	struct tbuf t; | ||||
| 
 | ||||
| 	times(&t); | ||||
| 	return( (t.utime + t.stime) & 077777); | ||||
| } | ||||
							
								
								
									
										66
									
								
								lang/pc/libpc/cls.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								lang/pc/libpc/cls.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern struct file	*_curfil; | ||||
| extern			_trp(); | ||||
| extern			_flush(); | ||||
| extern			_outcpt(); | ||||
| extern int		close(); | ||||
| 
 | ||||
| _xcls(f) struct file *f; { | ||||
| 
 | ||||
| 	if ((f->flags & WRBIT) == 0) | ||||
| 		return; | ||||
| 	if ((f->flags & (TXTBIT|ELNBIT)) == TXTBIT) { | ||||
| #ifdef CPM | ||||
| 		*f->ptr = '\r'; | ||||
| 		_outcpt(f); | ||||
| #endif | ||||
| 		*f->ptr = '\n'; | ||||
| 		_outcpt(f); | ||||
| 	} | ||||
| 	_flush(f); | ||||
| } | ||||
| 
 | ||||
| _cls(f) struct file *f; { | ||||
| #ifdef MAYBE | ||||
| 	char *p; | ||||
| #endif | ||||
| 
 | ||||
| 	_curfil = f; | ||||
| 	if ((f->flags&0377) != MAGIC) | ||||
| 		return; | ||||
| #ifdef MAYBE | ||||
| 	p = f->bufadr; | ||||
| 	if (f->ptr < p) | ||||
| 		return; | ||||
| 	if (f->buflen <= 0) | ||||
| 		return; | ||||
| 	p += f->buflen; | ||||
| 	if (f->ptr >= p) | ||||
| 		return; | ||||
| #endif | ||||
| 	_xcls(f); | ||||
| 	if (close(f->ufd) != 0) | ||||
| 		_trp(ECLOSE); | ||||
| 	f->flags = 0; | ||||
| } | ||||
							
								
								
									
										104
									
								
								lang/pc/libpc/cvt.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								lang/pc/libpc/cvt.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,104 @@ | |||
| extern double	_fif(); | ||||
| 
 | ||||
| /*
 | ||||
|  *	_ecvt converts to decimal | ||||
|  *	the number of digits is specified by ndigit | ||||
|  *	decpt is set to the position of the decimal point | ||||
|  *	sign is set to 0 for positive, 1 for negative | ||||
|  */ | ||||
| 
 | ||||
| #define	NDIG	80 | ||||
| 
 | ||||
| static char* | ||||
| cvt(arg, ndigits, decpt, sign, eflag) | ||||
| double arg; | ||||
| int ndigits, *decpt, *sign, eflag; | ||||
| { | ||||
| 	register int r2; | ||||
| 	double fi, fj; | ||||
| 	register char *p, *p1; | ||||
| 	static char buf[NDIG]; | ||||
| 	int i;  /*!*/ | ||||
| 
 | ||||
| 	if (ndigits<0) | ||||
| 		ndigits = 0; | ||||
| 	if (ndigits>=NDIG-1) | ||||
| 		ndigits = NDIG-2; | ||||
| 	r2 = 0; | ||||
| 	*sign = 0; | ||||
| 	p = &buf[0]; | ||||
| 	if (arg<0) { | ||||
| 		*sign = 1; | ||||
| 		arg = -arg; | ||||
| 	} | ||||
| 	arg = _fif(arg, 1.0, &fi); | ||||
| 	/*
 | ||||
| 	 * Do integer part | ||||
| 	 */ | ||||
| 	if (fi != 0) { | ||||
| 		p1 = &buf[NDIG]; | ||||
| 		while (fi != 0) { | ||||
| 			i = (_fif(fi, 0.1, &fi) + 0.03) * 10; | ||||
| 			*--p1 = i + '0'; | ||||
| 			r2++; | ||||
| 		} | ||||
| 		while (p1 < &buf[NDIG]) | ||||
| 			*p++ = *p1++; | ||||
| 	} else if (arg > 0) { | ||||
| 		while ((fj = arg*10) < 1) { | ||||
| 			arg = fj; | ||||
| 			r2--; | ||||
| 		} | ||||
| 	} | ||||
| 	p1 = &buf[ndigits]; | ||||
| 	if (eflag==0) | ||||
| 		p1 += r2; | ||||
| 	*decpt = r2; | ||||
| 	if (p1 < &buf[0]) { | ||||
| 		buf[0] = '\0'; | ||||
| 		return(buf); | ||||
| 	} | ||||
| 	while (p<=p1 && p<&buf[NDIG]) { | ||||
| 		arg = _fif(arg, 10.0, &fj); | ||||
| 		i = fj; | ||||
| 		*p++ = i + '0'; | ||||
| 	} | ||||
| 	if (p1 >= &buf[NDIG]) { | ||||
| 		buf[NDIG-1] = '\0'; | ||||
| 		return(buf); | ||||
| 	} | ||||
| 	p = p1; | ||||
| 	*p1 += 5; | ||||
| 	while (*p1 > '9') { | ||||
| 		*p1 = '0'; | ||||
| 		if (p1>buf) { | ||||
| 			p1--; *p1 += 1; | ||||
| 		} else { | ||||
| 			*p1 = '1'; | ||||
| 			(*decpt)++; | ||||
| 			if (eflag==0) { | ||||
| 				if (p>buf) | ||||
| 					*p = '0'; | ||||
| 				p++; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	*p = '\0'; | ||||
| 	return(buf); | ||||
| } | ||||
| 
 | ||||
| char* | ||||
| _ecvt(arg, ndigits, decpt, sign) | ||||
| double arg; | ||||
| int ndigits, *decpt, *sign; | ||||
| { | ||||
| 	return(cvt(arg, ndigits, decpt, sign, 1)); | ||||
| } | ||||
| 
 | ||||
| char* | ||||
| _fcvt(arg, ndigits, decpt, sign) | ||||
| double arg; | ||||
| int ndigits, *decpt, *sign; | ||||
| { | ||||
| 	return(cvt(arg, ndigits, decpt, sign, 0)); | ||||
| } | ||||
							
								
								
									
										33
									
								
								lang/pc/libpc/diag.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								lang/pc/libpc/diag.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| /* procedure diag(var f:text); */ | ||||
| 
 | ||||
| diag(f) struct file *f; { | ||||
| 
 | ||||
| 	f->ptr = f->bufadr; | ||||
| 	f->flags = WRBIT|EOFBIT|ELNBIT|TXTBIT|MAGIC; | ||||
| 	f->fname = "DIAG"; | ||||
| 	f->ufd = 2; | ||||
| 	f->size = 1; | ||||
| 	f->count = 1; | ||||
| 	f->buflen = 1; | ||||
| } | ||||
							
								
								
									
										86
									
								
								lang/pc/libpc/dis.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								lang/pc/libpc/dis.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,86 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| #define assert()	/* nothing */ | ||||
| 
 | ||||
| /*
 | ||||
|  * use circular list of free blocks from low to high addresses | ||||
|  * _highp points to free block with highest address | ||||
|  */ | ||||
| struct adm { | ||||
| 	struct adm	*next; | ||||
| 	int		size; | ||||
| }; | ||||
| 
 | ||||
| extern struct adm	*_lastp; | ||||
| extern struct adm	*_highp; | ||||
| extern			_trp(); | ||||
| 
 | ||||
| static int merge(p1,p2) struct adm *p1,*p2; { | ||||
| 	struct adm *p; | ||||
| 
 | ||||
| 	p = (struct adm *)((char *)p1 + p1->size); | ||||
| 	if (p > p2) | ||||
| 		_trp(EFREE); | ||||
| 	if (p != p2) | ||||
| 		return(0); | ||||
| 	p1->size += p2->size; | ||||
| 	p1->next = p2->next; | ||||
| 	return(1); | ||||
| } | ||||
| 
 | ||||
| _dis(n,pp) int n; struct adm **pp; { | ||||
| 	struct adm *p1,*p2; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * NOTE: dispose only objects whose size is a multiple of sizeof(*pp). | ||||
| 	 *       this is always true for objects allocated by _new() | ||||
| 	 */ | ||||
| 	n = ((n+sizeof(*p1)-1) / sizeof(*p1)) * sizeof(*p1); | ||||
| 	if (n == 0) | ||||
| 		return; | ||||
| 	if ((p1= *pp) == (struct adm *) 0) | ||||
| 		_trp(EFREE); | ||||
| 	p1->size = n; | ||||
| 	if ((p2 = _highp) == 0)  /*p1 is the only free block*/ | ||||
| 		p1->next = p1; | ||||
| 	else { | ||||
| 		if (p2 > p1) { | ||||
| 			/*search for the preceding free block*/ | ||||
| 			if (_lastp < p1)  /*reduce search*/ | ||||
| 				p2 = _lastp; | ||||
| 			while (p2->next < p1) | ||||
| 				p2 = p2->next; | ||||
| 		} | ||||
| 		/* if p2 preceeds p1 in the circular list,
 | ||||
| 		 * try to merge them			*/ | ||||
| 		p1->next = p2->next; p2->next = p1; | ||||
| 		if (p2 <= p1 && merge(p2,p1)) | ||||
| 			p1 = p2; | ||||
| 		p2 = p1->next; | ||||
| 		/* p1 preceeds p2 in the circular list */ | ||||
| 		if (p2 > p1) merge(p1,p2); | ||||
| 	} | ||||
| 	if (p1 >= p1->next) | ||||
| 		_highp = p1; | ||||
| 	_lastp = p1; | ||||
| 	*pp = (struct adm *) 0; | ||||
| } | ||||
							
								
								
									
										35
									
								
								lang/pc/libpc/efl.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								lang/pc/libpc/efl.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern struct file	*_curfil; | ||||
| extern			_trp(); | ||||
| extern			_incpt(); | ||||
| 
 | ||||
| int _efl(f) struct file *f; { | ||||
| 
 | ||||
| 	_curfil = f; | ||||
| 	if ((f->flags & 0377) != MAGIC) | ||||
| 		_trp(EBADF); | ||||
| 	if ((f->flags & (WINDOW|WRBIT|EOFBIT)) == 0) | ||||
| 		_incpt(f); | ||||
| 	return((f->flags & EOFBIT) != 0); | ||||
| } | ||||
							
								
								
									
										32
									
								
								lang/pc/libpc/eln.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lang/pc/libpc/eln.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_trp(); | ||||
| extern		_rf(); | ||||
| 
 | ||||
| int _eln(f) struct file *f; { | ||||
| 
 | ||||
| 	_rf(f); | ||||
| 	if (f->flags & EOFBIT) | ||||
| 		_trp(EEOF); | ||||
| 	return((f->flags & ELNBIT) != 0); | ||||
| } | ||||
							
								
								
									
										143
									
								
								lang/pc/libpc/encaps.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								lang/pc/libpc/encaps.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,143 @@ | |||
| # | ||||
| 
 | ||||
| 
 | ||||
| ;  (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
| ;  | ||||
| ;           This product is part of the Amsterdam Compiler Kit. | ||||
| ;  | ||||
| ;  Permission to use, sell, duplicate or disclose this software must be | ||||
| ;  obtained in writing. Requests for such permissions may be sent to | ||||
| ;  | ||||
| ;       Dr. Andrew S. Tanenbaum | ||||
| ;       Wiskundig Seminarium | ||||
| ;       Vrije Universiteit | ||||
| ;       Postbox 7161 | ||||
| ;       1007 MC Amsterdam | ||||
| ;       The Netherlands | ||||
| ;  | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| ; procedure encaps(procedure p; procedure(q(n:integer)); | ||||
| ; {call q if a trap occurs during the execution of p} | ||||
| ; {if q returns, continue execution of p} | ||||
| 
 | ||||
| 
 | ||||
|  inp $handler | ||||
| 
 | ||||
| #define PIISZ   2*EM_PSIZE | ||||
| 
 | ||||
| #define PARG    0 | ||||
| #define QARG    PIISZ | ||||
| #define E_ELB   -EM_PSIZE | ||||
| #define E_EHA   -2*EM_PSIZE | ||||
| 
 | ||||
| ; encaps is called with two parameters: | ||||
| ;       - procedure instance identifier of q (QARG) | ||||
| ;       - procedure instance identifier of p (PARG) | ||||
| ; and two local variables: | ||||
| ;       - the lb of the previous encaps      (E_ELB) | ||||
| ;       - the procedure identifier of the previous handler (E_EHA) | ||||
| ; | ||||
| ; One static variable: | ||||
| ;       - the lb of the currently active encaps (enc_lb) | ||||
| 
 | ||||
| enc_lb | ||||
|         bss EM_PSIZE,0,0 | ||||
| 
 | ||||
|  exp $encaps | ||||
|  pro $encaps,PIISZ | ||||
|  ; save lb of previous encaps | ||||
|  lae enc_lb | ||||
|  loi EM_PSIZE | ||||
|  lal E_ELB | ||||
|  sti EM_PSIZE | ||||
|  ; set new lb | ||||
|  lxl 0 | ||||
|  lae enc_lb | ||||
|  sti EM_PSIZE | ||||
|  ; save old handler id while setting up the new handler | ||||
|  lpi $handler | ||||
|  sig | ||||
|  lal E_EHA | ||||
|  sti EM_PSIZE | ||||
|  ; handler is ready, p can be called | ||||
|  ; p doesn't expect parameters except possibly the static link | ||||
|  ; always passing the link won't hurt | ||||
|  lal PARG | ||||
|  loi PIISZ | ||||
|  cai | ||||
|  asp EM_PSIZE | ||||
|  ; reinstate old handler | ||||
|  lal E_ELB | ||||
|  loi EM_PSIZE | ||||
|  lae enc_lb | ||||
|  sti EM_PSIZE | ||||
|  lal E_EHA | ||||
|  loi EM_PSIZE | ||||
|  sig | ||||
|  asp EM_PSIZE | ||||
|  ret 0 | ||||
|  end ? | ||||
| 
 | ||||
| #define TRAP    0 | ||||
| #define H_ELB   -EM_PSIZE | ||||
| 
 | ||||
| ; handler is called with one parameter: | ||||
| ;       - trap number (TRAP) | ||||
| ; one local variable | ||||
| ;       - the current LB of the enclosing encaps (H_ELB) | ||||
| 
 | ||||
| 
 | ||||
|  pro $handler,EM_PSIZE | ||||
|  ; save LB of nearest encaps | ||||
|  lae enc_lb | ||||
|  loi EM_PSIZE | ||||
|  lal H_ELB | ||||
|  sti EM_PSIZE | ||||
|  ; fetch setting for previous encaps via LB of nearest | ||||
|  lal H_ELB | ||||
|  loi EM_PSIZE | ||||
|  adp E_ELB | ||||
|  loi EM_PSIZE   ; LB of previous encaps | ||||
|  lae enc_lb | ||||
|  sti EM_PSIZE | ||||
|  lal H_ELB | ||||
|  loi EM_PSIZE | ||||
|  adp E_EHA | ||||
|  loi EM_PSIZE   ; previous handler | ||||
|  sig | ||||
|  asp EM_PSIZE | ||||
|  ; previous handler is re-instated, time to call Q | ||||
|  lol TRAP       ; the one and only real parameter | ||||
|  lal H_ELB | ||||
|  loi EM_PSIZE | ||||
|  lpb            ; argument base of enclosing encaps | ||||
|  adp QARG | ||||
|  loi PIISZ | ||||
|  exg EM_PSIZE | ||||
|  dup EM_PSIZE   ; The static link is now on top | ||||
|  zer EM_PSIZE | ||||
|  cmp | ||||
|  zeq *1 | ||||
|  ; non-zero LB | ||||
|  exg EM_PSIZE | ||||
|  cai | ||||
|  asp EM_WSIZE+EM_PSIZE | ||||
|  bra *2 | ||||
| 1 | ||||
|  ; zero LB | ||||
|  asp EM_PSIZE | ||||
|  cai | ||||
|  asp EM_WSIZE | ||||
| 2 | ||||
|  ; now reinstate handler for continued execution of p | ||||
|  lal H_ELB | ||||
|  loi EM_PSIZE | ||||
|  lae enc_lb | ||||
|  sti EM_PSIZE | ||||
|  lpi $handler | ||||
|  sig | ||||
|  asp EM_PSIZE | ||||
|  rtt | ||||
|  end ? | ||||
							
								
								
									
										123
									
								
								lang/pc/libpc/exp.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								lang/pc/libpc/exp.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,123 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern double	_fif(); | ||||
| extern double	_fef(); | ||||
| extern		_trp(); | ||||
| 
 | ||||
| /*
 | ||||
| 	exp returns the exponential function of its | ||||
| 	floating-point argument. | ||||
| 
 | ||||
| 	The coefficients are #1069 from Hart and Cheney. (22.35D) | ||||
| */ | ||||
| 
 | ||||
| #define	HUGE	1.701411733192644270e38 | ||||
| 
 | ||||
| static double p0	=  .2080384346694663001443843411e7; | ||||
| static double p1	=  .3028697169744036299076048876e5; | ||||
| static double p2	=  .6061485330061080841615584556e2; | ||||
| static double q0	=  .6002720360238832528230907598e7; | ||||
| static double q1	=  .3277251518082914423057964422e6; | ||||
| static double q2	=  .1749287689093076403844945335e4; | ||||
| static double log2e	= 1.4426950408889634073599247; | ||||
| static double sqrt2	= 1.4142135623730950488016887; | ||||
| static double maxf	= 10000.0; | ||||
| 
 | ||||
| static double | ||||
| floor(d) | ||||
| double d; | ||||
| { | ||||
| 	if (d<0) { | ||||
| 		d = -d; | ||||
| 		if (_fif(d, 1.0, &d) != 0) | ||||
| 			d += 1; | ||||
| 		d = -d; | ||||
| 	} else | ||||
| 		_fif(d, 1.0, &d); | ||||
| 	return(d); | ||||
| } | ||||
| 
 | ||||
| static double | ||||
| ldexp(fr,exp) | ||||
| double fr; | ||||
| int exp; | ||||
| { | ||||
| 	int	neg,i; | ||||
| 
 | ||||
| 	neg = 1; | ||||
| 	if (fr < 0) { | ||||
| 		fr = -fr; | ||||
| 		neg = -1; | ||||
| 	} | ||||
| 	fr = _fef(fr, &i); | ||||
| 	/*
 | ||||
| 	while (fr < 0.5) { | ||||
| 		fr *= 2; | ||||
| 		exp--; | ||||
| 	} | ||||
| 	*/ | ||||
| 	exp += i; | ||||
| 	if (exp > 127) { | ||||
| 		_trp(EEXP); | ||||
| 		return(neg * HUGE); | ||||
| 	} | ||||
| 	if (exp < -127) | ||||
| 		return(0); | ||||
| 	while (exp > 14) { | ||||
| 		fr *= (1<<14); | ||||
| 		exp -= 14; | ||||
| 	} | ||||
| 	while (exp < -14) { | ||||
| 		fr /= (1<<14); | ||||
| 		exp += 14; | ||||
| 	} | ||||
| 	if (exp > 0) | ||||
| 		fr *= (1<<exp); | ||||
| 	if (exp < 0) | ||||
| 		fr /= (1<<(-exp)); | ||||
| 	return(neg * fr); | ||||
| } | ||||
| 
 | ||||
| double | ||||
| _exp(arg) | ||||
| double arg; | ||||
| { | ||||
| 	double fract; | ||||
| 	double temp1, temp2, xsq; | ||||
| 	int ent; | ||||
| 
 | ||||
| 	if(arg == 0) | ||||
| 		return(1); | ||||
| 	if(arg < -maxf) | ||||
| 		return(0); | ||||
| 	if(arg > maxf) { | ||||
| 		_trp(EEXP); | ||||
| 		return(HUGE); | ||||
| 	} | ||||
| 	arg *= log2e; | ||||
| 	ent = floor(arg); | ||||
| 	fract = (arg-ent) - 0.5; | ||||
| 	xsq = fract*fract; | ||||
| 	temp1 = ((p2*xsq+p1)*xsq+p0)*fract; | ||||
| 	temp2 = ((xsq+q2)*xsq+q1)*xsq + q0; | ||||
| 	return(ldexp(sqrt2*(temp2+temp1)/(temp2-temp1), ent)); | ||||
| } | ||||
							
								
								
									
										21
									
								
								lang/pc/libpc/fef.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								lang/pc/libpc/fef.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| # | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| #define FARG    0 | ||||
| #define ERES    EM_DSIZE | ||||
| 
 | ||||
| ; _fef is called with two parameters: | ||||
| ;       - address of exponent result (ERES) | ||||
| ;       - floating point number to be split (FARG) | ||||
| ; and returns an EM_DSIZE-byte floating point number | ||||
| 
 | ||||
|  exp $_fef | ||||
|  pro $_fef,0 | ||||
|  lal FARG | ||||
|  loi EM_DSIZE | ||||
|  fef EM_DSIZE | ||||
|  lal ERES | ||||
|  loi EM_PSIZE | ||||
|  sti EM_WSIZE | ||||
|  ret EM_DSIZE | ||||
|  end ? | ||||
							
								
								
									
										23
									
								
								lang/pc/libpc/fif.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								lang/pc/libpc/fif.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| # | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| #define ARG1    0 | ||||
| #define ARG2    EM_DSIZE | ||||
| #define IRES    2*EM_DSIZE | ||||
| 
 | ||||
| ; _fif is called with three parameters: | ||||
| ;       - address of integer part result (IRES) | ||||
| ;       - float two (ARG2) | ||||
| ;       - float one (ARG1) | ||||
| ; and returns an EM_DSIZE-byte floating point number | ||||
| 
 | ||||
|  exp $_fif | ||||
|  pro $_fif,0 | ||||
|  lal 0 | ||||
|  loi 2*EM_DSIZE | ||||
|  fif EM_DSIZE | ||||
|  lal IRES | ||||
|  loi EM_PSIZE | ||||
|  sti EM_DSIZE | ||||
|  ret EM_DSIZE | ||||
|  end ? | ||||
							
								
								
									
										13
									
								
								lang/pc/libpc/get.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lang/pc/libpc/get.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_rf(); | ||||
| extern		_trp(); | ||||
| 
 | ||||
| _get(f) struct file *f; { | ||||
| 
 | ||||
| 	_rf(f); | ||||
| 	if (f->flags&EOFBIT) | ||||
| 		_trp(EEOF); | ||||
| 	f->flags &= ~WINDOW; | ||||
| } | ||||
							
								
								
									
										84
									
								
								lang/pc/libpc/gto.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								lang/pc/libpc/gto.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,84 @@ | |||
| # | ||||
| ;  (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
| ;  | ||||
| ;           This product is part of the Amsterdam Compiler Kit. | ||||
| ;  | ||||
| ;  Permission to use, sell, duplicate or disclose this software must be | ||||
| ;  obtained in writing. Requests for such permissions may be sent to | ||||
| ;  | ||||
| ;       Dr. Andrew S. Tanenbaum | ||||
| ;       Wiskundig Seminarium | ||||
| ;       Vrije Universiteit | ||||
| ;       Postbox 7161 | ||||
| ;       1007 MC Amsterdam | ||||
| ;       The Netherlands | ||||
| ;  | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| #define TARLB   0 | ||||
| #define DESCR   EM_PSIZE | ||||
| 
 | ||||
| #define NEWPC   0 | ||||
| #define SAVSP   EM_PSIZE | ||||
| 
 | ||||
| #define D_PC    0 | ||||
| #define D_SP    EM_PSIZE | ||||
| #define D_LB    EM_PSIZE+EM_PSIZE | ||||
| 
 | ||||
| #define LOCLB   -EM_PSIZE | ||||
| 
 | ||||
| ; _gto is called with two arguments: | ||||
| ;       - pointer to the label descriptor (DESCR) | ||||
| ;       - local base (LB) of target procedure (TARLB) | ||||
| ; the label descriptor contains two items: | ||||
| ;       - label address i.e. new PC (NEWPC) | ||||
| ;       - offset in target procedure frame (SAVSP) | ||||
| ; using this offset and the LB of the target procedure, the address of | ||||
| ; of local variable of the target procedure is constructed. | ||||
| ; the target procedure must have stored the correct target SP there. | ||||
| 
 | ||||
| descr | ||||
|  bss 3*EM_PSIZE,0,0 | ||||
| 
 | ||||
|  exp $_gto | ||||
|  pro $_gto,EM_PSIZE | ||||
|  lal DESCR | ||||
|  loi EM_PSIZE | ||||
|  adp NEWPC | ||||
|  loi EM_PSIZE | ||||
|  lae descr+D_PC | ||||
|  sti EM_PSIZE | ||||
|  lal TARLB | ||||
|  loi EM_PSIZE | ||||
|  zer EM_PSIZE | ||||
|  cmp | ||||
|  zeq *1 | ||||
|  lal TARLB | ||||
|  loi EM_PSIZE | ||||
|  bra *2 | ||||
| 1 | ||||
|  lae _m_lb | ||||
|  loi EM_PSIZE | ||||
| 2 | ||||
|  lal LOCLB | ||||
|  sti EM_PSIZE | ||||
|  lal LOCLB | ||||
|  loi EM_PSIZE | ||||
|  lal DESCR | ||||
|  loi EM_PSIZE | ||||
|  adp SAVSP | ||||
|  loi EM_WSIZE           ; or EM_PSIZE ? | ||||
|  ads EM_WSIZE           ; or EM_PSIZE ? | ||||
|  loi EM_PSIZE | ||||
|  lae descr+D_SP | ||||
|  sti EM_PSIZE | ||||
|  lal LOCLB | ||||
|  loi EM_PSIZE | ||||
|  lae descr+D_LB | ||||
|  sti EM_PSIZE | ||||
|  gto descr | ||||
|  end ? | ||||
							
								
								
									
										2
									
								
								lang/pc/libpc/head_pc.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								lang/pc/libpc/head_pc.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| # | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
							
								
								
									
										34
									
								
								lang/pc/libpc/hlt.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lang/pc/libpc/hlt.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern char	*_hbase; | ||||
| extern int	*_extfl; | ||||
| extern		_cls(); | ||||
| extern		exit(); | ||||
| 
 | ||||
| _hlt(ecode) int ecode; { | ||||
| 	int i; | ||||
| 
 | ||||
| 	for (i = 1; i <= _extfl[0]; i++) | ||||
| 		if (_extfl[i] != -1) | ||||
| 			_cls(EXTFL(i)); | ||||
| 	exit(ecode); | ||||
| } | ||||
							
								
								
									
										11
									
								
								lang/pc/libpc/hol0.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								lang/pc/libpc/hol0.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| # | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| ; _hol0 return the address of the ABS block (hol0) | ||||
| 
 | ||||
|  exp $_hol0 | ||||
|  pro $_hol0,0 | ||||
|  lae 0 | ||||
|  ret EM_PSIZE | ||||
|  end ? | ||||
							
								
								
									
										74
									
								
								lang/pc/libpc/incpt.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								lang/pc/libpc/incpt.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| #define EINTR	4 | ||||
| 
 | ||||
| extern int	errno; | ||||
| extern		_trp(); | ||||
| extern int	read(); | ||||
| 
 | ||||
| _incpt(f) struct file *f; { | ||||
| 
 | ||||
| 	if (f->flags & EOFBIT) | ||||
| 		_trp(EEOF); | ||||
| 	f->flags |= WINDOW; | ||||
| 	f->flags &= ~ELNBIT; | ||||
| #ifdef CPM | ||||
| 	do { | ||||
| #endif | ||||
| 	f->ptr += f->size; | ||||
| 	if (f->count == 0) { | ||||
| 		f->ptr = f->bufadr; | ||||
| 		for(;;) { | ||||
| 			f->count=read(f->ufd,f->bufadr,f->buflen); | ||||
| 			if ( f->count<0 ) { | ||||
| 				if (errno != EINTR) _trp(EREAD) ; | ||||
| 				continue ; | ||||
| 			} | ||||
| 			break ; | ||||
| 		} | ||||
| 		if (f->count == 0) { | ||||
| 			f->flags |= EOFBIT; | ||||
| 			*f->ptr = '\0'; | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
| 	if ((f->count -= f->size) < 0) | ||||
| 		_trp(EFTRUNC); | ||||
| #ifdef CPM | ||||
| 	} while ((f->flags&TXTBIT) && *f->ptr == '\r'); | ||||
| #endif | ||||
| 	if (f->flags & TXTBIT) { | ||||
| 		if (*f->ptr & 0200) | ||||
| 			_trp(EASCII); | ||||
| 		if (*f->ptr == '\n') { | ||||
| 			f->flags |= ELNBIT; | ||||
| 			*f->ptr = ' '; | ||||
| 		} | ||||
| #ifdef CPM | ||||
| 		if (*f->ptr == 26) { | ||||
| 			f->flags |= EOFBIT; | ||||
| 			*f->ptr = 0; | ||||
| 		} | ||||
| #endif | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										72
									
								
								lang/pc/libpc/ini.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								lang/pc/libpc/ini.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include        <pc_file.h> | ||||
| #include        <pc_err.h> | ||||
| 
 | ||||
| extern          (*_sig())(); | ||||
| extern          _catch(); | ||||
| #ifndef CPM | ||||
| extern int      ioctl(); | ||||
| #endif | ||||
| 
 | ||||
| char            *_hbase; | ||||
| int             *_extfl; | ||||
| char            *_m_lb;         /* LB of m_a_i_n */ | ||||
| struct file     *_curfil;       /* points to file struct in case of errors */ | ||||
| int             _pargc; | ||||
| char            **_pargv; | ||||
| char            **_penvp; | ||||
| 
 | ||||
| _ini(args,hb,p,mainlb) char *args,*hb,*mainlb; int *p; { | ||||
| 	struct file *f; | ||||
| 	char buf[6]; | ||||
| 
 | ||||
| 	_pargc= *(int *)args; args += sizeof (int); | ||||
| 	_pargv= *(char ***)args; args += sizeof (char **); | ||||
| 	_penvp= *(char ***)args; | ||||
| 	_sig(_catch); | ||||
| 	_extfl = p; | ||||
| 	_hbase = hb; | ||||
| 	_m_lb = mainlb; | ||||
| 	if (_extfl[1] != -1) { | ||||
| 		f = EXTFL(1); | ||||
| 		f->ptr = f->bufadr; | ||||
| 		f->flags = MAGIC|TXTBIT; | ||||
| 		f->fname = "INPUT"; | ||||
| 		f->ufd = 0; | ||||
| 		f->size = 1; | ||||
| 		f->count = 0; | ||||
| 		f->buflen = 512; | ||||
| 	} | ||||
| 	if (_extfl[2] != -1) { | ||||
| 		f = EXTFL(2); | ||||
| 		f->ptr = f->bufadr; | ||||
| 		f->flags = MAGIC|TXTBIT|WRBIT|EOFBIT|ELNBIT; | ||||
| 		f->fname = "OUTPUT"; | ||||
| 		f->ufd = 1; | ||||
| 		f->size = 1; | ||||
| #ifdef CPM | ||||
| 		f->count = 1; | ||||
| #else | ||||
| 		f->count = (ioctl(1,(('t'<<8)|8),buf) == 0 ? 1 : 512); | ||||
| #endif | ||||
| 		f->buflen = f->count; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										76
									
								
								lang/pc/libpc/log.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								lang/pc/libpc/log.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern double	_fef(); | ||||
| extern		_trp(); | ||||
| 
 | ||||
| /*
 | ||||
| 	log returns the natural logarithm of its floating | ||||
| 	point argument. | ||||
| 
 | ||||
| 	The coefficients are #2705 from Hart & Cheney. (19.38D) | ||||
| 
 | ||||
| 	It calls _fef. | ||||
| */ | ||||
| 
 | ||||
| #define	HUGE	1.701411733192644270e38 | ||||
| 
 | ||||
| static double log2	= 0.693147180559945309e0; | ||||
| static double sqrto2	= 0.707106781186547524e0; | ||||
| static double p0	= -.240139179559210510e2; | ||||
| static double p1	= 0.309572928215376501e2; | ||||
| static double p2	= -.963769093368686593e1; | ||||
| static double p3	= 0.421087371217979714e0; | ||||
| static double q0	= -.120069589779605255e2; | ||||
| static double q1	= 0.194809660700889731e2; | ||||
| static double q2	= -.891110902798312337e1; | ||||
| 
 | ||||
| double | ||||
| _log(arg) | ||||
| double arg; | ||||
| { | ||||
| 	double x,z, zsq, temp; | ||||
| 	int exp; | ||||
| 
 | ||||
| 	if(arg <= 0) { | ||||
| 		_trp(ELOG); | ||||
| 		return(-HUGE); | ||||
| 	} | ||||
| 	x = _fef(arg,&exp); | ||||
| 	/*
 | ||||
| 	while(x < 0.5) { | ||||
| 		x =* 2; | ||||
| 		exp--; | ||||
| 	} | ||||
| 	*/ | ||||
| 	if(x<sqrto2) { | ||||
| 		x *= 2; | ||||
| 		exp--; | ||||
| 	} | ||||
| 
 | ||||
| 	z = (x-1)/(x+1); | ||||
| 	zsq = z*z; | ||||
| 
 | ||||
| 	temp = ((p3*zsq + p2)*zsq + p1)*zsq + p0; | ||||
| 	temp = temp/(((zsq + q2)*zsq + q1)*zsq + q0); | ||||
| 	temp = temp*z + exp*log2; | ||||
| 	return(temp); | ||||
| } | ||||
							
								
								
									
										32
									
								
								lang/pc/libpc/mdi.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lang/pc/libpc/mdi.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_trp(); | ||||
| 
 | ||||
| int _mdi(j,i) int j,i; { | ||||
| 
 | ||||
| 	if (j <= 0) | ||||
| 		_trp(EMOD); | ||||
| 	i = i % j; | ||||
| 	if (i < 0) | ||||
| 		i += j; | ||||
| 	return(i); | ||||
| } | ||||
							
								
								
									
										32
									
								
								lang/pc/libpc/mdl.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lang/pc/libpc/mdl.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_trp(); | ||||
| 
 | ||||
| long _mdl(j,i) long j,i; { | ||||
| 
 | ||||
| 	if (j <= 0) | ||||
| 		_trp(EMOD); | ||||
| 	i = i % j; | ||||
| 	if (i < 0) | ||||
| 		i += j; | ||||
| 	return(i); | ||||
| } | ||||
							
								
								
									
										66
									
								
								lang/pc/libpc/new.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								lang/pc/libpc/new.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| extern		_sav(); | ||||
| extern		_rst(); | ||||
| 
 | ||||
| #define assert()	/* nothing */ | ||||
| #define	UNDEF		0x8000 | ||||
| 
 | ||||
| struct adm { | ||||
| 	struct adm	*next; | ||||
| 	int		size; | ||||
| }; | ||||
| 
 | ||||
| struct adm	*_lastp = 0; | ||||
| struct adm	*_highp = 0; | ||||
| 
 | ||||
| _new(n,pp) int n; struct adm **pp; { | ||||
| 	struct adm *p,*q; | ||||
| 
 | ||||
| 	n = ((n+sizeof(*p)-1) / sizeof(*p)) * sizeof(*p); | ||||
| 	if ((p = _lastp) != 0) | ||||
| 		do { | ||||
| 			q = p->next; | ||||
| 			if (q->size >= n) { | ||||
| 				assert(q->size%sizeof(adm) == 0); | ||||
| 				if ((q->size -= n) == 0) { | ||||
| 					if (p == q) | ||||
| 						p = 0; | ||||
| 					else | ||||
| 						p->next = q->next; | ||||
| 					if (q == _highp) | ||||
| 						_highp = p; | ||||
| 				} | ||||
| 				_lastp = p; | ||||
| 				p = (struct adm *)((char *)q + q->size); | ||||
| 				q = (struct adm *)((char *)p + n); | ||||
| 				goto initialize; | ||||
| 			} | ||||
| 			p = q; | ||||
| 		} while (p != _lastp); | ||||
| 	/*no free block big enough*/ | ||||
| 	_sav(&p); | ||||
| 	q = (struct adm *)((char *)p + n); | ||||
| 	_rst(&q); | ||||
| initialize: | ||||
| 	*pp = p; | ||||
| 	while (p < q) | ||||
| 		*((int *)p)++ = UNDEF; | ||||
| } | ||||
							
								
								
									
										32
									
								
								lang/pc/libpc/nobuff.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lang/pc/libpc/nobuff.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_flush(); | ||||
| 
 | ||||
| /* procedure nobuff(var f:file of ?); */ | ||||
| 
 | ||||
| nobuff(f) struct file *f; { | ||||
| 
 | ||||
| 	if ((f->flags & (0377|WRBIT)) != (MAGIC|WRBIT)) | ||||
| 		return; | ||||
| 	_flush(f); | ||||
| 	f->count = f->buflen = f->size; | ||||
| } | ||||
							
								
								
									
										5
									
								
								lang/pc/libpc/notext.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								lang/pc/libpc/notext.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| notext(f) struct file *f; { | ||||
| 	f->flags &= ~TXTBIT; | ||||
| } | ||||
							
								
								
									
										116
									
								
								lang/pc/libpc/opn.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								lang/pc/libpc/opn.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,116 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern char		*_hbase; | ||||
| extern int		*_extfl; | ||||
| extern struct file	*_curfil; | ||||
| extern int		_pargc; | ||||
| extern char		**_pargv; | ||||
| extern char		**_penvp; | ||||
| 
 | ||||
| extern			_cls(); | ||||
| extern			_xcls(); | ||||
| extern			_trp(); | ||||
| extern int		getpid(); | ||||
| extern int		creat(); | ||||
| extern int		open(); | ||||
| extern int		close(); | ||||
| extern int		unlink(); | ||||
| extern long		lseek(); | ||||
| 
 | ||||
| static int tmpfil() { | ||||
| 	int i; char *p,*q; | ||||
| 
 | ||||
| 	i = getpid(); | ||||
| 	p = "/usr/tmp/plf.xxxxx"; | ||||
| 	q = p + 13; | ||||
| 	do | ||||
| 		*q++ = (i & 07) + '0'; | ||||
| 	while (i >>= 3); | ||||
| 	*q = '\0'; | ||||
| 	if ((i = creat(p,0644)) < 0) | ||||
| 		if ((i = creat(p += 4,0644)) < 0) | ||||
| 			if ((i = creat(p += 5,0644)) < 0) | ||||
| 				goto error; | ||||
| 	if (close(i) != 0) | ||||
| 		goto error; | ||||
| 	if ((i = open(p,2)) < 0) | ||||
| 		goto error; | ||||
| 	if (unlink(p) != 0) | ||||
| error:		_trp(EREWR); | ||||
| 	return(i); | ||||
| } | ||||
| 
 | ||||
| static int initfl(descr,sz,f) int descr; int sz; struct file *f; { | ||||
| 	int i; | ||||
| 
 | ||||
| 	_curfil = f; | ||||
| 	if (sz == 0) { | ||||
| 		sz++; | ||||
| 		descr |= TXTBIT; | ||||
| 	} | ||||
| 	for (i=1; i<=_extfl[0]; i++) | ||||
| 		if (f == EXTFL(i)) | ||||
| 			break; | ||||
| 	if (i > _extfl[0]) {		/* local file */ | ||||
| 		f->fname = "LOCAL"; | ||||
| 		if ((descr & WRBIT) == 0 && (f->flags & 0377) == MAGIC) { | ||||
| 			_xcls(f); | ||||
| 			if (lseek(f->ufd,(long)0,0) == -1) | ||||
| 				_trp(ERESET); | ||||
| 		} else { | ||||
| 			_cls(f); | ||||
| 			f->ufd = tmpfil(); | ||||
| 		} | ||||
| 	} else {	/* external file */ | ||||
| 		if ((i -= 2) <= 0) | ||||
| 			return(0); | ||||
| 		if (i >= _pargc) | ||||
| 			_trp(EARGC); | ||||
| 		f->fname = _pargv[i]; | ||||
| 		_cls(f); | ||||
| 		if ((descr & WRBIT) == 0) { | ||||
| 			if ((f->ufd = open(f->fname,0)) < 0) | ||||
| 				_trp(ERESET); | ||||
| 		} else { | ||||
| 			if ((f->ufd = creat(f->fname,0644)) < 0) | ||||
| 				_trp(EREWR); | ||||
| 		} | ||||
| 	} | ||||
| 	f->buflen = (sz>512 ? sz : 512-512%sz); | ||||
| 	f->size = sz; | ||||
| 	f->ptr = f->bufadr; | ||||
| 	f->flags = descr; | ||||
| 	return(1); | ||||
| } | ||||
| 
 | ||||
| _opn(sz,f) int sz; struct file *f; { | ||||
| 
 | ||||
| 	if (initfl(MAGIC,sz,f)) | ||||
| 		f->count = 0; | ||||
| } | ||||
| 
 | ||||
| _cre(sz,f) int sz; struct file *f; { | ||||
| 
 | ||||
| 	if (initfl(WRBIT|EOFBIT|ELNBIT|MAGIC,sz,f)) | ||||
| 		f->count = f->buflen; | ||||
| } | ||||
							
								
								
									
										49
									
								
								lang/pc/libpc/outcpt.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								lang/pc/libpc/outcpt.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| #define EINTR	4 | ||||
| 
 | ||||
| extern int	errno; | ||||
| extern		_trp(); | ||||
| extern int	write(); | ||||
| 
 | ||||
| _flush(f) struct file *f; { | ||||
| 	int i,n; | ||||
| 
 | ||||
| 	f->ptr = f->bufadr; | ||||
| 	n = f->buflen - f->count; | ||||
| 	if (n <= 0) | ||||
| 		return; | ||||
| 	f->count = f->buflen; | ||||
| 	if ((i = write(f->ufd,f->bufadr,n)) < 0 && errno == EINTR) | ||||
| 		return; | ||||
| 	if (i != n) | ||||
| 		_trp(EWRITE); | ||||
| } | ||||
| 
 | ||||
| _outcpt(f) struct file *f; { | ||||
| 
 | ||||
| 	f->flags &= ~ELNBIT; | ||||
| 	f->ptr += f->size; | ||||
| 	if ((f->count -= f->size) <= 0) | ||||
| 		_flush(f); | ||||
| } | ||||
							
								
								
									
										49
									
								
								lang/pc/libpc/pac.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								lang/pc/libpc/pac.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_trp(); | ||||
| 
 | ||||
| #define	assert()	/* nothing */ | ||||
| 
 | ||||
| struct descr { | ||||
| 	int	low; | ||||
| 	int	diff; | ||||
| 	int	size; | ||||
| }; | ||||
| 
 | ||||
| _pac(ad,zd,zp,i,ap) int i; struct descr *ad,*zd; char *zp,*ap; { | ||||
| 
 | ||||
| 	if (zd->diff > ad->diff || | ||||
| 			(i -= ad->low) < 0 || | ||||
| 			(i+zd->diff) > ad->diff) | ||||
| 		_trp(EPACK); | ||||
| 	ap += (i * ad->size); | ||||
| 	i = (zd->diff + 1) * zd->size; | ||||
| 	if (zd->size == 1) { | ||||
| 		assert(ad->size == 2); | ||||
| 		while (--i >= 0) | ||||
| 			*zp++ = *((int *)ap)++; | ||||
| 	} else { | ||||
| 		assert(ad->size == zd->size); | ||||
| 		while (--i >= 0) | ||||
| 			*zp++ = *ap++; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										9
									
								
								lang/pc/libpc/pclose.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								lang/pc/libpc/pclose.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_cls(); | ||||
| 
 | ||||
| /* procedure pclose(var f:file of ??); */ | ||||
| 
 | ||||
| pclose(f) struct file *f; { | ||||
| 	_cls(f); | ||||
| } | ||||
							
								
								
									
										40
									
								
								lang/pc/libpc/pcreat.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								lang/pc/libpc/pcreat.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_cls(); | ||||
| extern		_trp(); | ||||
| extern int	creat(); | ||||
| 
 | ||||
| /* procedure pcreat(var f:text; s:string); */ | ||||
| 
 | ||||
| pcreat(f,s) struct file *f; char *s; { | ||||
| 
 | ||||
| 	_cls(f);	/* initializes _curfil */ | ||||
| 	f->ptr = f->bufadr; | ||||
| 	f->flags = WRBIT|EOFBIT|ELNBIT|TXTBIT|MAGIC; | ||||
| 	f->fname = s; | ||||
| 	f->size = 1; | ||||
| 	f->count = 512; | ||||
| 	f->buflen = 512; | ||||
| 	if ((f->ufd = creat(s,0644)) < 0) | ||||
| 		_trp(EREWR); | ||||
| } | ||||
							
								
								
									
										34
									
								
								lang/pc/libpc/pentry.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lang/pc/libpc/pentry.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern int	*_extfl; | ||||
| extern char	*_hbase; | ||||
| extern		_wrs(); | ||||
| extern		_wln(); | ||||
| 
 | ||||
| procentry(name) char *name; { | ||||
| 	struct file *f; | ||||
| 
 | ||||
| 	f = EXTFL(2); | ||||
| 	_wrs(5,"call ",f); | ||||
| 	_wrs(8,name,f); | ||||
| 	_wln(f); | ||||
| } | ||||
							
								
								
									
										7
									
								
								lang/pc/libpc/perrno.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								lang/pc/libpc/perrno.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| /* function perrno:integer; extern; */ | ||||
| 
 | ||||
| extern int	errno; | ||||
| 
 | ||||
| int perrno() { | ||||
| 	return(errno); | ||||
| } | ||||
							
								
								
									
										15
									
								
								lang/pc/libpc/pexit.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								lang/pc/libpc/pexit.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern int	*_extfl; | ||||
| extern char	*_hbase; | ||||
| extern		_wrs(); | ||||
| extern		_wln(); | ||||
| 
 | ||||
| procexit(name) char *name; { | ||||
| 	struct file *f; | ||||
| 
 | ||||
| 	f = EXTFL(2); | ||||
| 	_wrs(5,"exit ",f); | ||||
| 	_wrs(8,name,f); | ||||
| 	_wln(f); | ||||
| } | ||||
							
								
								
									
										40
									
								
								lang/pc/libpc/popen.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								lang/pc/libpc/popen.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_cls(); | ||||
| extern		_trp(); | ||||
| extern int	open(); | ||||
| 
 | ||||
| /* procedure popen(var f:text; s:string); */ | ||||
| 
 | ||||
| popen(f,s) struct file *f; char *s; { | ||||
| 
 | ||||
| 	_cls(f);	/* initializes _curfil */ | ||||
| 	f->ptr = f->bufadr; | ||||
| 	f->flags = TXTBIT|MAGIC; | ||||
| 	f->fname = s; | ||||
| 	f->size = 1; | ||||
| 	f->count = 0; | ||||
| 	f->buflen = 512; | ||||
| 	if ((f->ufd = open(s,0)) < 0) | ||||
| 		_trp(ERESET); | ||||
| } | ||||
							
								
								
									
										9
									
								
								lang/pc/libpc/put.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								lang/pc/libpc/put.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wf(); | ||||
| extern		_outcpt(); | ||||
| 
 | ||||
| _put(f) struct file *f; { | ||||
| 	_wf(f); | ||||
| 	_outcpt(f); | ||||
| } | ||||
							
								
								
									
										13
									
								
								lang/pc/libpc/rdc.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lang/pc/libpc/rdc.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_rf(); | ||||
| extern		_incpt(); | ||||
| 
 | ||||
| int _rdc(f) struct file *f; { | ||||
| 	int c; | ||||
| 
 | ||||
| 	_rf(f); | ||||
| 	c = *f->ptr; | ||||
| 	_incpt(f); | ||||
| 	return(c); | ||||
| } | ||||
							
								
								
									
										77
									
								
								lang/pc/libpc/rdi.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								lang/pc/libpc/rdi.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_trp(); | ||||
| extern		_rf(); | ||||
| extern		_incpt(); | ||||
| 
 | ||||
| _skipsp(f) struct file *f; { | ||||
| 	while ((*f->ptr == ' ') || (*f->ptr == '\t')) | ||||
| 		_incpt(f); | ||||
| } | ||||
| 
 | ||||
| int _getsig(f) struct file *f; { | ||||
| 	int sign; | ||||
| 
 | ||||
| 	if ((sign = (*f->ptr == '-')) || *f->ptr == '+') | ||||
| 		_incpt(f); | ||||
| 	return(sign); | ||||
| } | ||||
| 
 | ||||
| int _fstdig(f) struct file *f; { | ||||
| 	int ch; | ||||
| 
 | ||||
| 	ch = *f->ptr - '0'; | ||||
| 	if ((unsigned) ch > 9) { | ||||
| 		_trp(EDIGIT); | ||||
| 		ch = 0; | ||||
| 	} | ||||
| 	return(ch); | ||||
| } | ||||
| 
 | ||||
| int _nxtdig(f) struct file *f; { | ||||
| 	int ch; | ||||
| 
 | ||||
| 	_incpt(f); | ||||
| 	ch = *f->ptr - '0'; | ||||
| 	if ((unsigned) ch > 9) | ||||
| 		return(-1); | ||||
| 	return(ch); | ||||
| } | ||||
| 
 | ||||
| int _getint(f) struct file *f; { | ||||
| 	int signed,i,ch; | ||||
| 
 | ||||
| 	signed = _getsig(f); | ||||
| 	ch = _fstdig(f); | ||||
| 	i = 0; | ||||
| 	do | ||||
| 		i = i*10 - ch; | ||||
| 	while ((ch = _nxtdig(f)) >= 0); | ||||
| 	return(signed ? i : -i); | ||||
| } | ||||
| 
 | ||||
| int _rdi(f) struct file *f; { | ||||
| 	_rf(f); | ||||
| 	_skipsp(f); | ||||
| 	return(_getint(f)); | ||||
| } | ||||
							
								
								
									
										40
									
								
								lang/pc/libpc/rdl.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								lang/pc/libpc/rdl.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_rf(); | ||||
| extern		_skipsp(); | ||||
| extern int	_getsig(); | ||||
| extern int	_fstdig(); | ||||
| extern int	_nxtdig(); | ||||
| 
 | ||||
| long _rdl(f) struct file *f; { | ||||
| 	int signed,ch; long l; | ||||
| 
 | ||||
| 	_rf(f); | ||||
| 	_skipsp(f); | ||||
| 	signed = _getsig(f); | ||||
| 	ch = _fstdig(f); | ||||
| 	l = 0; | ||||
| 	do | ||||
| 		l = l*10 - ch; | ||||
| 	while ((ch = _nxtdig(f)) >= 0); | ||||
| 	return(signed ? l : -l); | ||||
| } | ||||
							
								
								
									
										77
									
								
								lang/pc/libpc/rdr.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								lang/pc/libpc/rdr.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| #define	BIG	1e17 | ||||
| 
 | ||||
| extern		_rf(); | ||||
| extern		_incpt(); | ||||
| extern		_skipsp(); | ||||
| extern int	_getsig(); | ||||
| extern int	_getint(); | ||||
| extern int	_fstdig(); | ||||
| extern int	_nxtdig(); | ||||
| 
 | ||||
| static double		r; | ||||
| static int		pow10; | ||||
| 
 | ||||
| static dig(ch) int ch; { | ||||
| 
 | ||||
| 	if (r>BIG) | ||||
| 		pow10++; | ||||
| 	else | ||||
| 		r = r*10.0 + ch; | ||||
| } | ||||
| 
 | ||||
| double _rdr(f) struct file *f; { | ||||
| 	int i; double e; int signed,ch; | ||||
| 
 | ||||
| 	r = 0; | ||||
| 	pow10 = 0; | ||||
| 	_rf(f); | ||||
| 	_skipsp(f); | ||||
| 	signed = _getsig(f); | ||||
| 	ch = _fstdig(f); | ||||
| 	do | ||||
| 		dig(ch); | ||||
| 	while ((ch = _nxtdig(f)) >= 0); | ||||
| 	if (*f->ptr == '.') { | ||||
| 		_incpt(f); | ||||
| 		ch = _fstdig(f); | ||||
| 		do { | ||||
| 			dig(ch); | ||||
| 			pow10--; | ||||
| 		} while ((ch = _nxtdig(f)) >= 0); | ||||
| 	} | ||||
| 	if ((*f->ptr == 'e') || (*f->ptr == 'E')) { | ||||
| 		_incpt(f); | ||||
| 		pow10 += _getint(f); | ||||
| 	} | ||||
| 	if ((i = pow10) < 0) | ||||
| 		i = -i; | ||||
| 	e = 1.0; | ||||
| 	while (--i >= 0) | ||||
| 		e *= 10.0; | ||||
| 	if (pow10<0) | ||||
| 		r /= e; | ||||
| 	else | ||||
| 		r *= e; | ||||
| 	return(signed? -r : r); | ||||
| } | ||||
							
								
								
									
										17
									
								
								lang/pc/libpc/rf.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lang/pc/libpc/rf.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern struct file	*_curfil; | ||||
| extern			_trp(); | ||||
| extern			_incpt(); | ||||
| 
 | ||||
| _rf(f) struct file *f; { | ||||
| 
 | ||||
| 	_curfil = f; | ||||
| 	if ((f->flags&0377) != MAGIC) | ||||
| 		_trp(EBADF); | ||||
| 	if (f->flags & WRBIT) | ||||
| 		_trp(EREADF); | ||||
| 	if ((f->flags & WINDOW) == 0) | ||||
| 		_incpt(f); | ||||
| } | ||||
							
								
								
									
										12
									
								
								lang/pc/libpc/rln.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								lang/pc/libpc/rln.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_rf(); | ||||
| extern		_incpt(); | ||||
| 
 | ||||
| _rln(f) struct file *f; { | ||||
| 
 | ||||
| 	_rf(f); | ||||
| 	while ((f->flags & ELNBIT) == 0) | ||||
| 		_incpt(f); | ||||
| 	f->flags &= ~WINDOW; | ||||
| } | ||||
							
								
								
									
										3
									
								
								lang/pc/libpc/rnd.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								lang/pc/libpc/rnd.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| double _rnd(r) double r; { | ||||
| 	return(r + (r<0 ? -0.5 : 0.5)); | ||||
| } | ||||
							
								
								
									
										48
									
								
								lang/pc/libpc/sav.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								lang/pc/libpc/sav.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | |||
| # | ||||
| ;  (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
| ;  | ||||
| ;           This product is part of the Amsterdam Compiler Kit. | ||||
| ;  | ||||
| ;  Permission to use, sell, duplicate or disclose this software must be | ||||
| ;  obtained in writing. Requests for such permissions may be sent to | ||||
| ;  | ||||
| ;       Dr. Andrew S. Tanenbaum | ||||
| ;       Wiskundig Seminarium | ||||
| ;       Vrije Universiteit | ||||
| ;       Postbox 7161 | ||||
| ;       1007 MC Amsterdam | ||||
| ;       The Netherlands | ||||
| ;  | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| #define	PTRAD	0 | ||||
| 
 | ||||
| #define	HP	2 | ||||
| 
 | ||||
| ; _sav called with one parameter: | ||||
| ;	- address of pointer variable (PTRAD) | ||||
| 
 | ||||
|  exp $_sav | ||||
|  pro $_sav,0 | ||||
|  lor HP | ||||
|  lal PTRAD | ||||
|  loi EM_PSIZE | ||||
|  sti EM_PSIZE | ||||
|  ret 0 | ||||
|  end ? | ||||
| 
 | ||||
| ; _rst is called with one parameter: | ||||
| ;	- address of pointer variable (PTRAD) | ||||
| 
 | ||||
|  exp $_rst | ||||
|  pro $_rst,0 | ||||
|  lal PTRAD | ||||
|  loi EM_PSIZE | ||||
|  loi EM_PSIZE | ||||
|  str HP | ||||
|  ret 0 | ||||
|  end ? | ||||
							
								
								
									
										16
									
								
								lang/pc/libpc/sig.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								lang/pc/libpc/sig.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| #define PROC    0 | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| ; _sig is called with one parameter: | ||||
| ;       - procedure instance identifier (PROC) | ||||
| ; and returns nothing. | ||||
| ; only the procedure identifier inside the PROC is used. | ||||
| 
 | ||||
|  exp $_sig | ||||
|  pro $_sig,0 | ||||
|  lal PROC | ||||
|  loi EM_PSIZE | ||||
|  sig | ||||
|  ret 0                  ; ignore the result of sig | ||||
|  end ? | ||||
							
								
								
									
										92
									
								
								lang/pc/libpc/sin.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								lang/pc/libpc/sin.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,92 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| extern double	_fif(); | ||||
| 
 | ||||
| /*
 | ||||
| 	C program for floating point sin/cos. | ||||
| 	Calls _fif. | ||||
| 	There are no error exits. | ||||
| 	Coefficients are #3370 from Hart & Cheney (18.80D). | ||||
| */ | ||||
| 
 | ||||
| static double twoopi	= 0.63661977236758134308; | ||||
| static double p0	=  .1357884097877375669092680e8; | ||||
| static double p1	= -.4942908100902844161158627e7; | ||||
| static double p2	=  .4401030535375266501944918e6; | ||||
| static double p3	= -.1384727249982452873054457e5; | ||||
| static double p4	=  .1459688406665768722226959e3; | ||||
| static double q0	=  .8644558652922534429915149e7; | ||||
| static double q1	=  .4081792252343299749395779e6; | ||||
| static double q2	=  .9463096101538208180571257e4; | ||||
| static double q3	=  .1326534908786136358911494e3; | ||||
| 
 | ||||
| static double | ||||
| sinus(arg, quad) | ||||
| double arg; | ||||
| int quad; | ||||
| { | ||||
| 	double e, f; | ||||
| 	double ysq; | ||||
| 	double x,y; | ||||
| 	int k; | ||||
| 	double temp1, temp2; | ||||
| 
 | ||||
| 	x = arg; | ||||
| 	if(x<0) { | ||||
| 		x = -x; | ||||
| 		quad = quad + 2; | ||||
| 	} | ||||
| 	x = x*twoopi;	/*underflow?*/ | ||||
| 	if(x>32764){ | ||||
| 		y = _fif(x, 10.0, &e); | ||||
| 		e = e + quad; | ||||
| 		_fif(0.25, e, &f); | ||||
| 		quad = e - 4*f; | ||||
| 	}else{ | ||||
| 		k = x; | ||||
| 		y = x - k; | ||||
| 		quad = (quad + k) & 03; | ||||
| 	} | ||||
| 	if (quad & 01) | ||||
| 		y = 1-y; | ||||
| 	if(quad > 1) | ||||
| 		y = -y; | ||||
| 
 | ||||
| 	ysq = y*y; | ||||
| 	temp1 = ((((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y; | ||||
| 	temp2 = ((((ysq+q3)*ysq+q2)*ysq+q1)*ysq+q0); | ||||
| 	return(temp1/temp2); | ||||
| } | ||||
| 
 | ||||
| double | ||||
| _cos(arg) | ||||
| double arg; | ||||
| { | ||||
| 	if(arg<0) | ||||
| 		arg = -arg; | ||||
| 	return(sinus(arg, 1)); | ||||
| } | ||||
| 
 | ||||
| double | ||||
| _sin(arg) | ||||
| double arg; | ||||
| { | ||||
| 	return(sinus(arg, 0)); | ||||
| } | ||||
							
								
								
									
										77
									
								
								lang/pc/libpc/sqt.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								lang/pc/libpc/sqt.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern	double	_fef(); | ||||
| extern		_trp(); | ||||
| 
 | ||||
| /*
 | ||||
| 	sqrt returns the square root of its floating | ||||
| 	point argument. Newton's method. | ||||
| 
 | ||||
| 	calls _fef | ||||
| */ | ||||
| 
 | ||||
| double | ||||
| _sqt(arg) | ||||
| double arg; | ||||
| { | ||||
| 	double x, temp; | ||||
| 	int exp; | ||||
| 	int i; | ||||
| 
 | ||||
| 	if(arg <= 0) { | ||||
| 		if(arg < 0) | ||||
| 			_trp(ESQT); | ||||
| 		return(0); | ||||
| 	} | ||||
| 	x = _fef(arg,&exp); | ||||
| 	/*
 | ||||
| 	while(x < 0.5) { | ||||
| 		x =* 2; | ||||
| 		exp--; | ||||
| 	} | ||||
| 	*/ | ||||
| 	/*
 | ||||
| 	 * NOTE | ||||
| 	 * this wont work on 1's comp | ||||
| 	 */ | ||||
| 	if(exp & 1) { | ||||
| 		x *= 2; | ||||
| 		exp--; | ||||
| 	} | ||||
| 	temp = 0.5*(1 + x); | ||||
| 
 | ||||
| 	while(exp > 28) { | ||||
| 		temp *= (1<<14); | ||||
| 		exp -= 28; | ||||
| 	} | ||||
| 	while(exp < -28) { | ||||
| 		temp /= (1<<14); | ||||
| 		exp += 28; | ||||
| 	} | ||||
| 	if(exp >= 0) | ||||
| 		temp *= 1 << (exp/2); | ||||
| 	else | ||||
| 		temp /= 1 << (-exp/2); | ||||
| 	for(i=0; i<=4; i++) | ||||
| 		temp = 0.5*(temp + arg/temp); | ||||
| 	return(temp); | ||||
| } | ||||
							
								
								
									
										42
									
								
								lang/pc/libpc/string.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								lang/pc/libpc/string.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| /* function strbuf(var b:charbuf):string; */ | ||||
| 
 | ||||
| char *strbuf(s) char *s; { | ||||
| 	return(s); | ||||
| } | ||||
| 
 | ||||
| /* function strtobuf(s:string; var b:charbuf; blen:integer):integer; */ | ||||
| 
 | ||||
| int strtobuf(s,b,l) char *s,*b; { | ||||
| 	int i; | ||||
| 
 | ||||
| 	i = 0; | ||||
| 	while (--l>=0) { | ||||
| 		if ((*b++ = *s++) == 0) | ||||
| 			break; | ||||
| 		i++; | ||||
| 	} | ||||
| 	return(i); | ||||
| } | ||||
| 
 | ||||
| /* function strlen(s:string):integer; */ | ||||
| 
 | ||||
| int strlen(s) char *s; { | ||||
| 	int i; | ||||
| 
 | ||||
| 	i = 0; | ||||
| 	while (*s++) | ||||
| 		i++; | ||||
| 	return(i); | ||||
| } | ||||
| 
 | ||||
| /* function strfetch(s:string; i:integer):char; */ | ||||
| 
 | ||||
| int strfetch(s,i) char *s; { | ||||
| 	return(s[i-1]); | ||||
| } | ||||
| 
 | ||||
| /* procedure strstore(s:string; i:integer; c:char); */ | ||||
| 
 | ||||
| strstore(s,i,c) char *s; { | ||||
| 	s[i-1] = c; | ||||
| } | ||||
							
								
								
									
										15
									
								
								lang/pc/libpc/trap.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								lang/pc/libpc/trap.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| # | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| #define	TRAP	0 | ||||
| 
 | ||||
| ; trap is called with one parameter: | ||||
| ;	- trap number (TRAP) | ||||
| 
 | ||||
|  exp $trap | ||||
|  pro $trap,0 | ||||
|  lol TRAP | ||||
|  trp | ||||
|  ret 0 | ||||
|  end ? | ||||
							
								
								
									
										20
									
								
								lang/pc/libpc/trp.e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								lang/pc/libpc/trp.e
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| # | ||||
| 
 | ||||
|  mes 2,EM_WSIZE,EM_PSIZE | ||||
| 
 | ||||
| #define TRAP    0 | ||||
| 
 | ||||
| ; _trp() and trap() perform the same function, | ||||
| ; but have to be separate. trap exists to facilitate the user. | ||||
| ; _trp is there for the system, trap cannot be used for that purpose | ||||
| ; because a user might define its own Pascal routine called trap. | ||||
| 
 | ||||
| ; _trp is called with one parameter: | ||||
| ;       - trap number (TRAP) | ||||
| 
 | ||||
|  exp $_trp | ||||
|  pro $_trp,0 | ||||
|  lol TRAP | ||||
|  trp | ||||
|  ret 0 | ||||
|  end ? | ||||
							
								
								
									
										49
									
								
								lang/pc/libpc/unp.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								lang/pc/libpc/unp.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern		_trp(); | ||||
| 
 | ||||
| #define	assert()	/* nothing */ | ||||
| 
 | ||||
| struct descr { | ||||
| 	int	low; | ||||
| 	int	diff; | ||||
| 	int	size; | ||||
| }; | ||||
| 
 | ||||
| _unp(ad,zd,i,ap,zp) int i; struct descr *ad,*zd; char *ap,*zp; { | ||||
| 
 | ||||
| 	if (zd->diff > ad->diff || | ||||
| 			(i -= ad->low) < 0 || | ||||
| 			(i+zd->diff) > ad->diff) | ||||
| 		_trp(EUNPACK); | ||||
| 	ap += (i * ad->size); | ||||
| 	i = (zd->diff + 1) * zd->size; | ||||
| 	if (zd->size == 1) { | ||||
| 		assert(ad->size == 2); | ||||
| 		while (--i >= 0) | ||||
| 			*((int *)ap)++ = *zp++; | ||||
| 	} else { | ||||
| 		assert(ad->size == zd->size); | ||||
| 		while (--i >= 0) | ||||
| 			*ap++ = *zp++; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								lang/pc/libpc/uread.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								lang/pc/libpc/uread.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| /* function uread(fd:integer; var b:buf; n:integer):integer; */ | ||||
| 
 | ||||
| extern int	read(); | ||||
| 
 | ||||
| int uread(fd,b,n) char *b; int fd,n; { | ||||
| 	return(read(fd,b,n)); | ||||
| } | ||||
							
								
								
									
										7
									
								
								lang/pc/libpc/uwrite.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								lang/pc/libpc/uwrite.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| /* function uwrite(fd:integer; var b:buf; n:integer):integer; */ | ||||
| 
 | ||||
| extern int	write(); | ||||
| 
 | ||||
| int uwrite(fd,b,n) char *b; int fd,n; { | ||||
| 	return(write(fd,b,n)); | ||||
| } | ||||
							
								
								
									
										12
									
								
								lang/pc/libpc/wdw.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								lang/pc/libpc/wdw.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern struct file	*_curfil; | ||||
| extern			_incpt(); | ||||
| 
 | ||||
| char *_wdw(f) struct file *f; { | ||||
| 
 | ||||
| 	_curfil = f; | ||||
| 	if ((f->flags & (WINDOW|WRBIT|0377)) == MAGIC) | ||||
| 		_incpt(f); | ||||
| 	return(f->ptr); | ||||
| } | ||||
							
								
								
									
										14
									
								
								lang/pc/libpc/wf.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								lang/pc/libpc/wf.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| #include	<pc_file.h> | ||||
| #include	<pc_err.h> | ||||
| 
 | ||||
| extern struct file	*_curfil; | ||||
| extern			_trp(); | ||||
| 
 | ||||
| _wf(f) struct file *f; { | ||||
| 
 | ||||
| 	_curfil = f; | ||||
| 	if ((f->flags&0377) != MAGIC) | ||||
| 		_trp(EBADF); | ||||
| 	if ((f->flags & WRBIT) == 0) | ||||
| 		_trp(EWRITEF); | ||||
| } | ||||
							
								
								
									
										23
									
								
								lang/pc/libpc/wrc.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								lang/pc/libpc/wrc.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wf(); | ||||
| extern		_outcpt(); | ||||
| 
 | ||||
| _wrc(c,f) int c; struct file *f; { | ||||
| 	*f->ptr = c; | ||||
| 	_wf(f); | ||||
| 	_outcpt(f); | ||||
| } | ||||
| 
 | ||||
| _wln(f) struct file *f; { | ||||
| #ifdef CPM | ||||
| 	_wrc('\r',f); | ||||
| #endif | ||||
| 	_wrc('\n',f); | ||||
| 	f->flags |= ELNBIT; | ||||
| } | ||||
| 
 | ||||
| _pag(f) struct file *f; { | ||||
| 	_wrc('\014',f); | ||||
| 	f->flags |= ELNBIT; | ||||
| } | ||||
							
								
								
									
										60
									
								
								lang/pc/libpc/wrf.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								lang/pc/libpc/wrf.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wstrin(); | ||||
| extern char	*_fcvt(); | ||||
| 
 | ||||
| #define	assert()	/* nothing */ | ||||
| 
 | ||||
| #define	HUGE_DIG	39	/* log10(maxreal) */ | ||||
| #define	PREC_DIG	80	/* the maximum digits returned by _fcvt() */ | ||||
| #define	FILL_CHAR	'0'	/* char printed if all of _fcvt() used */ | ||||
| #define	BUFSIZE		HUGE_DIG + PREC_DIG + 2 | ||||
| 
 | ||||
| _wrf(n,w,r,f) int n,w; double r; struct file *f; { | ||||
| 	char *p,*b; int s,d; char buf[BUFSIZE]; | ||||
| 
 | ||||
| 	p = buf; | ||||
| 	if (n > PREC_DIG) | ||||
| 		n = PREC_DIG; | ||||
| 	b = _fcvt(r,n,&d,&s); | ||||
| 	assert(abs(d) <= HUGE_DIG); | ||||
| 	if (s) | ||||
| 		*p++ = '-'; | ||||
| 	if (d<=0) | ||||
| 		*p++ = '0'; | ||||
| 	else | ||||
| 		do | ||||
| 			*p++ = (*b ? *b++ : FILL_CHAR); | ||||
| 		while (--d > 0); | ||||
| 	if (n > 0) | ||||
| 		*p++ = '.'; | ||||
| 	while (++d <= 0) { | ||||
| 		if (--n < 0) | ||||
| 			break; | ||||
| 		*p++ = '0'; | ||||
| 	} | ||||
| 	while (--n >= 0) { | ||||
| 		*p++ = (*b ? *b++ : FILL_CHAR); | ||||
| 		assert(p <= buf+BUFSIZE); | ||||
| 	} | ||||
| 	_wstrin(w,p-buf,buf,f); | ||||
| } | ||||
							
								
								
									
										26
									
								
								lang/pc/libpc/wri.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								lang/pc/libpc/wri.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wstrin(); | ||||
| 
 | ||||
| _wsi(w,i,f) int w,i; struct file *f; { | ||||
| 	char *p; int j; char buf[6]; | ||||
| 
 | ||||
| 	p = &buf[6]; | ||||
| 	if ((j=i) < 0) { | ||||
| 		if (i == -32768) { | ||||
| 			_wstrin(w,6,"-32768",f); | ||||
| 			return; | ||||
| 		} | ||||
| 		j = -j; | ||||
| 	} | ||||
| 	do | ||||
| 		*--p = '0' + j%10; | ||||
| 	while (j /= 10); | ||||
| 	if (i<0) | ||||
| 		*--p = '-'; | ||||
| 	_wstrin(w,&buf[6]-p,p,f); | ||||
| } | ||||
| 
 | ||||
| _wri(i,f) int i; struct file *f; { | ||||
| 	_wsi(6,i,f); | ||||
| } | ||||
							
								
								
									
										48
									
								
								lang/pc/libpc/wrl.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								lang/pc/libpc/wrl.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wstrin(); | ||||
| 
 | ||||
| #define	MAXNEGLONG	-2147483648 | ||||
| 
 | ||||
| _wsl(w,l,f) int w; long l; struct file *f; { | ||||
| 	char *p,c; long j; char buf[11]; | ||||
| 
 | ||||
| 	p = &buf[11]; | ||||
| 	if ((j=l) < 0) { | ||||
| 		if (l == MAXNEGLONG) { | ||||
| 			_wstrin(w,11,"-2147483648",f); | ||||
| 			return; | ||||
| 		} | ||||
| 		j = -j; | ||||
| 	} | ||||
| 	do { | ||||
| 		c = j%10; | ||||
| 		*--p = c + '0'; | ||||
| 	} while (j /= 10); | ||||
| 	if (l<0) | ||||
| 		*--p = '-'; | ||||
| 	_wstrin(w,&buf[11]-p,p,f); | ||||
| } | ||||
| 
 | ||||
| _wrl(l,f) long l; struct file *f; { | ||||
| 	_wsl(11,l,f); | ||||
| } | ||||
							
								
								
									
										55
									
								
								lang/pc/libpc/wrr.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								lang/pc/libpc/wrr.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,55 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wstrin(); | ||||
| extern char	*_ecvt(); | ||||
| 
 | ||||
| #define	PREC_DIG	80	/* maximum digits produced by _ecvt() */ | ||||
| 
 | ||||
| _wsr(w,r,f) int w; double r; struct file *f; { | ||||
| 	char *p,*b; int s,d,i; char buf[PREC_DIG+6]; | ||||
| 
 | ||||
| 	p = buf; | ||||
| 	if ((i = w-6) < 2) | ||||
| 		i = 2; | ||||
| 	b = _ecvt(r,i,&d,&s); | ||||
| 	*p++ = s? '-' : ' '; | ||||
| 	if (*b == '0') | ||||
| 		d++; | ||||
| 	*p++ = *b++; | ||||
| 	*p++ = '.'; | ||||
| 	while (--i > 0) | ||||
| 		*p++ = *b++; | ||||
| 	*p++ = 'e'; | ||||
| 	d--; | ||||
| 	if (d < 0) { | ||||
| 		d = -d; | ||||
| 		*p++ = '-'; | ||||
| 	} else | ||||
| 		*p++ = '+'; | ||||
| 	*p++ = '0' + (d/10); | ||||
| 	*p++ = '0' + (d%10); | ||||
| 	_wstrin(w,p-buf,buf,f); | ||||
| } | ||||
| 
 | ||||
| _wrr(r,f) double r; struct file *f; { | ||||
| 	_wsr(13,r,f); | ||||
| } | ||||
							
								
								
									
										61
									
								
								lang/pc/libpc/wrs.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								lang/pc/libpc/wrs.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Author: J.W. Stevenson */ | ||||
| 
 | ||||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wf(); | ||||
| extern		_outcpt(); | ||||
| 
 | ||||
| _wstrin(width,len,buf,f) int width,len; char *buf; struct file *f; { | ||||
| 
 | ||||
| 	_wf(f); | ||||
| 	for (width -= len; width>0; width--) { | ||||
| 		*f->ptr = ' '; | ||||
| 		_outcpt(f); | ||||
| 	} | ||||
| 	while (--len >= 0) { | ||||
| 		*f->ptr = *buf++; | ||||
| 		_outcpt(f); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| _wsc(w,c,f) int w; char c; struct file *f; { | ||||
| 	_wss(w,1,&c,f); | ||||
| } | ||||
| 
 | ||||
| _wss(w,len,s,f) int w,len; char *s; struct file *f; { | ||||
| 	if (w < len) | ||||
| 		len = w; | ||||
| 	_wstrin(w,len,s,f); | ||||
| } | ||||
| 
 | ||||
| _wrs(len,s,f) int len; char *s; struct file *f; { | ||||
| 	_wss(len,len,s,f); | ||||
| } | ||||
| 
 | ||||
| _wsb(w,b,f) int w,b; struct file *f; { | ||||
| 	if (b) | ||||
| 		_wss(w,4,"true",f); | ||||
| 	else | ||||
| 		_wss(w,5,"false",f); | ||||
| } | ||||
| 
 | ||||
| _wrb(b,f) int b; struct file *f; { | ||||
| 	_wsb(5,b,f); | ||||
| } | ||||
							
								
								
									
										18
									
								
								lang/pc/libpc/wrz.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								lang/pc/libpc/wrz.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| #include	<pc_file.h> | ||||
| 
 | ||||
| extern		_wss(); | ||||
| extern		_wrs(); | ||||
| 
 | ||||
| _wsz(w,s,f) int w; char *s; struct file *f; { | ||||
| 	char *p; | ||||
| 
 | ||||
| 	for (p=s; *p; p++); | ||||
| 	_wss(w,p-s,s,f); | ||||
| } | ||||
| 
 | ||||
| _wrz(s,f) char *s; struct file *f; { | ||||
| 	char *p; | ||||
| 
 | ||||
| 	for (p=s; *p; p++); | ||||
| 	_wrs(p-s,s,f); | ||||
| } | ||||
		Loading…
	
	Add table
		
		Reference in a new issue