Listing 7

Psuedo code for interrupt handler:

On keyboard interrupt do {
   save context
   if keyboard has input, save with work request to level3 queue
   if block is ready {
      reset indicator
      add check_1st_blk to level2 queue
      }
   restore context
   enable interrupts
   return from interrupt
   }

On timer interrupt do {
   save context
   if write ok flag set{ /*done with interrupts off to avoid clash */
      initiate write
      clear flag
      }
   enable interrupts
   capture sample, save with work request to level2 queue
   step minute counter, on overflow {
      reset counter
      put minute change work request in level3 queue
      }
   return from interrupt
   }

Psuedo code for tasks

Analyze sample {
   perform statistical analysis
   if out of bounds {
      compute correction
      output correction
      }
   return
   }

Check Block Pt 1{
   compute partial checksum
   save result with pt2 work request in level2 queue
   return
   }

Check Block Pt 2{
   continue checksum
   save result with pt3 work request in level2 queue
   return
   }

Check Block pt3 {
   continue checksum
   save result with pt4 work request in level2 queue
   return
   }

Check Block pt4 {
   complete checksum
   if ok, set write ok flag
   return
   }

Parse input {
   save input parameter in command line buffer.
   If input keystroke is a terminal symbol{
      parse buffer;
      output manual correction;
      clear buffer;
      }
   return;
   }

Minute change{
   increment minutes-ones
   add work request for digit change to minutes-ones to level4 queue
   add work request for digit step level3 queue
   on overflow {
      add work request for digit change to minutes-tens to level 4 queue
      add work request for digit step level3 queue
      }
   on tens overflow {
      add work request for digit change to hours-ones to level 4 queue
      add work request for digit step level3 queue
      }
   on hours ones overflow {
      add work request for digit change to hours-tens to level 4 queue
      add work request for digit step level3 queue
      }
   on hours-twelve overflow {
      add work request for digit change to hours-ones to level 4 queue
      for (i=0; i<8; i++)
        add work request for digit step to level3 queue
      add work request for digit change to hours-tens to level 4 queue
      add work request for digit step to level 3 queue
      }
   }

digit change {
   set multiplexor to select requested digit
   }

digit step {
   for (i=1; i<60; i++) {
     add work request for one_pulse to level4 queue
     }
   }

one_pulse {
   pulse stepping motor
   busy-wait for 10 ms
   return
   }