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

⟦9559aff3a⟧ TextFile

    Length: 33024 (0x8100)
    Types: TextFile
    Names: »mode5tx     «

Derivation

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

TextFile



; fgs 1989.03.13              fp utility, job adm 1, page 1

; the programs are translated like
;       (mode=slang text entry.no
;        mode head char finis end)
;
; file processor:   basic job administration 1
; mode, head, finis, end   programs
; leif svalgaard july 1969
; modified for multi processor monitor :
; F. G. Strøbech march 1985


\f



; fgs 1989.03.13              fp utility, job adm 1, page 2

b.g1, f7 w.


d.
p.<:fpnames:>
l.

s.    k=h55, e48, j1     ; begin
w.                       ;
j0:   j1                 ; length
      0                  ; not used
e0:

f1:   jl. w2  e1.        ; entry  4:
      <:*mode :>         ;   mode
f2:   jl. w2  e2.        ; entry 10:
      <:*head :>         ;   head
f3:   jl. w2  e3.        ; entry 16:
      <:finis :>         ;   finis
f4:   jl. w2  e5.        ; entry 22:
      <:*end <127>:>     ;   end
f7:   jl. w2  e2.        ; entry char: goto head
      <:*char :>

e9:   <:<10>**:>         ; second time start text
e10:  <:<127>**:> ,0     ; first time error text
e11:  0                  ; with room for program name
e32:  <:param:>          ; param message
e12:  <:call:>           ; call message
e13:  rs. w3  e17.       ; procedure init param:
      dl  w0  x2+2       ;   param pointer:= w3;
      ds. w0  e11.       ;   set program name in
      rl. w3  e17.       ;   error message;
      jl      x1         ;   return;
e14:  0                  ; return addr in list param
e15:  0 ;  e15+1         ; booleans:  ok, call error
e16:  0                  ; saved param pointer
e17:  0                  ; current param pointer

\f



; fgs 1989.03.13              fp utility, job adm 1, page 3


; procedure list param.
; prints on current output a param error message followed by
; the current composite parameter, and returns with next param.
e18:  al. w0  e10.       ; list param:
      jl. w3  h31.-2     ;   outtext (cur out,<:***...param:>);
      al  w0   1         ;   ok:= false;
      hs. w0  e15.       ;
      rl. w2  e16.       ;   param pointer:= saved param pointer;
      rs. w2  e17.       ;
      bl  w0  x2+0       ;
      se  w0   4         ; next:
e19:  am       14        ;   outchar (cur out,
      al  w2   32        ;      if separator=dot then
      jl. w3  h26.-2     ;      46 else 32);
      rl. w2  e17.       ;
      bz  w1  x2+1       ;   if kind.param >= 10 then
      al. w3  e20.       ;   outtext (cur out,param text)
      al  w0  x2+2       ;   else
      sl  w1  10         ;   outinteger (cur out,<<d>,param);
      jl. w0  h31.-2     ;
      rl  w0  x2+2       ;
      jl. w3  h32.-2 ,1  ;   insert nl in front of ***;
e20:  rl. w3  e9.        ;   get param;
      rs. w3  e10.       ;   if sep=end then goto param end;
      jl. w3  e25.       ;   if sep=dot then goto next;
e33:  jl.     e24. ; mod ;
      jl.     e19.       ;   goto return in e14;
      jl.    (e14.)      ;
      jl.     e46.       ;   if end sep then head goes to e46;


\f



; fgs 1989.03.13              fp utility, job adm 1, page 4

; param end.
e24:  al. w3  e22.       ; param end:
e23:  bz. w2  e15.+1     ; call error entry:
      dl. w1  e12.+2     ;   param text is replaced by call
      ds. w1  e12.-2     ;   error text in message;
      al. w0  e10.       ;   if call error then
      se  w2   0         ;   outtext (cur out,<:***...call:>);
      jl. w0  h31.-2     ;   then maybe return (:if e23 entry:);
e22:  rl. w0  e10.+2     ; exit: 
      rl. w2  e15.       ;   if not ok
      se  w2  0          ;   then
      jl. w3  h39.       ;   outend(cur out,nl);
      se. w0 (e0.+2)     ;   if mode called
      jl.     e31.       ;   then begin
      al  w2  1<6+1<5    ;     w2:=warning and ok
      la. w2  h51.       ;     from modebits shift -5;
      ls  w2  -5         ;
      al  w0  1          ;     negate ok;
      lx  w2  0          ;
      rs. w2  h51.-2 ;c20;     save w2 in fp c20;
      jl.    h63.        ;     call and enter fp end program;
