Example of Using an Altered Sequence [ SORT-MERGE/XL Programmer's Guide ] MPE/iX 5.0 Documentation
SORT-MERGE/XL Programmer's Guide
Example of Using an Altered Sequence
The following example sorts the data file below, DATA. The entries in
DATA are sorted using an altered collating sequence that is explicitly
specified in the program. The sequence contains all displayable ASCII
characters and alters the order of the alphabetic characters to
AaBbCc....The output file is called FRUIT
DATA File of fruit names
banana
Apple
Grapes
grapes
Pear
peach
orange
Example D-5. SORTALT Program
$standard_level system
program SORTALT
C
C This program reads the files TEMPEMP and PERMEMP, sorts them by last
C name, outputs them by record, alters the output recors, and prints the
C record to $STDLIST.
C
integer DATAFILENUM
2 ,FRUITFILENUM
3 ,STATUS
C
common /PARMS/ DATAFILENUM, FRUITFILENUM, STATUS
C
call OPEN_FILES
call DO_SORT
call CLOSE_FILES
stop
end
C
subroutine OPEN_FILES
C
system intrinsic HPFOPEN
2 ,QUIT
C
integer DESIGNATOR
2 ,DOMAIN
3 ,ACCESS
4 ,PERMANENT
5 ,DATAFILENUM
6 ,FRUITFILENUM
7 ,STATUS
8 ,RECORD_SIZE
9 ,NEW
A ,WRITE
B ,SIZE
C
character DATAFILE*10
2 ,FRUITFILE*10
C
common /PARMS/ DATAFILENUM, FRUITFILENUM, STATUS
C
DESIGNATOR = 2
DOMAIN = 3
ACCESS = 11
RECORD_SIZE = 19
Example D-5. SORTALT Program, continued
C
DATAFILE = '%DATA%'
PERMANENT = 1
call HPFOPEN (DATAFILENUM, STATUS, DESIGNATOR,
2 ,DATAFILE, DOMAIN, PERMANENT)
if (STATUS .ne. 0) then
print *, 'HPFOPEN error on DATAFILE. Terminating.'
call QUIT (1)
endif
C
NEW = 4
WRITE = 1
SIZE = 80
FRUITFILE = '%FRUIT%'
call HPFOPEN (FRUITFILENUM, STATUS, DESIGNATOR,
2 ,FRUITFILE, DOMAIN, NEW, ACCESS, WRITE
3 ,RECORD_SIZE, SIZE)
if (STATUS .ne. 0) then
print *, 'HPFOPEN error on FRUITFILE. Terminating.'
call QUIT (2)
endif
C
return
end
C
subroutine DO_SORT
C
system intrinsic HPSORTINIT
2 ,HPSORTERRORMESS
3 ,HPSORTEND
4 ,HPSORTINPUT
5 ,HPSORTOUTPUT
6 ,QUIT
C
integer OUTPUT_OPTION
2 ,NUMKEYS
3 ,INPUTFILES(2)
4 ,OUTPUTFILE(2)
5 ,KEYS(4)
6 ,DATAFILENUM
7 ,FRUITFILENUM
8 ,STATUS
C
character ALTSEQ*96
1 ,MESSAGE*80
C
Example D-5. SORTALT Program, continued
common /PARMS/ DATAFILENUM, FRUITFILENUM, STATUS
C
INPUTFILES(1) = DATAFILENUM
INPUTFILES(2) = 0
C
OUTPUTFILE(1) = FRUITFILENUM
OUTPUTFILE(2) = 0
C
OUTPUT_OPTION = 0
C
NUMKEYS = 1
KEYS(1) = 1
KEYS(2) = 20
KEYS(3) = 0
KEYS(4) = 0
C
ALTSEQ(1:2) = ' '
ALTSEQ(1:1) = CHAR(0)
ALTSEQ(2:2) = CHAR(93)
C
ALTSEQ(3:17) = '!"#$%&"()*+,-./'
ALTSEQ(18:33) = '0123456789::<=>?'
ALTSEQ(34:49) = '@AaBbCcDdEeFfGgH'
ALTSEQ(50:65) = 'hIiJjKkLlMmNnOoP'
ALTSEQ(66:80) = 'pQqRrSsTtUuVvWwX'
ALTSEQ(81:95) = 'xYyZz[\]^^_{|}~'
C
call HPSORTINIT (STATUS, INPUTFILES, OUTPUTFILE
2 ,OUTPUT_OPTION, ,,, NUMKEYS, KEYS
3 ,ALTSEQ,,,STATISTICS)
if (STATUS .ne. 0) then
MESSAGE = ' '
call HPSORTERRORMESS (STATUS, MESSAGE, LENGTH)
print *,MESSAGE
endif
C
call HPSORTEND (STATUS)
if (STATUS .ne. 0) then
MESSAGE = ' '
call HPSORTERRORMESS (STATUS, MESSAGE, LENGTH)
print *,MESSAGE
endif
C
return
end
C
Example D-5. SORTALT Program, continued
subroutine CLOSE_FILES
C
system intrinsic FCLOSE
C
integer*2 DISPOSITION
2 ,SECURITYCODE
C
integer DATAFILENUM
2 ,FRUITFILENUM
3 ,STATUS
C
common /PARMS/ DATAFILENUM, FRUITFILENUM, STATUS
C
DISPOSITION = 0
SECURITYCODE = 0
C
call FCLOSE (DATAFILENUM, DISPOSITION, SECURITYCODE)
call FCLOSE (FRUITFILENUM, DISPOSITION, SECURITYCODE)
C
return
end
When this program is executed, the output is written to FRUIT. To view
FRUIT:
_______________________________________
| |
| |
| :print fruit |
| |
| Apple |
| banana |
| Grapes |
| grapes |
| peach |
| Pear |
| orange |
| |
_______________________________________
MPE/iX 5.0 Documentation