XSM : eXtended Sort/Merge utility
by Henri Henault
 

Téléchargez XSM Current stable release : 6.71   Beta release : n/a

1 Choisissez votre plateforme et téléchargez  2 Un coup d'oeil rapide au Mini-Guide d'installation  3 Enregistrez-vous sur notre Extranet et générez immédiatement vos clés d'activations


NOTA : Ces versions ne sont pas des versions de démo mais des versions de production.
Sans clé d'activation, XSM fonctionnera mais demandera d'appuyez sur la touche ENTREE à chaque lancement.
Vous pouvez télécharger et tester XSM sans clé d'activation, en mode interactif (pas en batch) ; dans ce cas, vous n'avez pas besoin de créer de compte Extranet.

Consultez le ChangeLog XSM pour les dernières fonctionnalités et les corrections de bugs.

Platform

Operating System                   Version                               CPU Architecture
XSM Pro
Filesize > 4 GB
Multi-threading
Full features
Evolution &
maintenance
 
AIX
AIX 5.3 (6.1 compatible) p/Series V6.71
AIX 4.3 (5.1, 5.2 compatible) PPC V6.58
 
Linux         :: Utilisateurs Linux, choisissez la glibc appropriée ::
Linux kernel ≥ 2.6.29 glibc ≥ 2.10 (FC11, OpenSuSE11) x86 V6.71
Linux kernel ≥ 2.6.18 glibc ≥ 2.5 (FC6, RHEL5, CentOS5) x86 V6.71
Linux kernel ≥ 2.6.9 glibc ≥ 2.3 (FC3, RHEL4, CentOS4) x86 V6.71
Linux kernel ≥ 2.6.18 glibc ≥ 2.3 (Suse9) IBM PPC V6.68
z/Linux kernel 2.6 glibc 2.3.3 (Suse 9) IBM z/Series V6.56
 
Sun Solaris
SunOS OpenSolaris 11 x86 V6.71
SunOS Solaris 10 SPARC V6.71
SunOS Solaris 8 (9, 10 compatible) SPARC V6.71
 
HP-UX
HP HP-UX 11i v3 Itanium ia64 V6.68
 
Windows
Windows Vista, 2003, XP, 2000, NT4 x86 V6.71
 
Misc.,   OS/400   z/OS   OS/2
OS/400 AS400 IFS i/Series please contact us for trial
OS/390 z/OS USS OpenMVS Unix Services z/Series please contact us for trial
Development API for win$ (DLL) and UNIX/Linux (lib.so) * please contact us for trial




CHANGE LOG


   Notes for Version 6.71 :
   18-feb-2010


Bugs fixed   :
         1) Text records too long and IOERROR IGNORE could cause a crash in sort operation.

         2) Too many long file names in INPFIL statements caused a crash.
            Buffer for input filenames was 4K, too short for +100 long pathnames. 
	    Now use dynamic allocation : no more limit on number of input files.

         3) VFIELDS (all systems) : on large files, following error could randomly occur:
            "XSM063E The file xxxxx/srtw3254.03a is not sorted at record # yyy"

         4) minor correction in INCLUDE/EXCLUDE operation precedence
   

New features added :
      --skip-head=n     :  will drop the first n records of the first input file
                           Usefull to throw away a header/title

Minor updates :
          1) Linux : no more need to be root to install hxsm 

          2) Any unknown parameter is flagged as an error [instead of ignored],
             and the job is cancelled

          3) if RECFM=V, the record length is automatically increased by 2,
             thus permitting the user to give a LRECL without dealing with
             'carriage-return' and 'line-feed' chars.

          4) Memory, sortworks, threads optimization for huge files (+100GB) 


----------------------------------------------------------------------------

   Notes for Version 6.68 :
   01-apr-2009

   Port to HP-UX 11i v3 IA64 Itanium (uname says: HP-UX B.11.31 U ia64 HP-UX)

----------------------------------------------------------------------------

   Notes for Version 6.68 :
   15-mar-2009