; comment: in this way the test of pause and error bits in
; fp end program is bypassed (dirty trick) end;
e31:  rl. w2  e15.       ;   w2:=if no errors then 0
      se  w2  0          ;   else 1;
      al  w2  1          ;
      jl.     h7.        ;   goto end program;
\f



; fgs 1989.03.13              fp utility, job adm 1, page 5


; procedure get param;
;   w0                       separator
;   w1                         kind
;   w2                     param pointer
;   w3       link            next sep ;call+2: end,+4:dot,+6:space
e21:  0 ; return         ; return point depends on current sep
e25:  rl. w2  e17.       ; get param:
      ba  w2  x2+1       ;   param pointer:= param pointer+size.param;
      rs. w2  e17.       ;   w0:=separator.param;
      bl  w0  x2+0       ;   w1:=kind.param;
      bz  w1  x2+1       ;   w2:=param pointer;
      se  w0   4         ;   if sep=space then save the param pointer
      jl.      6         ;   for the sake of the listing of errors;
      rs. w2  e16.       ; determine action:
      al  w3  x3+4       ;   if separator= space then
      sl  w0  4+1        ;   return:=return+4 else
      al  w3  x3+2       ;   if separator=dot then
      rs. w3  e21.       ;   return:=return+2;
      am      x2         ; take next sep:
      bl  w3  x1         ;   w3:=separator.next param;
      jl.    (e21.)      ;   return;

; procedure search name(list);  w1=list pointer.
e26:  rs. w3  e21.       ; search name:  save return point;
      dl  w0  x2+4       ;   for all items in the name list
      sn  w0 (x1+2)      ;   do
      se  w3 (x1+0)      ;   if name.param = name.item
      jl.     e27.       ;   then return with found name;
      dl  w0  x2+8       ;   comment:  x1+8  points to an output
      sn  w0 (x1+6)      ;   value of the search;
      se  w3 (x1+4)      ;
      jl.     e27.       ;
      jl.    (e21.)      ;
e27:  al  w1  x1+10      ;   if not found then
      rl  w0  x1         ;   list param;
      se  w0   0         ;   
      jl.     e26.+2     ;   comment: the name list is terminated
      jl.     e18.       ;   by a zero word;
; name list format:  <4 words name>  <1 word output value>

\f



; fgs 1989.03.13              fp utility, job adm 1, page 6


; procedure test call error;
;   w0                     destroyed
;   w1         link          link
;   w2                     unchanged
;   w3      param pointer param pointer
e29:  bl  w0  x3+0       ; test call error:
      sn  w0   6         ;   if current separator = equal
e30:  hs. w0  e15.+1     ;   then call error:= true;
      jl      x1         ;   return;
\f



; fgs 1989.03.13              fp utility, job adm 1, page 7


; the fp program mode:
;   mode <s> <bits>.<on> <area>

b.    b24                ; begin
w.                       ; mode:
e1:   jl. w1  e13.       ;   init param;
      jl. w1  e29.       ;   test call error;
      al. w1  b8.        ;   return from list param:=
      rs. w1  e14.       ;   test kind;
b1:   jl. w3  e25.       ; next param pair:
      jl.     e24.       ;   if sep= end then goto param end;
      jl.     e18.       ;   if sep= dot then goto list param;
b8:   se  w1  10         ; test kind:
      jl.     b2.        ;   if kind=integer then goto shift;
      sn  w3   8         ; name found:  if next sep=dot
      jl.     b3.        ;   then goto search option;
      rl  w0  x2+2
      sn. w0 (b23.)      ;   if param=what
      jl.     b24.       ;   then list modebits;
      jl.     e18.       ;   then list param;
b2:   rl  w1  x2+2       ; shift:
      sl  w1   0         ;   if param < 0
      sl  w1  24         ;   or param > 23
      jl.     e18.       ;   then goto list param;
      se  w3   8         ;   if next sep<>dot
      jl.     e18.       ;   then list param
      ac  w1  x1-23      ;
      al  w0   1         ;   bits:= 1 shift (23-param);
      ls  w0  x1         ;   goto check on;
      jl.     b4.        ;
