|
|
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: 180480 (0x2c100)
Types: TextFile
Names: »retuti4 «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »retuti4 «
job fgs 1 274001 temp disc 1000 100 time 20 0 stat 2
mode list.yes
; editering af fp utility texter
;
; magtapes :
;
;
; mt543053 : - 1.01, vers 2
; mt543331 : - 2.00, vers 2
; mt543285 : - 3.00, vers 2
; mt543020 : - 5.00, vers 2
;
; magtape :
;
; mt295276 : release 3.00, vers 2
;
; slettes og bliver kopi af :
;
; mt543020 : release 5.00, vers 2
;
head 1
message ret fp utility texter
message rettelse fra mt543285 til mt543020 1989.08.01
;
n=set nrz mt543020
g=set mto mt543285
opmess ring on mt543020
mount n
opmess no ring mt543285
mount g
message subpackage ident fil 1
nextfile n g
n=copy list.yes 7
tape identification
contents : source code
package number : sw8010/2
package name : system utility
release : 5.00, 1989.08.01
subpackage name : utility
release : 5.00, 1989.08.01
\f
message translate job fil 2
nextfile n g
n=edit
m e
i#
; job til oversættelse af fp og utilities
char ff
term =set tw terminal d.0
utilities=edit
i/
xp,
utility,
account,
assign,
backfile,
base,
binin,
binout,
bossjob,
cat,
catsort,
change,
changeentry,
char,
claim,
claimtest,
clear,
clearmt,
compresslib,
convert,
copy,
corelock,
coreopen,
correct,
,crb,
,crc,
,crd,
delete,
edit,
enable,
end,
entry,
finis,
fpnames,
head,
,headpunch,
i,
if,
incload,
incsave,
init,
job,
kit,
label,
load,
load13,
lookup,
,lp,
message,
mode,
mount,
mountspec,
move,
newjob,
nextfile,
o,
online,
opcomm,
opmess,
permanent,
,pl,
print,
,ptre,
,ptrf,
,ptro,
,ptrn,
,ptrz,
procsurvey,
release,
rename,
repeat,
replace,
rewind,
ring,
rubout,
save,
save13,
scope,
search,
set,
setmt,
skip,
suspend,
term,
timer,
,tpe,
,tpf,
,tpn,
,tpo,
,tpt,
translated,
,tre,
,trf,
,trn,
,tro,
,trz
unload
/,f
utiareas=edit
i/
xp,
account,
backfile,
base,
binin,
binout,
catsort,
claim,
claimtest,
compresslib,
copy,
correct,
edit,
,headpunch,
i,
job,
label,
load,
load13,
lookup,
message,
mode,
move,
online,
print,
procsurvey,
rewind,
rubout,
save,
save13,
translated,
set,
/
f
compressuti=edit
i/
utility=set 1 3
utility=compress,
fpnames,
account,
backfile,
base,
binin,
binout,
claim,
compresslib,
copy,
correct,
edit,
,headpunch,
i,
job,
label,
lookup,
message,
mode,
move,
online,
print,
procsurvey,
rewind,
rubout,
translated,
set
/
f
scopeuti=edit utilities
i/
scope user,
/
f
lookuputi=edit utilities
i/
head 1
lookup,
/,f
clearuti=edit utilities
i/
clear user,
/, f
binoututi=edit utilities
l./xp/,d,
i/
init=changeentry init fp init init init init init
sys2=binout headfp.ne.b xp.ne.s.12,
/,
l./utility/,r/y/y.p/,
l b, l-1, r/set/set,
endfp.ne.b
/,f
headfp=slang
s.w.
<:newcat:>
<:create:>
<:fp:>,0,0,0
21
0, r.4
s2 ; shortclock
0
0
3<12+2
3584
<:perman:>
<:fp:>,0,0,0
3
<:load:>
<:fp:>,0,0,0
12
e.
endfp=slang
s.w.
<:end:>
e.
c=message oversæt slang del af utility
sorry=algol
begin
trapmode := 1 shift 10;
write (out,
"nl", 2, <:***********************************************:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* S O R R Y *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:* *:>,
"nl", 1, <:***********************************************:>);
endaction := -1;
end;
c=copy uti1 message.no ; dato
fpnames=copy uti3 ; new fpnames
insertproc=copy uti4
slangcompr=slang uti.5
if ok.no
sorry
fpnames=slangcompr fpnames
if ok.no
sorry
insertproc=slangcompr insertproc
if ok.no
sorry
;i trfp5tx
(xp=slang uti.6
xp init)
if ok.no
sorry
;i trmode5tx
(mode=slang uti.9
mode head char finis end)
if ok.no
sorry
;i tri4tx
(i=slang uti.10
i o if)
if ok.no
sorry
;i tropmess4tx
(account = slang uti.11
account replace newjob mount opmess ring ,
suspend release enable change timer convert,
mountspec kit corelock coreopen bossjob opcomm)
if ok.no
sorry
(online=slang uti.12
online repeat)
if ok.no
sorry
;i tredit4tx
(edit=slang uti.13 uti.14 uti.15 uti.16
edit)
if ok.no
sorry
;i trbinin4tx
(binin=slang uti.17
binin)
if ok.no
sorry
;i trbinout4tx
(binout=slang uti.18
binout)
if ok.no
sorry
;i trprint4tx
(print=slang uti.19
print)
if ok.no
sorry
;i trmess4tx
(message=slang uti.20
message)
if ok.no
sorry
;i trmove5tx
(move=slang uti.21
move)
if ok.no
sorry
;i trset5tx
(set=slang uti.22
set setmt clearmt entry changeentry assign rename permanent nextfile)
if ok.no
sorry
;i trlookup4tx
(lookup=slang uti.23
lookup search clear delete scope)
if ok.no
sorry
(backfile=slang uti.24
backfile)
if ok.no
sorry
;i trcopy4tx
(copy=slang uti.25
copy skip)
if ok.no
sorry
;i trbase4tx
(base=slang uti.26
base)
if ok.no
sorry
;i trjob4tx
(job=slang uti.27
job)
if ok.no
sorry
;i trclaim4tx
(claim=slang uti.28
claim)
if ok.no
sorry
(rubout=slang uti.29
rubout)
if ok.no
sorry
(correct=slang uti.30
correct)
if ok.no
sorry
;i trcompr4tx
(compress=slang uti.31
compress)
if ok.no
sorry
;i trcomprl4tx
compresslib=slang uti.32
if ok.no
sorry
;i trtransl4tx
(translated=slang uti.33
translated)
if ok.no
sorry
;i trprocsu5tx
(procsurvey=slang uti.34
procsurvey)
if ok.no
sorry
;i trlabel4tx
(label=slang uti.35
label)
if ok.no
sorry
;i trrewind4tx
(rewind=slang uti.36
rewind unload)
if ok.no
sorry
c=message slut over sættelse af slang del af utility
char ff
c=message oversæt algol del af utility
;i trsave134tx
(allocbuf=slang uti.37
allocbuf)
if ok.no
sorry
save13=algol connect.no survey.yes uti.38
if warning.yes
sorry
;i trload134tx
load13=algol connect.no survey.yes uti.39
if warning.yes
sorry
;i trcats4tx
catsort=algol connect.no survey.yes uti.40
if ok.no
sorry
catsort=changeentry catsort catsort catsort 64.120 catsort catsort catsort
cat =assign catsort
;i trcltst4tx
claimtest=algol connect.no survey.yes uti.41
if warning.yes
sorry
;i trsave4tx
(copyarea=slang uti.42
copyarea)
if ok.no
sorry
save=algol connect.no message.no uti.43
if warning.yes
sorry
save =changeentry save save save 3 save save save
incsave=assign save
;i trload4tx
load=algol connect.no message.no survey.yes uti.44
if warning.yes
sorry
load =changeentry load load load 0 load load load
incload=assign load
c=message slut over sættelse af algol del af utility
char 12
i compressuti
i scopeuti
i lookuputi
release uti
c=message slut oversætjob
char ff
end
#
f
message fpnames fil 3
nextfile n g
n=edit g; new fpnames
; h53 = 18
l./h53/, r/16/18/
f
message insertproc fil 4
nextfile n g
n=edit g
f
message slangcompr fil 5
nextfile n g
n=edit g
; connect output : segm < 2 + key
l./h28./, l-1, r/1<1+1/1<2+0/
f
message fp text fil 6
nextfile n g
fp4tx=edit g
; rettelser til release 4.0
;
; iso 95 = _ rettes tilbage til blind fra illegal
;
; alle store bogstaver gøres legale
;
; extend area i simple check sender parent message hvis claims exceeded
; med wait bit undtagen hvis fp mode bswait (1<10) er false
;
; connect output, docname = 0, 1, 2, 3 => permkey
;
; h53=18 i stedet for h53=16
;
; fyldtegn for positivt fortegn i integer i list command i load ændres
; til 0 i stedet for 127
;
; i connect input/connect output trunceres process kind før indsættelse i zone
;
; connect output : segm = 0 => der skal ikke creeres en fil hvis ingen er
;
; connect output, magtape, after setmode ignoreres svaret (ingen enable)
;
; block io, magtape wait transfer : position fra devicet overføres til zonen
;
; magtape check, reposition indtil 5 gange i tilfælde af position error
; og erase and retry op til 15 gange
l./page ...1/, r/86.08.22/89.01.25/
l./c43/, r/c43/c50/
l./m.file processor/, r/86.10.10/89.01.25/
l./m.fp text 1/, r/86.12.12/89.01.25/
l./page ...2/, r/86.08.27/88.04.24/
l./w2 =/, r/= /= /, p1
l./page ...3b/, r/82.12.09/88.05.19/
l./h52:/, r/3<12/4<12/
l1, i/
h53 = 18 ; no of halfwords in available area in front of zone buffers
/, p-1
l./page ...4/, r/82.12.09/88.05.19/
l./h53=/, d
l./page ...6/,
l./m.fp permanent/, r/85.03.26/89.01.25/
l./block io, page ...2/, r/rc 19.05.72 /fgs 1989.01.25/
l./e18:/, i/
e23: 1<7 ; word defect bit
/, p1
l./block io, page ...3/, r/86.12.12/89.01.25/
l./dl. w1 c24./, d./ld w2 24/, i#
dl. w1 c24. ; magnetic tape status bits:
ld w2 -23 ; if bytes transferred > 0 then
se w0 0 ; begin
wd w2 0 ; if number of characters * 2
se w1 0 ; modulo bytes transferred <> 0
lo. w3 e23. ; then status:=status or word defect bit;
rl. w2 c1. ; end;
sz. w3 (c44.) ; if status.tape mark sensed = 1 then
jl. e30. ; goto skip;
wa w0 6 ; if hwds xferred <> 0 or status <> 0 then
sn w0 0 ; begin <*update pos in zone by pos in answer*>
jl. e30. ; zone.file, block :=
dl. w1 c28. ; answ.file, block;
ds w1 x2+h1+14 ; end;
e30: ld w2 24 ; index := 0 again;
#
l./character io, page ...2/, r/26.03.73/88.04.24/
l./h33:/,
l1, r!console!terminal/console and!
l1, r/or / /, r/punch/punch and/
l1, r/or / /, r/printer/printer and/
l1, r/or / /
l./page ...4/,
l./m.fp io system/, r/86.12.12/89.01.27/
l./resident, page ...1/, r/86.12.12/89.01.25/
;l./h40:/, r/fp/fp5/
l./h85:/, d, r/ /h85:/, i/
/
l./; am 0/, d, i/
/
l./resident, page ...4/, r/rc 11.04.72 /fgs 1989.01.26/
l./h82:/, l2, i/
c44: 1<16 ; tape mark sensed
/, p1
l./simple check, page ...1/, r/84.09.04/88.04.24/
l./e17:/, l1, i#
; working locations:
; fnc area:
e42: 44<12+2.0000011<5+1; fnc<12+pattern<5+wait
<:bs :> ; <:bs :>
0, r.4 ; docname of area process
0 ; segments
0 ; 0 entries
e47: 0 ; area process descr.
e48: 0, r.10 ; tail
\f
; fgs 1988.04.24 fileprocessor simple check, page ...2...
#, p-12
l./simple check, page ...1a/, d./e47:/, i#
\f
; fgs 1988.04.24 fileprocessor simple check, page ...3...
e32: jd 1<11+8 ; reserve: reserve process;
se w0 0 ; if not reserved
jl. e1. ; then goto give up;
jl. e10. ; goto repeat;
e31: bl w0 x2+6 ; rejected:
sn w0 5 ; if operation = output
jl. e32. ; then goto reserve;
bz w0 x1+h1+1 ; w0 := zone.kind;
sn w0 6 ; if kind = disc process then
jl. e32. ; goto reserve;
jl. e1. ; goto give up;
e46: al w3 x1+h1+2 ; extend:
jd 1<11+4 ; process description;
rs. w0 e47. ;
am (0) ;
rl w0 18 ; old size := no of segments (area process);
rl w3 x2+10 ;
ws w3 x2+8 ; new size :=
al w3 x3+2 ; segment(share) +
ls w3 -9 ; (last transfer-first transfer+2)//512;
wa w3 x2+12 ;
sl w0 x3 ; if old size >= newsize then
jl. e10. ; goto repeat;
al w0 x3 ;
al w3 0 ;
am. (e47.) ; device:=area(10);
rl w2 10 ; slice length:=device(26);
sn w2 0 ; if deviceref=0 then
jl. e33. ; jump
wd w0 x2+26 ; new size :=
se w3 0 ; (new size // slice length
ba. w0 1 ; + if remainder = 0 then 0 else 1)
wm w0 x2+26 ; * slice length;
e33: rl w2 0 ; w2 := new size;
\f
; fgs 1988.04.24 fileprocessor simple check, page ...4...
e14: al w3 x1+h1+2 ;
al. w1 e48. ;
jd 1<11+42 ; lookup entry(area);
rs w2 x1 ; size := new size;
jd 1<11+44 ; change entry;
se w0 6 ; if claims exceeded then
jl. e35. ; begin <*extend area*>
rl. w0 e42.+12 ;
se w0 0 ; if fnc area.segm <> 0 then
jl. e29. ; goto give up;
rl. w1 h51. ;
sz w1 1<10 ; if mode.bswait = false then
jl. e34. ; begin
rl. w0 e42. ; fnc area.fnc :=
ls w0 -1 ; fnc area.fnc -
ls w0 1 ; wait bit;
rs. w0 e42. ; end;
e34: rl. w1 e47. ; claim :=
rl. w0 e48. ; new size -
ws w0 x1+18 ; old size ;
rs. w0 e42.+12 ; fnc area.segm := claim;
dl w0 x1+22 ; move
ds. w0 e42.+6 ; area process.docname
dl w0 x1+26 ; to
ds. w0 e42.+10 ; fnc area.docname;
al. w1 e42. ; w1 := addr first half fnc area;
al w2 x1+8 ; w2 := addr second half fnc area;
jl. w3 h35. ; parent message special (w1=fnc area);
dl. w2 c5. ; w1 := zone;
rl. w2 e48. ; w2 := new size;
jl. e14. ; goto change entry;
; end else
e35: sn w0 0 ; if result <> 0 then
jl. e26. ; begin
e29: al w0 0 ; fnc area.segm := 0;
rs. w0 e42.+12 ; goto give up;
jl. e1. ; end else
;
e26: rs. w0 e42.+12 ; begin
dl. w2 c5. ; fnc area.segm := 0;
dl. w0 c11. ; restore registers ;
jl. e10. ; goto repeat;
; end;
#, p-12
l./page ...2/, r/28.05.72/88.04.24/, r/...2/...5/
l./e26:/, r/e26:/ /, p1
l./m.fp simple check/, r/84.09.04/88.05.04/
l./connect in, page ...4/, r/84.09.05/88.08.09/
l./ds w0 x1+h1+2/, i/
sz w3 1 ; <*if kind odd then
al w3 x3-1 ; truncate kind*>
/, p-2
l./connect in, page ...5/, r/rc 08.08.73 /fgs 1988.08.09/
l./e36:/, r/e36: /;e36:/
l./a27:/, r/a27: /a27:/
l./connect in, page ...6/, r/rc 1976.02.02 /fgs 1988.08.09/
l./c. -g1/, r/-g1/-1-g1/
l./w. 0, r. g1/, d, i/
c. -1+g1
w. 0, r.g1 ; fill segment
z.
/, p-2
l./m.fp connect input/, r/86.12.12/88.08.09/
l./connect output, page ...1/, r/82.11.29/88.05.01/
l./c4:/, r/<1/<2/, r/<drum or disc>/permkey/
l./preferably on drum (if w0/, d1, i/
; connect output will create an area on the disc with the most
; resources of the particular permkey.
/, p-2
l./negaive/, r/negaive/negative/
l./greatest temporary/, d1, i/
; device with the greatest claims of the particular permkey) decreased
; by the absolute value of segments.
/, p-2
l./page ...2/, r/82.11./88.05.01/
l2, r/b9, e49 /b20, e49/
l./page ...3/, r/rc/fgs/, r/78.09.27/88.05.01/
l./convension/, r/convension/convention/
l./page ...4/, r/82.11.82/88.09.07/
l./sz w3 1/, d5, i/
al w1 3 ; lookup area (0) := 0;
la w1 6 ; lookup area (1) := w0.permkey;
ds. w1 h54.+2 ;
al w0 x1 ; key := permkey;
as w3 -2 ; wanted := w0.segments > 2;
sn w3 0 ; if wanted = 0 then
jl. b9. ; goto unknown;
/, p-5
l./as w3 -1/, r/ -1/ -2 /
l1, d1
l./page ...5/, r/83.07.28/88.09.07/
l./jl. w2 a4./, d, i#
rx w0 6 ; swop (claim, wanted);
jl. w2 a4. ; convert to slices (claim);
rx w0 6 ; swop (claim, wanted);
jl. w2 a4. ; convert to slices (wanted);
#, p1
l./a13:/, d./jl. h70.+2/, i/
a13: rs. w2 c9. ; descriptor found:
rl. w3 h41. ; save file descriptor in c9;
al w3 x3+1 ; segment (fp) := segment (fp) + 1;
jl. h70.+4 ; call segment 2 (connect output);
/, p-5
; *********
;l./a13:/, r/rl w0 x2/ /
;l./bz w1 1/, d./al w0 x1/,
;r/; w0 := kind > 1;/; call connect2:/
;***********
l./page ...7/, d./page ...7b/, i#
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7...
; segment 1
; procedure get claims (key, filedescriptor);
;
; call: return:
;
; w0 key claim
; w1 link link
; w2 - unchanged
; w3 - unchanged
;
; filedescriptor.docname entry.docname or docname of disc
; 0, ..., 3 with claims
;
; The procedure finds the disc with the largest claims for the
; given key and returns the claims in w0 and the docname of the
; disc in filedescriptor.docname.
; If docname given in filedescriptor.docname is 0, all discs are
; searched for the one with the greatest claims of that particular
; permkey. The search goes on backwards from last disc to first disc
; or drum.
; If, however, the docname given is a document name for a disc
; included in the bs system, the procedure returns the claims
; for the given key for that disc.
;
a8: ds. w3 h10.+4 ; get claims: (fp exception routine dump area used)
rs. w1 h10.+0 ; save (w2, w3); save return;
zl w2 64 ;
sl w2 9 ; if monitor release > 8 then
am 1 ; key := key * 4 else
ls w0 1 ; key := key * 2 ;
hs. w0 b2. ;
al w0 -2 ;
sh w2 8 ; if monitor <= 8 then
hs. w0 b12. ; decr := -2;
rl w0 92 ; w0 := first drum;
rl w1 96 ; last device :=
al w1 x1-2 ; top discs - 2;
rs. w0 b1. ; first device := first drum;
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7a...
; segment 1
rl. w2 h54.+2 ; w2 := first word of docname;
sh w2 3 ; if docname (1) <> (0, 1, 2, 3) then
jl. a12. ; begin <*docname specified*>
al. w3 h54.+2 ;
jd 1<11 + 4 ; w0 := proc descr addr (docname);
sn w0 0 ; if process exists then
jl. a12. ; begin
am (0) ; w0 :=
rl w0 24 ; chaintable addr (docname);
a25: rl w2 x1 ; loop: w2 := device.chaintable address;
sn w2 (0) ; if device.chaintable address <>
jl. a39. ; doc .chaintable address then
; begin
al w1 x1-2 ; device := device -2;
jl. a25. ; goto loop;
; end;
a39: rs. w1 b1. ; first device := last device := device found;
; end process exists;
; end docname specified;
a12: al w0 0 ;
rs. w0 h10.+8 ; max slices := 0;
a9: rl w2 x1 ; next device:
rl. w3 h16. ; w2 := device.chaintable address;
wa w3 x2-36 ; w3 := device.key zero claims;
rs. w3 h10.+12 ; save device.key zero claims;
al w0 2047 ; min slices :=
jl. w2 a3. ; convert to segments (
rs. w0 h10.+10 ; + infinity);
b2 = k + 1 ; key * (if mon rel < 9 then 2 else 4);
al w3 x3+0 ; w3 := device.slice claims.key
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7b...
; segment 1
a10: zl w0 64 ; next key:
sl w0 9 ; if monitor release <= 8 then
jl. a36. ; begin <*halfwords*>
rl w0 6 ; device key :=
ws. w0 h10.+12 ; (device.key claims -
ls w0 -1 ; device.key0 claims) > 1;
zl w2 x3 ; w2 := entry claims;
sh w0 1 ; if device key <= 2 then
al w2 1 ; w2 := 1;
zl w0 x3+1 ; w0 := slice claims;
jl. a37. ; end else
a36: rl w0 6 ; begin
ws. w0 h10.+12 ; device key :=
ls w0 -2 ; (device key claims - device.key0 claims) > 2;
rl w2 x3 ; w2 := entry claims;
sh w0 1 ; if device key <= 2 then
al w2 1 ; w2 := 1;
rl w0 x3+2 ; w0 := slice claims;
a37: ; end;
sh w2 0 ; if entry claim = 0 then
al w0 0 ; slice claim := 0;
jl. w2 a3. ; convert to segments (slice claim);
sh. w0 (h10.+10) ; if slice claim <= min slices then
rs. w0 h10.+10 ; min slices := slice claim;
b12=k+1 ; decr:
a29: al w3 x3-4 ; decrease sliceclaim key address by decr;
sl. w3 (h10.+12) ;
jl. a10. ;
; if claim key addr >= claim key 0 address then
; goto next key;
rl w2 x1 ; device := chaintable;
rl. w0 h10.+10 ;
sl. w0 (h10.+8) ; if min slices >= max slices then
jl. a11. ;
jl. a38. ; begin
a11: rs. w0 h10.+8 ; max slices := min slices;
rs. w2 h10.+14 ; best device := device;
rl w0 x2-8 ; slice length := slice length (device);
rs. w0 h10.+6 ; end;
a38: al w1 x1-2 ; device := device - 2;
sl. w1 (b1.) ; if device <> first device then
jl. a9. ; goto next device;
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7c...
; segment 1
rl. w2 h10.+14 ; get best device;
dl w0 x2-16 ; move
ds. w0 h54.+4 ; chaintable.docname
dl w0 x2-12 ; to
ds. w0 h54.+8 ; filedescriptor.docname;
rl. w0 h10.+8 ; w0 := max slices in segments;
dl. w3 h10.+4 ; restore (w2, w3);
jl. (h10.) ; return;
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7d...
; segment 1
; procedure convert to segments (slices);
;
; call : return :
;
; w0 : slices slices * slicelength
; w1 : name table entry unchanged
; w2 : link address chaintable
; w3 : device.slice claims.key unchanged
b. b3 ; begin block
w.
a3: rs. w2 b2. ; save return;
rl w2 x1 ; w2 := chain table entry;
rs. w3 b3. ; save w3;
wm w0 x2-8 ; slices := slices * slicelength;
rl. w3 b3. ; restore w3;
jl. (b2.) ; return;
b2: 0 ; saved return
b3: 0 ; saved w3;
i.
e. ; end block
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7e...
#
l./page ...7c/, r/82.12.03/88.05.01/, r/7c/7f/
l./m.fp connect out 1/, r/85.03.07/89.02.02/
l./page ...8/, r/82.11.29/88.09.07/
l./e0:/, i/
; c4 : irrelevant
; c7 : zone addr or 0
; c9 : file descr addr
; c11: link
/, p-4
l./rl. w1 c4./, d, i/
rl w0 x2 ; w2 := addr file descr; w0 := file descr.kind;
zl w1 1 ; kind := file descr.kind >
ls w1 -1 ; 1;
sl w1 e16 ; if kind > max kind then
jl. a27. ; goto convention error;
rs. w1 c4. ; save kind;
/, p-7
l./page ...9/, r/86.12.12/89.02.02/
l./a19:/, l-1, d./<:enable/
l./page ...10/, r/86.12.12/89.02.02/
l./; mount ring:/, d./jl. a22./, d
l./connect output, page ...11/, r/82.11.29/88.09.07/
l./ds w0 x1+h1+2/, i/
sz w3 1 ; <*if kind odd then
al w3 x3-1 ; truncate kind*>
/, p-2
l./page ...12/, r/82.11.29/88.05.01/
l./m.fp connect out/, r/86.12.12/89.02.02/
l./magtape check, page ...1/, r/84.09.04/88.12.09/
l./e2:/, r/+1<6/ /
l./e35:/, l1, i/
e31: <:<25><0><0>:> ;
/, p-1
l./magtape check, page ...1a/, r/rc 23.05.72/fgs 1989.01.25/
l./e22:/, l./jl. e17./, r/e17./e23./, r/give up/parity/
l./e20:/,
l./sz w0 1<6/, i/
sn w3 8 ; if operation = move then
jl. e15. ; goto check position;
/, p-2
l./jl. e23./, r/e23./e29./, r/parity/prepare reposition;/, p-1
l./e15:/, d./dl. w0 c11./, i#
e15: al w2 x3 ; check position:
dl. w0 c28. ;
se w2 8 ; if operation <> move then
ds w0 x1+h1+14 ; zone.file, block := answer.file, block;
sn w3 (x1+h1+12) ; if answer.file count <> zone.filecount
se w0 (x1+h1+14) ; or answer.block count <> zone.blockcount then
jl. e33. ; goto add position error bit;
rl. w2 c5. ; w2 := share;
#
l./sn w3 3 ; if operation <> input/, r/sn/se/
l./so. w0 (e4.)/, d
l./al w0 25/, d1, i/
; zone.first address := <:<25><0><0>:>;
rl. w0 e31. ; top transferred := first addr + 2;
/, p-1
l./e33:/, l./jl. e23./, r/e23./e29./, r/parity/prepare reposition/, p-1
l./magtape check, page ...2/, r/84.09.04/89.01.31/
l./sz. w0 (e2.)/, r/ , overrun or position/or overrun/, i/
se w3 0 ; if operation = sense
sl w3 8 ; or operation = move , out tapemark or setmode then
jl. e29. ; goto prepare reposition;
/, l1, p-4
;l./e0:/, r/no transport:/no transport: <*stopped or position error empty trans;fer*>/, i/
; rl. w1 c22. ;
; sz w0 1<6 ; if position error and
; sh w1 0 ; halfs xferred > 0 then
; jl. e0. ;
; jl. e17. ; goto give_up;
;/, l1, p-6
l./e21:/, d1, i/
e21: sz w3 2.111 ; mount tape:
jl. e30. ; if sense or move then
jl. e16. ; goto return;
e30: ; <*the position is completed at next transfer*>
/, p-4
l./magtape check, page ...3/, r/84.09.04/88.12.09/
l./e27:/, i/
e29: al w1 0 ; prepare reposition:
rs. w1 e35. ; reposition count := 0;
/, l1, p-2
l./magtape check, page ...4/, r/86.12.12/89.01.31/
l./sl w3 5/, r/sl w3 5/sl w3 15/, r/=5/=15/
l./jl. e27./, r/e27./e29./, r/repos/prepare repos/
l./jl. e27./, r/e27./e29./, r/repos/prepare repos/
l./magtape check, page ...5/,
l./m.fp magtape check/, r/86.12.12/89.01.31/
l./init,page ...1/, r/86.12.12/88.05.04/
l./e48, b12/, r/b12/b20/
l./init, page ...4/, r/86.12.12/88.05.02/
l./e4:/, r/1<1/1<2/
l1, r/device := drum;/permkey := 0;/
l./am. (b8.)/, d2, i/
am. (b8.) ;
se w1 x1 ; if first init then
jl. e19. ; begin
; al. w3 b13. ;
; jd 1<11+4 ; addr of process (<:s:>);
; rl. w1 h17. ;
; sn w0 x1 ; if addr of parent process = addr of <:s:> then
; am 1<10 ; add bswait to fp mode bits;
al w2 1<9 ; mode.initmess :=
lo. w2 h51. ; yes;
rs. w2 h51. ;
jl. e16. ; end else
e19: ; begin <*not first*>
/, p-9
l./comment do not check/, r/com/ com/
l./curr out./, r/cur/ cur/
l./if mode 14.no/, r/if/ if/
l1, r/begin/ begin mode initmess.yes/
l./e17:/, r/end/ end/
l2, r/close/ close/
l1, r/prep/ prep/
l1, r/; skipped:/; end not first;/
l1, r/comm/ comm/, p-4
l./b12:/, l1, i/
b13: <:s:>, 0, r.3 ; name of ancestor <:s:>
/, p-2
l./m.fp init /, r/86.12.12/89.01.12/
l./commands, page ***15***/, r/86.08.22/88.04.24/
l./; 65:/, g5/+10/+ 2/, r/0<5+ 2/0<5+10/, p-5
l./; 95:/, r/0<5+10/ 0/, r/<95>/ _ /
l./page ***16***/, r/86.09.01/88.04.24/
l./i10:/, r/m. /
m./, r/top of command reading/fp comm. reading/, r/86.09.03/88.04.24/
l./, load, page 3/, r/rc 86.10.10 /fgs 1988.07.21/
l./1<23+ 127<12 + 1/, r/127/ 0/
l./page 3a/, l./m.fp/, r/86.10.10/88.07.21/
l./end program, page ...4/, r/86.09.01/88.05.02/
l./1<1+1/, r/1<1+1/1<2 /
l./m.fp end program and/, r/86.12.12/88.05.02/, r/and device status/ /
f
n=edit fp4tx
; rettelser til release 5.0
;
; block io, common bits : if less than wanted was input and kind = disk
; or less than wanted was output then add stopped
;
; block io : bit 1<23, intervention, special bit for character output
; simple check : bit 1<23, intervention, special action is as for
; paper low : parent message attend with wait bit
;
; simple check : parent message change ændres til attend
;
; init : efter connect (out, primout) og connect (in, primin) sættes
; name table address, så evt. area process ikke fjernes af
; fp end program igen
;
; commands : script indføres
;
; commands : ved 'em' på prim out tømmes curr out og der sendes finis til
; parenten, ved 'em' på stakket curr out afstakkes blot
;
; in fp load program any program with text contents is just connected as
; current input and fp jumps to command reading
;
; a new slang segment, finis, is brought in to send an MCL message before
; a finis parent message in case primary output process is a pseudo pro-
; cess and its main process has the name <:menu:>
;
; end program : device status card reject or disk error ændres til
; disk error or not connected
l./page ...1/, r/89.01.25/89.06.27/
l./m.file processor/, r/89.01.25/89.06.27/
l./m.fp text 1/, r/89.01.25/89.06.28/
l./s. k=h55, e48 ; command assembly/, l1, r/13, 14/13, 14, 15/
l3, r/15/16, 17/
l./end program and device status/, i/
; s. k=h55, e48 ; finis message to parent
; e. ; segment 18
;
/, l2, r/16, 17/19, 20/, p-3
l./permanent, page ...3b/, r/88.05.19/89.06.27/
l./h52:/, r/4/5/
l./page ...6/,
l./m.fp permanent/, r/89.01.25/89.06.28/
l./block io, page ...2/, r/89.01.25/89.03.20/
l./e23:/, l1, i/
e29: 1<8 ; stopped bit
/, p-1
l./block io, page ...3/, r/89.01.25/89.03.20/
l./am. (c22.)/, d./al w3 x3+1<8/, i/
sn w0 3 ; if less than wanted was input and
se w2 4 ; kind = disk
sn w0 5 ; or less than wanted was output then
lo. w3 e29. ; status := status or stopped bit;
/, p-4
l./block io, page ...4/, r/82.12.12/89.03.20/
l./e28:/, l-1, r/8.0/8.4/
l6, r#*#* /#, p1
l./page ...4/,
l./m.fp io system/, r/89.01.27/89.03.20/
l./resident, page ...1/, r/89.01.25/89.06.27/
l./h64:/, r/am 0/am -1/, r/hard error =/fp finis:/
l1, r/am 1/am 3/
l1, r/am 2/am 3/
l./h99=/, l./am 512/, r/512 /1024/
l1, r/1022/1534/
l./resident, page ...4/, r/89.01.26/89.06.29/
l./c44:/, l1, i/
c45: -1 ; script (initially : not in script)
/, p-1
l./h56=/, l./c. -g1/, r/-g1 /-g1-1/
l2, d, i/
w. c. g1-1 0, r.g1 z. ;
/, p-1
l./resident, page ...6/, r/82.12.09/89.06.27/
l./h64/, r/hard errors on devices/finis program/
l./resident, page ...7/, l./m.fp resident/, r/86.12.12/89.06.27/
l./simple check, page ...1/, r/88.04.24/89.03.20/
l./e17:/, l1, i#
e18: 1<23 + 1<18 ; test intervention and end doc
#, p-1
l./simple check, page ...2/, r/88.04.24/89.03.20/
l./so. w0 (e17.)/, d1, i/
sz. w0 (e17.) ; if not end doc then
jl. e9. ; begin <*not end doc and stopped*>
bz w0 x1+h1+1 ;
bz w3 x2+6 ;
sn w0 4 ; if kind = area and
se w3 3 ; operation = input then
jl. e23. ; goto return else
jl. e7. ; goto repeat the rest;
e9: ; end;
/, p-9
l./e19:/, l./rl. w0 c11./, d1, i/
rl w3 x2+2 ;
al w3 x3+1 ;
sh w3 (x2+22) ; if share.top transferred > share.first shared then
/, l1, p-4
l./page ...5/, r/88.04.24/89.03.20/
l./e25:/, l1, r/change/attend/
l./e5:/, l./so. w0 (e17.)/, d1, i/
sz. w0 (e18.) ; if intervention or end doc then
jl. e24. ; goto attend message else
jl. e27. ; goto test stop ;
/, l1, r/ al/e24: al/, r/ if end document then/ attend message:/, p-4
l./m.length error on fp segment 3/, r/ on fp segment 3/, simple check/
l./m.fp simple check/, r/88.05.04/89.03.20/
l./stack, page ...5/,
l./m.length error on fp segment 6/, r/ on fp segment 6/, stack/
l./unstack, page ...5/,
l./m.length error on fp segment 7/, r/ on fp segment 7/, unstack/
l./magtape check, page ...5/,
l./m.length error on fp segment 9/, r/ on fp segment 9/, magtape check/
l./init, page ...1/, r/88.05.04/89.06.28/
l./; segment 10/, r/segment 10/segment 11/
l./init, page ...3a/, r/86.12.12/89.06.23/, r/3a/4/
l1, l./init, page ...4/, r/88.05.02/89.06.23/, r/...4/...5/
l./jl. w3 h28.-2/, l3, i/
jl. w2 e20. ; send and wait sense (out);
/, p-1
l5, i/
jl. w2 e20. ; send and wait sense (in);
/, p-1
l./rs. w3 h9./, l1, i/
al w3 -1 ; set
rs. w3 c45. ; not in script;
/, p-2
l./; the following code is skipped/, i/
\f
; fgs 1989.06.23 file processor, init, page ...5...
/
l./e5:/, i/
\f
; fgs 1989.06.23 file processor, init, page ...6...
/
l./jl. w3 h14./, d./b13:/, i/
jl. h64. ; goto fp finis;
e20: ; send and wait sense (zone);
rs. w2 b14. ; save return;
al w3 x1+h1+2 ; w3 := zone.docname;
al. w1 b4. ; w1 := message area (sense);
jd 1<11+16 ; send message;
al. w1 h66. ; w1 := addr answer area block io;
jd 1<11+18 ; wait answer;
jl. (b14.) ; return;
\f
; fgs 1989.06.23 file processor, init, page ...7...
b0: 1<23 ;
b1: 0 ; file descriptor;
0 ;
b5: 0 ; first half of name;
0 ;
b6: 0 ; second half of name;
0, r.5 ; rest of tail;
b2: <:c:>,0,0,0 ;
b3: <:v:>,0,0,0 ;
b4: 0, r.4 ; zero used in set catbase and send and wait sense
b7: <:***fp reinitialized<10><0>:>
b8: 0 ; first (boolean)
b9: 8<13+0<5 ; parent message
<:***fp init troubles :>
b10: <: version<0>:> ;
b11: <: release<0>:> ;
b12:; <: started with <0>:>
b13: <:s:>, 0, r.3 ; name of ancestor <:s:>
b14: 0 ; saved return in send and wait sense
/, p1
l./m.length error on fp segment 11/, r/ on fp segment 11/, fp init/
l./m.fp init /, r/89.01.12/89.07.04/
l./commands, page ***01/, r/86.08.06/89.07.04/
l./b. a2/, r/a2/a9/, r/b0/b9/
l./a0:/, l./al. w3 a0./, d3, i/
se w2 25 ; if char = 'em' then
jl. a1. ; begin
rl. w1 h50. ;
se w1 0 ; if current input stack chain empty then
jl. a2. ; begin
jl. w3 h95.-2 ; close out text (curr out);
jl. h64. ; goto finis to parent;
a2: al w1 -1 ; end;
se. w1 (c45.) ; if not in script then
jl. a3. ;
al. w3 a0. ; goto unstack current input; return to rep;
jl. h30.-4 ;
a3: wa. w1 g19. ; bracket count :=
rs. w1 g19. ; bracket count - 1;
se w1 0 ; if bracket count <> 0 then
jl. f0. ; goto syntax error; <*where in will be unstacked*>
jl. w3 h30.-4 ; unstack current input;
rl. w3 g3. ; get char addr;
al w0 7 ; state := 7; <*cheat, w0 is not supposed to change*>
al w2 10 ; char := 'nl'; <*cheat again, char in buffer unch.*>
a1: ; end;
/, p1
l./commands, page ***06/, r/86.08.27/98.06.28/
l./b. a9/, r/a9, b2 /a99, b2/
l./commands, page ***07/, r/86.09.03/98.07.04/
l./jl. h14./, r/h14/h64/, l-1, r/finis/goto fp finis/, p1
l./i3:/, l2, i/
jl. w3 h39. ;
al w0 -1 ; if in script then
sn. w0 (c45.) ; begin
jl. i0. ; set not in script;
rs. w0 c45. ; warning.yes, ok.no ;
al w2 3 ; goto fp end program;
jl. h7. ; end else
; goto initiate command reading;
/, p-2
l./commands, page ***08/, r/86.08.08/98.07.04/
l./al w3 1/, d2, i/
al w3 1 ;
rs. w3 g14. ; state := 1;
sn. w0 (c45.) ; bracket count := if in script then 1
al w0 1 ; else 0;
ds. w0 g19. ; sign := 1;
/, p-5
l./rl. w2 h9./, l1, i/
al w0 0 ;
se. w0 (c45.) ; if in script then
jl. a11. ; begin
rl. w2 h8. ; cur command := fp.cur command;
a12: ea w2 x2+1 ; cur command := cur command + cur command.length;
zl w1 x2 ; sep := cur.command.sep;
sl w1 4 ; if sep > 'nl' then
jl. a12. ; goto rep;
al w2 x2+2 ; <*because commands are moved to x2-4*>
a11: ; end;
/, p1
l./dl. w1 i13.; move endlist/, d1, i/
dl. w1 i13. ;
al w3 0 ; if not in script then
se. w3 (c45.) ; move endlist;
ds w1 x2 ;
; end part of fp;
/, p1
l./page ***09/, r/86.08.11/89.07.04/
l./jl. h62./, l-1, i/
al w0 -1 ; set
rs. w0 c45. ; not in script;
/, p-2
l./commands, page ***11/, r/86.08.15/98.06.28/
l./f5:/, l./sh w1 -1/, d, i/
sh. w1 (c45.) ; if bracket count <= script then
/, p1
l./commands, page ***16/, r/88.04.24/98.06.28/
l./i10:/, i#
w.
b. g1 ; fill segment
g1 = (:h55+1536-k:)/2
c. -g1 m. length error fp commands
z.
; w. 0, r.g1
e.
#
l./m.fp comm. reading 88.04/, r/88.04.24/89.07.04/
l./load, page 1/, r/rc 12.07.79 /fgs 1989.06.28/
l3, r/512 /1024/
l./load, page 1a/, r/rc 12.07.79 /fgs 1989.06.28/, r/1a/...2.../
l./load, page 1b/, r/rc 12.07.79 /fgs 1989.06.28/, r/1b/...3.../
l./e2:/, d3, i/
e2: ; if contents = 0
sl w3 2 ; or contents = 1 then
jl. e18. ; begin
e17: al w0 x2+2 ; file name pointer := param pointer + 2;
jl. w3 h29.-4 ; stack current input;
rl w2 0 ;
jl. w3 h27.-2 ; connect curr input ( file name);
sn w0 0 ; if result <> 0 then
jl. e19. ; begin
jl. w3 h30.-4 ; unstack current input (cur chain);
jl. w3 e48. ; set name table addr in curr in;
jl. e44. ; goto connect trouble;
e19: jl. w3 e48. ; end;
rs. w0 c45. ; set name table addr in curr in;
rl. w3 h51. ; script := 0;
sz w3 1<0 ; if fp mode list.yes then
jl. w3 e26. ; list curr command;
jl. h61. ; goto commands;
e18: ; end else
se w3 2 ; if not (contents = 2
sn w3 8 ; or contents = 8) then
jl. e20. ;
jl. e47. ; goto call trouble;
e20: ;
/, p1
l./load, page 2/, r/rc 86.09.03 /fgs 1989.06.28/, r/page 2/page ...4.../
l./load, page 3/, r/88.07.21 /fgs 1989.06.28/, r/page 3/page ...5.../
l./load, page 3a/, r/rc 86.10.10 /fgs 1989.06.28/, r/3a/...6.../
l./e44:/, i/
;procedure set name table address in zone:
;w1 = zone w3 = link
b. a3 w.
a1: 0,r.10 ; message and answer
0 ; saved w2
a2: 0 ; link
0 ; saved w0
a3: 0 ; saved w1
e48: ds. w3 a2. ; save w2,w3;
bz w3 x1+h1+1 ; if kind <> bs
se w3 4 ; then
jl. (a2.) ; return;
ds. w1 a3. ;
al w3 x1+h1+2 ;
al. w1 a1. ; send message (sense area proc);
jd 1<11+16 ;
jd 1<11+18 ; wait answer;
dl. w1 a3. ; restore w0,w1;
dl. w3 a2. ; restore w2,w3;
jl x3 ; return;
e.
/, p1
l./e13=/, l./(:h55+512/, r#512-k:)/2 #1024-k:)/2#
l./m.length error on fp segment 13/, r/on fp segment 13/load/
l./m.fp program load 88.07.21/, r/88.07.21/89.06.28/
l./end program, page ...1/, i#
\f
; fgs 1989.06.27 file processor, finis, page 1
; the fp segment finis
s. k=h55, a20, e48, f7
w. ;
512
e0: jl. e1. ; entry:
a2: 0 ,0,0,0 ; zero name
a3: <:c:>,0,0,0 ;
a4: <:v:>,0,0,0 ;
a10: 128<12 + 0 ; MCL message:
0 ; localid
12<12 + 15 ; no of characters
0, r.5 ; text (1:5)
a11: <:menu<0>:> ;
a12:<: ok no<0>:>;
<: ok <0>:>;
<:warning, ok no<0>:>;
<:warning, ok <0>:>;
a13: 3 ; mask for extract 2
a14: 10 ; constant
\f
; fgs 1989.06.27 file processor, finis, page 2
e1: ; finis:
rl. w3 h51. ; text addr := addr ( case (warning.ok) of (
ls w3 -5 ;
la. w3 a13. ; <: ok no:>,
wm. w3 a14. ; <: ok :>,
al. w2 a12. ; <:warning, ok no:>,
wa w2 6 ; <:warning, ok :>) );
dl w0 x2+2 ; move
ds. w0 a10.+8 ; text
dl w0 x2+6 ; from
ds. w0 a10.+12 ; constant text area
rl w0 x2+8 ; to
rs. w0 a10.+14 ; message.text area;
\f
; fgs 1989.06.27 file processor, finis, page 3
am. (h16.) ; after param:
dl w1 +78 ;
al. w3 a2. ; w3 := addr name (zero);
jd 1<11+72 ; set catbase (std base);
rl. w3 h15. ;
al w3 x3+2 ;
jd 1<11+4 ; w0 := proc descr addr (prim out);
sn w0 0 ; if w0 <> 0 then
jl. e2. ; begin
rx w3 0 ; save w3; w3 := addr prim out proc;
rl w1 x3 ;
se w1 64 ; if prim out.kind <> 64 <*pseudo*> then
jl. e2. ; skip;
rl w2 x3+10 ;
rl w3 0 ; restore w3;
dl w1 x2+4 ;
sn. w0 (a11.) ; if prim out.parent.name <> <:menu:> then
se. w1 (a11.+2) ;
jl. e2. ; skip;
al. w1 a10. ;
jd 1<11+16 ; send message (prim out, message);
al. w1 h43. ;
jd 1<11+18 ; wait answer (answer area lowest level);
e2: ; end;
\f
; fgs 1989.06.27 file processor, finis, page 4
al w2 0 ; close up (cur out,null);
jl. w3 h95.-2 ;
al w0 0 ;
jl. w3 h79.-2 ; terminate zone (cur out,file mark);
al. w3 a3. ;
jd 1<11+48 ; remove c
al. w3 a4. ;
jd 1<11+48 ; remove v
jl. w3 h14. ; send finis message
jl. -2 ; if not removed then send it again;
b. g1 ; fill segment
g1 = (:h55+512-k:)/2
c. -g1 m. length error fp finis
z.
w. 0, r.g1
e.
e. ; end finis
m.fp finis 89.06.27
#
l./end program, page 3/, r/rc 86.09.01 /fgs 1989.06.27/
l./jl. w3 h14./, r/w3 h14/ h64/
l./end program, page ...8/, r/rc 86.08.28/ fgs 89.03.20/
l./e21:/, r/card rejected or disk error/disk error or not connected/
l./end program, page ...9/,
l./e41 =/, d1, i#
w.
b. g1 ; fill segment
g1 = (:h55+1024-k:)/2
c. -g1 m. length error fp end program
z.
w. 0, r.g1
e.
#
l./m.fp end program/, r/88.05.02/89.03.20/
l./insertproc page ...1/, r/86.12.12/89.06.27/
l./g0: 18/, r/18 / 21/
f
message fp text 2 fil 7 empty
nextfile n g
;n=head
message fp text 3 fil 8 empty
nextfile n g
;n=head
message job adm 1 text fil 9
nextfile n g
n=edit mode5tx ; job adm 1, mode head char finis end
f
message job adm 2 fil 10
nextfile n g
n=edit g ; job adm 2, i o if
; connect output, w0 := segm < 2 + permkey
; mode bits initmess and bswait added to the program if
;
l./page 4/, d./terminate option table/, i#
\f
; fgs 1989.01.11 fp utility, job adm 2, page 4
; option table for if
b20: <:list:> , 0, 0, 1<0
<:pause:> , 0, 0, 1<3
<:error:> , 0, 0, 1<4
<:ok:> , 0, 0, 0, 1<5
<:warning:> , 0, 1<6
; <:if:> , 0, 0, 0, 1<7
<:listing:> , 0, 1<8
<:initmess:> , 0, 1<9
<:bswait:> , 0, 0, 1<10
<:all:> , 0, 0, 0, 2.111111111111111101111111
0 ; terminate option table
#, p1
l./page 6/, r/rc 08.08.73 /fgs 1988.09.08/
l./al w0 1<1+1/, r/1<1+1/1<2+0/, r/pref. on disk/permkey zero/
l./al. w3 b9./, d
l./m.fp job adm 2/, r/76.05.20/89.01.11/
f
message job adm 3 fil 11
nextfile n g
n=edit g ; job adm 3, account replace newjob mount opmess
; ring suspend release enable change timer
; convert mountspec kit corelock
; coreopen bossjob opcomm
; opmess, opcomm : fp parametre af længde > 10 (ny fp syntax)
;
l./page 10/, r/rc 24.04.72 / fgs 1988.09.15/
l./j4:/, l./se w3 10/, r/se/sh/, r/10/9 /
l./...15/,
l./m.rc fp/, r/86.12.22/88.09.15/
f
message online repeat fil 12
nextfile n g
n=edit g
f
message edit text 1 fil 13
nextfile n g
n=edit g ; edit text 1
f
message edit text 2 fil 14
nextfile n g
n=edit g ; edit text 2
; connect output, correction area : segm < 2 + 0
l./tape 2, page 6/, r/84.10.29/88.09.08/
l./al w0 1<1+0/, r/1<1/1<2/, r/pref. on disk/temporary/
l./page 21/, l./m.rc/, r/84.10.29/88.09.08/
f
message edit text 3 fil 15
nextfile n g
n=edit g ; edit text 3
f
message edit text 4 fil 16
nextfile n g
n=edit g ; edit text 4
;
; connect output, object area : segm < 2 + 0
l./tape 4, page 22/, r/rc 14.09.72 /fgs 1988.09.08/
l./al w0 1<1+1/, r/1<1+1/1<2 /, r/pref. on disk/temporary/
l./page 24/, l./m.rc/, r/85.02.28/88.09.08/
f
message binin text fil 17
nextfile n g
n=edit g ; binin
;
; ny parameter disc.<disc> or disc.(0/1/2/3)
;
l./page ...1/, r/rc 1977.02.04/fgs 1988.05.03/
l./a32, b26/, r/a32, b26/a40, b40/
l./page 8/, r/rc 29.07.1971/fgs 1988.05.03/
l./1<1+1/, r/1<1+1/1<2 /, r/ on disc/, temporary/
l./page 10/, r/rc 19.02.1973/fgs 1988.06.02/
l./d13:/, d1, i/
d13: al. w2 b17. ; w2 := addr docname;
rl w0 x2 ; w0 := docname.first word;
rl w1 x1 ; w1 := permkey;
sl w0 4 ; if docname.first word > 3 then
am 40 ; permanent entry into auxcat else
jd 1<11+50 ; permanent entry;
/, p-6
l./page ...11/, r/rc 1977.02.04/fgs 1988.05.03/
l./a20:/, d./a11:/, i#
a20: ba w2 x3-1 ; ok: current command := current command +
rx. w2 g3. ; size part(command table(index-1));
am 6 ;
se. w3 g4. ; if create then
jl. a11. ; begin
ds. w3 b5. ; save w2, w3;
rl w3 x2+12 ;
sh w3 -1 ; if tail.size >= 0 and
jl. a38. ; if discname (1) >= 0 then
al. w3 b17. ; begin
dl w1 x3+2 ; move
sh w0 -1 ; discname
jl. a38. ; from
ds w1 x2+16 ; b17
dl w1 x3+6 ; to
ds w1 x2+20 ; current command.tail.docname;
a38: dl. w3 b5. ; end;
rl. w1 i9. ;
sn w1 0 ; if list.yes then
jl. a11. ; begin
ds. w3 b5. ;
al w2 10 ;
jl. w3 h26.-2 ; writenl;
dl. w3 b5. ;
al w0 x2+4 ; write(out,<:entryname:>);
jl. w3 h31.-2 ; end;
dl. w3 b5. ; end;
#
l1, r/ bz./a11: bz./
l./b1:/, i#
\f
; fgs 1988.05.03 fp utility, binin, page 11a
#
l./d18:/, i#
\f
; fgs 1989.01.11 fp utility, binin, page 12a
#
l./b10:/, l1, i/
b17: <:dis:> ; -1 ; default for discname (1) : -1 means no default
<:c<0>:>; 0 ; - (2)
<:<0>:> ; 0 ; - (3)
<:<0>:> ; 0 ; - (4)
b24: <:list:> ;
b25: <:no:> ;
b26: <:yes:> ;
b27: <:disc:> ;
b28: <:disk:> ;
/, p-4
l./page ...13/, r/rc 1977.02.04/fgs 1989.01.11/
l./d2:/, d./b26:/, i#
d2: rl. w2 f4. ; scan parameter list:
ba w2 x2+1 ; next param;
rs. w2 f4. ;
al w0 0 ;
hs. w0 i0. ; check := false;
hs. w0 i7. ; s := false;
rl w0 x2 ; if param <> (space,name) then
se. w0 (b11.) ; goto not name;
jl. a32. ;
dl w1 x2+4 ;
sn. w0 (b24.) ; if name = <:lis:>
se. w1 (b24.+2) ;
jl. a39. ;
jl. a33. ;
a39: sn. w0 (b27.) ; or name = <:disc:>
se. w1 (b27.+2) ;
jl. a40. ;
jl. a34. ;
a40: sn. w0 (b28.) ; or name = <:disk:> then
se. w1 (b28.+2) ;
jl. a18. ; case name of
jl. a34. ; begin
a33: rl w0 x2+10 ; begin <*list*>
se. w0 (b12.) ; if next param <> pointname then
jl. a18. ; goto next tape;
rl w0 x2+12 ;
sn. w0 (b25.) ; if next param = <:no:> then
jl. a31. ; goto listno ;
se. w0 (b26.) ; if next param <> <:yes:> then
jl. a18. ; goto next tape;
am 1 ; listyes:
a31: al w0 0 ; listno :
rs. w0 i9. ; list := list.(yes/no);
jl. a37. ; end <*list*>;
\f
; fgs 1989.01.11 fp utility, binin, page ...13a...
a34: rl w0 x2+10 ; begin <*disc*>
se. w0 (b12.) ; if next param <> pointname and
sn. w0 (b20.) ; next param <> pointint then
jl. a35. ; goto next tape;
jl. a18. ;
a35: se. w0 (b20.) ; if next param = pointint then
jl. a36. ; begin
rl w0 x2+12 ; int := next param;
sl w0 0 ; if int < 0
sl w0 4 ; or int > 3 then
jl. a18. ; goto next tape;
rs. w0 b17. ; discname (1) := int;
jl. a37. ; end else
a36: dl w1 x2+14 ; begin <*next param = pointname*>
ds. w1 b17.+2 ; discname :=
dl w1 x2+18 ; next param;
ds. w1 b17.+6 ; end;
; end <*disc*>;
a37: rl. w2 f4. ; end case;
al w2 x2+10 ;
rs. w2 f4. ; prepare for next param;
jl. d2. ; goto scan param list;
#
l./a32:/, i#
\f
; fgs 1989.01.11 fp utility, binin, page ...13b...
#
l./a15:/, i#
\f
; fgs 1988.05.03 fp utility, binin, page ...14a...
#
l./a17:/, i#
\f
; fgs 1988.05.03 fp utility, binin, page ...15a...
#
l./m.rc/, r/77.02.04/89.01.11/
f
message binout text fil 18
nextfile n g
n=edit g ; binout text
;
; connect output : segm < 2 + key
l./page ...18/, r/rc 1976.05.21/fgs 1988.09.08/
l./jl w3 h28/, l-2, r/1<1+1/1<2+0/, r/ pref. on disc/, temporary/
l./m. rc/, r/76.05.21/88.09.08/
f
message print text fil 19
nextfile n g
n=edit g ; print text
;
; new : format hex
; 4.1.2 : print from relocated processes
; 4.1.3 : print from bs areas exceeding 32768 segments
; : print from addresses beyound 4194304 up to 8388606
; 4.1.3 : print accesses each segment from 0 up until the first one to print
; 4.1.4 : print does not connect via bs entries
;
l./1985.03.26/, r/85.03.26/88.11.21/
l./i24/, r/i24/i30/
l./jl. e2./, d
l./f8:/, i/
f31: 0 ; block base
f32: 0 ; hwd base
/
l./f8:/, r/1<22 /1<23-1/
l./f11:/, r/1<22 /1<23-1/
l./f12:/, i/
0 ;
/, l1, r/total/total (double)/, p-1
l./print, page 2/, r/rc 8.7.1970 /fgs 1988.07.17/
l./rl. w0 f12./, r/rl/dl/
l./a5:/, d1, i/
a5: al w0 x3 ; ok:
al w3 0 ;
aa. w0 f12. ; no := first + total;
/, p-2
l./rl. w0 f12./, r/f12./f1. /
l1, r/wa/aa/, r/f1. /f12./
l1, r/rs/ds/
l./page ...3/, r/rc 1977.09.14/fgs 1988.07.12/
l./a2:/, l./bz. w0 i4./,
r/i4. /i14./, r/blocked/bs area/, i#
rl. w0 f17. ;
sn w0 0 ; if input descr.name (1) <> 0 then
jl. a54. ; begin
am. (f13.) ;
dl w0 +4 ;
sn. w3 (f17. ) ; if name in area descr in parameter <>
se. w0 (f17.+2) ;
jl. a53. ;
am. (f13.) ;
dl w0 +8 ;
sn. w3 (f17.+4) ; name in input descriptor then
se. w0 (f17.+6) ;
jl. a53. ;
jl. a54. ; begin
a53:
jl. w3 c3. ; writecr;
al w2 40 ;
jl. w3 c9. ; write (<:(:>);
al. w0 f17. ;
jl. w3 c5. ; writetext (input descr name);
al w2 41 ;
jl. w3 c9. ; write (<:):>);
a54: ; end;
\f
; fgs 1988.07.12 fp utility, print, page ...3a...
#
l./a3:/, l-1, d, i/
32<12 +1 ;
zl. w0 i1. ;
se w0 6 ; if segmented then
jl. a3. ; begin
jl. w3 c3. ; writesp;
al w2 40 ;
jl. w3 c9. ; writechar (<:(:>);
rl. w0 f21. ;
bs. w0 1 ; w0 := segm count - 1;
jl. w3 c4. ; writeinteger (<<d>, w0);
32<12 +1 ;
al w2 46 ;
jl. w3 c9. ; writechar (<:.:>);
zl. w0 i0. ; w0 := rel;
jl. w3 c4. ; writeinteger (<<d>, w0);
32<12 +1 ; writechar (<:):>);
al w2 41 ; end;
jl. w3 c9. ; end;
/, p2
l./a7:/, l./32<12 +6/, r/6/8/, r/dddddd/dddddddd/
l./i20=/, l-1, d./jl. w3 c9./, i#
rl. w0 f6. ; w0 := address;
\f
; fgs 1988.07.12 fp utility, print, page ...3b...
i20=k+1 ;
; jl. 2 ; (if octal)
jl. i22. ; skip;
jl. w3 c31. ; writeoctal (addr);
al w2 46 ;
jl. w3 c9. ; writechar (point);
rl. w0 f6. ; w0 := address;
i22=k+1 ;
; jl. 2 ; (if hex)
jl. i3. ; skip;
jl. w3 c33. ; writehex (addr);
al w2 46 ;
jl. w3 c9. ; writechar (point);
#, p-14
l./page 4/, r/rc 14.8.1969 /fgs 1988.07.12/
l./jl. a10./, r/a10./a52./
l./a10:/, i/
i26 = k + 1; hex ; print octal:
a52: sn w3 x3 ; if octal then
jl. a51. ; begin
rl. w0 f10. ; w0 := current word;
jl. w3 c31. ; write_octal (word);
i25 = k + 1; hex ; print hexadecimal:
a51: sn w3 x3 ; if hex then
jl. a10. ; begin
rl. w0 f10. ; w0 := current word;
jl. w3 c33. ; write_hex (word);
/, p-10
l./page ...5/, r/rc 1977.10.12 /fgs 1988.07.12/
l./se w1 0/, d./jl. a14./
l./sz w2 3<2/, d, i/
sz w2 3<2 ; if x-field <> 0 and
sn w1 0 ; displacement <> 0 then
jl. a55. ;
/, p-3
l./sh w1 -1/, r/ /a55: /
l./b2 =/, l2, i/
sz w2 3<2 ; if x-field <> 0 and
se w0 0 ; displacement = 0 then
jl. a56. ; begin
al. w0 g14. ; writetext (<:____:>);
jl. w3 c5. ; goto print right bracket;
jl. a14. ; end;
/
l./sh w0 -1/, r/ /a56: /
l./jl. w3 c4./, r/<<d>/<<dddd>/
l1, r/+1/+4/
l./rs. w0 f29./, r/f29./ f29./
l1, r/c4./c4. /
l./1<23+32<12+1/, r/+1/+9/, r/<<-d>/<<-dddddddd>/
l1, r/f29./f29. /
l2, r/2/2 /
l1, r/a6./i23./, r/increase number/hex/
l1, r/;/ ;/
l./jl. a6./, d,
i/
i23=k+1 ;
; jl. 2 ; (if hex)
jl. a6. ; goto increase number;
jl. w3 c33. ; writehex (final addr);
jl. a6. ; goto increase number;
/, p-5
l./page ...5a/, r/rc 1977.10.13 /fgs 1988.07.12/
l./al w1 9/, i/
al. w0 g12. ;
jl. w3 c5. ; outtext (out, <:8.:>);
/, p-3
l./al w1 9/, r/9 /-3/, r/9/-3/
l./i3:/, l2, i#
;procedure write_hex (value);
;
; call : return : saved in:
;
; w0 : value unch b0
; w1 : - unch b1
; w2 : - unch b2
; w3 : link unch b3
;
b. a10, b10 ;
w. ;
c33: ds. w1 b1. ; entry:
ds. w3 b3. ; save registers;
jl. w3 c3. ; outchar (out, sp);
al. w0 g13. ;
jl. w3 c5. ; outtext (<:16.:>);
al w0 -24 ; shifts := -24;
a0: rl. w2 b0. ; for shifts := shifts + 4
wa. w0 b4. ; while shifts <= 0 do
sl w0 1 ; begin
jl. a1. ; char :=
ls w2 (0) ; value shift shifts
la. w2 b6. ; 4;
zl. w2 x2+b5. ; hex :=
jl. w3 c9. ; hextable (char);
jl. a0. ; end;
a1: dl. w1 b1. ; restore registers;
dl. w3 b3. ;
jl x3 ; return;
b0: 0 ; saved w0
b1: 0 ; - w1
b2: 0 ; - w2
b3: 0 ; - w3
b4: 4 ; constant
b6: 2.1111 ; mask
h. ; hextable (0:15):
b5: 48, 49, 50, 51 ; 0, 1, 2, 3
52, 53, 54, 55 ; 4, 5, 6, 7
56, 57, 65, 66 ; 8, 9, A, B
67, 68, 69, 70 ; C, D, E, F
w. ;
i.
e. ; end block
#
l./page ...6/, r/85.03.26/88.07.12/
l./g9:/, l1, i/
g12: <:8.:> ;
g13: <:16.<0>:> ;
g14:<:<32><32><32><32>:>;
/, l1, p-3
l./c0:/, l./wa. w1 f9./, d1, i/
rl w0 x1-2 ; current word := word (current core relative - 2);
/, p-1
l./page 8/, r/rc 31.1.1974 /fgs 1988.07.14/
l./b4:/, r/numbering/limit violation/
l./b7:/, r/core/memory/
l./c25:/, l1, d./hs. w0 i0./, i/
ld w1 -9 ; current core relative := w0;
ls w1 -15 ; rel :=
hs. w1 i0. ; (w3, w0) extract 9;
ld w1 9 ;
ld w0 -9 ; segment :=
ba. w0 1 ; (w3, w0) shift (-9) +
rs. w0 f0. ; 1;
/, p-7
l./page ...8a/, r/rc 1976.03.11 /fgs 1988.07.22/
l./f30:/, r/14/h76/, r/16/h76+2/
l./page ...9/, r/rc 1977.09.14 /fgs 1988.07.12/
l./c.h57<3/, d./z./
l./page 10/, r/rc 7.7.1970 /fgs 1988.07.17/
l./al w0 0/, d./ds. w1 f3./, i/
al w0 0 ; from word := 0;
rl. w1 f11. ; to word := infinite ;
ds. w1 f3. ;
rl. w0 f31. ; from block := block base;
ds. w1 f5. ; to block := infinite ;
rs. w0 f7. ; block := block base;
al w3 0 ;
ld w0 9 ; total := double
wa. w0 f32. ; (block base < 9 +
ds. w0 f12. ; hwd base );
/, p-10
l./page ...11/, r/rc 1970.07.15 /fgs 1988.07.14/
l./al w1 0/, d./rs. w1 f5./, i/
rl. w1 f31. ; save pointer (field specification);
rs. w1 f4. ; from block := block base;
rs. w1 f5. ; to block := block base;
rs. w1 f7. ; block := block base;
rl w2 0 ; save w0;
al w0 0 ;
ld w1 9 ; total := double
wa. w1 f32. ; (block base < 9 +
ds. w1 f12. ; hwd base );
al w0 x2 ; restore w0;
rl. w2 g9. ; restore w2;
al w1 0 ;
/, p-11
l./a27:/, l./sn w1 4/, d1, i/
se w1 4 ; if w1 = 4 then
jl. a68. ; begin
rl. w0 x1+f2. ; from block :=
wa. w0 f31. ; from block +
rs. w0 x1+f2. ; block base;
rs. w0 f7. ; block :=
al w3 0 ; from block;
ld w0 9 ; total := block <
ds. w0 f12. ; 9;
rl. w0 x1+f2.+2 ; to block :=
wa. w0 f31. ; to block +
rs. w0 x1+f2.+2 ; block base;
jl. a28. ; goto execute;
a68: ; end;
/, p-7
l./page 11a/, r/rc 7.7.1970 /fgs 1988.07.17/
l./jl. w2 c25./, l-1, d1, i/
dl. w0 f12. ; begin
wa. w0 f2. ; (w3, w0) :=
jl. w2 c25. ; total + from word;
/, p1
l1, l./jl. w2 c25./, l-1, d, i/
dl. w0 f12. ; (w3, w0) :=
wa. w0 f3. ; total + to word;
/, p1
l1, l./jl. w2 c25./, l-1, d, i/
dl. w0 f12. ; (w3, w0) :=
wa. w0 b34. ; total + center address;
/, p1
l./a64:/, d
l./page 11b/, r/rc 16.7.1970 /fgs 1988.07.14/
l./a28:/, d, i/
a64: rl. w2 d0. ;
al w0 0 ;
rl. w1 f31. ;
rs. w1 f7. ; block := block base;
ld w1 9 ; total := double
wa. w1 f32. ; (block base < 9 +
ds. w1 f12. ; hwd base );
a28: al w3 x2 ; execute:
/, p-5
l./rs. w0 f7./, d1
l./page ...12/, r/rc 1977.10.13 /fgs 1988.07.21/
l./b19:/, d./b40:/, i#
b19: 32<12 + 1 ;
b20: 32<12 + 2 ;
12<12 +23 ;
b21: 1<23+32<12+ 6 ;
b22: 1<23+32<12+ 9 ;
b23: 3 ;
b25: 32<12+ 5 ;
b36: 32<12+ 4 ;
b37: 8<12+15 ;
b38: 16<12+23 ;
b39: 48<12+ 1 ;
b40: 3<12+ 3 ;
#
l./page ...12a/, r/rc 1977.10.13 /fgs 1988.07.12/
l./c30:/, l./rl. w1 b39./, d15, r/a31./a20./, i/
hs. w0 i26. ; octal := true; <*in write word*>
/
l./c18:/, i/
; hex:
c32: se w3 4 ; if next delim <> sp then
jl. a22. ; goto param error;
jl. w3 c14. ; clear format list;
al w0 2 ;
hs. w0 i22. ; hex := true; <*in write address*>
hs. w0 i23. ; hex := true; <*in write final addr*>;
hs. w0 i25. ; hex := true; <*in write word*>
jl. a20. ; goto scan parameterlist1;
/, p-10
l./page ...14/, r/rc 1977.09.26 /fgs 1988.07.12/
l./g10:/, d./g11:/, i#
g10: <:integer:> , 0 , c16-d7 ; format table:
<:word:>, 0 , 0 , c16-d7 ;
<:char:>, 0 , 0 , c28-d7 ;
<:half:>, 0 , 0 , c17-d7 ;
<:abshalf:> , 0 , c29-d7 ;
<:octal:>,0 , 0 , c30-d7 ;
<:hex:>,0,0 , 0 , c32-d7 ;
<:byte:>, 0 , 0 , c17-d7 ;
<:code:>, 0 , 0 , c19-d7 ;
<:text:>, 0 , 0 , c20-d7 ;
<:bits:>, 0 , 0 , c21-d7 ;
<:words:>,0 , 0 , c23-d7 ;
g11: <:all:>,0,0 , 0 , c18-d7 ;
#, p-13
l./page ...15/, d b, i#
\f
; fgs 1988.07.12 fp utility, print, page ...15...
b28: <:s:> ;
b29: <:,xi:> ; replaces <:,ri:> in instr table in mpu
b35: <:connect out<0>:>;
e2: am -2000 ; initialize print:
rs. w1 f15.+2000 ;
am -2000 ;
rs. w2 f24.+2000 ; save top command;
am -2000 ;
rs. w3 f16.+2000 ; save fp base; save command pointer;
rl. w0 b29. ;
gg w3 2*17 ;
sl w3 60 ; if cpu ident >= 60 then
rs. w0 i24. ; replace <:,ri:> with <:,xi:> in instr.table;
al. w3 d5. ;
al w0 x3+510 ; first core := first free core;
am -2000 ;
ds. w0 f20.+2000 ; last core := first core + 510;
al w3 x3+512 ; comment: bs segment buffer;
am -2000 ;
rs. w3 f14.+2000 ; base bit group table := last core + 2;
am -2000 ;
rs. w3 f25.+2000 ; bit group point := last core + 2;
sh w3 x2-4 ; if last core + 2 >= top command then
jl. a36. ; begin
al. w1 b7. ; message(<:core size:>);
jl. w3 c12. ; goto exit fp
jl. d8. ; end;
a36: dl w0 x1+h10+h76+2;
rx. w3 f30.-2 ; exchange two first words of
rx. w0 f30. ; fp break with entries at print;
al. w0 e4. ;
ds w0 x1+h10+h76+2;
al w0 x1+h21 ;
am -2000 ;
rs. w0 f28.+2000 ; secondary out := current out;
am -2000 ;
rl. w2 f16.+2000 ; w2 := command pointer(point);
\f
; fgs 1988.07.12 fp utility, print, page ...16...
bz w1 x2 ;
se w1 6 ; if delimiter = <=> then
jl. a37. ; begin
am -2000 ;
am. (f15.+2000);
jl w3 h29-4 ; stack current input;
am -2000 ;
rl. w2 f16.+2000 ;
al w2 x2-8 ;
am -2000 ;
rl. w3 f15.+2000 ;
al w1 x3+h20 ; zone := current in;
al w0 1<2+0 ; comment: one segm. , temporary;
jl w3 x3+h28 ; connect out(zone); (=secondary output);
sn w0 0 ; if result <> 0 then
jl. d10. ; begin
al. w1 b35. ;
jl. w3 c12. ; message(<:connect out:>);
jl. d3. ; goto exit fp;
d10: am -2000 ;
rs. w1 f28.+2000 ; secondary out zone := current in;
bl w0 x1+h1+1 ;
sn w0 4 ; if -,bs and
jl. 6 ; -,mt
se w0 18 ; then
jl. a44. ; skip;
am -2000;
rl. w2 f16.+2000;
al w2 x2-8 ; w2:=name addr
am -2000 ;
am. (f15.+2000);
al w1 h54 ; w1:=lookup area
jl. w3 a65. ; prepare output
\f
; fgs 1988.07.12 fp utility, print, page ...17...
a44: am -2000 ;
rl. w2 f16.+2000 ;
a37: al w0 0 ; again:
am -2000 ;
hs. w0 i1.+2000 ;
am -2000 ;
rs. w0 f9.+2000 ;
jl. w3 c8. ; next param;
bl w1 x2 ;
sl w1 4 ; if param = <end list> then
jl. a43. ; begin
al. w1 b3. ; message(<:area:>);
jl. w3 c12. ; goto exit fp
jl. d3. ; end;
a43: am -2000 ;
rs. w2 f13.+2000 ; save pointer(area description);
bz w1 x2+1 ;
se w1 4 ; if param = integer then
jl. a66. ;
am -2000 ;
rs. w0 f27.+2000 ; current core relative := param;
am -2000 ;
rs. w0 f32.+2000 ; hwd base := param;
a66: sn. w3 (b11.) ; if next param = (point, integer) then
jl. a41. ; goto numbering;
sn. w3 (b14.) ; if next param = (point,name) then
jl. a40. ; goto segmented;
a38: bl w1 6 ; test space:
sn w1 4 ; if delimiter = space then
jl. a42. ; goto area or process name;
\f
; fgs 1988.07.12 fp utility, print, page ...18...
a39: al. w1 b5. ; syntax error:
jl. w3 c12. ; message(<:param:>);
am -2000 ;
rl. w2 f13.+2000 ; w2 := addr(area description);
jl. w3 c1. ; list parameter;
jl. a37. ; goto again;
a40: jl. w3 c8. ; segmented: next param;
se. w0 (b28.) ; if param <> <:s:> then
jl. a39. ; goto syntax error;
al w0 6 ;
am -2000 ;
hs. w0 i1.+2000 ; content := 6;
se. w3 (b11.) ; if next param <> (point,integer) then
jl. a38. ; goto test space;
a41: jl. w3 c8. ; numbering:
am -2000 ;
rs. w0 f9.+2000 ; first number := next param;
al w1 1 ;
hs. w1 i27. ; first number read in memory area :=
hs. w1 i28. ; first number read in bs area := true;
jl. a38. ; goto test space;
a42: am -2000 ; area or process name:
rs. w2 f16.+2000 ;
am -2000 ;
rl. w3 f13.+2000 ;
al w3 x3 +2 ;
jd 1<11+4 ; process description;
sn w0 0 ; if process does not exist then
jl. d11. ; goto area;
rl w2 (0) ;
se w2 0 ; if process kind <> internal then
jl. d11. ; goto area;
\f
; fgs 1988.07.12 fp utility, print, page ...19...
rl w2 0 ; proc := process descr addr;
rl w0 x2+22 ; first addr :=
wa w0 x2+98 ; proc.first logical + proc.base;
am -2000 ;
rs. w0 f27.+2000 ; current core relative := first address;
am -2000 ;
rs. w0 f32.+2000 ; hwd base := first address;
rl w1 x2+24 ; last addr :=
wa w1 x2+98 ; proc.top logical addr +
al w1 x1-2 ; proc.base - 2;
am -2000 ;
rs. w1 f8.+2000 ;
am 1 ; internal process := true;
a50: al w1 0 ; ready:
am -2000 ;
rl. w0 f32.+2000 ; w0 := current core relative; <* = first address*>
am -2000 ;
rx. w0 f9. +2000 ;
i27 = k + 1; first number read:
sn w3 x3 ; if first number read then
jl. a70. ; first number := if internal process then
se w1 0 ; first number + proc.first logical addr else
wa w0 x2+22 ; first number ;
am -2000 ; else
rx. w0 f9.+2000 ; first number :=
a70: rl w1 x2+24 ; current core relative;
al w0 0 ;
hs. w0 i17. ; blocked := false;
am -2000 ;
rl. w2 f16.+2000 ; restore command pointer;
jl. a48. ; restore command pointer; goto all1;
\f
; fgs 1988.07.12 fp utility, print, page ...20...
d11: am -2000 ; area:
am. (f13.+2000); w1 := tail := first free core;
al w3 2 ; w3 := addr(area name);
dl w1 x3+2 ;
am -2000;
ds. w1 f17.+2+2000; move name from
dl w1 x3+6 ; parameter stack
am -2000; to
ds. w1 f17.+6+2000; input description;
al. w1 d5. ;
jd 1<11+42 ; lookup entry;
sn w0 0 ; if result <> 0 then
jl. a46. ; begin
sn w0 6 ; if name format illegal then
jl. a50. ; abs core addr: goto ready;
a45: al. w1 b6. ; unknown: mess name(<:unknown);
al w2 1 ;
am -2000 ;
rs. w2 f23.+2000 ; fpresult:=1;
jl. w3 c13. ; goto exit fp
jl. d3. ; end;
\f
; fgs 1988.07.12 fp utility, print, page ...21...
a46: am -2000 ; descriptor found:
zl. w0 i1.+2000 ;
sn w0 6 ; if content <> 6 <*segmented*> then
jl. a58. ;
zl w0 x1+16 ; content :=
am -2000 ;
hs. w0 i1.+2000 ; entry tail (16);
a58: rl w2 x1+14 ; blockno := entry tail (14);
zl w0 x1+16 ;
sh w0 31 ; if content >= 32 then
jl. a67. ; begin
rl w2 0 ; blockno :=
al w2 x2-32 ; content - 32;
a67: rl w0 x1 ; end;
sl w0 0 ; if tail(0) >= 0 then
jl. a47. ; goto prepare area process;
al w3 x1+2 ; w3 := addr(document name);
dl w1 x3+2 ;
am -2000;
ds. w1 f17.+2+2000; move name from
dl w1 x3+6 ; entry tail
am -2000; to
ds. w1 f17.+6+2000; input description;
al. w1 d13. ; w1 := first free core + 10;
jd 1<11+42 ; lookup entry;
se w0 0 ; if result <> 0 then
jl. a45. ; goto unknown;
am -2000 ;
rs. w2 f31.+2000 ; blockbase := blockno;
rl w0 x1 ;
sh w0 -1 ; if entry tail.size < 0 then
jl. a46. ; goto descriptor found;
\f
; fgs 1988.07.12 fp utility, print, page ...22...
a47: am -2000 ; prepare area process:
al. w3 f17.+2000 ; prepare area process:
jd 1<11+52 ; create area process;
se w0 0 ; if result <> 0 then;
jl. d4. ; goto area alarm;
am -2000 ;
rl. w1 f11.+2000 ;
am -2000 ;
rs. w1 f5. +2000 ; to block := infinite ;
am -2000 ;
rl. w1 f31.+2000 ;
am -2000 ;
rs. w1 f4. +2000 ; from block := block base;
am -2000 ;
rs. w1 f7. +2000 ; block := blockbase;
ld w1 9 ; total := double
am -2000 ;
wa. w1 f32.+2000 ; (block base < 9 +
am -2000 ;
ds. w1 f12.+2000 ; hwd base );
am -2000 ;
bz. w0 i1. +2000 ;
i28 = k + 1; first number read:
sn w3 x3 ; if first number read
se w0 7 ; or content <> 7 then
jl. d12. ; goto start print;
al w0 0 ;
hs. w0 i17. ; blocked := false;
am -2000 ;
dl. w0 f12.+2000 ; (w3, w0) := total;
jl. w2 c25. ; setposition;
jl. w3 c26. ;
am -2000 ;
rl. w0 f10.+2000 ; get word;
am -2000 ;
rs. w0 f9. +2000 ; first number := current word;
d12: am -2000 ; start print:
rl. w2 f16.+2000 ; restore command pointer;
al w0 1 ;
hs. w0 i14. ; bs area := true;
jl. a48. ; goto all1;
\f
; fgs 1988.07.12 fp utility, print, page ...23...
; procedure prepare entry for textoutput
; w0 not used
; w1 lookup area
; w2 name addr, entry must be present
; w3 return addr
b. a2 w.
a65: ds. w1 a1. ; save w0.w1
ds. w3 a2. ; save w2.w3
al w3 x2 ; w3:=name addr
jd 1<11+42 ; lookup
bz w2 x1+16 ;
sh w2 32 ; if contents=4 or
sn w2 4 ; contents>=32
jl. 4 ; then
jl. a0. ; file:=block:=0;
rs w0 x1+12 ;
rs w0 x1+14 ;
a0: rs w0 x1+16 ; contents.entry:=0;
rs w0 x1+18 ; loadlength:=0;
dl w1 110 ;
ld w1 5 ; shortclock;
rl. w1 a1. ;
rs w0 x1+10 ;
jd 1<11+44 ; changeentry;
dl. w1 a1. ; restore w0,w1
dl. w3 a2. ; restore w2,w3
jl x3 ; return
0 ; saved w0
a1: 0 ; saved w1
0 ; saved w2
a2: 0 ; saved w3
e.
\f
; fgs 1988.07.12 fp utility, print, page ...24...
d1 = k - d0 , d5 = k, d6 = k + 512, d13 = k + 10
0 ; zero, to terminate program segment
m0 = k - h55 ; load length
m1 = e2 - h55 ; entry point
i. ; id list
e. ; end segment: print
m.rc 1988.11.21 fp utility, print
\f
; fgs 1988.07.12 fp utility, print, page ...25...
g0:g1: (:m0+511:)>9 ; segm
0,r.4
s2 ; date
0,0 ; file, block
2<12+m1 ; contents, entry
m0 ; length
d.
p.<:insertproc:>
#
f
message message text fil 20
nextfile n g
n=edit g ; message text
;
; connect output : segm < 2 + key
l./page ...1/, r/rc 1976.05.21 /fgs 1988.09.08/
l./jl. w3 h28./, l-1, r/1<1+1/1<2+0/, r/one/one temporary/, r/ on disc//
l./m.rc/, r/86.08.15/88.09.08/
f
message move text fil 21
nextfile n g
n=edit move5tx ; move text
f
message cat adm 1 text fil 22
nextfile n g
set4tx=edit g ; cat adm 1 text, set setmt clearmt entry changeentry
; assign rename permanent nextfile
;
; nye modekind abbrev.
; general text parameter allowed in set, changeentry, assign and entry
;
l./cat adm 1/, r/rc 07.04.72/fgs 1988.19.13/
l./cfversion/, r/cfversion //
l./s. a200/, r/a200/a300/
l./...08/, r/rc 76.05.31/ fgs 1988.12.20/
l./a23:/, g1/name/ shortest name/
l./a25:/, i/
a223:4<12+ 9 ; space, nearly name
a123:4<12+(:7*8+10:); space, longest name
a124:8<12+(:7*8+10:); point, longest name
a28: 4<12+4 ; space, integer
/, p-2
l./...10/, r/84.06.18/8.05.06/
l./<:mto:>/, d./<:mthl:>/, i#
<:mto:>,0 , 1<23+ 0<12+18 ; mt, high density, odd parity
<:mte:>,0 , 1<23+ 2<12+18 ; even
<:nrz:>,0 , 1<23+ 4<12+18 ; low , odd
<:nrze:> , 1<23+ 6<12+18 ; even
<:mtlh:> , 1<23+ 0<12+18 ; low speed, high , odd
<:mtll:> , 1<23+ 4<12+18 ; low
<:mthh:> , 1<23+128<12+18 ; high speed, high
<:mthl:> , 1<23+132<12+18 ; low
<:mt62:> , 1<23+ 0<12+18 ; 6250 bpi
<:mt16:> , 1<23+ 4<12+18 ; 1600
<:mt32:> , 1<23+ 8<12+18 ; 3200
<:mt08:> , 1<23+12<12+18 ; 800
#, p1
l./...12/, r/rc 22.05.72 / fgs 1988.12.20/
l./sh. w3 (a23.)/, r/a23.) /a123.)/, p-1
l./se. w0 (a23.)/, d2, i/
sn. w0 (a28.) ; if param <> space, integer
se. w3 (a29.) ; or next param <> point, integer then
jl. b13. ; goto paramerror;
/, p-3
l./...13/, r/rc 78.03.18 / fgs 1988.11.30/
l./b. c9/, r/c9/c11/
l./se. w0 (a23.)/, d, i/
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
/, l1, p-3
l./se. w0 (a23.)/, d, i/
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
/, l1, p-3
l./ds. w1 a90./, i/
ls w1 -8 ; zero last char
ls w1 8 ; of last word in name;
/, p-2
l./sn. w0 (a23.)/, d2, i/
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
jl. c10. ; goto not name else
jl. c0. ; goto test if date;
c10: sh. w0 (a25.) ; if nextsep = endsep then
/, p-5
l./sn. w0 (a23.)/, d2, i/
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
jl. c11. ; goto not name else
jl. b13. ; goto paramerror;
c11: rl. w3 c7. ; if nextsep = endsep then
/, p-5
l./c5:/, l./sl w1 2/, g/2/4/
l./...17/, r/fgs 1981.08.05/ fgs 1988.10.13/
l./c16:/, r/c16:/ /
l./se. w0 (a23.)/, d, i/
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name then
/, l1, p-3
l./se. w0 (a23.)/, d, i/
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
/, l1, p-3
l./se. w0 (a23.)/, d, i/
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
/, l1, p-3
l./...18/, r/82.12.17/88.11.30/
l./se. w0 (a23.)/, l-1, d4, i/
se w3 0 ; if count <> 0 then
jl. c16. ; examine separator;
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
jl. c16. ; goto eamine separator;
jl. w1 c21. ; test if date;
c16: ba w2 x2+1 ; examine separator:
/, l1, p-8
l./c9:/, l./sl w1 2/, g/2/4/
l./c15:/, l./se w1 10/, r/se w1 10/sh w1 9 /
l./cat adm 1, tails/, l./m./, r/84.06.18/88.12.20/
l./m. set/, r/ set/ set/
f
n=edit set4tx
; alarmen <:entry in use:> ved result 5 fra create entry ændres til
; <:entry in use or catbase illegal:> når catbase >= stdbase
l./...04/, r/82.12.17/89.07.06/
l./b46: am i46 ; /,
r#<: entry in use#<: entry in use/catalog base illegal#
l./...09/, r/82.12.17/89.07.07/
l./a46:/, r#<: entry in use#<: entry in use/catalog base illegal#
l./...13/, r/88.11.30/89.07.07/
l./c8:/, d./c6:/, i#
c8: al. w3 a91. ; rest of tail:
rs. w3 c7. ; pointer:=name table addr;
rl. w2 a2. ;
ba w2 x2+1 ;
rl w0 x2 ; if nextparam=name
sh. w0 (a123.) ; if param > 4 < 12 + longest name
sh. w0 (a223.) ; or param < 4 < 12 + shortest name
jl. c10. ; goto not name else
jl. c0. ; goto test if date;
c10: sh. w0 (a25.) ; if nextsep = endsep then
jl. c9. ; goto set shortclock;
c6: jl. w3 b27. ; next tail: next comp. param;
#, p1
l./c5:/, d./jl. b80./, i#
c5: sl w1 0 ; integer doc.name:
sl w1 4 ; if doc.name < 0 or >= 4
jl. b13. ; then goto paramerror;
rs. w1 a88. ; store parameter;
jl. c8. ; goto rest of tail;
c9: dl w1 110 ; set shortclock:
ld w1 5 ;
rs. w0 a91. ; save shortclock
jl. b80. ; goto set entry;
#, p1
l./a135: 0/, d b, i#
a135: 0 ;
a137: 1<23+4; bs-code
a138: 1<23 ; sign bit
\f
;fgs 1989.07.06 cat adm 1, tails
i.
m.rc 1989.07.06 fp utility, sys 3, cat adm 1
m. set , setmt , clearmt , entry , changeentry,
m. assign, rename, permanent, nextfile
e.
w.
g0: (:g2+511:)>9 ; entry set
0,r.4 ; name
s2 ; date
0,r.2 ;
2<12+g7-g3 ; cont, entry
g2 ; load length
1<23+4 ; entry setmt
0, r.4 ; name
s2 ; date
0, 0 ;
2<12+g14-g3 ; cont, entry
g2 ; load length
1<23+4 ; entry clearmt
0, r.4 ; name
s2 ; date
0,0 ;
2<12+g15-g3 ; cont, entry
g2 ; load length
1<23+4 ; entry entry
0,r.4 ; name
s2 ; date
0,r.2 ;
2<12+g8-g3 ; cont, entry
g2 ; load length
1<23+4 ; entry changeentry
0, r.4 ; name
s2 ; date
0, r.2 ;
2<12+g6-g3 ; cont, entry
g2 ; load length
1<23+4 ; entry assign
0, r.4 ; name
s2 ; date
0,0 ;
2<12+g5-g3 ; cont, entry
g2 ; load length
1<23+4 ; entry rename
0,r.4 ; name
s2 ; date
0,r.2 ;
2<12+g9-g3 ; cont, entry
g2 ; load length
1<23+4 ; entry permanent
0,r.4 ; name
s2 ; date
0,0 ;
2<12+g10-g3 ; cont, entry
g2 ; load length
g1: 1<23+4 ; entry nextfile
0,r.4 ; name
s2 ; date
0,r.2 ;
2<12+g11-g3 ; cont, entry
g2 ; load length
\f
d.
p.<:insertproc:>
l.
e.
#
f
message cat adm 2 text fil 23
nextfile n g
n=edit g ; cat adm 2 text, lookup search clear scope
;
; nye modekind abbrev.
; filters as search parameters
; nyt program delete
; base interval parameter til search og delete
; connect output : segm < 2 + key
;
l./cat adm 2/, r/adm 2/adm 2 ...0.../
l./lookup, search/, r/scope/delete, scope/
l./lookup search/, r/scope/delete scope/
l./...06/, r/rc 1976.05.25 / fgs 1988.08.04/
l./b9:/,
l./ds w1 x3+2/, d, i/
am. a50. ;
ds w1 +2 ; and save it in work name;
/, p1
l./ds w1 x3+6/, d, i/
am. a50. ;
ds w1 +6 ; and save it in work name;
/, p1
l./jl. b50./, i/
al. w0 a50. ; w0 := addr (work name);
/, p1
l./al w0 1<1+1/, r/1<1+1/1<2+0/
l./...08/, r/rc 76.05.25 / fgs 1988.08.02/
l./b15:/, l1, i/
sh w1 -2 ; if scope illegal, in max then
al w1 -2 ; scope := illegal, in std;
/, p-2
l./...10/, i#
\f
; fgs 1988.08.02 fp utility, system 3, cat adm 2 ...9a...
;procedure remove entry.
;
;removes the entry addressed by w2
;and returns to link + 2 if removed, to link if not removed
;at return the link b16 is different from zero.
;
;w0 destroyed
;w1 unchanged
;w2 addr of entry unchanged
;w3 link destroyed
;
b. j20 w.
j0: 0 ; saved w0
b66: ds. w3 b16. ; entry: save link, entry;
al w3 x2+6 ; w3 := entry.name;
jd 1<11+48 ; remove entry;
sn w0 0 ; if removed then
jl. j6. ; goto link + 2;
rs. w0 j0. ; save w0;
jl. w3 b26. ; outtext(<:***<prog> <scope>:>,
rl. w0 j0. ; restore w0;
se w0 2 ; if catalog error, document not ready then
jl. j1. ; begin
jl. w3 b43. ; outtext (<:bs device not ready<10>:>);
jl. j5. ; end else to link;
j1: jl. w3 b33. ; outtext (<: :>);
dl. w3 b16. ; restore entry;
al w0 x2+6 ; name := entry.name;
jl. w3 b30. ; outtext (name);
rl. w0 j0. ; restore w0;
se w0 3 ; if not found then
jl. j2. ; begin
jl. w3 b37. ; outtext (<: unknown<10>:>);
jl. j5. ; end else
j2: se w0 4 ; if entry protected then
jl. j3. ; begin
jl. w3 b47. ; outtext (<: entry protected<10>:>);
jl. j5. ; end else
j3: se w0 5 ; if used by another then
jl. j4. ; begin
jl. w3 b46. ; outtext(<: entry in use<10>:>);
jl. j5. ; end else
j4: jl. w3 b45. ; outtext (<: catalog error<10>:>);
j5: jl. (b16.) ; goto link;
j6: am. (b16.) ; return to link + 2:
jl +2 ;
e.
#
l./...11/, r/rc 16.02.72 / fgs 1988.08.02/
l./-2/, r/-2/-4/, l1, i/
; -2: illegal scope, interval contained in std, equals interval in scope
/, p1
l./b. j13/, r/j13/j14/
l./...12/, r/rc 11.02.72 / fgs 1988.08.02/
l./j4:/, i/
/
l./j13:/, l-1, d, i/
al w1 x1+1 ; else
sn. w0 (a12.) ; if int.low <> int in scope.low and
se. w1 (a13.) ; int.up <> int in scope.up then
jl. j11. ; goto inside max else
jl. j14. ; goto inside std, equals int in scope;
/, p1
l./j11:/, r/-2/-4/, i/
j14: am 2 ; inside std, equals int in scope
/, p1
l./...16/, r/82.11.24/88.07.10/
l./a102:/, l1, i/
a104: 0 ; addr of parameter after <scope>).<device>) in search
a105: 0 ; addr of catalog entry in filter algorithm in search
/, p-2
l./a29:/, l1, i/
a30: 4<12+ 4 ; space,integer
a50: 0, r.8 ; work name used in output entry
/, p-1
l./...18/, i#
; dh 1987.05.06 fp system, system 3, cat adm 2 ...17a...
b. a20, b3, c1, d5 w.
;This algorithm enables search to filter the output of catalog entries
;found according to a given scope specification. The filter works on
;the entry name and the document name of an entry.
;
;Syntax (augments):
;------------------
;( )1 ( )*
;(<out file> = ) search <scope spec> (<filter>)
;( )0 ( )0
;
; ( )*
;<filter> ::= <substring>(.<substring>)
; ( )0
;
; ( <generalized name> )
;<substring> ::= ( <name> )
; (<apostrophized name>)
;
;Function:
;---------
; The main catalog is scanned, and a subset of it is listed with an
;output format as for lookup. If an outfile is specified, the list of
;catalog entries is printed on that file, otherwise current output is
;used. Messages from search are always printed on current output.
; If no filters are given, all entries from the main catalog accor-
;ding to the scope spec (see Scope specification) are listed, other-
;wise, the set of catalog entries is further delimited by means of
;filters (see Filter specification below).
;
;Filter specification:
;---------------------
; A filter consists of one or more substrings concatenated by period.
;If a list of filters exists, an entry selected for listing will only
;be listed if either its name or its document name contain all the sub-
;strings of at least one of the filters. The order of the substrings
;in a filter is irrellevant.
; Thus, in a possible list of filters, you may consider space as "or"
;and period as "and", where the precedence of "and" and "or" is as in
;Algol.
\f
; dh 87.05.07 fp system, system 3, cat adm 2 ...17b...
;requirements:
; w0 w1 w2 w3 a104 a105
;
;entry: irr. irr. irr. return item after catalog
; scope spec entry
;
;exit: all registers and variables unchanged.
;
; the procedure returns to return+0 in case of failure
; and to return+2 in case of success.
;
b27: ds. w3 b3. ; save registers
rs. w2 a105. ; save addr entry;
rl. w3 a104. ;
el w2 x3 ; if item after scope spec = end command
sh w2 2 ; then goto letitpass1;
jl. a11. ;
ds. w1 b2. ;
rl. w2 a105. ; save addr entry;
al w2 x2+6 ; name in entry := entry name;
c1: al w3 x3+2 ; repeat <* entry- and document-name *>
ds. w3 d1. ; text part(item) := first item addr + 2;
al w3 10 ; x := 10;
; string := name in entry;
a0: rs. w3 d2. ;
al w1 x3 ; repeat
jl. w3 c0. ; namelength := x;
rl. w3 d2. ; l := takechar(x, string);
al w3 x3-1 ; x := namelength - 1;
sn w1 0 ; until l <> 0;
jl. a0. ;
a1: ; repeat <* all possibillities of filter *>
\f
; dh 87.05.05 fp system, system 3, cat adm 2 ...17c...
;a1: ; repeat <* items in a filter *>
rl. w0 d2. ; j := namelength; <* charcount in an entry *>
a2: rs. w0 d3. ; repeat <* stepping backward through the
; name in the entry *>
al w3 0 ;
jl. a4. ; for i := 0,
a3: rl. w3 d4. ; <*i controls pos in an item *>
al w3 x3+1 ; i+1 while l = k do
se. w1 (d5.) ; begin
jl. a5. ;
a4: rs. w3 d4. ;
am. (d3.) ; k := takechar
al w1 x3 ; (j+i, name in entry);
rl. w2 d0. ;
jl. w3 c0. ;
rs. w1 d5. ;
rl. w1 d4. ; l := takechar
rl. w2 d1. ; (i, item);
jl. w3 c0. ;
sn w1 0 ; if l = 0
jl. a6. ; then goto found;
jl. a3. ; end while loop;
a5: rl. w0 d3. ;
es. w0 1 ; j := j - 1;
sl w0 0 ; until j < 0 <* end backward stepping *>;
jl. a2. ; comment when the loop is exhausted, l<>0;
a6: ;found:
ba w2 x2-1 ; nopass := l <> 0; <* variable kept in w1 *>
rs. w2 d1. ; item := next item;
el w0 x2-2 ; sep := item separator;
se w0 8 ; until sep (item) <> '.'
jl. a7. ;
el w0 x2-1 ; or length (item) = 4 <*integer*>
sh w0 4 ;
jl. a12. ; or nopass <* end items in a filter *>;
al w0 8 ;
sn w1 0 ; comment hereafter either all substrings in a
jl. a1. ; filter have suceeded, or a filter failed;
\f
; dh 87.05.07 fp system, system 3, cat adm 2 ...17d...
a7: sn w1 0 ; if -,nopass <* i.e. a filter suceeded *>
jl. a10. ; then goto letitpass;
a8: se w0 8 ; comment a filter failed, therfore: ;
jl. a9. ; while sep = '.' do
a12: ba w2 x2-1 ; begin
el w0 x2-2 ; item := next item; sep := item separator;
jl. a8. ; end;
a9: rs. w2 d1. ; comment we may now examine the next filter;
sl w0 4 ; until sep = end command;
jl. a1. ; comment all filters have failed on this name;
rl. w2 a105. ; name in entry := document name;
al w2 x2+16 ; item := item after scope spec;
rl. w3 a104. ;
se. w2 (d0.) ; until document name tested once before;
jl. c1. ; comment the names have been tested with all fltrs;
dl. w1 b2. ;failure:
dl. w3 b3. ; restore registers;
jl x3 ; return failure;
a10: dl. w1 b2. ;letitpass:
a11: dl. w3 b3. ;letitpass1: restore registers;
jl x3+2 ; return success;
\f
; dh 87.05.05 fp system, system 3, cat adm 2 ...17e...
c0: ;subprocedure takechar(pos, string);
; call: w0: -; w1: pos; w2: string; w3: return
al w0 0 ; exit: w0: -; w1: char; w2: unch; w3: unch
wd. w1 b0. ; addr := pos // 3;
am x1 ; subpos := pos mod 3;
am x1 ;
rl w1 x2 ; substring := word(2*addr + string);
ls w0 3 ;
am (0) ; char := substring shift(subpos*8 -16)
ls w1 -16 ; extract 7;
la. w1 b1. ;
jl x3 ; return;
b0: 3 ; constant 3 <* chars per word *>
b1: 8.177 ; constant: last 7 bits;
0, b2: 0, 0, b3: 0 ; room for registers;
d0: 0 ; addr of name in an entry;
d1: 0 ; addr of text part of an item;
d2: 0 ; namelength, i.e. length of name part in an entry
d3: 0 ; var: j <* stepping through name in an entry *>
d4: 0 ; var: i <* stepping through an item *>
d5: 0 ; var: k <* char from an entry *>
e. ; end block
#
l./...18/, l./a62:/, l1, i/
i0: jl. b0. ; stepping stone:
i2: jl. b2. ; -
i3: jl. b3. ; -
i4: jl. b4. ; -
/, p-4
l./...19/, r/84.06.18/88.05.06/
l./<:mtlh:>/, d./<:mthl:>/, i#
<:mt62:> , 1<23+ 0<12+18; mt, low speed, 6250 bpi , odd parity
<:mte:>,0 , 1<23+ 2<12+18; , - - , high density, even -
<:mt16:> , 1<23+ 4<12+18; , - - , 1600 bpi , odd -
<:nrze:> , 1<23+ 6<12+18; , - - , low density, even -
<:mt32:> , 1<23+ 8<12+18; , - - , 3200 bpi , odd -
<:mt08:> , 1<23+ 12<12+18; , - - , 800 bpi , - -
<:mthh:> , 1<23+128<12+18; , high - , high density, odd -
<:mthl:> , 1<23+132<12+18; , - - , low - , - -
#, p1
l./...22/, r/rc 78.04.11 / fgs 1988.07.08/
l./c3:/, l./jl. w3 b15./, i/
jl. w3 b27. ; test filters;
jl. c4. ; if failure then goto step entry;
/, p-2
l./b64:/, i#
\f
; fgs 1988.12.19 fp utility, system 3, cat adm 2 ...23...
;the program delete
b. c6 w.
g7: jl. w1 b0. ; start: initialize program;
jl. w3 b8. ; if left side then connect;
rs. w1 a16. ; save output zone address;
jl. w3 b22. ; read scope parameter;
sn w3 8 ; if scope = system then
jl. b14. ; goto scope error;
sl w3 10 ; if scope=own
jl. c5. ; then goto change criteria;
c1: jl. w3 b17. ; prepare cat. scan;
jl. w3 b19. ; start cat. scan;
c2: jl. w3 b23. ; check entry: find entry scope;
c3: se. w1 (a14.) ; if entry(scope) <> actual
jl. c4. ; then goto step entry;
jl. w3 b24. ; test bs device spec.;
jl. w3 b27. ; test filters;
jl. c4. ; if failure then goto step entry;
jl. w3 b15. ; ok: output entry;
dl w1 x2+4 ; interval := entry.interval;
al. w3 a15. ; w3 := addr <::>; <*own process*>
jd 1<11+72 ; set catbase;
jl. w3 b66. ; remove entry;
jl. c0. ; if not removed then goto reset catbase;
c0: jl. w3 i3. ; reset catbase;
c4: jl. w3 b21. ; step entry: next entry;
jl. c2. ; more in buf: goto check entry;
jl. w3 b20. ; buf empty: input cat. segments;
jl. c2. ; more in cat: goto check entry;
rl. w0 b16. ; end search:
se w0 0 ; if some output
jl. b2. ; then goto end program;
jl. w3 b26. ; error text:
jl. w3 b40. ; outtext(***<prog.name> <scope>
jl. b2. ; no entries found); goto end prog;
c5: rl. w0 c6. ; change criteria:
rs. w0 c3. ; change crit. to: if entry
jl. c1. ; not visible ;
c6: sl w1 8 ; new instruction
e. ; end program delete
\f
; fgs 1988.07.08 fp utility, system 3, cat adm 2 ...24...
#
l1,
l./...22a/, r/22a/25/
l./...22b/, r/22b/26/
l./...22c/, r/22c/27/
l./...23/ , r/23/28/
l./a95=g4/, l1, i/
jl. b11. ; stepping stone for b11:
b11 = k - 2 ;
jl. b14. ; stepping stone for b14:
b14 = k - 2 ;
jl. b26. ; stepping stone for b26:
b26 = k - 2 ;
/, p-3
l./...24/, r/rc 28.02.72 / fgs 1988.07.10/, r/24/29/
l./;a12-a13/,
l-1, r/temp/basepair temp/
l1, r/stand/base stand/
l1, r/0/-2 0/
l./b. j12/, r/j12/j20/
l./b22:/, l2, r/b2./i2./
l2, i/
al w3 x2+10 ;
rs. w3 a104. ; save addr param after <scope>;
/, p-2
l./jl. b14./, r/b14./j13./, r/scope error/maybe interval/
l./ls w3 -2/, i/
\f
; fgs 1988.07.08 fp utility, system 3, cat adm 2 ...30...
/
l./j5:/, d, i/
j5: rl. w0 (a104.) ; look for bs device spec:
/, p1
l./...25/, r/rc 10.02.72 / fgs 1988.07.10/, r/25/31/
l./sl. w0 (a29.)/, i/
al w3 x2+10 ;
rs. w3 a104. ; save addr param after <scope>.<device>;
/, p-2
l./...26/, r/rc 15.02.72 / fgs 1988.07.10/, r/26/32/
l./jl. b2./, r/b2./i2./
l./e. ;end procedure read scope parameter/, i/
j13: se. w0 (a30.) ; if del, kind <> space, integer then
jl. b14. ; goto scope error;
rl w1 x2+2 ; int in scope.low := lower :=
rs. w1 a12. ; param;
jl. w3 b11. ; next param;
jl. i2. ; if end list then end program;
se. w0 (a29.) ; if del, kind <> point, integer then
jl. b14. ; goto scope error;
rl w1 x2+2 ; int in scope.up := upper :=
rs. w1 a13. ; param;
al w3 x2+4 ;
rs. w3 a104. ; save addr param after <interval>;
rl. w0 a12. ;
al w1 x1+1 ;
sl w0 x1 ; if lower > upper then
jl. b14. ; goto scope error;
sh. w0 (a6.) ; if lower > std.lower
sh. w1 (a7.) ; or upper < std.upper then
jl. j14. ; goto check contained in std;
jl. b14. ; else
; goto scope error;
j14: al w1 x1-2 ; check contained in std:
sl. w0 (a6.) ; if lower < std.lower
sl. w1 (a7.) ; or upper > std.upper then
jl. b14. ; goto scope error;
al w3 -2 ;
rs. w3 a14. ; save value;
jl. j5. ; goto look for bs dev. spec;
/
l./;call error:/, i/
\f
; fgs 1988.07.08 fp utility, system 3, cat adm 2 ...33...
/
l./jl. b2./, r/b2./i2./
l./jl. b2./, r/b2./i2./
l./ ...27/, r/rc 78.04.10 / fgs 1988.07.10/, r/27/34/
l./jl. w1 b0/, r/b0./i0./
l./jl. b2./, r/b2./i2./
l./jl. w3 b4./, r/b4./i4./
l./c3:/, d./jl. c0./, i/
c3: jl. w3 b66. ; remove entry;
jl. c0. ; if not removed then goto set catbase;
jl. c1. ; if removed then goto next clear ;
/, p-3
l./...28/, r/82.11.24/88.07.10/, r/28/35/
l./jl. w3 b3./, r/b3/i3/
l./jl. w3 b4./, r/b4./i4./
l./...29/, r/29/36/
l./sl w3 8/, r/if/or/, i/
sl w3 0 ; if scope < 0
/, p1
l./c5:/, d, i/
c5: am -2000 ; next scope:
jl. w3 b11.+2000 ; next param;
/, p-3
l./...30/, r/30/37/
l./...31/, r/87.03.13/88.07.10/, r/31/38/
l./jl. w3 b3./, r/b3./i3./
l./jl. w3 b3./, r/b3./i3./
l./am -2048/, d
r/b3./i3./, r/+2048/ /
l./...32/, r/rc 79.08.30 / fgs 1988.07.10/, r/32/39/
l./am -2048/, d
r/b3./i3./, r/+2048/ /
l./cat adm 2 tails/, l./rc 19/, r/87.03.13/88.12.19/, r/m.rc/m. rc/
l./m. look/, r/m. look/m. look/, r/clear/clear,delete/
l./g0:/, l-1, d./<:insertproc/, i/
w.
g0: (:g2+511:) > 9 ; no of segments
0,r.4 ;
s2 ; month year
0,r.2 ;
2<12+g4-g3 ; entry lookup
g2 ;
1<23+4 ; kind = bs
0,r.4 ;
s2 ; month year
0,r.2 ;
2<12+g5-g3 ; entry search
g2 ;
1<23+4 ; kind = bs
0,r.4 ;
s2 ; month year
0,r.2 ;
2<12+g6-g3 ; entry clear
g2 ;
1<23+4 ; kind = bs
0,r.4 ;
s2 ; month year
0,r.2 ;
2<12+g7-g3 ; entry delete
g2 ;
g1: 1<23+4 ; kind = bs
0,r.4 ;
s2 ; month year
0,r.2 ;
2<12+g10-g3 ; entry scope
g2 ;
d.
p.<:insertproc:>
/
f
message backfile text fil 24
nextfile n g
n=edit g ; backfile text
f
message copy skip text fil 25
nextfile n g
n=edit g
;
; connect output : seg < 2 + key
;
l./; init copy/, l./jl.w3 h28./, l-1, r/1<1+1/1<2+0/
l./m.rc/, r/78.04.17/88.09.08/
f
message base text fil 26
nextfile n g
n=edit base4tx ; base
f
message job text fil 27
nextfile n g
n=edit g
; connect output : segm < 2 + key
;
l./page 1/, r/rc 26.10.70/fgs 1988.09.08/
l./jl. w3 h28./, l-1, r/1<1+1/1<2+0/
l./m.rc/, r/07.02.74/88.09.08/
f
message claim text fil 28
nextfile n g
n=edit g
;
; connect output : segm < 2 + key
; claim <proc> ...
;
l./claim ...1/, r/85.03.13/89.01.10/
l./s. a26/, r/a26, b38/a99, b99/, r/d2/d9/
l./; variables/, i/
\f
; fgs 1989.01.10 claim ...1a...
/
l./b0:/, i/
b40: 0 ; process description address
b41: 0, r.4; process name
b49: 0 ; saved item adress
b50: 0 ;
b51: 0 ; save item head, address of head after <:all:>
/, l1, p-2
l./b21:/, r/entr/entr./
l./b22:/, r/segm/segm./
l./b24:/, r/***/<10>***/, r/<0>/param <0>/
l./b28:/, r/<10>/ /, r/area/area :/
l./b29:/, r/ buf/ buf :/
l./b30:/, r/ size/ size :/
l./b35:/, r/<:: :>/<: : <0>:>/
l./b38:/, r/ first core/ first :/, l1, i/
b39: <:<10>name : <0>:>
b42: <:area<0>:>
b43: <:buf<0>:>
b44: <:size<0>:>
b45: <:first<0>:>
b46: <:<32><32><32>:>
b47: <:<32><32><0>:>
b48: <:all:>
b52: 4<12 + 10
/, p-1
l./claim ...2/, d./a5:/, d./jl. a2./, i#
\f
; fgs 1989.01.10 claim ...2...
; program start:
; if a leftside is specified in the program call,
; the current input zone is stacked and used for
; secondary output.
a0: al w0 x3 ; save w3;
rs. w1 b8. ; save fpstart;
al. w1 h19. ;
jl. w3 h79. ; terminate prog zone
al w3 (0) ;
am. (h16.) ;
zl w1 27 ; save own process.area
rs. w1 b17. ; before connect
rl w0 x3 ; start: w0 := item head of program name;
el w2 0 ; w2 := separator;
se w2 6 ; if separator = equal then
jl. a1. ; begin
jl. w3 h29.-4 ; stack current input;
rl. w2 h8. ; w2 := outfile name;
al w2 x2+2 ;
al w0 1<2+0 ; comment: connect 1 segm. temporary
jl. w3 h28. ; connect output(w0, w1, w2);
se w0 0 ; if connect trouble then
jl. a7. ; error (<:connect output:>);
am h20-h21; outputzone := current input;
a1: al. w2 h21. ; end
rs. w2 b0. ; else outputzone := current output;
rl. w1 h16. ; process descr addr :=
rs. w1 b40. ; own process description addr;
dl w0 x1+4 ; move
lo. w3 b46. ; name of process
lo. w0 b46. ; or
ds w0. b41.+2 ; spaces
dl w0 x1+8 ; to
lo. w3 b46. ;
lo. w0 b47. ;
ds. w0 b41.+6 ; process name;
jl. w3 d1. ; next param;
am ; comment: skip <end param> action;
rs. w1 b49. ; saved item address := item address;
\f
; fgs 1989.01.10 claim ...3...
; comment: at this point the register contents are:
; w0 == item head
; w1 == item address
; w2 == irrellevant
; w3 == irrellevant
a2: ds. w1 b9. ; next parameter: save w0w1;
al w2 13 ;
rs. w2 b1. ; keymask := all scopes;
al w2 -1 ;
rs. w2 b2. ; devicename := all devices;
el w2 0 ;
sh w2 3 ; if separator = <end param> then
jl. a27. ; goto not internal proc;
zl w2 1 ;
se w2 10 ; if item kind <> <name> then
jl. a5. ; goto paramerror
el w2 0 ;
se w2 4 ; if separator = 'sp' then
jl. a27. ; begin <*maybe internal process*>
ea w1 x1+1 ; get next separator;
el w2 x1 ;
dl. w1 b9. ; restore w0w1;
sl w2 5 ; if next separator <> 'sp' and <> end param then
jl. a27. ; goto not internal process;
jl. w3 d4. ; get next internal process;
jl. a50. ; if no success then goto check item name;
rs. w1 b49. ; saved item address := item address;
rs. w3 b40. ; process descr addr := w0;
dl w1 x3+4 ; move
lo. w0 b46. ; process name
lo. w1 b46. ; or
ds. w1 b41.+2 ; spaces
dl w1 x3+8 ; to
lo. w0 b46. ;
lo. w1 b47. ;
ds. w1 b41.+6 ; process name;
jl. w3 d1. ; next param;
am 0 ; ignore end param list;
ds. w1 b9. ; save new w0w1;
al w3 1 ; new process :=
hs. w3 b6. ; true;
jl. a27. ; end <*maybe internal process*>;
; goto internal process;
a50: rl. w1 b49. ; check if item = <:all:>:
rl w0 x1+2 ;
se. w0 (b48.) ; if item.firat word = <:all:> then
jl. a27. ; begin
dl. w1 b51. ; get saved item head. address of head after <:all:>;
jl. a2. ; goto next parameter;
\f
; fgs 1989.01.10 claim ...3a...
a27: al w3 1 ; not internal process:
b6=k+1; new process
se w3 1 ; if not new process then
jl. a3. ; goto on with param;
rl. w1 b0. ;
al. w0 b39. ;
jl. w3 h31. ; writetext (<:<10>process name : :>);
al. w0 b41. ;
jl. w3 h31. ; writetext (process name);
al. w0 b28. ;
jl. w3 h31. ; writetext(<:area:>);
rl. w2 b40. ; area := if own process then
zl w0 x2+27 ; own process.area
sn. w2 (h16.) ; else
rl. w0 b17. ; process.area;
jl. w3 h32. ; writeinteger(area);
32<12+4 ;
al. w0 b29. ;
jl. w3 h31. ; writetext(<:buf.>);
am. (b40.) ;
zl w0 26 ;
jl. w3 h32. ; writeinteger(buf);
32<12+4 ;
al. w0 b30. ;
jl. w3 h31. ; writetext(<:size:>);
rl. w3 b40. ;
rl w0 x3+24 ;
ws w0 x3+22 ;
jl. w3 h32. ; writeinteger(size);
32<12+8 ;
al. w0 b38. ;
jl. w3 h31. ; writetext(<:first address:>);
am. (b40.) ;
rl w0 22 ;
jl. w3 h32. ; writeinteger(first address);
32<12+8 ;
al w2 0 ; new process :=
hs. w2 b6. ; false;
dl. w1 b9. ; restore w0w1;
el w2 0 ;
sh w2 3 ; if separator = <end param> then
jl. a8. ; goto search;
\f
; fgs 1989.01.10 claim ...3b...
a3: dl. w1 b9. ; on with param: restore w0w1;
a33: el w2 0 ; more param:
sh w2 3 ; if separator = <end param> then
jl. a6. ; goto terminate program;
zl w2 1 ;
se w2 10 ; if item kind <> <name> then
jl. a5. ; goto paramerror
ea w1 x1+1 ; get next item;
el w2 x1 ;
dl. w1 b9. ; restore (item);
sn w2 8 ; if next separator = '.' then
jl. a34. ; goto treat param;
el w2 0 ;
se w2 4 ; if separator <> 'sp' then
jl. a34. ; goto treat param;
jl. w3 d4. ; check internal process;
jl. a34. ; if no success then goto treat param;
jl. a8. ; if success then goto start search;
a34: rl. w3 b1. ; treat param:
rl w2 x1+2 ; w3:=
sn. w2 (b26.+2); if param=<:key:>
al w3 -1 ; then -1 else
sn. w2 (b31.+2); if param=<:temp:>
al w3 1 ; then 1 else
sn. w2 (b32.+2); if param=<:login:>
al w3 4 ; then 4 else
sn. w2 (b33.+2); if param=<:perm:>
al w3 8 ; then 8 else keymask;
sn. w3 (b1.) ; if w3 = keymask then
jl. a18. ; goto move docname;
rs. w3 b1. ; keymask := w3;
jl. a4. ; goto next param;
a18: dl w3 x1+4 ; move parametername to devicename;
ds. w3 b3. ;
dl w3 x1+8 ;
ds. w3 b5. ;
a4: jl. w3 d1. ; next param:
jl. a8. ; if param = <end param> then goto start search;
el w2 0 ; if separator <> <point> then
se w2 8 ; goto start search;
jl. a8. ;
ds. w1 b9. ; store (item);
jl. a33. ; goto more param;
a5: jl. w3 d2. ; paramerror: out error param;
jl. w3 d1. ; next param;
am ; comment: skip end param action;
al w2 1 ; succes := false;
hs. w2 b7. ;
jl. a2. ; goto next parameter;
#
l./...3a/, r/3a/3c/
l./a6:/, d3
r/ rl./a6: rl./
l./se. w1 h20./, i/
al w2 10 ;
jl. w3 h26. ; outchar ('nl');
/, p-2
l./rl. w3 h8./, g/./ /, i/
am. (b8.) ;
/, p1
l./jd 1<11+42/, l1, i/
al w2 x1 ; save w1;
dl w1 110 ;
ld w1 5 ; w0 := shortclock;
al w1 x2 ; restore w1;
rs w0 x1+10 ; tail.shortclock := w0;
/, p-5
l./jl. h7./, g/./ /, i/
am. (b8.) ;
/, p1
l./rl. w3 h8./, g/./ /, i/
am. (b8.) ;
/, p1
l./...4/, r/82.11.24/89.01.10/
l./al w1 1/, d1
l./...4a/, r/85.03.15/89.01.10/
l./h16/, l-1, d1, i/
wa. w1 b40. ; proc descr addr ;
/, p-1
l./...5/, r/85.03.13/89.01.10/
l./h16/, l-1, d1, i/
wa. w1 b40. ; proc descr addr ;
/, p-1
l./...6/, r/rc 19.06.1971 /fgs 1989.01.10/
l./a12:/, i/
/
l./dl. w1 b9./, d, i/
rl. w1 b0. ;
al w2 10 ;
jl. w3 h26. ; outchar ('nl');
rl. w1 b49. ;
rl w0 x1+2 ;
se. w0 (b48.) ; if saved item.word1 = <:all:> then
jl. a36. ; begin <*reset item address to point to <:all:>*>
jl. w3 d3. ; reset item address;
ds. w1 b51. ; save latest parameter address;
rl. w0 b52. ; w0 := 4 < 12 + 10;
rl. w1 b49. ; w1 := save item address;
ds. w1 b9. ; save (item);
; end;
a36: dl. w1 b9. ; restore (item);
/, p-4
l./a13:/, d3, i/
a13: rl. w2 b2. ; end of devices:
se w2 -1 ; if empty paramname then
jl. a35. ; begin
rl. w1 b0. ; w1 := outputzone;
al w2 10 ;
jl. w3 h26. ; outchar ('nl');
rl. w1 b49. ;
rl w0 x1+2 ;
se. w0 (b48.) ; if saved item.word1 = <:all:> then
jl. a37. ; begin <*reset item address to point to <:all:>*>
jl. w3 d3. ; reset item address;
ds. w1 b51. ; save latest parameter address;
rl. w0 b52. ; w0 := 4 < 12 + 10;
rl. w1 b49. ; w1 := save item address;
ds. w1 b9. ; save (item);
; end;
a37: dl. w1 b9. ; restore (item);
jl. a2. ; goto next param;
a35: ; end;
/, p-4
l./al w2 1/, d, i/
dl. w1 b2.+2 ; device not found:
sn. w0 (b42.) ;
se. w1 (b42.+2); if name is <:area:> then
jl. a28. ;
jl. a32. ; goto ok;
a28: sn. w0 (b43.) ;
se. w1 (b43.+2); if name is <:buf:> then
jl. a29. ;
jl. a32. ; goto ok;
a29: sn. w0 (b44.) ;
se. w1 (b44.+2); if name is <:size:> then
jl. a30. ;
jl. a32. ; goto ok;
a30: sn. w0 (b45.) ;
se. w1 (b45.+2); if name is <:first:> then
jl. a31. ;
jl. a32. ; goto ok;
a31: al w2 1 ; failure:
/, p-2
l./dl. w1 b9./, d, i/
a32: rl. w1 b49. ;
rl w0 x1+2 ;
se. w0 (b48.) ; if saved item.word1 = <:all:> then
jl. a38. ; begin <*reset item address to point to <:all:>*>
jl. w3 d3. ; reset item address;
ds. w1 b51. ; save latest parameter address;
rl. w0 b52. ; w0 := 4 < 12 + 10;
rl. w1 b49. ; w1 := save item address;
ds. w1 b9. ; save (item);
; end;
a38: dl. w1 b9. ; restore (item);
/
l./d2 = k+2/, l1, i/
d3 = k+4 ; entry to procedure reset param pointer
/, p-2
l./...7/, r/rc 19.06.1971 /fgs 1989.01.10/
l./a9 , b7/, r/a9 /a10/
l./a0:/, i/
; procedure reset param pointer;
; the procedure resets the param pointer in b2 by the value of
; w1 at call and returns the old value of item head and address in w0, w1.
;
; w0 == old value of item head
; w1 == old value of item address
; w2 == unchanged
; w3 == unchanged
;
; return is made to w3.
a10: rx. w1 b2. ; swop address of item head;
rl w0 x1 ;
jl x3 ; return;
/, p-3
l./...8/, r/rc 19.06.1971 /fgs 1989.01.10/
l./b4:/, r/***/<10>***/
l./d0 = k ; length of program/, i#
\f
; fgs 1989.01.10 claim ...9...
; the following pages contain the code for fetching the
; next internal process description address which matches the name
; pointed to by x1+2
; if the name pointed to by x1+2 is <:all:>, the procedure gets the
; next used internal procedure description address and leaves the
; variable 'next internal in nametable' to point at the next procedure
; description.
;
; at entry and return the contents of w0, w1, w2 and w3 are :
;
; w0 : - unchanged
; w1 : name address -2 unchanged
; w2 : - unchanged
; w3 : link proc descr address
;
; return to :
; no success : link
; success : link +2
b. a9 , b9 ; begin block get next internal
w.
d4: ds. w1 b1. ; save registers
ds. w3 b3. ;
rl w2 x1+2 ;
sn. w2 (b48.) ; if name.param.word1 = <:all:> then
al w1 0 ; single process := false;
hs. w1 b6. ; else
hs. w1 b7. ; single process := true;
hs. w1 b8. ;
se w1 0 ; if not single process then
jl. a0. ; begin <*set the next index*>
rl. w2 b4. ; index :=
sn w2 0 ; if next in nametable = 0 then
a0: rl w2 78 ; first in nametable else
; else
; next in nametable;
; end else
; index := first in nametable;
a1: rl w3 x2 ; next process:
dl w0 x3+4 ;
sl. w3 (b5.) ; if name.index.first word.first char <> 0 and
b6=k+1;
se w3 x3+0 ; name.param.first word = <:all:> then
jl. a2. ;
jl. a3. ; goto success;
a2: sn w3 (x1+2) ; if name.index.first word <>
se w0 (x1+4) ; name.param.first word then
jl. a4. ; goto miss;
rl w3 x2 ;
dl w0 x3+8 ;
sn w3 (x1+6) ; if name.index.secnd word <>
se w0 (x1+8) ; name.param.secnd word then
jl. a4. ; goto miss;
a3: dl. w1 b1. ; success:
rl w3 x2 ; proc descr addr := nametable.index;
al w2 x2+2 ;
b7=k+1;
sn w3 x3+0 ; if name.param.first word = <:all:> then
rs. w2 b4. ; next in nametable := index + 2;
rl. w2 b2. ; restore registers;
am. (b3.) ; return to
jl +2 ; link + 2;
a4: ; miss:
al w2 x2+2 ; index := index + 2;
se w2 (80) ; if index <> last in nametable then
jl. a1. ; goto next proc;
al w2 0 ; no success:
b8=k+1;
sn w3 x3+0 ; if not single process then
rs. w2 b4. ; next in nametable := 0;
dl. w1 b1. ;
dl. w3 b3. ; restore registers;
jl x3 ; goto link;
b0: 0 ; saved w0
b1: 0 ; - w1
b2: 0 ; - w2
b3: 0 ; - w3
b4: 0 ; next in nametable
b5: 1<16 ;
d.
e. ; end block get next internal
l.
\f
; fgs 1989.01.10 claim ...10...
#
l./m. rc/, r/85.03.13/89.01.10/
f
message rubout text fil 29
nextfile n g
n=edit g
f
message correct text fil 30
nextfile n g
n=edit g
f
message compress text fil 31
nextfile n g
n=edit g
;
; connect output : segm < 2 + key
;
l./; connect output zone.../, l./jl. w3 h28./, l-3, r/1<1+1/1<2+0/
l./m. rc/, r/85.03.13/88.09.08/
f
message compresslib text fil 32
nextfile n g
n=edit g
;
; close up text output on any alarm
; endless loop in case of parameter error
; check entry permkey as well as entry bases
; end of doc in input => transport error in input
; rejected input from catalog => repeat
; check startsegment of any already compressed entry against size
l./page 2/, r/86.07.04/88.10.12/
l./b13:/, l1, i/
b14: 0 ; - - - permkey;
/, p-1
l./page ...5/, r/86.07.03/88.10.12/
l./a0:/, d3, i/
a0: zl w2 x3+1 ; begin
sn w2 0 ; if preceeding length (param) = 0 then
jl. a1. ; goto finis;
hs w0 x3 ; preceeding separator (param) := 4; <*<s>*>
/, p-3
l./a1: rx. w1 d1./, l./comment i + 6/, d./jl. a0./, i/
ls w1 1 ; <*i + k + 4 is rel addr of last word of ext list*>
wa. w1 d1. ; <*i. e. rel addr of the word containing <date> *>
al w0 x1 ;
a0: wa w0 6 ; for i := i + k
sh w0 502-7 ; while i + k + 4 > 502 - 2 do
jl. (d0.) ; begin
; <*if there is only one word left on the seg-*>
; <*ment then it is used for continuation word*>
jl. w3 c3. ; input extra segment; k := rel start ext list;
al w3 x3-502 ; k := k - 502;
jl. a0. ; end;
/, p-11
l./page 6/, r/86.07.04/88.10.12/
l./c3:/, l./rl. w2 d0./, i/
rl. w3 b1.+22 ; if input zone.share.top transferred -
ws. w3 b1.+8 ; input zone.share.first address <= 2
sh w3 2 ; then
jl. f0. ; goto transport error input zone;
/, p-4
l./c7:/, l./ds. w0 b12./, l1, i/
al w0 7 ; ;
la w0 x1 ; save entry permkey;
rs. w0 b14. ;
/, p-3
l./bz w0 x1+30/, i/
al w0 7 ;
la w0 x1 ; if entry permkey <> saved permkey then
se. w0 (b14.) ; result := 2
jl. a3. ; else
/, p-4
l./page 7/, r/86.07.04/88.10.12/
l./a3=k-a0/, r/interval/scope/
l./page 8/, r/rc 06.03.73 /fgs 1988.10.12/
l./jl. c6./, i/
am -2000 ;
jl. w3 h95.+2000 ; close up text output (curr out);
/, p-1
l./jl. c5./, i/
am -2000 ;
jl. w3 h95.+2000 ; close up text output (curr out);
/, p-1
l./page 9/, r/rc 01.03.73 /fgs 88.10.12/
l./a3:/, l./jl. c0./, i/
am -2000 ;
jl. w3 h95.+2000 ; close up text output (curr out);
/, p-1
l./page 10/, r/rc 03.04.74 /fgs 1988.10.12/
l./d6:/, r/-1<2/-1<3/, r/tus/tus (all except rejected, normal, hard)/
l./page 11/, r/86.07.04/88.10.12/
l./check entry base/, r/base/base, permkey/
l./page 12/, r/86.07.04/88.10.12/
l./a4:/, l2, i/
al w2 0 ;
se w0 1 ; if dummy answer then
rs w2 x1 ; status := 0;
/, p-3
l./a6:/, l./dl. w1 b0.+h1+4/, i/
al w0 7 ;
la w0 x2 ; if entry permkey <> saved entry permkey then
se. w0 (b14.) ; goto next entry;
jl. a7. ;
/, p-4
l./rs. w1 b0.+h1+16/, i/
am. (b4.+14) ; if first segment >
sl w1 1 ; outputfile.size then
jl. a7. ; goto next_entry; <*entry doesnt belong*>
zl w0 x2+31 ; input entry.rel start external list :=
hs. w0 b4.+31 ; entry.rel start external list;
/, p-5
l./page 13/, r/rc 24.03.83 /fgs 88.10.12/
l./m.compr/, r/86.07.04/88.10.12/
f
message translated text fil 33
nextfile n g
n=edit translat4tx
f
message procsurvey text fil 34
nextfile n g
n=edit procsurv4tx
;
; start ext list = 500 => break 0
;
l./page ...1/, r/88.09.20/89.08.18/
l./first of buffer-1/, r/10/h0/
l./page ...4/, r/88.09.20/89.08.18/
l./d10:/, l./rl. w3 c15./, l-1, r/+/;/
l./rl. w3 c15./, i/
rl. w0 c2. ;
sn w0 500 ; if startext = 500 then
jl. d17. ; goto change segment;
/, p-3
l./rl. w3 c15./, r/;/; addr := addr +/
l./page ...5/, r/88.09.20/89.08.18/
l./rl. w1 h54./, r/ /d17: /
l./d15:/, r/;/; else/
l./d16:/, l-2, r/;/; +/
l./d16:/, d, i/
d16: al w1 x1+6 ; 6 +
wa. w1 c2. ; startext;
am +2000 ;
al. w1 x1+c27. ;
rs. w1 c3. ;
/
l./page ...9/, r/88.09.20/89.08.18/
l./d22:/, r/d22:/ /
l./page ...18/,
l./m./, r/88.09.20/89.08.18/
f
message label text fil 35
nextfile n g
n=edit g
;
; nye modekind abbr.
l./page ...6/, r/84.06.18/88.05.05/
l./c20:/, l./c15:/, i/
<:mt62:> , 1<23+ 0<12+18; mt, 6250 bpi , odd
<:mt16:> , 1<23+ 4<12+18; 1600
<:mt32:> , 1<23+ 8<12+18; 3200
<:mt08:> , 1<23+ 12<12+18; 800
/, p-5
l./m.1984/, r/1984.06.18/rc 1988.05.05/
f
message rewind unload text fil 36
nextfile n g
n=edit rewind4tx
f
message allocbuf til brug for save text fil 37
nextfile n ;g = text fil 36
n=edit g
f
;fpproc i g text fil 37 bruges ikke mere
nextfile g
;
message save13 text fil 38
nextfile n g
n=edit g
;
; parameter array til system med lower bound = 0
; connect output : segm < 2 + 0
l./page ... 36/, l./message stack current output/, l-1, r/81.12.07/88.09.08/
l./result := 2;/, r/2/1 shift 2/, r/1<1/1<2/, r/preferably on drum/temporary/
l./message prepare cat scan page 2/, l-1, r/82.12.28/89.01.17/
l./integer field/, l1, i/
integer array field iaf;
/, p-1
l./result :=/, i/
iaf := -2;
/, p1
l./system (5 )/, r/proc_descr)/proc_descr.iaf)/
l./message skip entry page 1;/, l-1, r/83.02.09/88.09.02/
l./<:covered by a better entry/,
r/covered by a better entry/area process inaccessible/
l./errorbits := 2/, d, i/
if result extract 12 < 4 then
errorbits := 2; <*warning.yes, ok.yes*>
/, p-2
f
message load13 text fil 39
nextfile n g
n=edit g
f
message catsort text fil 40
nextfile n g
n=edit g
; aux cat : 2 linier pr entry, den anden skal tælles med ved udskrift
; nye modekinds : mt62, mt32, mt16, mt08
; connect output : segm < 2 + key
;
l./procedure stack_current_output (file_name);/,
l./result := 2;/, r/2/1 shift 2/, r/1<1/1<2 + 0/, r/preferably disc/temporary/
l./procedure outmodekind;/, d./end outmodekind;/, i#
procedure outmodekind;
begin integer i, monrelease;
integer array dummyia (1:12);
<*get monitor release*>
system (5) move core :(64, dummyia);
monrelease := dummyia (1); <*rel shift 12 + subrel*>
for i:=1 step 1 until 25 do
begin
if segm = (case i of (
<*ip*> 1 shift 23 + 0 shift 12 + 0,
<*bs*> 1 shift 23 + 0 shift 12 + 4,
<*tw*> 1 shift 23 + 0 shift 12 + 8,
<*tro*> 1 shift 23 + 0 shift 12 + 10,
<*tre*> 1 shift 23 + 2 shift 12 + 10,
<*trn*> 1 shift 23 + 4 shift 12 + 10,
<*trf*> 1 shift 23 + 6 shift 12 + 10,
<*tpo*> 1 shift 23 + 0 shift 12 + 12,
<*tpe*> 1 shift 23 + 2 shift 12 + 12,
<*tpn*> 1 shift 23 + 4 shift 12 + 12,
<*tpf*> 1 shift 23 + 6 shift 12 + 12,
<*tpt*> 1 shift 23 + 8 shift 12 + 12,
<*lp*> 1 shift 23 + 0 shift 12 + 14,
<*crb*> 1 shift 23 + 0 shift 12 + 16,
<*crd*> 1 shift 23 + 8 shift 12 + 16,
<*crc*> 1 shift 23 + 10 shift 12 + 16,
<*mto*> 1 shift 23 + 0 shift 12 + 18, <*mt62, mtlh*>
<*mte*> 1 shift 23 + 2 shift 12 + 18,
<*nrz*> 1 shift 23 + 4 shift 12 + 18, <*mt16, mtll*>
<*nrze*> 1 shift 23 + 6 shift 12 + 18,
<* *> 1 shift 23 + 8 shift 12 + 18, <*mt32*>
<* *> 1 shift 23 + 12 shift 12 + 18, <*mt08*>
<*mthh*> 1 shift 23 +128 shift 12 + 18,
<*mthl*> 1 shift 23 +132 shift 12 + 18,
<*pl*> 1 shift 23 + 0 shift 12 + 20 ))
then goto found
end;
found:
if i=26 then
begin
write(out,<<dddd>,segm shift (-12),<:.:>,
<<d>,segm extract 12,sp,
if segm extract 12<10 then 2 else 1);
end else
begin
if monrelease < 80 shift 12 + 0 then
write (out, true, 8, case i of (
<: ip:>,
<: bs:>,
<: tw:>,
<: tro:>,
<: tre:>,
<: trn:>,
<: trf:>,
<: tpo:>,
<: tpe:>,
<: tpn:>,
<: tpf:>,
<: tpt:>,
<: lp:>,
<: crb:>,
<: crd:>,
<: crc:>,
<:mtlh:>,
<: mte:>,
<:mtll:>,
<:nrze:>,
<:mt32:>,
<:mt08:>,
<:mthh:>,
<:mthl:>,
<: pl:> ))
else
write(out, true, 8, case i of (
<: ip:>,
<: bs:>,
<: tw:>,
<: tro:>,
<: tre:>,
<: trn:>,
<: trf:>,
<: tpo:>,
<: tpe:>,
<: tpn:>,
<: tpf:>,
<: tpt:>,
<: lp:>,
<: crb:>,
<: crd:>,
<: crc:>,
<:mt62:>,
<: mte:>,
<:mt16:>,
<:nrze:>,
<:mt32:>,
<:mt08:>,
<:mthh:>,
<:mthl:>,
<: pl:> ));
end;
end outmodekind;
#
l./sorted:/, l./if cat >= 0 and segm >= 0 then/, l2, i/
line := line - 1;
/, p1
f
message claimtest text fil 41
nextfile n g
n=edit g
f
message copyarea til brug for save vers 2 text fil 42
nextfile n g
n=edit g
f
message save version 2 text fil 43
nextfile n g
n=edit g
;
; remove process udskydes til senere i save entries
; check af write access counter og area size genindføres nu da ida er enkbufret
; "covered by a better entry" => "area process inaccessible"
; "area size changed during save" laves om fra alarm til warning
; parameter array til system med lower bound = 0
; high speed bit til og fra i save entries
; connect output : segm < 2 + 0
l./page ... 36/, l./message stack current output/, l-1, r/81.12.07/88.09.08/
l./result := 2;/, r/2/1 shift 2/, r/1<1/1<2/, r/preferably on drum/temporary/
l./page ...38/, l./message connect output/, l-1, r/84.04.25/88.09.08/
l./1 shift 1/, r/1 shift 1/1 shift 2/, r/pref drum/temporary/
;********************************************
l./message decl. second level/, l./page 2;/, l-1, r/85.02.08/88.02.04/
l./dummy,/, i/
speedlimit ,
monrelease ,
/, p1
;********************************************
l./message mount param page 1;/, l-1, r/81.12.04/88.08.21/
l./<********/, d, d./<*******/, i/
<***************************************************************>
<* *>
<* The procedure returns the kind of the item given. *>
<* *>
<* Call : mount_param (seplength, item); *>
<* *>
<* mount_param (return value, integer). The kind of the *>
<* item : *>
<* 0 seplength<> <s> or ., item not below *>
<* 1 seplength = <s> or ., item = mountspec *>
<* 2 -"- , -"- release *>
<* 3 -"- , -"- mt62, mtlh, mto *>
<* 4 -"- , -"- mte *>
<* 5 -"- , -"- mt16, mtll, nrz *>
<* 6 -"- , -"- nrze *>
<* 7 -"- , -"- mt32 *>
<* 8 -"- , -"- mt08 *>
<* 9 -"- , -"- mthh *>
<* 10 -"- , -"- mthl *>
<* seplength (call value, integer). Separator < 12 + *>
<* length as for system (4, ...). *>
<* item (call value, array). An item in *>
<* item (1:2) as for system (4, ...). *>
<* *>
<***************************************************************>
/
l./message mount param page 2;/, l-1, r/84.05.30/88.08.21/
l./for i := 1 step 1/, d./i := 8/, i/
for i := 1 step 1 until
(if seplength <> space_txt and
seplength <> point_txt then 0 else 10) do
if item (1) = real ( case i of (
<:mount:> add 's',
<:relea:> add 's',
<:mt62:> ,
<::> ,
<:mt16:> ,
<::> ,
<:mt32:> ,
<:mt08:> ,
<::> ,
<::> ) ) and
item (2) = real ( case i of (
<:pec:> ,
<:e:> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ) )
or item (1) = real ( case i of (
<::> ,
<::> ,
<:mtlh:> ,
<::> ,
<:mtll:> ,
<::> ,
<::> ,
<::> ,
<:mthh:> ,
<:mthl:> ) ) and
item (2) = real ( case i of (
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ) )
or item (1) = real ( case i of (
<::> ,
<::> ,
<:mto:> ,
<:mte:> ,
<:nrz:> ,
<:nrze:> ,
<::> ,
<::> ,
<::> ,
<::> ) ) and
item (2) = real ( case i of (
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ) ) then
begin j := i; i := 10; end;
/
l./message prepare cat scan page 2/, l-1, r/85.07.09/88.02.01/
l./integer field/, l1, i/
integer array field iaf;
/, p-1
l./result :=/, i/
iaf := -2;
/, p1
l./system (5 )/, r/proc_descr)/proc_descr.iaf)/
l./message save entries page 8;/, l-1, r/85.07.09/88.02.01/
l./close (zhelp/, d1, i/
close (zhelp, false); <*process will be removed later*>
/, p1
l./message save entries page 12/, l-1, r/85.07.02/88.11.03/
l.#if (entry_kind (j) // segm) > 4#, d6, i#
for copy_count := 1 step 1 until copies do
if modekind (copy_count) shift 4 < 0 then
begin <*high speed bit specified*>
getzone6 (za (copy_count), zdescr);
zdescr (1):=
if entry_kind (j) <
speedlimit /
(if modekind (copy_count) shift 9 < 0 then 4 else 1) then
logand (modekind (copy_count),
-(1 shift 19 + 1)) extract 23 <*clear*>
else
logor (modekind (copy_count),
1 shift 19 ) extract 23;<*set *>
if test then
write (out,
"nl", 1, <:high speed bit zone (:>, copycount,<:) = :>,
zdescr (1) shift (-19) extract 1,
"nl",1,<:size = :>, entry_kind (j),
"nl", 1, <:speedlimit/dens = :>, speedlimit/
(if modekind (copycount) shift 9 < 0 then 4 else 1));
setzone6 (za (copy_count), zdescr);
end;
#, p1
l./<. write acces counter again/, r/<*/ /, g 18/<./<*/, g -18/.>/*>/
l-19,
l./<*write acces counter again*>/, d2, i/
<* write access counter again*>
system (5) move core :( entry_nta (j) , proc);
system (5) move core :( proc (1) - 4, proc);
if test then
write (out,
"nl", 1, <:entry_nta (j) = :>, entry_nta (j) ,
"nl", 1, <:proc (17) = :>, proc (17) ,
"nl", 1, <:write acc = :>, entry_wr_acc (j));
/
l./true, 9/, g/, 9,/, 10,/
l./*** alarm : area size changed during save/, r/alarm/warning/
l./true, 9/, g/, 9,/, 10,/
l2, r/trap (-1)/errorbits := 2/, r/;/; <*warning.yes, ok.yes*>/
l2, r/*>/ /
l./begin <*remove highspeed bit in modekind*>/, l-1, d./if ida_copy/, d./end;/
i#
getzone6 (za (copy_count), zd);
zd (1) := logand (modekind (copy_count),
-(1 shift 19 + 1)) extract 23 <*clear high speed*>;
if ida_copy then
begin <*update position in tape zone*>
getposition (zida ,
fileno (copy_count),
blockno (copy_count));
zd (7) := fileno (copy_count);
zd (8) := blockno (copy_count);
end;
setzone6 (za (copy_count), zd);
#, p1
l./end <*next entry*>/, l./if entry_kind (j) > 0/, r/>/>=/, p1
l./monitor (64/, d, i/
area_proc := monitor (4) proc :(zhelp, 0, proc <*dummy*>);
if area_proc <> outproc and
area_proc <> catproc then
monitor (64) remove process :(zhelp, 0, zdescr);
/, p-4
l./message list entry page 2;/, l-1, r/81.12.30/88.08.11/
l./write (z, "sp", 3, true, 7, case modekind/, d./<:mte:>/, i/
if monrelease < 80 shift 12 + 0 then
write (z, "sp", 3, true, 7, case modekind of (
<: ip:>, <: bs:>, <: tw:>, <: tro:>, <: tre:>, <: trn:>,
<: trf:>, <: trz:>, <: tpo:>, <: tpe:>, <: tpn:>, <: tpf:>,
<: tpt:>, <: lp:>, <: crb:>, <: crd:>, <: crc:>, <:mtlh:>,
<: mte:>, <:mtll:>, <:nrze:>, <:mt32:>, <:mt08:>, <:mthh:>,
<:mthl:>, <: pl:> ))
else
write (z, "sp", 3, true, 7, case modekind of (
<: ip:>, <: bs:>, <: tw:>, <: tro:>, <: tre:>, <: trn:>,
<: trf:>, <: trz:>, <: tpo:>, <: tpe:>, <: tpn:>, <: tpf:>,
<: tpt:>, <: lp:>, <: crb:>, <: crd:>, <: crc:>, <:mt62:>,
<: mte:>, <:mt16:>, <:nrze:>, <:mt32:>, <:mt08:>, <:mthh:>,
<:mthl:>, <: pl:> ));
/
l./message skip entry page 1;/, l-1, r/85.07.08/88.09.02/
l./<:covered by a better entry/,
r/covered by a better entry/area process inaccessible/
l./errorbits := 2/, d, i/
if result extract 12 < 4 then
errorbits := 2; <*warning.yes, ok.yes*>
/, p-2
l./message modekind case page 1;/, l-1, r/81.12.30/88.08.11/
l./until 24/, r/24/26/
l./<*mto, mtlh*>/, d./<*mthl*>/, i/
1 shift 23 + 0 shift 12 + 18, <* mt62, mto, mtlh*>
1 shift 23 + 2 shift 12 + 18, <* mte*>
1 shift 23 + 4 shift 12 + 18, <* mt16, nrz, mtll*>
1 shift 23 + 6 shift 12 + 18, <* nrze*>
1 shift 23 + 8 shift 12 + 18, <* mt32*>
1 shift 23 + 12 shift 12 + 18, <* mt08*>
1 shift 23 +128 shift 12 + 18, <* mthh*>
1 shift 23 +132 shift 12 + 18, <* mthl*>
/, p-8
l./i := 24/, r/24/26/
l./message program/, l./page 2;/, l-1, r/85.01.16/88.08.11/
l./<*obtain area and buffer claim*>/, i/
<*get monitor release*>
system (5) move core :(64, dummyia);
monrelease := dummyia (1); <*rel shift 12 + subrel*>
/, p-3
l./message program/, l./page 3;/, l-1, r/84.05.30/88.02.04/
;*********************************************
l./tape_param_ok :=/, l1, i/
<*
write (out, "nl", 1, <:speed limit : :>, "<", 1);
*>
<*stopzone (out, false);*>
<*read (in, speedlimit);
write (out, "nl", 1, <:speed limit : :>, speedlimit, "nl", 1);
*>
<*stopzone (out, false);*>
speedlimit := 100;
/
;**********************************************
l./message program page 4/, l-1, r/81.12.15/88.09.16/
l./1 shift 23 + 18/, d./1 shift 23+132/, i/
modekind (copycount) := 1 shift 23 + 18; <*mto, mtlh, mt62*>
modekind (copycount) := 1 shift 23 + 2 shift 12 + 18; <*mte*>
modekind (copycount) := 1 shift 23 + 4 shift 12 + 18; <*nrz, mtll, mt16*>
modekind (copycount) := 1 shift 23 + 6 shift 12 + 18; <*nrze*>
modekind (copycount) := 1 shift 23 + 8 shift 12 + 18; <*nr32*>
modekind (copycount) := 1 shift 23 +12 shift 12 + 18; <*mt08*>
modekind (copycount) := 1 shift 23+128 shift 12 + 18; <*mthh*>
modekind (copycount) := 1 shift 23+132 shift 12 + 18; <*mthl*>
/
l./message declare zones page 1;/, l-1, r/85.01.16/88.08.11/
l./ida_copy :=/, i/
ida_copy := monrelease < 80 shift 12 + 0; <*monitor release 80*>
/, l1, r/ida_copy :=/idacopy :=
idacopy and/,
p-2
f
message load vers 2 text fil 44
nextfile n g
n=edit g
;
; ignore parity error in magtape
; prepare for sizes different than the ones wanted
; connect output : segm < 2 + key
l./page ... 36/, l./message stack current output/, l-1, r/81.12.07/88.09.08/
l./result := 2;/, r/2/1 shift 2/, r/1<1/1<2/, r/preferably on drum/temporary/
l./page ...38/, l./message connect output/, l-1, r/84.04.25/88.09.08/
l./size shift 1/, r/shift 1/shift 2/, r/pref drum/temporary/
l./message decl. second level page 1;/, l-1, r/84.10.31/88.11.17/
l./boolean/, l./inc_dump/, i/
reading_savecat ,
/, p-1
l./boolean array/, l./expell_zone/, i/
parity ,
/, p1
;********************************************
l./dummy,/, i/
speedlimit ,
monrelease ,
/, p1
;********************************************
l./message connect wrk or exist page 2;/, l-1, r/84.09.19/88.11.25/
l./headtail.base (1) = entry.base (1)/, d1, i/
if headtail .base (1) = entry .base (1) and
headtail .base (2) = entry .base (2) and <*bases*>
headtail (1) extract 3 = entry (1) extract 3 and <*permkey*>
(headtail .size >= 0 and <*areas*>
entry .size >= 0
or headtail .size < 0 and <*descr*>
entry .size < 0) then
/, l1, p-8
l./tofrom/, i/
if entry.size >= 0 then
/, l1, r/tofrom/ tofrom/, p-1
l./message rename wrk /, l-1, r/84.07.10/88.02.04/
l./integer array field base/, r/;/, tail;/
l./size := 16/, i/
tail := 14; <* - - tail*>
/, p1
l./page 2/, l-1, r/84.11.09/88.02.04/
l./if result > 0 and result <> 3 then/, i#
if result = 0 then
begin <*reopen zone z*>
close (z, true);
open (z, 0, entry_name, 0);
end;
if (result = 0 <*renamed *>
or result = 3) and <*name overlap*>
entry.size >= 0 then
begin <*check whether or not to cut area*>
integer result1;
result1 := monitor (76) head and tail :(z, 1, headtail);
if test then
begin
integer array zdescr (1:20);
integer array field zname;
zname := 2;
getzone6 (z, zdescr);
write (out,
"nl", 1, <:lookup head and tail : :>, zdescr.zname,
"nl", 1, <:result : :>, result1 );
end;
if result1 = 0 and
entry.size <> headtail.size then
begin <*cut area*>
result1 := monitor (44) change entry :(z, 1, entry.tail);
if test then
begin
integer array zdescr (1:20);
integer array field zname;
zname := 2;
getzone6 (z, zdescr);
write (out,
"nl", 1, <:change entry : :>, zdescr.zname,
"nl", 1, <:entry.size : :>, entry.size ,
"nl", 1, <:result : :>, result1);
end;
if result1 > 0 then
begin <*could not be changed*>
reset_catbase;
monitor_alarm (out, 44, entry.name, result1);
end;
end <*cut area*>;
end <*check whether ...*>;
\f
<* sw8010/2, load entry procedures page ... xx...
1988.02.04*>
message rename wrk page 1a;
#, p1
l./begin <*name equivalence*>/, i/
if entry.size <> headtail.size then
write (out,
"nl", 1, "*", 3, "sp", 1, true, 12, headtail.name, <:not renamed:>)
else
/, p1
l./message monitor alarm/,
l./page 2;/,l-1, r/85.02.06/88.02.04/
l./errorbits := 3;/, r/3/2/, r/ok.no/ok.yes/
l./procedure terminate_alarm (z/, d./end terminate_alarm;/, i#
procedure terminate_alarm (z, text, name, val, text1, val1);
value val, val1 ;
zone z ;
string text, text1 ;
long array name ;
integer val, val1 ;
<***********************************************************>
<* *>
<* The procedure terminates with an invisible runtime alarm*>
<* after having written an alarm message on the zone z. *>
<* *>
<* Call: terminate_alarm (z, text, name, val, text1, val1);*>
<* *>
<* z (call and return value, zone). The document, the *>
<* buffering and the position of the document where *>
<* to write the alarm message. *>
<* text (call value, string). *>
<* text1 *>
<* name (call value, long array). *>
<* val (call value, integer). All values which are writ- *>
<* val1 ten on the zone z. *>
<* *>
<***********************************************************>
begin
write_alarm (z, text);
write (z, "nl", 1, "sp", 4,
true, 12, name, <: :>, val, text1, val1);
trapmode := 1 shift 13; <*ignore output of trap alarm*>
trap (1); <*alarm*>
end terminate_alarm;
\f
<* sw8010/2, load entry procedures page ... xx...
1988.01.28*>
message continue warning page 1;
procedure continue_warning (z, text, name, val, text1, val1);
value val, val1 ;
zone z ;
string text, text1 ;
long array name ;
integer val, val1 ;
<***********************************************************>
<* *>
<* The procedure continues after having written an warning *>
<* message on the zone z. The fp mode bits are set *>
<* warning.yes ok.yes *>
<* *>
<* Call: continuewarning (z, text, name, val, text1, val1);*>
<* *>
<* z (call and return value, zone). The document, the *>
<* buffering and the position of the document where *>
<* to write the alarm message. *>
<* text (call value, string). *>
<* text1 *>
<* name (call value, long array). *>
<* val (call value, integer). All values which are writ- *>
<* val1 ten on the zone z. *>
<* *>
<***********************************************************>
begin
write_alarm (z, text);
write (z, "nl", 1, "sp", 4,
true, 12, name, <: :>, val, text1, val1);
errorbits := 2; <*warning.yes, ok.yes*>
end continue_warning;
#, l1, p-5
l./message mount param page 1;/, l-1, r/81.12.04/88.08.21/
l./<********/, d, d./<*******/, i/
<***************************************************************>
<* *>
<* The procedure returns the kind of the item given. *>
<* *>
<* Call : mount_param (seplength, item); *>
<* *>
<* mount_param (return value, integer). The kind of the *>
<* item : *>
<* 0 seplength<> <s> or ., item not below *>
<* 1 seplength = <s> or ., item = mountspec *>
<* 2 -"- , -"- release *>
<* 3 -"- , -"- mt62, mtlh, mto *>
<* 4 -"- , -"- mte *>
<* 5 -"- , -"- mt16, mtll, nrz *>
<* 6 -"- , -"- nrze *>
<* 7 -"- , -"- mt32 *>
<* 8 -"- , -"- mt08 *>
<* 9 -"- , -"- mthh *>
<* 10 -"- , -"- mthl *>
<* seplength (call value, integer). Separator < 12 + *>
<* length as for system (4, ...). *>
<* item (call value, array). An item in *>
<* item (1:2) as for system (4, ...). *>
<* *>
<***************************************************************>
/
l./message mount param page 2;/, l-1, r/84.05.20/88.08.21/
l./for i := 1 step 1/, d./i := 8/, i/
for i := 1 step 1 until
(if seplength <> space_txt and
seplength <> point_txt then 0 else 10) do
if item (1) = real ( case i of (
<:mount:> add 's',
<:relea:> add 's',
<:mt62:> ,
<::> ,
<:mt16:> ,
<::> ,
<:mt32:> ,
<:mt08:> ,
<::> ,
<::> ) ) and
item (2) = real ( case i of (
<:pec:> ,
<:e:> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ) )
or item (1) = real ( case i of (
<::> ,
<::> ,
<:mtlh:> ,
<::> ,
<:mtll:> ,
<::> ,
<::> ,
<::> ,
<:mthh:> ,
<:mthl:> ) ) and
item (2) = real ( case i of (
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ) )
or item (1) = real ( case i of (
<::> ,
<::> ,
<:mto:> ,
<:mte:> ,
<:nrz:> ,
<:nrze:> ,
<::> ,
<::> ,
<::> ,
<::> ) ) and
item (2) = real ( case i of (
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ,
<::> ) ) then
begin j := i; i := 10; end;
/
l./message in savecat head page 2;/, l-1, r/84.10.04/87.04.29/
l./terminate_alarm/,
l2, r/);/, <: in save catalog : :>, local_maxnoofvol);/
l./procedure load_entries ( za/, l./message load entries page 5;/,
l-1, r/86.10.10/78.04.29/
l./terminate_alarm (out/, r/terminate_alarm/continue_warning/
l./<:incorrect no of segments of part/,
r/incorrect no of segments of/incomplete/
l1, r/segments/partcatsize/, r/);/, <: transferred : :>, abs (segments));/
l./page 6;/, l1, l./page 6;/, l-1, r/84.11.15/87.04.29/
l./setposition (za (1)/, d, i/
blockno (copycount) := blockno (copycount) + 1;
/, l1, p-2
l./if zpart.size > 0/, r/and/ and/
l1, r/and/ and/
l1, r/and/ and/
l1, r/segments/abs (segments)/
l1, i/
begin <*warning and correct zpart.size*>
/
l1, r/terminate_alarm/continue_warning/
l1, r/segments/abs (segments)/, r/<:not/
<:warning : not/, r/else/
else/
l1, r/<:/ <:warning : /,
l1, r/segments/zpart.size/, r/);/, <: transferred : :>, abs (segments));/
l1, i/
zpart.size := abs (segments);
end <*warning and correct ...*>;
/
l./if entry_found and/, r/and/ and/
l1, r/and/ and/
l1, r/then/ and/
l1, i/
(segments >= 0
or connect ) then
/
l./total_segm__count :=/, r/segments/abs (segments)/, l-1, r/1;/ 1;/, p1
l./if load and/, r/and/ and/
l1, r/then/ and/
l1, i/
(segments >= 0
or connect ) then
/
l./slice_count (discno)/, i/
segments := abs (segments);
/
l./message list entry page 2;/, l-1, r/81.12.30/88.08.11/
l./write (z, "sp", 3, true, 7, case modekind/, d./<:mte:>/, i/
if monrelease < 80 shift 12 + 0 then
write (z, "sp", 3, true, 7, case modekind of (
<: ip:>, <: bs:>, <: tw:>, <: tro:>, <: tre:>, <: trn:>,
<: trf:>, <: trz:>, <: tpo:>, <: tpe:>, <: tpn:>, <: tpf:>,
<: tpt:>, <: lp:>, <: crb:>, <: crd:>, <: crc:>, <:mtlh:>,
<: mte:>, <:mtll:>, <:nrze:>, <:mt32:>, <:mt08:>, <:mthh:>,
<:mthl:>, <: pl:> ))
else
write (z, "sp", 3, true, 7, case modekind of (
<: ip:>, <: bs:>, <: tw:>, <: tro:>, <: tre:>, <: trn:>,
<: trf:>, <: trz:>, <: tpo:>, <: tpe:>, <: tpn:>, <: tpf:>,
<: tpt:>, <: lp:>, <: crb:>, <: crd:>, <: crc:>, <:mt62:>,
<: mte:>, <:mt16:>, <:nrze:>, <:mt32:>, <:mt08:>, <:mthh:>,
<:mthl:>, <: pl:> ));
/
l./message modekind case page 1;/, l-1, r/81.12.30/88.08.11/
l./until 24/, r/24/26/
l./<*mto, mtlh*>/, d./<*mthl*>/, i/
1 shift 23 + 0 shift 12 + 18, <* mt62, mto, mtlh*>
1 shift 23 + 2 shift 12 + 18, <* mte*>
1 shift 23 + 4 shift 12 + 18, <* mt16, nrz, mtll*>
1 shift 23 + 6 shift 12 + 18, <* nrze*>
1 shift 23 + 8 shift 12 + 18, <* mt32*>
1 shift 23 + 12 shift 12 + 18, <* mt08*>
1 shift 23 +128 shift 12 + 18, <* mthh*>
1 shift 23 +132 shift 12 + 18, <* mthl*>
/, p-8
l./i := 24/, r/24/26/
l./message open tape/, l-1, r/84.09.26/88.02.11/
l./open (z, modekind/, r/modekind extract 18, doc/
logand (modekind, -(1 shift 19 + 1)) extract 23, <*clear speed bit*>
doc/, p-1
l./procedure transfer (za/,
l./message transfer page 3;/, l-1, r/84.11.12/88.02.03/
l./boolean tapemark/, r/;/, rem_parity;/
l1, r/user (1:2)/user (1:16)/
l./tapemark :=/, l1, i/
rem_parity:= false ;
/, p-1
l.#if (segments // segm) > 4#, d5, i#
if modekind (i) shift 4 < 0 then
begin <*high speed bit specified*>
getzone6 (za (1), zdescr);
zdescr (1) :=
if segments <
speedlimit / (if modekind (i) shift 9 < 0 then 4 else 1) then
logand (modekind (i), -(1 shift 19 + 1)) extract 23 <*clear*>
else
logor (modekind (i), 1 shift 19 ) extract 23;<*set *>
if test then
write (out,
"nl", 1, <:speed bit = :>, zdescr (1) shift (-19) extract 1);
setzone6 (za (1), zdescr);
end;
#, p1
l./"sp", 2, <:n.t. addr/, i/
"sp", 2, <:area name = :>, procname,
"sp", 2, <:pos in area :>, file (area), block (area),
/, p1
l./if hwds > 2 then/, i/
if parity (1) then
begin <*parity error input tape zone*>
parity (1) := false;
rem_parity := true ;
if sumsegs < segments - segments mod segm then
segs := segm
else
begin
segs := segments mod segm; <*last block*>
if segs * 512 < hwds then
hwds := segs * 512;
end;
write (out,
"nl", 1, "sp", 4, <:loading to:>,
"nl", 1, "sp", 4, true, 12, procname,
<: last :>, segs * 512 - hwds, <: halfwords of segments :>,
sumsegs, <: - :>, sumsegs + segs - 1,
if expell then <: would be:> else <: are:>, <: zeroed:>,
"nl", 1);
end;
/, p1
l./if segs <> segm then segments := sumsegs + segs;/, d, i/
if segs <> segm
or hwds = aux_sync_length then
begin <*data blocks expired too early*>
if hwds = aux_sync_length then
begin <*sync block read as last data block*>
segs := 0; <*regret record*>
hwds := 0; <*makes the coming changerecio regret record*>
changerecio (za, hwds); <*regret record*>
getposition (za (1), file (i ), block (i )); <*log pos before sync*>
setposition (za (1), file (i ), block (i )); <*phys pos = logical*>
getposition (za (2), file (area), block (area));
setposition (za (2), file (area), block (area));
end;
segments := sumsegs + segs; <*to terminate loop*>
end <*data blocks expired too early*>;
/, p1
l./changerecio/, r/ch/if hwds > 0 then
ch/
l./page 4;/, l-1, r/84.11.08/88.11.17/
l./transfer (za, i/, l-1, i/
reading_savecat := true;
/, p-1
l./transfer (za, i/, l2, i/
reading_savecat := false;
/, p-1
l./if j <> savecatsize/, r/j/abs (j)/
l2, r/incorrect no of segments of/incomplete/
l1, r/);/, <: transferred : :>, abs (j));/
l./page 5;/, l-1,r/1894.11.12/1988.11.17/
l./<*stop zones, maybe tap/, i/
getzone6 (za (1), zdescr);
if aux_sync_length > 0 and
zdescr (16) > 0 and
not reading_savecat then <*record length*>
begin
<*sync blocks present and present record not one, *>
<*check that next share has input a sync block and*>
<*- if not : read on until sync block *>
<*- if : leave *>
integer array sdescr1, sdescr2, sdescr3 (1:12);
integer used_share, next_share, reclength;
getzone6 (za (1), zdescr);
used_share := zdescr (17); <*save used share*>
next_share := used_share + 1; <*save next share*>
if next_share > zdescr (18) then
next_share := 1;
zdescr (17) := next_share;
getshare6 (za (1), sdescr1, used_share);
getshare6 (za (1), sdescr2, next_share);
<* if test then
begin
write (out, "nl", 1, <:zone and shares before check next share ::>,
"nl", 1, <:used share = :>, used_share,
"sp", 1, <:next share = :>, next_share);
writezone (za (1), 1);
writeshare (za (1), used_share);
writeshare (za (1), next_share);
end;
*>
setzone6 (za (1), zdescr); <*used share updated*>
check (za (1) ); <*check it*>
getshare6 (za (1), sdescr3, next_share); <*get checked share*>
sdescr2 (1) := sdescr3 (1) := 1; <*share.state := ready*>
setshare6 (za (1), sdescr3, next_share); <*reset the share*>
<* if test then
begin
write (out, "nl", 1, <:zone and shares after check next share ::>);
writezone (za (1), 1);
writeshare (za (1), used_share);
writeshare (za (1), next_share);
end;
*>
reclength :=
sdescr3 (12) - sdescr3 (5) ;
<*sh.top xferred - sh.first addr*>
zdescr (17) := used_share;
setzone6 (za (1), zdescr); <*reset zone*>
setshare6 (za (1), sdescr1, used_share); <*and shares*>
<* if test then
begin
integer i;
write (out,
"nl", 1, <:zone and shares before set share next share ::>,
"nl", 1, <:reclength = :>, reclength,
"nl", 1, <:zdescr(16)= :>, zdescr(16));
writezone (za (1), 1);
writeshare (za (1), used_share);
writeshare (za (1), next_share);
write (out, "nl", 1, <:sdescr2 = :>);
for i := 1 step 1 until 12 do
write (out, "nl", 1, "sp", 10, << dddddd>, sdescr2 (i));
end;
*>
setshare6 (za (1), sdescr2, next_share);
if reclength > aux_sync_length then
begin <*too many data blocks, read on until sync block*>
getposition (za (1), file (i ), block (i )); <*log pos before last block*>
getposition (za (2), file (area), block (area));
closeinout (za); <*terminate zones, reinit zone array*>
block (i) := block (i) + 1; <*log pos after last block*>
setposition (za (1), file (i ), block (i )); <*phys = log pos*>
setposition (za (2), file (area), block (area));
<* if test then
write (out,
"nl", 1, <:position before transfer : :>,
file (i), block (i),
"nl", 1, <:- in area : :>,
file (area), block (area));
*>
segs :=
transfer (za, i, copies, file, block, 8388607, endtape, expell);
<*transfer until sync block, but expell disc zone*>
sumsegs := sumsegs + segs;
setposition (za (1), file (i), block (i)); <*save pos in zone*>
<* if test then
write (out,
"nl", 1, <:position after transfer : :>,
file (i), block (i),
"nl", 1, <:- in area : :>,
file (area), block (area));
*>
end <*too many full length blocks*>;
end <*aux_sync_length > 0*>;
/, p1
l./<*stop zones, maybe/, i#
\f
<* sw8010/2, load tape handling procedures page ... xx...
1988.02.02*>
message transfer page 6;
#
l./if test then/, i/
getzone6 (za (2), zdescr);
name_table_addr := zdescr (6);
if zdescr (13) >= 32 then <*z.state < 32 == closeinout was here before*>
closeinout (za); <*reallocate buffer area*>
/
l./getzone6 (za (2)/, d2
l./"nl", 1, <:proc bases/, r/));/),
"nl", 1, <:segments = :>, user (12));/, p-1
l./getzone_6 (za (1)/, d2
l./transfer :=/, r/sumsegs/
if rem_parity then
- sumsegs
else
sumsegs/, p-4
l./message next volume page 3;/, l-1, r/85.02.11/87.04.29/
l./terminate_alarm (/, l2, r/);/, <: block number : :>, block (index));/
l./terminate_alarm (/, l2, r/);/, <: block number : :>, block (index));/
l./procedure end_of_document (ztape,/,
l./page 2;/, l-1, r/84.10.04/87.04.24/
;**************************************
;l./if status/, i/
; write (out,
; "nl", 1, "*" , 3, <:blockprocedure end of doc : :>,
; "nl", 1, "sp", 3, <:status = :>, status);
;
;/, p1
;***************************************
l./if status extract 1 = 1/, r/then/ and/, r/extract/ extract/
l1, i/
(status shift (-22) extract 1 = 0 <*not parity*>
or status shift (-13) extract 1 = 1) then <*read error*>
/, l1, r/;/; <*hard error, not parity or read error*>/, p-2
;l./if status shift (-18)/,
;**********************************
;i/
;
; write (out,
; "nl", 1, "sp", 3, <:index = :>, index ,
; "nl", 1, "sp", 3, <:oper. = :>, operation);
;
;/, p-5
;**********************************
l./if status shift (-18)/,
r/if status/if status shift (-22) extract 1 = 1 then
begin <*parity error*>
if operation <> 3 then
give_up (ztape, status, hwds); <*not input*>
getposition (ztape, i, j);
write_alarm (out,
<:warning : persistent parity error in input from tape:>);
errorbits := 2; <*warning.yes, ok.yes*>
write (out,
"nl", 1, "sp", 4, true, 12, zdescr.docname,
<: file, block no :>, i, <:, :>, j);
parity (index) := true;
if hwds < 4 then
hwds := 4; <*not filemark*>
end <*parity error*> else
if status/,
p-12
l./begin <*mode error*>/, l./for i := 1 step 1/, r/6/8/
l2, r/128/8, 12, 128/
l1, r/6/8/
l1, r/6/8/
l2, r/128/8, 12, 128/
l./if nextmode = startmode/, d1, i#
getstate (ztape, i);
if nextmode = startmode <*all modes h been tried*>
or i shift (-5) extract 1 = 1 <*after inoutrec/chrecio*> then
give_up (ztape, status, hwds);
#, p-5
l./<:*mode error on/, l2, r#mtlh#mt62/mtlh#, r#mtll#mt16/mtll#, r#<:mthh:>,#
<:mt32:>, <:mt08:>, <:mthh:>, #
l./message program page 2;/, l-1, r/85.01.16/88.08.11/
l./<*obtain area and buffer claim*>/, i/
<*get monitor release*>
system (5) move core :(64, dummyia);
monrelease := dummyia (1); <*rel shift 12 + subrel*>
/, p-3
l./message program page 3;/, l-1, r/85.02.06/87.04.24/
l./end_of_doc/, i/
parity (i) :=
/,p1
;*********************************************
l./tape_param_ok :=/, l1, i/
<*write (out, "nl", 1, <:speed limit : :>, "<", 1);
*>
<*stopzone (out, false);*>
<*read (in, speedlimit);
write (out, "nl", 1, <:speed limit : :>, speedlimit, "nl", 1);
*>
<*stopzone (out, false);*>
speedlimit := 100;
/
;**********************************************
l./message program page 4;/, l-1, r/81.12.15/88.08.21/
l./mode_kind (copy_count) := 1 shift 23/, d./1 shift 23+132/, i/
modekind (copycount) := 1 shift 23 + 18; <*mt62, mtlh, mto*>
modekind (copycount) := 1 shift 23 + 2 shift 12 + 18; <*mte*>
modekind (copycount) := 1 shift 23 + 4 shift 12 + 18; <*mt16, mtll, nrz*>
modekind (copycount) := 1 shift 23 + 6 shift 12 + 18; <*nrze*>
modekind (copycount) := 1 shift 23+ 8 shift 12 + 18; <*mt32*>
modekind (copycount) := 1 shift 23+ 12 shift 12 + 18; <*mt08*>
modekind (copycount) := 1 shift 23+128 shift 12 + 18; <*mthh*>
modekind (copycount) := 1 shift 23+132 shift 12 + 18; <*mthl*>
/
l./message prepare tapes page 1;/, l-1, r/85.02.06/87.04.29/
l./terminate_alarm/,
l2, r/);/, <: block no :>, blockno (copy_count));/
l./message prepare save-loadcat page 2;/, l-1, r/85.01.16/88.11.17/
l./transfer (ztape/, l-1, i/
reading_savecat := true;
/, p-1
l./if segments <> savecatsize/, i/
reading_savecat := false;
/, p-1
l./terminate_alarm/, l1, d, i/
<:incomplete save catalog transferred from tape:>,
/
l1, d
l./savecatsize);/, r/);/, <: transferred : :>, abs (segments));/
f
lookup n g
message slut editering af utility texter
end
finis
▶EOF◀