Telling Archives Aparty

 BBS: Inland Empire Archive
Date: 01-01-93 (16:35)             Number: 400
From: ROBERT CHURCH                Refer#: NONE
  To: JOEL MASLAK                   Recvd: NO  
Subj: Telling Archives Aparty        Conf: (2) Quik_Bas
Joel Maslak entered the following ASCII codes for the
viewing pleasure  of All:

 JM> I am writing a program that unarchives *ALL* archives,
 JM> regardless of the type. To do this, I am going to make calls
 JM> to the various dearchiving programs, but first I need to be
 JM> able to tell what archive is what archive...  Example: How
 JM> do you know it is a Zip or Arc (regardless of ext, as I am
 JM> writing this as an accessory for my mailtosser)?

Here you go:

DECLARE FUNCTION GetArchive$ (FileName$)
'$DYNAMIC

REM $STATIC
DEFINT A-Z
FUNCTION GetArchive$ (FileName$)

   'Returns the DOS command needed to un-archive the passed
FileName$    'The archiver information is from the
COMPRESS.CFG included in    'Scott Dudley's SquishMail
message base utility.  Thanks Scott!

   Free = FREEFILE
   OPEN FileName$ FOR BINARY AS #Free

   DIM Ident AS STRING * 5       'We'll need the first five
bytes of the file    GET #Free, , Ident            'GET the
first five bytes

   IF LEFT$(Ident, 1) = CHR$(26) THEN  'We know it's an ARC
if the first                                  'byte is an
EOF.
      GetArchive$ = "arce "      'return the command to
extract the ARC    ELSEIF LEFT$(Ident, 4) = "PK" + CHR$(3)
+ CHR$(4) THEN
                                 'we know it's a zip if the first three bytes
      GetArchive$ = "PKUNZIP "   'are "PK^C^D".
   ELSEIF RIGHT$(Ident, 3) = "-lh" THEN
                                 'If the 3 bytes at offset
2       GetArchive$ = "LHA E "     'are "-lh" then we know
it's an LHA.    ELSEIF LEFT$(Ident, 2) = CHR$(96) +
CHR$(234) THEN
                                 'If the first 2 bytes of
the file       GetArchive$ = "ARJ E "     'are CHR$(96) and
CHR$(234), it`s an ARJ.    ELSE
      GetArchive$ = ""           'unknow archive type
   END IF

   CLOSE

END FUNCTION

SUB Unarchive (FileName AS STRING)
   'un-archives a .QWK file
   UnpackProg$ = GetArchive$(FileName)
   SHELL UnpackProg$ + FileName
END SUB


[-= Rob =-]

Internet: churchr@hilhi.rain.com

--- timEd/B6
 * Origin: -= The Floating Point =- Hillsboro, Oregon, USA,
Earth (1:105/330.3)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET