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

⟦4fa0589e2⟧ TextFile

    Length: 11520 (0x2d00)
    Types: TextFile
    Names: »tcmoned     «

Derivation

└─⟦cde9d517b⟧ Bits:30007477 RC8000 Backup tape fra HT's bus-radio system
    └─⟦6a563b143⟧ 
        └─⟦this⟧ »tcmoned     « 
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
    └─⟦a957ba283⟧ 
        └─⟦this⟧ »tcmoned     « 

TextFile

job httest 0 190147
(lookup htmon
if ok.no
(htmon=entry 1 tcmon d.0.0 tcmon tcmon tcmon tcmon
scope user htmon)
htmon=edit tcmon
end)
m e,m n #, v n
l./begin/,r/begin/begin algol list.off;/
l./:1:/,i$
algol list.on;
$
l./:1:/,l 1,i$
#12#
algol list.off;
; message coroutinemonitor - 2 ;;
$
l./:2:/,i$
algol list.on;
$
l./:3:/,l 1,i$
#12#
algol list.off;
; message coroutinemonitor - 3 ;;
$
l./<*-1*>/,l 1,i$
#12#
; message coroutinemonitor - 4 ;;
$
l./********** initialization procedures **********/,i$
#12#
; message coroutinemonitor - 5 ;;
$
l./***** nextsem *****/,i$
#12#
; message coroutinemonitor - 6 ;;
$
l./***** nextcoru *****/,i$
#12#
; message coroutinemonitor - 7 ;;
$
l./***** nextop *****/,i$
#12#
; message coroutinemonitor - 8 ;;
$
l./***** nextprocext *****/,i$
#12#
; message coroutinemonitor - 9 ;;
$
l./***** initerror *****/,i$
#12#
; message coroutinemonitor - 10 ;;
$
l./:4:/,i$
algol list.on;
$
l./:4:/,l 1,i$
#12#
algol list.off;
; message coroutinemonitor - 11 ;;
$
l./***** pass *****/,i$
#12#
; message coroutinemonitor - 12 ;;
$
l./***** wait *****/,i$
#12#
; message coroutinemonitor - 13 ;;
$
l./***** inspect ****/,r/inspect ****/inspect *****/,i$
#12#
; message coroutinemonitor - 14 ;;
$
l./***** signalch *****/,i$
#12#
; message coroutinemonitor - 15 ;;
$
l./queue./,r/./, at the end of the queue
    if operation is positive and at the beginning if operation is negative./
l./op;/,r/;/,currop;/
l./op:=/,r/=/= abs /
l./semaphore + semop/,r/semaphore + semop/currop/,i$
      currop:=semaphore + semop;
      if operation < 0 then currop:=d.currop.next;
