Deja Vu #09
13 ноября 1999

Coding - Hrust Library svobodnopasppostpanyaemaya library window procedure by means of eccentricity can be packaged and paspakovyvat VARIOUS data.

<b>Coding</b> - Hrust Library svobodnopasppostpanyaemaya library window procedure by means of eccentricity can be packaged and paspakovyvat VARIOUS data.
(C) Dmitry Pyankov, 07/23/1999
__________________________________________



        Especialy for DEJA VU # 09!



   Hrust Library 2.02 - is this free library of procedures that 
can help you pack and unpack different data, add and extract 
files from Hrust2-archives. Moreover, everyone on the basis of 
these procedures and respecting the format of the header can 
write your own logger, which would fully meets the needs of the 
author archiver like the interface and on

functionality.


  Package Contents:



   HRUSTNFO.C - this file;

   CRC16S.C - procedure for calculating the CRC;

   CRC16F2.C - fast calculation procedure
                 leniya CRC;

   DEHR22.C - extractor;

   HRUST22.C - packer.


   Distribution of this
Libraries in the original version - that is,
change the library and set of procedures
impossible. Indicate the use of library Hrust Library 2.02 is 
mandatory. 


   When designing format headings were
considered valuable ideas of Alexander Grimalovskogo (Flying), 
Sergei Mullin (Simm), Ivan Roshchina. Thank you!

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


       Format headings:



   It was supposed to create a simple format
headers, so that any coder (in its own program) is not 
particularly tortured could rip the files from (to) archive. 
Except This is possible under the same format, just burn the 
compressed files - in which there is no additional data on 
behalf of File, CRC, etc.



   File is divided into blocks. Each
block a header. Blocks can be
different lengths: either # 8000 or # 4000 (hereinafter
see the installation of flags). The exceptions are simply 
compressed files (not in the game), their length is limited to 
# a000. Just compressed file length as a # a000

divided into blocks of length, or # 8000, or
# 4000.

   Consistently recorded blocks form a compressed file, and the 
sequence of compressed files - archive. 


        Header Block:

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

 0 (5) - "Hrst2" - the signature
 5 (1) - bytes of flags. (See below)
 6 (2) - the length of the original block
 8 (2) - the length of the packaged unit (with no long
         Ny title)
 +10 (1) - the length of additional information:

                  ---- 11 (2) - CRC16 packaged unit

          (You can quickly check the Save
          sequence file)
 13 (2) - CRC16 original block
 +15 (14) - a copy of the file header of the kata
           log
 29 (1) - a pointer to a subdirectory, in which
          rum is a file
 +30 (Variable length) - a comment.

                  ---- + [10] 11 (taken from bytes 10 bytes and
            diluted 11) - packed block.


   Length of additional information equals 0
for just packed files.

 = 2 if you want a byte and CRC16 IAN
      forged block
 = 4 + else and know CRC16 Source

      block
 = 18 + know the name of the file
 = 19 + know in which subdirectory is

      file
 > 19 + we also comment on the fi
      lu. The maximum length of comments

      we take equal to 255-30 = 225 characters.


          Byte flags:

          -----------

bit0 = 1 unit saved without compression
bit1 = 1 block in the file was last.
bit2 = 1 end archive.
bit3 = 1 unit packed with the "support" for the previous
       duschy block (in the past 16 kb is
       On the same file). Block length is 16 KB.
bit3 = 0 - reliance on previous block no.
bit4 = a solid backup. When packing the current

       File rested at 16 kb from the previous
       duschih files. (Those files, in turn,
       In turn, too, relied on previous

       files).
bit5 = 1 file deleted.
bit6 = 1 file zaparolirovan.
bit7 = 1 means that it does not file a

       subdirectory.

Description subdirectory:


 0 (5) - "Hrst2"
 5 (1) - bytes of flags. Bit 7 is set.
 6 (1) - the length of the additional information:

                  ---- 7 (11) - the name of the subdirectory. 
(Name length can           and can be less than 11).

 18 (1) - a pointer to a subdirectory - "Rodi
        Tel.
 19 (variable) - the comment to the rolled
    ravine.

                  ----

          Notes:



   I. At the moment, bits 3,4,6 are always
reset.

  II. "A pointer to a subdirectory. In the first
pores of the byte can be set to
0. In such a case is not supported by the subdirectories 
system. When writing razarhivatora can ignore the importance of 
this bytes - this will lead to that all the files

