Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watnot!watmath!clyde!rutgers!ames!ucbcad!ucbvax!hedrick@topaz.rutgers.edu@rutgers.UUCP From: hedrick@topaz.rutgers.edu@rutgers.UUCP Newsgroups: mod.computers.pyramid Subject: Submission for mod-computers-pyramid Message-ID: <8702251100.AA23288@topaz.rutgers.edu> Date: Wed, 25-Feb-87 06:00:47 EST Article-I.D.: topaz.8702251100.AA23288 Posted: Wed Feb 25 06:00:47 1987 Date-Received: Fri, 27-Feb-87 07:33:12 EST Sender: daemon@ucbvax.BERKELEY.EDU Distribution: world Organization: The ARPA Internet Lines: 215 Approved: info-pyramid@mimsy.umd.edu Path: topaz!hedrick From: hedrick@topaz.RUTGERS.EDU (Charles Hedrick) Newsgroups: mod.computers.pyramid Subject: Re: S on Pyramids Message-ID: <9603@topaz.RUTGERS.EDU> Date: 25 Feb 87 11:00:46 GMT References: <8702241332.AA16663@osiris> Organization: Rutgers Univ., New Brunswick, N.J. Lines: 205 Here are the instructions that we supply for bringing up S. It has enabled several sites to do it. From: hedrick@topaz.rutgers.edu (Charles Hedrick) This document describes how to bring up ATT's S system on the Pyramid. It was used with a copy of S from ATT labelled as the version of Jan 9, 1984. It was compiled under version 3.2.0 of Pyramid's Fortran compiler, which was distributed with operating system release 3.1. The following instructions are based on a mail message from someone at Pyramid, with additional comments based on our experience: Read "S Installation Procedures" Read "Maintaining S" Use the Bourne shell (/bin/sh) exclusively. Use the UCB universe consistently throughout. Use the 'att' version of /usr/bin/m4 by editing $C/makehead to change M4 to /usr/.attbin/m4. (C is set in ENVIRONMENT -- don't forget to set SHOME also). OSx 3.0 F77 plus ratfor and efl. [We used a newer F77, which no doubt explains why we needed some patches that the original installer didn't need. They are shown below. --Rutgers] Edit $I/u/mach.m t set the arithmetic constants for the 90x. Set them the same as the 3B20 -- they both use IEEE floating point. [For your convenience, mach.m is included at the end of this file. --Rutgers] Due to funky arithmetic conversion, edit $A/infun.awk. Change print "is(infnum+ii-1)=" nline to printf("is(infnum+ii-1)=%d\n",nline) Ignore exit status of f77 and icomp by inserting a leading dash (-) in the lines that invoke these programs in $C/makehead Typically, /usr/S has been chosen as the S home directory (SHOME) if space available. Set OPSYS=Berkeley, SHELL=/bin/sh in $SHOME/ENVIRONMENT Set MAXFILELEN=255 in $I/u/mach.m Copy $M/big.list to $M/infun.list Make the following changes to source under /src/fun. < is old > is new hp2627/zpolyz.r: 43c43 < i = -ifix(col) --- > i = -col macro/argno.r: 20a21 > litral=0 optiter/optlp.r: 131c131 < sum = amax0(sum - q, 0.0) --- > sum = amax1(sum - q, 0.0) stare/Smakefile: 22c22,23 < $(F77) $(LDFLAGS) $(STRIP) -o dev.dummy $L/device.z dummy.o dinitz.o $L/defer.z $(GRZLIB) --- > @echo defer_dum.z must be produced using emacs > $(F77) $(LDFLAGS) $(STRIP) -o dev.dummy $L/device.z dummy.o dinitz.o defer_dum.z $(GRZLIB) usa/usa.i 27c27 < coord=amin0(px/dx,py/dy) # inches per degree longitude --- > coord=amin1(px/dx,py/dy) # inches per degree longitude defer_dum.z is an altered version of $L/defer.z. The problem is that there is some sloppy code, which when loaded will proceduce 1 multiply defined symbol, amdiff. Unfortunately, the current version of the Pyramid loader treats this as a fatal error, so you can't just ignore it as the instructions say. The simplest solution is to produce an altered version of defer.z (which is an object file) that has a dummy symbol instead of the symbol amdiff. I did this by copying $L/defer.z to the local directory (~s/src/fun/stare) as defer_dum.z, and then editing it with Emacs. I simply searched for all occurences of amdiff and replaced them with amdumm. Since this is an object file, you must be very careful to change only those charcters, and to make the new symbol the same length as the old one. I don't know any editor other than Emacs that I would trust to edit object files. You could also produce a local copy of the source used to produce defer.z, and edit it. Note that the other changes are of two kinds: - several cases where the original code passed the wrong type of variable to a Fortran function, typically an integer to a function that expected a real. The newest Pyramid compiler detects those as errors. - one uninitialized variable. It is certainly possible that newer versions of the compiler, or further testing, will turn up more problems of the same sort. --- The file below is mach.m --- divert(-1) #Pick one of the following operating systems: define(`OpSys',`Berkeley') define(`F77_MAIN',`MAIN_') #define(`OpSys',`BellSystem') #define(`F77_MAIN',`MAIN__') #Pick one of the following machine types: #define(`NA',`ifelse($1,,1073741825,natst($1)!=0)')define(`NOARG',1073741827) # for Vaxes, etc define(`NA',`ifelse($1,,1996490069,natst($1)!=0)')define(`NOARG',1996490067) # for 3B machines #define(`NA',`ifelse($1,,2139095041,natst($1)!=0)')define(`NOARG',2139095143) # for 68000 based machines # common block and subroutine names generated by f77 end in underscore define(`F77_COM',`$1_') define(`F77_SUB',`$1_') #number of bytes into a pipe before blocking define(`PIPESIZE',4096) # max file name length - dataset names truncated to this size define(`MAX_FILE_NAME_LEN',255) define(`NCPW',4)define(`NBPC',8)#chars per word, bits per char define(`DEPS',1.d-17) define(`LARGEINT',1073741824)define(`BIGINT',LARGEINT) define(`PRECISION',1.2e-7) # 1e-6 for Inter define(`NDIGITS',7) define(`BIGEXP',38)define(`BIG',1e`'BIGEXP)define(`SMALL',1e-BIGEXP) define(`PI',3.1415926)define(`DEG2RD',.0174533) define(`NASET',`call setna($1)') # special FORTRAN features define(`SAVE',`save $*') # only for F77 define(`CHARACTER',`ifelse($1,,CHAR,$2,*,`character*(*) $1',`character*$2 $1') dnl ifelse($3,,,`(shift(shift($*)))')') define(`EOS',`\\0') define(`ESCAPE',`\\\\')define(`NEWLINE',`\\n') define(`BACKSPACE',`\\b') define(`LINEWIDTH',126)define(`LWIDTH',80)define(`FWIDTH',14)define(`MAXSTRING',511) define(`ERRORFC',2)define(`STDIN',0)define(`STDOUT',1) define(`MAXFC',15) # size of stack for attach define(`FILECODE',`$1-1')define(`WHICHFILE',`$1+1') define(`INCLUDE',`InClUdE($*)') define(`InClUdE',`ifelse($1,,, `include(SHOME/newfun/`include'/$1.m) InClUdE(shift($*))')') define(`XNAME',`substr(z$1,0,6)') # definition of interface function name define(`EXTERN',extern) define(`NOEXTERN',`define(`EXTERN',`')') define(`TAB',`\\t') define(`GCOS',`')define(`UNIX',`$*') define(`STDPERMS',0775) define(`READ',`ifelse($1,,0,`_READ($*)')') define(`WRITE',1)define(`READWRITE',2) define(`EXECUTE',2) define(`MSG_FILE',`s/msg.d') #relative to S home directory define(`SYSDB_FILE',`s/data') define(`SDEFAULT',`s') # standard chapter define(`SLOCAL',`slocal') # local installation-dependent chapter define(`WORK_FILE',`swork') define(`DB_FILE',`sdata') define(`DUMP_FILE',`sdump') define(`EDIT_FILE',`sedit') define(`GRAPH_FILE',`sgraph') define(`HELP_WHERE',`/.help') define(`ICHAR',`ichar($1)') # for macro processor define(`CHARMAKE',`char($1)') define(`LIST',`$*') # from PORT # 3B or 90x constants define(`R1MACH',`ifelse($1,1,0.11754944E-37, $1,2,0.34028235E39, $1,3,0.59604645E-07, $1,4,0.11920929E-06, $1,5,0.30103001E00)') define(`I1MACH',`ifelse( $1,9,2147483647, $1,10,2, $1,11,24, $1,12,-125, $1,13,128)') define(`STACK_SAVE_LEN',4) define(`MAXPROC',15)define(`MAXNAME',20) define(`DSIZE',6) define(`RSIZE',eval(2*DSIZE)) define(`ISIZE',eval(2*DSIZE)) define(`LSIZE',eval(2*DSIZE)) define(`SIZEOF',`ifelse($1,DBL,2,1)') define(`ON_ERROR',1)define(`ON_BREAK',2)define(`PROBLEM_DONE',3)# for interface divert(0)dnl