[comp.sys.isis] patches for CONVEX version of ISISv2.1

tclark@honir.cs.cornell.edu (Timothy Clark) (09/25/90)

This shar contains the patch files needed for the CONVEX port of ISIS.
The files include are:
        p.CONVEX.MAKEFILE       - the system makefile (i.e. make CONVEX)
        p.CONVEX.README         - the system README file
        p.Makefile              - generic Makefile
        p.clib.cl_setjmp.s      - patch for clib/cl_setjmp.c
        p.clib.cl_task.c        - patch for clib/cl_task.c
        p.clib.isis.h           - patch for clib/isis.h
        p.clib.makefile         - patch for clib/makefile
        p.protos.makefile       - patch for protos/makefile
        p.protos.pr.h           - patch for protos/pr.h
        p.protos.pr_setjmp.s    - patch for protos/pr_setjmp.s
        p.protos.pr_task.c      - patch for protos/pr_task.c
        p.util.long_haul.c      - patch for util/long_haul.c

In order to make use of these files you must first cut out the shar text and save it as a 
file.  Type /bin/sh <filename>.  Then run patch for each of the specified files.

For example:
cut text, save as patches
>/bin/sh patches
>patch isis.h < p.clib.isis.h   (either in same directory or specify path as needed)
repeat for each specified file

**NOTE:  As stated in the system README file, this port has not been extensively tested by 
The ISIS Project, and should be considered an experimental port.


#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	p.CONVEX.MAKEFILE
#	p.CONVEX.README
#	p.Makefile
#	p.clib.cl_setjmp.s
#	p.clib.cl_task.c
#	p.clib.isis.h
#	p.clib.makefile
#	p.protos.makefile
#	p.protos.pr.h
#	p.protos.pr_setjmp.s
#	p.protos.pr_task.c
#	p.util.long_haul.c
# This archive created: Mon Sep 24 15:51:12 1990
export PATH; PATH=/bin:$PATH
if test -f 'p.CONVEX.MAKEFILE'
then
	echo shar: will not over-write existing file "'p.CONVEX.MAKEFILE'"
