home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / textinfo / techpcx.arj / TECHRE.TXT
Encoding:
Text File  |  1991-03-02  |  18.6 KB  |  857 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. Introduction
  7.  
  8. This booklet was designed to aid developers and users in
  9. understanding the technical aspects of the .PCX file format and
  10. the use of FRIEZE.  Any comments, questions or suggestions about
  11. this booklet should be sent to:
  12.  
  13.  
  14.  
  15. ZSoft Corporation
  16.  
  17. Technical Services
  18.  
  19. ATTN: Code Librarian
  20.  
  21. 450 Franklin Rd. Suite 100
  22.  
  23. Marietta, GA  30067
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31. Technical Reference Manual information compiled by:
  32.  
  33. Dave Steier
  34.  
  35.  
  36.  
  37.  
  38.  
  39. Revision 4
  40.  
  41.  
  42.  
  43. To down load additional information and the source for a
  44. complete Turbo Pascal program to show .PCX files on a
  45. CGA/EGA/VGA graphics display, call our BBS at (404)427-1045. 
  46. You may use a 9600 baud Telebit modem or a 2400 baud standard
  47. modem.  Your modem should be set for 8 data bits, 1 stop bit,
  48. and NO parity.
  49.  
  50.  
  51.  
  52. Image  File (.PCX) Format
  53.  
  54.  
  55.  
  56. If you have technical questions on the format, please do not
  57. call technical support.  ZSoft provides this document as a
  58. courtesy to its users and developers.  It is not the function of
  59. Technical Support to provide programming assistance.  If
  60. something is not clear, leave a message on our BBS, Compuserve,
  61. or write us a letter at the above address.
  62.  
  63. The information in this section will be useful if you want to
  64. write a program to read or write PCX files (images).  If you
  65. want to write a special case program for one particular image
  66. format you should be able to produce something that runs twice
  67. as fast as "Load from..." in PC Paintbrush.  
  68.  
  69. Image files used by PC Paintbrush product family and FRIEZE
  70. (those with a .PCX extension) begin with a 128 byte header. 
  71. Usually you can ignore this header, since your images will
  72. probably all have the same resolution.  If you want to process
  73. different resolutions or colors, you will need to interpret the
  74. header correctly.  The remainder of the image file consists of
  75. encoded graphic data.  The encoding method is a simple byte
  76. oriented run-length technique.  We reserve the right to change
  77. this method to improve space efficiency.  When more than one
  78. color plane is stored in the file, each line of the image is
  79. stored by color plane (generally ordered red, green, blue,
  80. intensity), As shown below.
  81.  
  82. Scan line 0: RRR...(Plane 0)
  83.  
  84. GGG...(Plane 1)
  85.  
  86. BBB...(Plane 2)
  87.  
  88. III...(Plane 3)
  89.  
  90. Scan line 1: RRR...
  91.  
  92. GGG...
  93.  
  94. BBB...
  95.  
  96. III...(etc.)
  97.  
  98.  
  99.  
  100. The encoding method is:
  101.  
  102.     FOR  each  byte,  X,  read from the file
  103.  
  104.         IF the top two bits of X are  1's then
  105.  
  106.             count = 6 lowest bits of X
  107.  
  108.             data = next byte following X
  109.  
  110.         ELSE
  111.  
  112.             count = 1
  113.  
  114.             data = X
  115.  
  116. Since the overhead this technique requires is, on average,  25%
  117. of the non-repeating data and is at least offset whenever bytes
  118. are repeated, the file storage savings are usually considerable
  119.  
  120. ZSoft .PCX FILE HEADER FORMAT
  121.  
  122. Byte    Item    Size    Description/Comments
  123.  
  124. 0    Manufacturer    1    Constant Flag, 10 = ZSoft .pcx
  125.  
  126. 1    Version    1    Version information
  127.  
  128.             0 = Version 2.5 of PC Paintbrush
  129.  
  130.             2 = Version 2.8 w/palette information
  131.  
  132.             3 = Version 2.8 w/o palette information
  133.  
  134.             4 = PC Paintbrush for Windows(Plus for Windows uses Ver 5)
  135.  
  136.             5 = Version 3.0 and > of PC Paintbrush and PC Paintbrush +,
  137. includes Publisher's Paintbrush 
  138.  
  139. 2    Encoding    1    1 = .PCX run length encoding
  140.  
  141. 3    BitsPerPixel    1    Number of bits to represent a pixel (per
  142. Plane)- 1, 2, 4, or 8
  143.  
  144. 4    Window    8    Image Dimensions: Xmin,Ymin,Xmax,Ymax
  145.  
  146. 12    HDpi    2    Horizontal Resolution of image in DPI*
  147.  
  148. 14    VDpi    2    Vertical Resolution of image in DPI*
  149.  
  150. 16    Colormap    48     Color palette setting, see text
  151.  
  152. 64    Reserved    1    Should be set to 0.
  153.  
  154. 65    NPlanes    1    Number of color planes
  155.  
  156. 66    BytesPerLine    2    Number of bytes to allocate for a scanline
  157. plane.  MUST be an EVEN number.  Do NOT calculate from Xmax-Xmin.
  158.  
  159. 68    PaletteInfo    2    How to interpret palette- 1 = Color/BW, 2 =
  160. Grayscale (ignored in PB IV/ IV +)
  161.  
  162. 70    HscreenSize    2    Horizontal screen size in pixels.
  163.  
  164. New field found only in PB IV/IV Plus
  165.  
  166. 72    VscreenSize    2    Vertical screen size in pixels.
  167.  
  168. New field found only in PB IV/IV Plus
  169.  
  170. 74    Filler    54    Blank to fill out 128 byte header.  Set all bytes
  171. to 0
  172.  
  173. NOTES:
  174.  
  175. All sizes are measured in BYTES. 
  176.  
  177. All variables of SIZE 2 are integers.  
  178.  
  179. *HDpi and VDpi represent the Horizontal and Vertical resolutions
  180. which the image was created (either printer or scanner); i.e. an
  181. image which was scanned might have 300 and 300 in each of these
  182. fields.
  183.  
  184.  
  185.  
  186. Decoding .PCX Files
  187.  
  188. First, find the pixel dimensions of the image by calculating
  189. [XSIZE = Xmax - Xmin + 1] and [YSIZE = Ymax - Ymin + 1].  Then
  190. calculate how many bytes are required to hold one complete
  191. uncompressed scan line:
  192.  
  193. TotalBytes = NPlanes * BytesPerLine
  194.  
  195. Note that since there are always an even number of bytes per
  196. scan line, there will probably be unused data at the end of each
  197. scan line.  TotalBytes shows how much storage must be available
  198. to decode each scan line, including any blank area on the right
  199. side of the image.  You can now begin decoding the first scan
  200. line - read the first byte of data from the file.  If the top
  201. two bits are set, the remaining six bits in the byte show how
  202. many times to duplicate the next byte in the file.  If the top
  203. two bits are not set, the first byte is the data itself, with a
  204. count of one.
  205.  
  206. Continue decoding the rest of the line.  Keep a running subtotal
  207. of how many bytes are moved and duplicated into the output
  208. buffer.  When the subtotal equals TotalBytes, the scan line is
  209. complete.  There should always be a decoding break at the end of
  210. each scan line.  But there will not be a decoding break at the
  211. end of each plane within each scan line.  When the scan line is
  212. completed, there may be extra blank data at the end of each
  213. plane within the scan line.  Use the XSIZE and YSIZE values to
  214. find where the valid image data is.  If the data is multi-plane,
  215. BytesPerLine shows where each plane ends within the scan line.
  216.  
  217. Continue decoding the remainder of the scan lines (do not just
  218. read to end-of-file).  There may be additional data after the
  219. end of the image (palette, etc.)
  220.  
  221. Palette Information Description
  222.  
  223. EGA/VGA 16 Color Palette Information
  224.  
  225. The palette information is stored in one of two different
  226. formats.  In standard RGB format (IBM EGA, IBM VGA) the data is
  227. stored as 16 triples.  Each triple is a 3 byte quantity of Red,
  228. Green, Blue values.  The values can range from 0-255, so some
  229. interpretation may be necessary.  On an IBM EGA, for example,
  230. there are 4 possible levels of RGB for each color.  Since 256/4
  231. = 64, the following is a list of the settings and levels:
  232.  
  233. SettingLevel
  234.  
  235. 0-630
  236.  
  237. 64-1271
  238.  
  239. 128-1922
  240.  
  241. 193-2543
  242.  
  243.  
  244.  
  245. VGA 256 Color Palette Information
  246.  
  247. ZSoft has recently added the capability to store palettes
  248. containing more than 16 colors in the .PCX image file.  The 256
  249. color palette is formatted and treated the same as the 16 color
  250. palette, except that it is substantially longer.  The palette
  251. (number of colors x 3 bytes in length) is appended to the end of
  252. the .PCX file, and is preceded by a 12 decimal.  Since the VGA
  253. device expects a palette value to be 0-63 instead of 0-255, you
  254. need to divide the values read in the palette by 4.
  255.  
  256. To access a 256 color palette:
  257.  
  258. First, check the version number in the header; if it contains a
  259. 5 there is a palette.
  260.  
  261. Second, read to the end of the file and count back 769 bytes. 
  262. The value you find should be a 12 decimal, showing the presence
  263. of a 256 color palette.
  264.  
  265. CGA Color Palette Information
  266.  
  267. NOTE: This is no longer supported for PC Paintbrush IV/IV Plus.
  268.  
  269. For a standard IBM CGA board, the palette settings are a bit
  270. more complex.  Only the first byte of the triple is used.  The
  271. first triple has a valid first byte which represents the
  272. background color.  To find the background, take the (unsigned)
  273. byte value and divide by 16.  This will give a result between
  274. 0-15, hence the background color.  The second triple has a valid
  275. first byte, which represents the foreground palette.  PC
  276. Paintbrush supports 8 possible CGA palettes, so when the
  277. foreground setting is encoded between 0 and 255, there are 8
  278. ranges of numbers and the divisor is 32.
  279.  
  280. CGA Color Map
  281.  
  282. Header Byte #16 
  283.  
  284. Background color is determined in the upper four bits.
  285.  
  286. Header Byte #19
  287.  
  288. Only upper 3 bits are used, lower 5 bits are ignored.  The first
  289. three bits that are used are ordered C, P, I.  These bits are
  290. interpreted as follows:
  291.  
  292. c: color burst enable - 0 = color; 1 = monochrome
  293.  
  294. p: palette - 0 = yellow; 1 = white
  295.  
  296. i: intensity - 0 = dim; 1 = bright
  297.  
  298. PC Paintbrush Bitmap Character Format
  299.  
  300. NOTE: This format is for PC Paintbrush (up to Vers 3.7) and PC
  301. Paintbrush Plus (up to Vers 1.65)
  302.  
  303. The bitmap character fonts are stored in a particularly simple
  304. format.  The format of these characters is as follows:
  305.  
  306.  
  307.  
  308. Header
  309.  
  310. font widthbyte0xA0 + character width  (in pixels)
  311.  
  312. font heightbytecharacter height  (in pixels)
  313.  
  314. Character Width Table
  315.  
  316. char widths(256 bytes) each char's width + 1 pixel of kerning
  317.  
  318. Character Images
  319.  
  320. (remainder of the file)starts at char 0  (Null)
  321.  
  322. The characters are stored in ASCII order and as many as 256 may
  323. be provided.  Each character is left justified in the character
  324. block, all characters take up the same number of bytes.
  325.  
  326. Bytes are organized as N strings, where each string is one scan
  327. line of the character.
  328.  
  329. For example, each character in a 5x7 font requires 7 bytes.  A
  330. 9x14 font uses 28 bytes per character (stored two bytes per scan
  331. line in 14 sets of 2 byte packets).  Custom fonts may be any
  332. size up to the current maximum of 10K bytes allowed for a font
  333. file.  There is a maximum of 4 bytes per scan line.Sample "C"
  334. Routines
  335.  
  336. The following is a simple set of C subroutines to read data from
  337. a .PCX file.
  338.  
  339. /* This procedure reads one encoded block from the image file
  340. and stores a count and data byte.
  341.  
  342. Return result:  0 = valid data stored, EOF = out of data in file
  343. */
  344.  
  345. encget(pbyt, pcnt, fid)
  346.  
  347. int *pbyt;/* where to place data */
  348.  
  349. int *pcnt;/* where to place count */
  350.  
  351. FILE *fid;/* image file handle */
  352.  
  353. {
  354.  
  355. int i;
  356.  
  357. *pcnt = 1;/* assume a "run" length of one */
  358.  
  359. if (EOF == (i = getc(fid)))
  360.  
  361. return (EOF);
  362.  
  363. if (0xC0 == (0xC0 & i))
  364.  
  365. {
  366.  
  367. *pcnt = 0x3F & i;
  368.  
  369. if (EOF == (i = getc(fid)))
  370.  
  371. return (EOF);
  372.  
  373. }
  374.  
  375. *pbyt = i;
  376.  
  377. return (0);
  378.  
  379. }
  380.  
  381. /* Here's a program fragment using encget.  This reads an entire
  382. file and stores it in a (large) buffer, pointed to by the
  383. variable "bufr". "fp" is the file pointer for the image */
  384.  
  385. int i;
  386.  
  387. long l, lsize;
  388.  
  389. lsize = (long )hdr.BytesPerLine * hdr.Nplanes * (1 + hdr.Ymax
  390. hdr.Ymin);
  391.  
  392. for (l = 0; l < lsize; )             /* increment by cnt below */
  393.  
  394. {
  395.  
  396. if (EOF == encget(&chr, &cnt, fp))
  397.  
  398. break;
  399.  
  400. for (i = 0; i < cnt; i++)
  401.  
  402. *bufr++ = chr;
  403.  
  404. l += cnt;
  405.  
  406. }
  407.  
  408. The following is a set of C subroutines to write data to a .PCX
  409. file.
  410.  
  411. /* Subroutine for writing an encoded byte pair (or single byte
  412. if it doesn't encode) to a file.
  413.  
  414. It returns the count of bytes written, 0 if error */
  415.  
  416. encput(byt, cnt, fid)
  417.  
  418. unsigned char byt, cnt;
  419.  
  420. FILE *fid;
  421.  
  422. {
  423.  
  424.   if (cnt) {
  425.  
  426. if ((cnt == 1) && (0xC0 != (0xC0 & byt)))
  427.  
  428. {
  429.  
  430. if (EOF == putc((int )byt, fid))
  431.  
  432. return(0);     /* disk write error (probably full) */
  433.  
  434. return(1);
  435.  
  436. }
  437.  
  438. else
  439.  
  440. {
  441.  
  442. if (EOF == putc((int )0xC0 | cnt, fid))
  443.  
  444. return (0);      /* disk write error */
  445.  
  446. if (EOF == putc((int )byt, fid))
  447.  
  448. return (0);      /* disk write error */
  449.  
  450. return (2);
  451.  
  452. }
  453.  
  454. }
  455.  
  456.    return (0);
  457.  
  458. }/* This subroutine encodes one scanline and writes it to a file.
  459.  
  460. It returns number of bytes written into outBuff, 0 if failed. */
  461.  
  462. encLine(inBuff, inLen, fp)
  463.  
  464. unsigned char *inBuff;    /* pointer to scanline data */
  465.  
  466. int inLen;/* length of raw scanline in bytes */
  467.  
  468. FILE *fp;/* file to be written to */
  469.  
  470. {
  471.  
  472. unsigned char this, last;
  473.  
  474. int srcIndex, i;
  475.  
  476. register int total;
  477.  
  478. register unsigned char runCount;     /* max single runlength is
  479. 63 */
  480.  
  481.   total = 0;
  482.  
  483.   runCount = 1;
  484.  
  485.   last = *(inBuff);
  486.  
  487. /* Find the pixel dimensions of the image by calculating 
  488.  
  489. [XSIZE = Xmax - Xmin + 1] and [YSIZE = Ymax - Ymin + 1].  
  490.  
  491. Then calculate how many bytes are in a "run" */
  492.  
  493.   for (srcIndex = 1; srcIndex < inLen; srcIndex++)
  494.  
  495. {
  496.  
  497. this = *(++inBuff);
  498.  
  499. if (this == last)     /* There is a "run" in the data, encode it
  500. */
  501.  
  502. {
  503.  
  504. runCount++;
  505.  
  506. if (runCount == 63)
  507.  
  508. {
  509.  
  510. if (! (i = encput(last, runCount, fp)))
  511.  
  512. return (0);
  513.  
  514. total += i;
  515.  
  516. runCount = 0;
  517.  
  518. }
  519.  
  520. }
  521.  
  522. else/* No "run"  -  this != last */
  523.  
  524. {
  525.  
  526. if (runCount)
  527.  
  528. {
  529.  
  530. if (! (i = encput(last, runCount, fp)))
  531.  
  532. return(0);
  533.  
  534. total += i;
  535.  
  536. }
  537.  
  538. last = this;
  539.  
  540. runCount = 1;
  541.  
  542. }
  543.  
  544. }/* endloop */
  545.  
  546.   if (runCount)/* finish up */
  547.  
  548. {
  549.  
  550. if (! (i = encput(last, runCount, fp)))
  551.  
  552. return (0);
  553.  
  554. return (total + i);
  555.  
  556. }
  557.  
  558.   return (total);
  559.  
  560. }
  561.  
  562. FRIEZE Technical Information
  563.  
  564. General FRIEZE Information
  565.  
  566.  
  567.  
  568. FRIEZE is a memory-resident utility that allows you to capture
  569. and save graphic images from other programs.  You can then bring
  570. these images into PC Paintbrush for editing and enhancement.
  571.  
  572. FRIEZE 7.10 and later can be removed from memory (this can
  573. return you up to 90K of DOS RAM, depending on your
  574. configuration). To remove FRIEZE from memory, change directories
  575. to your paintbrush directory and type the word "FRIEZE".
  576.  
  577.  
  578.  
  579. 7.00 and Later FRIEZE
  580.  
  581. The FRIEZE command line format is:
  582.  
  583. FRIEZE {PD} {Xn[aarr]} {flags} {video} {hres} {vres} {vnum}
  584.  
  585. Where:
  586.  
  587. {PD}Printer driver filename (without the .PDV extension)
  588.  
  589. {Xn[aarr]}
  590.  
  591. X=S for Serial Printer, P for Parallel Printer, D for disk file.
  592.  
  593. (file is always named FRIEZE.PRN)
  594.  
  595. n = port number
  596.  
  597. aa = Two digit hex code for which return bits cause
  598.  
  599.  an abort (optional)
  600.  
  601. rr = Two digit hex code for which return bits cause
  602.  
  603. a retry (optional)
  604.  
  605. NOTE:  These codes represent return values from serial or
  606. parallel port  BIOS calls.  For values see and IBM BIOS
  607. reference (such as Ray Duncan's Advanced MS-DOS Programming).
  608.  
  609. {flags}Four digit hex code
  610.  
  611. First Digit controls Length Flag
  612.  
  613. Second Digit controls Width Flag
  614.  
  615. Third Digit controls Mode Flag
  616.  
  617. Fourth Digit controls BIOS Flag
  618.  
  619. 0 - None
  620.  
  621. 1 - Dual Monitor Present
  622.  
  623. 2 - Use internal (true) B/W palette for dithering
  624.  
  625. 2 color images
  626.  
  627. 4 - Capture palette along with screen IN VGA ONLY
  628.  
  629. Frieze 8.08 & up ONLY)
  630.  
  631. NOTE:The length, width and mode flags are printer driver
  632. specific.  See PRINTERS.DAT on disk 1 (or Setup Disk) for
  633. correct use.  In general width flag of 1 means wide carriage,
  634. and 0 means standard width.  Length flag of 0 and mode flag of 0
  635. means use default printer driver settings.
  636.  
  637. If you need to use more than one BIOS flag option, add the
  638. needed flag values and use the sum as the flag value.
  639.  
  640. {video} Video driver combination, where the leading digit
  641. signifies the high level
  642.  
  643. video driver and the rest signifies the low level video driver
  644.  
  645. Example = 1EGA - uses DRIVE1 and EGA.DEV
  646.  
  647. {hres}Horizontal resolution of the desired graphics mode
  648.  
  649. {vres}Vertical resolution of the desired graphics mode
  650.  
  651. {vnum}Hardware specific parameter (usually number of color
  652. planes)
  653.  
  654. Note: The last four parameters can be obtained from the
  655. CARDS.DAT file, in your PC Paintbrush product directory.
  656.  
  657.  
  658.  
  659. FRIEZE Function Calls
  660.  
  661. FRIEZE is operated using software interrupt number 10h (the
  662. video interrupt call).
  663.  
  664. To make a FRIEZE function call, load 75 (decimal) into the  AH
  665. register and the function number into the CL register, then
  666. either load AL with the function argument or load ES and BX with
  667. a segment and offset which point to the function argument. Do an
  668. int 10h. FRIEZE will return a result code number in AX.  All
  669. other registers are preserved.  In general, a result code of 0
  670. means success and other values indicate errors.  However,
  671. function 20 (get Frieze Version) behaves differently; see below.
  672.  
  673. No.Definition Arguments
  674.  
  675. 0Reserved
  676.  
  677. 1Load Window
  678.  
  679. ES:BX - string  (filename to read from)
  680.  
  681. 2Save Window
  682.  
  683. ES:BX - string  (filename to write to)
  684.  
  685. 3Reserved
  686.  
  687. 4Reserved
  688.  
  689. 6Reserved
  690.  
  691. 7Set Window Size
  692.  
  693. ES:BX - 4 element word vector of window settings:
  694.  
  695. Xmin, Ymin, Xmax, Ymax
  696.  
  697. 8Reserved
  698.  
  699. 9Set Patterns
  700.  
  701. ES:BX - 16 element vector of byte values containing the
  702.  
  703. screen-to-printer color correspondence
  704.  
  705. 10Get Patterns
  706.  
  707. ES:BX - room for 16 bytes as above
  708.  
  709. 11Set Mode
  710.  
  711. 12, 13, 14Reserved
  712.  
  713. 15Get Window
  714.  
  715. ES:BX - room for 4 words of the current window settings
  716.  
  717. 16 Set Print Options
  718.  
  719. ES:BX - character string of printer options.
  720.  
  721. Same format as for the FRIEZE command.
  722.  
  723. 17, 18, 19Reserved
  724.  
  725. 20Get FRIEZE Version.
  726.  
  727. AH gets the whole number portion and AL gets the decimal portion
  728. of
  729.  
  730. the version number.  (eg. for Freize vesion 7.41, AH will
  731. contain 7 and
  732.  
  733. AL will contain 41.  If AH =0, you are calling a pre-7.0 version
  734. of FRIEZE).
  735.  
  736. 21Set Parameters
  737.  
  738. ES:BX points to an 8 word table  (16 bytes) of parameter
  739. settings: 
  740.  
  741. TopMargin, LeftMargin, HSize,VSize, Quality/Draft Mode,
  742. PrintHres, 
  743.  
  744. PrintVres, Reserved.
  745.  
  746. Margins and sizes are specified in hundredths  of inches.
  747.  
  748. Q/D mode parameter values:
  749.  
  750. 0 - draft print mode
  751.  
  752. 1 - quality print mode
  753.  
  754. Print resolutions are specified in DPI.
  755.  
  756. Any parameter which should be left unchanged may be filled with
  757.  
  758. a (-1) (0FFFF hex).  The reserved settings should be filled with
  759. a (-1).
  760.  
  761. 22Get Parameters
  762.  
  763. ES:BX points to an 8 word table  (16 bytes) where parameter
  764. settings
  765.  
  766. are held.
  767.  
  768. 23Get Printer Res
  769.  
  770. ES:BX points to a 12 word table (24 bytes) that holds six printer
  771.  
  772. resolution pairs.
  773.  
  774. 24Reserved (versions 8.00 & up)
  775.  
  776.  
  777.  
  778. FRIEZE Error Codes
  779.  
  780. When FRIEZE is called using interrupt 10 hex, it will return an
  781. error code in the AX register.  A value of zero shows that there
  782. was no error.  A nonzero result means there was an error.  These
  783. error codes are explained below.
  784.  
  785. 0No Error
  786.  
  787. 1Printout was stopped by user with the ESC key
  788.  
  789. 2Reserved
  790.  
  791. 3File read error
  792.  
  793. 4File write error
  794.  
  795. 5File not found
  796.  
  797. 6Invalid Header - not an image, wrong screen mode
  798.  
  799. 7File close error
  800.  
  801. 8Disk error - usually drive door open
  802.  
  803. 9Printer error - printer is off or out of paper
  804.  
  805. 10Invalid command - CL was set to call a nonexistent  FRIEZE
  806. function
  807.  
  808. 11Can't create file - write protect tab or disk is full
  809.  
  810. 12Wrong video mode - FRIEZE cannot capture text screens.
  811.  
  812.  
  813.  
  814. Technical Reference Manual
  815.  
  816.  
  817.  
  818. Including information for:
  819.  
  820. Publisher's Paintbrushr
  821.  
  822. PC Paintbrush IVTM
  823.  
  824. PC Paintbrush IV PlusTM
  825.  
  826. PC Paintbrush PlusTM
  827.  
  828. PC Paintbrushr
  829.  
  830. FRIEZETM Graphics
  831.  
  832. PaintbrushTM
  833.  
  834. Revision 4
  835.  
  836.  
  837.  
  838. ZSoft Corporation
  839.  
  840. 450 Franklin Rd. Suite 100
  841.  
  842. Marietta, GA  30067
  843.  
  844. (404) 428-0008
  845.  
  846. (404) 427-1150 Fax
  847.  
  848. (404) 427-1045 BBS
  849.  
  850.  
  851.  
  852. Copyright c 1985, 1987, 1988, 1990, ZSoft Corporation   All
  853. Rights Reserved
  854.  
  855.  
  856.  
  857.