b3:   al. w1  b20.       ; search option:
      rl  w0  x2+2       ;
      sn. w0 (b23.)      ;   if param=what
      jl.     b24.       ;   then goto list modebits;
      jl. w3  e26.       ;   search name (option table,param,bits);
      rl  w0  x1+8       ;   if not found then list param;
b4:   rs. w0  b10.       ;   bits:= option bits;
      jl. w3  e25.       ; check on:  get param;
      jl.     e18.       ;   if sep<>dot
      se  w1  10         ;   or kind<>name
      jl.     e18.       ;   then goto list param;
      al. w1  b21.       ;   search name (on table,param,jump);
      jl. w3  e26.       ;   if not found then list param;
      rl. w3  b10.       ;   goto jump;
      jl      x1+8       ;
b5:   lo. w3  h51.       ; set bits: fp mode bits:= bits or
      jl.     b7.        ;   fp mode bits;
b6:   ac  w3  x3+1       ;   goto next param pair;
      la. w3  h51.       ; clear bits:  fp mode bits:= inverse (bits)
b7:   rs. w3  h51.       ;   and fp mode bits;
      jl.     b1.        ;   goto next param pair;

\f



; fgs 1989.03.13              fp utility, job adm 1, page 8


; option table for mode
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
; on table for mode
b21:  <:yes:>            , 0, 0, 0,     jl.b5.
      <:no:>             , 0, 0, 0,     jl.b6.
      0                  ; terminate on table
b10:  0                  ; bits
b23:  <:wha:>

b24:
; list modebits;

b. a4 w.
     al. w3  a3.       ;   save textaddr;
     rs. w3  a1.       ;
     rl. w2  h51.      ;   modebits;
     al. w0  a2.       ;   outtext(<:modebit:>);
     jl. w3  h31.-2    ;
     jl.     4         ;
a0:  ls  w2  1         ; loop: modebits:=modebits shift 1;
     sn  w2  0         ;   if modebits empty then
     jl.     a4.       ;   goto exit;
     rl. w3  a1.       ;
     al  w3  x3+8      ;   textaddr:=textaddr+8;
     rs. w3  a1.       ;
     sl  w2  0         ;   if not this modebit then
     jl.     a0.       ;   goto loop;
     al  w0  x3        ;
     jl. w3  h31.      ;   outtext(modebitname);
     jl.     a0.       ;   goto loop;
\f



; fgs 1989.03.13              fp utility, job adm 1, page 9


a1:  0                 ;
a2:  <:modebit:>       ;
a3=k-8
     <: 0:>,0,0,0
     <: 1:>,0,0,0
     <: 2:>,0,0,0
     <: 3:>,0,0,0
     <: 4:>,0,0,0
     <: 5:>,0,0,0
     <: 6:>,0,0,0
     <: 7:>,0,0,0
     <: 8:>,0,0,0
     <: 9:>,0,0,0
     <: 10:>,0,0,0
     <: 11:>,0,0,0
     0,0,0,0
     <: bswait:>,0
     <: initmess:>,0
     <: listing:>,0
     0,0,0,0
     <: warning:>,0
     <: ok:>,0,0,0
     <: error:>,0,0
     <: pause:>,0,0
     0,0,0,0
     0,0,0,0
     <: list:>,0,0


a4:   jl. w3  h39.       ; exit: outend(nl);
      rs. w1  e15.       ;
      jl.     e22.       ;   goto program exit;
e.

e.                       ; end mode
\f



; fgs 1989.03.13              fp utility, job adm 1, page 10


; the fp program  head:
;   <file>=head <s> <form feeds> or:  head <s> <form feeds>

b.    b51                ; begin
w.e2: jl. w1  e13.       ; head: init param;
      al  w1   6         ;   modify return after errors
      hs. w1  e33.+1     ;   to the printing sequence;
      al. w1  h21.       ;   file:= current output;
      rs. w1  b3.        ;   if sep=equal then
      bl  w0  x3+0       ;   file:= file in call
      se  w0   6         ;   else goto scan parameters;
      jl.     b18.       ;
      al  w2  x3-8       ; left hand side in call:
      al. w1  b1.        ;   initialize a zone to
      al. w3  b2.        ;   hold the file;
      rs  w3  x1+h0+4    ;   set used share in zone;
      rs  w3  x1+h0+6    ;   set first share in zone;
      rs  w3  x1+h0+8    ;   set last share in zone;
      al. w0  e48.       ;   set first shared.share;
      rs  w0  x3+2       ;
      al  w0  1<2+0      ;   if new area then one segment on disk;
      jl. w3  h28.       ;   connect output (file,zone,result);
      hs. w0  e15.+1     ;   call error:= result<>0;
      sn  w0   0         ;   if call error then
      rs. w1  b3.        ;   file:= current output;
      sn  w0  0
      jl. w3  e47.       ;   prepare entry for textoutput
      jl.     b18.       ;   goto scan parameters;

