home *** CD-ROM | disk | FTP | other *** search
/ Borland Programmer's Resource / Borland_Programmers_Resource_CD_1995.iso / code / bcpp / file3 / tvbugs.cpp < prev    next >
Encoding:
Text File  |  1995-05-19  |  22.9 KB  |  811 lines

  1. -------------------------- TVBUGS.CPP --------------------------
  2.  
  3.              Borland Turbo Vision (C++) Bug/Enhancement List
  4.  
  5.  
  6. Last Updated: 28 may 93
  7.  
  8. Maintained by: Marc Stern
  9.                stern@mble.philips.be
  10.  
  11.  
  12.  
  13. *** This list is C++ TurboVision (TV) specific.
  14. For a Pascal specific buglist, see the file \turbo-vision\pascal\tvbugs.pas 
  15. maintained by Brad Williams (bwilliams@marvin.ag.uidaho.edu)
  16. on the TurbVis ftp site vtucs.cc.vt.edu.
  17. All bugs and fixes presented have been discussed on the listserv TurbVis
  18. and Compuserve.
  19.  
  20. This list contains bug fixes and enhancements to the TV sources.
  21. These enhancements are obviously subjective and rely most of the time
  22. on personal feelings of the posters about the look and feel of their
  23. applications.
  24.  
  25.  
  26. *** This is an unofficial list and is not a substitute for
  27. *** Borland Technical or Customer Support which can be reached at
  28. *** 800-331-0877 for registered Borland product owners.  Borland
  29. *** customer on-line service can be reached at
  30. ***
  31. ***           customer-support@borland.com (internet)
  32. ***
  33. *** Online technical support is not available.  Borland's internet
  34. *** address for reporting bugs is
  35. ***
  36. ***               bugs@borland.com (internet)
  37.  
  38. All submissions determined to be "true" bugs will be forwarded
  39. to Borland.  The maintainer of this list, the authors of bug
  40. fixes, the TurbVis listserv and the ftp site are not responsible
  41. for the reliability of any information presented in this document or
  42. consequences that may result from their use.
  43.  
  44. *** Always make a backup of the source code file under a new name
  45. *** prior making any changes to the original file.
  46.  
  47. Send all comments about bugs you have discovered and any
  48. patches to the maintainer of this list or to the TurbVis
  49. listserv for discussion.  Please include a description of the
  50. problem you are having, a small section of source code which
  51. will duplicate the problem when compiled/run, and all
  52. suggestions for improvement of current patches are appreciated.
  53.  
  54.  
  55. How to Use This List
  56. --------------------
  57. At the beginning of this list is an index of new problems/questions
  58. or changes to old problems/enhancements/questions in reverse
  59. chronological order.
  60. This facilitates quick review for changes from previous additions.
  61. Following is the list of problems/enhancements/questions about bugs in TV.
  62. They are discussed and source code patches referenced where available.  
  63. All source code patches in this file are placed at the end in alphabetic
  64. order according to the reference name.
  65. Reference name is usually a function name or a object::function name,
  66. but it can be a general topic name such as Help, System Error Messages,...
  67.  
  68. Example: Help
  69.          MessageBox
  70.          System Error Messages
  71.          TInputLine::handleEvent
  72.          TParamText::setData
  73.          TWindow::handleEvent
  74.  
  75. If extensive files are required, the individual file will be
  76. referenced under the appropriate problem/question.
  77.  
  78. There are two possible methods for searching this document, by
  79. topic under the PROBLEMS/ENHANCEMENTS/QUESTIONS section or by function
  80. (or object::method) name under the PATCHES section.
  81. All PROBLEMS/ENHANCEMENTS/QUESTIONS and PATCHES are cross-referenced.
  82. If you do not find the topic/patch in one list, check the other.
  83. If you still cannot find a solution look at the FAQ (TVCPP.FAQ) 
  84. posted at this site. If you still cannot determine a solution to
  85. your problem, post a message to the listserv TurbVis.
  86.  
  87. ---------------------------------------------------------------
  88.        CHRONOLOGICAL INDEX OF CHANGES TO THIS DOCUMENT
  89. ---------------------------------------------------------------
  90. 28 may 1993
  91.  
  92.    Help - 2
  93.    TGroup - 1
  94.    TMenuView - 1
  95.    TView - 1 (Correction)
  96.    min/max - 1
  97.  
  98.  
  99. 25 may 1993
  100.  
  101.    Selection - 2
  102.    System Error Messages - 1, 2, 3 (Correction)
  103.    TDirCollection - 1
  104.    TFileDialog - 1
  105.    TListViewer - 1, 2
  106.    TResourceFile - 1
  107.    TView - 1
  108.    TWindow - 2
  109.  
  110.  
  111. 5 may 93 - First edition of this list
  112.  
  113.    Help - 1, 2
  114.    MessageBox - 1, 2, 3
  115.    System Error Messages - 1, 2
  116.    TEditor - 1
  117.    TGroup - 1
  118.    TInputLine - 1
  119.    TParamText - 1
  120.    TWindow - 1
  121.  
  122. ---------------------------------------------------------------
  123.                    PROBLEMS / ENHANCEMENTS / QUESTIONS
  124. ---------------------------------------------------------------
  125.  
  126. Help
  127. ----
  128.  
  129. 1. Problem - Compilation error when using streams with help.
  130.    Version  : 1.03
  131.    Patch: See Help-1
  132.  
  133. 2. Problem - Highlighted items no more displayed in highlight
  134.              when scrolling in a help window longer than one screen.
  135.    Version  : 1.03
  136.    Patch: Help-2
  137.  
  138.  
  139. MessageBox
  140. ----------
  141.  
  142. 1. Problem - Strange effects, memory garbage
  143.    Version  : 1.03
  144.    Patch: see MessageBox-1
  145.  
  146. 2. Enhancement - Automatically adapt box size to message length
  147.    Version  : 1.03
  148.    Patch: see MessageBox-2
  149.  
  150. 3. Enhancement - Automatically center 'OK/Cancel' buttons
  151.    Version  : 1.03
  152.    Patch: see MessageBox-3
  153.  
  154.  
  155. min/max
  156. -------
  157.  
  158. 1. Problem - error when using min/max with different type variables
  159.              than int (like ushort).
  160.    Version  : 1.03
  161.    Patch: see min/max-1
  162.  
  163.  
  164. Selection
  165. ---------
  166.  
  167. 1. Problem (feature?) - When a control is unselectable, it can be selected
  168.                         by selection its associated label.
  169.    Version  : 1.03
  170.    Patch: see Selection-1      
  171.  
  172.  
  173. System Error Messages
  174. ---------------------
  175.  
  176. 1. Problem - Wrong system error messages
  177.    Version  : 1.03
  178.    Patch: See System-1
  179.  
  180. 2. Enhancement - Drive letter in uppercase
  181.    Version  : 1.03
  182.    Patch: See System-2
  183.  
  184. 3. Problem - Does not handle error codes greater than 14
  185.              (usually network error codes,...)
  186.    Version  : 1.03
  187.    Patch: See System-3
  188.  
  189.  
  190. TDirCollection
  191. --------------
  192.  
  193. 1. Problem - If current drive is invalid (no floppy, network disconnected,...)
  194.              when trying to change directory (TChDirDialog), after hitting
  195.              Escape twice, the directory field on screen contains garbage.
  196.    Version  : 1.03
  197.    Patch: See TDirCollection-1
  198.  
  199.  
  200. TEditor
  201. -------
  202.  
  203. 1. Problem - Fails sometimes to find next word
  204.    Version  : 1.03
  205.    Patch: see TEditor-1
  206.  
  207.  
  208. TFileDialog
  209. -----------
  210.  
  211. 1. Problem - error in validation :
  212.              cmValid is not checked in base class TDialog
  213.    Version  : 1.03
  214.    Patch: See TFileDialog-1
  215.  
  216.  
  217. TGroup
  218. -------
  219.  
  220. 1. Enhancement - Check if focus has actually been released
  221.                  (if disabled in a derived class for example).
  222.    Version  : 1.03
  223.    Patch: See TGroup-1
  224.  
  225.  
  226. TInputLine
  227. ----------
  228.  
  229. 1. Problem - In overwrite mode:
  230.              Selection is not deleted when typing a new character
  231.              At the end of the line, strange characters may be added.
  232.    Version  : 1.03
  233.    Patch: see TinputLine-1
  234.  
  235.  
  236. TListViewer
  237. -----------
  238.  
  239. 1. If a TListViewer has no scrollbar, the view is never redrawed.
  240.    Version  : 1.03
  241.    Patch: See TListViewer-1
  242.  
  243.  
  244. 2. Double-click in a TListViewer does not select the item.
  245.    Version  : 1.03
  246.    Patch: See TListViewer-2
  247.  
  248.  
  249. TMenuView
  250. ---------
  251.  
  252. 1. In a menu, if you go onto a disabled entry, hit Enter then Escape,
  253.    the action will be executed.
  254.    Version  : 1.03
  255.    Patch: See TMenuView-1
  256.  
  257.  
  258. TParamText
  259. ----------
  260.  
  261. 1. Problem - Displays garbage with format where sizeof() != 4
  262.    Version  : 1.03
  263.    Patch: see TParamText-1
  264.  
  265.          
  266. TResourceFile
  267. -------------
  268.  
  269. 1. Problem - 32 bytes memory loss every time a TResourceFile
  270.              is instantiated and destroyed.
  271.    Version  : 1.03
  272.    Patch: see TResourceFile-1
  273.  
  274.  
  275. TView
  276. -----
  277.  
  278. 1. Problem - If changing the sfVisible state of ANY view inside a TDialogBox,
  279.              the focused view is reset.
  280.    Version  : 1.03
  281.    Patch: see TView-1
  282.  
  283.  
  284. TWindow
  285. -------
  286.  
  287. 1. Enhancement - Allow use of arrows like Tab/shift-Tab
  288.                  (if no other meaning - like in TRadioButton,...)
  289.    Version  : 1.03
  290.    Patch: See TWindow-1
  291.  
  292.  
  293. 2. Problem - If valid(cmClose) returns False, the frame is lost.
  294.    Version  : 1.03
  295.    Patch: See TWindow-2
  296.           
  297.  
  298. ---------------------------------------------------------------
  299.                           PATCHES
  300. ---------------------------------------------------------------
  301. File     : HELP.H
  302. Version  : 1.03
  303. Reference: Help-1
  304. Type     : Bug
  305. Patch    :
  306.  
  307.   - add   '#define Uses_fpstream'   before   'include <tv.h>'
  308.  
  309. ---------------------------------------------------------------
  310. Function : inputBox, inputBoxRect
  311. File     : MSGBOX.CPP
  312. Version  : 1.03
  313. Reference: MessageBox-2
  314. Type     : Enhancement
  315. Patch    :
  316.  
  317.  in inputBox(): 
  318.   - change   TRect r(0, 0, 60, 8);
  319.     into     ushort len;
  320.              len = max( strlen(aLabel) + 9 + limit, strlen(Title) + 11 );
  321.              len = min( len, 60 );
  322.              len = max( len , 24 );
  323.              TRect r(0, 0, len, 8);
  324.  
  325.  in inputBoxRect(): 
  326.   - change   TRect( 4 + strlen(aLabel), 2, dialog->size.x - 3, 3 );
  327.     into     uchar x = 4 + strlen( aLabel );
  328.              r = TRect( x, 2, min(x + limit + 2, dialog->size.x - 3), 3 );
  329.  
  330.  
  331. ---------------------------------------------------------------
  332. Function : inputBoxRect
  333. File     : MSGBOX.CPP
  334. Version  : 1.03
  335. Reference: MessageBox-3
  336. Type     : Enhancement
  337. Patch    :
  338.  
  339.  in inputBoxRect():
  340.   - change   r = TRect( dialog->size.x - 24, dialog->size.y - 4,
  341.                         dialog->size.x - 14 , dialog->size.y - 2);
  342.     into     r = TRect( dialog->size.x / 2 - 11, dialog->size.y - 4,
  343.                         dialog->size.x / 2 - 1 , dialog->size.y - 2);
  344.  
  345. ---------------------------------------------------------------
  346. Function : messageBoxRect, messageBox
  347. File     : MSGBOX.CPP
  348. Version  : 1.03
  349. Reference: MessageBox-1
  350. Type     : Bug
  351. Patch    :
  352.  
  353.  in messageBoxRect() and messageBox():
  354.   - add   'va_end( argptr );'   before   'return'
  355.  
  356.   - change   va_start( argptr, aOptions );
  357.     into     va_start( argptr, fmt );
  358.  
  359. ---------------------------------------------------------------
  360. Function : min/max
  361. File     : UTIL.H
  362. Version  : 1.03
  363. Reference: min/max-1
  364. Type     : Bug
  365. Poster   : Vincent Van Den Berghe - Windows/DOS developer's journal April 93
  366. Patch    :
  367.  
  368.   - change   inline int min/max( int a, int b )
  369.     into     template <class T> inline T min/max( const T &a, const T &b )
  370.  
  371. ---------------------------------------------------------------
  372. Function : TDirCollection::getCurDir
  373. File     : TDIRCOLL.CPP
  374. Version  : 1.03
  375. Reference: TDirCollection-1
  376. Type     : Bug
  377. Patch    :
  378.  
  379.    after    dir[0] = ...
  380.             dir[1] = ':';
  381.             dir[2] = '\\';
  382.  
  383.    add      dir[3] = '\0';
  384.  
  385. ---------------------------------------------------------------
  386. Function : TEditor::nextWord
  387. File     : TEDITOR2.CPP
  388. Version  : 1.03
  389. Reference: TEditor-1
  390. Type     : Bug
  391. Patch    :
  392.  
  393.  ushort TEditor::nextWord( ushort p )
  394.  {
  395.   if ( isWordChar(bufChar(p)) )
  396.      while ( p < bufLen && isWordChar(bufChar(p)) ) p = nextChar(p);
  397.   else p = nextChar(p);
  398.  
  399.   while( p < bufLen && ! isWordChar(bufChar(p)) ) p = nextChar(p);
  400.  
  401.   return p;
  402.  }
  403.  
  404. ---------------------------------------------------------------
  405. Function : TFileDialog::valid
  406. File     : TFILDLG.CPP
  407. Version  : 1.03
  408. Reference: TFileDialog-1
  409. Type     : Bug
  410. Poster   : Vincent Van Den Berghe - Windows/DOS developer's journal April 93
  411. Patch    :
  412.  
  413.  - change   if( command == 0 )
  414.                 return True;
  415.  
  416.             if( TDialog::valid( command ) )
  417.                 {
  418.                 ...
  419.                 }
  420.  
  421.    into     if ( ! TDialog::valid( command ) ) return False;
  422.             if ( command == cmValid ) return True;
  423.  
  424.             {
  425.             ...
  426.             }
  427.  
  428.  - or, to better structure the code:
  429.  
  430. Boolean TFileDialog::valid(ushort command)
  431. {
  432.  if ( ! TDialog::valid( command ) ) return False;
  433.  if ( command == cmValid || command == cmCancel || command == cmFileClear ) 
  434.     return True;
  435.  
  436.  char fName[MAXPATH], drive[MAXDRIVE], dir[MAXDIR], name[MAXFILE], ext[MAXEXT];
  437.  
  438.  getFileName( fName );
  439.  
  440.  if ( isWild(fName) )
  441.     {
  442.      fnsplit( fName, drive, dir, name, ext );
  443.      char path[MAXPATH];
  444.      strcpy( path, drive );
  445.      strcat( path, dir );
  446.      if ( checkDirectory(path) )
  447.         {
  448.          delete (char *)directory;
  449.          directory = newStr( path );
  450.          strcpy( wildCard, name );
  451.          strcat( wildCard, ext );
  452.          if ( command != cmFileInit ) fileList->select();
  453.          fileList->readDirectory( directory, wildCard );
  454.         }  
  455.      return False;
  456.     }             
  457.  
  458.  if ( isDir(fName) )
  459.     {
  460.      if ( checkDirectory(fName) )
  461.         {
  462.          delete (char *)directory;
  463.          strcat( fName, "\\" );
  464.          directory = newStr( fName );
  465.          if ( command != cmFileInit ) fileList->select();
  466.          fileList->readDirectory( directory, wildCard );
  467.         }
  468.      return False;
  469.     }
  470.  
  471.  if ( validFileName(fName) ) return True;
  472.  
  473.  messageBox( invalidFileText, mfError | mfOKButton );
  474.  return False;
  475. }
  476.  
  477. ---------------------------------------------------------------
  478. Function : TGroup::setCurrent
  479. File     : TGROUP.CPP
  480. Version  : 1.03
  481. Reference: TGroup-1
  482. Type     : Enhancement
  483. Patch    :
  484.  
  485.   - after    focusView( current, False );
  486.     add      // Test if focus lost was allowed and focus has really been loose
  487.              if ( (mode == normalSelect) &&
  488.                   current &&
  489.                   (current->state & sfFocused)
  490.                 )
  491.                 {
  492.                  unlock(); 
  493.                  return; 
  494.                 }
  495.  
  496.  for coherency:
  497.   - replace   if( (state & sfFocused) != 0 && p != 0 )
  498.                 p->setState( sfFocused, True );
  499.  
  500.     by        focusView( p, True);
  501.  
  502.  
  503. ---------------------------------------------------------------
  504. Function : THelpViewer::draw, THelpViewer::makeSelectVisible
  505. File     : HELP.CPP
  506. Version  : 1.03
  507. Reference: Help-2
  508. Type     : Bug
  509. Poster   : Bill Kirby (Borland)
  510. Patch    :
  511.  
  512.  * in draw - line 116:
  513.   - change   do
  514.                 {
  515.                 ++keyCount;
  516.                 topic->getCrossRef(keyCount-1, keyPoint, keyLength, keyRef);
  517.                 } while ( (keyCount <= topic->getNumCrossRefs()) && (keyPoint.y < delta.y));
  518.  
  519.  
  520.     into     do
  521.                 {
  522.                 topic->getCrossRef(keyCount, keyPoint, keyLength, keyRef);
  523.                 ++keyCount;
  524.                 } while ( (keyCount < topic->getNumCrossRefs()) && (keyPoint.y <= delta.y));
  525.  
  526.  
  527.  * in draw - line 149:
  528.   - change   ++keyCount;
  529.              if (keyCount <= topic->getNumCrossRefs())
  530.                 topic->getCrossRef(keyCount-1, keyPoint, keyLength, keyRef);
  531.              else
  532.  
  533.  
  534.     into     if ( keyCount < topic->getNumCrossRefs() )
  535.                 {
  536.                 topic->getCrossRef(keyCount, keyPoint, keyLength, keyRef);
  537.                 ++keyCount;
  538.                 }
  539.              else
  540.  
  541.    
  542.  * in makeSelectVisible - line 178:
  543.   - change   if (keyPoint.y < d.y)
  544.                 d.y = keyPoint.y;
  545.                 
  546.     into     if (keyPoint.y <= d.y)
  547.                 d.y = keyPoint.y - 1;
  548.  
  549.  
  550. ---------------------------------------------------------------
  551. Function : TInputLine::handleEvent
  552. File     : TINPUTLI.CPP
  553. Version  : 1.03
  554. Reference: TInputLine-1
  555. Type     : Bug
  556. Patch    :
  557.  
  558.  line 244:
  559.   - change   if( (state & sfCursorIns) != 0 )
  560.                strcpy( data + curPos, data + curPos + 1 );
  561.              else
  562.                deleteSelect();
  563.  
  564.     into     deleteSelect();
  565.              if ( (state & sfCursorIns) && (curPos < strlen(data)) )
  566.                 strcpy( data + curPos, data + curPos + 1 );
  567.  
  568.  
  569. ---------------------------------------------------------------
  570. Function : TLabel::handleEvent
  571. File     : TLABEL.CPP
  572. Version  : 1.03
  573. Reference: Selection-1
  574. Type     : Bug
  575. Patch    :
  576.  
  577.   - change   if ( link != 0 )
  578.     into     if ( link && (link->options & ofSelectable) && !(link->state & sfDisabled) )
  579.  
  580.   Warning: Change this in two lines (84, 96)
  581.  
  582. ---------------------------------------------------------------
  583. Function : TListViewer::focusItem, TListViewer::setRange
  584. File     : TLSTVIEW.CPP
  585. Version  : 1.03
  586. Reference: TListViewer-1
  587. Type     : Bug
  588. Poster   : Vincent Van Den Berghe - Windows/DOS developer's journal April 93
  589. Patch    :
  590.                    
  591.   - in focusItem:
  592.     change   if( vScrollBar != 0 )
  593.                  {
  594.                  if( focused > aRange )
  595.                      focused = 0;
  596.                  vScrollBar->setParams( ... );
  597.                  }
  598.  
  599.     into     if( focused > aRange ) focused = 0;
  600.              if( vScrollBar != 0 )
  601.                  vScrollBar->setParams( ... );
  602.              else drawView();
  603.  
  604.   - in setRange:
  605.     change   if( vScrollBar != 0 )
  606.                  vScrollBar->setValue( item );
  607.  
  608.     into     if( vScrollBar != 0 )
  609.                  vScrollBar->setValue( item );
  610.              else drawView();
  611.  
  612. ---------------------------------------------------------------
  613. Function : TListViewer::handleEvent
  614. File     : TLSTVIEW.CPP
  615. Version  : 1.03
  616. Reference: TListViewer-3
  617. Type     : Bug
  618. Poster   : Vincent Van Den Berghe - Windows/DOS developer's journal April 93
  619. Patch    :
  620.  
  621.   - after the do-while loop, suppress
  622.           if( event.mouse.doubleClick && range > focused )
  623.               selectItem( focused );
  624.  
  625.   - before 'mouse = makeLocal( event.mouse.where );', add:
  626.           if( event.mouse.doubleClick && range > focused )
  627.               {
  628.                selectItem( focused );
  629.                break;
  630.               }
  631.  
  632. ---------------------------------------------------------------
  633. Function : TMenuView::execView
  634. File     : TMNUVIEW.CPP
  635. Version  : 1.03
  636. Reference: TMenuView-1
  637. Type     : Bug
  638. Poster   : Vincent Van Den Berghe - Windows/DOS developer's journal April 93
  639. Patch    :
  640.  
  641.   - at line 321, after:
  642.         if( result != 0 && commandEnabled(result) )
  643.             {
  644.             action =  doReturn;
  645.             clearEvent(e);
  646.             }
  647.     add:
  648.         else result = 0;
  649.  
  650. ---------------------------------------------------------------
  651. Function : TParamText::setData
  652. File     : TPARAMTE.CPP
  653. Version  : 1.03
  654. Reference: TInputLine-1
  655. Type     : Bug
  656. Patch    :
  657.  
  658.   - change   paramList = &rec;
  659.     into     paramList = rec;
  660.  
  661. ---------------------------------------------------------------
  662. Function : TResourceFile::TResourceFile
  663. File     : TRESFILE.CPP
  664. Version  : 1.03
  665. Reference: TResourceFile-1
  666. Type     : Bug
  667. Patch    :
  668.  
  669.   - add at the last line of the function (before returning):
  670.     delete( header );
  671.  
  672. ---------------------------------------------------------------
  673. Function : TSystemError::sysErr
  674. File     : TVTEXT2.CPP
  675. Version  : 1.03
  676. Reference: System-1
  677. Type     : Bug
  678. Patch    :
  679.  
  680.  in TVTEXT2.CPP:
  681.   - change   const char * const near TSystemError::errorString[] =
  682.              {
  683.              ...
  684.              }
  685.  
  686.     into     const char * const near TSystemError::errorString[] =
  687.              {
  688.               "Disk is write-protected in drive %c",
  689.               "Critical disk error on drive %c",     // unknown unit
  690.               "Disk is not ready in drive %c",
  691.               "Critical disk error on drive %c",     // unknown command
  692.               "Data integrity error on drive %c",    // bad CRC
  693.               "Critical disk error on drive %c",     // bad request
  694.               "Seek error on drive %c",
  695.               "Unknown media type in drive %c",
  696.               "Sector not found on drive %c",
  697.               "Printer out of paper",
  698.               "Write fault on drive %c",
  699.               "Read fault on drive %c",
  700.               "General failure on drive %c",
  701.               "Bad memory image of FAT detected",
  702.              }
  703.  
  704.  
  705. ---------------------------------------------------------------
  706. Function : TSystemError::sysErr
  707. File     : SYSERR.CPP
  708. Version  : 1.03
  709. Reference: System-2
  710. Type     : Enhancement
  711. Patch    :
  712.  
  713.  - in TSystemError::sysErr():
  714.  
  715.    change    sprintf( s, errorString[errorCode], drive + 'a' );
  716.    into      sprintf( s, errorString[errorCode], drive + 'A' );
  717.  
  718. ---------------------------------------------------------------
  719. Function : TSystemError::sysErr
  720. File     : SYSERR.CPP
  721. Version  : 1.03
  722. Reference: System-3
  723. Type     : Bug
  724. Patch    :
  725.  
  726.    change    sprintf( s, errorString[errorCode], drive + 'A' );
  727.  
  728.    into      if ( errorCode < sizeof(errorString) / sizeof(*errorString) )
  729.                 sprintf( s, errorString[errorCode], drive + 'A' );
  730.              else
  731.                 sprintf( s, "Critical error %d on drive %d", errorCode, drive + 'A' );
  732.  
  733. ---------------------------------------------------------------
  734. Function : TView::setState
  735. File     : TVIEW.CPP
  736. Version  : 1.03
  737. Reference: TView-2
  738. Type     : Bug
  739. Poster   : Vincent Van Den Berghe - Windows/DOS developer's journal April 93
  740. Patch    :
  741.             
  742. !!!  Warning - Correction  !!!
  743. This does not work: with this code there is no current view selected
  744.                     because TV seems to rely on selection when setting
  745.                     inserted all views state to visible instead of
  746.                     explicitly reset selection after all views have
  747.                     been inserted.
  748.  
  749.  - change  if( (options & ofSelectable) != 0 )
  750.    into    if( (options & ofSelectable) && !enable && owner->current == this )
  751.  
  752. One (easy) way to achieve the goal would be:
  753.  
  754.  - if( ((options & ofSelectable) && !enable && owner->current == this)
  755.        || ! owner->current
  756.      )
  757.  
  758. but the last item would be selected inside a view in place
  759. of the first one.
  760.  
  761. ---------------------------------------------------------------
  762. Function : TWindow::handleEvent
  763. File     : TWINDOW.CPP
  764. Version  : 1.03
  765. Reference: TWindow-1
  766. Type     : Enhancement
  767. Patch    :
  768.       
  769.   -  after    case  kbTab:
  770.      add      case  kbDown:
  771.               case  kbRight:
  772.  
  773.      after    case  kbShiftTab:
  774.      add      case  kbUp:
  775.               case  kbLeft:
  776.  
  777. ---------------------------------------------------------------
  778. Function : TWindow::close
  779. File     : TWINDOW.CPP
  780. Version  : 1.03
  781. Reference: TWindow-2
  782. Type     : Bug
  783. Poster   : Vincent Van Den Berghe - Windows/DOS developer's journal April 93
  784. Patch    :
  785.  
  786. void TWindow::close()
  787. {
  788.     if ( valid( cmClose ) )
  789.        {
  790.         frame = 0;  // so we don't try to use the frame after it's been deleted
  791.         destroy( this );
  792.        }
  793. }
  794.  
  795.  
  796. --------------------------------------------------------------------
  797. Marc Stern                        Computer Engineer
  798. Av. de la Basilique 386 - 19      Phone:    (322) 525.63.32
  799. 1080 Bruxelles                    FAX:      (322) 525.66.00
  800. BELGIUM                           Internet: stern@mble.philips.be
  801.                                   compuserve: >INTERNET:stern@mble.philips.be
  802.  
  803.  
  804.  ################################################################
  805.  #                                                              #
  806.  # Announce:   TVTOOLS  -  general-purpose Turbo-Vision Tools   #
  807.  #                         (library, sources and documentation) #
  808.  #                                                              #
  809.  # All this stuff is free.    Available as TVTOOL14.ZIP         #
  810.  ################################################################
  811.