[environment('sortcall')] module vmssort(output); procedure vmssort(var sort_rc:integer); label RETURN; const max_pn_alpha=20; max_field = 300; SS$_NORMAL = 1; DSC$K_DTYPE_L = 8; (* Longword Integer. 32-bit signed *) DSC$K_DTYPE_T = 14; (* Character-coded text. A single 8-bit character *) sor$gk_record = 1; type word_integer = [word] 0..65535; byte_integer = [byte] 0..255; pn_alpha_type=packed array[1..max_pn_alpha] of char; field_array = packed array[1..max_field] of char; field_type = packed record field_lngth :integer; field_level :field_array; end; sort_type = packed record record_type :char; page_number :integer; abs_page_number :integer; page_string :pn_alpha_type; sort_part :packed array[1..3] of field_type; print :packed array[1..3] of field_type; end; var sort_stat: integer; key_info:array[1..21] of word_integer := (5,DSC$K_DTYPE_T,0,33,300, DSC$K_DTYPE_T,0,337,300, DSC$K_DTYPE_T,0,641,300, DSC$K_DTYPE_L,1,5,4, DSC$K_DTYPE_L,0,1,4); vmssort_type:byte_integer := sor$gk_record; function sor$pass_files( in_file: [class_s] packed array [l..u:integer] of char; out_file: [class_s] packed array [a..b:integer] of char) : integer; extern; function sor$begin_sort( %REF key_data: array [l..u:integer] of word_integer; long_rec: word_integer := %IMMED 0; options: integer := %IMMED 0; in_file_size: integer := %IMMED 0; user_compare: integer := %IMMED 0; user_equal: integer := %IMMED 0; s_type: byte_integer; work_files: byte_integer := %IMMED 0; context : integer := %IMMED 0): integer; extern; function sor$sort_merge: integer; extern; function sor$end_sort: integer; extern; begin sort_stat:=sor$pass_files(in_file:='TEXT1$$.INSORT', out_file:='TEXT1$$.OUTSORT'); if not odd(sort_stat) then goto RETURN; sort_stat:=sor$begin_sort(key_data:=key_info, s_type:=vmssort_type); if not odd(sort_stat) then goto RETURN; sort_stat:=sor$sort_merge; if not odd(sort_stat) then goto RETURN; sort_stat:=sor$end_sort; RETURN: sort_rc:=sort_stat; end; end.