will be at the root. In
Later, with the help of this byte, we can
organize files in subdirectories of virtually any nesting by 
the following method: 


   1. The pointer is 0: file or subdirectory in the root 
directory. 

   2. Each encountered (in order of succession) subdirectory 
assigned a number between 1 .. 255. 

   3. If the newly encountered a file or subdirectory has a 
byte pointer to a subdirectory of "the number N, this means:  
a) for file: the file is in a subdirectory 

    number N;
 b) to subdirectories: a parent under this
    The directory is a subdirectory with the number

    N.

  III. If a subdirectory is marked as "deleted", it will still 
be assigned the appropriate number. If the file is marked as 
"Remote", and in the same subdirectory is file with the same 
name, it should perceived as a "previous version"

file. During the operation MOVE for remote backup 
subdirectories pointers to directories recalculated. For solid 
archives MOVE operation is not applicable.


  IV. In the TR-DOS is that the length of the file
bytes does not match the file length in sectors. Here you can 
provide different Options:

 1. Always take the length of the file in the sectors.
 2. Always take the length of the file in bytes.
 3. If the file length in sectors of the length of the file in 
bytes, the length of the file taken as a byte. Otherwise -

in both sectors.

   It is recommended to use the third option. Basic length 
files, apparently, we must take sectors.


  V. In what could be packed
all the way TR-DOS disk. To
to distinguish what is the image of the entire disc
must be within 14 bytes of header ('copy header files from a 
directory ") put down the length of the sectors and the length 
in bytes = 0. When packing a TR-DOS disk, you can provide an 
option when packed not the entire disc, but only the part 
occupied by the files. 

  VI. From the format of the header file that it can store 
files of any length. I do not know whether this can be useful.

 VII. Self-extracting archives. No
problems. Immediately prior written basic archive file, which 
would unfold the archive, then we SFX archives. In this basic 
file, you can add additional features: for example - unpacking 
on another drive and other ... 


    Names and file extensions in TR-DOS,

       Working with TR-DOS.



      First of file extensions:

". Zzz"-extension of the files, create archive.

Extending just packed files (not
archive):


   ". Zzz", as well as the following options:


  ". ZCz" if the file extension was "C".

  ". ZHz" if the file extension was "H".

  ". ZXz" if the file extension was "X",

         and so on.


   This will allow the program directly from the catalog to 
determine not only the fact that this file is packed, but also 
to determine the expansion source file. For example, music 
editors, meeting file with the extension ". Zmz" immediately 
determine that this file - bagged music.



   If you intend to work with the packed files from programs 
that work only with files with extension "C", then

expansion will be respectively: ". CCz",
". CHz", "CXz" (example TASM 4.12).


   Because in TR-DOS maximum length of file
255 sectors, it will create several files. Their names will be 
different last character. In the first file the last 
character-space, the rest - 1,2 ... 9, A, B, C. ..



   These files may have a length of 255 sectors is not 
necessarily, and they can not go order - this will complement 
the archive In any case, not only in the case

When the archive file is the latest in
disk.

   Files from the archive may be removed. At the same time
in flag byte corresponding bit is set. Well, as a TR-DOS, after 
deleting a file of possible operations on the "seal" the 
archive. 


   Simplification: at first you do not use sub-directories, 
record files are archived one after another and not to add 
archive if the archive is written after any file. Naturally, 
the implementation of solid archives and archives where the 
file package block is carried out using the previous unit - a 
reserve for the near future. 
----------------------------------------- 


        Procedure HRUST



            Input parameters:

HL - from packing
DE - where to put the compressed file.
BC - the length of the source file.
A - length of the additional information. (In a
    head. For details, see Format Headers
    Cove.)

HL> DE ever.


           Output parameters:


BC - the length of the packaged unit, together with the title. 
Other parameters such as length of the source and packaged 
unit, CRC16 source and packaged unit (if it was

set) are in the header. Likewise in
header set aside a place in the comment (if it was specified).


   When packing is used in addition
3 cans. In this case, a search box as well
# 4000 (16 kb). When packing therefore desirable to make the 
difference between HL and DE 16 kb. Can be used instead of 3, 
and 2 banks: setting USEBNK2 = VSEBNK1 and OKNO = # 2000.

Difference between HL and DE can be set equal to 8 KB. Minimum 
difference between HL and DE depends on how long the file you

pack, and what he content. To file
length of 32768, containing a number of RND must specify the 
difference 32768 / 8 = 4096 plus place under the title. For 
well pakuemyh Files can be given the difference even

For example, a length of 512 bytes. However, the decrease of 
this difference significantly affects the quality of 
compression. 


   You can change the speed of packing: FSPEED.
1 .. 255. 1 - the highest rate of compression
(Respectively, the quality is worst).
255 - the slowest speed.


   The packaging process otobrazhaetcya on the screen: an 
update occurs after every 256 packed bytes. Is responsible for 
this procedure PERCENT. Procedure is somewhat slow, so if you 
want to speed up a little bit of packing, replace it faster. 
For example, the "spinning rod" :-). 

   PERCENT uses the procedure:


   PERC1: Output: C-as a percentage: the length of the OUTPUT 