Bug fixed :
      - VFIELDS (all systems)

Major performance improvement. We now sort 1 Gigabyte in less than a minute on an inexpensive PC!
      v6.62 : XSM031I END OF JOB 1gt.xsm                           10000000 rec.:   80 SEC.
      v6.68 : XSM031I END OF JOB 1gt.xsm                           10000000 rec.:   42 SEC.
      (Intel Core2 2.2Ghz, 2GB RAM, 1 x IDE 7500rpm, Solaris 10 x86)


----------------------------------------------------------------------------

   Notes for Version 6.64 :
   19-feb-2009

Bug fixed :
      - Free storage detection (AIX, Solaris)
      - Thread stack size allocation (AIX)
      - dynamic STORAGE allocation (all systems), affecting sortworks size + quantity

New features added :
      Verbose mode (-vv) now shows real memory + working dirs + threads being used.

----------------------------------------------------------------------------


   Notes for Version 6.62 :
   07-feb-2009


Bug fixed:

    - OUTREC option
   With this option, one can reformat the final output records with padding and constant fields, 
   and with selected fields from the sorted records.

   Option may be speciped in 3 ways :

   format #1 :  command line option : --outrec=(specs[,specs...])
   format #2 :  Parameter file : OPTION OUTREC=(specs[,specs...])
   format #3 :  Parameter file : OUTREC FIELDS=(specs[,specs...])[,RECFM=...][,LRECL=...]

   where  specs ::= start,length[,type,offset]
           start  = field start in input record      (mandatory, from 1)
           length = field length                     (mandatory, may be < 0 for last field if RECFM T)
           type   = field type                       (optionnal)
           offset = field offset in output record   (optionnal, from 1)

   If  is omitted in 1st spec, they must be omitted in all specs,
       and fields are concatened in output record


   Example 

       hxsm ... '--outrec=(14,20,1,,..6)'
       OPTION OUTREC=(14,20,1,6,...)
       OUTREC FIELDS=(14,20,1,6,...)

       are equivalent to :

       hxsm ... '--outrec=(14,20,C,1,1,6,C,21,...)'
       OPTION OUTREC=(14,20,C,1,1,6,C,21,...)
       OUTREC FIELDS=(14,20,C,1,1,6,C,21,...)
                                            
   ---------------------------------------------------------------------------

   Padding and constant fields:

   The output record may include fields that are not in the corresponding input record.
   These fields may be :
          alpha-numeric fields, padded with a letter, a digit, a space, or  any other byte
          zoned-numeric fields, padded with a digit (most of time 0)
          packed-numeric fields, padded with a digit (most of time 0)

   In this case, 'specs' syntax are as follows:

     1)   any_char,length,S,offset   : alpha field  padded with spaces
     example:
          OPTION OUTREC=(...,X,10,S,42,...)    # cols 42 to 51 padded with spaces
          '--outrec=(...,X,10,S,42,...)'       # same

     2)   letter,length,C,offset   : alpha field  padded with 'letter'
     example:
          OPTION OUTREC=(...,Z,10,C,42,...)    # cols 42 to 51 padded with letter 'Z'

     3)   digit,length,N,offset   : numeric field padded with 'digit'
     example:
          OPTION OUTREC=(...,0,10,N,42,...)    # cols 42 to 51 padded with '0'

     4)   value,length,B,offset   : alphanumeric field padded with byte decimal 'value' (0..255)
     example:
          OPTION OUTREC=(...,0,8,B,42,...)    # cols 42 to 49 padded with binary zero
          OPTION OUTREC=(...,20,8,B,42,...)    # cols 42 to 49 padded with (ascii) space
          OPTION OUTREC=(...,255,8,B,42,...)    # cols 42 to 49 padded with HIGH-VALUE (255)

     5)   digit,length,P,offset   : packed numeric field value 'digit'
     example:
          OPTION OUTREC=(...,0,3,P,42,...)    # cols 42 to 44 = x'00000C' (packed 0)
          OPTION OUTREC=(...,-1,3,P,42,...)   # cols 42 to 44 = x'00001D' (packed -1)

     6)   digit,length,Z,offset   : zoned numeric field value 'digit'
     example:
          OPTION OUTREC=(...,0,3,Z,42,...)    # cols 42 to 44 = x'F0F0C0' (zoned ebcdic +0)
                                                                x'30307B' (zoned ascii +0)
          OPTION OUTREC=(...,9,3,Z,42,...)    # cols 42 to 44 = x'F0F0C9' (zoned ebcdic +9)
                                                                x'303043' (zoned ascii +9)
          OPTION OUTREC=(...,-1,3,Z,42,...)   # cols 42 to 44 = x'F0F0D1' (zoned ebcdic -1)
                                                              = x'303071' (zoned ascii -1)

----------------------------------------------------------------------------


                hxsm V658 - Multitasking - Nov 2007 -  


    Supported platforms :

        IBM pSeries RS6000 Power3-Power5  - AIX 4.3 AIX 5.2    : 32 bits
        IBM pSeries RS6000 Power3-Power5  - AIX 5.3            : 32/64 bits
        IBM Z-series  - zLinux-390 (Suse 9)      : 32 bits     kernel=2.6.5
        IBM Z-series  - zLinux-390 (Suse 9)      : 64 bits     kernel=2.6.5
        Intel Pentium - Linux 2.6 (>FC4)         : 32 bits     kernel>=2.6.11  glibc>=2.3.5
        Intel Pentium - Win32 x86 (NT4, W2K, XP) : 32 bits
        Sun SPARC Solaris 8, solaris 9, solaris 10 : 32/64 bits

   Notes for Version 6.58 :
   26-Oct-2007

   Several bugs fixed :

      - sortwork allocation (Solaris 8)
      - dynamic STORAGE allocation (all systems)
      - KEEP_ORDER (all Systems)
      - improved traces for debug mode (All Systems)

----------------------------------------------------------------------------

   Notes for Version 6.56 :
   Nov-2006

This version is a major enhancement of XSM


A)  New features added :
========================

  1 - Almost all options can be used in a command line, using GNU style long options 
      (i.e.           --lrecl=250    instead of   -l 250  )

  2 - New field types :

          numeric ('N')   : fixed length numeric fields with a leading floating sign
                            (-ie  +1   -124  ....)
          zoned decimal ('Z' or 'ZD')  : fixed length numeric fields with a trailing sign
          on the last digit ( "PIC S99999 USAGE IS DISPLAY"  ) ...
          Both methods (Microfocus-like and ACU COBOL-like) are supported.

    Note: This is different from 'packed decimal' ('P' or 'PD', COBOL "COMP-3")

  3 - Support of MicroFocus COBOL special variable format (known as "MFCOBOL" or "MFVariable") : RECFM=M

  4 - Support of multiple format for all input files and the output file :
      each input file may have its own record format (F,T,M) and its own record length
      the output file may have its own record format (F,T,M) and its own record length

  5 - Aditionnal parameter for OUTFILE :
           DISP=O   if output file exists, then overwrite (default)
           DISP=A   if output file exists, then append, else create
           DISP=N   if output file exists, then abort job (same as JCL's DD DISP=NEW)

  7 - New 'OUTREC' parameter :  records written to the output file may be rebuilt
      from the input record, all or some fields, with a different order

  8 - Bunch of new options :

         --activation-key=your-activ-key   # if you don't want to 'install' hxsm
         --keep-order                      # if you want a Non-Destructive sort
         --throw-empty-records             # as you can expect ...


B) Bugs fixed :
===================

   1) Option '-q' (new fashion : '--quiet') will cause XSM to exit silently
      with a return code, whatever the cause of the error.

   2) INCLUDE/EXCLUDE expressions containing constant C' '  (a blank) :
      This caused stopping expression analysis.
      This is now fixed

   3) Fixed files : in some cases, XSM was writing the output file with blank records.
      This is now fixed




