









SuperSCRIPSIT Document Files
----------------------------


   This  article  will  explain  in  detail  the  structure  of  SuperSCRIPSIT
document files, which may  be of  assistance in  repairing  damaged files with
the aid of a 'zap' program or a file editor.


   Each SS file has four distinct areas:


      Record 0 - Document header and other vital information
      Records 1 thru 4 - Disk block index
      Record 5 - List of new page markers
      Records 6 thru to the end - Disk blocks containing the text.


   Before getting into the details, it is necessary  to define  the meaning of
a 'disk  block'.   It is 1K in  size, consisting  of 4 256  byte records. Each
block  contains a  7 byte header (explained later), up  to 985 bytes of  text,
paragraph  and  control  information,  and  32  bytes  of  overflow  space  to
accomodate minor  changes  without  starting a  new block.  Each of  the  four
possible  header/footer  pages  will occupy its  own  block,  if  present.   A
document may not  contain more than 174 blocks. Blocks are  numbered from 0 to
173, with Block 0 starting at document record 6.




Document Record 0 - Header
--------------------------
      Byte     Description
      ----     -----------
      00       ID - Always E0, identifies a SS document
      01 - 18  24 bytes for the document name
      19       Maximum lines per page in half-line increments
      1A       Pitch - PS=00
      1B       Line spacing in half-line increments
      1C - 23  8 bytes for printer driver filename
      24 - 25  Page number to start footers
      26 - 27  Page number to start headers
      28       Odd footer length in half-lines
      29       Odd header length in half-lines
      2A       Even footer length in half-lines
      2B       Even footer length in half-lines
      2C       Horizontal posit of cursor on video display at document close
      2D       Vertical posit of cursor on video display at document close
      2E       Column position of cursor at document close time
      2F - 30  Document line number of cursor at document close time
      31 - 45  Tab line 0 (21 bytes)
      46 - 5A  Tab line 1 (21 bytes)
               [NOTE] - The 21 byte tab line contains 168 bits, each bit
                        representing a column position. If a bit is set,
                        there is a tab stop at that position.
      5B - 71  Bit map of disk block allocation (23 bytes)
               [NOTE] - The first 174 bits of this map represent disk blocks
                        0-173. If a bit is set, that block is allocated.
                        If the bit is reset, the block is available.
      72       Disk block number of odd footer (if any)
      73       Disk block number of odd header (if any)






















      74       Disk block number of even footer (if any)
      75       Disk block number of even header (if any)
      76       Disk block number of tab line table (FF = none)
               [NOTE] - This block has space for 48, 21 byte tab lines, which
                        added to the two available in this record, make up
                        the maximum of 50 tab lines per document.
      77       Number of tab lines currently assigned to the document.
      78 - 97  Name of Author (32 bytes)
      98 - B7  Name of Operator (32 bytes)
      B8 - D7  Comments (32 bytes)
      D8 - FF  Not currently used



Disk Block Index - Records 1 thru 4
-----------------------------------
   Byte 00  of the index contains  the  number  of  active text blocks  in the
entire document, not including any  blocks assigned to headers, footers or tab
lines.   Starting with  Byte 01 of  Record 1, there  is  room for  174, 5 byte
groups, each group representing a  disk block  containing text. The groups are
arranged in the  actual order of the  document's text  as printed. The meaning
of each byte in a group is as follows:


      Byte     Description
      ----     -----------


      00       Disk block number (range 00 to AD). If the value is FF, it
               denotes the end of the index and all following bytes have no
               meaning. The actual record number in the file can be found by
               multiplying the block number by 4 and adding 6.
      01 - 02  Actual length of valid text in the block
      03 - 04  Number of lines of text in the block. The upper nybble of byte
               04 is used to contain block control information as follows:

               Bit 7 - set if the first line of the block is a whole line,
                       not part of a line from a previous block.
               Bit 6 - set if the block contains an open marker '['
               Bit 5 - set if the block contains a close marker ']'
               Bit 4 - set if the block has been changed (edited)




Disk Block Structure
--------------------
  Each disk block starts with a 7 byte header. Bytes  00-01 contain the number
of  text bytes following the  header. This value  must be  identical to  bytes
01-02 of the  index  group for this block. Bytes  02-06 of the header comprise
the default paragraph format for the block as follows:


      Byte     Description
      ----     -----------


      02       Column containing the left margin
      03       Column containing the right margin
      04       Column containing the indent tab
      05       Number of the tab line in use.
      06       Control byte - following bits are used:























               Bit 4 - Set if the paragraph is frozen
               Bit 3 - Set if the paragraph is centered
               Bits 2 thru 0 - used to indicate line spacing in half-lines.


   After  the header  comes  the  actual  text.  If  the block  starts  with a
complete paragraph (line), there will be  a  5 byte paragraph group  identical
in  format to the default group in the block header  followed by an EF control
byte indicating the end of the paragraph info.  Then comes  the actual text of
the  paragraph, terminated  by an FD, denoting  a  hard carriage return.  This
will be  followed by a 5  byte  paragraph  info group  for the next paragraph,
followed  by an EF,  and  so  forth until the  number of bytes shown  in Bytes
00-01  of  the  block  has  been  reached.  Everything  after  this  point  is
MEANINGLESS; the  text continues on the  next  block shown  in  the disk block
index. In the text, the following control codes may be encountered:


      Code     Meaning
      ----     -------


      E5       Null - deleted text
      EC       Soft page marker
      ED       Hard page marker
      EF       End of paragraph control info
      F0       Start block marker (shows as '[' on screen)
      F1       End block marker (shows as ']' on screen)
      F2       Normal tab
      F3       Align tab
      F5       'Code' for printer control (underline, bold, etc)
      F6       Filler bytes for insert mode
      F7       Space compression for two succeeding spaces (delta)
      F8       Soft carriage return replacing a space
      F9       Soft carriage return replacing a double space
      FA       Hard hyphen
      FB       Hard space (for hyhenation)
      FC       Hard carriage return during inserting
      FD       Hard carriage return
      FF       End of file/text.




List of New Page Markers - Document Record 5
--------------------------------------------


   This record  contains the  location  of  any  hard page  breaks  (^) in the
document.  Byte 00 is the number  of markers in the document, followed by  127
pairs of  bytes (byte FF is not used).  Each  non-zero  byte pair contains the
line  number, relative to the start  of the  document  (line 0), where a  page
break is located.




   Armed with the above  information, a user with a clobbered file may be able
to  zap it to  the  point  where it will load  properly and allow final repair
with the normal  SuperSCRIPSIT  editing functions. The information in the disk
block  index MUST  agree with what is actually contained  in  the  disk blocks
themselves. For example, when  the  FF byte is encountered in the index, it is
a sign that  the previous block  should contain the FF  end of text  code some






















where among the valid bytes of that block.


                        Tom Price


                         02/17/84
















































































































