?? LEFT := 1, RIGHT := 110 ??
?? FMT (FORMAT := ON, KEYW := UPPER, IDENT := LOWER) ??
?? SET (LISTCTS := OFF) ??
MODULE pfm$test_all_requests ALIAS 'pfmtall';
?? PUSH (LISTEXT := ON) ??
*copyc OSP$UNPACK_STATUS_CONDITION
*copyc PFP$ATTACH
*copyc PFP$CHANGE
*copyc PFP$DEFINE
*copyc PFP$DEFINE_CATALOG
*copyc PFP$DELETE_CATALOG_PERMIT
*copyc PFP$DELETE_PERMIT
*copyc PFP$PERMIT
*copyc PFP$PERMIT_CATALOG
*copyc PFP$PURGE
*copyc PFP$PURGE_CATALOG
*copyc AMP$OPEN
*copyc AMP$CLOSE
*copyc AMP$PUT_NEXT
*copyc AMP$RETURN
*copyc PFE$ERROR_CONDITION_CODES
*copyc PFE$INTERNAL_ERROR_CONDITIONS
?? POP ??
?? TITLE := '*** GLOBAL DEFINITIONS ***', EJECT ??

  CONST
    null = osc$null_name;

?? SKIP := 4 ??

  VAR
    end_of_line: string (1) := CHR (255),
    cycle_selector: pft$cycle_selector := [pfc$highest_cycle],
    password: pft$password := ' ',
    new_password: pft$password := 'new_password',
    usage: pft$usage_selections := [],
    sharing: pft$share_selections := [pfc$read, pfc$shorten, pfc$append, pfc$modify, pfc$execute],
    nowait: pft$wait := pfc$no_wait,
    application_info: pft$application_info := ' ',

    c: array [1 .. 2] of pft$name := [null, null],
    c1: array [1 .. 3] of pft$name := [null, null, 'catalog_1'],
    c2: array [1 .. 3] of pft$name := [null, null, 'catalog_2'],
    c3: array [1 .. 3] of pft$name := [null, null, 'catalog_3'],
    c11: array [1 .. 4] of pft$name := [null, null, 'catalog_1', 'catalog_1'],
    c12: array [1 .. 4] of pft$name := [null, null, 'catalog_1', 'catalog_2'],
    c13: array [1 .. 4] of pft$name := [null, null, 'catalog_1', 'catalog_3'],
    c121: array [1 .. 5] of pft$name := [null, null, 'catalog_1', 'catalog_2', 'catalog_1'],
    c122: array [1 .. 5] of pft$name := [null, null, 'catalog_1', 'catalog_2', 'catalog_2'],
    c123: array [1 .. 5] of pft$name := [null, null, 'catalog_1', 'catalog_2', 'catalog_3'],

    f1: array [1 .. 3] of pft$name := [null, null, 'file_1'],
    f2: array [1 .. 3] of pft$name := [null, null, 'file_2'],
    f3: array [1 .. 3] of pft$name := [null, null, 'file_3'],
    f11: array [1 .. 4] of pft$name := [null, null, 'catalog_1', 'file_1'],
    f13: array [1 .. 4] of pft$name := [null, null, 'catalog_1', 'file_3'],
    f14: array [1 .. 4] of pft$name := [null, null, 'catalog_1', 'file_4'],
    f125: array [1 .. 5] of pft$name := [null, null, 'catalog_1', 'catalog_2', 'file_5'],
    f126: array [1 .. 5] of pft$name := [null, null, 'catalog_1', 'catalog_2', 'file_6'],
    f127: array [1 .. 5] of pft$name := [null, null, 'catalog_1', 'catalog_2', 'file_7'],

    unknown_catalog: array [1 .. 3] of pft$name := [null, null, 'unknown_catalog'],
    unknown_catalog_known_catalog: array [1 .. 4] of pft$name := [null, null, 'unknown_catalog', 'catalog_1'],
    unknown_catalog_unknown_file: array [1 .. 4] of pft$name := [null, null, 'unknown_catalog',
      'unknown_file'],
    unknown_catalog_known_file: array [1 .. 4] of pft$name := [null, null, 'unknown_catalog', 'file_1'],
    known_catalog_unknown_file: array [1 .. 3] of pft$name := [null, null, 'unknown_file'],

    l1: amt$local_file_name := 'lfn_1',
    l2: amt$local_file_name := 'lfn_2',
    l3: amt$local_file_name := 'lfn_3',
    l4: amt$local_file_name := 'lfn_4',
    l5: amt$local_file_name := 'lfn_5',
    l6: amt$local_file_name := 'lfn_6',
    l7: amt$local_file_name := 'lfn_7',
    l8: amt$local_file_name := 'lfn_8',
    l9: amt$local_file_name := 'lfn_9',
    l10: amt$local_file_name := 'lfn_10',
    l11: amt$local_file_name := 'lfn_11',
    l12: amt$local_file_name := 'lfn_12',

    public: pft$group := [pfc$public],
    family_1: pft$group := [pfc$family, ['family_1']],
    family_2: pft$group := [pfc$family, ['family_2']],
    account_1: pft$group := [pfc$account, ['family_1', 'account_1']],
    account_2: pft$group := [pfc$account, ['family_1', 'account_2']],
    project_1: pft$group := [pfc$project, ['family_1', 'account_1', 'project_1']],
    project_2: pft$group := [pfc$project, ['family_1', 'account_1', 'project_2']],
    user_1: pft$group := [pfc$user, ['family_1', 'user_1']],
    user_2: pft$group := [pfc$user, ['family_1', 'user_2']],
    user_account_1: pft$group := [pfc$user_account, ['family_1', 'account_1', 'user_1']],
    user_account_2: pft$group := [pfc$user_account, ['family_1', 'account_2', 'user_1']],
    member_1: pft$group := [pfc$member, ['family_1', 'account_1', 'project_1', 'user_1']],
    member_2: pft$group := [pfc$member, ['family_1', 'account_1', 'project_2', 'user_1']],

    read_access: pft$permit_selections := [pfc$read],
    shorten_access: pft$permit_selections := [pfc$shorten],
    append_access: pft$permit_selections := [pfc$append],
    modify_access: pft$permit_selections := [pfc$modify],
    execute_access: pft$permit_selections := [pfc$execute],
    cycle_access: pft$permit_selections := [pfc$cycle],
    control_access: pft$permit_selections := [pfc$control],
    write_access: pft$permit_selections := [pfc$shorten, pfc$append, pfc$modify],
    all_access: pft$permit_selections := [pfc$read, pfc$shorten, pfc$append, pfc$modify, pfc$execute,
      pfc$cycle, pfc$control],
    no_access: pft$permit_selections := [],

    read_sharing: pft$share_selections := [pfc$read],
    shorten_sharing: pft$share_selections := [pfc$shorten],
    append_sharing: pft$share_selections := [pfc$append],
    modify_sharing: pft$share_selections := [pfc$modify],
    execute_sharing: pft$share_selections := [pfc$execute],
    write_sharing: pft$share_selections := [pfc$shorten, pfc$append, pfc$modify],
    all_sharing: pft$share_selections := [pfc$read, pfc$shorten, pfc$append, pfc$modify, pfc$execute],
    no_sharing: pft$share_selections := [],

    read_usage: pft$usage_selections := [pfc$read],

    change_list: array [1 .. 1] of pft$change_descriptor,
    change_list_5: array [1 .. 5] of pft$change_descriptor := [[pfc$pf_name_change, 'file_1'],
      [pfc$log_change, pfc$no_log], [pfc$retention_change, 321], [pfc$cycle_number_change, 555],
      [pfc$password_change, 'new_password']],

    file_id: amt$file_identifier,
    status: ost$status;

