ddoc Print and Preview Revision History

   Version 1.9e, Oct. 7, 2003

   Copyright 1995-2003,
   Don Dickinson,
   All rights reserved.

   IMPORTANT NOTE ABOUT v1.9d and v1.9e
It is my intent for this to be the last of the 1.x
versions of ddoc. i will continue to support it for
at least a year after i release ddoc v2.0. v2.0 will
be very compatible with this version (though the dll name,
exe name and a few call names may change). I will also
release bug fixes if there are significant bugs reported.

   About this document
This document contains 3 things ...
1. An idea of the features I want to add to the
   next releases.
2. A list of known issues to be resolved in future
3. A history of revisions made to ddoc

   Planned for future release
The items below are an example of what MAY appear in
ddoc in the future. I am open to input from YOU about
what features YOU would like to see. Please don't take
the list below as a promise of any kind. These are things
that I am considering ...

>> A Grabber hand that allows moving the page around.
>> Printing bitmaps from hDC or resource file.
>> New command to allow positioning of the window in
   a position other than maximized.
>> XML data format instead of proprietary binary.
>> "Hot Link" spots on the screen that can ....
      1. Link to another page in the report
      2. Shell out to another application
>> ENCRYPTION of all text in document against the given
>> RLE COMPRESSION of embedded bitmaps.
>> TABLES for easy data output
   dpSetTableSpecs iTable, iColumn, iAlign, zFont, etc.
   Basically, you define what your table's columns are
   going to look like and assign that definition an
   ID code. For example, you can tell the computer
   that Table1, Column1 is right-justified at 2" over,
   the heading is printed in bold, the regular text is
   printed italic, etc. Then define the rest of the
   columns. Once your table is defined, you need only
   call dpColumnText and reference the table, column,
   and how far down on the page to print - the engine
   will take care of the X coordinate, alignment,
   and font specs. OR, you can call dpRowText and pass
   it a delimited string containing ALL of the text for
   all columns in the current row. For example,
   dpRowText iTable, sngCurrentYPosition, "~", "First~Last~Phone"
   This feature will enable ddoc to read a special ascii
   format of it's file. You will also be able to specify
   a file to be used as a "template" for every page.
   This will act as a macro - inserting items out of an
   ascii file directly into ddoc. For example, if you
   always put your company's name at the bottom of the page,
   you can create an ascii file of commands, like below ...

   _DEFINE_MACRO SetFontBold
   _FONT BOLD 10,RED,Times New Roman
   _DO_MACRO SetFontBold
   _TEXT 7,10.5,RIGHT:My Company Name
   This is a paragraph

   Save this 9 line file as mytemp.txt
   Now call dpInsertTemplate "mytemp.txt" and ddoc
   will open the file and insert your company name
   in the requested font right into your document.
>> HTML support
   I will begin by adding basic HTML tag handling such as
   <P>,<B>,<I>, etc. and add functionality. The beta
   of this call works sort of like dpWrapText does; formatting
   paragraphs of html code instead of normal text.
   Eventually I would like to support tables. I will
   probably never support the .gif graphics nor
   will I support internet communications (hyperlinks)
   or frames. I am considering including the <A> tag
   to define hot-spots that link to other pages
   in the document.
>> INSERT a page. It may be helpful for the programmer
   to be able to start a new page, but put it in a
   different spot in the document. For example, I have
   a piece of software that generates letters reminding
   people that they have an invoice due. It would be
   nice to start the document with a summary sheet.
   Unfortunately, I don't know the summary information
   until after the letters have been generated. Instead
   of leaving the summary at the end, it might be nice
   to have a dpMovePage call that allows me to move, say,
   the 9th page to the 1st, etc.
>> RTF/ASCII/WORD file conversion. Ascii might be able
   to dump out dpTabText only to a csv file (kind of
   data export).
>> Ability to embed bitmaps from a bitmap handle
   or resource file.

   Known Issues
