home *** CD-ROM | disk | FTP | other *** search
/ ftp.pasteur.org/FAQ/ / ftp-pasteur-org-FAQ.zip / FAQ / C++-faq / turbovision / tvplus / part1 next >
Encoding:
Internet Message Format  |  1995-08-15  |  72.3 KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!newsfeed.internetmci.com!usenet.eel.ufl.edu!news.gmi.edu!zombie.ncsc.mil!simtel!harbinger.cc.monash.edu.au!yarrina.connect.com.au!warrane.connect.com.au!godzilla.zeta.org.au!not-for-mail
  2. From: grove@zeta.org.au (Rachel Polanskis)
  3. Newsgroups: comp.os.msdos.programmer.turbovision,comp.answers,news.answers
  4. Subject: C++ Turbo Vision FAQ, part1/3
  5. Followup-To: poster
  6. Date: 15 Aug 1995 01:11:09 +1000
  7. Organization: Kralizec Dialup Unix Sydney, +61-2-837-1183 V.32bis
  8. Lines: 2036
  9. Approved: news-answers-request@mit.edu
  10. Message-ID: <40np2d$jmq@godzilla.zeta.org.au>
  11. NNTP-Posting-Host: localhost.zeta.org.au
  12. Summary: This article is a compilation of information on the use of, 
  13.      and resources for, Turbo Vision for C++ (Borland's application 
  14.      framework).
  15. Xref: senator-bedfellow.mit.edu comp.os.msdos.programmer.turbovision:5084 comp.answers:13670 news.answers:50722
  16.  
  17. Archive-name: C++-faq/turbovision/tvplus/part1
  18. Posting-Frequency: monthly
  19. Last-modified: 1995/08/14
  20. Version: 1.8
  21. URL: http://www.zeta.org.au/~grove/tvhome.html
  22.  
  23.  
  24.  
  25.  
  26.                WELCOME TO TVPLUS
  27.  
  28.    ======================================================================
  29.    Copyright Robert Hazeltine and Rachel Polanskis 1995
  30.    ======================================================================
  31.  
  32.  
  33.    TVPlus is the C++ Turbo Vision FAQ.
  34.  
  35.    The FAQ is divided into the following headings:
  36.  
  37.        Ralp Nader takes an interest in Win95
  38.        The Guide
  39.        The Epilogue
  40.  
  41.    =======================================================================
  42.                  THE NEWS
  43.    =======================================================================
  44.  
  45.    This heading outlines the changes made since 1995.07.13.
  46.  
  47.    1.  The TVPlus home page was amended to include an item of general 
  48.    import that Ralph Nader has put Win95 under scrutiny (see Appendix A). 
  49.  
  50.    2.  Under the heading, TVPlus ftp site, it was noted that 
  51.    Eric Woodruff has supplied a replacement for the message 
  52.    input box (MIBX20.ZIP), new module for colour syntax highlighting 
  53.    (CSH100.ZIP) and a new version of TV Virtual Memory Editor 
  54.    (TVME30.ZIP).
  55.    
  56.    3.  The URL for the Verona University, Italy has been 
  57.    included in the list of general sites of interest to TV programmers.
  58.  
  59.    =======================================================================
  60.                   THE GUIDE
  61.    =======================================================================
  62.  
  63.    About TVPlus
  64.    About Turbo Vision
  65.    Books and journals
  66.    Software resources
  67.    The discussion list
  68.    UseNet newsgroups
  69.    Handy FTP sites
  70.    Web pages to peruse
  71.    Selected answers on programming
  72.    Applications written with Turbo Vision
  73.    Acknowledgements
  74.  
  75.  
  76.    ----------------------------------------------------------------------
  77.               About TVPlus
  78.    ----------------------------------------------------------------------
  79.  
  80.    Objectives
  81.    Wanted!
  82.    Availability of TVPlus
  83.    Style conventions
  84.    Maintainers of TVPlus
  85.    Distribution rights
  86.  
  87.  
  88.    ----------------------------------------------------------------------
  89.    OBJECTIVES
  90.    ----------------------------------------------------------------------
  91.  
  92.    The object of TVPlus is to provide an answer book on Turbo Vision and to
  93.    make access to it by its users as easy as possible.
  94.  
  95.    The emphasis during the early development is to identify various
  96.    resources that can be commonly used in the development of TV programmes.
  97.    Consolidating various references on the Internet into one document is
  98.    the basic requirement, we believe, to finding what you need to use the
  99.    TV library to full advantage - and to cut the time necessary to become
  100.    productive.
  101.  
  102.    From this basis, we can manage the development of the FAQ more orderly
  103.    while, at the same time, answering perhaps the most frequently asked of
  104.    questions: "Where is ... ?" or "Where can I get ... ?"
  105.  
  106.    There has, however, been several aspects to this early emphasis. First,
  107.    to find the resources that directly affect the use of the TV framework
  108.    such as patches, extensions to the TV classes and the like. Secondly,
  109.    keeping the context in which TV was developed and is used to the fore -
  110.    thus providing leads to relevant resources such as compiler patches,
  111.    porting to other platforms and the like. Thirdly, a little self
  112.    indulgence in identifying and promoting applications based on Turbo
  113.    Vision.
  114.  
  115.    ----------------------------------------------------------------------
  116.    INFORMATION WANTED
  117.    ----------------------------------------------------------------------
  118.  
  119.    Have you information you think others might be interested in?
  120.  
  121.  
  122.    CONTRIBUTIONS
  123.  
  124.    If you have the basis of a contribution that others might find
  125.    interesting, please polish it up for TVPlus.
  126.  
  127.    There is plenty of scope for useful articles in the pages of TVPlus,
  128.    especially the sections that make up the chapter on Selected answers on
  129.    programming or the chapter about Dead Parrots.
  130.  
  131.    Contributors can submit their material to us via
  132.  
  133.        email at <mailto:grove@zeta.org.au>; or
  134.        anonymous ftp at <ftp://ftp.zeta.org.au/home/grove/incoming>.
  135.  
  136.  
  137.    MIRROR SITES
  138.  
  139.    TVPlus would like to establish mirror sites in the other parts of the
  140.    world, especially in the US and Europe. By doing so we expect that
  141.    response times for international users will be radically improved. Use
  142.    of mirror sites will also help to eliminate the bandwidth hit on
  143.    zeta.org.au's relatively narrow network link.
  144.  
  145.    Please contact us, the co-maintainers of TVPlus, for more information
  146.    about becoming a mirror site for TVPlus.
  147.  
  148.    APPLICATIONS
  149.  
  150.    You can use TVPlus to publicise any software you may have written
  151.    using Turbo Vision C++. An outline is presented in the chapter
  152.    'Applications written with Turbo Vision' to help you prepare
  153.    information about your application.
  154.  
  155.    ABOUT TVPLUS ITSELF
  156.  
  157.    We appreciate feedback on anything that you consider relevant -
  158.    performance, arrangement, layout, ease of comprehension, etc.
  159.  
  160.    Anyone interested in lending a hand with these tasks?
  161.  
  162.  
  163.    -----------------------------------------------------------------------
  164.    AVAILABILITY
  165.    -----------------------------------------------------------------------
  166.  
  167.    Notifications about TVPlus are posted periodically on the Turbo Vision
  168.    discussion list.
  169.  
  170.    THE TEXT/PLAIN FORMAT OF TVPLUS
  171.  
  172.    The ASCII format of TVPlus is posted each calendar month to
  173.    <mailto:turbvis@vtvm1.cc.vt.edu> and to *.answers with changes (if any)
  174.    since being posted the previous month.
  175.  
  176.    Since TVPlus has been approved by the *.answers moderators, a copy of
  177.    this FAQ may be downloaded from ftp://rtfm.mit.edu/pub/usenet or from
  178.    our TVPlus ftp site.
  179.  
  180.    THE TEXT/HTML FORMAT OF TVPLUS
  181.  
  182.    Available on the World Wide Web at
  183.  
  184.            <http://www.zeta.org.au/~grove/tvhome.html>,
  185.  
  186.    the Web format of TVPlus has advantages over its ASCII counterpart
  187.    because of its
  188.  
  189.    1.  currency (material is added as the opportunity arises);
  190.    2.  primacy (the ASCII version is derived from this one); and
  191.    3.  flexibility (the links with other documents on line).
  192.  
  193.    If you want to download a copy of the Web version of TVPlus, you may do
  194.    so by using our TVPlus ftp site.
  195.  
  196.    TVPlus offline
  197.  
  198.    The downloaded Web files have the extension of *.htm and can be viewed
  199.    using any WWW browser offline. We recommend DOSLYNX for this purpose.
  200.  
  201.    DOSLYNX, which is available through ARCHIE under the the file name of
  202.    DLX0_8A.EXE, is a creation of the University of Kansas. Enquiries
  203.    regarding DOSLYNX should be sent there.
  204.  
  205.    To set up DOSLYNX for offline browsing use the command line options:
  206.    DOSLYNX /nno You can configure tvhome.htm to be the home page.
  207.  
  208.    You should be able to view the downloaded ASCII version with any text
  209.    editor as each file making up the FAQ is less than 64k.
  210.  
  211.    TVPlus mirrored privately
  212.  
  213.    Some people may prefer to access the FAQ from a local directory or from
  214.    their shell account rather than accessing zeta.org.au directly. External
  215.    links are operative whether access is from zeta or from a local
  216.    directory where you have downloaded the FAQ - provided that you are
  217.    connected to the Internet in the first place.
  218.  
  219.    If you want to use TVPlus from your local host, remember to keep your
  220.    copy up to date or you will miss links to new files or you will be
  221.    unaware that our files have been updated.
  222.  
  223.    So, offline or online you can use TVPlus loaded to your local directory.
  224.  
  225.    Most browers will allow you access to the source document which will
  226.    provide quite specific URLs needed for ftpm or navigating the TVPlus'
  227.    ftp site. They also provide bookmarks which can be used to advantage.
  228.  
  229.  
  230.    ----------------------------------------------------------------------
  231.    STYLE CONVENTIONS
  232.    ----------------------------------------------------------------------
  233.  
  234.    This chapter outlines the style conventions used in TVPlus.
  235.  
  236.    Countries
  237.        ISO 3166-1981 Codes for the representation of names of countries:
  238.        any country name abbreviation will the same as the country
  239.        identification in a domain name - for example, zeta.org.au
  240.  
  241.    Currencies
  242.        ISO 4217-1978 Codes for the representation of currencies and
  243.        funds.
  244.  
  245.    Dates and time
  246.        ISO 2014-1976 Writing of calendar dates in all-numeric form:
  247.        dates are, therefore, expressed as, say, 2001.01.01 avoiding
  248.        ambiguity as to which country convention has been used.
  249.  
  250.    General
  251.        To minimise waiting time while data transfers, file sizes are, in
  252.        the main, < 4K and graphics use is minimal.
  253.  
  254.    HTML protocol
  255.        ISO 8879-1986 "Information Processing Text and Office Systems;
  256.        Standard Generalised Markup Language (SGML)"; HTML 2.0 is an
  257.        expression of this standard.
  258.  
  259.    Uniform Resource Locator (URL)
  260.        RFC1738 "Uniform Resource Locators": URLs used to access resources
  261.        on the Internet are cited, with or without delimiters, as
  262.        <scheme://host:port/url-path> where scheme is one of file, http,
  263.        news, gopher, telnet or wais and where the colon followed by the
  264.        TCP port number is optional; the syntatic wrapper, URL: is not
  265.        generally prefixed to a URL in this document.
  266.  
  267.  
  268.    -----------------------------------------------------------------------
  269.    MAINTAINERS OF TVPLUS
  270.    -----------------------------------------------------------------------
  271.  
  272.    TVPlus is maintained by Robert Hazeltine and Rachel Polanskis from
  273.    Sydney, Australia through our computer host, Zeta Microcomputer
  274.    Software. This FAQ has no connection with Borland and they, in turn, do
  275.    not contribute to the support of this service.
  276.  
  277.  
  278.    -----------------------------------------------------------------------
  279.    DISTRIBUTION RIGHTS
  280.    -----------------------------------------------------------------------
  281.  
  282.    This FAQ may be posted to any USENET newsgroup, on-line service,
  283.    or BBS as long as it is posted in its entirety and includes the
  284.    copyright statement.
  285.  
  286.    This FAQ may not be distributed for financial gain.
  287.  
  288.    This FAQ may not be included in commercial collections or
  289.    compilations without express permission from the authors.  No such
  290.    permission has yet been given.
  291.  
  292.  
  293.    -----------------------------------------------------------------------
  294.               About Turbo Vision
  295.    -----------------------------------------------------------------------
  296.  
  297.    What is TV
  298.    TV history
  299.    TV as DLL
  300.    TV bugs
  301.    TV mixed and matched
  302.    TV ports
  303.    TV and MS-Windows
  304.    Learning TV
  305.  
  306.    -----------------------------------------------------------------------
  307.    WHAT IS TV
  308.    -----------------------------------------------------------------------
  309.  
  310.    Turbo Vision is a C++ library that provides an application framework.
  311.    It is a product of Borland International, Inc.
  312.  
  313.    -----------------------------------------------------------------------
  314.    TV HISTORY
  315.    -----------------------------------------------------------------------
  316.  
  317.    There are [three] versions of Turbo Vision:
  318.  
  319.    TV1.0
  320.      This version of the application frameworks came with BC++ 3.0;
  321.  
  322.    TV1.03
  323.      This version cam with BC++ 3.1:
  324.      .  its TV.H containing a #define _TV_VERSION which is not
  325.         present in the earlier version; and
  326.  
  327.    TV2.0
  328.      This is part of the Power Pack for DOS designed for use with BC
  329.      4.x:
  330.      .  it may be used with the 16 and 32 bit DOS DPMI extenders;
  331.      .  it includes TInputLine validators such as TFilterValidator,
  332.         TRangeValidator, TStringLookupValidator and TPXPictureValidator;
  333.      .  there is a new TMultiCheckBoxes object that is like the regular
  334.         TCheckBoxes object but each check box can have multiple values;
  335.         and
  336.      .  a new TOutline class has been added for outline views (for
  337.         example a directory tree) with expandable and collapsible nodes.
  338.  
  339.    -----------------------------------------------------------------------
  340.    TV as DLL
  341.    -----------------------------------------------------------------------
  342.  
  343.    Part 1: The original proposal on making TV as DLL
  344.    Part 2: Additional material on making TV as DLL
  345.    Part 3: Additional comment on making TV as DLL
  346.  
  347.    -----------------------------------------------------------------------
  348. From: grove@zeta.org.au (Rachel Polanskis)
  349. Newsgroups: comp.os.msdos.programmer.turbovision,comp.answers,news.answers
  350. Subject: C++ Turbo Vision FAQ, part1/3
  351. Followup-To: poster
  352. Approved: news-answers-request@mit.edu 
  353. Summary: This article is a compilation of information on the use of, 
  354.      and resources for, Turbo Vision for C++ (Borland's application 
  355.      framework).
  356.  
  357. Archive-name: C++-faq/turbovision/tvplus/part1
  358. Posting-Frequency: monthly
  359. Last-modified: 1995/08/14
  360. Version: 1.8
  361. URL: http://www.zeta.org.au/~grove/tvhome.html
  362.  
  363.  
  364.  
  365.  
  366.                WELCOME TO TVPLUS
  367.  
  368.    ======================================================================
  369.    Copyright Robert Hazeltine and Rachel Polanskis 1995
  370.    ======================================================================
  371.  
  372.  
  373.    TVPlus is the C++ Turbo Vision FAQ.
  374.  
  375.    The FAQ is divided into the following headings:
  376.  
  377.        Ralp Nader takes an interest in Win95
  378.        The Guide
  379.        The Epilogue
  380.  
  381.    =======================================================================
  382.                  THE NEWS
  383.    =======================================================================
  384.  
  385.    This heading outlines the changes made since 1995.07.13.
  386.  
  387.    1.  The TVPlus home page was amended to include an item of general 
  388.    import that Ralph Nader has put Win95 under scrutiny (see Appendix A). 
  389.  
  390.    2.  Under the heading, TVPlus ftp site, it was noted that 
  391.    Eric Woodruff has supplied a replacement for the message 
  392.    input box (MIBX20.ZIP), new module for colour syntax highlighting 
  393.    (CSH100.ZIP) and a new version of TV Virtual Memory Editor 
  394.    (TVME30.ZIP).
  395.    
  396.    3.  The URL for the Verona University, Italy has been 
  397.    included in the list of general sites of interest to TV programmers.
  398.  
  399.    =======================================================================
  400.                   THE GUIDE
  401.    =======================================================================
  402.  
  403.    About TVPlus
  404.    About Turbo Vision
  405.    Books and journals
  406.    Software resources
  407.    The discussion list
  408.    UseNet newsgroups
  409.    Handy FTP sites
  410.    Web pages to peruse
  411.    Selected answers on programming
  412.    Applications written with Turbo Vision
  413.    Acknowledgements
  414.  
  415.  
  416.    ----------------------------------------------------------------------
  417.               About TVPlus
  418.    ----------------------------------------------------------------------
  419.  
  420.    Objectives
  421.    Wanted!
  422.    Availability of TVPlus
  423.    Style conventions
  424.    Maintainers of TVPlus
  425.    Distribution rights
  426.  
  427.  
  428.    ----------------------------------------------------------------------
  429.    OBJECTIVES
  430.    ----------------------------------------------------------------------
  431.  
  432.    The object of TVPlus is to provide an answer book on Turbo Vision and to
  433.    make access to it by its users as easy as possible.
  434.  
  435.    The emphasis during the early development is to identify various
  436.    resources that can be commonly used in the development of TV programmes.
  437.    Consolidating various references on the Internet into one document is
  438.    the basic requirement, we believe, to finding what you need to use the
  439.    TV library to full advantage - and to cut the time necessary to become
  440.    productive.
  441.  
  442.    From this basis, we can manage the development of the FAQ more orderly
  443.    while, at the same time, answering perhaps the most frequently asked of
  444.    questions: "Where is ... ?" or "Where can I get ... ?"
  445.  
  446.    There has, however, been several aspects to this early emphasis. First,
  447.    to find the resources that directly affect the use of the TV framework
  448.    such as patches, extensions to the TV classes and the like. Secondly,
  449.    keeping the context in which TV was developed and is used to the fore -
  450.    thus providing leads to relevant resources such as compiler patches,
  451.    porting to other platforms and the like. Thirdly, a little self
  452.    indulgence in identifying and promoting applications based on Turbo
  453.    Vision.
  454.  
  455.    ----------------------------------------------------------------------
  456.    INFORMATION WANTED
  457.    ----------------------------------------------------------------------
  458.  
  459.    Have you information you think others might be interested in?
  460.  
  461.  
  462.    CONTRIBUTIONS
  463.  
  464.    If you have the basis of a contribution that others might find
  465.    interesting, please polish it up for TVPlus.
  466.  
  467.    There is plenty of scope for useful articles in the pages of TVPlus,
  468.    especially the sections that make up the chapter on Selected answers on
  469.    programming or the chapter about Dead Parrots.
  470.  
  471.    Contributors can submit their material to us via
  472.  
  473.        email at <mailto:grove@zeta.org.au>; or
  474.        anonymous ftp at <ftp://ftp.zeta.org.au/home/grove/incoming>.
  475.  
  476.  
  477.    MIRROR SITES
  478.  
  479.    TVPlus would like to establish mirror sites in the other parts of the
  480.    world, especially in the US and Europe. By doing so we expect that
  481.    response times for international users will be radically improved. Use
  482.    of mirror sites will also help to eliminate the bandwidth hit on
  483.    zeta.org.au's relatively narrow network link.
  484.  
  485.    Please contact us, the co-maintainers of TVPlus, for more information
  486.    about becoming a mirror site for TVPlus.
  487.  
  488.    APPLICATIONS
  489.  
  490.    You can use TVPlus to publicise any software you may have written
  491.    using Turbo Vision C++. An outline is presented in the chapter
  492.    'Applications written with Turbo Vision' to help you prepare
  493.    information about your application.
  494.  
  495.    ABOUT TVPLUS ITSELF
  496.  
  497.    We appreciate feedback on anything that you consider relevant -
  498.    performance, arrangement, layout, ease of comprehension, etc.
  499.  
  500.    Anyone interested in lending a hand with these tasks?
  501.  
  502.  
  503.    -----------------------------------------------------------------------
  504.    AVAILABILITY
  505.    -----------------------------------------------------------------------
  506.  
  507.    Notifications about TVPlus are posted periodically on the Turbo Vision
  508.    discussion list.
  509.  
  510.    THE TEXT/PLAIN FORMAT OF TVPLUS
  511.  
  512.    The ASCII format of TVPlus is posted each calendar month to
  513.    <mailto:turbvis@vtvm1.cc.vt.edu> and to *.answers with changes (if any)
  514.    since being posted the previous month.
  515.  
  516.    Since TVPlus has been approved by the *.answers moderators, a copy of
  517.    this FAQ may be downloaded from ftp://rtfm.mit.edu/pub/usenet or from
  518.    our TVPlus ftp site.
  519.  
  520.    THE TEXT/HTML FORMAT OF TVPLUS
  521.  
  522.    Available on the World Wide Web at
  523.  
  524.            <http://www.zeta.org.au/~grove/tvhome.html>,
  525.  
  526.    the Web format of TVPlus has advantages over its ASCII counterpart
  527.    because of its
  528.  
  529.    1.  currency (material is added as the opportunity arises);
  530.    2.  primacy (the ASCII version is derived from this one); and
  531.    3.  flexibility (the links with other documents on line).
  532.  
  533.    If you want to download a copy of the Web version of TVPlus, you may do
  534.    so by using our TVPlus ftp site.
  535.  
  536.    TVPlus offline
  537.  
  538.    The downloaded Web files have the extension of *.htm and can be viewed
  539.    using any WWW browser offline. We recommend DOSLYNX for this purpose.
  540.  
  541.    DOSLYNX, which is available through ARCHIE under the the file name of
  542.    DLX0_8A.EXE, is a creation of the University of Kansas. Enquiries
  543.    regarding DOSLYNX should be sent there.
  544.  
  545.    To set up DOSLYNX for offline browsing use the command line options:
  546.    DOSLYNX /nno You can configure tvhome.htm to be the home page.
  547.  
  548.    You should be able to view the downloaded ASCII version with any text
  549.    editor as each file making up the FAQ is less than 64k.
  550.  
  551.    TVPlus mirrored privately
  552.  
  553.    Some people may prefer to access the FAQ from a local directory or from
  554.    their shell account rather than accessing zeta.org.au directly. External
  555.    links are operative whether access is from zeta or from a local
  556.    directory where you have downloaded the FAQ - provided that you are
  557.    connected to the Internet in the first place.
  558.  
  559.    If you want to use TVPlus from your local host, remember to keep your
  560.    copy up to date or you will miss links to new files or you will be
  561.    unaware that our files have been updated.
  562.  
  563.    So, offline or online you can use TVPlus loaded to your local directory.
  564.  
  565.    Most browers will allow you access to the source document which will
  566.    provide quite specific URLs needed for ftpm or navigating the TVPlus'
  567.    ftp site. They also provide bookmarks which can be used to advantage.
  568.  
  569.  
  570.    ----------------------------------------------------------------------
  571.    STYLE CONVENTIONS
  572.    ----------------------------------------------------------------------
  573.  
  574.    This chapter outlines the style conventions used in TVPlus.
  575.  
  576.    Countries
  577.        ISO 3166-1981 Codes for the representation of names of countries:
  578.        any country name abbreviation will the same as the country
  579.        identification in a domain name - for example, zeta.org.au
  580.  
  581.    Currencies
  582.        ISO 4217-1978 Codes for the representation of currencies and
  583.        funds.
  584.  
  585.    Dates and time
  586.        ISO 2014-1976 Writing of calendar dates in all-numeric form:
  587.        dates are, therefore, expressed as, say, 2001.01.01 avoiding
  588.        ambiguity as to which country convention has been used.
  589.  
  590.    General
  591.        To minimise waiting time while data transfers, file sizes are, in
  592.        the main, < 4K and graphics use is minimal.
  593.  
  594.    HTML protocol
  595.        ISO 8879-1986 "Information Processing Text and Office Systems;
  596.        Standard Generalised Markup Language (SGML)"; HTML 2.0 is an
  597.        expression of this standard.
  598.  
  599.    Uniform Resource Locator (URL)
  600.        RFC1738 "Uniform Resource Locators": URLs used to access resources
  601.        on the Internet are cited, with or without delimiters, as
  602.        <scheme://host:port/url-path> where scheme is one of file, http,
  603.        news, gopher, telnet or wais and where the colon followed by the
  604.        TCP port number is optional; the syntatic wrapper, URL: is not
  605.        generally prefixed to a URL in this document.
  606.  
  607.  
  608.    -----------------------------------------------------------------------
  609.    MAINTAINERS OF TVPLUS
  610.    -----------------------------------------------------------------------
  611.  
  612.    TVPlus is maintained by Robert Hazeltine and Rachel Polanskis from
  613.    Sydney, Australia through our computer host, Zeta Microcomputer
  614.    Software. This FAQ has no connection with Borland and they, in turn, do
  615.    not contribute to the support of this service.
  616.  
  617.  
  618.    -----------------------------------------------------------------------
  619.    DISTRIBUTION RIGHTS
  620.    -----------------------------------------------------------------------
  621.  
  622.    This FAQ may be posted to any USENET newsgroup, on-line service,
  623.    or BBS as long as it is posted in its entirety and includes the
  624.    copyright statement.
  625.  
  626.    This FAQ may not be distributed for financial gain.
  627.  
  628.    This FAQ may not be included in commercial collections or
  629.    compilations without express permission from the authors.  No such
  630.    permission has yet been given.
  631.  
  632.  
  633.    -----------------------------------------------------------------------
  634.               About Turbo Vision
  635.    -----------------------------------------------------------------------
  636.  
  637.    What is TV
  638.    TV history
  639.    TV as DLL
  640.    TV bugs
  641.    TV mixed and matched
  642.    TV ports
  643.    TV and MS-Windows
  644.    Learning TV
  645.  
  646.    -----------------------------------------------------------------------
  647.    WHAT IS TV
  648.    -----------------------------------------------------------------------
  649.  
  650.    Turbo Vision is a C++ library that provides an application framework.
  651.    It is a product of Borland International, Inc.
  652.  
  653.    -----------------------------------------------------------------------
  654.    TV HISTORY
  655.    -----------------------------------------------------------------------
  656.  
  657.    There are [three] versions of Turbo Vision:
  658.  
  659.    TV1.0
  660.      This version of the application frameworks came with BC++ 3.0;
  661.  
  662.    TV1.03
  663.      This version cam with BC++ 3.1:
  664.      .  its TV.H containing a #define _TV_VERSION which is not
  665.         present in the earlier version; and
  666.  
  667.    TV2.0
  668.      This is part of the Power Pack for DOS designed for use with BC
  669.      4.x:
  670.      .  it may be used with the 16 and 32 bit DOS DPMI extenders;
  671.      .  it includes TInputLine validators such as TFilterValidator,
  672.         TRangeValidator, TStringLookupValidator and TPXPictureValidator;
  673.      .  there is a new TMultiCheckBoxes object that is like the regular
  674.         TCheckBoxes object but each check box can have multiple values;
  675.         and
  676.      .  a new TOutline class has been added for outline views (for
  677.         example a directory tree) with expandable and collapsible nodes.
  678.  
  679.    -----------------------------------------------------------------------
  680.    TV as DLL
  681.    -----------------------------------------------------------------------
  682.  
  683.    Part 1: The original proposal on making TV as DLL
  684.    Part 2: Additional material on making TV as DLL
  685.    Part 3: Additional comment on making TV as DLL
  686.  
  687.    -----------------------------------------------------------------------
  688.  
  689.    TV AS DLL - PART 1
  690.  
  691.    Introduction
  692.    Header File Changes
  693.    Source File Changes
  694.    Building the DLL
  695.    Using the DLL
  696.    Problems with the Borland RTL DLL
  697.    Feedback
  698.  
  699.    -----------------------------------------------------------------------
  700.  
  701.    Contents
  702.  
  703.    This section shows how to convert TV 2.0 to a 32 bit DLL for use with BC
  704.    4.02 and the Power Pack. The information was provided by the author,
  705.    Eddie Stassen.
  706.  
  707.    Introduction
  708.  
  709.    This section lists the changes required to compile TV2.0 as a 32bit DLL.
  710.    Please note that the DLL has not been tested extensively and, as I am no
  711.    expert on DLL's, some changes may well be superfluous and there may be
  712.    some omissions.
  713.  
  714.    I also do not make use of streamable objects in my applications, so my
  715.    knowledge is a bit shaky there and I cannot say whether the streaming
  716.    stuff will work (although the standard TVDEMO program does manage to
  717.    save and retrieve the desktop). The bottom line here is that it works
  718.    for me at this stage and I have gone through enough rebuilding cycles to
  719.    last me quite a while.
  720.  
  721.    The changes are in essence very simple but, as they involve virtually
  722.    every header file and a large number of the source files, I am not going
  723.    to give a file by file description here - just general instructions on
  724.    what to change.
  725.  
  726.    In order to keep the files compatible with the static libraries, use is
  727.    made of macros and compile time definitions. When compiling the DLL you
  728.    should define MAKEDLL. When compiling an application to use the DLL,
  729.    define USEDLL. If neither of these macros are defined, the header files
  730.    should look identical to the original ones.
  731.  
  732.    Note that section 3.2.3 describes an omission in the source code that I
  733.    discovered while making the changes. The DLL will not compile without
  734.    it.
  735.  
  736.    -----------------------------------------------------------------------
  737.  
  738.    Header file Changes
  739.  
  740.    2.1 Start with TV.H and add the following lines at the beginning of the
  741.    file (around line 16):
  742.  
  743.    #if defined(MAKEDLL)
  744.      #define _EXPTVCLASS __export
  745.      #define _EXPTVFUNC __export
  746.      #define _EXPTVDATA __export
  747.    #elif defined(USEDLL)
  748.      #define _EXPTVCLASS __import
  749.      #define _EXPTVFUNC __import
  750.      #define _EXPTVDATA __import
  751.    #else
  752.      #define _EXPTVCLASS
  753.      #define _EXPTVFUNC
  754.      #define _EXPTVDATA
  755.    #endif
  756.  
  757.    A few lines down, change the lines:
  758.  
  759.    #if defined( _RTLDLL )
  760.    #error TV must use the RTL in static form only
  761.    #endif
  762.  
  763.    to:
  764.  
  765.    #if !defined( MAKEDLL ) && !defined( USEDLL)
  766.    #if defined( _RTLDLL )
  767.    #error TV must use the RTL in static form only
  768.    #endif
  769.    #endif
  770.  
  771.    2.2 Now the major work starts: In all the TV header files change ALL the
  772.    class declarations from "class Txxxx" to "class _EXPTVCLASS Txxx" e.g.
  773.    the first few lines in APP.H:
  774.  
  775.    class _FAR TRect;
  776.  
  777.    class TBackground : public TView {
  778.  
  779.    will change to:
  780.  
  781.    class _EXPTVCLASS _FAR TRect;
  782.  
  783.    class _EXPTVCLASS TBackground : public TView {
  784.  
  785.    etc.
  786.  
  787.    2.3 Add the _EXPTVFUNC macro to all the global function declarations,
  788.    e.g. in COLORSEL.H line 37 change:
  789.  
  790.    TColorItem& operator + ( TColorItem& i1, TColorItem& i2 );
  791.  
  792.    to:
  793.  
  794.    TColorItem& _EXPTVFUNC operator + ( TColorItem& i1, TColorItem& i2 );
  795.  
  796.    Inline functions defined in the header files do not have to be changed.
  797.    Here is a list of the files and functions that need to be changed:
  798.  
  799.    File :  COLORSEL.H
  800.  
  801.    TColorItem& _EXPTVFUNC operator + ( TColorItem& i1, TColorItem& i2 );
  802.    TColorGroup& _EXPTVFUNC operator + ( TColorGroup& g, TColorItem& i );
  803.    TColorGroup& _EXPTVFUNC operator + ( TColorGroup& g1, TColorGroup& g2 );
  804.  
  805.    File :  MENUS.H
  806.  
  807.    TSubMenu& _EXPTVFUNC operator + ( TSubMenu& s, TMenuItem& i );
  808.    TSubMenu& _EXPTVFUNC operator + ( TSubMenu& s1, TSubMenu& s2 );
  809.    TStatusDef& _EXPTVFUNC operator + ( TStatusDef& s1, TStatusItem& s2 );
  810.    TStatusDef& _EXPTVFUNC operator + ( TStatusDef& s1, TStatusDef& s2 );
  811.  
  812.    File :  MSGBOX.H
  813.  
  814.    ushort _EXPTVFUNC messageBox( const char *msg, ushort aOptions );
  815.    ushort _EXPTVFUNC messageBox( unsigned aOptions, const char *msg, ... );
  816.    ushort _EXPTVFUNC messageBoxRect( const TRect &r, const char *msg, ushort
  817.      aOptions );
  818.    ushort _EXPTVFUNC messageBoxRect( const TRect &r, ushort aOptions, const
  819.      char *msg, ... );
  820.    ushort _EXPTVFUNC inputBox( const char *Title, const char *aLabel, char *s,
  821.      uchar limit );
  822.    ushort _EXPTVFUNC inputBoxRect( const TRect &bounds, const char *title,
  823.  
  824.    File :  UTIL.H
  825.  
  826.    void _EXPTVFUNC fexpand( char * );
  827.    char _EXPTVFUNC hotKey( const char *s );
  828.    ushort _EXPTVFUNC ctrlToArrow( ushort );
  829.    char _EXPTVFUNC getAltChar( ushort keyCode );
  830.    ushort _EXPTVFUNC getAltCode( char ch );
  831.    char _EXPTVFUNC getCtrlChar(ushort);
  832.    ushort _EXPTVFUNC getCtrlCode(uchar);
  833.    ushort _EXPTVFUNC historyCount( uchar id );
  834.    const char * _EXPTVFUNC historyStr( uchar id, int index );
  835.    void _EXPTVFUNC historyAdd( uchar id, const char * );
  836.    int _EXPTVFUNC cstrlen( const char * );
  837.    void * _EXPTVFUNC message( TView *receiver, ushort what, ushort command, void
  838.      *infoPtr );
  839.    Boolean _EXPTVFUNC lowMemory();
  840.    char * _EXPTVFUNC newStr( const char * );
  841.    Boolean _EXPTVFUNC driveValid( char drive );
  842.    Boolean _EXPTVFUNC isDir( const char *str );
  843.    Boolean _EXPTVFUNC pathValid( const char *path );
  844.    Boolean _EXPTVFUNC validFileName( const char *fileName );
  845.    void _EXPTVFUNC getCurDir( char *dir );
  846.    Boolean _EXPTVFUNC isWild( const char *f );
  847.  
  848.    2.4 Here come the shaky bits
  849.  
  850.    File : TOBJSTRM.H
  851.  
  852.    Change line 31:
  853.  
  854.    #ifdef __DLL__
  855.  
  856.    to:
  857.  
  858.    #if defined(__DLL__) && !defined (__FLAT__)
  859.  
  860.    Note: The above change is not entirely correct, but it works. I do not
  861.    quite know why that #ifdef is there anyway.
  862.  
  863.    The __link() macro in line 51 was changed to:
  864.  
  865.    #define __link( s )             \
  866.    extern _EXPTVDATA TStreamableClass s;    \
  867.    static fLink force ## s =     \
  868.      { (fLink _NEAR *)&force ## s, (TStreamableClass _NEAR *)&s };
  869.  
  870.    I am not too sure about the above change and I suspect one might need a
  871.    separate macro for your own classes.
  872.  
  873.    That concludes the changes to the header files.
  874.  
  875.    -----------------------------------------------------------------------
  876.  
  877.    Source file changes
  878.  
  879.    ASM Files
  880.  
  881.    Unfortunately the assembler files need to be rebuilt to make the
  882.    functions exportable (although I suspect you could bypass this with an
  883.    appropriate DEF file). In my case I changed all the PUBLIC declarations
  884.    to PUBLICDLL and re-assembled.
  885.  
  886.    CPP Files
  887.  
  888.    3.2.1 Add the _EXPTVFUNC macro to all the global non-member function
  889.    definitions. The affected files are:
  890.  
  891.    File :  COLORSEL.CPP
  892.  
  893.    TColorItem& _EXPTVFUNC operator + ( TColorItem& i1, TColorItem& i2 )
  894.    TColorGroup& _EXPTVFUNC operator + ( TColorGroup& g, TColorItem& i )
  895.    TColorGroup& _EXPTVFUNC operator + ( TColorGroup& g1, TColorGroup& g2 )
  896.  
  897.    File :  MENU.CPP
  898.  
  899.    TSubMenu& _EXPTVFUNC operator + ( TSubMenu& s, TMenuItem& i )
  900.    TSubMenu& _EXPTVFUNC operator + ( TSubMenu& s1, TSubMenu& s2 )
  901.    TStatusDef& _EXPTVFUNC operator + ( TStatusDef& s1, TStatusItem& s2 )
  902.    TStatusDef& _EXPTVFUNC operator + ( TStatusDef& s1, TStatusDef& s2 )
  903.  
  904.    File :  MISC.CPP
  905.  
  906.    void *_EXPTVFUNC message( TView *receiver, ushort what, ushort command,
  907.       void *infoPtr)
  908.    Boolean _EXPTVFUNC lowMemory()
  909.  
  910.    File :  NEW.CPP
  911.  
  912.    void * _EXPTVFUNC operator new[] ( size_t sz )
  913.    void * _EXPTVFUNC operator new ( size_t sz )
  914.    void _EXPTVFUNC operator delete ( void *blk )
  915.    void _EXPTVFUNC operator delete[] ( void *blk )
  916.  
  917.    File :  NEWSTR.CPP
  918.  
  919.    char *_EXPTVFUNC newStr( const char *s )
  920.  
  921.    File :  TCMDSET.CPP
  922.  
  923.    TCommandSet _EXPTVFUNC operator & ( const TCommandSet& tc1, const
  924.        TCommandSet& tc2 )
  925.    TCommandSet _EXPTVFUNC operator | ( const TCommandSet& tc1, const
  926.        TCommandSet& tc2 )
  927.    int _EXPTVFUNC operator == ( const TCommandSet& tc1, const
  928.        TCommandSet& tc2 )
  929.  
  930.    File :  TOBJSTRM.CPP
  931.  
  932.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, char &ch )
  933.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, signed char &ch )
  934.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, unsigned char &ch )
  935.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, signed short &sh )
  936.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, unsigned short &sh )
  937.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, signed int &i )
  938.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, unsigned int &i )
  939.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, signed long &l )
  940.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, unsigned long &l )
  941.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, float &f )
  942.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, double &d )
  943.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, long double &ld )
  944.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, TStreamable& t )
  945.    ipstream& _EXPTVFUNC operator >> ( ipstream& ps, void *&t )
  946.    opstream& _EXPTVFUNC operator << ( opstream& ps, char ch )
  947.    opstream& _EXPTVFUNC operator << ( opstream& ps, signed char ch )
  948.    opstream& _EXPTVFUNC operator << ( opstream& ps, unsigned char ch )
  949.    opstream& _EXPTVFUNC operator << ( opstream& ps, signed short sh )
  950.    opstream& _EXPTVFUNC operator << ( opstream& ps, unsigned short sh )
  951.    opstream& _EXPTVFUNC operator << ( opstream& ps, signed int i )
  952.    opstream& _EXPTVFUNC operator << ( opstream& ps, unsigned int i )
  953.    opstream& _EXPTVFUNC operator << ( opstream& ps, signed long l )
  954.    opstream& _EXPTVFUNC operator << ( opstream& ps, unsigned long l )
  955.    opstream& _EXPTVFUNC operator << ( opstream& ps, float f )
  956.    opstream& _EXPTVFUNC operator << ( opstream& ps, double d )
  957.    opstream& _EXPTVFUNC operator << ( opstream& ps, long double ld )
  958.    opstream& _EXPTVFUNC operator << ( opstream& ps, TStreamable& t )
  959.    opstream& _EXPTVFUNC operator << ( opstream& ps, TStreamable *t )
  960.  
  961.    File :  TPOINT.CPP
  962.  
  963.    TPoint _EXPTVFUNC operator - ( const TPoint& one, const TPoint& two )
  964.    TPoint _EXPTVFUNC operator + ( const TPoint& one, const TPoint& two )
  965.    int _EXPTVFUNC operator == ( const TPoint& one, const TPoint& two )
  966.    int _EXPTVFUNC operator!= ( const TPoint& one, const TPoint& two )
  967.  
  968.    3.2.2 Add the _EXPTVDATA macro to global data. The following files are
  969.    affected:
  970.  
  971.    File :  HELPBASE.CPP
  972.  
  973.    line 57:
  974.    TCrossRefHandler _EXPTVDATA crossRefHandler = notAssigned;
  975.  
  976.    File :  TGROUP.CPP
  977.  
  978.    line 24-25:
  979.    TView *_EXPTVDATA TheTopView = 0;
  980.    TGroup* _EXPTVDATA ownerGroup = 0;
  981.  
  982.    File : TPROGRAM.CPP
  983.  
  984.    line 39:
  985.    extern TPoint _EXPTVDATA shadowSize;
  986.  
  987.    File :  TVIEW.CPP
  988.  
  989.    line 34-35:
  990.    TPoint _EXPTVDATA shadowSize = {2,1};
  991.    uchar _EXPTVDATA shadowAttr = 0x08;
  992.  
  993.    line 40:
  994.    extern TView *_EXPTVDATA TheTopView;
  995.  
  996.    3.2.3 Omission from the source (BUG)
  997.  
  998.    The following function is declared but not defined anywhere in the
  999.    source:
  1000.  
  1001.     TStreamable *TSortedListBox::build()
  1002.  
  1003.    Add the following lines to STDDLG.CPP just before the #endif right at
  1004.    the end of the file:
  1005.  
  1006.    TStreamable *TSortedListBox::build() {
  1007.       return new TSortedListBox( streamableInit );
  1008.       }
  1009.  
  1010.    3.2.4 The streaming stuff again.
  1011.  
  1012.    I [sic] all those S*.CPP files (SBUTTON.CPP, SVIEW.CPP, etc) where the
  1013.    registration objects are defined (RButton, RView etc), change the
  1014.    definitions from:
  1015.  
  1016.    TStreamableClass RSomeClass( TSomeClass::name,
  1017.    to:
  1018.    TStreamableClass _EXPTVDATA RSomeClass( TSomeClass::name,
  1019.  
  1020.    -----------------------------------------------------------------------
  1021.  
  1022.  
  1023.    Building the DLL
  1024.  
  1025.    I used the IDE to compile the DLL as scratching around in the makefile
  1026.    seemed like just too much effort. If you plan to use the IDE, set up
  1027.    your project as follows:
  1028.  
  1029.        In the New Project Dialog, name your project TV32 and select
  1030.        Target Type as Dynamic Library and DOS (32bit DPMI) as the platform.
  1031.  
  1032.        De-select Turbo Vision and Class Library in the Standard Libraries
  1033.        section.
  1034.  
  1035.        Select Dynamic for the Run Time Library.
  1036.  
  1037.        Add all the .CPP and .ASM files in the source\tvision directory to the
  1038.        project.
  1039.  
  1040.        Under Edit Local Options|Compiler|Defines add MAKEDLL (_RTLDLL should
  1041.        already be there).
  1042.  
  1043.    For each of the .ASM files under Edit Local Options|Tool, change the
  1044.        line to read $TASM /D__FLAT__ /m2 /ml
  1045.  
  1046.    When you make the project (go for lunch) an import library (TV32.LIB)
  1047.    will automatically be created. I suggest you rename this to TV32i.LIB to
  1048.    avoid confusion with the static library.
  1049.  
  1050.    -----------------------------------------------------------------------
  1051.  
  1052.    Using the DLL
  1053.  
  1054.    Existing applications can be converted to use the DLL as follows:
  1055.  
  1056.    Add TV32i.LIB to the project.
  1057.  
  1058.    At the top level define USEDLL in Edit Local Options|Compiler|Defines.
  1059.    Go to Target Expert and switch OFF Turbo Vision under standard Libaries.
  1060.  
  1061.    Select Dynamic Runtime Library.
  1062.  
  1063.    BUILD the project.
  1064.  
  1065.    Your EXE file should be much smaller than before. (The TVDemo
  1066.    application compiles to about 34K). When running your application
  1067.    TV32.DLL should be in the local directory or in the path.
  1068.  
  1069.    -----------------------------------------------------------------------
  1070.  
  1071.    Problems with the Borland RTL DLL
  1072.  
  1073.    This problem is not directly TV related but may surface if you use the
  1074.    DLL.
  1075.  
  1076.    When you use certain RTL functions (biosprint, inport, etc.), the linker
  1077.    will fail with an undefined symbol: _ostype. The problem is that the
  1078.    abovementiond functions force linking of the function
  1079.    __disallowDPMI32onWin32 (in DPMI32.LIB) which in turn references _ostype
  1080.    which is not exported from the C RTL DLL (CW3211.DLL).
  1081.  
  1082.    To get around the problem you can extract the module PLATFORM.OBJ from
  1083.    CW32.DLL and link it with your application:
  1084.  
  1085.    TLIB CW32.DLL *PLATFORM
  1086.  
  1087.    Alternatively you can just define _ostype some where in your
  1088.    application:
  1089.  
  1090.    unsigned int _ostype = 2;    // 2 == DOS32
  1091.  
  1092.    The second method is not all that safe since it assumes you are not
  1093.    running on a Win32 platform.
  1094.  
  1095.    -----------------------------------------------------------------------
  1096.  
  1097.    Feedback
  1098.  
  1099.    The author would appreciate any feedback on this material explaining how
  1100.    to compile TV as a DLL.
  1101.  
  1102.    Send email to <stasseed@telkom11.telkom.co.za>
  1103.  
  1104.    -----------------------------------------------------------------------
  1105.  
  1106.    TV AS DLL - PART 2
  1107.  
  1108.    Abstract
  1109.    The module definition file
  1110.        tvdll16.dff
  1111.    Modifications to the headers
  1112.        tvision/tv.h
  1113.        other header files
  1114.    Modifications to the assembler files
  1115.    General modifications
  1116.        tvwrite.asm
  1117.    Modifications to the source files
  1118.        tscreen.cpp
  1119.        system.h
  1120.    Miscellaneous modifications
  1121.        Missing TSortedListBox:::build
  1122.        Redundant tmenupop.cpp
  1123.    Conclusions
  1124.  
  1125.    -----------------------------------------------------------------------
  1126.  
  1127.    Abstract
  1128.  
  1129.    This section provides comment on producing Turbo Vision 2.0 as a DLL in
  1130.    either 16 or 32-bit mode under BC 4.5 as outlined in TV as DLL - Part 1
  1131.    and adds further insight of the reviewer. The reviewer is Vincent Van
  1132.    Den Berghe.
  1133.  
  1134.    -----------------------------------------------------------------------
  1135.  
  1136.    The module definition file
  1137.  
  1138.    For the 16-bit TV DLL, you need a module definition file to ensure that
  1139.    some critical routines always remain in memory and are never swapped
  1140.    out. To make such a file called tvdll16.def
  1141.  
  1142.  
  1143.    LIBRARY     TVDLL16
  1144.  
  1145.    DESCRIPTION 'TVDLL16.DLL'
  1146.  
  1147.    CODE PRELOAD MOVEABLE DISCARDABLE
  1148.    DATA PRELOAD MOVEABLE MULTIPLE
  1149.    SEGMENTS sysint_TEXT PRELOAD FIXED NONDISCARDABLE
  1150.                         SYSERR_TEXT PRELOAD FIXED NONDISCARDABLE
  1151.                         swapst_TEXT PRELOAD FIXED NONDISCARDABLE
  1152.                         DRIVERS_TEXT PRELOAD FIXED NONDISCARDABLE
  1153.                         DRIVERS2_TEXT PRELOAD FIXED NONDISCARDABLE
  1154.                         hardware_TEXT PRELOAD FIXED NONDISCARDABLE
  1155.                         TSCREEN_TEXT PRELOAD FIXED NONDISCARDABLE
  1156.                         TEVENT_TEXT PRELOAD FIXED NONDISCARDABLE
  1157.  
  1158.    This .def file is not needed for the 32-bit DLL.
  1159.  
  1160.    -----------------------------------------------------------------------
  1161.  
  1162.    Modifications to the headers
  1163.  
  1164.    The most extensive work to do is to modify the header files. Do not
  1165.    worry if you forget some modifications. The compiler or linker will tell
  1166.    you what you have missed. The linker will report "undefined symbols",
  1167.    the compiler will complain with "cannot derive a huge class from a far
  1168.    base" or vice-versa.
  1169.  
  1170.    Basically, the aim is to qualify every exportable class, function and
  1171.    data with the correct keyword and to continue using Turbo Vision as a
  1172.    static library.
  1173.  
  1174.    In order to do this, two macros need to be defined to tell the compiler
  1175.    what to do, namely:
  1176.  
  1177.      _BUILDTVDLL                 // defined if we are building TV as a DLL
  1178.      _TVDLL                      // defined if we are using TV as a DLL
  1179.  
  1180.    If neither is defined, we are building or using TV as a static library.
  1181.  
  1182.    tvision/tv.h
  1183.  
  1184.    In order to access classes in a DLL, they must be exported. A series of
  1185.    macros put at the start of tvision/tv.h (before line 16) set things up:
  1186.  
  1187.      #if defined(__FLAT__) // 32-bits
  1188.      #if defined(_BUILDTVDLL) // building 32-bits TV DLL
  1189.      #define _EXPTVCLASS  __export
  1190.      #define _EXPTVDATA   __export
  1191.      #define _EXPTVFUNC   __export
  1192.      #elif defined(_TVDLL) // using the 32-bits TV DLL
  1193.      #define _EXPTVCLASS  __import
  1194.      #define _EXPTVDATA   __import
  1195.      #define _EXPTVFUNC   __import
  1196.      #else // building or using 32-bits static library
  1197.      #define _EXPTVCLASS
  1198.      #define _EXPTVDATA
  1199.      #define _EXPTVFUNC
  1200.      #endif
  1201.      #elif defined(_BUILDTVDLL) // we are now compiling in 16-bit
  1202.      // building the 16-bit TV DLL
  1203.      #define _EXPTVCLASS        __export
  1204.      #define _EXPTVDATA __export
  1205.      #define _EXPTVFUNC         __export
  1206.      #elif defined(_TVDLL) // using the 16-bit TV DLL
  1207.      #define _EXPTVCLASS __export
  1208.      #define _EXPTVDATA
  1209.      #define _EXPTVFUNC
  1210.      #else // using the static TV libary
  1211.      #define _EXPTVCLASS        __far
  1212.      #define _EXPTVDATA __near
  1213.      #define _EXPTVFUNC
  1214.      #endif
  1215.  
  1216.      _EXPTVCLASS will be the export qualifier for classes
  1217.      _EXPTVDATA will be the export qualifier for (global) data
  1218.      _EXPTVFUNC will be the export qualifier for (global) functions
  1219.  
  1220.    Define the macro _BUILDTVDLL if we are building the library as a DLL;
  1221.    _TVDLL if we use the TV library as a DLL; or nothing if we are making or
  1222.    using TV as the static library. These definitions will be at the command
  1223.    line options. The rules are similar to those which are needed when using
  1224.    Borland's CLASSLIB or OWL as a DLL.
  1225.  
  1226.    Since we change the rules, change
  1227.      #if defined( _RTLDLL )
  1228.      #error TV must use the RTL in static form only
  1229.      #endif
  1230.    to
  1231.      #if defined( _RTLDLL ) && !defined(_BUILDTVDLL) && !defined(_TVDLL)
  1232.      #error TV must use the RTL in static form only
  1233.      #endif
  1234.    in tvision/tv.h
  1235.  
  1236.    Other header files
  1237.  
  1238.    Class declarations
  1239.  
  1240.    Basically, you must change all instances of class xxxx or class _FAR
  1241.    xxxx to class _EXPTVCLASS xxxx in all header files.
  1242.  
  1243.    Please note the following:
  1244.  
  1245.    Do not forget special cases - incomplete type specifications, friend
  1246.        classes, etc.
  1247.    If you want to have the class available, it should be qualified for
  1248.        export.
  1249.    class and struct are equivalent for these purposes, so do not forget
  1250.        them.
  1251.    It is not necessary to qualify a class or a struct which has no member
  1252.        functions.
  1253.  
  1254.    Functions declarations
  1255.  
  1256.    All global functions must have the _EXPTVFUNC attribute. This includes
  1257.    the overloaded operators and the friend functions. Note that it is not
  1258.    necessary to modify the function definition (i.e. the .cpp file), unlike
  1259.    the data declarations in the following section.
  1260.  
  1261.    Data declarations
  1262.  
  1263.    These declarations are sufficient:
  1264.      In File APP.H:
  1265.               static TProgram * _EXPTVDATA application;
  1266.               static TStatusLine * _EXPTVDATA statusLine;
  1267.               static TMenuBar * _EXPTVDATA menuBar;
  1268.               static TDeskTop * _EXPTVDATA deskTop;
  1269.               static int _EXPTVDATA appPalette;
  1270.               static TEvent _EXPTVDATA pending;
  1271.  
  1272.    Here, it is necessary to modify the data definition in the source file.
  1273.    For example, in tprogram.cpp:
  1274.      TStatusLine * _EXPTVDATA TProgram::statusLine = 0;
  1275.      TMenuBar * _EXPTVDATA TProgram::menuBar = 0;
  1276.      TDeskTop * _EXPTVDATA TProgram::deskTop = 0;
  1277.      TProgram * _EXPTVDATA TProgram::application = 0;
  1278.      int _EXPTVDATA TProgram::appPalette = apColor;
  1279.      TEvent _EXPTVDATA TProgram::pending;
  1280.  
  1281.    -----------------------------------------------------------------------
  1282.  
  1283.    Modifications to the assembler files
  1284.  
  1285.    General modifications
  1286.  
  1287.    There are 3 reasons why the assembler files must be modified:
  1288.  
  1289.       Symbolic references to class members in assembler files are different;
  1290.       Public symbols that define member functions in assembler files are
  1291.          different; and
  1292.       Assembly language functions may require prolog/epilog code to load DS
  1293.          with the DLL data segment (this procedure destroys AX).
  1294.  
  1295.    The first 2 reasons have one common cause: the compiler "mangles" class
  1296.    members differently if the class is flagged as exported/exportable. For
  1297.    example, the member TScreen::screenBuffer has as mangled name
  1298.  
  1299.             @TScreen@screenBuffer
  1300.  
  1301.    if TScreen is an "ordinary" class, but
  1302.  
  1303.             @TScreen@0screenBuffer
  1304.  
  1305.    if TScreen has the __export or __import attribute in 16-bit DPMI (i.e.
  1306.    the model is not __FLAT__).
  1307.  
  1308.    We define the macro __DLL__ to indicate that the assembler file is
  1309.    compiled for a DLL. A series of ifdef/endif constructs define the proper
  1310.    constructions.
  1311.  
  1312.    The changes may be grouped into 4 categories:
  1313.  
  1314.    Category 1: Public symbols
  1315.  
  1316.    All symbols declared PUBLIC at the start of the assembler file must be
  1317.    changed to PUBLICDLL (so that they can be exported). In addition, all
  1318.    public symbols that are of the form
  1319.  
  1320.                 @classname@functionname$arguments
  1321.  
  1322.    must be changed to:
  1323.  
  1324.                 @classname@0functionname$arguments
  1325.  
  1326.    Note the numeric 0 if the model is not __FLAT__
  1327.  
  1328.    This change is needed because the mangling of exported member names is
  1329.    different from the non-exported ones. The insertion of an extra 0 is the
  1330.    only thing different.
  1331.  
  1332.    Category 2: External symbols
  1333.  
  1334.    All symbols declared EXTRN at the start of the assembler file which are
  1335.    of the form @classname@functionname$arguments must change as described
  1336.    in category 1.
  1337.  
  1338.    Category 3: Proc declarations
  1339.  
  1340.    The proc declaration of public symbols in assembler files must change as
  1341.    described in category 1. In addition, a language modifier must be added.
  1342.  
  1343.    For example,
  1344.      ifndef __FLAT__
  1345.      @TView@writeStr$qssnxcuc PROC
  1346.      else
  1347.      @TView@writeStr$qsspxcuc PROC
  1348.      endif
  1349.    this is changed to:
  1350.      ifndef __FLAT__
  1351.      ifdef __DLL__
  1352.      @TView@0writeStr$qssnxcuc PROC WINDOWS
  1353.      else
  1354.      @TView@writeStr$qssnxcuc PROC
  1355.      endif
  1356.      else
  1357.      ifdef __DLL__
  1358.      @TView@writeStr$qsspxcuc PROC WINDOWS
  1359.      else
  1360.      @TView@writeStr$qsspxcuc PROC
  1361.      endif
  1362.      endif
  1363.  
  1364.    Do not forget to do the same thing if the proc name is specified as part
  1365.    of an ENDP statement at the end of the proc definition.
  1366.  
  1367.    Note that @TView@writeView$qv (defined in tvision/tvwrite.asm) does not
  1368.    need the WINDOWS language modifier since this is an internal function
  1369.    that receives its arguments through registers. Internal functions and
  1370.    protected mode thunks do not need the WINDOWS language modifier.
  1371.  
  1372.    Category 4: Call and usage statements
  1373.  
  1374.    If the EXTRN declarations are renamed, so must their uses. For example,
  1375.    affected call statements change from:
  1376.  
  1377.                   Call    @TDisplay@getCrtMode$qv
  1378.  
  1379.    to:
  1380.  
  1381.     ifdef __DLL__
  1382.                   Call    @TDisplay@0getCrtMode$qv
  1383.      else
  1384.                   Call    @TDisplay@getCrtMode$qv
  1385.      endif
  1386.  
  1387.    Example of a modified assembler declaration
  1388.  
  1389.    The file tvcursor.asm started with:
  1390.  
  1391.                   PUBLIC  @TView@resetCursor$qv
  1392.  
  1393.                   EXTRN   @TDisplay@isEGAorVGA$qv : FAR
  1394.                   EXTRN   @TScreen@cursorLines : WORD
  1395.  
  1396.      IFDEF __FLAT__
  1397.                   EXTRN   @THardwareInfo@setCaretSize$qus : NEAR
  1398.                   EXTRN   @THardwareInfo@setCaretPosition$qusus : NEAR
  1399.      ELSE
  1400.                   EXTRN   @TDisplay@getCrtMode$qv : FAR       ; For monochrome
  1401.                                                               ; check.
  1402.      ENDIF
  1403.  
  1404.    This is changed to:
  1405.      ifdef __DLL__
  1406.      ; DLL-declarations
  1407.  
  1408.      ifdef __FLAT__
  1409.                         PUBLICDLL  @TView@resetCursor$qv
  1410.  
  1411.                         EXTRN           @TDisplay@isEGAorVGA$qv : FAR
  1412.                         EXTRN           @TScreen@cursorLines : WORD
  1413.      else
  1414.                         PUBLICDLL  @TView@0resetCursor$qv
  1415.  
  1416.                         EXTRN           @TDisplay@0isEGAorVGA$qv : FAR
  1417.                         EXTRN           @TScreen@0cursorLines : WORD
  1418.      ; by using EQUates, we avoid having to modify the use of these
  1419.      ; routines in  the body of the code
  1420.      @TDisplay@isEGAorVGA$qv    EQU             @TDisplay@0isEGAorVGA$qv
  1421.      @TScreen@cursorLines       EQU             @TScreen@0cursorLines
  1422.      endif
  1423.  
  1424.      IFDEF __FLAT__
  1425.                         EXTRN   @THardwareInfo@setCaretSize$qus : NEAR
  1426.                         EXTRN   @THardwareInfo@setCaretPosition$qusus :
  1427.      NEAR
  1428.      ELSE
  1429.                         EXTRN @TDisplay@0getCrtMode$qv : FAR  ; For monochrome
  1430.                                                               ; check.
  1431.      @TDisplay@getCrtMode$qv    EQU     @TDisplay@0getCrtMode$qv
  1432.      ENDIF
  1433.  
  1434.      else
  1435.      ; - Original declarations
  1436.                   PUBLIC  @TView@resetCursor$qv
  1437.  
  1438.                   EXTRN   @TDisplay@isEGAorVGA$qv : FAR
  1439.                   EXTRN   @TScreen@cursorLines : WORD
  1440.  
  1441.      IFDEF __FLAT__
  1442.                   EXTRN   @THardwareInfo@setCaretSize$qus : NEAR
  1443.                   EXTRN   @THardwareInfo@setCaretPosition$qusus : NEAR
  1444.      ELSE
  1445.                   EXTRN   @TDisplay@getCrtMode$qv : FAR       ; For monochrome
  1446.  check.
  1447.      ENDIF
  1448.      endif
  1449.  
  1450.    tvwrite.asm
  1451.  
  1452.    In tvision/tvwrite.asm, the routine @TView@writeView$qv calls
  1453.    @THWMouse@hide$qv and @THWMouse@show$qv to hide (resp. show) the mouse
  1454.    cursor if drawing over it.
  1455.  
  1456.    The code assumes that AX is preserved across calls. Since
  1457.    THWMouse::hide() and THWMouse::show() are exported functions, they have
  1458.    a prolog code that destroy AX.
  1459.  
  1460.    You, therefore, should change:
  1461.  
  1462.                   CALL    @THWMouse@hide$qv
  1463.                   CALL    @@50
  1464.                   CALL    @THWMouse@show$qv
  1465.    to
  1466.                   push ax
  1467.                   CALL    @THWMouse@hide$qv
  1468.                   pop ax
  1469.                   CALL    @@50
  1470.                   push ax
  1471.                   CALL    @THWMouse@show$qv
  1472.                   pop ax
  1473.  
  1474.    As an aside, there are EXTRN definitions for TView::mapColor and
  1475.    THardwareInfo::screenWrite, but they are never used and may be
  1476.    eliminated if you want.
  1477.  
  1478.    -----------------------------------------------------------------------
  1479.  
  1480.    Modifications to the source files
  1481.  
  1482.    The designers of Turbo Vision chose to use a mixture of assembly
  1483.    language and C++ for low-level features, like accessing the video
  1484.    memory, keyboard and other bios functions.
  1485.  
  1486.    Although it seems logical to do this, among other things, for writing to
  1487.    the screen, there is no rational explanation why functions like video
  1488.    detection (see tvision/tscreen.cpp) has to be in such a mix of language.
  1489.  
  1490.    For example, this routine is defined in tvision/tscreen.cpp:
  1491.      void TDisplay::videoInt()
  1492.      {
  1493.      I   PUSH    BP
  1494.      I   PUSH    ES
  1495.      I   INT     10h
  1496.      I   POP     ES
  1497.      I   POP     BP
  1498.      }
  1499.    The routine directly calls int 10 (the video bios interrupt) and assumes
  1500.    all the proper registers will be set up.
  1501.  
  1502.    When compiling for DLL, all exported functions (including the static
  1503.    member functions of exported classes, like videoInt() ) get a prolog
  1504.    that begins by loading the DLL's data segment in the AX register. As a
  1505.    result, the AX register are destroyed by the time the int 10 is
  1506.    executed. It so happens that AX (more specifically AH) holds the
  1507.    subfunction to be executed. The result is wrong!
  1508.  
  1509.    The only reliable way to solve this is to get rid of videoInt() and to
  1510.    substitute the body of the function directly at each call site. Do not
  1511.    use int86 calls! Some of the code is called within static constructors
  1512.    and int86 is unreliable at that time .
  1513.  
  1514.    This should yield a working tvision/tscreen.cpp
  1515.  
  1516.    -----------------------------------------------------------------------
  1517.  
  1518.    Miscellaneous modifications
  1519.  
  1520.    As reported by Eric Stassen, there is indeed a missing member function
  1521.    which should be added to stddlg.cpp:
  1522.  
  1523.      TStreamable *TSortedListBox::build()
  1524.      {
  1525.          return new TSortedListBox( streamableInit );
  1526.      }
  1527.  
  1528.    Failure to do this causes an "undefined symbol TStreamable
  1529.    *TSortedListBox::build" error when attempting to link the Turbo Vision
  1530.    DLL. The reason for such an error message when TV is linked as a static
  1531.    library is that references to TSortedListBox::build are only pulled in
  1532.    if streaminig is actually used. If it is not used (and it usually is
  1533.    not), the reference is not pulled in and the linker does not sees it.
  1534.  
  1535.    A DLL is linked as a "complete" program, meaning that there must be no
  1536.    unresolved symbols. Hence, the error.
  1537.  
  1538.    Redundant tmenupop.cpp
  1539.  
  1540.    There is a redundant file called tvision/tmenupop.cpp which cannot
  1541.    compile. It is supposed to implement the class TMenuPopup defined in
  1542.    tvision/menu.h. Get rid of it.
  1543.  
  1544.    -----------------------------------------------------------------------
  1545.  
  1546.    Conclusions
  1547.  
  1548.    It can be done. The reviewer reports he has a 16- and 32-bit Turbo
  1549.    Vision Library in a DLL, and it works like a charm!
  1550.  
  1551.    The ideal thing would be to incorporate Eric Woodruff's patches with the
  1552.    DLL changes so that everyone could benefit. If you try it on your own,
  1553.    however, prepare for a few hours work.
  1554.  
  1555.  
  1556.    -----------------------------------------------------------------------
  1557.  
  1558.    ADDITIONAL COMMENT ON MAKING TV AS A DLL
  1559.  
  1560.    1. My application does not clear the screen when I exit. It seems that
  1561.    the destructors for TScreen etc are not being called.
  1562.  
  1563.    Borland C++ 4.02 has known problems when generating DLL's containing
  1564.    static objects with destructors. The "static destructor in DLL" problem
  1565.    has been fixed in 4.5.
  1566.  
  1567.    2. BC 4.02 creates garbage code when trying to access byte- or word-wide
  1568.    exported static member data, e.g. TScreen::screenMode. This seems to be
  1569.    a compiler bug. Perhaps somebody with BC4.5 can verify if this problem
  1570.    has been fixed.
  1571.  
  1572.    I have Borland C++ 4.5 and have not encountered this problem.
  1573.  
  1574.    The moral of the story is: do not use Borland C++ between versions 4.0
  1575.    and 4.02 included. Upgrade to 4.5 (in fact, 4.51, since the upgrade is
  1576.    supposed to be available).
  1577.  
  1578.  
  1579.    -----------------------------------------------------------------------   -----------------------------------------------------------------------
  1580.    TV BUGS
  1581.    -----------------------------------------------------------------------
  1582.  
  1583.    TV 1.x has several bugs. People have offered fixes and workarounds that
  1584.    make TV 1.x run more efficiently. Patches may also be obtained from Phar
  1585.    Lap if you want to use their product with TV.
  1586.  
  1587.    TV 2 fixed most of the bugs found in the earlier version. Eric Woodruff
  1588.    is maintaining a bug list and has released a consolidation of patches
  1589.    for TV 2, the latest of which is available from the TVPlus ftp site.
  1590.  
  1591.    Any substantiated bugs for TV 2 - and just not coding errors - may be
  1592.    sent to Eric Woodruff at <mailto:72134.1150@compuserve.com>.
  1593.  
  1594.  
  1595.    -----------------------------------------------------------------------
  1596.    TV MIXED AND MATCHED
  1597.    -----------------------------------------------------------------------
  1598.  
  1599.    It is feasible to compile TV code with different BC versions provided
  1600.    that you follow three simple steps
  1601.  
  1602.    1. ensure that the old version of TV will not interfere with the new
  1603.    one and, if applicable, that the second version of the compiler is
  1604.    out of the way;
  1605.  
  1606.    2. revise the TV source code to conform with the compiler you will
  1607.    use; and
  1608.  
  1609.    3. build the new TV library.
  1610.  
  1611.    The specifics will change depending on which version of the compiler and
  1612.    of Turbo Vision you intend to use. More information follows.
  1613.  
  1614.  
  1615.    TV 1.x AND BC4.x
  1616.  
  1617.    In this case, the Turbo Vision library must be re-compiled with BC4x.
  1618.    The reasons for doing so are the differences in debug format, symbol
  1619.    length and the runtime library.
  1620.  
  1621.    For particulars on how to do this, read TI1752 and TI1753.
  1622.  
  1623.  
  1624.    TV 2.0 AND BC 3.1
  1625.  
  1626.    You can compile the TV2.0 source code with BC3.1. Doing so does not
  1627.    allow you to generate protected mode applications or link BC4x libraries
  1628.    but it does retain the advantage of using the integrated debugger in the
  1629.    IDE and development in a DOS environment with the final production build
  1630.    done with BC4x.
  1631.  
  1632.    Changes to source code files are necessary because of the developments
  1633.    in C++ since BC3.1. It means that libraries need to be re-compiled
  1634.    having first patched the source code from the file TV2BUG.ZIP.
  1635.  
  1636.    You need to ensure that TV1.03 files do not conflict with TV2.0 files,
  1637.    possibly by renaming the Turbo Vision directory or deleting them if no
  1638.    longer required. At the same time, take the necessary precautions to
  1639.    prevent the BC4x and makefiles being called on.
  1640.  
  1641.    For detailed information, obtain the file B31TV2.ZIP which provides
  1642.    guidelines and a makefile - put together by Eric Woodruff - to help you
  1643.    adapt the code to your compiler.
  1644.  
  1645.    -----------------------------------------------------------------------
  1646.    TV PORTS
  1647.    -----------------------------------------------------------------------
  1648.  
  1649.    These include:
  1650.  
  1651.        the Joern Sierwald patches to compile a portable 32 bit TV
  1652.        supporting various C++ compilers;
  1653.  
  1654.        Oliver Suciu's patches to compile TV using djgpp; and
  1655.  
  1656.        Alain Borel's patches to compile TV using djgpp based on
  1657.        the Sierwald patches.
  1658.  
  1659.  
  1660.    JOERN SIERWALD
  1661.  
  1662.    Joern Sierwald who is at the Technische Universitaet Hamburg-Harburg
  1663.    (Germany) maintains this code. If you want to obtain the code, its URL
  1664.    is given in the section Specialist ftp sites or is obtainable from the
  1665.    TVPlus ftp site.
  1666.  
  1667.    Supported compilers:
  1668.  
  1669.    IBM CSet++ 2.1 for native OS/2 applications;
  1670.    Borland C++ for OS/2;
  1671.    emx/gcc for native OS/2 and 32Bit DOS applications;
  1672.    Watcom C++ 10.0(a) for OS/2 and DOS4GW (dos extender) applications; and
  1673.     djgpp.
  1674.  
  1675.    Description:
  1676.  
  1677.    patches for TV 1.03 (BC3.1);
  1678.    all .asm rewritten in C++ for easy debugging;
  1679.    mouse support for all compilers;
  1680.    32Bit TEditor, 32Bit TTerminal and 32Bit containers;
  1681.    Additional ports should be easy; and
  1682.    OS/2 versions are multithreaded and consume very little CPU time.
  1683.  
  1684.    The djgpp support is new. It is considered a beta version having been
  1685.    tested with the OS/2 DPMI Server ONLY.  It should run with VCPI or with
  1686.    plain HIMEM.SYS, but you never know.
  1687.  
  1688.    N.B.  If you use these patches, please be considerate enough to provide
  1689.    the author with feedback and any bug reports.  It is nice to know how
  1690.    code performs!
  1691.  
  1692.    Joern thanks Alain Borel for code and debugging.
  1693.  
  1694.  
  1695.    ----------------------------------------------------------------------
  1696.    TV AND MS-WINDOWS
  1697.    ----------------------------------------------------------------------
  1698.  
  1699.    There is no port or tool available to facilitate a conversion of Turbo
  1700.    Vision to MS-Windows.
  1701.  
  1702.    The two systems are similar, but different enough that a simple
  1703.    conversion is not possible. How difficult it is depends on how your
  1704.    original program was written.
  1705.  
  1706.    There are 3 parts to programs - interfacing with the user, manipulating
  1707.    data, and storing the data. If you have kept the last two separate from
  1708.    the user interface, it should not be too hard to make the port. If views
  1709.    do a lot of manipulating of data or you have custom views it will
  1710.    require more effort.
  1711.  
  1712.    The closest you will find to convert your resources for you is something
  1713.    like TurboVision Development Toolkit which is not 100% but better than
  1714.    nothing. Alternatively, you can use the Resource Workshop to rebuild the
  1715.    initial interface and copy much of your code.
  1716.  
  1717.    One of the main problems converting your code is that radiobuttons,
  1718.    checkboxes, and some other controls have slightly different schemes of
  1719.    storing the data. There are slight differences in the names of some
  1720.    constants also.
  1721.  
  1722.  
  1723.    -----------------------------------------------------------------------
  1724.    LEARNING TV
  1725.    -----------------------------------------------------------------------
  1726.  
  1727.    If you are still learning C++, the learning curve that comes with the
  1728.    choice of TV as an application framework can be steep. There are a few
  1729.    good books that will demonstrate C++ for you. However, a book will never
  1730.    teach you a language. That comes by examining working code and through
  1731.    trial and error.
  1732.  
  1733.    Studying the source code for TV, if it is available, is a good way to
  1734.    understand the processes that give it life. But you must first
  1735.    understand C++.
  1736.  
  1737.    The examples that come with TV are a good platform to try out some of
  1738.    the features this framework offers, but they are not real world
  1739.    examples. The source code examples that can be found on the Internet are
  1740.    good ways to see the good (and bad) ways of writing C++, and the
  1741.    presentation of it.
  1742.  
  1743.    The discussion list will provide you with a means to try ideas out on
  1744.    one one another. No one will laugh at your suggestions or queries. In
  1745.    fact the List can be your most powerful ally in the resolving of
  1746.    problems or bugs in your code.
  1747.  
  1748.    The best way to learn TV and C++ is to write code. People learn by
  1749.    doing. Once you overcome the initial hurdles of the language extensions
  1750.    and continue to expand your directions, the use of TV is almost formula.
  1751.  
  1752.    -----------------------------------------------------------------------
  1753.              Books and journals
  1754.    -----------------------------------------------------------------------
  1755.  
  1756.    Christian, Kaare (1993). "Borland C++ Techniques & Utilities." Ziff
  1757.       Davis Press, Emeryville. ISBN 1-56276-054-8.
  1758.  
  1759.    Faison, Ted (1992). "Borland C++ 3.1 Object-Oriented Programming." Sams
  1760.       Publishing, Indianopolis. Second edition. ISBN 0-672-30140-7.
  1761.  
  1762.    Finn, et al. (1994). "C++ Database Applications with the Paradox
  1763.         Engine." Windcrest/McGraw-Hill. ISBN 0-8306-4327-3
  1764.  
  1765.    Swan, Tom (1992). "Mastering Borland C++." Sams Publishing,
  1766.       Indianopolis. ISBN 0-672-30274-8
  1767.  
  1768.    Welstead, Steve (1994). "Neural Network and Fuzzy Logic Applications in
  1769.       C/C++." John Wiley.  ISBN 0471-30975-3 (without disk) or
  1770.         ISBN 0471-30974-5 (with disk)
  1771.  
  1772.    "The C/C++ User's Journal."
  1773.  
  1774.    Dead Parrots
  1775.  
  1776.    -----------------------------------------------------------------------
  1777.    CHRISTIAN
  1778.    -----------------------------------------------------------------------
  1779.  
  1780.    Synopsis
  1781.  
  1782.    There is a 3.5" disk with source code included.
  1783.  
  1784.    Part 3 of this book is devoted to Turbo Vision (pages 179 - 270), but it
  1785.    only covers TV basics.
  1786.  
  1787.    The rest of the book teaches C++, streams, OWL, etc.
  1788.  
  1789.    Review
  1790.  
  1791.    No published review has been located yet. However, Craig Schlenter was
  1792.    of the opinion that it was a "good book."
  1793.  
  1794.    -----------------------------------------------------------------------
  1795.    FAISON
  1796.    -----------------------------------------------------------------------
  1797.  
  1798.    Synopsis
  1799.  
  1800.    USD39.95 with disk. The author shows how to make changes to TV defaults.
  1801.    The third edition does not include anything specifically relating to TV
  1802.    but covers BC4 instead.
  1803.  
  1804.    Review
  1805.  
  1806.    No published review has been located. Craig Schlenter rated it "very
  1807.    good".
  1808.  
  1809.    ----------------------------------------------------------------------- 
  1810.    FINN
  1811.    -----------------------------------------------------------------------
  1812.  
  1813.    Synopsis
  1814.  
  1815.    USD39.95 with disk. This book requires TV, Paradox Engine with Database
  1816.    Frameworks 3.01.
  1817.  
  1818.    Review
  1819.  
  1820.    A published review has not yet been located.
  1821.  
  1822.    -----------------------------------------------------------------------
  1823.    SWAN
  1824.    -----------------------------------------------------------------------
  1825.  
  1826.    Synopsis
  1827.  
  1828.    As the title suggests, the book relates to C++, specifically BC3.1.
  1829.    Topics covered by the author in this edition include object oriented
  1830.    programming, Turbo Vision and the ObjectWindows Library. Consistent with
  1831.    the publisher's style, the book contains such tutorial aids as
  1832.    summaries, tips, hints and cautionary notes.
  1833.  
  1834.    The author also describes and lists complete example programs for every
  1835.    Borland C++ procedure and function.
  1836.    USD39.95 with disk which contains the source code to the programming
  1837.    examples in the book, answers to the chapter exercises and reference
  1838.    information.
  1839.  
  1840.    Review
  1841.  
  1842.    No published review has been located. Craig Schlenter rated it "very 
  1843.    good".
  1844.  
  1845.    -----------------------------------------------------------------------
  1846.    WELSTEAD
  1847.    -----------------------------------------------------------------------
  1848.  
  1849.    Synopsis
  1850.  
  1851.    USD36.95 without disk or 49.95 with disk which includes source code for
  1852.    all applications and TV executables for most of the applications.
  1853.  
  1854.    This is a "how-to" book for writing your own neural network and fuzzy
  1855.    logic applications. Applications include pattern recognition, financial
  1856.    forecasting, chaos and dynamic control. In addition to basic neural
  1857.    network training methods such as backpropagation, the book covers
  1858.    advanced topics such as genetic algorithms, conjugate gradient,
  1859.    simulated annealing, self organizing networks and fuzzy genetic systems.
  1860.  
  1861.    One chapter is devoted to the development of a Turbo Vision application
  1862.    base class tailored to the general needs of training and running neural
  1863.    networks and fuzzy systems. The remaining chapters develop complete
  1864.    self-contained applications, with application-specific TV interface
  1865.    derived from the general base class.
  1866.  
  1867.    Review
  1868.  
  1869.    It is not known if a published review is available.
  1870.  
  1871.    Credit
  1872.  
  1873.    Thanks to Scott Sumner for finding and relaying this information.
  1874.  
  1875.    -----------------------------------------------------------------------
  1876.    CUJ
  1877.    -----------------------------------------------------------------------
  1878.  
  1879.    Welstead, Steve (1994). 'Scrolling List Dialog for Scientific
  1880.    Programming'. CUJ, 12(4)51-66.
  1881.  
  1882.    The author shows an alternative method of setting up a TV project that
  1883.    uses one header and *.cpp files as include files. The programming style
  1884.    is different to that from the Borland stable. The article describes how
  1885.    to build a scrolling list dialog using TV that will collect the input
  1886.    normally handled throught a command-line interface and prompt the user
  1887.    through a series of menus and dialog boxes.
  1888.  
  1889.    The source code is available from ftp://ftp.uu.net/pub/cuj   A slightly
  1890.    more elaborate version of the articles' code is available from
  1891.    ftp://vtucs.cc.vt.edu/turbo-vision.  These are promotions for Welstead's
  1892.    book.
  1893.  
  1894.    -----------------------------------------------------------------------
  1895.    DEAD PARROTS
  1896.    -----------------------------------------------------------------------
  1897.  
  1898.    Borland International (1992). "Turbo Vision for C++ User's Guide".
  1899.    Scotts Valey, CA.
  1900.  
  1901.    The link was suggested by the manual itself (see page 492). After
  1902.    pondering this indexed item deeply and philosophically, we realised that
  1903.    there was no answer! Therefore, applying the rule more honoured in its
  1904.    breach than observance, "Keep it simple", it became obvious that the
  1905.    reference had to be to the object itself, a (*this)!
  1906.  
  1907.    On a more serious note, TV is not well documented. The manual can only
  1908.    be described as obscure. This is unfortunate as a library's manual is a
  1909.    powerful adjunct. If the manual is unclear, then the benefits from the
  1910.    library will not be fully realised.
  1911.  
  1912.    One of the objectives of TVPlus, with your support, will be to clarify
  1913.    some of the points the manual tends to present unclearly, or does not
  1914.    mention at all. If you want to record dead parrots (i.e. would be
  1915.    errata), we would be happy to note them here.
  1916.  
  1917.    -----------------------------------------------------------------------
  1918.              Software resources
  1919.    -----------------------------------------------------------------------
  1920.  
  1921.    This heading covers some of the software available which can be used
  1922.    with Turbo Vision to increase programming productivity.
  1923.  
  1924.    Utilities
  1925.    Software libraries
  1926.    The Borland TI series
  1927.    CDROM source code
  1928.  
  1929.    -----------------------------------------------------------------------
  1930.    UTILITIES
  1931.    -----------------------------------------------------------------------
  1932.  
  1933.    It seems that few utilities are designed specifically for TV. The ones
  1934.    we are aware of are listed here.
  1935.  
  1936.    NON COMMERCIAL
  1937.  
  1938.    A dialog box designer by Dave Baldwin - dlgdsn46.zip 1994
  1939.    TV resource workshop by Siskiyou Software - tvrw.zip 1993
  1940.    TV workshop by Mark Buchanan and Mark Timmings - tvwork.zip 1994:
  1941.        generates menus, statuslines, hints and dialogs
  1942.  
  1943.    COMMERCIAL
  1944.  
  1945.    Turbo Vision Development ToolKit by IDC
  1946.  
  1947.    Originally for Pascal, TVDK was upgraded for C++ TV1.03. It is used to
  1948.    build TV applications. With the resource editor you can create the menu,
  1949.    hint texts and the help system. There are additional classes in the TVDT
  1950.    (like masked inputs).
  1951.  
  1952.    The original code contained several bugs.
  1953.  
  1954.    ----------------------------------------------------------------------
  1955.    Developer
  1956.  
  1957.       Innovative Data Concepts
  1958.       122 North York Road, Suite 5
  1959.       Hatboro Pennsylvenia 19040
  1960.       USA
  1961.  
  1962.       Phone: +1 800 926 4551
  1963.       Fax:   +1 215 443 9753
  1964.       BBS:   +1 215 364 9131
  1965.  
  1966.       Internet:
  1967.           Technical Support:  71333.1575@compuserve.com
  1968.           Customer Support:   75300.564@compuserve.com
  1969.       FidoNet:
  1970.           Technical Support:  IDC Tech Support, 1:273/232
  1971.           Customer Support:   IDC Cust Support, 1:273/232
  1972.  
  1973.    ----------------------------------------------------------------------
  1974.    Product comparison
  1975.  
  1976.    Availability of source code
  1977.  
  1978.    TVDT Lite: No Source Code
  1979.  
  1980.    TVDT 2.5: Full, complete source code is provided for all classes,
  1981.    objects, and utilities. The Pascal source code for the Resource Editor
  1982.    and Windows Resource Converter is compatible with TP 6.0 or 7.0, and
  1983.    supports both Real Mode and Protected Mode versions of resedit.
  1984.  
  1985.    Resource editor
  1986.  
  1987.    TVDT Lite: The version of resedit supplied with the TVDT Lite package
  1988.    runs in Real Mode and is limited to 640K of memory.
  1989.  
  1990.    TVDT 2.5: With the full TVDT package, a 16-bit DPMI Protected Mode
  1991.    version of resedit is supplied supporting up to 16 MB of RAM.
  1992.  
  1993.    Debugging
  1994.  
  1995.    TVDT Lite: No debugging capabilities.
  1996.  
  1997.    TVDT 2.5: TVDT comes with the debugging libraries with complete symbolic
  1998.    debugging information for all the TVDT classes. Supports 16-bit Real
  1999.    Mode applications, 16-bit DPMI applications and 32-bit DPMI
  2000.    applications.
  2001.  
  2002.    Compatability
  2003.  
  2004.    TVDT Lite: Supports BC++ 4.0 and TV 2.0
  2005.  
  2006.    TVDT 2.5: In addition to supporting the Borland PowerPack, the full TVDT
  2007.    package supports earlier versions of Turbo Vision, such as the versions
  2008.    shipped with BC++ 3.1. Also supports TP 6.0, TP 7.0 and Borland Pascal
  2009.    7.0.
  2010.  
  2011.    Documentation
  2012.  
  2013.    TVDT Lite: Documentation is included in a single TV Help File; the
  2014.    package includes a TV Help File viewer using the TV THelpViewer class.
  2015.  
  2016.    TVDT 2.5: In addition to the on-line TV help file, the documentation is
  2017.    also available in Microsoft Windows Help File Format.
  2018.  
  2019.    No printed documentation is available with this release.
  2020.  
  2021.  
  2022.    -----------------------------------------------------------------------
  2023.    LIBRARIES
  2024.    -----------------------------------------------------------------------
  2025.  
  2026.    The libraries that extend TV is not limited to those we have listed
  2027.    here. However, we considered these to be more substantial than others of
  2028.    which we are aware.
  2029.  
  2030.    Protected mode for TV1.03 and BC3.1 by Kevin Morgan - pmapp.zip 1994
  2031.    Some useful gadgets and add-ins by Marc Stern - tvtool17.zip 1993
  2032.    Extension of TV classes by Roger Nelson - rvision.zip 1994
  2033.    Graphics extension by Simor Balazs - gfx210.zip 1994: excellent
  2034.    Graphics extension by Pat Reilly - tvalt.zip 1992
  2035.    Graphics extension by Mindware - tvg121.zip 1994
  2036.    Palette demonstration by Eric Woodruff - tvcolr.zip 1994
  2037.    Palette utilities by Craig Nelson - tvpal.zip 1992
  2038.    Palette utilities by Lincoln Beach Software - pald15.zip 1994
  2039.    Extension of TInputLine Class by Jeff Penrose - tde.zip 1992
  2040.    Improved help viewer and entended video mode output by Peter Brandstrom
  2041.      - tvtoys.zip 1994
  2042.    Gadgets, widgets and special functions by Chris Ahlmstrom - face_tv.zip
  2043.  
  2044.    These files may be downloaded from the TVPlus site.
  2045.  
  2046.  
  2047.    ========================== END OF TEXT PART 1 =========================
  2048. -- 
  2049. Rachel Polanskis             grove@zeta.org.au            Robert Hazeltine  
  2050.                  http://www.zeta.org.au/~grove/grove.html
  2051.                        r.polanskis@nepean.uws.edu.au
  2052. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2053.