home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / Geneve / 9640news / CAT38 / PPSPEC.ARK < prev    next >
Text File  |  2006-10-19  |  20KB  |  420 lines

  1. ?
  2.                        Page Pro File Formats Specification
  3.  
  4.                         Copyright 1992 - Asgard Software
  5.                                All Rights Reserved
  6.  
  7.                                   INTRODUCTION
  8.  
  9. Since Asgard Software released Page Pro 99 in the summer of 1989, it has become
  10. one of the most popular programs for the TI-99/4A. It has also become one of
  11. the most well-supported with dozens of packages from Asgard, and at least as
  12. many from other vendors, available by fairware, and in the public domain.  In
  13. turn, the file formats used by Page Pro 99 have become "standards" in
  14. themselves.
  15.  
  16. As standards mature they become better documented, and evolve to meet new
  17. requirements. This article is simultaneously a codification of the current
  18. standard, some extensions that are used by current and future Asgard Software
  19. products, and a bit of historical information that may be of general interest
  20. in explaining why Page Pro has become as popular as it has.
  21.  
  22.  
  23.                               CURRENT FILE FORMATS
  24.  
  25. While the following is of interest primarily to programmers that would like to
  26. utilize Page Pro 99 pictures and fonts in their programs, it is by no means
  27. limited to programmers.
  28.  
  29.                              PAGE PRO PICTURE FORMAT
  30.  
  31. The Page Pro 99 picture format is wonderfully flexible. It is also unique in
  32. the TI-99/4A world as being the only picture format that can be addressed in a
  33. relative manner. Why is this important? It means that a program using it
  34. doesn't have to have the entire picture in memory in order to display or print
  35. it - it can grab any little piece of it as necessary. For this reason, the Page
  36. Pro 99 picture format is more appropriate for use on a computer of limited
  37. memory like the TI-99/4A than any other in use on this machine.
  38.  
  39. Picture files are stored in Internal/Fixed-13 format (I/F-13). Each record of
  40. the file is 12 bytes long with the first byte reserved by the 99/4A for storing
  41. the size of the record (it is always a value of "12"). Files can be of any
  42. size, but are at least 2 records in size (actually 2 sectors on the disk since
  43. the 99/4A reserves that much space for every file).
  44.  
  45. The first record of every picture file is the "header". Relative access files
  46. are read from record 0 on - but if viewed sequentially, this would be record 1
  47. of the file. This record contains information about the size of the picture,
  48. and breaks down as follows:
  49.  
  50.     Record #0
  51.         Byte 1          - Number of columns in picture (x-size)
  52.         Byte 2          - Number of rows in picture (y-size)
  53.         Bytes 3-4*      - Number of horizontal pixels in picture (x-size)
  54.         Bytes 5-6*      - Number of vertical pixels in picture (y-size)
  55.         Bytes 7-8*      - Starting record of display bitmap
  56.         Bytes 9-12*     - =0 (future expansion)
  57.  
  58. Each Page Pro 99 "row" is 8-dots in size. Each Page Pro 99 "column" is 12-dots.
  59. Bytes 1 and 2 must be used, bytes 3-12 are optional, and are set to 0 if not in
  60. use.
  61.  
  62. If the first two bytes are used for indicating the size of the picture, the
  63. picture is limited to 255 rows and 255 columns in size. This really isn't much
  64. of a limit for most applications - that would be a picture of 2,040 dots by
  65. 3,060 dots.
  66.  
  67. If the values in bytes 1 and 2 are zero ("0") than bytes 3-6 should be used for
  68. the width and height of the picture. These optional "words" (2-bytes) allow you
  69. to specify a picture of up to 65,534 dots by 65,534 dots - or 8,191 columns by
  70. 5,461 rows. This facility isn't used by any current Page Pro 99 applications,
  71. but is provided for future expansion of the format.
  72.  
  73. Bytes 7 and 8 combined contain the starting record of a display bitmap. This is
  74. a bitmap where every bit represents an 8x12 cell. If it is set to "1" there is
  75. picture data in the cell, if it is set to "0" there is not. Page Pro 99 figures
  76. this out when you load a picture by loading the whole picture and "remembering"
  77. which cells contain information and which don't. When the program is re-written
  78. to use this feature, it will load pictures much more quickly (but not necessar-
  79. ily print them faster). This bitmap is row oriented (meaning all of the bits
  80. for a row across are stored in as many records requiring in one block). If a
  81. picture was 24 rows and 24 columns, the bitmap would require 72 records (3
  82. records across by 24 records down).
  83.  
  84. After the header, all the following records are the picture data. Like the
  85. header, each record is 12 bytes long. Each byte is part of the ASCII
  86. representation of the hexadecimal definition of the character. The picture is
  87. stored by rows - meaning all of the data in a particular row will be stored
  88. one record after the other until the end of the row. The data would look like
  89. the following for a picture of 3 rows by 3 columns:
  90.  
  91.     Record #1 - Bytes 1-12 - Pattern description of picture row 1, column 1
  92.     Record #2 - Bytes 1-12 - Pattern description of picture row 1, column 2
  93.     Record #3 - Bytes 1-12 - Pattern description of picture row 1, column 3
  94.     Record #4 - Bytes 1-12 - Pattern description of picture row 2, column 1
  95.     Record #5 - Bytes 1-12 - Pattern description of picture row 2, column 2
  96.                 .
  97.                 .
  98.                 .
  99.     Record #9 - Bytes 1-12 - Pattern description of picture row 3, column 3
  100.  
  101. Again, each byte is a 1 by 8 pixel binary representation of the data stored at
  102. a particular row and column.
  103.  
  104. To find the total number of records that a picture will contain, use the
  105. formula NUMBER_ROW * NUMBER_COLUMNS. If using the optional picture specifi-
  106. cation, use the formula (#_HORIZONTAL_DOTS / 8) * (#_VERTICAL_DOTS / 12).
  107.  
  108. To find the data at a specific row R and column C, where the picture is Y rows
  109. wide and X rows tall, use the formula:
  110.  
  111.     RECORD_NUMBER = (R * Y) - Y + C
  112.  
  113. If writing a program in a compiled language such as Fortran 99 or c99, it is
  114. best to use at least 2-byte Integer values to store the variables
  115. RECORD_NUMBER, R, C, X and Y.
  116.  
  117. Finally, the following is a short Extended BASIC program to open up a picture
  118. file with the name "HEART", find the size, read in the data at the first row
  119. and column, place it in a character definition and display it:
  120.  
  121.         10 ! Program to read in picture and place in a character definition
  122.         20 ! Copyright 1992 - Asgard Software
  123.         30 ! May be re-used with credit
  124.         40 !
  125.         90 DIM D$(16)
  126.         91 DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
  127.         92 RESTORE 91
  128.         93 FOR I=1 TO 16
  129.         94 READ D$(I)
  130.         95 NEXT I
  131.         100 ! Open picture file
  132.         110 OPEN #1:"DSK1.HEART",RELATIVE,INTERNAL,FIXED 13,INPUT
  133.         120 ! Read header
  134.         130 INPUT #1,REC 0:A$
  135.         140 ! Find size of picture
  136.         150 X_SIZE = ASC(SEG$(A$,1,1))
  137.         160 Y_SIZE = ASC(SEG$(A$,2,1))
  138.         170 PRINT "Rows:",X_SIZE:"Columns:",Y_SIZE
  139.         180 ! Read in first row and column
  140.         190 INPUT #1,REC 1:A$
  141.         200 ! Place in a character definition
  142.         210 FOR I=1 TO 12
  143.         220 B=ASC(SEG$(A$,I,1))
  144.         230 N1=INT(B/16)
  145.         240 N2=B/16
  146.         250 C=INT((N2-N1)*16)+1         ! Get second half of byte
  147.         260 D=N1+1                              ! Get first half of byte
  148.         270 F$=F$&D$(C)&D$(D)           ! Add to definition
  149.         280 NEXT I
  150.         290 G$=SEG$(F$,1,8)
  151.         300 H$=SEG$(F$,9,4)&"00000000"
  152.         310 CALL CHAR(130,G$)
  153.         320 CALL CHAR(131,H$)
  154.         330 ! Now display on lines 1&2 and wait for key-press
  155.         340 CALL HCHAR(1,1,130,32)
  156.         350 CALL HCHAR(2,1,131,32)
  157.         360 CALL KEY(0,K,S)
  158.         370 IF S=0 THEN 360
  159.         380 CLOSE #1
  160.         390 END
  161.  
  162.                               HEADLINE FONT FORMAT
  163.  
  164. Headline fonts, like Page Pro 99 picture files, are the only fonts for the
  165. 99/4A that can be addressed in a relative manner on disk. This means that
  166. unlike any other font format for the TI-99/4A, there is no real limit on the
  167. size of a font (other than disk space).
  168.  
  169. It is important to note that Headline fonts were derived after the release of
  170. Page Pro 99 in response to one of the limitations of the program. While Page
  171. Pro 99 is very flexible about locating pictures, it isn't particularly flexible
  172. about fonts. In fact, the program is limited to 3 types of fonts - large, small
  173. and line fonts. While the two sizes were adequate for many uses, they were
  174. found lacking for some. Headline fonts were originally created to allow you to
  175. generate large titling for newsletters, flyers, etc., through the use of the
  176. Headline Maker utility.
  177.  
  178. The Headline Maker utility allows users to type a line of text, and it
  179. generates a picture file containing the text in the Headline font of your
  180. choice. The picture can then be located on a page as you would any picture in
  181. Page Pro.
  182.  
  183. In a sense, Headline fonts are an after-thought. However, as their design has
  184. matured their utility has become more apparent - they have become the core of a
  185. number of Page Pro utilities - both available and in development.
  186.  
  187. The Headline font format is arranged similar to the Page Pro picture format in
  188. that it consists of a header followed by data records. Headline fonts are also
  189. in the Internal/Fixed-13 format, and can be confused by some programs designed
  190. to use Page Pro pictures as picture files, and vice versa (more on avoiding
  191. that later). In a way, Headline fonts are picture fonts, in that each font
  192. letter is stored as a small picture. There are differences though.
  193.  
  194. The header of a Headline font consists of the first 96 records of the file,
  195. numbered 0 to 95.  They are as folllows:
  196.  
  197.     Record #0 - FONT DESCRIPTION RECORD
  198.                   This contains information about the size of the font.
  199.  
  200.         Byte 1          - Always has a value of 1
  201.         Byte 2          - Always has a value of 1
  202.         Bytes 3-4       - The last record of the file + 1
  203.         Byte 5          - The maximum height of the font character in rows
  204.                             (each row is 12 pixels high).
  205.         Byte 6  - 0 (future expansion)
  206.         Bytes 7-8*      - Actual height of the tallest character in pixels
  207.         Bytes 9-12      - 0 (future expansion)
  208.  
  209.     Records #1-95 - LETTER DESCRIPTION RECORDS
  210.                       These records contain information about each letter of
  211.                       the font. The ASCII value of the letter they describe can
  212.                       be found by adding 32 to the record number (in other
  213.                       words, record 1 describes the font character for ASCII
  214.                       value 33, or a "!").
  215.  
  216.         Byte 1          -       Column size of a character (width, or "x")
  217.                               Each column is 8 pixels wide
  218.         Byte 2          -       Row size of a character (height, or "y')
  219.                               Each row is 12 pixels high
  220.         Bytes 3-4       -       Starting record of the letter (the first record
  221.                                 of the file where data for the letter is found)
  222.         Bytes 5-6*      -       Actual pixel-width of a character
  223.         Bytes 7-12      -       0 (future expansion)
  224.  
  225. Please note that in record #0, bytes 7-8 are optional, and in records #1-95,
  226. bytes 5-6 are optional. These are provided to extend the font format to deal
  227. with letters of less than even column and row sizes.
  228.  
  229. Records 96 and up are the actual picture data for the font. The data is
  230. arranged as outlined in the specification for Page Pro pictures. In fact,
  231. knowing the starting record of a letter's data, its height and width, you
  232. could use the example program for reading and displaying a portion of a
  233. picture to do the same for a portion of the letter.
  234.  
  235. The following example program will open a Headline font, read in the
  236. information about, and calculate the starting record of each letter.
  237.  
  238.         10 ! Program to read in the vital statistics of a Headline font
  239.         20 ! Copyright 1992 - Asgard Software
  240.         30 ! May be re-used with credit
  241.         40 !
  242.         100 DIM WIDTH(95),HEIGHT(95),STARTREC(95)
  243.         110 ! Open the Headline font named "FONT_HF"
  244.         120 OPEN #1:"DSK1.FONT_HF",RELATIVE,INTERNAL,FIXED 13,INPUT
  245.         130 ! Read the Font Description Record and print maximum height
  246.         140 INPUT #1,REC 0:A$
  247.         150 MAXHT = ASC(SEG$(A$,5,1))
  248.         160 PRINT "The maximum height is:";MAXHT
  249.         170 ! Read in the rest of the font
  250.         180 FOR K=1 TO 95
  251.         190 INPUT #1,REC K:A$
  252.         200 WIDTH(K) = ASC(SEG$(A$,1,1))                ! Width of letter
  253.         210 HEIGHT(K) = ASC(SEG$(A$,2,1))       ! Height of letter
  254.         230 T1 = ASC(SEG$(A$,3,1))              ! 1st byte of start record
  255.         240 T2 = ASC(SEG$(A$,4,1))              ! 2nd byte of start record
  256.         250 STARTREC(K) = (T1*256)+T2           ! First record of letter data
  257.         260 NEXT K
  258.         270 CLOSE #1
  259.         275 ! Now print the values for each letter
  260.         280 FOR K=1 TO 95
  261.         290 PRINT CHR$(K+32)&" = "&STR$(WIDTH(K))&"x"&STR$(HEIGHT(K))
  262.         300 PRINT "First record=";STARTREC(K)
  263.         310 NEXT K
  264.         320 END
  265.  
  266.                            OTHER PAGE PRO FILE FORMATS
  267.  
  268. There are four other file formats used by Page Pro 99 - Large, Small and Line
  269. fonts, and Page files. Since the formats of these are unchanged from the
  270. documentation provided in the Page Pro 99 manuals, we will not cover them here.
  271.  
  272.                                Future File Formats
  273.  
  274. As mentioned in the introduction Page Pro 99  - or rather, actually, the Page
  275. Pro concept - is evolving. As this is being written the program itself is in
  276. the process of a major revision (for eventual release as version 2.0).
  277. Additionally, the finishing touches are being put on a major new Page Pro
  278. compatible utility - Page Pro Page Composer (hereafter Page Composer).
  279.  
  280. While Page Pro 99 v2.0 features a number of tremendous advances in 99/4A page-
  281. making, the only new file formats generated are found in Page Composer. This
  282. program was designed to complement Page Pro by addressing the most glaring
  283. weaknesses of the program. It features the following:
  284.  
  285.     * It allows you to create, for the first time, multi-page documents using
  286.         Page Pro pictures
  287.  
  288.     * The program supports multiple printer resolutions: the standard 480
  289.         dots across, as well as the 640 and 960 dot modes supported by most
  290.         current printers
  291.  
  292.     * The pages of your documents can be printed either in Landscape or
  293.         Portrait orientations
  294.  
  295. Appropriately, the new file format introduced with Page Composer is the
  296. "Document file".
  297.  
  298.                               DOCUMENT FILE FORMAT
  299.  
  300. Document files are organized around the capabilities of Page Composer. The
  301. program allows you to have documents of any length (though, for practicality
  302. sake this is limited to 999 pages), and up to 30 pictures of any size on the
  303. page. It has no support for text other than text first stored as a picture
  304. using Page Pro 99's "clipping" function, or a utility such as Page Pro Headline
  305. Maker. Though this limits the uses of Page Composer somewhat, the program is
  306. nevertheless an ideal tool for laying out newsletters or other multi-page
  307. documents.
  308.  
  309. A Document file is in Internal/Fixed-43 format. It consists of 42-byte records
  310. with a 1 byte length byte at the beginning. The header consists of the first
  311. record of the file - or record 0 - and describes what the document looks like.
  312. The header is as follows:
  313.  
  314.     Record #0 -     DOCUMENT DESCRIPTION
  315.         Bytes 1-2       - Number of pages
  316.         Bytes 3-4       - Horizontal Page Resolution (480, 640 or 960)
  317.         Bytes 5-6       - Orientation (1=Portrait, 2=Landscape)
  318.         Bytes 7-8       - Horizontal Page Size in Page Pro 8-pixel columns
  319.         Bytes 9-10      - Vertical Page Size in Page Pro 12-pixel rows
  320.         Bytes 11-28     - Internal use to Page Composer
  321.         Bytes 29-42     - Unused
  322.  
  323. The data describing each page is organized into 30 record blocks - each page is
  324. sequentially stored as follows:
  325.  
  326.     Page #1 -       Records 1-30
  327.     Page #2 -       Records 31-60
  328.     Page #3 -       Records 61-90
  329.  
  330.         and so forth...
  331.  
  332. Each record of each page file describes a picture on that page (hence the limit
  333. of 30 pictures per page). The data for page #1 would be stored as follows:
  334.  
  335.     Record #1 - PICTURE INFORMATION FOR PICTURE #1 ON PAGE #1
  336.         Bytes 1-30      - Picture filename
  337.         Bytes 31-32     - Picture starting X location in columns
  338.         Bytes 33-34     - Picture starting Y location in rows
  339.         Bytes 35-36     - Picture X-size in columns
  340.         Bytes 37-38     - Picture Y-size in rows
  341.         Bytes 39-40     - Picture characteristics
  342.                             1=Transparent
  343.                             2=Opaque
  344.         Bytes 41-42     - Number of pictures on page
  345.  
  346.     Record #2 - PICTURE INFORMATION FOR PICTURE #2 ON PAGE #1
  347.             (same layout as above)
  348.                         .
  349.                         .
  350.                         .
  351.     Record #30 - PICTURE INFORMATION FOR PICTURE #30 ON PAGE #1
  352.  
  353. Actually, only Byte #40 is used for the 2 current picture printing options. The
  354. other byte is available for future expansion.
  355.  
  356. While it is difficult to print Document files outside of the Page Composer
  357. environment, it isn't too difficult to write a program to create or modify
  358. these types of files. The following is an example of a program to modify some
  359. picture data on Page 1 of a Document file:
  360.  
  361.         10 ! Program to create a Document file
  362.         20 ! Copyright 1992 - Asgard Software
  363.         30 ! May be re-used with credit
  364.         40 !
  365.         100 DIM PAGEDATA$(30)
  366.         110 ! Open the document named "MYDOC"
  367.         120 OPEN #1:"DSK1.MYDOC",RELATIVE,INTERNAL,FIXED 43
  368.         130 FOR I=1 TO 30
  369.         140 LINPUT #1,REC=I:PAGEDATE$(I)
  370.         150 NEXT I
  371.         155 A=ASC(SEG$(PAGEDATA$(1),41,1))+ASC(SEG$(PAGEDATA$(1),42,1))
  372.         156 PRINT "Number of pictures:";A
  373.         160 INPUT "Picture filename:";FN$
  374.         170 I=LEN(FN$)
  375.         175 IF I=0 THEN 360
  376.         180 FOR J=1 TO A
  377.         190 IF SEG$(PAGEDATA$(J),1,I)=FN$ THEN 230
  378.         200 NEXT J
  379.         210 PRINT "PICTURE NOT FOUND!"
  380.         220 GO TO 160
  381.         230 PRINT "PICTURE FOUND!"
  382.         240 A$=SEG$(PAGEDATA$(J),1,2)
  383.         250 STARTX=ASC(SEG$(A$,1,1))+ASC(SEG$(A$,2,1))  ! Find starting X
  384.         260 PRINT "Starting X location:";STARTX
  385.         270 INPUT "New X location:";NEWX
  386.         280 A$=SEG$(PAGEDATA$(J),3,2)
  387.         290 STARTY=ASC(SEG$(A$,1,1))+ASC(SEG$(A$,2,1))  ! Find starting Y
  388.         300 PRINT "Starting Y location:";STARTY
  389.         310 INPUT "New Y location:";NEWX
  390.         320 PAGEDATA$(J)=SEG$(PAGEDATA$(J),5,38)
  391.         330 PAGEDATA$(J)=CHR$(0)&CHR$(NEWX)&CHR$(0)&CHR$(NEWY)&PAGEDATA$(J)
  392.         340 PRINT #1,REC=J:PAGEDATA$(J)                 ! Insert new values
  393.         350 GOTO 160
  394.         360 CLOSE #1
  395.         370 END
  396.  
  397.  
  398.                                      SUMMARY
  399.  
  400. As the Page Pro idea changes, so will the file formats that the programs in the
  401. family use. It is likely that future versions of Page Pro 99 and utilities such
  402. as Page Pro Page Composer and Page Pro Headline Maker will extend the types of
  403. files further. You will note that all extensions are designed to be "backward
  404. compatible" - in that files using extended functions will still be usable in
  405. older programs. This was deliberate - and should continue into the future.
  406.  
  407. Page Pro has just begun.
  408.  
  409.  
  410. Page Pro 99, Page Pro Headline Maker and Page Pro Page Composer are trademarks
  411. of Asgard Software
  412.  
  413.  
  414.                       MAY BE REPRODUCED FREELY IF UNALTERED
  415.  
  416.  
  417. Download complete.  Turn off Capture File.
  418.  
  419.  
  420.