else
cat << \SHAR_EOF > 'p.CONVEX.MAKEFILE'
***************
*** 0 ****
--- 1,71 ----
+ #  $RCSfile: makefile,v $ $Revision: 1.5 $ $Date: 90/04/25 13:15:25 $ 
+ SHELL = /bin/sh
+ MCH = MCHTYPE=CONVEX
+ 
+ MCHDEP = $(MCH) MCHDEPCFLAGS="-pcc -DBYPASS" OPLIBS=
+ # Use the following line if you want to enable bypass communication mode.
+ #MCHDEP = $(MCH) MCHDEPCFLAGS="-DBYPASS" OPLIBS=
+ 
+ # The following lines define useful sets of options for using either the 
+ # gcc compiler or the standard C compiler on your system.
+ OPTIMSTD = CC=cc OPTIM="-O"
+ DEBUGSTD = CC=cc OPTIM="-g"
+ OPTIMGCC =  CC=gcc OPTIM="-g -O"
+ DEBUGGCC = CC=gcc OPTIM="-g"
+ WARNGCC =  CC=gcc OPTIM="-g -O -W"
+ WALLGCC =  CC=gcc OPTIM="-g -Wall -O"
+ NOWARNGCC =  CC=gcc OPTIM="-g -w -O"
+ 
+ all: readme mlib clib protos util demos
+ 
+ readme:
+ 	@cat README
+ 
+ protos:	pr_action
+ clib:	cl_action
+ mlib:	ml_action
+ util:	ut_action
+ demos: de_action
+ 
+ pr_action:
+ 	cd protos; make $(MCHDEP) $(OPTIMSTD) ; cd ..
+ cl_action: 
+ 	cd clib; make $(MCHDEP) $(OPTIMSTD) ; cd ..
+ ml_action: 
+ 	cd mlib; make $(MCHDEP) $(OPTIMSTD) ; cd ..
+ ut_action: 
+ 	cd util; make $(MCHDEP) $(OPTIMSTD) ; cd ..
+ de_action: 
+ 	cd demos; make $(MCHDEP) $(OPTIMSTD) ; cd ..
+ 
+ UTILPROGS = cmd isis lmgr news prstat rexec \
+             rmgr rmgr_cmd spooler tabex xmgr 
+ DEMOPROGS = bank fortran_test grid lh_sp_test lisp_test \
+             qa selftest silentjoins sun_grid teller testjoins \
+             testtasks twenty wanClient wanServer spread
+ 
+ install:
+ 	(cd bin; /bin/rm -f protos $(UTILPROGS) $(DEMOPROGS) )
+ 	- (cd demos/pmk; make install )
+ 	ln protos/protos bin
+ 	(cd util; ln $(UTILPROGS) ../bin )
+ 	- (cd demos; ln $(DEMOPROGS) ../bin )
+ 	/bin/rm -f lib/libisis1.a lib/libisis2.a lib/libisism.a
+ 	ln clib/libisis1.a clib/libisis2.a mlib/libisism.a lib
+ 
+ clean:
+ 	/bin/rm -f protos/*.[os] clib/*.[os] mlib/*.o util/*.o demos/*.o
+ 	/bin/rm -f util/cmd[ly].[ch]
+ 	- (cd demos/pmk; make clean )
+ 
+ realclean: clean
+ 	- (cd demos/pmk; make realclean )
+ 	/bin/rm -f protos/protos
+ 	(cd util; /bin/rm -f $(UTILPROGS) )
+ 	(cd demos; /bin/rm -f $(DEMOPROGS) )
+ 	/bin/rm -f bin/*
+ 	/bin/rm -f clib/libisis1.a clib/libisis2.a mlib/libisism.a
+ 	/bin/rm -f lib/*.a
+ 	(cd run_demos; /bin/rm -f *.log core )
+ 	(cd run_isis; /bin/rm -f *.log core )
+
SHAR_EOF
fi # end of overwriting check
if test -f 'p.CONVEX.README'
then
	echo shar: will not over-write existing file "'p.CONVEX.README'"
else
cat << \SHAR_EOF > 'p.CONVEX.README'
***************
*** 0 ****
--- 1,8 ----
+ This is a recent port of ISIS to the Convex C2 series.
+ Port by Dave Forslund of Los Alamos Labs.  Not extensively tested yet.
+ 
+ Please report bugs or problems to isis-bugs@cs.cornell.edu
+ 
+ Consider this an experimental port...
+ 
+ Ken
SHAR_EOF
fi # end of overwriting check
if test -f 'p.Makefile'
then
	echo shar: will not over-write existing file "'p.Makefile'"
else
cat << \SHAR_EOF > 'p.Makefile'
***************
*** 147,153 ****
  NEXT:		NEXT_DIR_MADE NEXT_LAST_MAKE
  	cd NEXT; make; make install; date > NEXT_LAST_MAKE
  SGI:		SGI_DIR_MADE SGI_LAST_MAKE
 	cd SGI; make; make install; date > SGI_LAST_MAKE
  SUN3:		SUN3_DIR_MADE SUN3_LAST_MAKE
  	cd SUN3; make; make install; date > SUN3_LAST_MAKE
  SUN4:		SUN4_DIR_MADE SUN4_LAST_MAKE
--- 147,155 ----
  NEXT:		NEXT_DIR_MADE NEXT_LAST_MAKE
  	cd NEXT; make; make install; date > NEXT_LAST_MAKE
  SGI:		SGI_DIR_MADE SGI_LAST_MAKE
 	cd SGI; make; make install; date > SGI_LAST_MAKE
! CONVEX:		CONVEX_DIR_MADE CONVEX_LAST_MAKE
! 	cd CONVEX; make; make install; date > CONVEX_LAST_MAKE
  SUN3:		SUN3_DIR_MADE SUN3_LAST_MAKE
  	cd SUN3; make; make install; date > SUN3_LAST_MAKE
  SUN4:		SUN4_DIR_MADE SUN4_LAST_MAKE
SHAR_EOF
fi # end of overwriting check
if test -f 'p.clib.cl_setjmp.s'
then
	echo shar: will not over-write existing file "'p.clib.cl_setjmp.s'"
else
cat << \SHAR_EOF > 'p.clib.cl_setjmp.s'
***************
*** 517,519 ****
--- 517,603 ----
          .align 2
  	.tbtag 0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
  #endif AIXRS
+ #ifdef CONVEX
+ 
+ PSW_FRL =  0x06000000
+ 
+ PSW_SF	=  0x06000000
+ 
+ JMPMAGIC = -33
+ JMPMAGIC2 = -333
+ 
+ MAG1SAVE = 0
+ PCSAVE = 4
+ PSWSAVE = 8
+ FPSAVE = 12
+ SPSAVE = 16
+ MAG2SAVE = 32
+ 
+ 	.text
+ 	.globl	_isis_setjmp
+ _isis_setjmp:
+ 	ld.w	0(ap),a1		; get jump buffer address
+ 	ld.w	#JMPMAGIC2,s0		; store magic number in buffer
+ 	st.w	s0,MAG1SAVE(a1)
+ 
+ 	ld.w	8(fp),s0
+ 	st.w	s0,FPSAVE(a1)		; save frame pointer of caller
+ 
+ 	ld.w	4(fp),s0
+ 	st.w	s0,PSWSAVE(a1)		; save program status word
+ 
+ 	ld.w	0(fp),s0
+ 	st.w	s0,PCSAVE(a1)		; save pc of caller
+ 
+ 	ld.w	4(fp),s0		; psw of caller
+ 
+ 	and	#PSW_FRL,s0		; extract frl bits
+ 	eq.w	#PSW_SF,s0		; short frame?
+ 	brs.f	L1
+ 
+ 	mov	sp,s0
+ 	add.w	#16,s0			; sp before calls
+ 	br	L2
+ 
+ L1:	mov	sp,s0		
+ 	add.w	#92,s0			; sp before call
+ 
+ L2:	st.w	s0,SPSAVE(a1)		; save sp of caller
+ 
+ 	ld.w	#JMPMAGIC,s0		; store magic number 
+ 	st.w	s0,MAG2SAVE(a1)
+ 	sub.l	s0,s0
+ 	rtn
+ 
+ 	.globl	_isis_longjmp
+ _isis_longjmp:
+ 	ld.w	0(ap),a1		; fetch buffer address
+ 	ld.w	4(ap), s0		; save return value
+ 
+ 	ld.w	MAG1SAVE(a1),s2		; make sure env buffer is from
+ 	eq.w	#JMPMAGIC2,s2		; _setjmp
+ 	jbrs.f	botch
+ 
+ 	ld.w	MAG2SAVE(a1),s2
+ 	eq.w	#JMPMAGIC,s2
+ 	jbrs.f	botch
+ 
+ ; Restore the stack environment and return the value passed to longjmp.
+ 
+ 	ld.w	FPSAVE(a1), fp	; restore frame pointer
+ 	ld.w	SPSAVE(a1), sp	; restore stack pointer
+ 	ld.w	PSWSAVE(a1), a3	; restore psw
+ 	mov	a3, psw
+ 	ld.w	PCSAVE(a1), a2	; restore pc
+ 	jmp	(a2)		; return 
+ 
+ botch:
+ 	pshea	#16
+ 	pshea	msg
+ 	pshea	#2
+ 	mov	sp,ap
+ 	calls	_write
+ 	halt	#0,sp
+ 
+ msg:	ds.b	"longjmp botch - \0"
+ #endif CONVEX
SHAR_EOF
fi # end of overwriting check
if test -f 'p.clib.cl_task.c'
then
	echo shar: will not over-write existing file "'p.clib.cl_task.c'"
else
cat << \SHAR_EOF > 'p.clib.cl_task.c'
***************
*** 45,54 ****
  
  /* On some machine setjmp and longjmp work fine for ISIS */
  #ifndef THREADS
! #    if     (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI|CONVEX)
  #        define    isis_setjmp      _setjmp
  #        define    isis_longjmp     _longjmp
! #    endif  (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI|CONVEX)
  #    if     (AIX)
  #        define    isis_setjmp      setjmp
  #        define    isis_longjmp     longjmp
--- 45,54 ----
  
  /* On some machine setjmp and longjmp work fine for ISIS */
  #ifndef THREADS
! #    if     (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI)
  #        define    isis_setjmp      _setjmp
  #        define    isis_longjmp     _longjmp
! #    endif  (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI)
  #    if     (AIX)
  #        define    isis_setjmp      setjmp
  #        define    isis_longjmp     longjmp
***************
*** 497,503 ****
  #endif          hp9000s800
              }
  #           endif
! #           if(AIX|MIPS|RT43|SGI)
              {
                  jmp_buf env;
                  int *envp;
--- 497,503 ----
  #endif          hp9000s800
              }
  #           endif
! #           if(AIX|MIPS|RT43|SGI|CONVEX)
              {
                  jmp_buf env;
                  int *envp;
SHAR_EOF
fi # end of overwriting check
if test -f 'p.clib.isis.h'
then
	echo shar: will not over-write existing file "'p.clib.isis.h'"
else
cat << \SHAR_EOF > 'p.clib.isis.h'
***************
*** 136,141 ****
--- 136,142 ----
  
  #ifdef CONVEX
  # define UNIX_DOM	1
+ # define JB_SP		4
  #endif CONVEX
  
  #ifdef SGI
***************
*** 170,180 ****
  #define bzero(a,b)   memset(a,0,b)
  #endif HPUX
  
! #if    	(AIX|AIXRS|HPUX|SUN|VAX|SGI|MIPS|AUX)
  #   define isis_dofork()    fork()
  #else
  #   define isis_dofork()    vfork()
! #endif  (AIX|AIXRS|HPUX|SUN|VAX|SGI|MIPS|AUX)
  
  #define MAX_PROCS       64
  #define MAX_SITES       127             /* Also change in pr.h! */
--- 171,181 ----
  #define bzero(a,b)   memset(a,0,b)
  #endif HPUX
  
! #if    	(AIX|AIXRS|HPUX|SUN|VAX|SGI|MIPS|AUX|CONVEX)
  #   define isis_dofork()    fork()
  #else
  #   define isis_dofork()    vfork()
! #endif  (AIX|AIXRS|HPUX|SUN|VAX|SGI|MIPS|AUX|CONVEX)
  
  #define MAX_PROCS       64
  #define MAX_SITES       127             /* Also change in pr.h! */
SHAR_EOF
fi # end of overwriting check
if test -f 'p.clib.makefile'
then
	echo shar: will not over-write existing file "'p.clib.makefile'"
else
cat << \SHAR_EOF > 'p.clib.makefile'
***************
*** 68,76 ****
  ap_dummy.o:	$(S)/ap_dummy.c; $(CC) -c $(CFLAGS) $(S)/ap_dummy.c
  cl_sundummy.o:	$(S)/cl_sundummy.c; $(CC) -c $(CFLAGS) $(S)/cl_sundummy.c
  cl_setjmp.o:	cl_setjmp.s $(S)/cl_setjmp.c
! 		-if test $(MCHTYPE) != GOULD -a $(MCHTYPE) != RT43 -a $(MCHTYPE) != MIPS  -a $(MCHTYPE) != AIX -a $(MCHTYPE) != MACH -a $(MCHTYPE) != APOLLO -a $(MCHTYPE) != SGI -a $(MCHTYPE) != CONVEX ; then cc -c $(CPPFLAGS) cl_setjmp.s; fi
! 		-if test $(MCHTYPE) = GOULD -o $(MCHTYPE) = RT43 -o $(MCHTYPE) = MIPS  -o $(MCHTYPE) = AIX -o $(MCHTYPE) = MACH -o $(MCHTYPE) = APOLLO -o $(MCHTYPE) = SGI -o $(MCHTYPE) = CONVEX; then $(CC) -c $(CFLAGS) $(S)/cl_setjmp.c; fi
! cl_setjmp.s:	$(S)/cl_setjmp.s; /lib/cpp $(CPPFLAGS) $(S)/cl_setjmp.s > x; mv x cl_setjmp.s
  tk_xaction.o:	$(S)/tk_xaction.c; $(CC) -c $(CFLAGS) $(S)/tk_xaction.c
  cl_token.o:	$(S)/cl_token.c; $(CC) -c $(CFLAGS) $(S)/cl_token.c
  cl_sunlwp_fix.o:	$(S)/cl_sunlwp_fix.c; cc -c $(CPPFLAGS) $(S)/cl_sunlwp_fix.c
--- 68,78 ----
  ap_dummy.o:	$(S)/ap_dummy.c; $(CC) -c $(CFLAGS) $(S)/ap_dummy.c
  cl_sundummy.o:	$(S)/cl_sundummy.c; $(CC) -c $(CFLAGS) $(S)/cl_sundummy.c
  cl_setjmp.o:	cl_setjmp.s $(S)/cl_setjmp.c
! 		-if test $(MCHTYPE) != GOULD -a $(MCHTYPE) != RT43 -a $(MCHTYPE) != MIPS  -a $(MCHTYPE) != AIX -a $(MCHTYPE) != MACH -a $(MCHTYPE) != APOLLO -a $(MCHTYPE) != SGI ; then cc -c $(CPPFLAGS) cl_setjmp.s; fi
! 		-if test $(MCHTYPE) = GOULD -o $(MCHTYPE) = RT43 -o $(MCHTYPE) = MIPS  -o $(MCHTYPE) = AIX -o $(MCHTYPE) = MACH -o $(MCHTYPE) = APOLLO -o $(MCHTYPE) = SGI ; then $(CC) -c $(CFLAGS) $(S)/cl_setjmp.c; fi
! cl_setjmp.s:	$(S)/cl_setjmp.s 
! 	-if test $(MCHTYPE) != CONVEX ; then /lib/cpp $(CPPFLAGS) $(S)/cl_setjmp.s > x; mv x cl_setjmp.s; fi
! 	-if test $(MCHTYPE) = CONVEX; then cp $(S)/cl_setjmp.s cl_setjmp.s; fi
  tk_xaction.o:	$(S)/tk_xaction.c; $(CC) -c $(CFLAGS) $(S)/tk_xaction.c
  cl_token.o:	$(S)/cl_token.c; $(CC) -c $(CFLAGS) $(S)/cl_token.c
  cl_sunlwp_fix.o:	$(S)/cl_sunlwp_fix.c; cc -c $(CPPFLAGS) $(S)/cl_sunlwp_fix.c
SHAR_EOF
fi # end of overwriting check
if test -f 'p.protos.makefile'
then
	echo shar: will not over-write existing file "'p.protos.makefile'"
else
cat << \SHAR_EOF > 'p.protos.makefile'
***************
*** 58,64 ****
  pr_viewlocks.o:	$(S)/pr_viewlocks.c; $(CC) -c $(CFLAGS) $(S)/pr_viewlocks.c
  pr_glocks.o:	$(S)/pr_glocks.c; $(CC) -c $(CFLAGS) $(S)/pr_glocks.c
  pr_setjmp.o:    pr_setjmp.s $(S)/pr_setjmp.c
! 		-if test $(MCHTYPE) != GOULD -a $(MCHTYPE) != RT43 -a $(MCHTYPE) != MIPS -a $(MCHTYPE) != AIX -a $(MCHTYPE) != MACH -a $(MCHTYPE) != APOLLO -a $(MCHTYPE) != SGI -a $(MCHTYPE) != CONVEX; then cc -c $(CFLAGS) pr_setjmp.s; fi
! 		-if test $(MCHTYPE) = GOULD -o $(MCHTYPE) = RT43 -o $(MCHTYPE) = MIPS -o $(MCHTYPE) = AIX -o $(MCHTYPE) = MACH -o $(MCHTYPE) = APOLLO -o $(MCHTYPE) = SGI -o $(MCHTYPE) = CONVEX; then $(CC) -c $(CFLAGS) $(S)/pr_setjmp.c; fi
! pr_setjmp.s:    $(S)/pr_setjmp.s; /lib/cpp $(CPPFLAGS) $(S)/pr_setjmp.s > x; mv x pr_setjmp.s
  pr_msgtank.o: 	$(S)/pr_msgtank.c; $(CC) -c $(CFLAGS) $(S)/pr_msgtank.c
--- 58,66 ----
  pr_viewlocks.o:	$(S)/pr_viewlocks.c; $(CC) -c $(CFLAGS) $(S)/pr_viewlocks.c
  pr_glocks.o:	$(S)/pr_glocks.c; $(CC) -c $(CFLAGS) $(S)/pr_glocks.c
  pr_setjmp.o:    pr_setjmp.s $(S)/pr_setjmp.c
! 		-if test $(MCHTYPE) != GOULD -a $(MCHTYPE) != RT43 -a $(MCHTYPE) != MIPS -a $(MCHTYPE) != AIX -a $(MCHTYPE) != MACH -a $(MCHTYPE) != APOLLO -a $(MCHTYPE) != SGI ; then cc -c $(CFLAGS) pr_setjmp.s; fi
! 		-if test $(MCHTYPE) = GOULD -o $(MCHTYPE) = RT43 -o $(MCHTYPE) = MIPS -o $(MCHTYPE) = AIX -o $(MCHTYPE) = MACH -o $(MCHTYPE) = APOLLO -o $(MCHTYPE) = SGI ; then $(CC) -c $(CFLAGS) $(S)/pr_setjmp.c; fi
! pr_setjmp.s:    $(S)/pr_setjmp.s
! 	-if test $(MCHTYPE) != CONVEX; then /lib/cpp $(CPPFLAGS) $(S)/pr_setjmp.s > x; mv x pr_setjmp.s; fi
! 	-if test $(MCHTYPE) = CONVEX; then cp $(S)/pr_setjmp.s pr_setjmp.s; fi
  pr_msgtank.o: 	$(S)/pr_msgtank.c; $(CC) -c $(CFLAGS) $(S)/pr_msgtank.c
SHAR_EOF
fi # end of overwriting check
if test -f 'p.protos.pr.h'
then
	echo shar: will not over-write existing file "'p.protos.pr.h'"
else
cat << \SHAR_EOF > 'p.protos.pr.h'
***************
*** 70,75 ****
--- 70,80 ----
  /* JB_SP defined in jmpbuf.h */
  #endif
  
+ #ifdef CONVEX
+ # define UNIX_DOM	1
+ #define JB_SP		4
+ #endif
+ 
  #ifdef  SGI
  # define UNIX_DOM           1
  /* JB_SP defined in jmpbuf.h */
SHAR_EOF
fi # end of overwriting check
if test -f 'p.protos.pr_setjmp.s'
then
	echo shar: will not over-write existing file "'p.protos.pr_setjmp.s'"
else
cat << \SHAR_EOF > 'p.protos.pr_setjmp.s'
***************
*** 510,512 ****
--- 510,595 ----
          .align 2
  	.tbtag 0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
  #endif  AIXRS
+ #ifdef CONVEX
+ PSW_FRL =  0x06000000
+ 
+ PSW_SF	=  0x06000000
+ 
+ JMPMAGIC = -33
+ JMPMAGIC2 = -333
+ 
+ MAG1SAVE = 0
+ PCSAVE = 4
+ PSWSAVE = 8
+ FPSAVE = 12
+ SPSAVE = 16
+ MAG2SAVE = 32
+ 
+ 	.text
+ 	.globl	_isis_setjmp
+ _isis_setjmp:
+ 	ld.w	0(ap),a1		; get jump buffer address
+ 	ld.w	#JMPMAGIC2,s0		; store magic number in buffer
+ 	st.w	s0,MAG1SAVE(a1)
+ 
+ 	ld.w	8(fp),s0
+ 	st.w	s0,FPSAVE(a1)		; save frame pointer of caller
+ 
+ 	ld.w	4(fp),s0
+ 	st.w	s0,PSWSAVE(a1)		; save program status word
+ 
+ 	ld.w	0(fp),s0
+ 	st.w	s0,PCSAVE(a1)		; save pc of caller
+ 
+ 	ld.w	4(fp),s0		; psw of caller
+ 
+ 	and	#PSW_FRL,s0		; extract frl bits
+ 	eq.w	#PSW_SF,s0		; short frame?
+ 	brs.f	L1
+ 
+ 	mov	sp,s0
+ 	add.w	#16,s0			; sp before calls
+ 	br	L2
+ 
+ L1:	mov	sp,s0		
+ 	add.w	#92,s0			; sp before call
+ 
+ L2:	st.w	s0,SPSAVE(a1)		; save sp of caller
+ 
+ 	ld.w	#JMPMAGIC,s0		; store magic number 
+ 	st.w	s0,MAG2SAVE(a1)
+ 	sub.l	s0,s0
+ 	rtn
+ 
+ 	.globl	_isis_longjmp
+ _isis_longjmp:
+ 	ld.w	0(ap),a1		; fetch buffer address
+ 	ld.w	4(ap), s0		; save return value
+ 
+ 	ld.w	MAG1SAVE(a1),s2		; make sure env buffer is from
+ 	eq.w	#JMPMAGIC2,s2		; _setjmp
+ 	jbrs.f	botch
+ 
+ 	ld.w	MAG2SAVE(a1),s2
+ 	eq.w	#JMPMAGIC,s2
+ 	jbrs.f	botch
+ 
+ ; Restore the stack environment and return the value passed to longjmp.
+ 
+ 	ld.w	FPSAVE(a1), fp	; restore frame pointer
+ 	ld.w	SPSAVE(a1), sp	; restore stack pointer
+ 	ld.w	PSWSAVE(a1), a3	; restore psw
+ 	mov	a3, psw
+ 	ld.w	PCSAVE(a1), a2	; restore pc
+ 	jmp	(a2)		; return 
+ 
+ botch:
+ 	pshea	#16
+ 	pshea	msg
+ 	pshea	#2
+ 	mov	sp,ap
+ 	calls	_write
+ 	halt	#0,sp
+ 
+ msg:	ds.b	"longjmp botch - \0"
+ #endif
SHAR_EOF
fi # end of overwriting check
if test -f 'p.protos.pr_task.c'
then
	echo shar: will not over-write existing file "'p.protos.pr_task.c'"
else
cat << \SHAR_EOF > 'p.protos.pr_task.c'
***************
*** 28,37 ****
  
  /* On some machine setjmp and longjmp work fine for ISIS */ 
  #ifndef THREADS
! #    if     (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI|CONVEX)
  #        define    isis_setjmp      _setjmp
  #        define    isis_longjmp     _longjmp
! #    endif  (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI|CONVEX)
  #    if     (AIX)
  #        define    isis_setjmp      setjmp
  #        define    isis_longjmp     longjmp
--- 28,37 ----
  
  /* On some machine setjmp and longjmp work fine for ISIS */ 
  #ifndef THREADS
! #    if     (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI)
  #        define    isis_setjmp      _setjmp
  #        define    isis_longjmp     _longjmp
! #    endif  (AIXRS|GOULD|hp9000s800|NEXT|MIPS|RT43|SGI)
  #    if     (AIX)
  #        define    isis_setjmp      setjmp
  #        define    isis_longjmp     longjmp
***************
*** 297,303 ****
  #endif          hp9000s800
              }
  #           endif
! #           if(MIPS|AIX|RT43|SGI)
              {
                  jmp_buf env;
                  int *envp;
--- 297,303 ----
  #endif          hp9000s800
              }
  #           endif
! #           if(MIPS|AIX|RT43|SGI|CONVEX)
              {
                  jmp_buf env;
                  int *envp;
SHAR_EOF
fi # end of overwriting check
if test -f 'p.util.long_haul.c'
then
	echo shar: will not over-write existing file "'p.util.long_haul.c'"
else
cat << \SHAR_EOF > 'p.util.long_haul.c'
***************
*** 2660,2666 ****
  struct sockaddr *addr;
  int *addrlen;
  {
!   int i, j=*addrlen;
    again:
    *addrlen = j;
    i = accept(s, addr, addrlen);
--- 2660,2666 ----
  struct sockaddr *addr;
  int *addrlen;
  {
!   int i, j = *addrlen;
    again:
    *addrlen = j;
    i = accept(s, addr, addrlen);
SHAR_EOF
fi # end of overwriting check
#	End of shell archive
exit 0