>> ddoc does supports only using True Type fonts. Don't
   use bitmap fonts like MS Sans Serif, etc or you may
   have problems zooming in on pages. This is not a bug,
   I just plain don't support anything other than True Type
   nor will I likely build in support for anything else.
>> ddoc can cause the PB-CC version 2 Debugger to hang
   on the dpEndDoc call. I haven't figured out if
   this is caused by a bug in PB-CC's debugger or
   ddoc - it is a very difficult thing to track down,
   but I am working on it.
>> If you have a full-screen console or dos app running
   and you alt-tab or alt-enter out of it, the
   viewer doesn't redraw itself. You need to minimize
   and then restore the viewer to correct this.
>> Sometimes the mouse cursor will remain an hourglass even
   though it should be an arrow. This is not a bug in
   ddoc, but a problem with certain video cards when
   running with hardware acceleration. Mine that does this
   is an ATI Xpert - 8mb pci. I have to set this video card
   to have only one "notch" of acceleration to correct
   the problem.

   Version 1.9e      Released Update             10-7-2003
   dpRoundRect function added. It allows drawing a
   rectangle with rounded corners.
   dpEndDocInst has a wrong heading in the function
   The installer now asks if you want to overwrite
   the ddoc.exe and ddoc32.dll in the windows system
>> BUG
   The bookmark text (if changed from the default) did
   not appear correctly on self-extracting documents.
>> BUG
   1.9d enabled hot keys. But, I was not checking to see
   if the button for the hot key was enabled when the
   hot key was pressed. This meant that the Ctrl-E,
   Ctrl-S, and Ctrl-F (email, save, and fax) keys worked
   even if those buttons were not turned on. This has
   been fixed.
>> BUG
   Fixed problem with programmer defined screen text
   that wasn't accurately displayed in a self-extracting
>> BUG
   Fixed an smtp email mime encoding bug by replacing
   the mime encoder with newer code from pb's web site.
>> BUG
   Fixed emailto field problem in smtp emails
>> BUG
   Fixed date formatting problem with smtp emails.
   The bookmark dropdown list now displays the item
   corresponding to the current page instead of defaulting
   to the first item in the list.

   Version 1.9d      Released update              9-8-2003
   Special thanks to ddoc user Michael Mattias for
   reporting a bunch of the documentation bugs below.
   Also thanks to others (you know who you are) for
   misc documentation fixes. More thanks to Joseph Knight
   for help trouble-shooting the dpWrapText problem.
   Numerous small documentation errors.
   The definition of dpGetFileName was missing. It has
   been added.
>> BUG
   Memory leak with dpWrapText where a font handle was
   not being properly freed. This lead to some strange
   problems with certain printer drivers if you do a
   lot of dpWrapText calls.
   dpWrapText is about a billion times faster now
   (really, a billion).
>> BUG
   dpTextWidth may not have always returned the correct
   width (depending on font usage). This has been fixed.
   I have brought back the warning message box that
   tells you if a default printer is not installed on
   the machine. ddoc requires the default printer for
   all text wrap and width features.
   changed the version so that it reflects the minor
   version ... e.g. 1,9,4,0 instead of 1,9,0,0
   in both ddoc32.dll and ddoc.exe
   dpEndDocInst returns the process id as returned
   by the last shell command in dpEndDoc. It must be
   called directly after dpEndDoc. If you have a
   multi-threaded application you should enclose your
   dpEndDoc and dpEndDocInst inside a critical section
   or mutex so the pid returned is accurate. since ddoc
   uses the pb shell function to execute ddoc.exe, the
   return value of this function is that of the shell
   function (see pb documentation for more information).
   PgDown moves to the next page
   PgUp moves to the previous page
   Ctrl-p prints the document
   End moves to the last page
   Home moves to the first page
   Ctrl-q exits
   Ctrl-e emails
   Ctrl-f faxes
   Ctrl-g displays the go to page box
   ddoc now has jpg support. it requires you distribute
   a new file (ddoc_jpg.dll) with your app. ddoc.exe
   doesn't need this file, but ddoc32.dll needs it
   only if you add a jpg to the file. only the
   dpAddGraphic/dpDrawGraphic command supports jpgs.
   dpEmbedGraphic and dpGraphic do not. Note that
   this dll was written by me in delphi 6. source
   code is available upon request, but not included
   with the distribution.
