MODULE sym$job_recovery_test;
?? PUSH (LISTEXT := ON) ??
*copyc osd$default_pragmats
*copyc amp$open
*copyc amp$get_segment_pointer
*copyc pmt$program_parameters
*copyc osp$set_status_abnormal
?? POP ??

  PROCEDURE job_recovery_test (p: pmt$program_parameters;
    VAR status: ost$status);

    CONST
      page_size = 4096 DIV 8,
      page_count = 50;

    VAR
      lffid,
      pffid: amt$file_identifier,
      as: array [1 .. 1] of amt$access_selection,
      segp: amt$segment_pointer,
      lfp,
      pfp: ^ARRAY [0 .. 100000000] of integer,
      pc,
      bc,
      ml,
      pass,
      errl,
      cval: integer,
      err: string (100),
      msg: string (50);

    as [1].key := amc$access_mode;
    as [1].access_mode := $pft$usage_selections [pfc$read, pfc$modify, pfc$shorten, pfc$append];
    amp$open ('lf                             ', amc$segment, ^as, lffid, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    amp$get_segment_pointer (lffid, amc$cell_pointer, segp, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    lfp := segp.cell_pointer;

    amp$open ('pf                             ', amc$segment, ^as, pffid, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    amp$get_segment_pointer (pffid, amc$cell_pointer, segp, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    pfp := segp.cell_pointer;

    pass := 0;
    cval := 1;
    WHILE TRUE DO
      cval := cval + 1;
      pass := pass + 1;

      FOR pc := 0 TO page_count - 1 DO
        FOR bc := 0 TO page_size - 1 DO
          lfp^ [(pc * page_size) + bc] := cval;
          pfp^ [(pc * page_size) + bc] := cval;
        FOREND;
      FOREND;

      FOR pc := 0 TO page_count - 1 DO
        FOR bc := 0 TO page_size - 1 DO
          IF lfp^ [(pc * page_size) + bc] <> cval THEN
            stringrep(err,errl,' local file test failure ',pc,bc,cval,pass);
            osp$set_status_abnormal ('SY', 9908, err(1,errl),
                  status);
            RETURN;
          IFEND;
          IF pfp^ [(pc * page_size) + bc] <> cval THEN
            stringrep(err,errl,' perm file test failure ',pc,bc,cval,pass);
            osp$set_status_abnormal ('SY', 9909, err(1,errl),
                  status);
            RETURN;
          IFEND;
        FOREND;
      FOREND;

    WHILEND;
  PROCEND job_recovery_test;
MODEND