$
l./***** waitch *****/,i$
#12#
; message coroutinemonitor - 16 ;;
$
l./linkprio(current/,i$
#12#
; message coroutinemonitor - 17 ;;

$
l./***** inspectch *****/,i$
#12#
; message coroutinemonitor - 18 ;;
$
l./the semaphore/,i$
if no operations are found the number of coroutines waiting
for operations of the typeset are counted and delivered as
negative value in 'elements'.
$
l./currop;/,r/;/,firstcoru,currcoru;/
l./elements:=/,i$
      if counter=0 then
      begin
        firstcoru:=semaphore + sem_coru;
        curr_coru:=d.firstcoru.next;
        while curr_coru<>first_coru do
        begin
          if (operationtypeset and d.curr_coru.corutypeset) extract 12 <>0 then
            counter:=counter - 1;
          curr_coru:=d.curr_coru.next;
        end;
      end;
$
l./***** csendmessage *****/,i$
#12#
; message coroutinemonitor - 19 ;;
$
l./***** cwaitanswer *****/,i$
#12#
; message coroutinemonitor - 20 ;;
$
l./***** cwaitmessage *****/,i$
#12#
; message coroutinemonitor - 21 ;;
$
l./***** cregretmessage *****/,i$
#12#
; message coroutinemonitor - 22 ;;
$
l./***** semsendmessage *****/,i$
#12#
; message coroutinemonitor - 23 ;;
$
l./***** semwaitmessage *****/,i$
#12#
; message coroutinemonitor - 24 ;;
$
l./***** semregretmessage *****/,i$
#12#
; message coroutinemonitor - 25 ;;
$
l./***** link *****/,i$
#12#
; message coroutinemonitor - 26 ;;
$
l./***** linkprio *****/,i$
#12#
; message coroutinemonitor - 27 ;;
$
l./<*+1*>/,i$
#12#
; message coroutinemonitor - 28 ;;
$
l./procedure test_arr (key/,l-1,i$
#12#
; message coroutinemonitor - 29 ;;
$
l./procedure test_rec_val (key/,l-1,i$
#12#
; message coroutinemonitor - 30 ;;
$
l./activity(maxcoru);/,i$
#12#
; message coroutinemonitor - 30a ;;


    <*************** extention to coroutine monitor procedures **********>

    <***** signalbin *****

    this procedure simulates a binary semaphore on a simple semaphore
    by testing the value of the semaphore before signaling the
    semaphore. if the value of the semaphore is one (=open) nothing is
    done, otherwise a normal signal is carried out. *>


    procedure signalbin(semaphore);
    value semaphore;
    integer semaphore;
    begin
      integer array field sem;
      integer val;
      sem:= semaphore;
      inspect(sem,val);
      if val<1 then signal(sem);
    end;
#12#
; message coroutinemonitor - 30b ;;

  <***** coruno *****

  delivers the coroutinenumber for a give coroutine id.
  if the coroutine does not exists the value 0 is delivered *>

  integer procedure coru_no(coru_id);
  value                     coru_id;
  integer                   coru_id;
  begin
    integer array field cor;

    coru_no:= 0;
    for cor:= firstcoru step corusize until (coruref-1) do
      if d.cor.coruident//1000 = coru_id then
      coru_no:= d.cor.coruident mod 1000;
  end;
#12#
; message coroutinemonitor - 30c ;;

  <***** coroutine *****

  delivers the referencebyte for the coroutinedescriptor for
  a coroutine identified by coroutinenumber *>

  integer procedure coroutine(cor_no);
    value                     cor_no;
    integer                   cor_no;
  coroutine:= if cor_no <= 0 or maxcoru < cor_no then -1 else
              firstcoru + (cor_no-1)*corusize;
\f


; message coroutinemonitor - 30d ;;

<***** curr_coruno *****

delivers number of calling coroutine 
    curr_coruno:
        < 0     = -current_coroutine_number in disabled mode
        = 0     = procedure not called from coroutine
        > 0     = current_coroutine_number in enabled mode   *>

integer procedure curr_coruno;
begin
  integer i;
  integer array ia(1:12);

  i:= system(12,0,ia);
  if i > 0 then
  begin
    i:= system(12,1,ia);
    curr_coruno:= ia(3);
  end else curr_coruno:= 0;
end curr_coruno;
\f


; message coroutinemonitor - 30e ;;

<***** curr_coruid *****

delivers coruident of calling coroutine :

    curr_coruid:
        > 0     = coruident of calling coroutine
        = 0     = procedure not called from coroutine  *>

integer procedure curr_coruid;
begin
  integer cor_no;
  integer array field cor;

  cor_no:= abs curr_coruno;
  if cor_no <> 0 then
  begin
    cor:= coroutine(cor_no);
    curr_coruid:= d.cor.coruident // 1000;
  end
  else curr_coruid:= 0;
end curr_coruid;
\f

; message coroutinemonitor - 30f.1 ;;

    <**** getch *****

    this procedure searches the queue of operations waiting at 'semaphore'
    to find an operation that matches the operationstypeset and a set of
    select-values. each select value is specified by type and fieldvalue
    in integer array 'type' and by the value in integer array 'val'.

0: eq  0:   not used
1: lt  1:   boolean
2: le  2:   integer
3: gt  3:   long
4: ge  4:   real
5: ne
*>

    procedure getch(semaphore,operation,operationtypeset,type,val);
    value semaphore,operationtypeset;
    integer semaphore,operation;
    boolean operationtypeset;
    integer array type,val;
    begin
      integer array field firstop,currop;
      integer ø,n,i,f,t,rel,i1,i2;
      boolean field bf,bfval;
      integer field intf;
      long field lf,lfval; long l1,l2;
      real field rf,rfval; real r1,r2;
  
      boolean match;

      operation:= 0;
      n:= system(3,ø,type);
      match:= false;
      firstop:= semaphore + semop;
      currop:= d.firstop.next;
      while currop <> firstop and -,match do
      begin
        if (operationtypeset and d.currop.optype) extract 12 <> 0 then
        begin
          i:= n;
          match:= true;
\f

; message coroutinemonitor - 30f.2 ;;

          while match and (if i <= ø then type(i) >= 0 else false) do
          begin
            rel:= type(i) shift(-18);
            t:= type(i) shift(-12) extract 6;
            f:= type(i) extract 12;
            if f > 2047 then f:= f -4096;
            case t+1 of
            begin
              ; <* not used *>

              begin <*boolean or signed short integer*>
                bf:= f;
                bfval:= 2*i;
                i1:= d.currop.bf extract 12;
                if i1 > 2047 then i1:= i1-4096;
                i2:= val.bfval extract 12;
                if i2 > 2047 then i2:= i2-4096;
                match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
              end;

              begin <*integer*>
                intf:= f;
                i1:= d.currop.intf;
                i2:= val(i);
                match:= case rel+1 of (i1=i2,i1<i2,i1<=i2,i1>i2,i1>=i2,i1<>i2);
              end;

              begin <*long*>
                lf:= f;
                lfval:= i*2;
                l1:= d.currop.lf;
                l2:= val.lfval;
                match:= case rel+1 of (l1=l2,l1<l2,l1<=l2,l1>l2,l1>=l2,l1<>l2);
              end;

              begin <*real*>
                rf:= f;
                rfval:= i*2;
                r1:= d.currop.rf;
                r2:= val.rfval;
                match:= case rel+1 of (r1=r2,r1<r2,r1<=r2,r1>r2,r1>=r2,r1<>r2);
              end;

            end;<*case t+1*>

            i:= i+1;
          end; <*while match and i<=ø and t>=0 *>
\f

; message coroutinemonitor - 30f.3 ;;

        end; <* if operationtypeset and ---*>
        if -,match then currop:= d.currop.next;
      end; <*while currop <> firstop and -,match*>

      if match then
      begin
        link(currop,0);
        d.current.coruop:= currop;
        operation:= currop;
      end;
    end getch;
#12#
; message coroutinemonitor - 31 ;;
$
l./if cmi = 0/,l./receiver/,i$
#12#
; message coroutinemonitor - 32 ;;

$
l./if cmi = -1/,l./currevent/,i$
#12#
; message coroutinemonitor - 33 ;;

$
l./answer arrived after semsendmessage/,i$
#12#
; message coroutinemonitor - 34 ;;
$
l./********** coroutine activation **********/,i$
#12#
; message coroutinemonitor - 35 ;;
$
l./corustate:=/,i$
<*+2*> if testbit30 and d.current.corutestmask shift(-11) then
<**>   begin
<**>     systime(5,0,r);
<**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
<**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
<**>       d.current.coruident//1000,<: aktiveres:>);
<**>   end;
<*-2*>
$
l./if cmi = 1/,i$
<*+2*> if testbit30 and d.current.corutestmask shift(-11) then
<**>   begin
<**>     systime(5,0,r);
<**>     write(out,"nl",1,<<zd dd dd>,r,<: coroutine: :>,<<dd>,
<**>       d.current.coruident mod 1000,<:  ident: :>,<<ddd>,
<**>       d.current.coruident//1000,<: afbrudt, årsag=:>,cmi);
<**>   end;
<*-2*>
$
l./* coroutine termination/,i$
#12#
; message coroutinemonitor - 36 ;;
$
l./<*-1*>/,l 1,i$
<* aktioner ved normal og unormal coroutineterminering insættes her *>
coru_term:

    begin
      if false and alarmcause extract 24 = (-9) <* break *> and
         alarmcause shift (-24) extract 24 = 0 then
      begin
        endaction:= 2;
        goto program_slut;
      end;
      if alarmcause extract 24 = (-9) <* break *> and
         alarmcause shift (-24) = 8 <* parent *>
      then sæt_bit_i(trapmode,15<*killed activities*>,0<*normal output*>);
      if alarmcause shift (-24) extract  24 <> -2 or
         alarmcause extract 24 <> -13 then
      begin
        write(zbillede,"nl",1,<:alarmcause(param,cause)=:>,<<d>,
              alarmcause shift (-24),<:,:>,
              alarmcause extract 24);
        for i:=1 step 1 until max_coru do
          j:=activate(-i); <* kill *>
<*      skriv billede *>
      end
      else
      begin
        errorbits:= 0; <* ok.yes warning.no *>
        goto finale;
      end;
    end;

goto dump;
$
l./initialization:/,i$
#12#
; message coroutinemonitor - 37 ;;
$
l./<* operation *>/,i$
#12#
; message coroutinemonitor - 38 ;;
$
l./trap(dump)/,i$
#12#
; message coroutinemonitor - 39 ;;
$
l./:5:/,i$
algol list.on;
$
l./:5:/,l 1,i$
#12#
algol list.off;
; message coroutinemonitor - 40 ;;
$
l./dump:/,l 1,i$
  op:= op;
<* :6:            trap-aktioner 1 *>
$
l./<*-1*>/,l 1,i$
<* :7:            trap-aktioner 2 *>
$
l b,l-1,i$
algol list.on;
program_slut:
$
g t/; message/message/
g t/;;/;/
f
▶EOF◀