?? TITLE := '*** PFP$TEST_ALL_REQUESTS ***', EJECT ??
{       PFP$TEST_ALL_REQUESTS -
{

  PROCEDURE [XDCL, #GATE] pfp$test_all_requests;

    PROCEDURE [XREF] pfp$display_master_catalog;

    display_line (' Start of pfp$test_all_requests.');




    define (l1, f1, cycle_selector, password, 1, pfc$log, status);

    define_catalog (c1, status);

    define (l2, f2, cycle_selector, password, 999, pfc$no_log, status);

    define_catalog (c12, status);
    define_catalog (c123, status);

    define (l3, f13, cycle_selector, password, 500, pfc$log, status);

    define_catalog (c2, status);
    define_catalog (c3, status);
    define_catalog (c11, status);
    define_catalog (c13, status);

    define (l4, f14, cycle_selector, password, 30, pfc$no_log, status);

    define_catalog (c121, status);
    define_catalog (c122, status);

    define (l5, f125, cycle_selector, password, 1, pfc$log, status);

    define (l6, f126, cycle_selector, password, 1, pfc$log, status);

    define (l7, f127, cycle_selector, password, 1, pfc$log, status);

    define (l8, f1, cycle_selector, password, 999, pfc$no_log, status);

    cycle_selector.cycle_option := pfc$lowest_cycle;
    define (l9, f1, cycle_selector, password, 999, pfc$no_log, status);

    cycle_selector.cycle_option := pfc$specific_cycle;
    cycle_selector.cycle_number := 1;
    define (l10, f1, cycle_selector, password, 999, pfc$no_log, status);

    cycle_selector.cycle_number := 999;
    define (l11, f1, cycle_selector, password, 999, pfc$no_log, status);

    cycle_selector.cycle_option := pfc$highest_cycle;
    define (l12, f1, cycle_selector, password, 999, pfc$no_log, status);




    amp$return (l1, status);
    amp$return (l2, status);
    amp$return (l3, status);
    amp$return (l4, status);
    amp$return (l5, status);
    amp$return (l6, status);
    amp$return (l7, status);
    amp$return (l8, status);
    amp$return (l9, status);
    amp$return (l10, status);
    amp$return (l11, status);
    amp$return (l12, status);




    permit_catalog (c, user_2, read_access, read_sharing, application_info, status);
    permit_catalog (c1, public, read_access, read_sharing, application_info, status);
    permit_catalog (c12, family_1, read_access + write_access, read_sharing, application_info, status);
    permit (f125, user_1, read_access + write_access + cycle_access, read_sharing, application_info, status);

    permit (f1, public, read_access, read_sharing, application_info, status);
    permit (f1, family_1, shorten_access, shorten_sharing, application_info, status);
    permit (f1, family_2, append_access, append_sharing, application_info, status);
    permit (f1, account_1, modify_access, modify_sharing, application_info, status);
    permit (f1, account_2, execute_access, execute_sharing, application_info, status);
    permit (f1, project_1, cycle_access, no_sharing, application_info, status);
    permit (f1, project_2, control_access, no_sharing, application_info, status);
    permit (f1, user_1, read_access + write_access, read_sharing + write_sharing, application_info, status);
    permit (f1, user_2, read_access + execute_access, read_sharing + execute_sharing, application_info,
      status);
    permit (f1, user_account_1, all_access, no_sharing, application_info, status);
    permit (f1, user_account_2, no_access, all_sharing, application_info, status);
    permit (f1, member_1, read_access + write_access, read_sharing, application_info, status);
    permit (f1, member_2, read_access + write_access, read_sharing + write_sharing, application_info, status);

    permit (f1, user_1, no_access, all_sharing, application_info, status);




    cycle_selector.cycle_option := pfc$highest_cycle;
    attach (l1, f1, cycle_selector, password, usage, sharing, nowait, status);

    attach (l2, f2, cycle_selector, password, usage, sharing, nowait, status);

    attach (l3, f13, cycle_selector, password, usage, sharing, nowait, status);

    attach (l4, f14, cycle_selector, password, usage, sharing, nowait, status);

    attach (l5, f125, cycle_selector, password, usage, sharing, nowait, status);

    attach (l6, f126, cycle_selector, password, usage, sharing, nowait, status);

    attach (l7, f127, cycle_selector, password, usage, sharing, nowait, status);

    attach (l8, f1, cycle_selector, password, usage, sharing, nowait, status);

    cycle_selector.cycle_option := pfc$lowest_cycle;
    attach (l9, f1, cycle_selector, password, usage, sharing, nowait, status);

    cycle_selector.cycle_option := pfc$specific_cycle;
    cycle_selector.cycle_number := 1;
    attach (l10, f1, cycle_selector, password, usage, sharing, nowait, status);

    cycle_selector.cycle_number := 999;
    attach (l11, f1, cycle_selector, password, usage, sharing, nowait, status);

    cycle_selector.cycle_option := pfc$highest_cycle;
    attach (l12, f1, cycle_selector, password, usage, sharing, nowait, status);




    amp$return (l1, status);
    amp$return (l2, status);
    amp$return (l3, status);
    amp$return (l4, status);
    amp$return (l5, status);
    amp$return (l6, status);
    amp$return (l7, status);
    amp$return (l8, status);
    amp$return (l9, status);
    amp$return (l10, status);
    amp$return (l11, status);
    amp$return (l12, status);


    pfp$display_master_catalog;


    delete_permit (f1, user_2, status);
    delete_permit (f1, public, status);
    delete_permit (f1, family_1, status);
    delete_permit (f1, family_2, status);
    delete_permit (f1, family_2, status);
    delete_permit (f1, account_1, status);
    delete_permit (f1, account_2, status);
    delete_permit (f1, project_1, status);
    delete_permit (f1, project_2, status);
    delete_permit (f1, user_1, status);
    delete_permit (f1, user_2, status);
    delete_permit (f1, user_account_1, status);
    delete_permit (f1, user_account_2, status);
    delete_permit (f1, member_1, status);
    delete_permit (f1, member_2, status);

    permit_catalog (c, public, all_access, all_sharing, application_info, status);
    delete_catalog_permit (c, public, status);

    permit_catalog (c1, user_2, write_access, no_sharing, application_info, status);
    delete_catalog_permit (c1, user_2, status);

    permit (known_catalog_unknown_file, public, read_access, read_sharing, application_info, status);
    delete_permit (known_catalog_unknown_file, public, status);

    permit (unknown_catalog_known_file, public, read_access, read_sharing, application_info, status);
    delete_permit (unknown_catalog_known_file, public, status);

    permit_catalog (unknown_catalog, public, read_access, read_sharing, application_info, status);
    delete_catalog_permit (unknown_catalog, public, status);




    change_list [1].change_type := pfc$pf_name_change;
    change_list [1].pfn := f2 [UPPERBOUND (f2)];
    change (f1, cycle_selector, password, change_list, status);

    change_list [1].pfn := f3 [UPPERBOUND (f3)];
    change (f1, cycle_selector, password, change_list, status);

    change_list [1].change_type := pfc$password_change;
    change_list [1].password := new_password;
    change (f3, cycle_selector, password, change_list, status);

    change_list [1].change_type := pfc$cycle_number_change;
    change_list [1].cycle_number := 2;
    change (f3, cycle_selector, new_password, change_list, status);

    change_list [1].cycle_number := 3;
    change (f3, cycle_selector, new_password, change_list, status);

    change_list [1].change_type := pfc$retention_change;
    change_list [1].retention := 123;
    change (f3, cycle_selector, new_password, change_list, status);

    change_list [1].change_type := pfc$log_change;
    change_list [1].log := pfc$no_log;
    change (f3, cycle_selector, new_password, change_list, status);

    change_list [1].change_type := pfc$charge_change;
    change (f3, cycle_selector, new_password, change_list, status);

    change_list [1].change_type := pfc$pf_name_change;
    change_list [1].pfn := f1 [UPPERBOUND (f1)];
    change (f3, cycle_selector, new_password, change_list, status);

    change (f13, cycle_selector, password, change_list_5, status);

    change_list [1].change_type := pfc$pf_name_change;
    change_list [1].pfn := f13 [UPPERBOUND (f13)];
    change (f11, cycle_selector, new_password, change_list, status);




    purge_catalog (c1, status);

    cycle_selector.cycle_option := pfc$highest_cycle;
    purge (f127, cycle_selector, password, status);

    purge (f126, cycle_selector, password, status);

    purge (f125, cycle_selector, password, status);

    purge_catalog (c121, status);

    purge_catalog (c122, status);

    purge_catalog (c123, status);

    purge_catalog (c11, status);

    purge_catalog (c12, status);

    purge_catalog (c13, status);

    purge (f14, cycle_selector, password, status);

    purge (f13, cycle_selector, new_password, status);

    purge (f2, cycle_selector, password, status);

    purge (f1, cycle_selector, new_password, status);
    purge (f1, cycle_selector, new_password, status);
    purge (f1, cycle_selector, new_password, status);

    purge_catalog (c1, status);

    purge_catalog (c2, status);

    purge_catalog (c3, status);

    purge (known_catalog_unknown_file, cycle_selector, password, status);
    purge (unknown_catalog_unknown_file, cycle_selector, password, status);

    purge_catalog (unknown_catalog_known_catalog, status);


    {additional pf tests
    {BEGIN - these test are dependent on each other.
    cycle_selector.cycle_option := pfc$highest_cycle;
    define (l1, f1, cycle_selector, password, 1, pfc$log, status);

    {test of cycle busy }
    attach (l2, f1, cycle_selector, password, read_usage, read_sharing, nowait, status);

    {test of return
    amp$return (l1, status);
    attach (l1, f1, cycle_selector, password, read_usage, read_sharing, nowait, status);

    {test of sharing
    attach (l2, f1, cycle_selector, password, read_usage, read_sharing, nowait, status);

    {test of define of catalog of same name as file }
    define_catalog (f1, status);

    {test of duplicate lfn's
    attach (l2, f1, cycle_selector, password, read_usage, read_sharing, nowait, status);
    define (l2, f3, cycle_selector, password, 1, pfc$log, status);

    {test of defining and attaching an existing local file name}
    amp$open (l3, amc$record, NIL, file_id, status);
    define (l3, f3, cycle_selector, password, 1, pfc$log, status);
    attach (l3, f1, cycle_selector, password, read_usage, read_sharing, nowait, status);

    {purging an attached file
    purge (f1, cycle_selector, password, status);

    {test of attaching a purged (but active) file.
    attach (l4, f1, cycle_selector, password, read_usage, read_sharing, nowait, status);

    {clean up
    amp$return (l1, status);
    amp$return (l2, status);
    amp$return (l3, status);
    amp$return (l4, status);
    {END - the above tests were dependent on each other - all cleanup has been done


    {test of define of file as same name as catalog
    define_catalog (f1, status);
    define (l1, f1, cycle_selector, password, 1, pfc$log, status);
    purge_catalog (f1, status);




    display_line (' End of pfp$test_all_requests.');

  PROCEND pfp$test_all_requests;
?? TITLE := '*** ATTACH ***', EJECT ??
{       ATTACH -
{

  PROCEDURE attach (lfn: amt$local_file_name;
    path: pft$path;
    cycle_selector: pft$cycle_selector;
    password: pft$password;
    usage_selections: pft$usage_selections;
    share_selections: pft$share_selections;
    wait: pft$wait;
    VAR status: ost$status);

    VAR
      attach_count: [STATIC] integer := 0;

    attach_count := attach_count + 1;
    pfp$attach (lfn, path, cycle_selector, password, usage_selections, share_selections, wait, status);
    display_error ('ATTACH', attach_count, status);
  PROCEND attach;
?? TITLE := '*** CHANGE ***', EJECT ??
{       CHANGE -
{

  PROCEDURE change (path: pft$path;
    cycle_selector: pft$cycle_selector;
    password: pft$password;
    change_list: pft$change_list;
    VAR status: ost$status);

    VAR
      change_count: [STATIC] integer := 0;

    change_count := change_count + 1;
    pfp$change (path, cycle_selector, password, change_list, status);
    display_error ('CHANGE', change_count, status);
  PROCEND change;
?? TITLE := '*** DEFINE ***', EJECT ??
{       DEFINE -
{

  PROCEDURE define (lfn: amt$local_file_name;
    path: pft$path;
    cycle_selector: pft$cycle_selector;
    password: pft$password;
    retention: pft$retention;
    log: pft$log;
    VAR status: ost$status);

    VAR
      define_count: [STATIC] integer := 0;

    define_count := define_count + 1;
    pfp$define (lfn, path, cycle_selector, password, retention, log, status);
    display_error ('DEFINE', define_count, status);
  PROCEND define;
?? TITLE := '*** DEFINE_CATALOG ***', EJECT ??
{       DEFINE_CATALOG -
{

  PROCEDURE define_catalog (path: pft$path;
    VAR status: ost$status);

    VAR
      define_catalog_count: [STATIC] integer := 0;

    define_catalog_count := define_catalog_count + 1;
    pfp$define_catalog (path, status);
    display_error ('DEFINE_CATALOG', define_catalog_count, status);
  PROCEND define_catalog;
?? TITLE := '*** DELETE_CATALOG_PERMIT ***', EJECT ??
{       DELETE_CATALOG_PERMIT -
{

  PROCEDURE delete_catalog_permit (path: pft$path;
    group: pft$group;
    VAR status: ost$status);

    VAR
      delete_catalog_permit_count: [STATIC] integer := 0;

    delete_catalog_permit_count := delete_catalog_permit_count + 1;
    pfp$delete_catalog_permit (path, group, status);
    display_error ('DELETE_CATALOG_PERMIT', delete_catalog_permit_count, status);
  PROCEND delete_catalog_permit;
?? TITLE := '*** DELETE_PERMIT ***', EJECT ??
{       DELETE_PERMIT -
{

  PROCEDURE delete_permit (path: pft$path;
    group: pft$group;
    VAR status: ost$status);

    VAR
      delete_permit_count: [STATIC] integer := 0;

    delete_permit_count := delete_permit_count + 1;
    pfp$delete_permit (path, group, status);
    display_error ('DELETE_PERMIT', delete_permit_count, status);
  PROCEND delete_permit;
?? TITLE := '*** DISPLAY ***', EJECT ??
{       DISPLAY -
{

  PROCEDURE display (strng: string ( * ));

    VAR
      index: [STATIC] integer := 1,
      line: [STATIC] string (255),
      space: integer,
      size: integer,
      file_open: [STATIC] boolean := FALSE,
      file_name: [STATIC] amt$local_file_name := '$OUTPUT',
      file_id: [STATIC] amt$file_identifier,
      file_byte_address: amt$file_byte_address,
      status: ost$status;

    size := STRLENGTH (strng);
    IF (size > 0) THEN
      IF (strng = end_of_line) THEN
        IF NOT file_open THEN
          file_open := TRUE;
          amp$open (file_name, amc$record, NIL, file_id, status);
        IFEND;
        amp$put_next (file_id, ^line, index - 1, file_byte_address, status);
        index := 1;
      ELSE
        space := STRLENGTH (line) - index + 1;
        IF (size > space) THEN
          size := space;
        IFEND;
        line (index, size) := strng (1, size);
        index := index + size;
      IFEND;
    IFEND;
  PROCEND display;
?? TITLE := '*** DISPLAY_ERROR ***', EJECT ??
{       DISPLAY_ERROR -
{

  PROCEDURE display_error (name: string ( * );
    number: integer;
    status: ost$status);

    VAR
      identifier: ost$status_identifier,
      condition_number: ost$status_condition_number;

    IF NOT status.normal THEN
      display (' ');
      display (name);
      display (' #');
      display_integer (number);
      display (' = ');
      IF ((pfc$lowest_error <= status.condition) AND (status.condition <= pfc$highest_error)) THEN
        osp$unpack_status_condition (status.condition, identifier, condition_number);
        display (identifier);
        display (': ');
        display_pf_condition (condition_number);
        display (': ');
        display (status.text.value (1, status.text.size));
      ELSE
        display_integer (status.condition);
      IFEND;
      display_line ('');
    IFEND;
  PROCEND display_error;
?? TITLE := '*** DISPLAY_INTEGER ***', EJECT ??
{       DISPLAY_INTEGER -
{

  PROCEDURE display_integer (intgr: integer);

    VAR
      strng: string (30),
      length: integer;

    STRINGREP (strng, length, intgr);
    display (strng (1, length));
  PROCEND display_integer;
?? TITLE := '*** DISPLAY_LINE ***', EJECT ??
{       DISPLAY_LINE -
{

  PROCEDURE display_line (strng: string ( * ));

    display (strng);
    display (end_of_line);
  PROCEND display_line;
?? TITLE := '*** DISPLAY_PF_CONDITION ***', EJECT ??
{       DISPLAY_PF_CONDITION -
{

  PROCEDURE display_pf_condition (condition: integer);

    display_integer (condition);
  PROCEND display_pf_condition;
?? TITLE := '*** PERMIT ***', EJECT ??
{       PERMIT -
{

  PROCEDURE permit (path: pft$path;
    group: pft$group;
    permit_selections: pft$permit_selections;
    share_requirements: pft$share_requirements;
    application_info: pft$application_info;
    VAR status: ost$status);

    VAR
      permit_count: [STATIC] integer := 0;

    permit_count := permit_count + 1;
    pfp$permit (path, group, permit_selections, share_requirements, application_info, status);
    display_error ('PERMIT', permit_count, status);
  PROCEND permit;
?? TITLE := '*** PERMIT_CATALOG ***', EJECT ??
{       PERMIT_CATALOG -
{

  PROCEDURE permit_catalog (path: pft$path;
    group: pft$group;
    permit_selections: pft$permit_selections;
    share_requirements: pft$share_requirements;
    application_info: pft$application_info;
    VAR status: ost$status);

    VAR
      permit_catalog_count: [STATIC] integer := 0;

    permit_catalog_count := permit_catalog_count + 1;
    pfp$permit_catalog (path, group, permit_selections, share_requirements, application_info, status);
    display_error ('PERMIT_CATALOG', permit_catalog_count, status);
  PROCEND permit_catalog;
?? TITLE := '*** PURGE ***', EJECT ??
{       PURGE -
{

  PROCEDURE purge (path: pft$path;
    cycle_selector: pft$cycle_selector;
    password: pft$password;
    VAR status: ost$status);

    VAR
      purge_count: [STATIC] integer := 0;

    purge_count := purge_count + 1;
    pfp$purge (path, cycle_selector, password, status);
    display_error ('PURGE', purge_count, status);
  PROCEND purge;
?? TITLE := '*** PURGE_CATALOG ***', EJECT ??
{       PURGE_CATALOG -
{

  PROCEDURE purge_catalog (path: pft$path;
    VAR status: ost$status);

    VAR
      purge_catalog_count: [STATIC] integer := 0;

    purge_catalog_count := purge_catalog_count + 1;
    pfp$purge_catalog (path, status);
    display_error ('PURGE_CATALOG', purge_catalog_count, status);
  PROCEND purge_catalog;
?? SKIP := 4 ??
MODEND pfm$test_all_requests;
