* Copyright (c) 1980 The Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1980 The Regents of the University of California.\n\
static char sccsid
[] = "@(#)int.c 5.3 (Berkeley) 4/16/91";
* px - interpreter for Berkeley Pascal
* Version 3.0 Winter 1979
* Original version for the PDP 11/70 authored by:
* Bill Joy, Charles Haley, Ken Thompson
* Rewritten for VAX 11/780 by Kirk McKusick
extern union progcntr pdx_pc
; /* address of interpreter program cntr */
register char *objprog
, *file
;
register long bytesread
, bytestoread
, block
;
* Determine how PX was invoked, and how to process the program
if (!strcmp(_argv
[0], "pdx")) {
} else if (!strcmp(_argv
[0], "pix")) {
} else if (!strcmp(_argv
[0], "pipe")) {
* kludge to check for old style objs.
if (_mode
== PX
&& !strcmp(file
, "-")) {
fprintf(stderr
, "%s is obsolete and must be recompiled\n",
* Process program header information
read(pipe
,&pxhd
,sizeof(struct pxhdr
));
fread(&pxhd
,sizeof(struct pxhdr
),1,prog
);
if (pxhd
.magicnum
!= MAGICNUM
) {
fseek(prog
,(long)(HEADER_BYTES
-sizeof(struct pxhdr
)),0);
fread(&pxhd
,sizeof(struct pxhdr
),1,prog
);
if (pxhd
.magicnum
!= MAGICNUM
) {
fprintf(stderr
,"%s is not a Pascal interpreter file\n",name
);
if (pxhd
.maketime
< createtime
) {
fprintf(stderr
,"%s is obsolete and must be recompiled\n",name
);
* Load program into memory
objprog
= malloc((int)pxhd
.objsize
);
bytestoread
= pxhd
.objsize
;
block
= read(pipe
,(int)(objprog
+bytesread
),bytestoread
);
bytesread
= fread(objprog
,1,(int)pxhd
.objsize
,prog
);
if (bytesread
!= pxhd
.objsize
) {
fprintf(stderr
,"Read error occurred while loading %s\n",file
);
fputs("Execution begins...\n",stderr
);
* set interpreter to catch expected signals and begin interpretation
if (signal(SIGINT
,SIG_IGN
) != SIG_IGN
)
* See if we're being watched by the debugger, if so set a trap.
if (_mode
== PDX
|| (_mode
== PIX
&& pxhd
.symtabsize
> 0)) {
inittrap(&_display
, &_dp
, objprog
, &pdx_pc
, loopaddr
);
* reset signals, deallocate memory, and exit normally
* Generate an IOT trap to tell the debugger that the object code
* has been read in. Parameters are there for debugger to look at,
inittrap(dispaddr
, dpaddr
, endaddr
, pcaddr
, loopaddrp
)