>> BUG
   if you issued the dpChangeWords command with
   %DDOC_WORD_DOCINDEX, it was effectively ignored.
   This behavior has been fixed.

   Version 1.9c      Released Update             2-14-2002
   dpAttachExt allows you to change the file
   extension for ddoc email attachments. This is useful
   because .exe files are often blocked. You can
   change the extension to .ex_ for example.
   dpSetScreenOptions has been added to allow the
   programmer to specify a starting position
   (non-maximized) for the preview screen.
   Support for emf (enhanced metafiles) has been added
   to the dpGraphic, dpAddGraphic, dpDrawGraphic, and
   dpEmbedGraphic commands.
>> C/C++ is now supported. A file called ddoc32.c can
   be included in MS VC and C++ Builder projects to add
   ddoc support. No samples are available yet. Please
   see the C notes section of the documentation.
   dpSpecialText allows the programmer to print text
   that is has tokens replaced before display. These
   tokens are currently: ##pageno##, ##pagecount##.
>> BUG
   ddoc was not deleting temp files (when DDOC_END_DELETE
   was specified). It is now.
>> BUG
   dpWrapText would incorrectly wrap text when passed
   a buffer pointer that was greater than 32767 bytes.
   It can now handled a buffer containing 2gb of data.

   Version 1.9b      Maintenance upgrade        11-13-2002
   Fixed various documentation typo's.
   If a printer has a duplexer installed and the duplexer
   is an option in the printer setup, the printer always
   printed ddoc documents duplexed.
   %PD_HIDEPRINTTOFILE constant was specified in the print
   dialog. This caused the Print To File selection to be
   hidden. I have removed this flag so the option will
   show up.
   Fixed a bug in the smapiSendMail function that caused
   attachments to be incorrectly enumerated.
   Wrapped text should be rtrimmed, not trimmed. Because
   I was trimming you could not indent fixed width fonts
   with spaces. This has been changed.

   Version 1.9a      Released Update             9-20-2002
   Version 1.9 had a bug that caused ddoc to delete a file
   that it opened if that file was of an invalid format.
   This has been fixed.

   Version 1.9       Released Update             9-10-2002
   dpPageOffset has been added. This command allows you
   to adjust the internal page numbering (dpPageNo)
   by specifying the page number of the first page.
   This allows, for example, you to start the document at
   page #50 by calling:
    dpPageOffset hPrev, 49
   Values less than 1 are ignored.
   A new version of ddocml.ini is included. Thanks to
   Tom Dandrea for contributing this.
   dpPaperSize can be used to specify a custom paper size.
   In order for this to work, %DDOC_PAPER_CUSTOM must
   be passed in the dpStartDoc or dpNextpage call. If
   this constant is not specified in the iPaper parameter
   of these calls, then dpPaperSize will be ignored.
   Maximum paper size is 22" by 22".
   dpFont section was in there two times. No longer.
   dpWrapContinue was not hyperlinked and had an
   improper title in the documentation. Fixed.
   Various spelling errors corrected.
   Version 1.8x of the source code was hard to compile
   because I was including stock (odler) versions of the
   api includes. ddoc now has its own version of the
   winapi files.
   If you are using dpSetPassword, be sure to read this.
   A password protected document will no longer prompt
   for a password if it is coming directly from a
   call to dpEndDoc. Only documnts that are saved and
   opened up *later* will prompt for a password. Documents
   that are emailed will prompt for a password if one is
   set.If this causes a problem for anyone let me know.
   I had requests for this and it makes sense to me.
   ddoc32.dll and ddoc.exe now include versioning information
   in an embedded resource file. Thanks to Michael Mattias
   for his help with this.
   On some machines, the "CreateCompatibleBitmap" call
   used to make and off-screen drawing surface will
   fail. This seems to be caused when the user is set
   to 24 or 32 bit video and the video driver is
   "flakey". Sometimes updating the video driver fixes
   the problem, sometimes not. The workaround is to create
   a black and white off-screen bitmap. This is compatible
   with all drawing surfaces and can display everything
   black and white when the CreateCompatibleBitmap
   call fails. If you see a screen in black and white and
   it should have color, then try decreasing the video
   depth to 16-bit color. This should fix the problem.
   In the past that black and white screen would have been
   just white (blank), now at least something will print
   albeit only in black.
   ddoc was inadvertantly writing to "e:\ddoc.log" during
   certain operations. While harmless, this has been
   removed. This was occurring in 1.8b thru 1.8d and was
   a side-effect of debugging the network printer
   enumeration problem.

   Version 1.8d      Maintenance upgrade         6-30-2002
   Memory leak fixed in print routine. The saved devmode
   structure was never being freed.
   There was a bug in dpNextLabel that changed the page
   size back to letter size after the first page. I fixed
   this. In the process I added the %DDOC_SAME_AS_FIRST
   constant (= -2) that can be used in dpNextPage
   in any of the bin, paper size, or orientation fields
   that tells the engine the next page should be the
   same as the first page. Note that if you're printing
   labels, all internal dpNextPage calls by the label
   engine will set the page size, orientation, and bin
   to be the same as the first page.
   Added critical sections to improve multi-threaded
   handling within ddoc32.dll

   Version 1.8c      Maintenance upgrade         3.27.2002
   In some operating systems the zoom on right click
   was not working. The zoom was always 100% unless
   you clicked on the zoom level in the combo box.
   This has been fixed in ddoc.exe

   Version 1.8b      Maintenance upgrade        12.27.2001
   Under some o/s's ddoc's dpGetPrinter did not return
   networked printers - just local ones. This should
   be fixed.
   When using ddoc from CGI, the user the web server runs
   as may not have a default printer defined. ddoc needed
   to have a default printer defined in order to print
   correctly and to wrap text. I removed this requirement.
   In the event a default printer is not defined, ddoc
   will choose the first available printer and use that
   for it's information context. If no printers are
   defined ddoc will still fail.
   ddoc32.dll used to shell to the ddoc.exe file in
   curdir$. Now it shells to the ddoc.exe in the
   the directory that holds the program calling
   the dll. This means that for sure, every time, etc
   you distribute ddoc, you should put it in your
   program's directory (both ddoc32.dll and ddoc.exe)
   This was never a public update. I sent it to people
   needed the fixes.

   Version 1.8a      Released Update            10.31.2001
   I compiled with a bad version of RAS32.INC that ended
   up making ddoc 1.8 dependent on RAS being installed.
   This dependency has been removed.

   Version 1.8       Released Update            10.12.2001
   Copies issue on print dialog - previous versions
   didn't correctly interpret the user indicated number
   of copies to print.
   The automatic calling of dpNextPage withing label
   printing functions was not correctly restoring
   the paper size. It will now be assumed
   that the paper size specified in dpStartDoc
   (or over-ridden by the user in the dialog) will
   be used to initialize each automatic dpNewPage
   call within the label engine. This means that
   it will not be possible to print the first page
   in a different paper size, bin, or orientation
   than the labels. Internally, it is setting the
   paper, orientation, and bin to %DDOC_SYSTEM_DEFAULT
   (see below).
   Old versions of ddoc did not correctly initialize the
   print common dialog with orientation/bin/papersize
   information. It printed the way the programmer
   specified, but didn't reflect this in the common dlg.
   It shows these parameters correctly now.
   In the past ddoc would force the printer to print with
   the programmer's selected orienation and bin. Now
   ddoc introduces a new constant that may be passed
   in the iPaper, iOrientation, and iBin parameters
   of dpStartDoc and dpNewPage. It is %DDOC_SYSTEM_DEFAULT.
   If this parameter is passed, then the page will
   use the paper/orientation/bin selected by the user
   in the print dialog. If you print without a dialog,
   the system will use the default printer setup.
   The programmer can still specify the page size,
   orientation, and bin for any page s/he wishes. But,
   any page with the %DDOC_SYSTEM_DEFAULT parameter
   will print in the paper/orientation/bin of
   whatever was in the print dialog.
   dpSpecifyPrinter now documented correctly.
   Constant ommission %DDOC_END_SPECIFY_PRINTER = 64
   was omitted from header files. Now it's there.
   dpSpecifyPrinter was incorrectly declared as a Sub
   instead of a function in previous versions.
   dpPrinterCopies command tells ddoc to print the
   specified number of copies automatically
   *if* dpSpecifyPrinter is called or
   DDOC_END_PRINT_NODIALOG is included in dpEndDoc.
   dpDuplex command allows the printer forces the printer
   to duplex. The user cannot override this behavior
   manually, whatever is selected by the programmer is
   what happens. This works just like the paper
   orientation - it is enforced by ddoc when printing.
   The printer must have a duplex tray installed and
   configured in order for this to work. This should be
   considered beta as well as I have only been able
   to test it on a Laserjet 4000ne.
   dpFontSpacing command allows programmer to control
   how much space is between each letter.
   dpWrapContinue command implemented to allow
   easier use of paragraph printing. Call this
   after dpWrapText until it returns False. It buffers
   the text to print internally for you.
   dpEllipse - allows printing of circles and ellipses.
   dpArc - allows printing of an arc
   dpPie - allows printing of a slice of an ellipse

   Version 1.7a      Maintenance upgrade         3.20.2001
