MODULE osm$simulate_disk_fault_r1;
?? PUSH (LISTEXT := ON) ??
*copyc osd$default_pragmats
*copyc osv$simulated_disk_fault
*copyc osp$set_status_abnormal
?? POP ??

{ Purpose:
{  To manage the mainframe wired table associated with disk fault simulation.
{ Design:
{ Notes:
{  No interlocking is performed.
?? EJECT ??

  PROCEDURE [XDCL, #GATE] osp$simulate_disk_fault_r1
    (    sdf: ost$simulated_disk_fault;
     VAR status: ost$status);

    VAR
      i: integer;

    FOR i := LOWERBOUND (osv$simulated_disk_fault)
          TO UPPERBOUND (osv$simulated_disk_fault) DO
      IF NOT osv$simulated_disk_fault [i].in_use THEN
        osv$simulated_disk_fault [i] := sdf;
        status.normal := TRUE;
        RETURN;
      IFEND;
    FOREND;
    osp$set_status_abnormal ('XX', 1, 'Simulated disk fault table full', status);
  PROCEND osp$simulate_disk_fault_r1;
?? EJECT ??

  PROCEDURE [XDCL, #GATE] osp$clear_disk_faults_r1;

    VAR
      i: integer;

    FOR i := LOWERBOUND (osv$simulated_disk_fault)
          TO UPPERBOUND (osv$simulated_disk_fault) DO
      osv$simulated_disk_fault [i].in_use := FALSE;
    FOREND;
  PROCEND osp$clear_disk_faults_r1;
MODEND osm$simulate_disk_fault_r1