C) New syntax for options and command line switches :
=====================================================

 +--------------------------------------+---------------------------+------------------------------------------+
 | Inside a Parmfile                    | Old switch                |  New switch                              |
 |                                      |                           |                                          |
 |  SORT  FIELDS=(s1,l1,typ1,A/D, ...)  | -ks1,l1[,A/D[,typ1] -k... | [--sort] --key=s1,l1[A/D[,typ1] --key=...|
 |                                      |                           |                                          |
 |  MERGE FIELDS=(...)                  | -m -k...  -k...           |  --merge --key=.... --key=...            |
 |                                      |                           |                                          |
 |  RECORD RECFM=x,LRECL=nnnn           | -rx -lnnnn                |  --recfm=x --lrecl=nnnn                  |
 |                                      |                           |                                          |
 |  OUTFILE name[,RECFM=x[,LRECL=nnnn   | -ooutfile                 |  --outfile=name[,RECFM=x[,LRECL=nnnn     |
 |              [,DISP=O/A/N]]]         |                           |               [,DISP=O/A/N]]]            |
 |                                      |                           |                                          |
 |  INFILE name[,RECFM=x[,LRECL=nnnn]   | name name ...(last parms) |  --infile=name[,RECFM=x[,LRECL=nnnn] ... |
 |                                      |                           |                                          |
 |  SORTWORK dir1[,dir2...]             | -tdir1[,dir2..]           |  --sortwork=dir1 --sortwork=dir2 ...     |
 |                                      |                           |                                          |
 |  STORAGE nnnK/M/G                    | -ynnnK/M/G                |  --storage=nnnK/M/G                      |
 |                                      |                           |                                          |
 |  COLLATE=ASCII/EBCDIC                |  (none)                   |  --collating-sequencxe=Ascii/Ebcdic      |
 |                                      |                           |                                          |
 |  OMIT DUPLICATE KEYS                 | -uk                       |  --unique-key                            |
 |  OMIT DUPLICATE RECORDS              | -ur                       |  --unique-record                         |
 |                                      |                           |                                          |
 |  INCLUDE COND=(s,l,op,const...)      |  (none)                   |  --include=s,l,op,const[,AND/OR,...]     |
 |  EXCLUDE COND=(s,l,op,const...)      |  (none)                   |  --include=s,l,op,const[,AND/OR,...]     |
 |                                      |                           |                                          |
 |  IOERROR IGNORE                      |  (none)                   |  --throw-empty-records                   |
 |                                      |                           |                                          |
 |  OPTION  COPY                        |  (none)                   |  --copy                                  |
 |                                      |                           |                                          |
 |  OPTION  NORUN                       |  (none)                   |  --norun                                 |
 |                                      |                           |                                          |
 |  OPTION KEEP_ORDER (*)               |  (none)                   |  --keep-order                            |
 |                                      |                           |                                          |
 |  OUTREC FIELDS=(fr_src,len,to_dst,   |  (none)                   |  --outrec=fr_src,len,to_tgt,type,...     |
 |    (*)         typ[,fr_src,len,...)) |                           |                                          |
 +--------------------------------------+---------------------------+------------------------------------------+

    (*) : new in version 6.5x



D) Sort/Merge Keys :
====================

    FIELDS=(start,len,type,A/D,...) or --key=start,len,A/D,type --key=...

    where type may be :

         C  or  CH  :  Bytes, value 0..255 per byte
         I          :  alpha-numeric field, mixed, where case (upper, lower) must be ignored
         B  or  BI  :  same as CH in this version, but to avoid :
                       in future versions, BI may be used for binary values in half-words, words, double-words.
         Z  or  ZD  :  'Zoned' decimal, from COBOL 'PIC S99999... USAGE DISPLAY'
                       set of ascii digits '0'..'9', the last digit holds the sign, and is an ascii char.
         P  or  PD  :  'Packed' decimal, from COBOL 'PIC S99999... USAGE COMP-3'
                       set of BCD pairs of digits, the last pair holds the last digit and the sign.
         N          :  'Numeric' field, fixed length, with leading blanks and a floating (optional) sign '+/-'

E) Microfocus 'variable' files :
================================

    An internal Microfocus 128 bytes header, plus a set af records.
    Each record is prefixed by a 2-bytes length (Big Endian, 3xxx), 
    and is padded to an even number of bytes

    Note : fields are defined from col. 1 = first significant bytes of the record (2-bytes length is dropped)

    Those files are processed with RECFM=M  (max length=4095)


F) Support of mixed files formats and logical records lengths :
===============================================================

     For each input file or for the output file, you can specify its own record format (RECFM),
     and its own logical record length :

        INPFIL pathname,RECFM=F/T/M,LRECL=nnnn       # parmfile
        --infile=pathname,RECFM=F/T/M,LRECL=nnnn     # command line

        OUTFIL pathname,RECFM=F/T/M,LRECL=nnnn       # parmfile
        --outfile=pathname,RECFM=F/T/M,LRECL=nnnn    # command line

     You can also define a default record format and a default logical record length :

        RECORD          RECFM=F/T/M,LRECL=nnnn       # parmfile
        --recfm=F/T/M   --lrecl=nnnn                 # command line

     Rules :

         if RECFM and/or LRECL is specified for a file, then they are taken in account as expected,

         else

         if there is a default RECFM and /or a default LRECL, then they are taken in account as expected,

         else

         default will be RECFM=T,LRECL=250
         


G) 'OUTREC' parameter :  
=======================

        This parameter allows building output records with selected fields in the input record.

        OUTREC FIELDS=(start_in,length,start_out,type[,start_in...])  # parmfile
        --outrec=start_in,length,start_out,type,...                   # command line

        where :

            start_in : offset (from 1) in the input record
            length   : field length, in byte
            start_out: offset (from 1) in the output record
            type     : ignored, compatibility purpose

       examples :

            Building a 30 bytes output record with contiguous fields from cols. 12-14, 1-10, 14-30
             from input record :
             
               OUTREC FIELDS=(12,3,1,C,1,10,4,C,14,17,14,C)      # parmfile
               --outrec=12,3,1,C,1,10,4,C,14,17,14,C             # command line

            Building a 80 bytes output record with non-contiguous fields from cols. 12-14, 1-10, 14-30 
             from input record :

             
               OUTREC FIELDS=(12,3,1,C,1,30,4,C,14,17,64,C)      # parmfile
               --outrec=12,3,1,C,1,10,4,C,14,17,14,C             # command line
            Note : 'holes' will be padded with blanks.