>> Incorrect source distributed with ddoc v1.7 Now the
   correct source code is bundled.
>> Switched from using an old version of Wise install
   to using INNO Setup.
>> dpGetMinor/MajorVersion did not report the correct
   ddoc version information.

   Version 1.7       Released Upgrade            1.25.2001
>> New sets of calls to enumerate available printers, and
   select a printer for output (if just printing)
>> Improved palette support so that graphics with multiple
   colors print and display better than before.
>> The new dpStretchMode call alls you to specify that
   graphic calls stretch the bitmaps to fit the rectangle
   specified instead of being shrunk proportionally to fit
   the rectangle.

   Version 1.6a      Maintenance upgrade            9.2.99
>> ddoc.exe became dependent upon RAS being installed
   (the file ras32api.dll, specifically). This was not
   intentional - it was a side effect of my including
   some ras dialer calls in the SMTP code added with
   version 1.6. I have now changed ddoc so that it
   dynamically loads ras32api.dll - no run-time error
   will occur if RAS isn't installed.

   Version 1.6       Released Upgrade               8.5.99
>> New bitmap commands - dpAddGraphic/dpDrawGraphic allow
   you to add a bitmap to a ddoc file once and print
   it as many times as you wish, on as many different
   pages as you wish.
>> New constant for the Style parameter of dpFont allows
   the programmer to specify that text drawn following
   this call will be vertical aligned with respect to the
   text's baseline instead of the upper left corner of
   the string. This, in conjunction with dpTextWidth will
   allow the programmer to mix fonts on a single line. You
   can calculate where text that printed left off and start
   printing in a new font with the assurance that the two
   lines of text share the same baseline. The constant is