b3:   0                  ; zone descr addr for file
b12:  0  ; init zero     ; form feeds
b1=k-h0  , 0, r.h5/2     ; zone descriptor
b2:        0, r.h6/2     ; share descriptor
b5:   0  ; sec           ; all values are init to zero
b6:   0  ; month         ;
b7:   0  ; date          ;
b8:   0  ; min           ;
b9:   0  ; hour          ;
b10:  0  ; year          ;

\f



; fgs 1989.03.13              fp utility, job adm 1, page 11


b18:  rl. w0  e11.       ; scan parameters:
      sn. w0  (f2.+4)    ;   if program=head then
      jl.     b13.       ;   goto head
      al. w1  b47.       ;
      rs. w1  e14.       ;   set return after list param
b11:  jl. w3  e25.       ; next char param:
b47:  jl.     b25.       ;   if end param then goto exit
      jl.     b40.       ;   if sep=dot then goto dotparam
      sn  w1  10         ;
      jl. w1  b48.       ;   if param=text then goto textparam;
      rl  w3  x2+2       ;
      hs. w3  b41.       ;   value:=param
      bl  w3  x2+4       ;
      sn  w3  8          ;   if nextsep=dot then
      jl.     b11.       ;   goto next char param
      al  w3  1          ;
      rs. w3  b12.       ;   repeat:=1;
      jl.     b15.       ;   goto print
b40:  sn  w1  10         ; dotparam:
      jl.     e18.       ;   if param=dot text then goto list param
      rl  w3  x2+2       ;
      al  w1  133        ;   max:=133
      bl. w2  b41.       ;
      sn  w2  12         ;   if value=ff then
      al  w1  6          ;   max:=6 
      sn  w2  10         ;   if value=nl then
      al  w1  64         ;   max:=64
      sl  w3  x1         ;   if repeat>max then
      al  w3  x1         ;   repeat:=max
      rs. w3  b12.       ;
      jl.     b15.       ;   goto print
\f



; fgs 1989.03.13              fp utility, job adm 1, page 12


b48:
b. t4 w.
      rl  w0  x2+2       ;   w0:=text;
      al  w3  0          ;   value:=
      sn. w0  (t1.)      ;   if text=nl then
      al  w3  10         ;   10 else
      sn. w0  (t2.)      ;   if text=ff then
      al  w3  12         ;   12 else
      sn. w0  (t3.)      ;   if text=em then
      al  w3  25         ;   25 else
      sn. w0  (t4.)      ;   if text=sp then
      al  w3  32         ;   32
      sn  w3  0          ;   else alarm;
      jl.     e18.       ;
      hs. w3  b41.       ;   save value;
      bl  w3  x2+10      ;   w3:=nextsep
      jl      x1+6       ;
t1:   <:nl:>
t2:   <:ff:>
t3:   <:em:>
t4:   <:sp:>
e.
b13:  rl. w1  b3.        ; head:  outfile
      bz  w0  x1+h1+1    ;   if kind=14 (printer)
      al  w2  15         ;   then
      sn  w0  14         ;   outchar(file,
      jl. w3  h26.       ;   shift-in-char)
      al. w1  b4.        ;
      rs. w1  e14.       ;   set return of list param
b0:   jl. w3  e25.       ; next head param:
b4:   jl.     b15.       ;   if end param then goto print
      jl.     e18.       ;   if dot then goto list param
      rl  w3  x2+2       ;
      sn  w1  10         ;   if param=integer then
      jl.     b49.       ;   begin
      sl  w3  6          ;   if param>6  then
      al  w3  6          ;   param:=6 
      rs. w3  b12.       ;   repeat:=param
      jl.     b0.        ;   goto next head param
\f



; fgs 1989.03.13              fp utility, job adm 1, page 13

                         ;   end;

