DataMuseum.dk

Presents historical artifacts from the history of:

RC3500

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

See our Wiki for more about RC3500

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦7cf4f7f6d⟧ TextFileVerbose

    Length: 6144 (0x1800)
    Types: TextFileVerbose
    Names: »logmodule«

Derivation

└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system
    └─⟦72244f0ef⟧ 
        └─⟦this⟧ »logmodule« 

TextFileVerbose

      procedure log(log_mess,dc_call);
      value dc_call;
      real array log_mess;
      boolean dc_call;
      begin
         
         real array help_arr(1:max_mess_lgh + 1);
         real array field pointer,lab_pointer;
         integer array field buffer;
         integer no_of_bytes,no_of_halfwords;
         
         pointer := 4;
         lab_pointer := 8;
         
         buffer := wait(log_key_sem);
         
         no_of_bytes := log_mess(1) shift (-32);
         no_of_halfwords := if dc_call then (no_of_bytes + 12) / 3 * 2 else
         _                  (no_of_bytes - 6) / 3 * 2;
         no_of_halfwords := no_of_halfwords + no_of_halfwords mod 2;
         
         if dc_call then
         begin
            tofrom(help_arr.lab_pointer,log_mess,no_of_halfwords);
            help_arr(1) := real(extend no_of_halfwords shift 24);
            help_arr(2) := help_arr(5);
         end
         else
         log_mess.pointer(1) := real(extend no_of_halfwords shift 24);
         
         if no_of_halfwords > halfwords_available then
         begin
            if dc_call then outvar(z_log,help_arr)
            else outvar(z_log,log_mess.pointer);  <* dummy, to be sure that
            _                                        the block is filled with
            _                                        binary nulls *>

            setposition(z_log,0,0);
            swoprec6(z_log,max_block_no * 4);
            z_log(current_block) := real(min_for_this_block);
            current_block := current_block + 1;
            setposition(z_log,0,current_block * segm_pr_block);
            min_for_this_block := extend (-1) shift (-1);
            if current_block > max_block_no then
            begin
               log_change_forced := true;
               change_log_zone;
            end
            else
            if current_block > warning_block_no then
            begin
               <* operator warning *>
            end;
         end;
         halfwords_available := if dc_call then
         outvar(z_log,help_arr)
         else outvar(z_log,log_mess.pointer);
         return_buf(buffer);
      end log;
      \f


      procedure change_log_zone;
      begin
         integer i;
         outvar(z_log,em_record);
         if -, log_change_forced then
         begin
            setposition(z_log,0,0);
            swoprec6(z_log,max_block_no * 4);
            z_log(current_block) := real(min_for_this_block);
         end;
         close(z_log,true);
         current_log_file := 3 - current_log_file;
         open(z_log,4,case current_log_file of (<:disclog1:>,<:disclog2:>),0);
         outrec6(z_log,max_block_no * 4);
         for i := 1 step 1 until max_block_no do
         z_log(i) := real (extend (-1));
         setposition(z_log,0,segm_pr_block);
         current_block := 1;
         halfwords_available := 128 * 4 * segm_pr_block;
         min_for_this_block := extend (-1) shift (-1);
      end change_log_zone;
      \f


      procedure dump_log(tape_name);
      real array tape_name;
      begin
         integer dump_log_file_no,i;
         integer array field buffer;
         zone z(128,1,stderror);
         
         if log_change_forced then
         log_change_forced := false
         else
         begin
            buffer := wait(log_key_sem);
            change_log_zone;
            return_buf(buffer);
         end;
         
         dump_log_file_no := 3 - current_log_file;
         i := 1;
         open(z,4,<:dumplogjob:>,0);
         write(z,<:jobkort:>,"nl",1,<:dumplogbin name.:>,
         string tape_name(increase(i)),<: logno.:>,<<d>,dump_log_file_no,
         <: maxblock.:>,<<zd>,max_block_no,<: segm.:>,segm_pr_block,
         "nl",1,<:finis:>,"nl",1,"em",3);
         close(z,true);
         
         <* newjob(<:dumplogjob:>); *>
         
      end dump_log;
      \f


      procedure log_handler;
      begin
         
         zone z_in(20,1,da_std_error);
         integer input_stream,no_of_hwords,op_code;
         long array in_proc_name(1:2);
         
         input_stream := 17;
         inproc_name(1) := long <:strea:> add 'm';
         inproc_name(2) := long <:in:>;
         
         initzone(z_in,0,in_proc_name,0,3 shift 12 + input_stream,0);
         
         repeat
            sendbuffer(z_in,80);
            no_of_hwords := getbuffer(z_in);
            if no_of_hwords < 1 then
            <* troubles *>
            else
            begin
               op_code := read_ch(z_in,11);
               if op_code <> 0 shift 4 + 0 then
               begin
                  
                  <* error - no log message *>
                  
               end
               else
               log(z_in,false);
            end
         until false;
      end log_handler;
\f


      procedure print_log(doc_name,from_time,to_time,sender,
      receiver,op_code);
      real array doc_name;
      long from_time,to_time,sender,receiver;
      integer op_code;
      begin
         <* The procedure starts the log-printer program.
         *>
         zone z(128,1,stderror);
         integer i;

         open(z,4,<:printlogjob:>,0);
         i := 1;
         write(z,<:jobkort:>,"nl",1, 
         <:message printlog begin:>,"nl",1,
         <:printlogbin maxblock.:>,<<zd>,max_block_no,
         <: segm.:>,segm_pr_block,"nl",1,
         if doc_name(1) = real <:disc:> then case current_log_file of (
         <:disclog1:>,<:disclog2:>) else string doc_name(increase(i)),"sp",1,
         from_time,"sp",1,to_time,"nl",1,sender,"sp",1,receiver,"nl",1,
         op_code,"nl",1,<:finis:>,"nl",1,"em",3);

         close(z,true);

         <* newjob(<:printlogjob:>); *>
      end print_log;

«eof»