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

⟦35299cc1a⟧ TextFile

    Length: 64512 (0xfc00)
    Types: TextFile
    Names: »uti23«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦f8e4b63af⟧ »trcfput« 
            └─⟦this⟧ 

TextFile

\f




;rc 25.05.73                fp utility, system 3, cat adm 2

; the catalog administration text 2 contains the programs
; lookup, search, clear, scope

; the text is assembled by a call of the slang assembler
; of the following type:

; (lookup=slang text 
; lookup search clear scope)

;rc 23.02.72                fp utility, cat adm 2 ...01...

b. g15 w.                  ; outer block for insertproc
d.
p.<:fpnames:>
l.


s. a200, b200, i100
w.
k=h55+10000
g3=k
a0                         ; length

;procedure init program
;
;called just after entry   nb: link w1
;
b0:  ds. w3  a2.           ; save first core,pointer;
     al  w3  x3+2          ;
     rs. w3  a3.           ;
     bz  w2  x3-2          ;
     se  w2  6             ;   return:=
     am      2             ;   if delim <> 6 then link+2
     al  w3  x1            ;   else link;
     rl  w2  66            ;   w2:=process descr address;
     dl  w1  x2+70         ;
     ds. w1  a5.           ;   move catbase;
     dl  w1  x2+78         ;
     ds. w1  a7.           ;   move standard;
     dl. w1  h58.+10000    ;
     ds. w1  a9.           ;   move user;
     dl  w1  x2+74         ;   move max;
     ds. w1  a11.          ;
     al. w1  h21.+10000    ;   w1:=addr of curr out zone;
     jl      x3            ;   goto return;
                                                                                                        
\f


;rc 16.04.72                fp utility, system 3, cat adm 2 ...02...

;end program
;
b.  j3  w.
b2:  jl. w3  b3.           ;   reestablish catbase;
     al. w3  a74.          ;   remove process
     jd      1<11+64       ;   (<:catalog:>);
     rl. w1  a16.          ; look for sec. output:
     se  w1  0             ;   if no sec zone
     sn. w1  h21.+10000    ;   or zone = cur out
     jl.     j1.           ;   then goto set ok;
     bz  w3  x1+h1+1       ; terminate sec out:
     se  w3  4             ;   char := if kind=bs
     sn  w3  18            ;   or if kind=mt then em
     am      25            ;   else
     al  w2  0             ;   null
     jl. w3  h34.+10000    ;   close up (char);
     jl. w3  h79.+10000    ;   terminate zone;
     bz  w0  x1+h1+1       ; test bs:
     sn  w0  4             ;   if kind = bs
     jl.     j2.           ;   then goto cut down;
j3:  rl. w3  h8.+10000     ; set content:
     al  w3  x3+2          ;
     al. w1  a87.          ;   lookup entry(outfile);
     jd      1<11+42       ;
     al  w0  0             ;
     rs. w0  a94.          ;   content := text;
     jd      1<11+44       ;   change entry(outfile);
j1:  am.    (a22.)         ; set ok:
     se  w1  x1            ;   w2 :=
     am      1             ;   if not ok then 1
     al  w2  0             ;   else 0;
b10: jl.     h7.+10000     ;   goto fp end program;
j2:  al  w3  x1+h1+2       ; cut down:
     al. w1  a87.          ; 
     jd      1<11+42       ;   lookup entry(outfile);
     rl  w0  x3+14         ;   size(tail) :=
     rs. w0  a87.          ;   segment count;
     jd      1<11+44       ;   change entry;
     jl.     j3.           ;   goto set content;
e.
                                                                   
\f


;rc 16.02.72                fp utility, system 3, cat adm 2 ...03...


;procedure output parameters
;
;searches through the fp command stack for a parameter with
;delim = space or end list while listing the parameters
;found.   when such a parameter or end list is found the 
;procedure returns.
;
;                call          return
;w0                           destroyed
;w1                           destroyed
;w2           addr of param   destroyed
;w3           link            destroyed
;
b.  j2  w.
b4:  rs. w3  j0.            ;   save link;
j1:                         ; output parameter:
     bz  w1  x2             ;   w1:=delim;
     jl. w3  x1+b29.        ;   outtext(delim);
     bz  w1  x2+1           ;   w1:=kind;
     al. w3  j2.            ;   return := j2 ;
     al  w0  x2+2           ;   w0:=addr(param);
     se  w1  4              ;   if kind <> integer
     jl.     h31.-2+10000   ;   then outtext(param);
     rl  w0 (0)             ;   else
     jl. w3  h32.-2+10000   ;   outinteger(param);
             0<23+32<12+1   ;
j2:  ba  w2  x2+1           ;   w2:=next param;
     rl  w0  x2             ;
     sh. w0 (a23.)          ;   if delim not point or =
     jl.    (j0.)           ;   then return;
     jl.     j1.            ;   goto output parameter;
j0:          0              ;   saved link

e.

                                                                                 
\f


;rc 10.02.72                fp utility, system 3, cat adm 2 ...04...

;various output on special output
;
;as a rule the following holds:
;
;               at call           at return
;w0         (add of text, int.)   destroyed
;w1                               zone address
;w2                               unchanged
;w3          link                 destroyed
;
b. j4 w.
j0:          0             ;   saved link
j1:          0             ;   saved integer or address
;
;various outtexts:
                           ;   text:
b63: am      i63           ;   <:  ; :>
b62: am      i62           ;   <:<10>           ; :>
b61: am      i61           ;   <:<10>:>
b60: am      i60           ;   <:***:>      the entries b60 - b54
b59: am      i59           ;   <:temp:>     should be consecutive
b58: am      i58           ;   <:login:>
b57: am      i57           ;   <:user:>
b56: am      i56           ;   <:project:>
b55: am      i55           ;   <:system:>
b54: am      i54           ;   <:***:>
b53: am      i53           ;   <:=set:>
b52: am      i52           ;   <:.:>     this two entries
b51: al. w0  a51.          ;   <: :>     should be consecutive
b50: rl. w1  a16.          ;   w1:=zone address;
     jl.     h31.+10000    ;   outtext; (direct return);

;procedure output signed integer
;
b5:  ds. w0  j1.           ;   save integer and link;
     jl.     j2.           ;   goto out space;
                                                                                
\f


;rc 02.02.72                fp utility, system 3, cat adm 2 ...05...

;out integer or byte.byte.
;
b6:  ds. w0  j1.           ;   save integer and link;
     bz  w3  1             ;   w3:=right byte;
     sn  w0  x3            ;   if integer = right byte
     jl.     j2.           ;   then goto out space;
     rs. w3  j1.           ;   next integer := right byte;
     rl. w1  a16.          ;   w1 := zone address;
     bz  w0  0             ;
     jl. w3  h32.+10000    ;   outinteger(left byte);
             1<23+32<12+1  ;
     am      -2            ;   modify next to out point;
j2:  jl. w3  b51.          ;   outtext(space);
     rl. w0  j1.           ;
     jl. w3  h32.+10000    ;   outinteger(integer);
             1<23+ 0<12+1  ;
     jl.    (j0.)          ;   return;

;outtext preceeded with a space
;
b7:  ds. w0  j1.           ;   save addr and link
     jl. w3  b51.          ;   outtext(space);
     dl. w0  j1.           ;
     jl.     b50.          ;   outtext(text);
                                                                          
\f


;rc 1976.05.25                fp utility, system 3, cat adm 2 ...06...

;output name with spaces
;
b9:  ds. w0  j1.           ;
     rl. w3  j1.           ;
     dl  w1  x3+2          ;
     lo. w0  j3.           ;   add spaces to
     lo. w1  j3.           ;   first half of
     ds  w1  x3+2          ;   name
     dl  w1  x3+6          ;
     lo. w0  j3.           ;   add spaces to
     lo. w1  j4.           ;   second half of
     ds  w1  x3+6          ;   name;
     dl. w0  j1.           ;
     jl.     b50.          ;   outtext(name);
j3:  <:<32><32><32>:>
j4:  <:<32><32><0>:>


;connect special output zone
;
b8:  rs. w3  j0.           ;
     jl. w3  h29.-4+10000  ;   stack curr in;
     rl. w2  a3.           ;
     al  w2  x2-10         ;   w2:=addr(outfile name);
     al  w0  1<1+1         ;   
     jl. w3  h28.+10000    ;   connect cur in (outfile);
     sn  w0  0             ;   if ok
     jl.    b1.            ;   then return;
     jl. w3  b12.          ; troubles: outtext(<name>
     jl. w3  b38.          ;    connect
     rl. w2  a3.           ;
     al  w0  x2-10         ;
     jl. w3  b30.          ;    <outfile>
     jl. w3  b32.          ;    <nl> );
     jl.    (j0.)          ;

b1:   bl  w0  x1+h1+1    ;
      sn  w0  4          ;   if -,bs and
      jl.     6          ;   -,mt then
      se  w0  18         ;   return;
      jl.     (j0.)      ;
      al. w1  h54.+10000 ;   w1:=lookup area;
      rl. w2  a3.
      al  w2  x2-10
      jl. w3  b65.      ; prepare output
      al. w1  h20.+10000 ;   w1:=cur in
      jl.     (j0.)     ;   return;  comment: now w1
                           ;   points to cur out zone;

e.  ; end of secondary out procedures
                                                                         
\f


;rc 15.02.72                fp utility, system 3, cat adm 2 ...07...

;scope error
;
;outputs the error text
;   ***<prog name> <parameter> illegal scope<10>
;and exits to end program
;
b14: jl. w3  b26.          ;   outtext(***<prog> <scope>);
     jl. w3  b36.          ;   outtext(illegal scope);
     jl.     b2.           ;   goto end program;

;procedure output
;     ***<prog.name> <scope parameter>
;
;              call            return
;w0                          destroyed
;w1                          destroyed
;w2                          destroyed
;w3          link            destroyed
;
b. j1 w.
j0:          0             ; saved link
b26: rs. w3  j0.           ; start: save link;
     jl. w3  b12.          ;   outtext(***<prog.name>);
     rl. w2  a102.         ;
     jl. w3  b4.           ;   outtext(<scope param>);
     jl.    (j0.)          ;   return;
e.




;procedure reestablish catalog base
;
b. j0 w.
b3:  rs. w3  j0.           ;
     dl. w1  a5.           ;
     al. w3  a15.          ;
     jd      1<11+72       ;   set catbase back;
     jl.    (j0.)          ;   return;
j0:          0             ;   saved link
e.

;procedure next parameter
;
;forwards the pointer a2 to the next parameter in the 
;command stack.  if end list the return is to link
;else to link + 2.
;
;w0                          delim,kind
;w1                          unchanged
;w2                          pointer
;w3        link              destroyed
;
;the pointer points to the item preeceding the parameter.

b11: rl. w2  a2.           ;
     ba  w2  x2+1          ;   step pointer;
     rl  w0  x2            ;   w0:=del,kind;
     sh. w0 (a25.)         ;   if end list
     jl      x3            ;   then goto link
     rs. w2  a2.           ;   else store pointer
     jl      x3+2          ;   and goto link+2;
                                                                             
\f


;rc 76.05.25                fp utility, system 3, cat adm 2 ...08...

;procedure output entry.
;
;outputs the entry addressed by w2.
;at return the link b16 is different from zero.
;
;w0                        destroyed
;w1    scope value         zone address
;w2    addr of entry       unchanged
;w3    link                destroyed
;
b. j20 w.
j0:          0             ; scope value
j1:          0             ; entry address
b16:         0             ; saved link

b15: ds. w3  b16.          ;   save link,entry address;
     rs. w1  j0.           ;   save scope value;
     al  w0  x2+6          ;   output name
     jl. w3  b9.           ;   with spaces;
     jl. w3  b53.          ;   output ( =set );
     rl  w0  x2+14         ;   w0:=kind;
     al. w3  j4.           ;   return:=out.doc.name;
     sl  w0  0             ;   if kind >= 0 then
     jl.     b5.           ;   outinteger(kind);
     al. w1  a26.          ; search mode.kind table:
                           ;   w1:=first of table;
j2:  sn  w0 (x1+4)         ;   if kind = table(w1)
     jl.     j3.           ;   then goto outtext.kind ;
     al  w1  x1+6          ;   index:=index+6;
     se. w1  a27.          ;   if not end table then
     jl.     j2.           ;   compare again;
     jl.     b6.           ;   outbyte.byte(kind);
j3:  al  w0  x1            ; outtext.kind:
     jl.     b7.           ;   outtext(kind);
j5:          1<16          ;
j4:  al. w3  j8.           ; doc.name: return:=out.date;
     rl  w0  x2+16         ;
     sh. w0 (j5.)          ;   if first word of name
     jl.     b6.           ;   is <  1<16 then outbyte(name);
     al  w0  x2+16         ; 
     jl.     b7.           ;   outtext(doc.name);

j8:   bz  w0  x2+30      ; outdate:
      se  w0  4          ;   if contents=4
      sl  w0  32         ;   or contents>=32
      jl.     j6.        ;   then goto outrest;
      rl  w0  x2+24      ;   if date=0
      sn  w0  0          ;   then
      jl.     j6.        ;   goto outrest;
      jl. w3  b64.       ;   outdate;
      am      2          ;

                                                                              
\f


;rc 10.02.72                fp utility, system 3, cat adm 2 ...09...


j6:  al  w2  22            ; out rest: 
j7:  al  w2  x2+2          ;   next:
     am.    (j1.)          ;
     rl  w0  x2            ;   w0:=parameter;
     jl. w3  b6.           ;   outbyte.byte(parameter);
     sh  w2  30            ;   if more parameters
     jl.     j7.           ;   then output again;

                           ; scope comment: outtext(<:  ; :>);
     jl. w3  b63.          ;
     am.    (j0.)          ;   output
     jl. w3  b59.          ;   scope text;
     rl. w2  j1.           ; look for permanent in aux catalog:
     rl  w0  x2+14         ;   if kind >= 0 then
     sl  w0  0
     jl.     j13.          ;   goto output head;
     bz  w2  x2            ;   w2 := first slice;
     al  w2  x2-1<11       ;
     sh  w2  -1            ;   if not in any aux cat
     jl.     j13.          ;   then goto out head;
     am     (92)           ;
     am     (x2)           ;
     al  w2  -18           ;   w2:=address of bs dev name;
     dl  w1  x2+2          ;   move name
     ds. w1  j14.          ;   to
     dl  w1  x2+6          ;   own
     ds. w1  j15.          ;   area;
     jl. w3  b52.          ;   outtext(<:.:>);
     al. w0  j16.          ;
     jl. w3  b50.          ;   outtext(<device name>);
                           ; out head:
j13: jl. w3  b62.          ;   outtext(<:<10>           ; :>);
     rl. w2  j1.           ;
     bz  w0  x2            ;
     jl. w3  b5.           ;   outinteger(<first slice>);
     bz  w0  x2+1          ;
     ls  w0  -3            ;
     jl. w3  b5.           ;   outinteger(<name key>);
     bz  w0  x2+1          ;
     la. w0  a28.          ;
     jl. w3  b5.           ;   outinteger(<cat key>);
     rl  w0  x2+2          ;
     jl. w3  b5.           ;   outinteger(<interval lower>);
     rl  w0  x2+4          ;
     jl. w3  b5.           ;   outinteger(<interval upper>);
     jl. w3  b61.          ;   outtext(nl);
     jl.    (b16.)         ;   return to link;

j16:         0             ; device name
j14:         0             ;
             0             ;
j15:         0             ;

e.
                                                                              
\f


;rc 25.05.73                fp utility, system 3, cat adm 2 ...10...


;error text output procedures
;
;as a rule:
;                         at call        at return
;w0         add of text or integer       destroyed
;w1                                      cur out zone
;w2                                      unchanged
;w3         link                         destroyed

;error texts:

b48: am      i48           ;   <: error<10>:>
b47: am      i47           ;   <: protected<10>:>
b46: am      i46           ;   <: entry in use<10>:>
b45: am      i45           ;   <: catalog error<10>:>
b44: am      i44           ;   <: change bs device impossible<10>:>
b43: am      i43           ;   <: bs device not ready<10>:>
b42: am      i42           ;   <: no resources<10>:>
b41: am      i41           ;   <: call<10>:>
b40: am      i40           ;   <: no entries found<10>:>
b39: am      i39           ;   <: bs device unknown<10>:>
b38: am      i38           ;   <: connect :>
b37: am      i37           ;   <: unknown<10>:>
b36: am      i36           ;   <: illegal scope<10>:>
b35: am      i35           ;   <: param :>
b34: am      i34           ;   <:***:>
b33: am      i33           ;   <: :>
b32: am      i32           ;   <:<10>:>
b31: al. w0  a31.          ;   <:.:>
b29=b33-4                  ; cf ...03...


;outtext on current out

b30: jl.     h31.-2+10000  ;

;outtext program name and set ok to sorry
;
b12: rs. w3  a22.          ;   ok:=return;
     jl. w3  b3.           ;   reestablish catbase;
     jl. w3  b34.          ;   outtext ( ***
     rl. w0  a3.           ;
     rl. w3  a22.          ;
     jl.     b30.          ;   <program name> );

;parametererror.
;outputs the text
;   ***<prog name> param <parameter><10>
;and exits to end program
b13: jl. w3  b12.          ;   outtext(***<prog name>);
     jl. w3  b35.          ;   outtext(param);
     rl. w2  a2.           ;   w2:=pointer;
     jl. w3  b4.           ;   output parameter;
     jl. w3  b32.          ;   output a nl;
     jl.     b2.           ;   goto end program;

                                                                      \f


;rc 16.02.72                fp utility, system 3, cat adm 2 ...11...

;procedure find entry scope
;
;finds the scope of the entry addressed by w2
;(w2 should point to first slice).  the scope value is given
;according to the following code:
;
;   -2: illegal scope, interval contained in max
;    0: temp
;    2: login
;    4: user
;    6: project
;    8: system
;   10: illegal scope, interval not in max
;   12: not visible
;
;        entry           return
;w0                     destroyed
;w1                     scope value
;w2   addr of entry     unchanged
;w3   link              destroyed
;
b. j13 w.
b23: rs. w3  j0.           ; start: save link;
     rl  w1  x2            ;   if unused place in catalog
     sn  w1  -1            ;   then goto
     jl.     j12.          ;   not visible;
     dl  w1  x2+4          ; check interval:
     al  w1  x1+1          ; check contains standard:
     sh. w0 (a6.)          ;   if int.low > low.stand
     sh. w1 (a7.)          ;   or int.upp < upp.stand
     jl.     j4.           ;   then goto check contained in stand;
     al  w1  x1-1          ;
     bz  w3  x2+1          ;
     la. w3  a28.          ;   w3:=cat.key;
     sn. w0 (a6.)          ;   if interval
     se. w1 (a7.)          ;   <> standard then
     jl.     j1.           ;   goto compare with user;
     sl  w3  3             ; interval is standard: if key>=3
     jl.     j1.           ;   then goto compare with user;
     se  w3  2             ;   if key = 0 or 1
     jl.     j10.          ;   then goto temp
     jl.     j9.           ;   else goto login;
j1:  sn. w0 (a8.)          ; compare with user:
     se. w1 (a9.)          ;   if interval <> user
     jl.     j2.           ;   then goto compare with max;
     sn  w3  3             ;   if key = 3
     jl.     j8.           ;   then goto user
     jl.     j11.          ;   else goto inside max;
                                                                         \f


;rc 11.02.72                fp utility, system 3, cat adm 2 ...12...

;find entry scope continued:

j2:  sn. w0 (a10.)         ; compare with max:
     se. w1 (a11.)         ;   if interval <> max
     jl.     j3.           ;   then goto test contains max;
     sn  w3  3             ;   if key=3 then
     jl.     j7.           ;   goto project else
     jl.     j11.          ;   else goto inside max;
j3:  al  w1  x1+1          ; test contains max:
     sh. w0 (a10.)         ;   if int.low > max.low
     sh. w1 (a11.)         ;   or int.upp < max.upp
     jl.     j13.          ;   then goto test inside max;
     sn  w3  3             ;   if key = 3
     jl.     j6.           ;   then goto system;
     jl.     j5.           ;   else goto not in max;
j4:  al  w1  x1-2          ; check contained in standard:
     sl. w0 (a6.)          ;   if int.low < stand.low
     sl. w1 (a7.)          ;   or int.upp > stand.upp
     jl.     j12.          ;   then goto not visible
     jl.     j11.          ;   else goto inside max
j13: al  w1  x1-1          ; test inside max:
     sl. w0 (a10.)         ;   if int.low < max.low
     sl. w1 (a11.)         ;   or int.upp > max.upp
     jl.     j5.           ;   then goto not in max
     jl.     j11.          ;   else goto inside max;

j12: am      2             ; not visible
j5:  am      2             ; not in max
j6:  am      2             ; system
j7:  am      2             ; project
j8:  am      2             ; user
j9:  am      2             ; login
j10: am      2             ; temp
j11: al  w1  -2            ; inside max
     jl.    (j0.)          ;   return to link;
j0:          0             ; saved link;

e.



                                                                   
\f


;rc 11.02.72                fp utility, system 3, cat adm 2 ...13...


;catalog scan procedures
;
b.  j3  w.

;procedure prepare catalog scan
;
;the area process is created, the input message is prepared
;and the length of the catalog is found.
;
;                         
;w0                            destroyed
;w1                            destroyed
;w2                            length of catalog
;w3          link              destroyed
;
j1:          0             ; link

b17: rs. w3  j1.           ;
     al. w0  a100.         ;   w0:=first free core;
     rl. w1  a1.           ;   w1 :=
     al  w1  x1-2          ;   last freee core;
     ds. w1  a77.          ;   set first and last;
     al. w3  a74.          ;
     jd      1<11+52       ;   create area process(<:catalog:>);
     se  w0  0             ;   if not created then
     jl.     b28.          ;   goto resource trouble;
     jd      1<11+4        ;   process description(<:catalog:>);
     am     (0)            ;
     rl  w2  18            ;   w2 := length of catalog;
     rs. w2  a70.          ;   save length of catalog;
     jl.    (j1.)          ;   return;


;procedure start catalog scan
;
;the scan may be started either at the beginning of the catalog
;or at the segment no given by w2.
;
b19: al  w2  0             ;   w2:= 0;
b18: rs. w2  a78.          ;   segment := w2;
     rl. w2  a70.          ;   segments left :=
     rs. w2  a71.          ;   length of catalog;
                                                                           
\f


;rc 16.02.72                fp utility, system 3, cat adm 2 ...14...

;procedure input catalog segments
;
;inputs the next segments of the catalog to the buffer
;if any segments are left.  if some segments are read
;the return is to link - if no segments are read the
;return is to link+2.
;
b20: rl. w2  a71.          ;   if segments left
     sh  w2  0             ;   is <= 0
     jl      x3+2          ;   then goto link+2;
     rs. w3  j1.           ;   save link;
     al. w3  a74.          ; start transport:
j2:  al. w1  a75.          ;
     jd      1<11+16       ;   send message
     al. w1  a79.          ; check transport:
     jd      1<11+18       ;   wait answer;
     sn  w0  2             ;   if reserved
     jl.     j2.           ;   then repeat;
     bz  w3  x1            ;
     sn  w0  1             ;   if result <> norm.answ.
     se  w3  0             ;   or any status bit <> 0
     jl.     j3.           ;   then goto catalog error;
     rl. w2  a71.          ;
     rl  w3  x1+2          ;
     ls  w3  -9            ;   seg.trans := bytes // 512 ;
     rl. w0  a78.          ;   segment no :=
     wa  w0  6             ;   segment no
     sl. w0 (a70.)         ;    + seg.transf
     ws. w0  a70.          ;   modulo length of
     rs. w0  a78.          ;   catalog;
     ws  w2  6             ;   seg.left :=
     rs. w2  a71.          ;   seg.left - seg.trans ;
     sh  w2  -1            ;   if seg.left < 0
     wa  w3  4             ;   seg.trans:=seg.trans+seg.left ;
     ls  w3  9             ;   buf.length:=seg.trans*512 ;
     rl. w2  a76.          ;   entry.adr:=first.buf;
     al  w0  x2+509        ;   last.in.seg:=first.buf+509;
     wa  w3  4             ;   last.in.buf:=first.in.buf
     ds. w0  a73.          ;    + buf.length;
     jl.    (j1.)          ;   return;


;catalog error:

j3:  al  w2  1             ;
     ls  w2 (0)            ;
     lo  w2  x1            ;   w2:=log.status;
     al. w1  a74.          ;   w1:=addr of <:catalog:> ;
     jl.     b10.          ;   goto end ærogram;
                                                                          
\f


;rc 08.02.72                fp utility, system 3, cat adm 2 ...15...

;procedure next entry
;
;forwards the entry address in w2 to the next entry in the
;buffer.  if end buffer is met the return is to link + 2
;else to link.
;
;                            unchanged
;w1                          unchanged
;w2        entry address     new entry address
;w3        link              unchanged
;
b21: al  w2  x2+34         ;   entry.adr:=entry.adr+entry.length;
     sh. w2 (a73.)         ;   if entry <= last.seg
     jl      x3            ;   then return;
     al  w2  x2+511        ; step segment: skip last word;
     rs. w2  a73.          ;   last on segment :=
     al  w2  x2-509        ;   entry address + 509 ;
     sl. w2 (a72.)         ;   if buf exhausted
     jl      x3+2          ;   then goto link+2
     jl      x3            ;   else goto link;

e.

                                                                             
\f


;rc 17.02.72                fp utility, system 3, cat adm 2 ...16...


;working locations:

a1:        0        ; last available core
a2:        0        ; param pointer in fp stack
a3:        0        ; prog. name address
a4:        0        ;
a5:        0        ; catalog base
a6:        0        ;
a7:        0        ; standard interval
a8:        0        ;
a9:        0        ; user interval
a10:       0        ;
a11:       0        ; max interval
a12:       0        ;
a13:       0        ; interval in scope
a101:      0        ; aux cat reference in scope
a102:      0        ; address of scope parameter
a14:       0        ; value of scope
a15:       0        ; a zero
a16:       0        ; output zone address
a17:       0        ; name area no 1
a18:       0        ; used for device name in scope in
a19:       0        ; the programs: search, scope, clear
a20:       0
a21:       0        ; for name table address
a22:       0        ; ok status
a23: 4<12+10        ; space,name
a24: 8<12+10        ; point,name
a25: 4<12-1         ; test end list
a28: 2.111          ; mask for cat key
a29: 8<12+ 4        ; point,integer



;the next are used in catalog scan:

a70:       0        ; catalog length
a71:       0        ; segments left
a72:       0        ; last in buffer
a73:       0        ; last on segment
a74: <:catalog:>,0,0
a75: 3<12           ; message : op = input
a76:       0        ; first
a77:       0        ; last
a78:       0        ; segment
a79:   0,r.8        ; answer       
                                                                                 
\f


;rc 09.02.72                fp utility, system 3, cat adm 2 ...17...

;procedure test bs device specifications
;
;the entry addressed by w2 is compared to the bs device
;specifications (if any) given in a17-a20 and a101.
;if the entry meets the specifications (in particular if
;the specifications are empty) the return is to link.
;if the entry does not meet the specifications the re-
;turn is to link + 2.
;
;            at call          at return
;w0                         destroyed
;w1                         unchanged
;w2       entry address     unchanged
;w3          link           destroyed
;
b. j4 w.
b24: rl. w0  a101.         ; start:
     sn  w0  0             ;   if no specifications
     jl      x3            ;   then return;
     ds. w2  j4.           ;
     rl  w1  x2+14         ;
     sl  w1  0             ;   if kind(entry) >= 0
     jl.     j3.           ;   then goto area entry;
     bz  w1  x2            ; not area entry:
     bz  w2  1             ;   w1:=first slice(entry);
                           ;   w2:=first slice(scope);
     sh  w0  -1            ;   if (device=main cat device
     se  w1  0             ;   and first slice=0)
     sn  w1  x2            ;   or first slice fits
     am      -2            ;   then return to link
j1:  al  w3  x3+2          ;   else return to link+2;
j2:  dl. w2  j4.           ;
     jl      x3            ;   return;

j3:  dl  w1  x2+18         ; area entry:
     sn. w0 (a17.)         ;   if name of device(entry)
     se. w1 (a18.)         ;   =
     jl.     j1.           ;   name device(scope)
     dl  w1  x2+22         ;   then return
     sn. w0 (a19.)         ;   to link
     se. w1 (a20.)         ;   else
     jl.     j1.           ;   return
     jl.     j2.           ;   to link+2;

             0             ; saved w1
j4:          0             ; saved w2

e.


                                                                            
\f


;rc 25.05.73                fp utility, system 3, cat adm 2 ...18...

;texts:

a33: a51: <:<32><0>:>
a32: a61: <:<10><0>:>
a31: a52: <:.<0>:>
a34: a60: <:***<0>:>
a35:      <: param <0>:>
a36:      <: illegal scope<10><0>:>
a37:      <: unknown<10><0>:>
a38:      <: connect <0>:>
a39:      <: bs device unknown<10><0>:>
a40:      <: no entries found<10><0>:>
a41:      <: call<10><0>:>
a42:      <: no resources<10><0>:>
a43:      <: bs device not ready<10><0>:>
a44:      <: change bs device impossible<10><0>:>
a45:      <: catalog error<10><0>:>
a46:      <: entry in use<10><0>:>
a47:      <: protected<10><0>:>
a48:      <: error<10><0>:>




a53:      <:=set<0>:>
a54=a60  ;<:***<0>:>
a63:      <:  ; <0>:>

a59:      <:temp:>,0,0     ; start of scope table
a58:      <:login:>,0,0
a57:      <:user:>,0,0
a56:      <:project:>,0
a55:      <:system:>,0,0
          <:own:>,0,0,0
a96=a59+2,a97=a59+4
a98=a59+6,a99=k-a59        ; end of table

a62:      <:<10>           ; <0>:>

;i-names are used for addressing by succesive am-es
i32=a32-a31,i33=a33-a32,i34=a34-a33,i35=a35-a34,i36=a36-a35
i37=a37-a36,i38=a38-a37,i39=a39-a38,i40=a40-a39,i41=a41-a40
i42=a42-a41,i43=a43-a42,i44=a44-a43,i45=a45-a44,i46=a46-a45
i47=a47-a46,i48=a48-a47


i52=a52-a51,i53=a53-a52,i54=a54-a53,i55=a55-a54,i56=a56-a55
i57=a57-a56,i58=a58-a57,i59=a59-a58,i60=a60-a59,i61=a61-a60
i62=a62-a61,i63=a63-a62
                                                              
\f


;rc 03.04.74               fp utility, system 3, cat adm 2 ...19...

;mode kind table

a26:
    <:ip:> ,0  ,  1<23+ 0<12+ 0 ; internal process
    <:bs:> ,0  ,  1<23+ 0<12+ 4 ; backing storage area
a103=k-2  ; mode.kind bs
    <:tw:> ,0  ,  1<23+ 0<12+ 8 ; typewriter
    <:tro:>,0  ,  1<23+ 0<12+10 ; tape reader odd parity
    <:tre:>,0  ,  1<23+ 2<12+10 ; tape reader even parity
    <:trn:>,0  ,  1<23+ 4<12+10 ; tape reader no parity
    <:trf:>,0  ,  1<23+ 6<12+10 ; tape reader flexo code
    <:tpo:>,0  ,  1<23+ 0<12+12 ; tape punch odd parity
    <:tpe:>,0  ,  1<23+ 2<12+12 ; tape punch even parity
    <:tpn:>,0  ,  1<23+ 4<12+12 ; tape punch no parity
    <:tpf:>,0  ,  1<23+ 6<12+12 ; tape punch flexo code
    <:tpt:>,0  ,  1<23+ 8<12+12 ; tape punch teletype code
    <:lp:> ,0  ,  1<23+ 0<12+14 ; line printer
    <:crb:>,0  ,  1<23+ 0<12+16 ; card reader binary
    <:crd:>,0  ,  1<23+ 8<12+16 ; card reader decimal
    <:crc:>,0  ,  1<23+10<12+16 ; card reader ebcdic
    <:mto:>,0  ,  1<23+ 0<12+18 ; magnetic tape odd parity
    <:mte:>,0  ,  1<23+ 2<12+18 ; magnetic tape even parity
    <:nrz:>,0  ,  1<23 +4<12+18 ; magnetic tape 800 bpi odd
    <:nrze:>   ,  1<23 +6<12+18 ; magnetic tape 800 bpi even
    <:pl:> ,0  ,  1<23+ 0<12+20 ; plotter
a27:


                                                                           

\f


;rc 08.02.72                fp utility, system 3, cat adm 2 ...20...


;the program lookup

s.  c9  w.

g4:  jl. w1  b0.           ; start: initialize program;
     jl. w3  b8.           ;   if left side then connect;
     rs. w1  a16.          ;   save output zone address;
     jl. w3  b17.          ;   prepare catalog scan;
c1:  jl. w3  b11.          ; next lookup: next param;
     jl.     b2.           ;   if end list then end program;
     bl  w3  x2+10         ; check param:
     sn. w0 (a23.)         ;   if delim,kind <> space,name
     sn  w3  8             ;   or next delim = point
     jl.     b13.          ;   then goto paramerror;
     dl  w1  x2+4          ; move name:
     ds. w1  a18.          ;   move name
     dl  w3  x2+8          ;   to name
     ds. w3  a20.          ;   area;
     aa  w3  2             ; compute name key:
     wa  w3  4             ;
     ba  w3  6             ;
     al  w2  0             ;
     wd. w3  a70.          ;
     rs. w2  c2.           ;   save name key;
     jl. w3  b18.          ; start scan: start cat scan 
                           ;   at entry no <name key> ;
     rl  w3  x2+510        ;   count:=no of entries with
                           ;   this name key;
     sn  w3  0             ;   if count = 0
     jl.     c8.           ;   then goto done;
     rs. w3  c3.

c4:  rl  w3  x2            ; check entry:
     sn  w3  -1            ;   if unused place then
     jl.     c6.           ;   goto step entry;
     bz  w3  x2+1          ; compare name key:
     ls  w3  -3            ;
     se. w3 (c2.)          ;   if name key does not fit
     jl.     c6.           ;   then goto step entry;
                                                                            
\f


;rc 1977.02.14                fp utility, system 3, cat adm 2 ...21...

; lookup, page 2


     dl  w1  x2+8          ; compare name:
     sn. w0 (a17.)         ;   if first doubleword
     se. w1 (a18.)         ;   does not fit
     jl.     c5.           ;   then goto count;
     dl  w1  x2+12         ;
     sn. w0 (a19.)         ;   if second doubleword
     se. w1 (a20.)         ;   does not fit
     jl.     c5.           ;   then goto count;
     jl. w3  b23.          ;   find entry scope;
     sh  w1  10            ;   if visible then
     jl. w3  b15.          ;   output entry;
c5:  rl. w1  c3.           ; check count:
     al  w1  x1-1          ;   count:=count-1
     sn  w1  0             ;   if count = 0
     jl.     c8.           ;   then goto done;
     rs. w1  c3.           ;
c6:  jl. w3  b21.          ; next entry: step entry;
     jl.     c4.           ;   more in buf: goto check entry;
     rs. w1  c3.           ;   (in order to force reading of
                           ;   the whole catalog)
     jl. w3  b20.          ;    goto input cat seg;
     jl.     c4.           ;   more catalog: goto check;
c8:  al  w0  0             ; done: w0:=any output;
     rx. w0  b16.          ;   next any output:=false;
     se  w0  0             ;   if any output then
     jl.     c1.           ;   then goto next lookup;
     jl. w3  b12.          ; not found:  outtext(***<name>
     rl. w2  a2.           ;
     jl. w3  b4.           ;    <param>
     jl. w3  b37.          ;    unknown );
     jl.     c1.           ;   goto next lookup;

c2:          0             ; name key
c3:          0             ; count

e.                         ; end of lookup
                                                         
\f


;rc 78.04.11                fp utility, system 3, cat adm 2 ...22...

;the program search

b. c6 w.

g5:  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;
     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  b15.          ;  ok: output entry;
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 search
b64:
; outdate
b. a5, b2 w.
     rs. w3  b0.          ; save return
     jl. w3  b2.          ; convclock
     rs. w0  a2.          ; save date
     rs. w3  a3.          ; save clock
     rl. w1  a16.         ; w1:=output zone
     al. w0  a5.          ;
     am      -2048        ;
     jl. w3  h31.+12048   ; outtext(<: d.:>);
     rl. w0  a2.          ;
     am      -2048        ;
     jl. w3  h32.+12048   ; outint(date);
     0<23+48<12+6         ;
     al  w2  46           ;
     am      -2048        ;
     jl. w3  h26.+12048   ; outchar(.);
     rl. w0  a3.          ;
     am      -2048        ;
     jl. w3  h32.+12048   ; outint(clock);
     0<23+48<12+4         ;
     jl.     (b0.)        ; return;
a2:  0                    ; saved clock
a3:  0                    ; saved date
a5:  <: d.<0>:>           ; textconstant
b0:  0                    ; saved return
b2:
e.
\f


;rc 78.04.11           fp utility, system 3, cat adm 2 ...22a...




; procedure convert clock  (short clock)
;
;
; this procedure is an inversion of the following algorithm
; for computing day-number from a date  (year,month,date)
; extended with a conversion of the time of the day:
;
;
;    if month<3 then
;    begin
;      month:=month+12;
;      year:=year-1;
;    end;
;    dayno:=(1461*year)//4 + (153*month+3)//5 + day;
;
;
;
;      call:               return:
;
; w0   short clock         year*10000+month*100+date
; w1   irrelevant          destroyed
; w2   irrelevant          destroyed
; w3   return              hour*100+minute
;
;
;
b.  a13, b0  w.

     ld  w2    -100    ;    clear w1,w2
     rs. w3     a8.    ;    save return address
     al  w3     0      ;    clear w3
     ld  w0     10     ;    w3,w0:=short clock<10 (=truncated clock>9)
     wd. w0     a2.    ;    w0:=dayno
     al  w3  x3+a13    ;    add minute rounding
     wd. w3     a1.    ;    w3:=hour
     wd. w2     a0.    ;    w2:=minute
     ds. w3     a10.   ;    save minute,hour
     al  w3     0      ;    clear w3
     ld  w2    -100    ;    clear w1,w2
     ls  w0     2      ;    w0:=dayno*4
     wa. w0     a5.    ;    add offset
     wd. w0     a4.    ;    w0:=year
     ls  w3    -2      ;    w3 is converted 
     wm. w3     a6.    ;    to fifthdays
     al  w3  x3+a11    ;    w3:=w3+three months offset
     wd. w3     a3.    ;    w3:=month
     sh  w3     12     ;    if month>12 then
     jl.        b0.    ;    begin
     ba. w0     1      ;      increase year
     al  w3  x3-12     ;      decrease month
b0:  al  w2  x2+a12    ;    end
     wd. w2     a6.    ;    w2:=date
     rs  w3     2      ;    save month (in w1)
     wm. w0     a7.    ;    w0:=year*100
     wa  w0     2      ;      + month
     wm. w0     a7.    ;      * 100
     wa  w0     4      ;      + date
     rl. w3     a10.   ;    w3:=hour
     wm. w3     a7.    ;      * 100
     wa. w3     a9.    ;      + minute
     jl.       (a8.)   ;    return
\f


;rc 78.04.11              fp utility, system 3, cat adm 2 ...22b...



a0:  1172              ;    units per minute
a1:  70313             ;    units per hour
a2:  1687500           ;    units per day
a3:  153               ;    days in the five months (march-july)
a4:  1461              ;    days in four years
a5:  99111             ;    offset for computing year 
a6:  5                 ;
a7:  100               ;    constant for packing date and time
a8:  0                 ;    saved return address
a9:  0                 ;    saved minute
a10: 0                 ;    saved hour

a11=461                ;    three months offset
a12=5                  ;    one days offset
a13=586                ;    half a minute
e.
\f


;rc 78.04.11              fp utility, system 3, cat adm 2 ...22c...



b65:

; procedure prepare entry for textoutput
;  w0  not used
;  w1  lookup area
;  w2  name addr, entry must be present
;  w3  return addr

b. a2 w.
     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.



a100=k                     ; start buf for cat scan
                                                                                 \f


;rc 28.02.72                fp utility, system 3, cat adm 2 ...23...



;the core area of the code for lookup and search is
;used as data area for the other programs:
a110=g4     ; name area 2
a111=g4+2
a112=g4+4   ;
a113=g4+6
a114=g4+8   ; for name table address

a119=g4+10  ; start of head of entry
a120=g4+14
a115=g4+16  ; name area 3
a116=g4+18
a117=g4+20
a118=g4+22
a127=g4+24  ; tail: kind
a128=g4+26  ; doc.name
a129=g4+28  ;   first doubleword
a130=g4+32  ;   second doubleword
a131=g4+34  ; name table address
a132=g4+36  ; file
a133=g4+38  ; block
a134=g4+40  ; contry
a135=g4+42  ; length

a140=g4+44  ; name area 4
a141=g4+46
a142=g4+48
a143=g4+50
a144=g4+52  ; name table address

;area for entry lookup
;used by end program

a80=g4+56   ; first slice,keys
a81=g4+57   ; keys
a82=g4+58   ; interval low
a83=g4+60   ; interval up
a84=g4+62   ; name start
a85=g4+64   ; first doubleword
a86=g4+68   ; second doubleword
a87=g4+70   ; kind
a88=g4+72   ; doc.name start
a89=g4+74   ; first doubleword
a90=g4+78   ; second doubleword
a91=g4+80   ; name table address
a92=g4+82   ; file
a93=g4+84   ; block
a94=g4+86   ; contry
a95=g4+88   ; length
\f


;rc 28.02.72                fp utility, system 3, cat adm 2 ...24...

;procedure read scope parameter
;
;reads the scope specifications (if any) and initializes the vari-
;ables a12-a14,a17-a20,a101-a102 as described below.
;in case of missing or illegal scope end program is entered after
;output of an error message.
;
;value of variables:
;
;         temp     login    user     project   system   own
;a12-a13  stand    stand    user     max       max      undefined
;a14      0        2        4        6         8        10
;
;         no bs device        not main cat dev    main cat device
;a17-a20     0                 device name         device name
;a101        0                1<11+table rel     1<23+1<11+table rel
;
;a102:   address of scope parameter in command stack
;

;            at call           at return
;w0                            destroyed
;w1                            destroyed
;w2                            destroyed
;w3          link              scope value (as a14)
;
b. j12 w.
b22: rs. w3  j0.           ; start: save link;
     jl. w3  b11.          ;   next param;
     jl.     b2.           ;   if end list then end program;
     rs. w2  a102.         ;   save param address;
     se. w0 (a23.)         ;   if del,kind <> space,name
     jl.     b14.          ;   then goto scope error;
     al  w3  0             ; search in table:
     dl  w1  x2+4          ;   index := 0;
j1:  sn. w0 (x3+a59.)      ;  compare scope name:
     se. w1 (x3+a96.)      ;   if param <> table(index)
     jl.     j2.           ;   then
     dl  w1  x2+8          ;   goto
     sn. w0 (x3+a97.)      ;   next index;
     se. w1 (x3+a98.)      ;
     jl.     j3.           ;
     ls  w3  -2            ; scope found: save value;
     rs. w3  a14.          ;   interval in scope:=
     jl.     x3+j4.        ;   case scope of
j4:  am      0             ;   ( standard
     am      -4            ;     standard
     am      -4            ;     user
     am      0             ;     max
     dl. w1  a11.          ;     max
     ds. w1  a13.          ;     undefined );
     se  w3  6             ; test project allowed:
     jl.     j5.           ;   if scope = project then
     sn. w0 (a8.)          ;   begin
     se. w1 (a9.)          ;     if max = user
     jl.     j5.           ;     then goto scope error
     jl.     b14.          ;   end;
j5:  rl  w0  x2+10         ; look for bs dev. spec:
     sl. w0 (a29.)         ;   if next del <> point
     sh. w0 (a25.)         ;   or next del = end list
     jl.    (j0.)          ;   then return;
     se. w0 (a24.)         ;   if next del,kind <> point,name
     jl.     b14.          ;   then goto scope error;
                                                                                 \f


;rc 10.02.72                fp utility, system 3, cat adm 2 ...25...

;procedure read scope parameter continued:

     jl. w3  b11.          ;   next param;
     ps      -2            ;   end list: testoutput;
     rl  w0  x2+10         ; bs device specified:
     sl. w0 (a29.)         ;   if next del = point
     jl.     b14.          ;   then goto scope error;
     dl  w1  x2+8          ;
     ds. w1  a20.          ;   move device name
     dl  w1  x2+4          ;   to name area
     ds. w1  a18.          ;
     al  w2  0             ; search device: index:=0;
j6:  am     (92)           ;  next device:
     rl  w3  x2            ;   w3 := name.table(index);
     sn  w3  0             ;   if end table
     jl.     j12.          ;   then goto not found;
     sn  w0 (x3-18)        ;   if first half
     se  w1 (x3-16)        ;   name(param) <> name(index)
     jl.     j7.           ;   then goto step device;
     dl. w1  a20.          ;
     sn  w0 (x3-14)        ;   if second half
     se  w1 (x3-12)        ;   name(param) <> name(index)
     jl.     j8.           ;   then goto step device;
     dl. w1  a74.+2        ; found:
     sn  w0 (x3-28)        ;   reference :=
     se  w1 (x3-26)        ;   if catalog(device)
     jl.     j9.           ;   = main catalog
     dl. w1  a74.+6        ;   then 1<23 + 1<11 + w2
     sn  w0 (x3-24)        ;   else
     se  w1 (x3-22)        ;   1<11+w2;
     jl.     j9.           ;
     lo. w2  j10.          ;
j9:  lo. w2  j11.          ;
     rs. w2  a101.         ;
     rl. w3  a14.          ;
     jl.    (j0.)          ;   return;

j8:  dl. w1  a18.          ; step device:
j7:  al  w2  x2+2          ;   index:=index+2;
     jl.     j6.           ;   goto next device;

j10:         1<23          ;
j11:         1<11          ;
                                                                                     \f


;rc 15.02.72                fp utility, system 3, cat adm 2 ...26...

;procedure read scope parameter continued

j3:  dl  w1  x2+4          ; next index:
j2:  al  w3  x3+8          ;   index:=index+8;
     se  w3  a99           ;   if index <> length of table
     jl.     j1.           ;   then goto compare
     jl.     b14.          ;   else goto scope error;

j0:          0             ; saved link

j12: jl. w3  b26.          ; bs device not found:
     jl. w3  b39.          ;   outtext(***<prog.name> bs device unknown
     jl.     b2.           ;   goto end program;

e.  ;end procedure read scope parameter
     
;call error:
;     ***<prog.name> call
;
;followed by end program
;
b25: jl. w3  b12.          ;   outtext(***<prog.name> call);
     jl. w3  b41.          ;
     jl.     b2.           ;   goto end program;

;resource trouble
;     ***<prog.name> no resources
;
;followed by end program
;
b28: jl. w3  b12.          ;   outtext(***<prog.name>
     jl. w3  b42.          ;   no resources);
     jl.     b2.           ;   goto end program;

                                                               
\f


;rc 78.04.10                fp utility, system 3, cat adm 2 ...27...

;the program clear:
;
b. c4 w.
g6:  jl. w1  b0.           ; start: init program;
     jl.     b25.          ;   left side: call error;
     jl. w3  b22.          ;   read scope parameter;
     sl  w3  8             ;   if scope value >= 8
     jl.     b14.          ;   then goto scope error;
c0:  dl. w1  a13.          ; set cat base:
     al. w3  a15.          ;   cat.base := interval(scope);
     jd      1<11+72       ;
c1:  jl. w3  b11.          ; next clear: next param;
     jl.     b2.           ;   end list: goto end program;
     bz  w1  x2+10         ;
     sn. w0 (a23.)         ;   if del,kind <> space,name
     sn  w1  8             ;   or next delim = point
     jl.     b13.          ;   then goto paramerror;
     dl  w1  x2+4          ; move name to area:
     ds. w1  a85.          ;
     dl  w1  x2+8          ;
     ds. w1  a86.          ;
     al. w3  a84.          ; create entry process:
     al. w1  a80.          ; lookup entry(name);
     jd      1<11+76       ;
     se  w0  0             ;   if not found
     jl.     c2.           ;   then goto unknown;
     al  w2  x1            ; test scope:
     jl. w3  b23.          ;   find scope;
     se. w1 (a14.)         ;   if scope(entry) <> scope in call
     jl.     c2.           ;   then goto unknown;
     jl. w3  b24.          ;   test bs device spec;
     jl.     c3.           ;   ok: goto remove;
                           ;   not ok:
c2:  jl. w3  b26.          ; unknown: outtext(***<prog.name>
     rl. w2  a2.           ;   <scope>
     jl. w3  b4.           ;   <param>
     jl. w3  b37.          ;   unknown );
     jl.     c0.           ;   goto set catbase);
c3:  al. w3  a84.          ; remove:
     jd      1<11+48       ;   remove entry;
     se  w0  2             ;   if catalog error,
     jl.     c4.           ;      doc unmounted or not ready
     jl. w3  b26.          ;   then outtext(<:***<prog><scope><10>:>);
     jl. w3  b43.          ;                  bs device not ready<10>:>);
     jl.     c1.           ;   goto next clear;
c4:  se  w0  5             ;                   
     jl.     c1.           ;   goto next clear;
     jl. w3  b26.          ; entry in use:
     rl. w2  a2.           ;   outtext(<:***<prog name> <scope>
     jl. w3  b4.           ;    <param>
     jl. w3  b46.          ;    entry in use<10>:>);
     jl.     c0.           ;   goto set catbase;
e.
                                                                       \f


;rc 21.08.73                fp utility, system 3, cat adm 2 ...28...

;the program scope:

b. c40 w.

;error text output:

c20: am      -4            ; error cause 4 (protected)
c7:  am      1             ; error cause 8 (change bs device)
c11: am      1             ; error cause 7 (catalog error)
c0:  al  w0  6             ; error cause 6 (no resources)
c1:  rs. w0  c2.           ; start: save cause;
     jl. w3  b3.           ;   reestablish cat base;
     jl. w3  b26.          ;   error text:
     rl. w2  a2.           ;    ***<prog.name> <scope>
     jl. w3  b4.           ;    <param>
     am.    (c2.)          ;
     bl. w1  c3.           ;   outtext(text(cause));
     jl. w3  x1+b30.       ;
     jl.     c5.           ;   goto next scope;
c2:          0             ; saved cause;

;text table:
;causes: 0,1,2,3,4,5,6,7,8
;texts:
;error,error,bs device not ready,unknown,
;protected,entry in use, no resources,catalog error
;change bs device impossible
h.
c3:b48-b30,b48-b30,b43-b30,b37-b30,
   b47-b30,b46-b30,b42-b30,b45-b30
   b44-b30
w.

;procedure find old entry:

;sets the catalog base to the scope interval and
;makes a catalog lookup of the entry name (a110)
;into the lookup area a80.
;if no entry is found the return is to link. if
;an entry is found the return is to link+2.  at
;return the name address is still in w3 and the
;catalog base is still the scope interval.

;           call         return
;w0                      undefined
;w1                      undefined
;w2                      undefined
;w3        link          name address
;
b. j5 w.
j0:          0             ; saved link
c23: rs. w3  j0.           ; start: save link;
     dl. w1  a13.          ;   set catbase
     al. w3  a15.          ;   to scope interval;
     jd      1<11+72       ;
     al. w3  a110.         ;
     al. w1  a80.          ; lookup entry(name);
     jd      1<11+76       ;
     sn  w0  0             ;   if found then
     jl.     j1.           ;   then goto test interval;
     sn  w0  3             ;   if entry unknown
     jl.    (j0.)          ;   then return to link;
     jl.     c11.          ;   else goto catalog error;

                                                                         \f


;rc 25.05.73                fp utility, system 3, cat adm 2 ...29...

;scope page 2:
j1:  rl. w2  j0.           ; test interval:
     dl. w1  a83.          ;
     sn. w0 (a12.)         ;   if interval(entry)
     se. w1 (a13.)         ;    < >
     jl      x2            ;   interval(scope) then goto link;
     jl      x2+2          ;   return to link+2;
e.

;start of program itself:
g10: am      -2048           ; start:
     jl. w1  b0.+2048        ;   init program;
     jl.     b25.          ;   left side: call error;
     jl. w3  b22.          ; get scope: read scope param;
     sl  w3  8             ;   if scope >= 8
     jl.     b14.          ;   then goto scope error;
     sl  w3  4             ;   
     al  w3  3             ;   save key(scope);
     rs. w3  c19.          ;
     al. w3  a140.         ;   get work name:
     jd      1<11+68       ;

c5:  jl. w3  b11.          ; next scope: next param;
     jl.     c4.           ;   end list: end program;
     bz  w1  x2+10         ;   check param:
     sn. w0 (a23.)         ;   if del,kind <> sp,name
     sn  w1  8             ;   or next delim = point
     jl.     b13.          ;   then paramerror;
     dl  w1  x2+4          ;   move name
     ds. w1  a111.         ;   to
     dl  w1  x2+8          ;   name area no 2
     ds. w1  a113.         ;
     al  w0  0             ;   work in use :=
     rs. w0  c18.          ;   false;
     al. w3  a110.         ; lookup entry (name);
     al. w1  a119.         ;
     jd      1<11+76       ;
     sn  w0  0             ;   if found then
     jl.     c9.           ;   goto check interval;
     sn  w0  3             ;   if not found then
     jl.     c1.           ;   then goto error;
     jl.     c11.          ;   goto error cause 1;
c4:  am      -2048
     jl.     b2.+2048
c18:         0             ; work in use (boolean)
c19:         0             ; key(scope)
c17:         0             ; non area entry

                                                                     \f


;rc 15.10.74                fp utility, system 3, cat adm 2 ...30...

;scope page 3:

