home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / turbobas / tbwind30.arc / TBWIND30.DOC < prev    next >
Text File  |  1987-08-05  |  14KB  |  463 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.                                                     August 5, 1987
  8.  
  9.  
  10.  
  11.                                    TBWINDO
  12.                              MULTI-LEVEL WINDOWS
  13.                            FOR BORLANDS TURBO BASIC
  14.                                  Version 3.0
  15.  
  16.           PURPOSE:
  17.  
  18.           This utility creates  incredibly quick multi-level windows
  19.           in Turbo Basic programs for IBM PC/XT/AT compatibles.
  20.  
  21.  
  22.           TEST DRIVE:
  23.  
  24.           Compile and run the tutoring program TBDEMO30.BAS to get a
  25.           feel for features and speed.
  26.  
  27.  
  28.           FILES:
  29.  
  30.           In this version, TBWINDO.ARC contains:
  31.                TBWINDO.INC    - Turbo Basic window include file
  32.                TBMENU.INC     - Menu include file
  33.                QPRINT.BIN     - Quick print inline subroutine
  34.                QPRINTC.BIN    - Quick print between columns
  35.                QATTR.BIN      - Re-attribute an area of the screen
  36.                QFILL.BIN      - Fill an area of the screen with a
  37.                                 specified character and attribute
  38.                QSAVE.BIN      - Save portion of screen
  39.                QREST.BIN      - Restore portion of screen
  40.                RECOLOR.BIN    - Screen area recoloring
  41.                TBDEMO30.BAS   - Demonstration program source code
  42.                TBWIND30.DOC   - This document file.
  43.                README.1ST     - Most recent changes and corrections.
  44.  
  45.           Assembly  language  source  code  for  all  BIN  files  is
  46.           included for  all those  interested.  Any  Suggestions for
  47.           improvements to the code would be appreciated, as I do not
  48.           profess to be good at Assembly language.
  49.  
  50.           USING TBWINDO
  51.  
  52.           Include the TBWINDO.INC  program in your  program with the
  53.           following statement:
  54.  
  55.  
  56.                   $INCLUDE "TBWINDO.INC"
  57.  
  58.           Set MW%  variable equal to  the maximum  number of windows
  59.           you will have open at any one time.
  60.  
  61.  
  62.  
  63.                                     - 1 -
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.           Set the  ScrnArray variable  equal to  the estimated total
  74.           memory required to save your screens.  If you expreience a
  75.           subscript out of range error in the include file, increase
  76.           this variable.  As  a rough rule of  thumb, start out with
  77.           the variable equal to 250  times the maximum windows (mw%)
  78.           variable.
  79.           
  80.  
  81.           You invoke the routines by means  of a CALL with a list of
  82.           parameters, rather than a GOSUB.
  83.  
  84.  
  85.           Using the MAKEWINDOW procedure:
  86.  
  87.           CALL
  88.           MAKEWINDOW(ROW%,COL%,ROWS%,COLS%,ATTR%,BRDRSEL%,SHADOW%,ZO
  89.           OM%)
  90.  
  91.           Where: ROW - the screen row of the upper left hand corner
  92.                        of your desired window.  Value should be
  93.                        between 2 and 23 (for reasons explained
  94.                        below).  WARNING - the subroutine does not
  95.                        check for proper values. You must check these
  96.                        yourself or accept the consequences.
  97.  
  98.                 COL -  the screen column of the upper left hand
  99.                        corner.  Value should be between 2 and 79.
  100.  
  101.                ROWS - the number of rows long the window should be.
  102.  
  103.                COLS - the number of columns wide the window should
  104.                       be.
  105.  
  106.                ATTR - the attribute of the window colors.
  107.  
  108.             BRDRSEL - the border you desire  around the window.
  109.                       Valid selections in this release are:
  110.  
  111.                       0 - No Frame (just a border of BACKground
  112.                           color.)
  113.                       1 - Single Line Frame
  114.                       2 - Double Line Frame
  115.                       3 - Single Horizontal Line, Double Vertical
  116.                           Line
  117.                       4 - Single Vertical Line, Double Horizontal
  118.                           Line
  119.  
  120.              SHADOW - Another "switch" to indicate  if the window
  121.                       should have a black "shadow" under it offset
  122.                       down.  This gives a three-dimensional effect
  123.                       that seems to "raise" the window away from the
  124.                       screen.  A value of 1 indicates a shadow is
  125.                       desired on the left side, a value of 2
  126.                       indicates the right side, while a value of 0
  127.  
  128.  
  129.                                     - 2 -
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.                       means no shadow.
  140.  
  141.                ZOOM - A "switch" used to indicate to the subroutine
  142.                       if the window should "grow" from a small box
  143.                       at the midpoints of the coordinates to full
  144.                       size. A value of 1 indicates the window should
  145.                       grow. A value of 0 indicates it should not.
  146.           
  147.  
  148.  
  149.           using the TITLEWINDOW procedure:
  150.  
  151.           CALL TITLEWINDOW(LOC%,TITLE$)
  152.  
  153.           Where: LOC - Indicates where the title should be placed.
  154.                        Valid selections are:
  155.  
  156.                        1 - Top left hand corner
  157.                        2 - Top center
  158.                        3 - Top right hand corner
  159.                        4 - Lower left hand corner
  160.                        5 - Lower center
  161.                        6 - Lower right hand corner
  162.  
  163.                TITLE - The string data you would like printed.
  164.  
  165.           NOTE:  The TITLEWINDOW procedure uses the coordinates from
  166.                  the most recent use of MAKEWINDOW.  Use this
  167.                  procedure only after a call has been made to
  168.                  MAKEWINDOW.
  169.  
  170.  
  171.           Using the RemoveWindow procedure:
  172.  
  173.           CALL REMOVEWINDOW
  174.  
  175.           There  are no  parameters passed  to this  procedure.  The
  176.           window created by  the last call  to MakeWindow is removed
  177.           from the screen.
  178.  
  179.           Using the ClearWindow procedure:
  180.  
  181.           CALL CLEARWINDOW
  182.  
  183.           There  are  no  parameters pass  to  this  procedure.  The
  184.           window created by  the last call  to MakeWindow is cleared
  185.           inside the frame.
  186.  
  187.           Using the PrtWindow procedure:
  188.  
  189.           CALL PRTWINDOW(ROW%,COL%,STRDAT%)
  190.  
  191.           Where:  ROW - Is the row within the window you want to
  192.                         print on.
  193.  
  194.  
  195.                                     - 3 -
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.                   COL - Is the column within the  window where you
  207.                         want printing to start.
  208.  
  209.           NOTE:  The ROW and COL  coordinates are relative to the
  210.                  current window.  Row 1 Col 1 refers to the first
  211.                  character position inside the frame in the upper
  212.                  left corner.  No parameter checking is done so if
  213.                  the string data exceeds the  width of the window it
  214.                  will spill out the right side.
  215.  
  216.                STRDAT - Is the string  data you want printed inside
  217.                         the window.
  218.  
  219.  
  220.           Using the PrtCWindow procedure:
  221.  
  222.           CALL PRTCWINDOW(ROW%,STRDAT$)
  223.  
  224.           Where:  ROW - Is the row  within  the window you to have
  225.                         your string data centered on.
  226.  
  227.           NOTE:  This procedure uses the current window and will
  228.                  attempt to center the string data between the left
  229.                  border and the right border.  No parameter checking
  230.                  is done so if the string data exceeds the width of
  231.                  the window, it will spill out the sides.
  232.  
  233.                STRDAT - Is the string data  you want printed within
  234.                         the window.
  235.  
  236.           Using the FNATTR% function:
  237.  
  238.           FNATTR%(FORE%,BACK%)
  239.  
  240.           Where: FORE - is the foreground color.  Any Turbo Basic
  241.                         color number is valid.
  242.  
  243.                  BACK - is the backgound color.  Any Turbo Basic
  244.                         background color is valid.
  245.  
  246.           FNATTR% returns the attribute of the colors specified.
  247.  
  248.  
  249.           Using the RECOLOR procedure:
  250.  
  251.           CALL RECOLOR(OLDATTR%,NEWATTR%,SNOCHK%)
  252.  
  253.           Where: OLDATTR - Is the attribute of the areas on the
  254.                            screen you wish to change.
  255.  
  256.                  NEWATTR - Is the attribute of the color you want.
  257.  
  258.                  X% = SCREEN(1,1,1)  ' RETURNS CURRENT SCREEN
  259.  
  260.  
  261.                                     - 4 -
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.                                      ' ATTRIBUTE
  272.                   CALL RECOLOR(X%,FNATTR%(14,4))
  273.  
  274.                   This will recolor everything on the screen that
  275.                   has the same attribute a the upper left corner of
  276.                   the screen to a foreground of 14 and a background
  277.                   of 4.
  278.  
  279.           Using the MAKEMENU procedure:
  280.  
  281.           CALL MAKEMENU
  282.  
  283.           You  must  define  several variable  before  you  call the
  284.           MakeMenu procedure.  First define the selections available
  285.           to the user in a string  array named item$().  If you want
  286.           a title  on your menu  assign it to  the variable mtitle$.
  287.           Assign the  total selections  available to  itemcount% and
  288.           the starting selection number to startpos%.  The remaining
  289.           information  required  is  almost  identical  to  defining
  290.           window in the MakeWindow procedure.
  291.  
  292.           Where: MROW - the screen row of the upper left hand corner
  293.                         of your desired menu.  Value should be
  294.                         between 2 and 23 (for reasons explained
  295.                         below).  WARNING - the subroutine does not
  296.                         check  for  proper  values.  You  must check
  297.                         these yourself or accept the consequences.
  298.  
  299.                 MCOL -  the screen column of the upper left hand
  300.                         corner.  Value should be between 2 and 79.
  301.  
  302.               MWIDTH -  The  width of the menu.   Be sure this value
  303.                         is greater than  the longest string assigned
  304.                         to a selection.
  305.  
  306.                MATTR -  the attribute of the menu colors.
  307.  
  308.              MHIATTR -  the attribute of the moving selection bar.
  309.  
  310.             MBRDRSEL -  the border you  desire around the menu. (See
  311.                         above)
  312.  
  313.              MSHADOW -  Switch to indicate if the menu should have a
  314.                         shadow.
  315.  
  316.                MZOOM -  Switch to indicate if the menu should grow.
  317.  
  318.           When a selection has be made in the MakeMenu procedure the
  319.           item  number selected  will  be assigned  to  the variable
  320.           curntpos%.  You can now use this number to direct the flow
  321.           of you  main program.  Please  see the source  code of the
  322.           demo program for a better understanding.
  323.  
  324.  
  325.  
  326.  
  327.                                     - 5 -
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.           All  of  the above  variables  with the  exception  of the
  339.           string variables  must either  be   declared  globally  as
  340.           integers by  means of  a DEFINT  statement early   in  the
  341.           program;  or  must  have  the  specific integer identifier
  342.           (%)  attached  wherever  they   appear in the program. The
  343.           BASIC  compiler  is picky  about  this; so   be   sure  to
  344.           verify that the type assignment is correct.
  345.  
  346.           TBWINDO  requires no  special  handling when  it  comes to
  347.           compiling your program. Just make certain that all of
  348.           your variables passing parameters to the TBWINDO
  349.           subroutine  are identified  as integers,  and you  will be
  350.           able to  proceed with  the compile  operation as  with any
  351.           other program.
  352.  
  353.  
  354.           ACKNOWLEDGEMENTS
  355.  
  356.           I  would  like   to  express  my   thanks  to  Dave  Evers
  357.           (BASWIN22),   Tom   Hanlin   (ADVBAS33)   and   Jim  LeMay
  358.           (WINDOW33).   The routines  presented are  patterned after
  359.           routines  that were  written by  them for  MicroSoft Quick
  360.           Basic and Borland Turbo Pascal.
  361.  
  362.           These utilities  are released  into the  public domain for
  363.           anyone to  use as they  see fit however,  anyone who feels
  364.           inspired and would like to  contribute to my printer paper
  365.           and computer supplies fund may feel free to do so.
  366.  
  367.           Rick Fothergill
  368.           141 Oak Hill Road
  369.           Pittsfield, MA 01201
  370.           (413) 442-2456
  371.  
  372.           GEnie Address: R.FOTHERGILL
  373.              Compuserve: 76210,443
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                     - 6 -
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.                            TBWINDO QUICK REFERENCE
  405.  
  406.  
  407.           
  408.           MakeWindow(Row%,Col%,Rows%,Cols%,Attr%,BrdrSel%,Shadow%,Zo
  409.           om%)
  410.  
  411.                            TitleWindow(Loc%,Title$)
  412.  
  413.                                  RemoveWindow
  414.  
  415.                                  ClearWindow
  416.  
  417.                                    MakeMenu
  418.  
  419.                          PrtWindow(Row%,Col%,StrDat$)
  420.  
  421.                            PrtCWindow(Row%,StrDat$)
  422.  
  423.                              FNAttr%(Fore%,Back%)
  424.  
  425.                     Qsave(Row%,Col%,Rows%,Cols%,Scrn%(??))
  426.  
  427.                     QRest(Row%,Col%,Rows%,Cols%,Scrn%(??))
  428.  
  429.                       ReColor(OldAttr%,NewAttr%,SnoChk%)
  430.  
  431.                        Qprint(Row%,Col%,StrDat$,Attr%)
  432.  
  433.                 QprintC(Row%,ColLeft%,ColRight%,StrDat$,Attr%)
  434.  
  435.                    QFill(Row%,Col%,Rows%,Cols%,Char%,Attr%)
  436.  
  437.                       QAttr(Row%,Col%,Rows%,Cols%,Attr%)
  438.  
  439.                   QBox(Row%,Col%,Rows%,Cols%,Attr%,BrdrSel%)
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                     - 7 -
  460.  
  461.  
  462.  
  463.