>> SMTP email is now available as a replacement for
   MAPI. Turn it on in the Options parameter of dpStartDoc
   with the new DDOC_ALLOWSMTP flag. Note: you can't enable
   both MAPI and SMTP - just pick one. The smtp email
   functions are actually part of ddoc32.dll. ddoc.exe calls
   the email functions in ddoc32.dll. This means that
   when you distribute ddoc, you MUST distribute the 32-bit
   dll if you want SMTP support even if you are only using
   a 16-bit programming language. The first time your user
   tries to email a document, a "setup" screen will prompt
   them for their email server, port, and reply address.
   This information is then stored in the registry for
   future reference. They can go back and change this
   information by clicking the "setup" button on the
   email dialog screen. The ddoc file or .exe file will
   be attached to the email as a MIME encoded file. Also,
   the setup screen lets the user configure a RAS dialer
   to dial up their favorite internet connection if they're
   not already connected. It will disconnect when done. Please
   note that I consider this function BETA because I'm the
   only one that's tested it. If you have any problems
   please contact me right away. Thanks!
>> dpTextWidth command returns the width of text in the
   documents unit of measure (either inches or cm). Note
   that use of this function requires that you have a
   printer installed on your system. If there is no
   default printer, an IC can't be created. The IC is used
   to determine the width of the text. Also note that
   because of the resolution differences between output
   devices, the actual width on the screen and on a printer
   other than the default might vary. When you request
   the width of text, I have to return the width with
   respect to something - I choose the default printer
   hoping for the best results.