file. 

                 A - as a percentage: the length of the INPUT 
file. 


   PERC5: entry: what have PERC1 output. Displays a graphical 
representation of the package.



   PERC3: input: the same as that of PERC5. The mapping process 
of packing with the help of numbers. 


   As long files are broken into
blocks and each block is packaged separately, then
for the proper display of the process introduced another 3 
variables. If you pack one block, then there is always zero. 
But if you pack file length, for example, 65,280, and divide it 
into blocks of length 32768 and 32512 bytes, When packing the 
first block set: 

BLOCKP = 0; original length packed

               blocks
BLOCKNP = 32512; length nepakovannyh blocks
BLOCKPP = 0; length packaged blocks

When packing the second block:

BLOCKP = 32768
BLOCKNP = 0
BLOCKPP = length of packed first block.


      Unpacker DEHRUST



   Length of less than 256 bytes. Do not use
stack. Relotsiruemy. If you need more speed, we can reveal the 
internal cycles and reveal PSEUDO-CALLR :-). Additionally, it 
is desirable to insert the top of the unpacker check that at 
the beginning File contains "Hrst2".


Login:
HL - whence, DE - where.


        The procedure for calculating CRC16



   They are actually two. One - a short
and slow, the second - fast, but uses additional memory size of 
512 MB. 

CRC16S - Slow procedure.

CRC16F2 - Fast. It must first integrate over
          ized (CRCINI - created

          Table 512 bytes).

CRCCALC: Rin: HL - Home fayla.BC - length.

         OUT: DE - CRC.

CRCUPD: Rin: HL - beginning of the file. BC - length.

        DE - CRC.

        OUT: DE - CRC.


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

                 Example


ORG # 6000
LD HL, 0
LD DE, # C000
LD BC, # 4000
LDIR
; Threw ROM address # c000

; Packing:

LD HL, # C000; from
LD DE, # 8000; to
LD BC, # 4000; as
LD A, 4; - CRC source and packaged
; Files are stored in the header.
CALL HRUST
And in BC we get the length of the file, along with Zago, deft

; Unpacking:

LD HL, # 8000
LD DE, # 8000
CALL DEHRUST
RET
-----------------------------------------


           A critical view.



   As a rule, in the author's descriptions emphasize the 
advantages and disadvantages of hiding programmy.Pora finish 
with this nehoroshey practice :-).


   On the format of the special headers are no comments, 
although a few words to say, you can: on each block is given a 
title, more addition, each block can be a comment.


   Yes, it's wasteful. But on the other hand, when the archive 
is corrupted you can restore the saved files or even save the 
file. The general format of the header makes it easy to format. 

   Now about the procedure. It was not written specifically for 
the general public, so it can find a lot of "blunders".

However, a workable procedure, I decided not to rewrite.

   There are some files, which in the end
there are many "nepakuemyh" bytes. Such
files can be correctly decompressed and
the computer may stop responding. In such cases,
recommend 2 methods:

   1. To ensure that when unpacking
"End" of the packed file is above the
"End" of the decompressed file.

   2. Add to extractor 3 lines for
to the packed file copied to the
higher memory area, in this case as there is an additional gap
and uncompressed data does not bump on the packed. However, in 
this case the spoils contents of multiple cells after file.


   In future versions Hrum '& Hrust this
will be fixed.

   And what about compression quality: The quality of both
yourself ...
-----------------------------------------

My coordinates:


  E-Mail: dp@fmf.gasu.gorny.ru

    IRCNET: # Z80, nick: Hrum

       ICQ: nick: Hrumer

      Tel: 8-( 38822) -24421

  Post: 659700 Gorno-Altaisk

        st. Gurkin 49-6

   Pyankov Dmitry Yu.


More recent versions can be found on my
HP: http://fmf.gasu.gorny.ru/ ~ dimanp