b49:  se. w3  (b50.)     ;
      jl.      b14.      ;
      al  w3   0         ;   if param=old then
      rs. w3  b35.       ;   iso:=false;
      jl.      b0.       ;   goto next head param;
b14:  al  w2  1          ;
      sn. w3  (b38.)     ;   if param=<:cpu:> then
      rs. w2  b36.       ;   cpu.=true
      sn. w3  (b37.)     ;   if param=<:iso:> then
      rs. w2  b35.       ;   iso:=true
      se. w3  (b37.)     ;   if param=<:cpu:> or
      sn. w3  (b38.)     ;   param=<:iso:> then
      jl.      b0.       ;   goto next head param
      jl.     e18.       ;   else goto list param

b15:  rl. w0  b12.       ; print:
      rl. w1  b3.        ;   w1:=output descr.
      rl. w3  e15.       ;   if param error then
      se  w3   0         ;   outchar (cur out,nl);
      jl. w3  b26.       ;
b16:  sh  w0  0          ;
      jl.     b17.       ;   for form feeds:= form feeds-1
      bs. w0  1          ;   while form feeds>=0 do
b41=k+1
      al  w2  12 ;or char;   outchar(file,char);;
      jl. w3  h26.       ;
      jl.     b16.       ;
b17:  rl. w0   e11.      ;
      se. w0  (f2.+4)    ;   if program<>head then
      jl.      b11.      ;   goto next char param
      am          -2000  ; print process name:
      am.    (h16.+2000) ;
      al  w0      +2     ; w0 := addr own process.name;
      rl. w1  b3.        ;   outtext (file,name of own process);
      jl. w3  h31.       ;

      jd     1<11+36     ; get and convert clock:
      ld  w3  -65        ;   get clock (clock);
      wd. w1  b31.       ; 
      wd. w0  b30.       ;   fourmin:= clock//2 400 000;
      wd. w3  b29.       ;   clock:= clock mod 2400000;
      rx. w0  b8.        ;   min:= clock//600 000;
      wd. w1  b32.       ;   clock:= clock mod 600 000;
      rx  w3   0         ;   sec:=clock//10 000;
      al  w2   0         ;   days:=fourmin//360;
      wd. w3  b33.       ;   fourmin:=fourmin mod 360;
      as  w2   2         ;   hour:=fourmin//15;
      wa. w2  b8.        ;   fourmin:=fourmin mod 15;
      ds. w1  b6.        ;   min:= 4*fourmin + min;
      ds. w3  b9.        ;
      ld  w0  -65        ; julian calendar:
      wd. w1  b28.       ;   year:=days//1461*4+1968;
      as  w1   2         ;   days:=days mod 1461;
      al  w1  x1+1968    ; 
      se  w0  59         ;   if days = 59 then
      jl.     b19.       ;   begin comment: leap year;
      al  w2   2         ;   month:= 2;
      al  w3  29         ;   date:= 29;
      jl.     b21.       ;   end else  goto b19
\f



; fgs 1989.03.13              fp utility, job adm 1, page 14


b27:     365             ; constants:   days in 1 year
b28:    1461             ;   days in 4 years
b29:    10000            ;   clock unit  0.1 msec
b30:   600000            ;   60*10000
b31:   2400000           ;   60*10000*4
b32:     360             ;   24*15
b33:      15             ;15
b35:  1                  ;   iso:=true
b36:  0                  ;   cpu:=false
b37:  <:iso:>            ;
b46:  <:   :>            ;
b38:  <:cpu: :>          ;
b39:  <: sec.:>          ;
      10000<9            ;
b43:  4096+14-47         ;   10000*2**(-47) as floating
      1<22               ;
b44:  0                  ;   0.5 as floating
      1600<12            ;
b45:  7                  ;   100 as floating
b50:    <:old:>

\f



; fgs 1989.03.13              fp utility, job adm 1, page 15


b34=k-1                  ; month table:
h.    -1,  30,  58       ;   number of days minus one
      89, 119, 150       ;   elapsed since jan 1st
     180, 211, 242       ;   for each month.
     272, 303, 333       ;
w.
b19:  sl  w0  59+1       ; begin
      bs. w0   1         ;   if days>59 then
      wd. w0  b27.       ;   days:= days-1;
      wa  w1   0         ;   year:= year + days//365;
      al  w2  13         ;   days:=days mod 365; month:=13;
b20:  al  w2  x2-1       ; last month:
      bl. w0  x2+b34.    ;   month:= month-1;
      sh  w3  (0)        ;   if days <= month table (month)
      jl.     b20.       ;   then goto last month;
      ws  w3   0         ;
b21:  rs. w1  b10.       ;   date:= days - month table (month);
      ds. w3  b7.        ; end;

      rl. w1  b3.        ; print time:
      rl. w0  b7.        ;   file:= (b3); saved file
      jl. w3  b22.       ;   outsp
      jl. w3  b22.       ;   outsp
      al  w3  0          ;
      se. w3  (b35.)     ;   if iso then year
      rl. w0  b10.       ;
      jl. w2  b24.       ;   outinteger (<<zd>,date or year);
      jl. w3  b23.       ;   outdot;
      rl. w0  b6.        ;
      jl. w2  b24.       ;   outinteger (<<zd>, month);
      jl. w3  b23.       ;   outdot;
      rl. w0  b10.       ;
      al  w3  0          ;
      se. w3  (b35.)     ;   if iso then date
      rl. w0  b7.        ;
      jl. w2  b24.       ;   outinteger(<<zd>,year or date);
      jl. w3  b22.       ;   outspace;
      jl. w3  b22.       ;   outspace;
      rl. w0  b9.        ;
      jl. w2  b24.       ;   outinteger(<<zd>,hour);
      jl. w3  b23.       ;   outdot;
      rl. w0  b8.        ;
      jl. w2  b24.       ;   outinteger(<<zd>,min);
\f



; fgs 1989.03.13              fp utility, job adm 1, page 16


      al  w0  0          ;
      sn. w0  (b36.)     ;   if cpu then
      jl.     b42.       ;   begin
      jl. w3  b23.       ;     outdot
      rl. w0  b5.        ;
      jl. w2  b24.       ;     outinteger(<<zd>,ms)
      al. w0  b46.       ;
      jl. w3  h31.       ;     outtext(   cpu: )
      am          -2000  ;
      am.    (h16.+2000) ; 
      dl  w3  56         ;   w2w3:=run time own process
      al  w0  0          ;
      rl  w1  104        ;   w0w1:=time slice
      aa  w1  6          ;   +time slice
      nd  w1  3          ;   float
      fd. w1  b43.       ;   w0w1:=time in sec
      ds. w1  b8.        ;
      fs. w1  b44.       ;   -0.5
      cf  w1  0          ;   convert to integer
      rs. w1  b5.        ;   save seconds
      ci  w1  0          ;   convert back
      ds. w1  b10.       ;
      dl. w1  b8.        ;
      fs. w1  b10.       ;   decimals
      fm. w1  b45.       ;
      cf  w1  0          ;   convert to integer
      se  w1  100        ;
      jl.     b51.       ;   if decimals=100 then
      rl. w1  b5.        ;   begin
      al  w1  x1+1       ;     seconds:=seconds+1;
      rs. w1  b5.        ;     decimals:=0;
      al  w1  0          ;   end;
b51:  rs. w1  b6.        ;   save decimals
      rl. w1  b3.        ;
      rl. w0  b5.        ;
      jl. w3  h32.       ;   outinteger(<<d>,seconds)
      1                  ;
      jl. w3  b23.       ;   outdot
      rl. w0  b6.        ;
      jl. w2  b24.       ;   outinteger(<<zd>,decimals)
      al. w0  b39.       ;
      jl. w3  h31.       ;   outtext( sec.)
b42:  jl. w3  b26.       ;
b25:  rl. w1  b3.        ;
      se. w1  b1.        ;   if not left hand side
      jl.     e24.       ;   in call then goto param end;
      am      -2048      ;
      jl. w3  h95.+2048  ;   close up as should be
      jl. w3  h79.       ;   terminate zone (left hand file);
      jl.     e24.       ;   goto param end;
\f



; fgs 1989.03.13              fp utility, job adm 1, page 17


b26:  am     -22         ; outcr   :   char:='nl';
b22:  am     -14         ; outspace:   char:=' ';
b23:  al  w2  46         ; outdot:     char:='.';
      jl.     h26.       ;   outchar (i); return;
b24:  jl. w3   h32.      ;   outinteger (<zd>,integer);
      48<12+2            ;   layout for z;
      jl      x2         ;   return;
e46=b15                  ; print entry point

e.                       ; end head;
e48=k                    ; start of head output zone;

\f



; fgs 1989.03.13              fp utility, job adm 1, page 18


; the fp program  finis (output.(yes/no)) (text)

b.    b24                ; begin
w.                       ;

b3:   <:c:>,0,0,0        ;
b4:   <:v:>,0,0,0        ;
b5:   <:no:>             ;
b6:   <:yes:>            ;
b7:   <:out:>            ;
b8:   <:put:>            ;
b9:   1<0                ;

b10:  128<12 + 0         ; MCL message:
               0         ;   localid
       12<12 + 15        ;   no of characters
      0, r.5             ;   text (1:5)

b11:  <:menu<0>:>        ;

b12:<:         ok no<0>:>;
    <:         ok   <0>:>;
    <:warning, ok no<0>:>;
    <:warning, ok   <0>:>;

b13:  3                  ; mask for extract 2
b14:  10                 ; constant

\f



; fgs 1989.03.13              fp utility, job adm 1, page 19

                         ; finis:
e3:   jl. w1  e13.       ;   init param;
      jl. w1  e29.       ;   test call error;
      al. w1  b23.       ;   return from list: after param;
      rs. w1  e14.       ;
      al  w1  4          ;   modify return
      hs. w1  e33.+1     ;   after error;

      am          -2000  ;
      rl. w3  h51.+2000  ;   text addr := addr ( case (warning.ok) of (
      ls  w3 -5          ;
      la. w3  b13.       ;   <:         ok no:>,
      wm. w3  b14.       ;   <:         ok   :>,
      al. w2  b12.       ;   <:warning, ok no:>,
      wa  w2  6          ;   <:warning, ok   :>)                      );
      dl  w0  x2+2       ;   move
      ds. w0  b10.+8     ;     text
      dl  w0  x2+6       ;   from
      ds. w0  b10.+12    ;     constant text area
      rl  w0  x2+8       ;   to
      rs. w0  b10.+14    ;     message.text area;

\f



; fgs 1989.03.13              fp utility, job adm 1, page 20

                         ; finis:
b20:  jl. w3  e25.       ; nextparam:
                         ; w0=sep,w1=kind,w2=pointer,w3=nextsep
      jl.     b23.       ;   return if end
      jl.     b21.       ;   return if dot
      sh  w1  9          ;   return if space
      jl.     e18.       ;   if param<>text then alarm;
      se  w3  8          ;   if nextsep<>dot
      jl.     b19.       ;   then gettext;
      rl  w0  x2+2       ;   if param<>output
      se. w0  (b7.)      ;   then
      jl.     b21.       ;   goto not output;
      rl  w0  x2+4       ;
      se. w0  (b8.)      ;
      jl.     e18.       ;
      rl. w3  h45.+6     ;   mess+6
      rl  w0  x2+12      ;   if
      sn. w0  (b5.)      ;   <:no:>
      lo. w3  b9.        ;   then mess+6:=mess+6 or 1<0;
      rs. w3  h45.+6     ;
      sn. w0  (b5.)      ;   if <:no:>
      jl.     b22.       ;   then goto update;
      se. w0  (b6.)      ;   if not <:yes:>
      jl.     e18.       ;   then alarm;
      ac. w3  (b9.)      ;   if
      al  w3  x3-1       ;   <:yes:>
      la. w3  h45.+6     ;   then
      rs. w3  h45.+6     ;   remove bit;
b22:  rl. w3  e17.       ;   get param pointer;
      ba  w3  x3+1       ;   update;
      rs. w3  e17.       ;
      jl.     b20.       ;   goto next param;

b19:  al  w0  0          ; get text:
      rs. w0  b10.+14    ;   zero message.text area.last word;
      dl  w0  x2+4       ;
      ds. w0  b10.+8     ;   move             
      dl  w0  x2+8       ;     text           
      ds. w0  b10.+12    ;   from             
      rl  w0  x2+10      ;      param         
      se  w1  10         ;   to               
      rs. w0  b10.+14    ;      message area; 
      jl.     b20.       ;   goto next param;

\f



; fgs 1989.03.13              fp utility, job adm 1, page 21


b21:  jl.     e18.       ; not output: alarm;