>> The Copies selection the print dialog was being ignored.
   This is now fixed.
>> dpTabText didn't work properly when DDOC_CM was choosen
   instead of DDOC_INCH. The text used to be chopped off.
   This has been fixed.
>> Fonts now properly default to 10 Point, Arial, Black
   at the beginning of each new page.
>> dpClipText (and dpTabText if the W parameter was
   specified) didn't take the printer's margin into
   account when printing. This caused text printed
   with these commands to shift down and to the right on
   the page. This has been corrected.

   Version 1.5       Released Upgrade               5.7.99
>> dpSetTabs - sets position and alignment of
   tab stops.
   dpTabText - prints columns text delimited by
   the tab character (ascii 9). Respects alignment
   and positions set by dpSetTabs.
>> dpClipText didn't always clip correctly. This has
   been fixed.

   Version 1.4a      Maintenance Upgrade           2.25.99
>> Fixed problem with using CM as the unit of measure.

   Version 1.4       Released Upgrade               1.4.99
>> ddoc used to be limited to 4000 pages. It is now limited
   only by the memory on your computer (actually limited by
   the size of a long integer - 2 billion + pages).
>> If you run ddoc.exe without a command line parameter, it now
   prompts you for a .ddc file to open. If you select a valid
   file, it will be displayed in a viewer screen.
>> Changed dpText and dpAngleText to _not_ trim off
   spaces from text passed to them. Before if you passed,
   "   Text" or "Text" to either, they would print the
   same. Now "    Text" prints over farther on the
   screen. Feature added for those that print with
   a mono-spaced font (courier, etc).
>> Fixed bug in the mailing label engine that caused
   the first label of the second page to be lost.
>> New option for 32-bit dll users only - DDOC_VIEWBUILD option
   can be passed (bit-wise) in the iOptions parameter or
   dpStartDoc. This tells ddoc to display the preview screen
   while the preview document is still being built. Instead
   of the user having to wait for dpEndDoc to start seeing
   their document on the screen, each page can be viewed
   immediately after it is built.
>> dpClipText routine allows user to specify the maximum
   width a line of text can take up. Allows the programmer
   to tell ddoc to "Print this line of text, but cut
   off everything that's wider than X inches."
>> MAPI FAX integration - "MS At Work Fax" that comes with Windows 9x.
   Specify a list of recipients. Fax with or without a send
   dialog box. THIS FEATURE is considered BETA - your input will
   be greatly valued. See dpSetFaxOptions command.
>> ENHANCED EMAIL capabilities.
   Specify a list of recipients. EMail with or without a send
   dialog box. THIS FEATURE is considered BETA - your input will
   be greatly valued. See dpSetEMailOptions Command.
>> New dpEndDoc parameters ...
   And additional functions to specify recipients of
   fax or email ...
   dpSetMailOptions, dpSetFaxOptions
   Currently there are only two:
      /P          Prints with dialog
      /PA         Prints to default printer without dialog
   I am adding the following:
      /F          Faxes
      /E          Emails
   Whether the dialog is displayed for each of these depends
   on how or if the user called dpSetMailOptions or dpSetFaxOptions
