DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦c99b2804d⟧ TextFile

    Length: 180480 (0x2c100)
    Types: TextFile
    Names: »retuti4     «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »retuti4     « 

TextFile

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◀