home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / SPLOI179.LHA / Sploin.doc < prev    next >
Encoding:
Text File  |  1994-09-02  |  19.0 KB  |  462 lines

  1.  
  2.     History
  3.     -------
  4.  
  5.  
  6.     -------------------
  7.     ««« Sploin 1.79 »»»
  8.     -------------------
  9.     - Yves Perrenoud --
  10.     - 02.09.1994 ------
  11.     -------------------
  12.  
  13.  
  14. ------------------------------------------------------------------------------
  15. -  V1.0  :  Base version, which only lets you extract and not really split,  -
  16. -           no bugs found.                                                   -
  17. ------------------------------------------------------------------------------
  18. -  V1.1  :  Added the option to split the file in x parts of a size          -
  19. -           specified by the user, or in a specified number of parts.        -
  20. ------------------------------------------------------------------------------
  21. -  V1.2  :  Added multi file join.                                           -
  22. ------------------------------------------------------------------------------
  23. -  V1.3  :  Added an option which tells Sploin to use an input file          -
  24. -           containing the names of files to join together. Removed a few    -
  25. -           little bugs.                                                     -
  26. ------------------------------------------------------------------------------
  27. -  V1.4  :  Wildcards are now supported. You can specify an destination dir. -
  28. -           when splitting in several parts.                                 -
  29. ------------------------------------------------------------------------------
  30. -  V1.45 :  Fixed an ugly bug which didn't accept subdirectories in the      -
  31. -           original path when using the -d option.                          -
  32. ------------------------------------------------------------------------------
  33. -  V1.5  :  Changed the program so it would no longer use the arp library    -
  34. -           for pattern matching and for break detection, but DICE routines  -
  35. -           instead. Also changed everything to Ansi-C (increased the binary -
  36. -           by 6k). Removed stupid options. Found bugs in the removed        -
  37. -           options (Hey hey!)                                               -
  38. ------------------------------------------------------------------------------
  39. -  V1.6  :  Added an option to reconstruct a previously split file.          -
  40. -           Corrected a bug in the input file option. Can now be compiled    -
  41. -           under UNIX.                                                      -
  42. ------------------------------------------------------------------------------
  43. -  V1.61 :  Fixed an Enforcer hit!                                           -
  44. ------------------------------------------------------------------------------
  45. -  V1.62 :  Changed the spliting size character from "$" to "=". The dollar  -
  46. -           sign is used by UNIX for specifying things like the last word    -
  47. -           on the previous line ("!$"). Due to this, on UNIX the program    -
  48. -           wouldn't split big files in smaller files of a specified size;   -
  49. -           which is my main use of the program.                             -
  50. ------------------------------------------------------------------------------
  51. -  V1.65 :  Removed a bug which didn't set the right protections on the      -
  52. -           created files under UNIX. Added VAX/VMS compatibility, but       -
  53. -           without wildcard support (until I find out how it works).        -
  54. ------------------------------------------------------------------------------
  55. -  V1.70 :  Added the "-m{l|h}" feature to greatly ease the transport on     -
  56. -           MS-DOS format disks by setting default sizes and truncating      -
  57. -           filenames to 8.3 chars when using the multiple file split/join   -
  58. -           options. Added the ']' in StripPath for VMS support.             -
  59. ------------------------------------------------------------------------------
  60. -  V1.76 :  Added VMS wildcard support thanks to some source code written by -
  61. -           Karl-Jose Filler. Now asks the user for confirmation if the      -
  62. -           number of chunks exceeds 150. Converts filenames to lowercase    -
  63. -           when using MS-DOS 8.3 format (apparently caused problems). Fixed -
  64. -           a bug which caused VMS overwrites to simply go to void.          -
  65. ------------------------------------------------------------------------------
  66. -  V1.78 :  Changed the syntax of the multiple files spliting from "-sN"     -
  67. -           where N is the number of parts to "-pN", and "-s=N" where N is   -
  68. -           the size of each part to "-sN". The program complains if "-s="   -
  69. -           is used. Fixed a bug which could cause a division by zero.       -
  70. -           Complains if the buffer size is set to zero. Displays a warning  -
  71. -           if the size to extract is set to zero.                           -
  72. ------------------------------------------------------------------------------
  73. -  V1.79 :  Fixed a problem on VMS introduced with the wildcard support, the -
  74. -           filename of a non existing file had a ";" appended so the "-g"   -
  75. -           option never found anything to open.                             -
  76. ------------------------------------------------------------------------------
  77.  
  78.  
  79.  
  80.  
  81.                              Sploin Version 1.79
  82.                           Written by Yves Perrenoud
  83.                             Copyright (c) 1991-94
  84.                             All Rights Reserved.
  85.  
  86.  
  87.  
  88.  
  89.     Disclaimer :
  90.     ------------
  91.  
  92.     I am NOT responsible for anything this program does; you are using it
  93.     enterily at your own risk.
  94.  
  95.     This program is freely distributable for non-commercial use, provided a
  96.     small credit note or a thank-you is included in the readme file.
  97.     
  98.     The source file is not to be modified without the permission of the
  99.     author. It is only distributed so the program can be compiled on the
  100.     UNIX and VMS operating systems.
  101.  
  102.     Description :
  103.     -------------
  104.  
  105.     This program lets you split a file in several different ways or join
  106.     several files together.
  107.  
  108.     So here is a descripiton of the spliting facility :
  109.  
  110.     - You can extract a specified amount of bytes anywhere in a file and
  111.       optionaly save what rests.
  112.     
  113.     - Split a file in two parts and only specify the size of the first
  114.       chunk.
  115.     
  116.     - Extract a certain amount of bytes from the beginning of the file.
  117.     
  118.     - Split a file in a certain amount of parts or in chunks of a specified
  119.       size. The resulting files will have the "_n" extension added to the
  120.       original name.
  121.  
  122.     - Optionnaly follow MS-DOS 8.3 characters limitation when splitting in
  123.       multiple parts (giving the most appropriate name possible) and set the
  124.       size of a chunk according to the density of the disk (DD or HD).
  125.  
  126.     And here is a description of the joining facility :
  127.  
  128.     - You can join several files together, just like the command "join". Of
  129.       course wildcards are supported.
  130.  
  131.     - Use an input file to specify the files to join together. This lets
  132.       you join an ilimited number of files together, or use the output of
  133.       another program to prepare a list of files (i.e. list, ARexx, etc..).
  134.  
  135.     - You can reconstruct a file which was previously split with Sploin.
  136.       Let me get this clearer: you have FTPed a big archive (2.5Mb), and
  137.       you want to bring it back to your Amiga at home. Well you split the
  138.       file in chunks of 700'000 bytes, transfer them to disk, and then
  139.       when you get home, you reconstruct the archive with Sploin using the
  140.       "-g" option.
  141.  
  142.     - When reconstructing ("-g"), automatically detects if the multiple files
  143.       are in normal format or in the MS-DOS 8.3 chars one.
  144.  
  145.     Detailled description :
  146.     -----------------------
  147.     
  148.     The command is invoked as follows :
  149.     
  150.         Sploin <Mainfile> {<FileN>} [<options>]
  151.     
  152.     <Mainfile>, is the file you will be spliting or the joined file. The
  153.     fact it must be the first filename on the command line is quite obvious
  154.     when you use the split option, but when joining this can be at first a
  155.     bit confusing; it's just a question of habit.
  156.  
  157.     {<FileN>}, are either the files you are going to join, in which case
  158.     you are only limited by the length of the command line, or the
  159.     resulting files from the split. Wildcards are supported.
  160.  
  161.     [<options>], here is a list of them :
  162.  
  163.     
  164.         The mode you are going to use :
  165.  
  166.             -j      : join mode (default).
  167.             -sX     : split mode (optional chunk size).
  168.             -pY     : split mode (optional number of chunks).
  169.  
  170.         The actual options :
  171.  
  172.             -b      : buffer size.
  173.             -o      : offset (split only).
  174.             -n      : size to split in bytes (split only).
  175.             -r      : save rest (split only).
  176.             -i      : input file.
  177.             -g      : reconstruct mode, opposite of -sN (join only).
  178.             -d      : destination directory (split only).
  179.             -m{l|h} : truncate to 8.3 chars MS-DOS format and sets a chunk
  180.                       size suitable for DD (l) or HD (h).
  181.  
  182.  
  183.  
  184.  
  185.     Spliting files :
  186.     ----------------
  187.     
  188.     Buffering :
  189.     
  190.     With "-b" followed by a value in bytes, you will set the buffer to the
  191.     desired size. The default size is 50'000 bytes.
  192.     
  193.     Exctracting :
  194.     
  195.     "-n" : specifies the amount of bytes to exctract.
  196.     "-o" : is the offset at which the program should start exctracting.
  197.     "-r" : is an option which will save what is rest of the file after the
  198.            exctraction.
  199.  
  200.     So lets say you want to strip the first 2000 bytes of a file called
  201.     "Filename" into a destination file called "DestFile", you would type :
  202.  
  203.     "Sploin -s Filename DestFile -n2000".
  204.     
  205.  
  206.     Now, you want to extract from a sample which is 1.5mb long, 450'000
  207.     bytes starting at the 800'000th byte. You simply type :
  208.  
  209.     "Sploin Sample Speech -s -n450000 -o800000".
  210.     
  211.     
  212.     Next, you want to separate the sample in two chunks : one of 76'000
  213.     bytes and the rest which is (1.5mb - 76'000) 972'576; you type :
  214.  
  215.     "Sploin Sample -s -n76000 -r Introduction MainSequence"
  216.     
  217.     
  218.     And finaly, you have a file which is 32000 bytes long, you want to
  219.     extract 5'000 from the 12'000th byte and save the 15'000 remaining,
  220.     you type :
  221.  
  222.     "Sploin -s Messages.txt -n5000 -r Description.txt -o12000 Details"
  223.     
  224.     
  225.     Note : When you are doing traditional spliting, it doesn't make any
  226.     ----   diffference wether you use -s or -p. Both have exactly the same
  227.            meaning!
  228.     
  229.     
  230.     Spliting files in several parts :
  231.     ---------------------------------
  232.     
  233.     For this you either use "-s" followed by the size of the smaller files you
  234.     want to output, or "-p" followed by the number of parts the file should be
  235.     splited in. A "_n" extension will be added to the name of the file you are
  236.     spliting for each splited file. If you don't want the files saved to the
  237.     same directory as the original file's, use the "-d" option.
  238.  
  239.     
  240.     Spliting a file called "Garfield.IFF" which is 83'237 bytes long into 5
  241.     different files will be done as follows :
  242.  
  243.     "Sploin -p5 Garfield.IFF"
  244.     
  245.     "Garfield.IFF"  83'237 bytes   --->   "Garfield.IFF_1"  16'648 bytes
  246.                                           "Garfield.IFF_2"  16'648 bytes
  247.                                           "Garfield.IFF_3"  16'648 bytes
  248.                                           "Garfield.IFF_4"  16'648 bytes
  249.                                           "Garfield.IFF_5"  16'645 bytes
  250.  
  251.     Spliting a file called "Sample" which is 3'000'000 bytes long on the
  252.     volume dh0: into several chunks of 850'000 bytes long on the volume
  253.     dh1:
  254.  
  255.     "Sploin dh0:Sample -s850000 -ddh1:"
  256.     
  257.     Volume dh0:                            Volume dh1:
  258.  
  259.     "Sample"  3'000'000 bytes      --->    "Sample_1"  850'000 bytes
  260.                                            "Sample_2"  850'000 bytes
  261.                                            "Sample_3"  850'000 bytes
  262.                                            "Sample_4"  450'000 bytes
  263.  
  264.  
  265.     Note : On UNIX, replace "dh0:" by "/" and "dh1:" by "~/"; on VMS
  266.     ----   replace the "dh0:" by "sys$login:" and "dh1:" by "[.test]" for
  267.            instance.
  268.  
  269.     If the files are to be transfered on an MS-DOS format disk, you can use
  270.     the "-m{l|h}" option where the "l" and "h" respectively specify a chunk
  271.     size suitable to fit on a Double Density (720 KB) or a High Density
  272.     (1.44 MB) disk (if neither "l" nor "h" were used, "l" is taken by
  273.     default). Using this option will tell Sploin only to create files with a
  274.     filename of maximum 8 characters and an extension (if any) of 3.
  275.  
  276.     For example, let's say you want to split the file "Mosaic.backup" to fit
  277.     on a 720K disk, you will get several (depending on the size of the main
  278.     file) "Mosaic_1.bac", "Mosaic_2.bac", ... , "Mosai_15.bac", etc...
  279.  
  280.     This is a perfect example of the use of Sploin, divide a huge file in a
  281.     certain number of smaller files which will fit on a disk. You can then
  282.     reassemble the smaller files into the huge file automatically using the
  283.     join "-g" option (see example below).
  284.  
  285.  
  286.  
  287.  
  288.     Joining files together :
  289.     ------------------------
  290.  
  291.     When you are in join mode, the only options availiable are "-b -i -g".
  292.     To join several files together you simply type Sploin followed by the
  293.     name of the destination file, and then you type the name of the
  294.     different files you which to join together. there must be at least one
  295.     file, in which case Sploin will simply copy the file.
  296.  
  297.     Note : If a file which will be created with Sploin already exists, the
  298.     ----   program will ask you for a confirmation before replacing the
  299.            file.
  300.  
  301.     Here is an example of a join :
  302.     
  303.         Sploin messages_1_250 messages_1_119 messages_120_250
  304.         
  305.         or
  306.         
  307.         Sploin -j messages_1_250 messages_1_119 messages_120_250
  308.  
  309.     The two are exactly the same since the "-j" is the default. Now a
  310.     multiple file join :
  311.  
  312.         Sploin 4Months January February March April
  313.     
  314.     Would join January, February, March and April as 4Months.
  315.  
  316.  
  317.     An other example, we want to join all the files ending in ".txt" :
  318.     
  319.         Sploin all.txt #?.txt       (AmigaDOS)
  320.  
  321.         Sploin all.txt *.txt        (UNIX & VMS)
  322.     
  323.     
  324.     An input file can be specified with "-i", which will contain the names
  325.     of the files to join. This lets you have an ilimited number of files
  326.     to join togeter, because with a program like join, if you have more
  327.     files than the command line, you must proceed in several passes.
  328.     
  329.     An interesting thing about this option is you can redirect the output of a
  330.     program like list (ls on UNIX or "dir /output=..." on VMS), or use a
  331.     script (ARexx on the Amiga) to specify the file names.
  332.  
  333.  
  334.     Here is an example : you wich to join all the files with the .c suffix
  335.     together in a file called "all.c" (this is the same as the previous
  336.     example).
  337.  
  338.         List #?.c lformat "%s" >ram:files
  339.         
  340.             then you invoke Sploin :                    (AmigaDOS)
  341.         
  342.         Sploin all.c -iram:files
  343.         
  344.         
  345.         ls *.c > ~/files
  346.         
  347.             then you invoke Sploin :                    (UNIX)
  348.             
  349.         Sploin all.c -i~/files
  350.  
  351.  
  352.     Reconstruction mode :
  353.     ---------------------
  354.     
  355.     To reconstruct a file you use the "-g" option. This is the opposite of
  356.     "-sX and -pY". This means you join all the files which match
  357.     "<filename>_n", where <filename> is the file to be reconstructed.
  358.  
  359.     You might ask, "but why use -g when you can use wildcards?". The
  360.     answer is quite simple, with wildcards you are not guarented the files
  361.     will be in the right order!
  362.     
  363.     Here is an example : you want to reassemble an previously split
  364.     archive.
  365.     
  366.         "Sploin Radiance.lzh -g"
  367.         
  368.     "Radiance.lzh_1" 700'000 bytes   --->   "Radiance.lzh" 2'723'467 bytes
  369.     "Radiance.lzh_2" 700'000 bytes
  370.     "Radiance.lzh_3" 700'000 bytes
  371.     "Radiance.lzh_4" 623'467 bytes
  372.  
  373.  
  374.     Note : Sploin will automatically try and open the file which would have
  375.     ----   been created with the "-m{l|h}" option at splitting time. In other
  376.            words, wether you used "-sX, -pY or -m{l|h}" when splitting, you
  377.            don't have to bother with anything, you just type "-g" as usual to
  378.            reconstruct, whatever filename standard was used.
  379.  
  380.  
  381.  
  382.     Future enhancements :
  383.     ---------------------
  384.     
  385.     - Add an option to specify a format string for the multiple files names.
  386.   
  387.     - Enable the extended GNU parameter passing syntax : "-o" = "--offset".
  388.   
  389.     - Optimize VMS open flags :-( or distribute the binary compiled with
  390.       VMS GCC... whatever
  391.   
  392.     - Strip all non uuencoded, VMS shared, shiped, etc... code from file(s)
  393.       and create one file ready to be decoded.
  394.  
  395.  
  396.     User feedback :
  397.     ---------------
  398.     
  399.     At the moment, I use a 728000 bytes chunk when the destination disk is a
  400.     Double Density (720K) disk. Although theoretically the amount of space
  401.     available is 737280 bytes, it seems that practically it's just over
  402.     730000 bytes, so I chose 7.28E5 just to make sure it would always fit.
  403.     Now when it comes to HD disks (1.44 MB), since I don't use them all that
  404.     much, I simply decided to use twice the amount that I use for a DD
  405.     (fingers crossed ;-).
  406.     
  407.     If you encounter problems with these values, or you have more precise
  408.     ones than I use, please send me some kind of mail (see below).
  409.  
  410.  
  411.  
  412.  
  413.     Conclusion :
  414.     ------------
  415.     
  416.     The program was developed on an Amiga 3000 with 4mb of RAM and tested on a
  417.     non accelerated Amiga 2000 with 5mb of RAM and 512k of chip. The program
  418.     was also tested on Sun Sparc 1, running SunOS 4.1.2; Amiga 3000UX running
  419.     Amix; VAX VMS version 5.5-2; MIPS running RISC/os 5.1; several other UNIX
  420.     systems.
  421.  
  422.     Well this is just about it, I don't know what else I could say about
  423.     the program. If you have any suggestions, ideas or simply if you find a
  424.     bug, contact me in one of the ways decribed below. If you like this
  425.     program or find it useful, you could send me a postcard or something so
  426.     I'll know where my program is being used (please do :-).
  427.  
  428.  
  429.     - The BBSs I use the most frequently (every 2 weeks) :
  430.  
  431.         AUGS       : +41 62 4 327
  432.         Temptation : +41 38 55 34 54
  433.  
  434.         I will be under Yves Perrenoud or pyves.
  435.  
  436.     - On Fidonet 2:301/315.50 (pyves)
  437.  
  438.     - InterNet : pyves@nuga.alphanet.ch
  439.                  pyves@neli00.eicn.etna.ch
  440.                  Yves.Perrenoud@eicn.etna.ch
  441.                  pyves@litamiga.epfl.ch
  442.     
  443.     - X.400 : C=ch; A=arcom; P=switch; O=etna; OU=eicn; S=Perrenoud; G=Yves
  444.  
  445.     - VAX MAIL : 53848::PYVES
  446.  
  447.  
  448.     The "@nuga..." address is my home machine, so it might take maximum a day
  449.     or two to reach me, but it'll definitely reach me. The "@neli00..." is the
  450.     fastest way to reach me (except on week-ends) and if I'm currently logged
  451.     on, you can get an answer in a few minutes. Still, if there isn't any
  452.     hurry, my home machine address is the prefered. BTW, the @neli00 and the
  453.     VAX Mail address is on my side exactly the same, so just choose whatever
  454.     you have access to. You can of course send me normal mail (or a postcard
  455.     ;-), see the address below.
  456.  
  457.  
  458.         Yves Perrenoud,
  459.         Traversière 29,
  460.         CH-2013 Colombier,
  461.         Switzerland.
  462.