>> Changed the way the viewer uses memory bitmaps to
   decrease the amount of memory needed by the viewer.
>> Added the %DDOC_SCALETEXT and %DDOC_FASTTEXT options
   to the dpStartDoc call (iOptions bitwise parameter).
   These effect the way that ddoc zooms in and out.
   %DDOC_FASTTEXT is the default.
   %DDOC_FASTTEXT means that all text is rendered no
   matter what the zoom scale is. This means that
   text widths can be distorted at some zoom levels
   because of restrictions in screen resolution. This
   leads to faster zooming, but widths of text can
   be inconsistent.
   %DDOC_SCALETEXT means that text is StretchBlted at
   zoom levels < 100%. This means that text widths will
   be accurate at all zoom levels, but the quality of
   the text will go down and the zooming happens slower.
   ** I only recommend using %DDOC_SCALETEXT if you have
      lots of wrapped text or grids on the screen that
      will look funny if the default is used.
>> Save feature built-in. This allows the user to
   save a self-extracting version of the document by
   clicking the Save button - IF the save button
   has been turned on in the iOptions parameter
   of dpStartDoc. Also, you may save out .ddc files
   that are the documents without self-extracting
   code. These documents may be called up by
   passing their name to ddoc on the command line.
>> ddoc automatically registers the extension .ddc
   in the registry if it's not already there. If it's
   already there and used by another program, please
   let me know as I don't want to conflict with other
   programs. If you want to know if the .ddc extension
   is registered, run ddoc with the command line
   /SHOWREG. If another program has the .ddc extension
   registered and you want to overwrite it so it
   references ddoc, pass ddoc.exe the command line
   /INSTALL and it will register the .ddc extension,
   and /INSTALLVERBOSE will register the .ddc extension and
   display a message box telling the success of the call.

   Version 1.3a      Released Upgrade             10.23.98
>> Fixed problem that prevented two viewers to be able
   to be displayed from the same program at the same
   time under certain conditions.

   Version 1.3       Released Upgrade              10.7.98
>> MAPI Email capability is now built in. (see dpStartDoc
   Options% parameter)
>> dpEmbedGraphic Function allows embedded graphics. You
   should use this instead of dpGraphic if you have the
   MAPI Email turned on or you're not deleting the
   temp files when done (saving to call up later)
>> Fixed possible Printer Driver GPF because of
   insufficent DEVMODE structure space.
>> Changed the algorithm for zooming out less than 100%
   This means a little slower, but more accurate
   depiction of font widths when zooming out. Zooming
   in 100% and greater is un-changed.

   Version 1.2       Maintenance Upgrade           9.17.98
>> Support for user defined tool tips and menu text.
   Specifically added for international users. See then
   dpChangeWords call.
>> Self-extracting version of ddoc.
   This feature will allow the programmer to create a
   document embedded in a viewer. The viewer will add
   about 80K to the document. This file can be sent
   to and viewed by someone who doesn't have ddoc.

   Version 1.1       Initial Release               6.20.98
>> Password protection for the documents.
>> Added icon to viewer exe.
>> Sample files done for all supported languages.
   Testing of samples complete.
>> Installation program complete and tested.
>> PB/CC console compiler demo complete.

   Beta 2                                           6.1.98
>> Stack problem with pbdll 16-bit identified
   If you are developing with a 16-bit version
   of pbdll, you MUST use the $STACK metastatement
   to increase the stack size. I suggest putting
   it up near the maximum ($STACK 32000). The
   default stack size is only 2K. If you don't
   increase the stack size, the dpWrapText call
   will GPF with a stack fault.
>> Header files complete for vb 3,4,5,6, delphi 1,2,3,
   pbcc, pbdll 1,2,5
>> Documentation complete.

   Beta 1                                           5.1.98
>> VB3 Sample GPF fixed.
>> Header files for vb and delphi are complete.
>> Text wrapping and mailing label features added

   Alpha 1                                          4.1.98
>> 32-bit and 16-bit dll's working with VB3 and 5
>> Basic text and graphic functions working