Other articles:

Apperativchik - the entry of the authors.

Apperativchik - On the control of Deja Vu.

Apperativchik - Freebie number 2: pirates and hacked versions of the magazine.

Apperativchik - Dejavu Info: How to buy the magazine Deja Vu.

Topic - Swap: "From letters to parcels" as found in the city Spektrumistov.

Topic - Tusovka: CSP'99 - interview with Slack Den.

Topic - Tusovka: CSP'99 - an interview with the main coder'om young Novosibirsk group AREASoft

Topic - Tusovka: CSP'99 - interview with one of the publishers 'electronic journal Deja Vu' Daniel / Playgear Co. / Binary Dimension.

Topic - Tusovka: CSP'99 - interview with one of Rybinsk of Cav / Auryn.

Topic - Tusovka: CSP'99 - an interview with the father of Playgear cool uncle Ze Pagan.

Topic - Tusovka: CSP'99 - an interview with the main coder'om Flash and concurrently one of the founders of the group - Alex Rider.

Topic - Tusovka: CSP'99 - poll as the party was held in a nutshell, the general impression.

Topic - Tusovka: Legend of the way passed Crazy Siberian Party 1999.

drop of solder - HD discs: Finalization of the drive controller to work with HD-disks.

drop of solder - The decision PROBLEMS 1.2MB drive.

drop of solder - increase the amount of RAM up to 1024K on SPECCY option Taganrog 128K!

drop of solder - circuit programmer for chip-only memory (ROM).

drop of solder - a dot-matrix printers.

drop of solder - ISA-Spectrum: card inserted into the ISA slot is IBM, which is part or a complete computer ZX-Spectrum.

Software - demoscene: Obzor'ing demozov: 63 bit III, Jam, Anamnesis, 7 Up, 63 bit IV, DemoDyin, Napalm, Crapmo 2, Bunch of Arce, Devotion, WorkStop, Energy , Yes.

Software - Game Review: MIST: Monstrland Part Two, Bomb Lakes, Marbles, KluXer, 4x4 Puzzle, Soldiers, Boats.

Software - Gun Commander: User's Guide.

Coding - coding for Dummies: civilized way in TR-DOS.

Coding - coding for Dummies: More about one of the ways to survey the keyboard.

Coding - coding for Dummies: How does the "Boot" from the inside.

Coding - coding for Dummies: refine MINI BOOT V3.0.

Coding - how to print 42 characters per line (with trabutami), the procedure is quick print sprites with pixel precision.

Coding - Bystrai printing 64 characters per line.

Coding - Conversion of numbers from the stack calculator in the character string.

Coding - fast print 2x2 sprite familiarity, up to familiarity.

Coding - Hrust Library svobodnopasppostpanyaemaya library window procedure by means of eccentricity can be packaged and paspakovyvat VARIOUS data.

Coding - Error Handling TR-DOS when working through # 3D13.

Coding - a set of procedures for constructing the user interface.

Coding - pishim virus invisible to TR-DOS.

Another world - The illusion of safety: Terrifying tales of Windows security and the Internet (Part One).

Hall of Fame - 3 methods to distinguish pealny ZX Spectrum from emulyatopov.

Hall of Fame - the charter of the National Fund of the Spectrum (HFSP).

Hall of Fame - Reserves: an attempt to present the perfect ZX Spectrum.

Hall of Fame - boiling: "And there still alive Speccy, sympathy Boxing?" Reflections in hearing.

Hall of Fame - schA say number 1: optimization of procedures, the announcement of the magazine and the new arcade toy.

Hall of Fame - schA say number 1: disassembly and Serg'a Playgear, hacking calling card, the announcement Crazy Siberian Party '2000.

Hall of Fame - A brief history of the Kemerovo group Digital Life Group.

Seven and 1 / 2 - Student mythology.

Seven and 1 / 2 - April Fools' Day 2 (end).

Seven and 1 / 2 - fairy tales for children.

Seven and 1 / 2 - Features a national ruleza or pure Siberian project (the story of Crazy Siberian Party 1999).

Samples pen - memory: story of the game "Black Crow".

Samples pen - story, "Elixir of the Beast."

Samples pen - "Last Warrior".

Advertising - text ads and announcements.

Advertising - a graphical advertising and announcements.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Nonsense in BASIC - programmirrovanie calculator Citizen SPR-145.
From pedaktsii - newspaper readers waiting for help.

В этот день...   21 November