[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

pmax fixes on comp.lang.lisp



>From shelby!rutgers!tut.cis.ohio-state.edu!uc!cs.umn.edu!umnstat.stat.umn.edu!luke Tue Jun 26 13:53:06 PDT 1990
Article 775 of comp.lang.lisp:
Path: sunrise!shelby!rutgers!tut.cis.ohio-state.edu!uc!cs.umn.edu!umnstat.stat.umn.edu!luke
>From: luke@umnstat.stat.umn.edu (Luke Tierney)
Newsgroups: comp.lang.lisp
Subject: Re: (a)kcl on DECstation-3100
Message-ID: <1990Jun26.135716.22153@cs.umn.edu>
Date: 26 Jun 90 13:57:16 GMT
Sender: news@cs.umn.edu (News administrator)
Reply-To: luke@umnstat.stat.umn.edu (Luke Tierney)
Organization: School of Statistics, University of Minnesota
Lines: 747

This is in response to a recent request to this news group:

I made a few minor modifications to the sgi4d files from the 1-478
distribution of akcl to get it to compile on a DEC3100. Mainly a change
to little_endian IEEE and a hack to the unixsave file to get around
some weirdness in ULTRIX. I thought I would post them in case they are
of any use to anyone else. I can't make any guarantees, but these
hacks seem to work.

luke
luke@umnstat.stat.umn.edu

-----------------------------(cut here)---------------------------------
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  README pmax.defs pmax.h pmaxarith.s unixsave_pmax.c
# Wrapped by luke@temper.stat.cmu.edu on Mon Jun 25 21:56:21 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(1274 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XThese files seem to produce a working akcl on a DECstation 3100. They
Xare based on the definitions for the sgi4d included in akcl and work
Xby Alessandro Forin on an earlier kcl port.
X
XThe files included here seem to work with akcl-1-478. I have not tried
Xthem on earlier versions. To build akcl on a pmax,
X
X	get kcl and akcl sources from rascal.ics.utexas.edu
X
X	untar the sources
X
X	put the files pmax.h and pmax.defs in the akcl `h' directory
X
X	put the files pmaxarith.s and unixsave_pmax.c in the akcl `c'
X	directory
X
X	follow the akcl directions:
X
X		edit pmax.defs as needed
X
X		do an `add-defs pmax'
X
X		do a `make -f Smakefile'
X
X
XNOTES
X-----
XThe major change from sgi4d.h to pmax.h is to define LITTLE_ENDIAN.
X
XThe major changes from unixsave_sgi.c to unixsave_pmax.c use
Xmodifications by Alessandro Forin. There are two groups. The first
Xdeals with the fact that pmax ZMAGIC files leave out the init section.
XThe rest seem to be needed because of some weirdness/bugs in ULTRIX.
XThe code at the end of unixsave_sgi.c is intended to close all file
Xdescriptors but 0, 1 and 2. It apparently works on the iris, but on
Xthe pmax it just hangs. The change in unixsave_pmax.c is to close all
Xdescriptors with by calling _cleanup() and reopen stderr if needed.
XThat seems to work.
END_OF_FILE
if test 1274 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'pmax.defs' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pmax.defs'\"
else
echo shar: Extracting \"'pmax.defs'\" \(1277 characters\)
sed "s/^X//" >'pmax.defs' <<'END_OF_FILE'
X
X# Machine dependent makefile definitions for DEC mips box
X
XLBINDIR=/usr/local/bin
X
XOFLAG	=  
XLIBS	= -lm
XODIR_DEBUG=
XNULLFILE = ../h/twelve_null
XSHELL=/bin/sh
X
X.IGNORE:
X
X# This CC string will be used for compilation of the system,
X# and also in the compiler::*cc* variable for later compilation of
X# lisp files.
X
X# also defined in `machine'.h file
X# The one here must be == the one in the .h file.
X# It must be a multiple of 0x200000 greater that 0x400000 the
X# default text start.
XDBEGIN=800000
X
X# If you don't plan on linking in a lot of other stuff
X# like maxima, you may be able to can increase the -G 0 to -G 800 or so.
X# That should be a bit faster..
X
XCC = cc -DVOL=volatile -O -G 0 -I${AKCLDIR}/o
XLDCC = cc -G 0 -Wl,-D,${DBEGIN} -x
X
X# Where the original KCL distribution resides.
X
XMAINDIR = /TEMPER/usr/users/luke/akcl/kcl
X
X# Enable the fastloading mechanism which does not use ld -A
X# requires c/rel_.. machine dependent code.
X
X# RSYM	= rsym
X# SFASL	= $(ODIR)/sfasl.o
X
X# When using SFASL it is good to have (si::build-symbol-table)
X# INITFORM=(si::build-symbol-table)
X# incremental loading with -A requires -G 0
XINITFORM=(setq compiler::*cc* "cc -DVOL=volatile -G 0 ")(load "../lsp/setdoc.lsp")
X
X# Use symbolic links
XSYMB=-s
X
XEMUL= $(ODIR)/pmaxarith.o
X
XRANLIB= ar lts 
END_OF_FILE
if test 1277 -ne `wc -c <'pmax.defs'`; then
    echo shar: \"'pmax.defs'\" unpacked with wrong size!
fi
# end of 'pmax.defs'
fi
if test -f 'pmax.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pmax.h'\"
else
echo shar: Extracting \"'pmax.h'\" \(1183 characters\)
sed "s/^X//" >'pmax.h' <<'END_OF_FILE'
X#define SGI
X#include "att.h"
X
X#define ADDITIONAL_FEATURES \
X		     ADD_FEATURE("PMAX"); \
X		     ADD_FEATURE("MIPS")
X
X/* #define	mips 1
X   The system defines this
X */
X#define	IEEEFLOAT
X#define LITTLE_ENDIAN
X
X#undef   FILECPY_HEADER
X#define FILECPY_HEADER \
X  	filecpy(save, original, header.a_text);
X
X
X	/* text relocated; data is page-aligned after the text */
X#define DATA_BEGIN (char *)((TXTRELOC+header.a_text+(PAGSIZ-1)) & ~(PAGSIZ-1))
X
X#define	PAGSIZ		4096
X#define	TXTRELOC	4096
X
X#undef SET_REAL_MAXPAGE
X#define SET_REAL_MAXPAGE real_maxpage = MAXPAGE 
X
X#define RELOC_FILE "rel_mips.c"
X
X#undef SFASL
X
X#undef NEED_GETWD
X
X#define SEEK_TO_END_OFILE \
X       	do{HDRR symhdr; \
X	   fp = faslfile->sm.sm_fp;\
X           fread(&fileheader, sizeof(fileheader), 1, fp); \
X	   fseek(fp, fileheader.f_symptr, 0); \
X 	   fread(&symhdr, cbHDRR, 1, fp); \
X            fseek(fp, symhdr.cbExtOffset + symhdr.iextMax * cbEXTR, 0);} \
X       while(0);
X
X
X#ifdef IN_UNIXFSYS
X#undef ATT
X#define BSD
X#endif
X
X#define DBEGIN 0x800000
X               
X#define UNIXSAVE "unixsave_pmax.c"
X#define UNIXFASL "unixfasl_sgi.c"
X#define HAVE_GETDTABLESIZE
X
X/* Begin for cmpinclude */
X
X
X/* End for cmpinclude */
END_OF_FILE
if test 1183 -ne `wc -c <'pmax.h'`; then
    echo shar: \"'pmax.h'\" unpacked with wrong size!
fi
# end of 'pmax.h'
fi
if test -f 'pmaxarith.s' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pmaxarith.s'\"
else
echo shar: Extracting \"'pmaxarith.s'\" \(1288 characters\)
sed "s/^X//" >'pmaxarith.s' <<'END_OF_FILE'
X#include <regdef.h>
X  
X /*  earith.s for MIPS R2000 processor
X      by Doug Katzman
X      version 2.1.d dated 7/13/89 15:31 EDT */
X
X # mods 7/13/89:
X #   emul: never conditionally branch
X #   ediv: improved code ordering allows jmp delay slot optimization by 'as'
X #
X	.text	
X	.align	2
X
X	.globl	extended_mul
X #  	extended_mul(d, q, r, hp, lp)
X #  	     unsigned int d, q, r, *hp, *lp;
X #  	{
X	.ent	extended_mul
Xextended_mul:
X	.frame	sp, 0, ra
X
X	mult	a0, a1		# [hi:lo] = d * q
X	mfhi	a1
X	sll	a1, 1
X	mflo	a0
X	srl	t7, a0, 31	
X	and	a0, 0x7fffffff
X	or	a1, t7
X	addu	a0, a2		# [a1:a0] += r
X	srl	t7, a0, 31	
X	and	a0, 0x7fffffff
X	addu	a1, t7
X	sw	a1, 0(a3)	# *hp = a1
X	lw	a3, 16(sp)	# fetch fifth actual argument from stack
X	sw	a0, 0(a3)	# *lp = a0
X #  	}
X	j	ra
X	.end	extended_mul
X
X	.globl	extended_div
X #   	extended_div(d, h, l, qp, rp)
X #   	     unsigned int d, h, l, *qp, *rp;
X #   	{
X	.ent	extended_div
Xextended_div:
X	.frame	sp, 0, ra
X
X	sll	a2, 1		
X	li	v0, 31		# v0 holds number of shifts
Xloop:
X	srl	t7, a2, 31
X	sll	a1, 1	
X	or	a1, t7
X	sll	a2, 1
X	subu	t7, a1, a0	# t = h - d
X	bltz	t7, underflow
X	move	a1, t7
X	or	a2, 1
Xunderflow:
X	subu	v0, 1
X	bnez	v0, loop
X	sw	a2, 0(a3)	# *qp = l
X	lw	a3, 16(sp)	# fetch fifth actual argument from stack
X	sw	a1, 0(a3)	# *rp = h
X #   	}
X	j	ra
X	.end	extended_div
X
X
END_OF_FILE
if test 1288 -ne `wc -c <'pmaxarith.s'`; then
    echo shar: \"'pmaxarith.s'\" unpacked with wrong size!
fi
# end of 'pmaxarith.s'
fi
if test -f 'unixsave_pmax.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'unixsave_pmax.c'\"
else
echo shar: Extracting \"'unixsave_pmax.c'\" \(9253 characters\)
sed "s/^X//" >'unixsave_pmax.c' <<'END_OF_FILE'
X
X/* for the pmax */
X
X/*
X(c) Copyright Taiichi Yuasa and Masami Hagiya, 1984.  All rights reserved.
XCopying of this file is authorized to users who have executed the true and
Xproper "License Agreement for Kyoto Common LISP" with SIGLISP.
X*/
X
X/*
X	unixsave.c
X*/
X
X
X
X/* When MACHINE is S3000, use fcntl.h */
X#ifdef ATT
X#include <fcntl.h>
X#include <unistd.h>
X#else
X#include <sys/file.h>
X#endif
X
X
X#ifdef BSD
X#include <a.out.h>
X#endif
X
X#ifdef VAX
X#define	PAGSIZ		1024
X#define	SEGSIZ		1024
X#define	TXTRELOC	0
X#endif
X
X#ifdef ISI
X
X
X
X#endif
X
X#ifdef SEQ
X
X
X#endif
X
X#ifdef NEWS
X#define	TXTRELOC	0
X#endif
X
X#ifdef IBMRT
X
X
X
X#endif
X
X#ifdef ATT
X#include <filehdr.h>
X#include <aouthdr.h>
X#include <scnhdr.h>
X#include <syms.h>
X#define exec		aouthdr
X#define a_text		tsize
X#define a_data		dsize
X#define a_bss		bsize
X#endif
X
X#ifdef E15
X#include <a.out.h>
Xextern	etext;
X#define exec		bhdr
X#define a_text		tsize
X#define a_data		dsize
X#define a_bss		bsize
X#define a_syms		ssize
X#define a_trsize	rtsize
X#define a_drsize	rdsize
X#define	SEGSIZ		(128*1024)
X#define	TXTRELOC	(1024*1024)
X#endif
X
X#ifndef mips
Xfilecpy(to, from, n)
XFILE *to, *from;
Xregister int n;
X{
X	char buffer[BUFSIZ];
X
X	for (;;)
X		if (n > BUFSIZ) {
X			fread(buffer, BUFSIZ, 1, from);
X			fwrite(buffer, BUFSIZ, 1, to);
X			n -= BUFSIZ;
X		} else if (n > 0) {
X			fread(buffer, 1, n, from);
X			fwrite(buffer, 1, n, to);
X			break;
X		} else
X			break;
X}
X#endif
X
Xmemory_save(original_file, save_file)
Xchar *original_file, *save_file;
X{
X
X#ifdef BSD
X	struct exec header;
X	int stsize;
X#endif
X#ifdef ATT
X#ifdef mips
X	struct {
X	  struct filehdr filehdr;
X	  struct aouthdr aouthdr;
X	  struct scnhdr 
X	    text_section,
X#if 0
X	    init_section,
X#endif
X	    rdata_section,
X	    data_section,
X	    lit8_section,
X	    lit4_section,
X	    sdata_section,
X	    sbss_section,
X	    bss_section;
X	} hdrs;
X	struct filehdr *pfilehdr;
X	struct aouthdr *paouthdr;
X	struct scnhdr *pscnhdr;
X	char buf[BUFSIZ];
X	HDRR symhdr;
X	int fptr, nbytes, pagesize;
X#else
X	struct filehdr fileheader;
X	struct exec header;
X	struct scnhdr sectionheader;
X#endif /* mips */
X	int diff;
X#endif
X#ifdef E15
X	struct exec header;
X#endif
X
X	char *data_begin, *data_end;
X	int original_data;
X	FILE *original, *save;
X	register int n;
X	register char *p;
X	extern char *sbrk();
X	extern char stdin_buf[BUFSIZ], stdout_buf[BUFSIZ];
X	char stderr_buf[BUFSIZ];
X
X	/* All files should have been close before getting here */
X	fclose(stdin);
X	fclose(stdout);
X	fclose(stderr);
X
X	original = fopen(original_file, "r");
X	if (stdin != original || original->_file != 0) {
X		freopen("/dev/tty", "w", stderr);
X		setbuf(stderr, stderr_buf);
X		fprintf(stderr, "Can't open the original file.\n");
X		exit(1);
X	}
X	setbuf(original, stdin_buf);
X
X	unlink(save_file);
X	n = open(save_file, O_CREAT|O_WRONLY, 0777);
X	if (n != 1 || (save = fdopen(n, "w")) != stdout) {
X		freopen("/dev/tty", "w", stderr);
X		setbuf(stderr, stderr_buf);
X		fprintf(stderr, "Can't open the save file.\n");
X		exit(1);
X	}
X	setbuf(save, stdout_buf);
X
X#ifdef BSD
X	fread(&header, sizeof(header), 1, original);
X
X#ifdef VAX
X	data_begin
X	= (char *)((TXTRELOC+header.a_text+(SEGSIZ-1)) & ~(SEGSIZ-1));
X#endif
X#ifdef SUN
X	data_begin
X	= (char *)((TXTRELOC+header.a_text+(SEGSIZ-1)) & ~(SEGSIZ-1));
X#endif
X#ifdef SUN2R3
X	data_begin = (char *)N_DATADDR(header);
X#endif
X#ifdef SUN3
X	data_begin = (char *)N_DATADDR(header);
X#endif
X#ifdef NEWS
X	data_begin
X	= (char *)((TXTRELOC+header.a_text+(SEGSIZ-1)) & ~(SEGSIZ-1));
X#endif
X#ifdef ISI
X
X
X#endif
X#ifdef SEQ
X
X
X#endif
X#ifdef IBMRT
X
X
X#endif
X
X	data_end = core_end;
X	original_data = header.a_data;
X	header.a_data = data_end - data_begin;
X	header.a_bss = 0;
X	fwrite(&header, sizeof(header), 1, save);
X
X#ifdef VAX
X	if (header.a_magic == ZMAGIC)
X		filecpy(save, original, PAGSIZ - sizeof(header));
X	filecpy(save, original, header.a_text);
X#endif
X#ifdef SUN
X	if (header.a_magic == ZMAGIC)
X		filecpy(save, original, PAGSIZ - sizeof(header));
X	filecpy(save, original, header.a_text);
X#endif
X#ifdef SUN2R3
X	filecpy(save, original, header.a_text - sizeof(header));
X#endif
X#ifdef SUN3
X	filecpy(save, original, header.a_text - sizeof(header));
X#endif
X#ifdef NEWS
X	if (header.a_magic == ZMAGIC)
X		filecpy(save, original, PAGSIZ - sizeof(header));
X	filecpy(save, original, header.a_text);
X#endif
X#ifdef ISI
X
X
X
X
X#endif
X#ifdef SEQ
X
X
X#endif
X#ifdef IBMRT
X
X
X
X#endif
X#endif
X
X#ifdef ATT
X#ifdef mips
X# define NSCNS 3
X	read(0, (char*)&hdrs.filehdr, FILHSZ + AOUTHSZ);
X	pfilehdr = (struct filehdr*)hdrs.aouthdr.text_start;
X	paouthdr = (struct aouthdr*)((long)pfilehdr + FILHSZ);
X	pscnhdr  = (struct scnhdr*)((long)paouthdr + AOUTHSZ);
X
X	pagesize = getpagesize();
X
X	hdrs.aouthdr.dsize = 
X	  ((long)core_end - hdrs.aouthdr.data_start + pagesize - 1)
X	    & ~(pagesize - 1);
X	hdrs.aouthdr.bss_start = 
X	  hdrs.aouthdr.data_start + hdrs.aouthdr.dsize;
X	hdrs.aouthdr.bsize = 0;
X
X	hdrs.filehdr.f_nscns  = NSCNS;
X	hdrs.filehdr.f_timdat = time(NULL);
X	hdrs.filehdr.f_symptr = hdrs.aouthdr.tsize + hdrs.aouthdr.dsize;
X
X	bcopy((char*)pscnhdr, (char*)&hdrs.text_section, NSCNS * SCNHSZ);
X	hdrs.data_section.s_size = hdrs.aouthdr.dsize 
X	  - hdrs.rdata_section.s_size;
X	bzero((char*)&hdrs.lit8_section,
X	      sizeof hdrs - FILHSZ - AOUTHSZ - NSCNS * SCNHSZ);
X	fptr = write(1, &hdrs, AOUTHSZ + FILHSZ + pfilehdr->f_nscns * SCNHSZ);
X
X	p = (char*)hdrs.aouthdr.text_start + fptr;
X	n = hdrs.aouthdr.tsize - fptr;
X	nbytes = pagesize - fptr;
X	write(1, p, nbytes);
X	p += nbytes;
X	n -= nbytes;
X	while ( n > pagesize ) {
X	  write(1, p, pagesize);
X	  p += pagesize;
X	  n -= pagesize;
X	}
X	if ( n )
X	  write(1, p, n);
X
X	lseek(1, hdrs.rdata_section.s_scnptr, SEEK_SET);
X	p = (char*)hdrs.aouthdr.data_start;
X	n = hdrs.aouthdr.dsize;
X	while ( n > pagesize ) {
X	  write(1, p, pagesize);
X	  p += pagesize;
X	  n -= pagesize;
X	}
X	if ( n ) 
X	  write(1, p, n);
X
X	lseek(0, pfilehdr->f_symptr, SEEK_SET);
X	diff = hdrs.filehdr.f_symptr - pfilehdr->f_symptr;
X	read(0, &symhdr, cbHDRR);
X#define adjust(field)if(symhdr.cb/**/field/**/Offset)symhdr.cb/**/field/**/Offset+= diff
X	adjust(Line);
X	adjust(Dn);
X	adjust(Pd);
X	adjust(Sym);
X	adjust(Opt);
X	adjust(Aux);
X	adjust(Ss);
X	adjust(SsExt);
X	adjust(Fd);
X	adjust(Rfd);
X	adjust(Ext);
X#undef adjust
X	write(1, &symhdr, cbHDRR);
X	while ( (n = read(0, buf, sizeof buf)) > 0 )
X	  write(1, buf, n);
X#else
X	fread(&fileheader, sizeof(fileheader), 1, original);
X	fread(&header, sizeof(header), 1, original);
X	data_begin = (char *)header.data_start;
X	data_end = core_end;
X	original_data = header.a_data;
X	header.a_data = data_end - data_begin;
X	diff = header.a_data - original_data;
X	header.a_bss = sbrk(0) - core_end;
X	fileheader.f_symptr += diff;
X	fwrite(&fileheader, sizeof(fileheader), 1, save);
X	fwrite(&header, sizeof(header), 1, save);
X	fread(&sectionheader, sizeof(sectionheader), 1, original);
X	if (sectionheader.s_lnnoptr)
X		sectionheader.s_lnnoptr += diff;
X	fwrite(&sectionheader, sizeof(sectionheader), 1, save);
X	fread(&sectionheader, sizeof(sectionheader), 1, original);
X	sectionheader.s_size += diff;
X	if (sectionheader.s_lnnoptr)
X		sectionheader.s_lnnoptr += diff;
X	fwrite(&sectionheader, sizeof(sectionheader), 1, save);
X	fread(&sectionheader, sizeof(sectionheader), 1, original);
X	sectionheader.s_paddr += diff;
X	sectionheader.s_vaddr += diff;
X	sectionheader.s_size = header.a_bss;
X#ifdef S3000
X        if (sectionheader.s_scnptr)
X                sectionheader.s_scnptr += diff;
X#endif
X	if (sectionheader.s_lnnoptr)
X		sectionheader.s_lnnoptr += diff;
X	fwrite(&sectionheader, sizeof(sectionheader), 1, save);
X	for (n = 4;  n <= fileheader.f_nscns;  n++) {
X		fread(&sectionheader, sizeof(sectionheader), 1, original);
X		if (sectionheader.s_scnptr)
X			sectionheader.s_scnptr += diff;
X		if (sectionheader.s_lnnoptr)
X			sectionheader.s_lnnoptr += diff;
X		fwrite(&sectionheader, sizeof(sectionheader), 1, save);
X	}
X	filecpy(save, original, header.a_text);
X#endif /* mips */
X#endif 
X
X#ifdef E15
X	fread(&header, sizeof(header), 1, original);
X	if (header.fmagic != NMAGIC)
X		data_begin
X		= (char *)(TXTRELOC+header.a_text);
X	else
X		data_begin
X		= (char *)((TXTRELOC+header.a_text+(SEGSIZ-1)) & ~(SEGSIZ-1));
X	data_end = core_end;
X	original_data = header.a_data;
X	header.a_data = data_end - data_begin;
X	header.a_bss = sbrk(0) - core_end;
X	fwrite(&header, sizeof(header), 1, save);
X	filecpy(save, original, header.a_text);
X#endif
X
X#ifndef mips
X	for (n = header.a_data, p = data_begin;  ;  n -= BUFSIZ, p += BUFSIZ)
X		if (n > BUFSIZ)
X			fwrite(p, BUFSIZ, 1, save);
X		else if (n > 0) {
X			fwrite(p, 1, n, save);
X			break;
X		} else
X			break;
X
X	fseek(original, original_data, 1);
X
X#ifdef BSD
X	filecpy(save, original, header.a_syms+header.a_trsize+header.a_drsize);
X	fread(&stsize, sizeof(stsize), 1, original);
X	fwrite(&stsize, sizeof(stsize), 1, save);
X	filecpy(save, original, stsize - sizeof(stsize));
X#endif
X
X#ifdef ATT
X	for (;;) {
X		n = getc(original);
X		if (feof(original))
X			break;
X		putc(n, save);
X	}
X#endif
X
X#ifdef E15
X	filecpy(save, original, header.a_syms+header.a_trsize+header.a_drsize);
X#endif
X#endif /* !mips */
X	fclose(original);
X	fclose(save);
X}
X
XLsave()
X{
X	char filename[256];
X
X	check_arg(1);
X	check_type_or_pathname_string_symbol_stream(&vs_base[0]);
X	coerce_to_filename(vs_base[0], filename);
X
X	_cleanup();
X
X	memory_save(kcl_self, filename);
X
X	exit(0);
X	/*  no return  */
X}
X
X#ifdef ISI
X
X
X
X
X
X
X
X
X
X
X#endif
END_OF_FILE
if test 9253 -ne `wc -c <'unixsave_pmax.c'`; then
    echo shar: \"'unixsave_pmax.c'\" unpacked with wrong size!
fi
# end of 'unixsave_pmax.c'
fi
echo shar: End of shell archive.
exit 0