H) Non-destructive sort :
=========================

         For each set of output records sharing the same sort keys, the original input order will be preserved.

         This is done internally by adding the input record number as the last ('minor') sort key.

              OPTION KEEP_ORDER                                  # parmfile
              --keep-order                                       # command line

         Note : this option is NOT compatible with '--unique-record', or '--unique-key'

                                                                 
K) Activation key  :
====================

       If you don't want to 'install' the hxsm program once for all using the supplied 'hhnsinst',
       you may specify your activation at each run time :

            OPTION KEY=XXXX-XXXX-XXXX-XXXX-K                   # parmfile
            --activation-key=XXXX-XXXX-XXXX-XXXX-K             # command line

       This feature will be usefull when the XSM API will be released (soon ...), to run home-brewed
       sort/merge applications on different workstations.


L) Multitasking ('Multi-threading') :
=====================================

       This feature is usefull when sorting (not merging nor copying) large files.

       Its purpose is to 'parallelize' the process of reading the input files by chunks,
       then sorting and writing each chunk onto a sortwork file.

       It gives pretty good performances when several sortwork physical drives are available.

       XSM launch one subtask ('thread') per sortwork directory available, when specified.

       If you have only one sortwork directory, or did not specify any (default = current directory),
       XSM will NOT start multitasking.

       You can force multitasking (for your own curiosity satisfaction) by specifying :

              OPTION PROCS=n                                     # parmfile
              --procs=n                                          # command line

       where "n" is the the number of subtasks that XSM will launch (n=2..4 are good numbers)

       When physical drives are managed  by 'SAN-like', 'RAID-2', or 'VG/LV' subsystems, it may work well.


