?? NEWTITLE := 'NOS/VE : File System : Create File' ??
MODULE fsm$create_file;
?? RIGHT := 110 ??

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc fst$file_reference
?? POP ??
*copyc bap$create_file
*copyc fsp$evaluate_file_for_creation
*copyc osp$enforce_exception_policies
*copyc osp$file_access_condition

*copyc osv$initial_exception_context

?? TITLE := 'PROCEDURE [XDCL, #GATE] fsp$create_file', EJECT ??

  PROCEDURE [XDCL, #GATE] fsp$create_file
    (    file: fst$file_reference;
         attachment_options: ^fst$attachment_options;
         cycle_attributes: ^fst$file_cycle_attributes;
         device_attributes: ^fst$device_attributes;
         file_attributes: ^fst$file_attributes;
     VAR resolved_path: fst$path;
     VAR status: ost$status);

    CONST
      command_file_reference_allowed = TRUE;

    VAR
      context: ^ost$ecp_exception_context,
      evaluated_file_reference: fst$evaluated_file_reference;

    status.normal := TRUE;
    context := NIL;

    fsp$evaluate_file_for_creation (file, NOT command_file_reference_allowed, evaluated_file_reference,
          status);
    IF NOT status.normal THEN
      RETURN; {----->
    IFEND;

  /create_file/
    REPEAT
      bap$create_file (attachment_options, cycle_attributes, file_attributes, device_attributes,
            evaluated_file_reference, resolved_path, status);
      IF osp$file_access_condition (status) THEN
        IF context = NIL THEN
          PUSH context;
          context^ := osv$initial_exception_context;
          context^.file.selector := osc$ecp_evaluated_file_ref;
          context^.file.evaluated_file_reference := evaluated_file_reference;
        IFEND;
        context^.condition_status := status;
        osp$enforce_exception_policies (context^);
        status := context^.condition_status;
      IFEND;
    UNTIL status.normal OR (NOT osp$file_access_condition (status)) OR (NOT context^.wait);

  PROCEND fsp$create_file;
?? OLDTITLE ??
MODEND fsm$create_file;
