home *** CD-ROM | disk | FTP | other *** search
- ****************************************************************************
- * UNPACK.LIBRARY V34.21 DOC *
- * *
- * *
- * Update 24-08-93 *
- * *
- * *
- * SAFE HEX INTERNATIONAL *
- ****************************************************************************
-
-
-
- Welcome to this release version of this library. I hope it's a library
- you can use in your virus killer or whatever you are doing. This library
- purpose is to help a viruskiller programmer to scan files that are
- crunched.
-
- This library is copyrighted by SHI and may NOT be used in commercial
- programs without a written permission from SHI. All the SHI members and
- shareware programmers can of course use this library for free. Remember to
- send your address and program to SHI, to get a written premission.
-
- Please add the "Wanted.Crunchers.txt" (a list containing wanted crunchers
- for update), and remember to credit the author (Thomas Neumann) and SHI in
- your program as stated in the following:
-
-
- Here is a little message about SHI:
- ----------------------------------------------------------------------------
-
- ABOUT SAFE HEX INTERNATIONAL
- If you know a virus programmer you can get a reward of $ 1000 for
- supplying his name and address. The fact is that the law punishes data
- crime very severely. (5 years in jail in most countries).
-
- We are an international group with more than 500 members who have started
- trying to stop the spread of virus. Let me give you some example:
-
- 1. Our motto is: "Safe Hex", who dares do anything else today?".
- 2. A virus bank containing more than 1800 Amiga and PC viruses for
- supporting good shareware antivirus programs.
- 3. We help people to get money back lost by virus infection.
- 4. We write articles about virus problems for about 20 computer
- magazines worldwide.
- 5. We release the newest and the best virus killers around from
- about 25 wellknown programmers worldwide.
- 6. We have more than 35 PC and Amiga "Virus Centers" worldwide
- where you can get free virus help by phoning our "Hotline", and
- the newest killers translated in your own language at very
- little cost.
-
- For more information contact:
-
- SAFE HEX INTERNATIONAL (Please send 2 "Coupon-Response
- Erik Loevendahl Soerensen International" and a self addres-
- Snaphanevej 10 sed envelope, if you want infor-
- DK-4720 Praestoe mation about SHI by letter).
- Denmark
- Phone: + 45 55 99 25 12
- Fax : + 45 55 99 34 98
-
- ----------------------------------------------------------------------------
-
- ****************************************************************************
- * Offsets and functions destiptions *
- ****************************************************************************
-
-
- AllocCInfo(34.0) AllocCInfo(34.0)
-
-
- NAME
- AllocCInfo - allocates an info structure.
-
- SYNOPSIS
- info = AllocCInfo ()
- D0 -30
-
- FUNCTION
- AllocCInfo() allocates an info structure the library uses when it
- unpacks files. You just have to call this function in the beginning
- of your program and then free it again with FreeCInfo() in the end.
- I have made this function, because in future versions of this
- library, the structure will be bigger. Your program will then be
- compatible for any future versions of this library.
-
- INPUTS
- None.
-
- OUTPUTS
- info - is a pointer to the allocated info structure. If there has
- occured an error, a zero is returned.
-
- STRUCTURE
- This is how the Info Structure is build:
-
- STRUCTURE UnpackInfo,0
- APTR UI_Filename
- APTR UI_Path
- APTR UI_Jump
- APTR UI_CruncherName
- APTR UI_DecrunchAdr
- LONG UI_DecrunchLen
- UWORD UI_ErrorNum
- UWORD UI_CrunchNum
- UBYTE UI_CrunchType
- UBYTE UI_Flag
- APTR UI_LoadNamePoi
- LONG UI_CrunchLen
-
- ; This Is Private, Do NOT Touch
-
- APTR UI_CrunchAdr
- LONG UI_CrunchLenTemp
- LONG UI_FileHandler
- LONG UI_Lock
- LONG UI_OldLock
- APTR UI_InfoAdr
- APTR UI_UnpackPoi
- ULONG UI_Temp
- STRUCT UI_LoadName,128
- STRUCT UI_ExecuteString,256
- LABEL UnpackInfo_SIZEOF
-
-
- NOTE:
- -----
-
- The private area is a bad idea to use, because the different
- fields will maybe be moved around in future versions.
-
-
- UI_Filename is a pointer to the filename you want to scan.
-
- UI_Path is a pointer to a zero-terminated path where the
- library have to unpack archive files, such as a LHA
- archive. Please select a path where you haven't got
- some important data, because ALL files will be
- deleted in the path if the DELETE flag is on.
-
- UI_Jump This is a pointer to your scan routine. If this
- pointer are zero, no jump will be made.
-
- UI_CruncherName This is a pointer to the crunchers name the file is
- crunched with. The name are zero-terminated.
-
- UI_DecrunchAdr This is the start address of the decrunched file.
- Your scan routine just have to read this field and
- the UI_DecrunchLen field and scan that memory.
-
- UI_DecrunchLen This is the length of the decrunched file.
-
- UI_ErrorNum If an error occur, the error number is stored in
- this field. See the unpack.i file for more
- information.
-
- NOTE: When you call a function and you success,
- don't read this flag, because there are
- stored an error number, but it's false.
-
- UI_CrunchNum Here is the cruncher number stored. Each cruncher
- has a number so you can find out which cruncher is
- used on the file.
-
- UI_CrunchType Here is a number that tells about the file (archive,
- data or object file).
-
- UI_Flag You can select some different things the library has
- to do when it tests the file. See below for more
- info.
-
- UI_LoadNamePoi This is just a pointer to the UI_LoadName field. Use
- this if you want to use the UI_LoadName field,
- because the field will be moved in future versions.
-
- UI_LoadName Here is the filename stored, the library is about
- to decrunch, if the file is an archive.
-
- UI_CrunchLen This is the length of the crunched file.
-
-
- The flag have the following functions:
-
- Bit Function
- --------------------------------------------------------------
- 0 Select to unpack one file at a time or the
- whole archive. If set, one file is selected
- 1 Delete files after scanning. Set = Delete. If you
- set this bit on, ALL files AND directories will be
- deleted, not only the files there were stored in
- the archive.
- 2-7 Reserved
-
- BUGS
- None known.
-
- SEE ALSO
- FreeCInfo()
-
- ----------------------------------------------------------------------------
-
- FreeCInfo(34.0) FreeCInfo(34.0)
-
-
- NAME
- FreeCInfo - frees the info structure again.
-
- SYNOPSIS
- FreeCInfo (info)
- -36 A0
-
- FUNCTION
- FreeCInfo() frees the info structure again. You have to call this
- function in the end of your program.
-
- INPUTS
- info - is the memory address you got from the AllocCInfo() function.
- If the memory address is zero, you will NOT take a trip to
- India (and visit the GURU) when you call this function.
-
- OUTPUTS
- None.
-
- BUGS
- None known.
-
- SEE ALSO
- AllocCInfo()
-
- ----------------------------------------------------------------------------
-
- DetermineFile(34.0) DetermineFile(34.0)
-
-
- NAME
- DetermineFile - scans a file to find out which cruncher that are
- used.
-
- SYNOPSIS
- success = DetermineFile (info, filename)
- D0 -42 A0 A1
-
- FUNCTION
- DetermineFile() scans a file to find out which cruncher the file is
- crunched with. If the library can't find out, an error message is
- returned. You have to call this function first, then the Unpack()
- function, if no error has occured.
-
- INPUTS
- info - is the memory address you got from the AllocCInfo()
- function.
-
- filename - is a pointer to the filename you want to scan. The
- filename has to be zero-terminated.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, a non-zero value is returned, else a zero
- will be returned. If you get an error, you can look at
- the UI_ErrorNum flag in the info structure to see what
- went wrong.
-
- BUGS
- None known.
-
- SEE ALSO
- Unpack()
-
- ----------------------------------------------------------------------------
-
- Unpack(34.0) Unpack(34.0)
-
-
- NAME
- Unpack - unpacks the file.
-
- SYNOPSIS
- success = Unpack (info)
- D0 -48 A0
-
- FUNCTION
- Unpack() loads the file into memory and unpacks it. When the file
- is unpacked, the library will jump through the UI_Jump pointer to
- your scan routine. If the UI_Jump contains a zero, the library will
- not jump. All what your scan routine has to do, is to get the
- UI_DecrunchAdr and UI_DecrunchLen from the info structure and
- scan that memory. If the file is an archive (Lha, zoo), the library
- will unpack the archive and then read one file at a time and jump
- to your scan routine.
- If you need a password to unpack a file, the library will open a
- little window where it asks for the password. The window will be
- opened on the active screen, so if you open a screen by yourself,
- the window will appear on it (if it's active).
-
- NOTE:
- -----
-
- After an archive is unpacked and scanned, all the files and
- directories in the path you have selected will be deleted if the
- DELETE flag is on, not just the files there were stored in the
- archive, but ALL files will be deleted, so be sure to use a temp
- directory or something like that.
-
- INPUTS
- info - is the memory address you got from the AllocCInfo()
- function.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, a non-zero value is returned, else a zero
- will be returned. If you get an error, you can look at
- the UI_ErrorNum flag in the info structure to see what
- went wrong.
-
- BUGS
- None known.
-
- SEE ALSO
- DetermineFile()
-
- ----------------------------------------------------------------------------
-
- TestHunk(34.1) TestHunk(34.1)
-
-
- NAME
- TestHunk - tests the hunk structure in a file.
-
- SYNOPSIS
- success = TestHunk (address)
- D0 -54 A0
-
- FUNCTION
- TestHunk() tests a file for the hunk structure. You have to be sure,
- that the file you want to test is an object file, else this routine
- will return an error. You can check this by look in the
- UI_CrunchType flag in the info structure. You don't need to call
- this function by yourself before you calling the Unpack() function,
- because the Unpack() function does that by itself. I'm not quite
- sure it handles the overlay hunk correctly, but it should handle it.
- If you find a file you know are okay and this function says it's
- defect, please send me the file so I can find the error.
-
- INPUTS
- address - is the start address of the file you want to test.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, a non-zero value is returned, else a zero
- will be returned.
-
- BUGS
- None known.
-
- ----------------------------------------------------------------------------
-
- UnpackNum(34.1) UnpackNum(34.1)
-
-
- NAME
- UnpackNum - gives the number of unpackers.
-
- SYNOPSIS
- version,revision,types,unpackers=UnpackNum ()
- D0 D1 D2 D3 -60
-
- FUNCTION
- UnpackNum() counts the number of unpackers the library can determine
- and unpack. You will get two different numbers of unpackers. The
- first one (types) are the numbers of different types the library
- can unpack, example PowerPacker Data, PowerPacker Library etc.
- The second one (unpackers) is the number of unpackers, example
- PowerPacker, Lha, Imploder etc.
-
- INPUTS
- None.
-
- OUTPUTS
- version - is the library version number.
-
- revision - is the library revision number.
-
- types - is the number of different types of unpackers.
-
- unpackers - is the number of unpackers the library can determine.
-
- BUGS
- None known.
-
- ----------------------------------------------------------------------------
-
- UnpackList(34.1) UnpackList(34.1)
-
-
- NAME
- UnpackList - makes an unpacker name list.
-
- SYNOPSIS
- name=UnpackList (info)
- A1 -66 A0
-
- FUNCTION
- UnpackList() gives a pointer to the first name of a packer the
- library can determine & unpack. You can use this function, if you
- want to make a list over all the unpackers the library can
- determine. Call this function first and then use UnpackListNext().
-
- INPUTS
- info - is the memory address you got from the AllocCInfo()
- function.
-
- OUTPUTS
- name - is a pointer to a null-terminated string where the first
- name is stored.
-
- BUGS
- None known.
-
- SEE ALSO
- UnpackListNext()
-
- ----------------------------------------------------------------------------
-
- UnpackListNext(34.1) UnpackListNext(34.1)
-
-
- NAME
- UnpackListNext - reads the next name in the unpacker list.
-
- SYNOPSIS
- success,name=UnpackListNext (info)
- D0 A1 -72 A0
-
- FUNCTION
- UnpackListNext() gives a pointer to the next name of a packer the
- library can determine & unpack. You can use this function, if you
- want to make a list over all the unpackers the library can
- determine. Call the UnpackList() function first and then use this
- function.
-
- INPUTS
- info - is the memory address you got from the AllocCInfo()
- function.
-
- OUTPUTS
- name - is a pointer to a null-terminated string where the next
- name is stored.
-
- success - if this contains a zero, there are no more crunchers in
- the list. Otherwise it will contain a non-zero value.
-
- BUGS
- None known.
-
- SEE ALSO
- UnpackList()
-
- ----------------------------------------------------------------------------
-
- LoadFile(34.20) LoadFile(34.20)
-
-
- NAME
- LoadFile - loads a file into memory.
-
- SYNOPSIS
- success=LoadFile (info)
- D0 -78 A0
-
- FUNCTION
- This function allocate some memory with the files length and loads
- the file into it. The filename are taken from the UI_Filename field
- in the info structure. The length and address of the file are
- stored in UI_DecrunchLen and UI_DecrunchAdr.
-
- INPUTS
- info - is the memory address you got from the AllocCInfo()
- function.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, the file length is returned, else a zero
- will be returned. If you get an error, you can look at
- the UI_ErrorNum flag in the info structure to see what
- went wrong.
-
- BUGS
- None known.
-
- SEE ALSO
- FreeFile()
-
- ----------------------------------------------------------------------------
-
- FreeFile(34.20) FreeFile(34.20)
-
-
- NAME
- FreeFile - frees a file from memory.
-
- SYNOPSIS
- FreeFile (info)
- -84 A0
-
- FUNCTION
- You have to call this function after you have called the LoadFile()
- function and are finished with the file. This function frees the
- memory again.
-
- NOTE: You MUST call this function instead of freeing the memory by
- yourself!!
-
- INPUTS
- info - is the memory address you got from the AllocCInfo()
- function. You can pass a zero to this function.
-
- OUTPUTS
- None.
-
- BUGS
- None known.
-
- SEE ALSO
- LoadFile()
-
- ----------------------------------------------------------------------------
-
- I really hope you can use this library. See also the
- Unpack.construct.iff file to see how to construct your program.
-
- If you find any grammatical errors in this doc file, feel free to
- correct them, and send them to me. And of course any new crunchers.
- Please see in the "Wanted-Crunchers.Txt" for more info!
-
-
-
- WE NEED YOUR HELP TO GET THIS LIBRARY EVEN BETTER, THANK YOU VERY MUCH!
-
-
- Thomas Neumann Member of the SHI Anti Virus Group.
- Kongensgade 78
- 3550 Slangerup
- Denmark