M) Following soon :

      API (Application Programming interface)
      Support of C-Isam Files


    Feedback is welcome (support@hhns.fr)


HHNS XSM : Extended Sort/Merge Program, PROfessionnal version multi-threading (V6) PROfessionnal version (V5) Basic version (V4) Current versions: V5.30 (Pro) / V4.70 (Basic) - Fev 2006 Supported platforms : IBM PowerPC - AIX 5.3 : 32/64 bits Intel Pentium - Linux 2.6 (FC4) : 32 bits kernel=2.6.11 glibc=2.3.5 Intel Pentium - Linux 2.6 (FC2) : 32 bits kernel=2.6.5 glibc=2.3.3 Intel Pentium - Linux 2.4 (RH9) : 32 bits kernel=2.4.11 glibc=2.3.2 Intel Pentium - WXP/2K : 32 bits IBM zNNNN - zLinux 2.6 (Suse9) : 32/64 bits kernel=2.6 glibc=2.3.3 Bug fixed : =============== EXCLUDE/INCLUDE : last block of data was dropped when recfm=F ---------------------------------------------------------------------------- Notes for Version 4.66 / 5.26 - September 2005 Supported platforms : Linux-x86 - kernel 2.2, glibc 2.2.4 (RedHat 7.2) (==== should run on ALL linux-i386 versions ===) Linux-x86 - kernel 2.4, glibc 2.3.2 (RedHat 9) Linux-x86 - kernel 2.6, glibc 2.3.3 (Fedora Core 2) Win32 - NTFS (NT, 2K, XP) and FAT32 (NT, 2K, XP, 95, 98) AIX-powerpc-4.3 32-bits AIX-powerpc-5.3 32-bits AIX-powerpc-5.3 64-bits zLinux-S390 32-bits - kernel 2.6, glibc 2.3.3 (Suse 9) zLinux-S390 64-bits - kernel 2.6, glibc 2.3.3 (Suse 9) Sunos-sparc-5.8 32 bits Notes for Version 4.66 / 5.26 : 30-Sep-2005 improved OUTFIL parameter (for compatibility with some SORT feature on Main Frames) : 1) Usage : you want to get multiple output files, depending on a selection in the final output stream; 2) Syntax : OUTFIL FILE=nn,INCLUDE=(startcol,length,type,operator,value) or OUTFIL FILE=nn,EXCLUDE=(startcol,length,type,operator,value) or OUTFIL FILE=nn,INCLUDE=ALL where : nn : 01 .. 99 = output file number, to be appended to the ddname 'SORTOF' ( = system variable 'SORTOF') startcol,length : field definition type : always 'CH' operator : one of 'EQ' 'NE' 'GT' GE' 'LT' 'LE' value : C'...' = constant to be matched against the field (You indeed may have several occurences of the same output record in different output files) 3) Example : UNIX : SORTIN="/indir/the_big_file" ; export SORTIN SORTOF1="/outdir/code_01" ; export SORTOF1 SORTOF2="/outdir/code_02" ; export SORTOF2 SORTOF99="/outdir/code_03_99" ; export SORTOF99 Windows : set SORTIN=D:\indir\the_big_file.dat set SORTOF1=E:\outdir\code_01.dat set SORTOF2=E:\outdir\code_02.dat set SORTOF99=E:\outdir\code_03_99.dat Parm file (all Oper.Systems) : SORT FILEDS=(1,10,CH,A) ; --- sort input by costumer number RECORD RECFM=V,LRECL=250 INPFIL DD:SORTIN ; --- define input file as a 'ddname' ; --- define 3 output files, depending on zip code col.37-38 OUTFIL FILE=1,INCLUDE=(37,2,CH,A,EQ,C'01') ; = ddname SORTOF1 OUTFIL FILE=2,INCLUDE=(37,2,CH,A,EQ,C'02') ; = ddname SORTOF2 OUTFIL FILE=99,INCLUDE=(37,2,CH,A,GE,C'03') ; = ddname SORTOF3 Run XSM (all Oper.Systems) : hxsm526 -v myparms.xsm The result will be ordered by col. 1-10 (for example, a costumer number), and divided into 3 files, depending on col. 37-38 (for example, a zip code) - 1st file ('code_1') will hold all records with code '01' - 2nd file ('code_2') will hold all records with code '02' - 3rd file ('code_03_99') will hold all other records. WARNING : IN THIS VERSION, THE OPTION "FILE=01 [02 .. 09]" WILL BE HELD AS "FILE=1 [2 .. 9]" SO, LET YOU DEFINE THE VARIABLES AS 'SORTOF1', 'SORTOF2' ... 'SORTOF9' AND NOT AS 'SORTOF01', 'SORTOF02' ... 'SORTOF09' ---------------------------------------------------------------------------- Notes for Version 4.65 / 5.25 : 01-Jul-2005 Bug fixed : internal loop during merge operation on RECFM=F files New OPTIONS subparameter : OPTIONS NORUN This will prevent XSM to really do the job. Use it to check your parmfile. Change in the format of the VFIELDS Parameter : VFIELDS=.....,FIELDSEP=.... The FIELDSEP Subparameter value can be a symbolic name, or an hexadecimal value Symbolic names accepted : BAR = the '|' char TAB = the Tabulation (X'09') char COMMA = the ',' char COLUMN = the ':' char DIARESIS = the '#' char SLASH = the '/' char BACKSLASH = the '\' char SEMICOLUMN or SEMI-COLUMN = the ';' char SINGLEQUOTE or SINGLE-QUOTE = the "'" char DOUBLEQUOTE or DOUBLE-QUOTE = the '"' char Hexadecimal value : X'hh' (UPPERCASE X, SINGLEQUOTE, 2 Hex digits, SINGLEQUOTE) Examples : VFIELDS=(.....),FIELDSEP=SEMI-COLUMN VFIELDS=(.....),FIELDSEP=X'7C' By default, the FIELDSEP value is TAB (X'09') ---------------------------------------------------------------------------- Notes for Version 4.59 / 5.19 : 18-Nov-2004 Performances enhanced for large files (> 10GB) Bugs fixed : - INCLUDE/EXCLUDE/OMIT : new format ex : INCLUDE COND=(1,5,CH,EQ,C'AB CD',AND,21,2,LE,X'F2B3') EXCLUDE COND=(11,6,CH,EQ,C'XYZ AB') (note : previous format is obsolete) - when binary files (RECFM F) are piped to hxsm's standard input, a premature EOF was set on UNIX platforms ---------------------------------------------------------------------------- Notes for Version 4.57 / 5.17 : 18-Jul-2004 Bugs fixed : - outfile not written when input file size = storage - epsilon ---------------------------------------------------------------------------- Notes for Version 4.56 / 5.16 : 26-Aug-2004 Several bugs fixed : - 'out of memory' when sorting 'worst case' files (All systems). - Seek error on some very large files (W32 only) - improved performances on very large files (All Systems) ---------------------------------------------------------------------------- Notes for Version 4.55 / 5.15 : 14-May-2004 1) the documentation is updated (www.hhns.fr/products/xsm/fr/xqmqref.php www.hhns.fr/products/xsm/en/xqmqref.php) 2) New OPTION statements OPTION COPY INCLUDE/EXCLUDE COND=(cond) (see below for '(cond)' ) 3) New OUTFIL statement OUTFIL FILE=1,INCLUDE/EXCLUDE=(cond) OUTFIL FILE=2,INCLUDE/EXCLUDE=(cond) ... with : FILE=n : the program will search an environment variable ('DDNAME') of the form : SORTOFn=outfile_name (i=1,2,...) and (cond) looking like : (start,len,CH,OP,C'aaa...aaa',AND/OR,cond.... ) with 'OP' = one of EQ/NE/LT,LE,GT,GE 4) bugs fixed : options OMIT DUPLICATE RECORDS/KEYS did not drop the first duplicate record/key ---------------------------------------------------------------------------- Notes for Version 4.51 / 5.11 : 25-Nov-2003 1) the documentation is updated (www.hhns.fr/products/xsm/fr/xqmqref.php www.hhns.fr/products/xsm/en/xqmqref.php) 2) New OPTION statement OPTION COLLATING=EBCDIC : will respect EBCDIC Collating sequence for : - lower-case - upper-case - digits 3) Bug fixed : Bad sort order for packed decimal fields when sign is xF instead xC or xD ---------------------------------------------------------------------------- Notes for Version 4.50 / 5.10 : 24-Aug-2003 1) the documentation is updated (www.hhns.fr/products/xsm/fr/xqmqref.php www.hhns.fr/products/xsm/en/xqmqref.php) 2) New parameters for the SORT/MERGE statement a) SORT FIELDS=all : will sort the entire records (no key definition) (you must provide max len. record in LRECL=...) b) SORT FIELDS=(start1,len1,A/D,start2,len2,A/D,...),FORMAT=BI (if all fields are of the same type : BI, CH, ...) 3) DDNAME for INPFIL/OUTFIL : the filenames in INPFIL/OUTFIL statements can be given as 'DD:somename'. XSM will get the actual filename via the corresponding environment variable. Ex : INPFIL DD:SORTIN1,DD:SORTIN2 OUTFIL DD:SORTOUT those two statements will cause XSM to search the actual filenames via a 'getenv' for the environment variables "SORTIN1", "SORTIN2", "SORTOUT" ---------------------------------------------------------------------------- Notes for Version 4.48 / 5.08 : 19-May-2003 The version 5.08 can sort files larger than 2/4 GB. The STORAGE parameter is no more needed : it is computed dynamically, at best. But when sorting very huge files ( > 64 GB ), it is safe to give a STORAGE parameter less or equal to (total real storage - (64MB or 128MB)), in order to avoid heavy paging. ---------------------------------------------------------------------------- Notes for Version 4.45 / 5.05 : 04-Feb-2003 Correct a bug giving some 'INTERNAL ERRORS' when sorting huge files of small records, with 'IOERROR IGNORE' and keys larger than the smallest record. ---------------------------------------------------------------------------- Notes for Version 4.44 / 5.04 : 18-Jan-2003 Correct a bug involving VFIELD's processing ---------------------------------------------------------------------------- Notes for Version 4.43 / 5.03 : 03-Jan-2003 Correct a bug in memory allocation when sorting more than one file ---------------------------------------------------------------------------- Notes for Version 4.42 / 5.02 : 11-Dec-2002 the 'STORAGE' parameter is computed dynamically. For most jobs, the parameter is not needed. You may override the result with your own 'STORAGE' parameter, in case of very large files to sort, when you think you don't have enough available storage, in order to avoid paging. ---------------------------------------------------------------------------- Notes for Version 4. / 5. : Oct-2002 ==> SUPPORT OF FILES LARGER THAN 2GB / 4GB : tested with a 5 GB file on - WinNT/4, sp6 - Win2k, sp1 - Linux 386, Kernel 2.4.13, glibc-6 - Linux 390, Kernel 2.4.17, glibc-6 Note : should run on W9x with a NTFS Driver (www.Winternals.com) Please send bugs reports, or feelings to : support@hhns.fr or mail@hhns.fr Enjoy fast sort. Henri Henault