c9:  dl. w1  a120.         ; check interval:
     al  w1  x1-1          ;
     sl. w0 (a10.)         ;   if int.low < max.low
     sl. w1 (a11.)         ;   or int.upp > max upp
     jl.     c20.          ;   then goto protected;
     al  w0  0             ;   non-area := false;
     rs. w0  c17.          ;
     rl. w0  a101.         ; compare devices:
     sn  w0  0             ;   if no device in scope
     jl.     c22.          ;   then goto maybe set key 3;
     rl. w1  a127.         ;   if nos of segments >= 0
     sl  w1  0             ;   then goto compare names;
     jl.     c8.           ; non-area entry:
     sh  w0  0             ;   if main cat device in scope
     jl.     c22.          ;   then goto maybe set key 3;
     bz. w1  a119.         ; check entry scope:
     sn  w1  0             ;   if entry already in aux cat
     jl.     c6.           ;   and
     se  w0  x1            ;   aux.cat(entry) <> aux.cat(scope)
     jl.     c7.           ;   then goto change device error;
c6:  rs. w0  c17.          ;   non-area := true;
     jl.     c22.          ;   goto maybe set key 3;
                           ;
c8:  dl. w1  a129.         ; compare names:
     sn. w0 (a17.)         ;   if device name (proc)
     se. w1 (a18.)         ;   <>
     jl.     c7.           ;   device name (scope)
     dl. w1  a130.         ;   then
     sn. w0 (a19.)         ;   goto
     se. w1 (a20.)         ;   change device error;
     jl.     c7.           ;
\f


;rc 78.04.10        fp utility, system 3, cat adm 2 ...31...

;scope page 4:

c22: rl. w1  c19.          ; maybe set key 3:
     sh  w1  2             ;   if key(scope) <= 2
     jl.     c10.          ;   then goto set interval;
     am.    (c17.)         ;   if not non-area
     sn  w1  x1            ;   then goto permanent;
     jl.     c24.          ;
     al. w2  a17.          ; aux cat:
     jd      1<11+90       ;   permanent into aux cat;
     jl.     c25.          ;   goto test result;
c24: jd      1<11+50       ;   permanent entry;
c25: sn  w0  0             ;   if ok
     jl.     c10.          ;   then goto set interval;
                           ; permanent fault:
     am.    (c18.)         ;   if work in use
     se  w1  x1            ;   then
     jl.     c28.          ;   goto repair and give up;
     sn  w0  6             ;   if claims exceeded then
     jl.     c21.          ;   then goto try rename;
     jl.     c1.           ;   goto error;
c10: dl. w1  a13.          ; set interval:
     jd      1<11+74       ;   change entry interval(entry name);
     sn  w0  0             ;   if ok then
     jl.     c14.          ;   goto almost ok finis;
                           ; old entry present:
     jl. w3  c23.          ;   find old entry;
     jl.     c11.          ;   not found: goto error 1 (catalog error);
     jd      1<11+48       ;   found: remove entry;
     se  w0  5             ;   if reserved (by boss) then
     jl.     18            ;   begin
     jl. w3  b3.           ;     reestablish catbase;
     rl. w1  a119.         ;
     ls  w1  21            ;
     ls  w1  -21           ;     permanent with
     al. w3  a110.         ;     oldkey
     jd      1<11+50       ;       errortype:=in use;
     al  w0  5             ;
     jl.     c1.           ; end
     se  w0  0             ;   if remove not possible
     jl.     c11.          ;   then goto catalog error;
     jl. w3  b3.           ;   reestablish cat base;
     al. w3  a110.         ;
     jl.     c10.          ;   goto set interval;

c14: rl. w1  c19.          ; almost ok finis:
     sn  w1  3             ;   if key(scope) = 3
     jl.     c15.          ;   then goto remove work;
     dl. w1  a13.          ;
     al. w3  a15.          ;   set catbase to
     jd      1<11+72       ;   scope interval
     rl. w1  c19.          ;   restore key;
     al. w3  a110.         ;   restore name addr;
     am.    (c17.)         ;   if not non-area
     sn  w1  x1            ;   then goto permanent;
     jl.     c26.          ;
     al. w2  a17.          ; aux catalog:
     jd      1<11+90       ;   permanent into aux cat;
     jl.     c27.          ;   goto test result;
c26: jd      1<11+50       ;   permanent entry(key);
c27: se  w0  0             ;   if not ok
     jl.     c1.           ;   then goto error;
     am      -2048         ;
     jl. w3  b3.+2048      ; reestablish catbase;
     jl.     c5.           ;   goto next scope;

c15: rl. w0  c18.          ; remove work:
     sn  w0  0             ;   if not work in use
     jl.     c5.           ;   then goto next scope;
     al. w3  a140.         ;
     jd      1<11+48       ;
     jl.     c5.           ;   goto next scope;   remove(work);
\f


                                                                 
;rc 79.08.30                fp utility, system 3, cat adm 2 ...32...

;scope page 5:

c21: jl. w3  c23.          ; try rename: find old entry;
     jl.     c0.           ;   not found: no resources;
     rl. w1  a81.          ;   found, check entry key:
     ls  w1   21           ;    load keys;
     ls  w1  -21           ;    shift out namekey;
     se. w1  c19.          ;    if entrykey<>scopekey then
     jl.     c0.           ;    goto no resources;
     al. w1  a140.         ;   found and rigth key:
     jd      1<11+46       ;   rename entry;
     se  w0  0             ;   if not ok
     jl.     c1.           ;   then goto error;
     al. w3  a140.         ;
     dl. w1  a7.           ;
     jd      1<11+74       ;   change entry interval to standard;
     dl. w1  a7.           ;
     al. w3  a15.          ;   set cat base to standard;
     jd      1<11+72       ;
     al  w1  0             ;
     al. w3  a140.         ;
     jd      1<11+50       ;   permanent entry(key 0);
     rs. w3  c18.          ;   work in use := true;
     am      -2048
     jl. w3  b3.+2048      ;   reestablish cat base;
     al. w3  a110.         ;
     jl.     c22.          ;   goto set key again;

c28: dl. w1  a7.           ; repair and give up:
     al. w3  a15.          ;   set cat base to standard;
     jd      1<11+72       ;
     rl. w1  c19.          ;
     al. w3  a140.         ;
     bl. w2  a80.          ;   if old entry was
     sh  w2  -1            ;   permanent into an aux cat
     jl.     c29.          ;   then goto perm work aux;
     jd      1<11+50       ;   permanent work entry(key(scope));
c30: dl. w1  a13.          ;
     jd      1<11+74       ;   change entry interval
     al. w1  a110.         ;    (work,scope interval);;
     jd      1<11+46       ;   rename entry ( work name to name);
     jl.     c0.           ;   goto error(no resources);
c29: am     (92)           ; perm work aux:
     am     (x2-1<11)      ;
     al  w2  -18           ;   get aux cat address;
     dl  w1  x2+2          ;   move aux dev name
     ds. w1  c31.          ;   to name area;
     dl  w1  x2+6          ;
     ds. w1  c32.          ;
     al. w2  c33.          ;
     rl. w1  c19.          ;   permanent into
     jd      1<11+90       ;   saved aux cat;
     jl.     c30.          ;   goto change interval;
c33:         0             ; device name
c31:         0,0           ;
c32:         0             ;

e.
 
g2=k-g3
a0=g2




                                                                 
\f


;rc 07.04.72                fp utility, system 3, cat adm 2 tails

i.e.                      ; end program segment

m.rc 1977.08.29 fp utility, sys 3, cat adm 2
m.            lookup,search,clear,scope


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
        0,r.4
        s2                 ; month year
        0,r.2
        2<12+g6-g3         ; entry clear
        g2

g1:         1<23+4
        0,r.4
        s2                 ; month year
        0,r.2
        2<12+g10-g3        ; entry scope
        g2
d.
p.<:insertproc:>
l.
▶EOF◀