b23:  am          -2000  ;
      am.    (h16.+2000) ; after param:
      dl  w1 +78         ;
      al. w3  b2.        ;   w3 := addr name (zero);
      jd      1<11+72    ;   set catbase (std base);
      am          -2000  ;
      rl. w3  h15.+2000  ; 
      al  w3  x3+2       ;
      jd      1<11+4     ;   w0 := proc descr addr (prim out);
      sn  w0  0          ;   if w0 <> 0 then
      jl.     b24.       ;   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.     b24.       ;       skip;
      rl  w2  x3+10      ;
      rl  w3  0          ;     restore w3;
      dl  w1  x2+4       ;
      sn. w0 (b11.)      ;     if prim out.parent.name <> <:menu:> then
      se. w1 (b11.+2)    ;
      jl.     b24.       ;       skip;
      al. w1  b10.       ;
      jd      1<11+16    ;     send message (prim out, message);
      al. w1  h43.       ; 
      jd      1<11+18    ;     wait answer (answer area lowest level);
b24:                     ;   end;

\f



; fgs 1989.03.13              fp utility, job adm 1, page 22


      al  w2  0          ;   close up (cur out,null);
      am      -2048      ;
;     jl.  h7.+2048      ; ****************************************
      jl. w3  h95.-2+2048;
      al  w0   0         ;
      jl. w3  h79.-2     ;   terminate zone (cur out,file mark);
      al. w3  b3.        ;
      jd      1<11+48    ;   remove c
      al. w3  b4.        ;
      jd      1<11+48    ;   remove v
      jl. w3  h14.       ;   send finis message
      jl.     -2         ;   if not removed then send it again;


\f



; fgs 1989.03.13              fp utility, job adm 1, page 23


; the fp program end
e5:   jl. w1  e13.       ; end:  init param;
      jl. w1  e29.       ;   test call error;
      al. w1  e18.       ;   return from list: more list;
      rs. w1  e14.       ;
      jl. w3  h30.-4     ;   unstack current input (cur chain);
      al  w3  x1+h1+2    ;   
      bz  w1  x3-1       ;
      se  w1  4          ;   if kind(in) = bs
      jl.     b1.        ;   then begin
      al. w1  b2.        ;     send message (sense);
      jd      1<11+16    ;
      jd      1<11+18    ;     wait answer
                         ;     (in order to get name table
                         ;     address under the name)
b1:   jl. w3  e25.       ;   end; next param:
      jl.     e24.       ;   get param;
      jl.     e18.       ;   goto if sep = end then param end
      jl.     e18.       ;   else list param;
b2:   0,r.8              ;   message and answer (sense area proc)
e.                       ; end finis and end;

\f



; fgs 1989.03.13              fp utility, job adm 1, page 24


e45:  1<22               ; bit to disting. asterisk

e47:  bl  w0  x1+h1+1    ;
      sn  w0  4          ;   if -,bs and
      jl.     6          ;   -,mt
      se  w0  18         ;   then
      jl      x3         ;   return;
     am      -2048       ;
     al. w1  h54.+2048   ;
     rl. w2  e17.        ;
     al  w2  x2-8        ;

; 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.

\f



; fgs 1989.03.13              fp utility, job adm 1, page 25


j1=k-j0
 
; entry mode
g0:  (:j1+511:)>9   ; segm
     0, r.4         ; name
     s2             ; date
     0,0            ; file, block
     2<12+f1-h55    ; contents, entry
     j1             ; length
 
; entry head
     1<23+4         ; bs
     0,r.4          ;
     s2             ; date
     0,0            ; file, block
     2<12+f2-h55    ; contents, entry
     j1             ; length

; entry char
     1<23+4         ; bs
     0, r.4         ;
     s2             ; date
     0,0            ; file, block
     2<12+f7-h55    ; contry
     j1             ; length

 
; entry finis
     1<23+4         ; bs
     0,r.4          ;
     s2             ; date
     0,0            ; file, block
     2<12+f3-h55    ; contents, entry
     j1             ; length
 
; entry end
g1:  1<23+4         ; bs
     0,r.4          ;
     s2             ; date
     0,0            ; file , block
     2<12+f4-h55    ; content, entry
     j1             ; lenght
 

m.rc, fp job adm 1,   1989.03.13
d.
p.<:insertproc:>
l.
i.                       ; maybe names

e.                       ; end job adm 1;
e.                       ; end fp names
▶EOF◀