|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 52224 (0xcc00) Types: TextFile Names: »retalglibv4 «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »retalglibv4 «
job fgs 1 274001 stat 2 temp disc 300 60 time 15 0 mode list.yes ; ; editering af algol library ; ; magtapes : ; ; 543297 : release 13.00 ; 543329 : release 14.00 ; 543057 : release 1.00 ; 543277 : release 2.00 ; 543279 : release 3.00 ; ; ; magtape : ; ; 543022 : release 2.00 ; ; slettes og indeholder kopi af ; ; 543279 : release 3.00 message ret algol library head n=set nrz mt543279 g=set mto mt543277 lookup n g opmess write enable mt543279 opmess no ring mt543277 \f message ident, date and file survey file 1 nextfile n g date=head date=edit date r/f/date and time of tape creation : fgs/ f id=copy ø.1 package number : sw8500/2 package name : algol release : 3.0, 1987.10.01 content : algol library source code files file : contents 0 : label 1 : date of tape creation and table of tape-file contents 2 : compilation of algol library - system 2 version 3 : compilation of algol library - system 3 version 4 : read readchar repeatchar intable readstring readall tableindex 5 : arctan arg cos sin atan 6 : arcsin sqrt 7 : ln exp sinh sign sgn random alog 8 : write writeint outchar outtext, outinteger replacechar outindex outtable isotable 9 : tofrom 10 : changerec inrec outrec swoprec 11 : changerec6 inrec6 outrec6 swoprec6 12 : open termzone stopzone close, setposition getposition setstate getstate 13 : monitor 14 : systime logand logor exor 15 : system increase check blockproc stderror 16 : getzone getshare setzone setshare 17 : getzone6 getshare6 setzone6 setshare6 18 : changevar outvar invar checkvar 19 : newsort deadsort lifesort outsort initsort, initkey sortcomp startsort6 changekey6 20 : outdate movestring 21 : initzones getalarm trap 22 : openvirtual virtual resume 23 : lock locked 24 : setfpmode fpmode 25 : activity newactivity passivate activate wactivity 26 : closetrans writefield opentrans transerror waittrans readfield getf8000tab f8000table 27 : fpproc 28 : buflengthio 29 : openinout closeinout resetzones expellinout 30 : changerecio inoutrec 31 : updextlists ø n=copy list.yes message.no date id \f message translate algol library sys2 file 2 nextfile n g n=edit g f \f message translate algol library sys3 file 3 nextfile n g n=copy list.yes message.no ø.1 ; compilation of algol library procedures ; the file descriptor : ; ; libsource = set <modekind> <name of this tape> ; ; must be present c=message compile algol library system 3 version c=message the catalog entry libsource is used lookup libsource if ok.no (message the entry libsource not present finis) sorry=algol begin trapmode := 1 shift 10; endaction := 1; write (out, "nl", 1, <:********************************************:>, "nl", 1, <:*:>, "nl", 1, <:*:>, "nl", 1, <:*:>, "sp", 10, <:sorry:>, "nl", 1, <:*:>, "nl", 1, <:*:>, "nl", 1, <:********************************************:>); end; in =set 0 0 0 896.26 0 4.0 0 out =set 0 0 0 896.27 0 4.0 0 overflows =set 0 0 0 576.37 0 4.0 0 underflows=set 0 0 0 576.22 0 4.0 0 blocksread=set 0 0 0 576.24 0 4.0 0 rc8000 =set 0 0 0 512.57 0 4.0 0 errorbits =set 0 0 0 576.58 0 4.0 0 progsize =set 0 0 0 576.62 0 4.0 0 alarmcause=set 0 0 0 704.69 0 4.0 0 trapmode =set 0 0 0 576.70 0 4.0 0 progmode =set 0 0 0 576.71 0 4.0 0 blocksout =set 0 0 0 576.72 0 4.0 0 endaction =set 0 0 0 576.93 0 4.0 0 (read=slang libsource.4 read readchar repeatchar intable readstring readall tableindex) if ok.no sorry (arctan=slang fpnames libsource.5 insertproc arctan arg cos sin atan) if ok.no sorry (arcsin=slang fpnames libsource.6 insertproc arcsin sqrt ) if ok.no sorry (ln=slang fpnames libsource.7 insertproc ln exp sinh sign sgn random alog) if ok.no sorry (write=slang libsource.8 write writeint outchar outtext, outinteger replacechar outindex outtable isotable) if ok.no sorry (tofrom=slang libsource.9 tofrom) if ok.no sorry (changerec=slang fpnames libsource.10 insertproc changerec inrec outrec swoprec) if ok.no sorry (changerec6=slang fpnames libsource.11 insertproc changerec6 inrec6 outrec6 swoprec6) if ok.no sorry (open=slang fpnames libsource.12 insertproc open termzone stopzone close, setposition getposition setstate getstate) if ok.no sorry (monitor=slang fpnames libsource.13 insertproc monitor) if ok.no sorry (systime=slang fpnames libsource.14 insertproc systime logand logor exor) if ok.no sorry (system=slang fpnames libsource.15 insertproc system increase check blockproc stderror) if ok.no sorry (getzone=slang fpnames libsource.16 insertproc getzone getshare setzone setshare) if ok.no sorry (getzone6=slang fpnames libsource.17 insertproc getzone6 getshare6 setzone6 setshare6) if ok.no sorry (changevar=slang fpnames libsource.18 insertproc changevar outvar invar checkvar) if ok.no sorry (newsort=slang fpnames libsource.19 insertproc newsort deadsort lifesort outsort initsort, initkey sortcomp startsort6 changekey6) if ok.no sorry (outdate=slang fpnames libsource.20 insertproc outdate movestring) if ok.no sorry (initzones=slang libsource.21 initzones getalarm trap) if ok.no sorry (openvirtual=slang libsource.22 openvirtual virtual resume) if ok.no sorry (lock=slang libsource.23 lock locked) if ok.no sorry (setfpmode=slang libsource.24 setfpmode fpmode) if ok.no sorry (activity=slang libsource.25 activity newactivity passivate activate wactivity) if ok.no sorry (closetrans=slang libsource.26 closetrans writefield opentrans transerror waittrans, readfield getf8000tab f8000table) if ok.no sorry (fpproc=slang libsource.27 fpproc) if ok.no sorry (buflengthio=slang libsource.28 buflengthio) if ok.no sorry (openinout=slang libsource.29 openinout closeinout resetzones expellinout) if ok.no sorry (changerecio=slang libsource.30 changerecio inoutrec ) if ok.no sorry updextlists=algol libsource.31 connect.no survey.yes ix.no if ok.no sorry alglibnames=edit i/ activate activity alarmcause alog arcsin, arctan arg atan blocksout blockproc blocksread buflengthio, changekey6 changerec changerecio changerec6 changevar check, checkvar close closeinout closetrans cos deadsort endaction errorbits , exor exp expellinout fpmode fpproc f8000table getalarm getf8000tab getposition, getshare getshare6 getstate getzone getzone6 in increase, initkey initsort initzones inoutrec inrec inrec6 intable invar isotable , lifesort lock locked ln logand logor monitor movestring , newactivity newsort open openinout opentrans openvirtual out outdate, outchar outindex outinteger outrec outrec6 outsort outtable outtext, outvar overflows passivate progmode progsize random rc8000 read readall, readchar readfield readstring repeatchar replacechar resetzones resume, setfpmode setposition setshare setshare6 setstate setzone setzone6 sgn sign , sin sinh sortcomp sqrt startsort6 stderror stopzone swoprec swoprec6 , system systime tableindex termzone tofrom transerror trap trapmode , underflows wactivity waittrans virtual write writeint writefield /,f scopealglib=edit alglibnames i/ scope user algollib, /, l b, i/ scope user updextlists /,f lookalglib=edit alglibnames i/ lookup algollib, /, l b, i/ lookup updextlists /,f binalglib=edit alglibnames i/ sys4=binout algollib, /, l b, i/ sys5=binout updextlists /,f text=edit alglibnames i/ external procedure algollib; write(out,<: /, l b,i/ :>); end /,f clearalglib=edit alglibnames i/ clear user algollib, /, l b, i/ clear user updextlists /, f algollib=algol text clear temp text algollib=compresslib read arctan arcsin ln write, tofrom changerec changerec6 open monitor, systime system getzone getzone6 changevar, newsort outdate initzones openvirtual lock, setfpmode activity closetrans fpproc, buflengthio openinout changerecio i scopealglib i lookalglib release alglib char ff ø \f message read readchar repeatchar intable, readstring readall tableindex file 4 nextfile n g n=edit readtext; g l./page ..0/, r/..0/...0/, r/82.12.17/87.08.21/ l./page 40/, r/40/42/ l./page ...9/, r/82.12.17/87.07.17/ l./e12:/, l./sh w0 20/, g/20/22/, r/long/complex/ l./page ...22/, r/rc 80.08.23/fgs 87.09.10/ l./j15:/, d1, i/ j15: 1<11 o. (:-1:),0 ; addr of segment 1 j17: 1<11 o. 2 ,0 ; - - - 4 /, p-2 l./page ...24/, r/rc 80.08.23/fgs 87.09.10/ l./e5:/, r/segm 3;/segm 4;/ l./page ...33/, r/82.12.15/87.08.21/ l./j16:/, r/j16/j17/, r/-1/+1/, r/segm 2/segm 4/ l./page ...34/, r/82.12.15/87.08.21/ l./a1:/, r/a1:/ / l./page ...35/, r/82.11.23/87.08.21/ l./a2:/, l./rl w3 x2+i0/, d./jl. w3 (j18.)/, i/ rl w3 x2+i0 ; upper limit := se w0 23 ; if type = 23 <*zone*> sn w3 d2 ; or readstring then am 2 ; 23 <*zone variable*> else al w3 22 ; 21 <*long array *> ; sl w0 18 ; if type < 18 <*integer array*> sl w0 x3 ; or type > upper limit then jl. w3 (j18.) ; goto param alarm; /, p-8 l./page ...36/, r/82.11.23/87.08.21/ l./al w3 2/, l1, i/ se w0 21 ; if type = 21 <*double real*> sn w0 22 ; or type = 22 <*complex *> then al w3 8 ; incr := 8; /, p1 l./page ...37/, r/82.12.02/87.08.20/ l./d2=/, l1, d2, i/ al w1 x1+2 ; readstring: ws w1 x2+i19 ; first address := current addr := rs w1 x2+b2 ; w1 + 2 - incr; ds w1 x2+b1 ; last address := w0; /, p-4 l./page ...38/, r/82.12.02/87.08.21/ l./a0:/, i/ /, p1 l./page ...39/, r/rc 4.11.70 /jz.fgs 1987.08.20/ l./a3:/, l./sz w1 2.11/, d1, i/ rl w3 x2+i19 ; se w3 2 ; if incr <> 2 and sz w1 2.11 ; dist mod 4 = 0 then jl. a4. ; begin /, p-4 l./a4:/, d1, i$ a4: rs w0 6 ; saved w0 := w0; al w0 0 ; wd w1 x2+i19 ; no of elem := dist // incr; rl w0 6 ; w0 := saved w0; e10: al w1 x1+1 ; exit: no of elem := no of elem + 1; $, p-4 l./; end readstring;/, l1, i/ d3=k-d2-d1 ; entry readall: rl. w3 (j17.) ; goto readall jl x3+e21 ; on segment 4; /, p-3 l./page ...40/, i/ \f ; jz.fgs 1987.08.21 algol 5, char input, segment 3 page ...40... j20: c.j20-506 m.code on segment 3 too long z. c.502-j20,0,r.252-j20>1 z.; fill rest of segment 3 with zeroes <:char input<0>:> ; alarm text segment 3 m.segment 3 i. e. ; end segment 3 \f ; jz.fgs 1987.08.21 algol 8, char input, segment 4 page ...41... ; readall, readstring b. j20 ; block for segment 4 k=0 h. g8: g9 , g9 ; rel of last point, rel of last abs word j5: g10+17 , 0 ; - - 17 index alarm j15: 1<11 o. (:-3:), 0 ; addr of segm 1 j16: 1<11 o. (:-2:), 0 ; addr of segm 2 j17: 1<11 o. (:-1:), 0 ; addr of segm 3 g9 = k - 2 - g8 ; rel of last abs word = rel of last point w. / l./page ...40/, r/...40/...42/, r/82.11.12/87.08.21/, r/ent 3/ent 4/ l./d3=/, r/d3=k-d2-d1/e21: / l./page ...41/, r/82.11.23/87.08.21/, r/ent 3/ent 4/, r/...41/...43/ l./page ...42/, r/82.12.02/87.08.21/, r/ent 3/ent 4/, r/...42/...44/ l./page ...43/, r/82.11.23/87.08.21/, r/ent 3/ent 4/, r/...43/...45/ l./a11:/, l./se. w0 a16./, i/ rl. w3 (j17.) ; /, p1 l./jl. e10./, r/jl. e10./jl x3+e10/ l1, r/jl. e16./jl x3+e16/ l./page ...44/, r/rc 6.5.69/jz.fgs 87.08.21/, r/ent 3/ent 4/, r/...44/...46/ l3, g7/ent 3/ent 4/ l./m.rc/, r/83.01.04/87.09.10/ l./page ...45/, r/83.01.04/87.08.21/, r/...45/...47/ l./g0:/, l2, g/4/5/ l5, r/4/5/ l7, r/4/5/ l7, r/4/5/ l7, r/4/5/ l5, r/ +41 /+41,0/ l1, d l1, r/4/5/ l./page ...46/, r/82.12.15/87.08.21/, r/...46/...48/ l9, r/4/5/ l8, r/4/5/ f \f message arctan arg cos sin atan file 5 nextfile n g n=edit g f \f message arcsin sqrt file 6 nextfile n g n=edit g f \f message ln exp sinh sign sgn random alog file 7 nextfile n g n=edit g f \f message write writeint outchar outtext outinteger replacechar file 8 nextfile n g n=edit writetext1 ;g f \f message tofrom file 9 nextfile n g n=edit g ; new mh instruction ; l./page 1/, r/rc 26.11.71 /fgs 1987.06.24/ l./k=/, i/ d. p.<:fpnames:> l. s. l0 ; begin global slang segment / l./s. g5/, r/s./b./, r/slang segment/block segment 1/ l./j4:/, i/ j1: 1<11o.1, 0 ; own segment, next one /, p1 l./page 2/, r/rc 26.11.71 /fgs 1987.06.24/ l./b. a20/, r/ block tofrom/ block tofrom segment 1/ l./page 3/, r/rc 26.11.71 /fgs 1987.06.24/ l./; prepare move/, l-1, i/ æ12æ ; fgs 1987.06.24 rc8000 code procedure, tofrom page 4 /, p2 l./a0:/, i/ gg w3 34 ; sh w3 59 ; if cpu reg < 60 then jl. a3. ; goto repeatmove, next segment; am. (c0.) ; sh w2 x1-1 ; if from_base +move_size <= to_base sh w2 x1 ; or from_base >= to_base then jl. a1. ; goto setup mh_instruction else jl. a3. ; goto repeatmove, next segment; ; a1: ; setup mh_instruction: al w1 x1+1 ; fromfirst := frombase + 1; al w2 x2+1 ; to__first := to__base + 1; rx w2 2 ; swop (wpreg, wreg); ds. w2 c4. ; save (wpreg, wreg); mh w2 (0) ; move halfs (wpreg, wreg, 0); al w3 (:-1:)<1 ; la w0 6 ; halfs moved := move_size extract (:-1:)<1; <*even*> dl. w2 c4. ; restore (wpreg, wreg); wa w1 0 ; wpreg := wpreg + halfs_moved; wa w2 0 ; w_reg := w_reg + halfs_moved; rx w2 2 ; swop (wpreg, wreg); ws. w0 c0. ; remaining := halfs_moved - move_size; sn w0 0 ; if remaining <> 0 then jl. a2. ; <*1 half remaining*> zl w0 x1 ; move 1 half; hs w0 x2 ; a2: jl. (j8.) ; goto end register expr.; a3: rl. w3 (j1.) ; goto repeat move on next segment; jl x3+l0 ; / l1, d./page 6/, d./end case remaining/, r/rc 26.11.71 /fgs 1987.06.24/, r/4000/8000/, r/page 7/page 5/ l./c1:/, i/ c0: 0 ; remaining, saved to_base / l./c3:/, l1, i/ 0 ; saved wpreg c4: 0 ; saved w_reg / l./e./, r/end tofrom/end block tofrom segment 1/ l1, s 1, d./page 3/, d./; prepare move/, d4, i/ æ12æ ; fgs 1987.06.24 rc8000 code procedure, tofrom page 6 g3=k-j0 c. g3-506 m. code on segment 1 too long z. c. 502-g3 0, r. 252-g3>1 z. ; <:tofrom1:>, 0 ; alarm address i. e. ; end block segment 1 m. tofrom segment 1 æ12æ ; fgs 1987.06.24 rc8000 code procedure, tofrom page 7 b. g5, j50 ; begin block segment 2 h. j0: g1, g2 ; head-word: last-point, last-absword j8: f1 + 8, 0 ; rs-end-register-expression j30: f1 + 30, 0 ; rs-saved-stackref, saved-w3 g2=k-2-j0 ; rel of last absword g1=k-2-j0 ; rel of last point w. b. a20, c10, i5 ; begin block tofrom segment 2 w. ; ; ; prepare move ; ; l0 = k - j0 ; rel entry repeatmove: ds. w3 (j30.) ; save sref, w3; rs. w0 c0. ; remaining := move_size; /, l1, p-5 l./page 4/, r/rc 26.11.71 /fgs 1987.06.24/, r/page 4/page 8/ l./i1=/, r/288/424/ l./page 5/, r/rc 26.11.71 /fgs 1987.06.24/, r/page 5/page 9/ l./a3:/, l-4, i/ dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 ; dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 ; dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 \f ; fgs 1987.06.24 rc8000 code procedure, tofrom page 10 ; ; dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 dl w0 x1+k+i2 , ds w0 x2+k+i3 , dl w0 x1+k+i2 , ds w0 x2+k+i3 / l./page 6/, r/rc 26.11.71 /fgs 1987.06.24/, r/page 6/page 11/ l./c0:/, l-1, d2, i/ c0: 0 ; saved to_base, remaining 0 ; saved wpreg c4: 0 ; saved w_reg /, p-4 l./page 7/, d./c3:/, l./e. ; end/, r/end to/end block to/, r/from/from segment 2/ l./page 8/, r/rc 26.11.71 /fgs 1987.06.24/, r/page 8/page 12/ l./code on segment/, r/ment 1/ment 2/ l./<:tofrom/, r/from/from2/, r/0, 0/0 /, p2 l./end slang-segment/, r/g-s/g s/, r/ment/ment 2/, r/ slang/ block/ l1, i/ m. tofrom segment 2 i. e. ; end global slang segment / l./g0:/, l1, g/1/2/ l6, r/1/2/ l./m.rc/, r/1971.11.26/1987.06.25/ l1, i/ d. p.<:insertproc:> / f \f message changerec inrec outrec swoprec file 10 nextfile n g n=edit g f \f message changerec6 inrec6 outrec6 swoprec6 file 11 nextfile n g n=edit g f \f message open termzone stopzone close, setposition getposition setstate getstate file 12 nextfile n g n=edit g l./page ...1.../, r/81.06.02/84.03.05/ l./,i11/, r/i11/i12/ l./,e9/, r/e9/e12/ l./j10:/, d l./b.a20/, i/ j18=64 ; slang constant, buflength error in zonestate / l1, r/d4 /d4/ l./b8:/, d l./i2=b3+2/, d l-1, r/;/ ;/ l./page ...2a.../, r/2a/3/ l./page 3/, r/82.10.05/83.12.07/, r/page 3/page ...4.../ l./508/, r/508/510/, r/4/2/ l1, r/4/2/ l./b9=k+1/, l./sn w0 0/, d1, i/ rl w1 x2+8 ; w1 := zone address; rl w3 x1+h2+6 ; w3 := state add al w3 x3+j18 ; buflength errror; sn w0 0 ; if sharelength = 0 then rs w3 x1+h2+6 ; zone.state := w3; / l1, i/ æ12æ ; fgs 1983.12.07 algol 8, open and close page ...5... / l./rl w1 x2+8/, d l./page ...4.../, r/81.06.02/83.12.07/, r/...4/...6/ l./a11:/, r/j10/j12/ l2, i/ rl. w3 b3.+2 ; / l./a13:/, r/(j10.) / (j12.)/ l2, i/ rl. w3 b3.+2 ; / l./page ...5.../, r/81.06.02/83.12.07/, r/...5/...7/ l./d1:/, d1, i/ d1: al. w0 b6. ; zone state alarm: rl w1 x1+h2+6 ; / l./d3:/, d5 l./page ...6.../, r/81.06.02/84.08.31/, r/...6/...8/ l./j20/, r/j20 /j20, d4/ l./j14:/, r/;/ ;/ l./j9:/, d, i/ j13:101 , 0 ; rs latest answer / l./j10:/, r/stop/term/ l./w. 0, 1/, d, i/ w. / l./j13:/, d, i/ j15: -1-64 ; mask for removal of buflength error from zonestate j16: -1-32 ; - - - - inout - - j17=32 ; slang constant, inout bit in zonestate / l./a15/, r/, d1/ /, r/stop/term/ l./c0:/, d, i/ i5: ; external entry term zone: c0: rl. w1 j10. ; internal entry term zone: / l./j19:/, r/j19:/ /, l1, r/d1: /j19:/ l./rl w3 x1+h2+6;w3:=zone state;/, d, i/ rl w3 x1+h2+6 ; state := zone.state except la. w3 j15. ; buflength error bit; se w3 j17+9 ; if state = after inoutrec then jl. a11. ; state := if zone = inputzone se w1 (x1+h2+2) ; or zone = expelled outzone then sn w1 (x1+h2+4) ; after inrec am -1 ; else al w3 6 ; after outrec; a11: se w3 j17 ; if state = after openinout sn w3 j17+8 ; or state = after openinout on magtape then al w3 x3-j17 ; state := state - inout bit; / l./z.state>8 or <0 then/, r/z.//, r/</state</ l./a2:/, l./al. w1 j13./, d, i/ al. w1 (j13.) ; prepares for call of outblock, which / l./page 7/, r/82.10.05/84.02.21/, r/7/...10.../ l./a3:/, l2, d1 l./page ...8/, r/81.06.02/84.04.27/, r/...8/...11/ l./a7:/, l1, d, i/ al. w1 (j13.) ; / l./a9:/, l./jl. (j3.)/, d, i/ jl. a12. ; goto exit; zl w0 x1+h1+0 ; w0 := zone.mode; sz w0 1 ; if w0 odd then jl. a12. ; goto exit; / l./jl. (j3.)/, d, i/ se w2 j17+9 ; if state <> after inoutrec then jl. a12. ; goto exit; se w1 (x1+h2+2) ; if zone = input zone sn w1 (x1+h2+4) ; or zone = expelled zone then jl. a12. ; goto exit; / l./jl. (j3.)/, d, i/ rl w1 x2+8 ; w1 := zone; a12: al w0 1 ; partial word := rs w0 x1+h2+4 ; empty; jl. (j3.) ; goto end address expression; / l./a4:/, d, i/ d4: ; a4: rl w1 x1+h2+6 ; state alarm: w1 := zone.state; / l./m.stop zone/, r/stop zone/term zone/ l./stop zone/, r/stop/term/ l./page ...9.../, r/81.06.02/83.12.07/, r/..9/...12/ l./rl w1 x1+h2+6/, d4, i/ rl w3 x1+h2+6 ; state := zone.state except la. w3 j15. ; buflength error bit; sn w3 j17 ; if state = after openinout jl. d4. ; or state = after openinout on mt se w3 j17+8 ; or state = after inoutrec then sn w3 j17+9 ; goto state alarm; jl. d4. ; la. w3 j16. ; state := state except inout bit; sh w3 8 ; if state <= 8 and sh w3 -1 ; state >= 0 and jl. a3. ; state <> 4 then se w3 4 ; goto term zone; jl. w3 c0. ; / l1, r/ /a3: / l./a0:/, i/ æ12æ ; fgs 1983.12.07 algol 8, open and close page ...13... / l./page ...10.../, d l./e9:/, l-2, d./b1:/, d, i/ æ12æ ; fgs 1983.12.07 algol 8, open and close page ...14... / l./<:close/, r/pos<0>/term/ l./page ...11.../, r/81.06.02/84.03.05/, r/...11/...15/ l./j15/, r/j15/j19/ l./j9:/, d, r/0 ;/0;/, r/stop/term/ l./b.a20/, i/ w. j15: -1-64 ; mask for removal of buflength error from zonestate j17=32 ; slang constant, inout bit in zonestate j18=64 ; - - , buflength error - - æ12æ ; fgs 1984.03.05 algol 8, setposition page ...16... / l./stop zone/, r/stop/term/ l./a0:/, r/a0:/ / l./rs w0 x1+h2+4;partial word:=empty;/, l-1, d1 l./page 12/, r/rc 08.03.72 / fgs 1984.03.05 /, r/page 12/page ...17.../ l1, i/ / l./a14:/, r/a14:/ / l./j15/, r/j15/j19/ l./page 12a/, r/12a/...18.../ l./page ...13.../, r/82.05.24/83.12.07/, r/13/19/ l./a1:/, l2, d1, i/ al w2 0 ; state := 0; rl w0 x3+h2+6 ; sz w0 j18 ; if zonestate contains buflength error bit then al w2 x2+j18 ; state := state add buflength error bit; sz w0 j17 ; if zonestate contains inout bit then al w2 x2+j17 ; state := state add inout bit; rs w2 x3+h2+6 ; zone.state := state; al w0 0 ; / l./page 14/, r/83.08.23/84.02.15/, r/14/...20.../ l./a9,/, r/a9, /a10,/ l./rl w1 x3+h2+6/, d, i/ rl w1 x3+h2+6 ; state := zone.state except la. w1 j15. ; buflength error bit; se w1 j17+9 ; if state = after inoutrec then jl. a10. ; state := if zone <> input zone then se w3 (x3+h2+2) ; after outrec am 1 ; else al w1 5 ; after inrec; a10: se w1 j17 ; if state = after openinout sn w1 j17+8 ; or state = after openinout on magtape then al w1 x1-j17 ; state := state - inout bit; / l./a2:/, i/ æ12æ ; fgs 1983.12.07 algol 8, get position page ...21... / l./a7:/, l./w0:=first shared/, r/last/first/, r/first/last/ l2, r/last/first/, r/fst/last/, r/+2/+ 2/ l./page ...15.../, d l./page ...14a/, r/14a/22/ l./page ...16.../, r/16/23/ l./page ...17.../, r/17/24/, r/81.06.02/87.08.27/ l./j13:/, d, i/ j4 : 4, 0 ; rs entry 4 : take expression j5 : 6, 0 ; rs entry 6 : end register expression j13 : 13, 0 ; rs entry 13 : last used / l./j1:/, l1, i/ j2 : 1<11o.(:-2:), 0 ; ref to sec. segment / l./c12 =/, g 1/j1/j2/, l1, i/ j17 = 32 ; slang constant, inout bit in zonestate j18 = 64 ; - , buflength error bit in zonestate j15 = -1-64 ; - , mask for removal of buflength err bit æ12æ ; fgs 1987.08.27 algol 8, stop zone page ...25... b. a2 ; block for local names in stop zone w. i12: e12: rl. w2 (j13.) ; entry stop zone: sref := lastused; ds. w3 (j30.) ; save sref, w3; dl w1 x2+12 ; w0w1 := formal (mark); so w0 16 ; if expression then jl. w3 (j4.) ; take expression; ds. w3 (j30.) ; save sref, w3; zl w1 x1 ; w1 := value (mark); ac w1 x1+1 ; ls w1 23 ; w1.most significant bit = -,mark; rl w3 x2+8 ; get zone; zl w0 x3+h1+0 ; zone.mode := ls w0 -1 ; zone.mode ld w1 +1 ; add hs w0 x3+h1+0 ; -,mark; rl. w3 (j2.) ; w3 := absword (stop zone); jl w3 x3+c0 ; goto term zone; rl w3 x2+8 ; get zone; zl w0 x3+h1+0 ; zone.mode := ls w0 -1 ; zone.mode shift (-1) ls w0 1 ; shift 1; hs w0 x3+h1+0 ; al w0 -1 ; am (x3+h0+6) ; zone.record base := wa w0 +2 ; zone.first share.first shared - rs w0 x3+h3+0 ; 1; al w0 0 ; zone.rec length := rs w0 x3+h3+4 ; 0; rl w1 x3+h0+6 ; share := zone.first share; rl w0 x1+4 ; zone.last byte := so w0 1 ; share.last shared + ea. w0 1 ; if even then rs w0 x3+h3+2 ; 1 else 0; a0: rl w0 x1+4 ; repeat rs w0 x1+10 ; share.operation.last address := al w1 x1+h6 ; share.last shared; sh w1 (x3+h0+8) ; share := share + share descr length; jl. a0. ; until share > zone.last share; al w0 0 ; newstate := 0; zl w1 x3+h1+1 ; se w1 18 ; if zone.kind = magtape then jl. a2. ; begin rl w1 x3+h2+6 ; state := zone.state except la. w1 j15. ; buflength error bit; se w1 j17+9 ; if state = after inoutrec then jl. a1. ; state := if zone = inputzone then sn w3 (x3+h2+2) ; after inrec am -1 ; else al w1 6 ; after outrec; a1: se w1 j17 ; if state = after openinout sn w1 j17+8 ; or state = after openinout on magtape then al w1 x1-j17 ; state := state - inout bit; sl w1 1 ; if state = 1 <*after read char*> sl w1 3 ; or state = 2 <*after repeatchar*> sn w1 5 ; or state = 5 <*after inrec *> then al w0 8 ; newstate := 8; <*open and not pos on mt*> a2: rl w1 x3+h2+6 ; end; rx w1 0 ; swop (w0, w1); sz w0 j18 ; if zone.state contains buflength err bit then al w1 x1+j18 ; newstate := newstate add buflength err bit; sz w0 j17 ; if zone.state contains inout bit then al w1 x1+j17 ; newstate := newstate add inout bit; rs w1 x3+h2+6 ; zone.state := newstate; al w0 0 ; result := sz w1 1<3 ; if newstate = unpositioned mt then am 1 ; false al w1 -1 ; else ; true; jl. (j5.) ; goto end reg expression; m.stop zone i. e. ; end block for local names in stop zone / l./b. a6/, i/ æ12æ ; fgs 1984.03.05 algol 8, open (docname is array) page ...26... / l./page ...17a.../, s 1, d./page ...10.../, d./;end of block for close/ i/ æ12æ ; fgs 1984.03.05 algol 8, open (wait a second) page ...27... / l./b.b1/, r/b1/b2/ l./e9:/, i/ b0: 0 ; saved return b1: <:clock:>, 0, 0, 0 ; name of clock, name table address 0, 1 ; message to clock b2: 0, r.8 ; answer area / l./j13/, r/j13.-4/b2.-4 / l./(j9.)/, d1 r/j13./b2. / l./b0:/, d1, i/ / l./e./, l1, s 1, d./page ...17.../, d./end block for docname is array/, r/17a/28/, r/81.06.02/84.03.05/ l.!<:open!, r!<:open <0><0><0>:>!<:open/stop<0>:>! l./page ...18.../, r/81.06.02/84.03.05/, r/18/29/ l./tail close:other tail/, i/ 2048 , 4 ; tail termzone:other tail 0 , r.8 ; name 2049 , i5 ; entry w. 15<18 ; spec1 : illegal type proc 0 ; spec2 h. 4 , 0 ; kind 4 , 0 ; code segments 2048 , 4 ; tail stopzone:other tail 0 , r.8 ; name 2051 , i12 ; entry w. 2<18+18<12+8<6 ; spec1 boolean proc (zone, boolean addr) 0 ; spec2 h. 4 , 0 ; kind 4 , 0 ; code segments, owns / l./m. rc 1983/, d, i/ m.rc 1987.08.27 open termzone stopzone close, m. setposition getposition setstate getstate / f \f message monitor file 13 nextfile n g n=edit g ; parameter array from byte index 1, i.e. fielding works l./page ...2a/, r/82.08.30/87.07.08/ l./; 124/, r/1 ;/2 ;/, p-1 l./page ...3/, r/rc 22.7.71/ fgs 1987.07.08/ l./a0:/, l./al w1 2.11111/, d./rs w1 x2+20/, i/ al w1 1 ; index := 1; a14: ls w1 1 ; check index: index := index < 1; sh w1 (x3-2) ; if index > upper index value sh w1 (x3) ; or index <= lower index value - k then jl. w3 (j3.) ; goto index alarm; se w1 2 ; if index = 2 (1<1) then jl. a15. ; begin <*find addr of ia (1)*> wa w1 (x2+20) ; addr (ia (1)) := rs w1 x2+20 ; index + baseword; al w1 2.11111; index := min last index := la w1 x2+6 ; fnc byte.min array length; jl. a14. ; goto check index; a15: ; end; /, l1, p-3 l./page ...17/, l./m.jz/, r/84.04.04/87.07.08/ f \f message systime logand logor exor file 14 nextfile n g n=edit g f \f message system increase check blockproc stderror file 15 nextfile n g n=edit g ; parameter array starts in byte index 1, i.e. fielding works l./page ...2/, r/86.04.04/87.07.08/ l./c16,/, r/c16/c30/ l./j17:/, d l./j74:/, i/ j54: g0+54 , 0 ; rs entry 54: field alarm /, p-1 l./page ...4/, r/82.09.07/87.11.06/ l./; compute first address:/, d./d1:/, i# am (x2+6) ; maybe check array: el. w0 f1. ; so w0 1 ; if check array then jl. a0. ; begin <*compute first address*> rl w0 x3 ; w0 := lower index value - k; al w1 2 ; w1 := field := 2; <*word field index 1*> sh w1 (x3-2) ; if field > upper index value sl w0 x1-1 ; or field < lower index value - k then jl. w3 (j54.) ; goto field alarm; wa w1 (x2+16) ; formal (14) := addr first word index 1 := rs w1 x2+14 ; field + baseword; rl w1 (x2+16) ; <*compute last address*> wa w1 x3-2 ; formal (16) := last array := rs w1 x2+16 ; base word + upper index; al w1 5 ; sn w1 (x2+6) ; if fnc <> 5 then jl. a0. ; begin al w1 8 ; w1 := field := 8; <*word field index 7*> am (x3-2) ; sl w1 1 ; if field >= upper index value + 1 then jl. w3 (j54.) ; goto field alarm; ; end; ; end; a0: am (x2+6) ; call action: el. w3 f1. ; action := action table (fnc); d1: jl. x3 ; goto action; # l./; exit conditions:/, d./dl w1 x2+12/, i/ ; exit conditions : ; ; w0 : return value of i ; w1 : - - - system ; w2 : sref ; w3 : addr of first word of text to be moved to array ; from (x3, x3+2), ... to ((x2+14), (x2+14)+2), ... ; c21: ds w1 x2+12 ; exit 0: (from system (4, ...) save w0, w1; rl w1 x2+16 ; array length := ws w1 x2+14 ; first array - last array + al w0 x1+2 ; 2; zl w1 x2+13 ; halfs to move := al w1 x1-2 ; seplength extract 12 - 2; <*multiple of 8*> sh w0 x1 ; if halfs to move >= array length then rl w1 0 ; halfs to move := array length; jl. a4. ; goto continue system (4, ...; c11: ds w1 x2+12 ; exit 1: (from system (2, ... and (6, ...) save w0, w1; al w1 8 ; halfs to move := 8; a4: am (x2+14) ; to__index := al w2 2 ; addr first double word of array; al w3 x3+2 ; fromindex := addr first double word of text; wa w1 6 ; from__top := rs. w1 b1. ; fromindex + halfs to move; a3: dl w1 x3 ; repeat ds w1 x2 ; move 4 halfs from fromindex to to__index; al w2 x2+4 ; increment to__index; al w3 x3+4 ; increment fromindex; se. w3 (b1.) ; until jl. a3. ; fromindexx = from__top; dl. w3 (j30.) ; restore w2, w3; dl w1 x2+12 ; restore w0, w1; /, l1, r/ i :=/ i :=/, p-2 l1, r/exit3/exit 3/ l./page ...5/, r/82.09.02/87.11.06/ l./c3:/, d5, i/ c3: rl. w3 (j42.) ; goto system entry 3 jl x3+i0 ; on next segment; /, p-2 l./b1:/, r/no/no, from_top in c11, c21, exit 0 and exit 1/ l./page ...6/, r/82.09.02/87.07.08/ l./sn w0 10/, d, i/ se w0 4 ; if length (param) <> 4 then /, p-1 l./al w3 0/, d, i/ rl. w3 b3. ; w3 := sl w0 0 ; sign extension of w0; al w3 0 ; if type third param = long array then /, l1, p-3 l./jl. c11./, r/c11./c21./ l./b2:/, l1, i/ b3: -1 ; sign extension of neg values; /, p-1 l./page ...9/, r/84.01.27/87.11.06/ l./f0 = k - 1/ , l./2 free core/, r/ 1/ 1<4+1/ l2, r/ 1/ 1<4+1/ l2, r/ 1/ 1<4+1/ l1, r/ 1/ 1<4+1/ l1, r/ 1/ 1<4+1/ l./5 move core area/, r/d1 /d1+1/ l./10 parent/, r/d1 /d1+1/ l./11 intervals/, r/d1 /d1+1/ l./page ...10/, r/85.03.08/87.11.06/ l./;procedure take string/, i# ; entry 3, array bounds w. c4: dl w1 (x2+12) ; array bounds: ac w3 (x2+10) ; k := -type; as w0 x3+1 ; i := upper//k; as w1 x3+1 ; system := (lower//k) + 1; al w1 x1+1 ; rs w0 (x2+8) ; <*i := w0; system := w1;*> rs. w2 (j13.) ; release reservation; jl. (j6.) ; goto end register expression; \f ; jz.fgs 1987.11.06 algol 8, system, page ...10a... #, p-3 l./...16/, r/82.09.02/87.11.06/ l./i1=/, r/i1/i0= c4 - d0 ; define rel entry for system 3 code i1/, l1, p-2 l./page ...21/, l./m.fgs/, r/86.04.04/87.11.06/ f \f message getzone getshare setzone setshare file 16 nextfile n g n=edit g ; integer array from element with byte index 1 instead of lower bound l./page 1/, l./e17:/, l2, i# e18: ; field alarm: sh w3 (x1-2) ; if size <= upper index value then al w3 2 ; field := 2; <*else field = size*> rl w1 6 ; ls w1 -1 ; index := field/2; jl. e17. ; goto index alarm; #, p-7 l./page 3/, l./b2:/, l./33/, g/33/34/ l./b3:/, l./rl w0 x1-2/, d./jl. e17./, i/ al w0 2 ; rl. w3 c7. ; sh w3 (x1-2) ; if size > upper index value sh w0 (x1) ; or 2 >= lower index value - 2 then jl. e18. ; goto field alarm; wa w0 (x2+12) ; addr := 2 + rs. w0 c1. ; addr element (0, 0, 0, ...); /, p-7 l./33/, r/w3/w2/, g/33/34/, r/w2/w3/ l./page 5/, l./e1:/, r/39/40/ l./e2:/, r/23/24/ l./al w3 2/, d./jl. d5./, i# rl. w3 c1. ; w3 := addr element ia (1); am. (c2.) ; al w0 h0 ; w0 := addr elemt zdescr (1); <*cont. base buffer*> dl w2 x3+4 ; (w1, w2) := ws w1 (0) ; (1. sh'd , last sh'd ) - ws w2 (0) ; (base buffer area, base buffer area) + al w1 x1+3 ; (3 , 3 ) // al w2 x2+3 ; (4 , 4 ) ; ls w1 -2 ; ls w2 -2 ; ds w2 x3+4 ; (1. sh'd, last sh'd) := (w1, w2); #, p-11 l./page 6/, l./e3:/, r/33/34/ l./page 7/, l./e4/, r/23/24/ l./m.rc/, r/69.10.10/87.07.07/ f \f message getzone6 getshare6 setzone6 setshare6 file 17 nextfile n g n=edit g ; integer array from element with byte index 1 instead of lower bound l./page 1/, l./e17:/, l2, i# e18: ; field alarm: sh w3 (x1-2) ; if size <= upper index value then al w3 2 ; field := 2; <*else field = size*> rl w1 6 ; ls w1 -1 ; index := field/2; jl. e17. ; goto index alarm; #, p-7 l./page 3/, l./b2:/, l./33/, g/33/34/ l./b3:/, l./rl w0 x1-2/, d./jl. e17./, i/ al w0 2 ; rl. w3 c7. ; sh w3 (x1-2) ; if size > upper index value sh w0 (x1) ; or 2 >= lower index value - 2 then jl. e18. ; goto field alarm; wa w0 (x2+12) ; addr := 2 + rs. w0 c1. ; addr element (0, 0, 0, ...); /, p-7 l./33/, r/w3/w2/, g/33/34/, r/w2/w3/ l./page 5/, l./e1:/, r/39/40/ l./e2:/, r/23/24/ l./page 6/, l./e3:/, r/33/34/ l./page 7/, l./e4/, r/23/24/ l./m.rc/, r/71.03.16/87.07.07/ f \f message changevar outvar invar checkvar file 18 nextfile n g n=edit g ; sec. param real array => long, real, double, complex, zone (out-changevar) l./page 1/, r/rc 06.07.73/fgs 1987.07.09/ l./j30:/, i/ j29: 29 , 0 ; rs entry param alarm /, p-1 l./page 3/, r/rc 1973.04.12/fgs 1987.07.09/ l./hl w1 x2+11/, d./jl. a2./, i/ al w1 2.11111 ; kind := la w1 x2+10 ; kind of sec. param; sh w1 23 ; if kind > 23 <*zone *> sh w1 18 ; or kind <= 18 <*integer array*> then jl. w3 (j29.) ; goto param alarm; sn w1 23 ; if kind = 23 <*zone record*> then jl. a2. ; skip index check; /, l1, p-8 l./page ...6/, l./m./, r/82.10.05/87.07.09/ l./page 10/, l./g0:/, l./w. 3<18/, r/26/41/, r/array/undefined/ l1, l./w. 3<18/, r/26/41/, r/array/undefined/ l./m./, r/74.08.23/87.07.09/ f \f message newsort deadsort lifesort outsort initsort, initkey sortcomp startsort6 changekey6 file 19 nextfile n g n=edit g f \f message outdate movestring file 20 nextfile n g n=edit g ; real array udvides til accept af integer, long, real, double, complex og zone rec ; check af string point mod last of segm table i stedet for first program l./page 1/, r/ 01.12.71 / fgs 1987.07.02 / l./,j40/, r/j40/j60/ l./j15:/, d l./j30:/, i/ j29: g0+29 , 0 ; 29, param alarm / l1, i/ j60: g0+60 , 0 ; 60, last in segm table / l./page 5/, r/ 01.12.71 / fgs 1987.08.25 / l./b0, a3/, r/b0, a3/b1, a5/ l./take array param:/, d2, i/ ; take array parameter: al w0 2.11111; check array param: la w0 x2+6 ; sh w0 23 ; if kind (param 1) > zone sh w0 17 ; or kind (param 1) < integer array then jl. w3 (j29.) ; goto param alarm; se w0 18 ; typeshift := am 1 ; if kind = integer array then 1 al w3 1 ; else 2; se w0 21 ; if kind = double array sn w0 22 ; or kind = complex array then al w3 3 ; typeshift := 3; hs. w3 b1. ; al w0 1 ; length := ls w0 x3 ; 1 shift typeshift; rs w0 x2+12 ; rl w3 x2+8 ; dope addr := ea w3 x2+6 ; dope rel + baseword addr; b1 = k + 1 ; typeshift: ls w1 0 ; index := index shift typeshift; /, p1 l./rs w1 x2+10/, i/ al w1 x1+4 ; 4 - ws w1 x2+12 ; length + /, p1 l./page 6/, r/rc 19.1.72 / fgs 1987.08.25 / l./j15./, r/j15/j60/ l./>= first of program/, r/first of program/last in segm table/ l./c0:/, l./jl. d3./, r/d3./a4./, r/exit/try exit/ l./d2:/, l1, r/w0/w3/ l2, r/4/length/ l./ls w1 -2/, d, i/ al w0 0 ; wd w1 x2+12 ; /, p-2 l1, r/w0/w3/ l./e./, i/ ; try exit filled: a4: am (x2+6) ; sl w3 2 ; if next addr < last addr + 2 then jl. d3. ; begin rs w0 x3-2 ; ra (next addr - 2) := item (1); al w3 x3+2 ; next addr := rs w3 x2+8 ; next addr + 2; jl. d3. ; goto exit filled; /, p1 l./page 7/, r/rc 19.1.72 / fgs 1987.07.02 / l./m.rc 1972/, r/1972.01.19/1987.08.25/ l./g1:/, l./+26/, r/26/41/, r/real array/undefined/ f \f message initzones getalarm trap file 21 nextfile n g n=edit g f \f message openvirtual virtual resume file 22 nextfile n g n=edit g f \f message lock locked file 23 nextfile n g n=edit g f \f message setfpmode fpmode file 24 nextfile n g n=edit g f \f message activity newactivity passivate activate wactivity file 25 nextfile n g n=edit g f \f message closetrans writefield opentrans transerror waittrans, readfield getf8000tab f8000table file 26 nextfile n g n=edit g f \f message fpproc file 27 nextfile n g n=edit g f message buflengthio file 28 nextfile n g n=edit bufiotx ;g f message openinout closeinout resetzones expellinout file 29 nextfile n g openiotx1=edit openiotx ; closeinout retablerer zonerne som de var efter open l./page ...1/, r/84.10.02/86.10.03/ l./g1, i7/, r/i7/i9/ l./for setzones and resetzones/, r/setzones/openinout/ l./block for first segment/, i/ b. c7, ; block for local names first segment w. k=10000 ; k assignment to catch missing relative h. c1 : c2 , c3 ; rel last point, rel last absword c3 = k-2-c1 ; rel last absword c2 = k-2-c1 ; rel last point w. g0 = 3 ; no of externals; i2 = k - c1 ; start external list: g0 ; no of externals; 0 ; no of halfs to copy to own core; <:initzones<0>:> ; external no 1 : name 1<18+25<12+25<6+30 ; spec : no type proc (zone arr, int arr, int arr) 0 ; spec : <:termzone<0>:>, 0 ; external no 2 : name 15<18 ; spec : illegal type proc 0 ; spec : <:open<0>:> , 0, 0 ; external no 3 : name 1<18+19<12+41<6+19 ; spec : no type proc (zone, int addr, undef, 8<18 ; spec : int addr ); s3 ; date s4 ; time c0 = k - c1 ; c. c0 - 506 m. code on segment 0 too long z. c. 502 - c0 0, r.(:504-c0:) > 1 ; fill with zeroes z. <:openinout 0<0>:> ; alarm text m. segment 0 i. e. ; end block for local names first segment i4 = i4 + 1 ; increase segment count æ12æ ; fgs 1986.10.03 algol 8, openinout, closeinout, resetzones page ... 2... /, l2, p-5 l./g0 = 2/, d l./i2 = k - c1/, d./s4/ l./page ...2/, r/84.02.01/86.10.03/, r/2/3/ l1, l./page...3/, r/83.11.18/86.10.03/, r/3/4/ l1, r/i0/i8 = i4 ; entry openinout, segment part: i0/, p-1 l./la w0 x2+9/, r/9 /11/ l./page ...4/, r/83.12.07/86.10.03/, r/4/5/ l./page ...10/, r/83.11.18/86.10.03/, r/10/11/ l./<:openinout/, r/out 0/out 1/ l./page ...11/, r/84.02.15/86.10.03/, r/11/12/ l./p0, o4/, r/p0/p1/ l./j0:/, d l./p0:/, d, i/ p0 : 1, 0 ; point 1. external (initzones); p1 : 3, 0 ; point 3. external (open) /, p-1 l./page ...12/, r/84.02.15/86.10.10/, r/12/13/ l./, c0/, r/, c0/ / l./c0:/, d l./b11:/, d, i/ b11: 4<12 + 18 ; constant, first formal integer array b12: 6<12 + 23 ; - , - - zone b13: 4<12 + 20 ; - , - long array /, p-2 l./page ...15/, r/83.11.18/86.10.10/, r/15/16/ l./al w1 x1+28/, g/28/34/ l./; stack return inf/, d./rl. w1 (j13.)/, d1 l./rl. w3 c0./, r/c0. /b11./ l./page ...16/, r/83.11.18/86.10.06/, r/16/17/ l./c4 = /, l-1, d./rs. w2 (j13.)/, i/ rl. w1 (j13.) ; the six halfs are al w1 x1+6 ; stacked by rs. w1 (j13.) ; by take expression; al w0 x2 ; ls w0 4 ; w0 := sref<4 + 0; rl. w1 p0. ; w3 := point (initzones); jl. w3 (j4.) ; take expression (point); ds. w3 (j30.) ; save sref, w3; rs. w2 (j13.) ; unstack reserved core; /, p1 l./el w0 x2+7/, i/ æ12æ ; fgs 1986.10.10 algol 8, openinout, closeinout, resetzones page ...18... / l./jl. a9./, r/state of all zones := 0/reopen all zones/ l1, d./jl. a8./, i/ a8: al w1 -32 ; repeat jl. w3 (j3.) ; reserve (32 hwds); ds. w3 (j30.) ; saved sref, w3 := w2, w3; rl. w1 (o1.) ; zone := saved zone; rl. w0 b12. ; ds w1 x2-29 ; 1. param := zone; al w3 26 ; rl w0 x1+h1+0 ; modekind := ls w0 1 ; zone.modekind extract ls w0 -1 ; 23; rs w0 x2-15 ; literal (modekind) := al w0 x2-15 ; modekind; ds w0 x2-25 ; 2. param := literal (modekind); rl. w3 b13. ; al w0 x2-13 ; ds w0 x2-21 ; 3. param := long array (zone.name); dl w0 x1+h1+4 ; move name from ds w0 x2-5 ; zone.docname dl w0 x1+h1+8 ; to ds w0 x2-1 ; literal locations; al w0 x2-9 ; baseword := rs w0 x2-13 ; addr literal locations; al w3 16 ; <*upper *> al w0 0 ; <*lower - k*> ds w0 x2-9 ; dope vector := ( upper, lower - k); al w3 26 ; al w0 x1+h2+1 ; ds w0 x2-17 ; 4. param := give up mask; al w0 x2 ; ls w0 4 ; w0 := sref < 4 + 0; rl. w1 p1. ; w1 := point (open); jl. w3 (j4.) ; take expression (point); ds. w3 (j30.) ; save sref, w3; rs. w2 (j13.) ; unstack reserved core; rl. w1 (o1.) ; zone := saved zone; al w1 x1+h5 ; zone := zone + zone descr length; rs. w1 (o1.) ; saved zone := zone; rl. w0 (o2.) ; sh w1 (0) ; until jl. a8. ; zone > last zone; / l1, r/state of all zones := 0/reopen all zones/, l1, p-2 r/end reg expr/end addr expr/ l./page ...17/, r/17/19/, r/84.02.15/86.10.03/ l./la w0 x2+9/, r/9 /11/ l1, l./page ...18/, r/18/20/, r/84.02.22/86.10.03/ l1, l./page ...19/, r/19/21/, r/83.11.18/86.10.03/ l./<:openinout/, r/out 1/out 2/ l./page ...20/, r/20/22/, r/84.02.22/86.10.03/ l./1<11+ 0, i0/, r/1<11+ 0/1<11+i8/ l./m.rc/, r/84.10.02/86.10.10/ f n=edit openiotx1 ;g f message changerecio inoutrec file 30 nextfile n g n=edit inoutrectx ;g f message updextlists file 31 nextfile n g n=edit updexttext ;g ; continue point i external list er kun rel i højre half ; no of bytes to copy to own core := 0 for fortran externals ; set clock i end external list ; give notice on changes made l./page ...01/, r/86.10.08/87.09.08/ l./oldcount, ne;/, r/ne;/changecount, ne, ng, nb, nc, nzc;/ l./iff;/, r/iff;/iff, kindspec1;/ l./ia(1:20)/, r/;/, time (1:2);/ l./lf, lf1;/, l1, i/ real r; boolean changes, fortran; /, p-1 l./page ...02/, r/dh 86.10.08/dh 87.09.08/ l./procedure nextinlist/, l./psn:= extlist.if2/, r/if2/if2 extract 12/ l./contry :=/, l1, i/ kindspec1 := 28; time (1) := systime (5, 0, r); time (2) := r ; <*prepare time (1:2)*> /, p-1 l./page ...06/, r/86.10.08/87.08.08/ l./<10>on base/, r/);/, "nl", 1);/, p-1 l./page ...07/, r/86.10.08/87.09.07/ l./if content = 4 then/, i/ fortran := catind.kindspec1 < 0; /, p-1 l./ne :=/, l1, i/ ng := extlist.if2 shift (-12); nb := nextinlist (i); /, p-4 l./for j := extlist.if2/, r/extlist.if2 shift(-11)/2 * ng/, r/nextinlist(i)/(if fortran then 0 else nb)/ l./page ...08/, r/86.10.08/87.09.08/ l./for ne := ne/, i/ changecount := 0; /, p1 l./fundet:/, l1, d2, i/ nextinlist (i); changes := extlist.if2 <> externals.iaf (1); extlist.if2 := externals.iaf (1); nextinlist (i); changes := changes or extlist.if2 <> externals.iaf (2); extlist.if2 := externals.iaf (2); /, p-8 l./end;/, i/ changecount := changecount + 1; if changecount = 1 then write (out, "," , 1, "sp", 1) else write (out, "nl", 1, "sp", 27); write (out, true, 12, name, if changes then <: changes:> else <:no changes:>); /, l1, p-2 l./end any externals at all/, i/ if fortran then begin <*skip commons and zone commons*> nc := nb shift (-12); nzc := nb extract 12 ; for nc := nc step -1 until 1 do for j := 1 step 1 until 6 do nextinlist (i); for nzc := nzc step -1 until 1 do for j := 1 step 1 until 9 do nextinlist (i); end <*skip commons and zone commons*>; if change_count > 0 then <*print time (1:2) in time field of external list*> for j := 1, 2 do begin nextinlist (i); extlist.if2 := time (j); end; /, l1, p-4 f message ret algol library slut end finis ▶EOF◀