home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / turbopas / pull20.arc / PULLSTAT.PAS < prev    next >
Pascal/Delphi Source File  |  1988-01-12  |  30KB  |  718 lines

  1. { =========================================================================== }
  2. { PullStat.pas - User Statistics for pull-down menus.       ver 2.0, 01-12-87 }
  3. {                                                                             }
  4. { This file contains all the data for GetUserPullStats, GetOverrideStats and  }
  5. { CheckGlobalKeys to configure the menus.                                     }
  6. { =========================================================================== }
  7.  
  8. {$R-,S-,I-,D-,T-,F-,V-,B-,N-,L+ }
  9.  
  10. UNIT PullStat;
  11.  
  12. INTERFACE
  13.  
  14. uses
  15.   CRT,Qwik,WndwVars,PullVars,Pull,PullDir;
  16.  
  17. { ------------------ Set up your window names here in order: ---------------- }
  18. { This is optional, but it sure helps you in not only understanding the
  19.   program, but also makes it unquestionably easier to rearrange.              }
  20.  
  21. type
  22.   MainMenuNames = (NoMainMenu,FilesMenu,ColorMenu,AutoPartsMenu,EnterDataMenu,
  23.                    OptionsMenu,UtilitiesMenu,IRSmenu,QuitMenu);
  24.   SubMenuNames  = (NoSubMenu,TiresMenu,RadioMenu,UpdateMenu,DateMenu,
  25.                    BrandsMenu);
  26.   DataWndwNames = (NoDW,BytesDW,WordsDW,IntegersDW,LongIntsDW,RealsDW,HexDW,
  27.                    CharsDW,StringsDW,PathDW,FileMaskDW,DateDW,YearDW);
  28.   HelpWndwNames = (NoHW,WorkWndwHW,TopMenuHW,FilesMenuHW,DirectoryMenuHW,
  29.                    BrandsMenuHW,EnterDataMenuHW,IRSmenuHW,DateMenuHW,
  30.                    UpdateMenuHW,ExecChoiceHW,SingleChoiceHW,MultipleChoiceHW,
  31.                    NumericHW,TextHW);
  32.   HelpLineNames = (NoHL,               { HL - HelpLine;  L  - Last }
  33.                    HLw1,HLw2,HLw3,HLw4,HLw5,HLw6,  { Work window }
  34.                    HLw7,HLw8,HLw9,HLw10,HLwL,
  35.                    HLt1,HLtL,                 { Top menu }
  36.                    HLb1,HLb2,HLb3,HLb4,HLb5,  { Brands submenu }
  37.                    HLb6,HLb7,HLbL,
  38.                    HLf1,HLf2,HLf3,HLf4,HLf5,  { Files submenu }
  39.                    HLf6,HLf7,HLf8,HLf9,HLfL,
  40.                    HLdir1,HLdir2,HLdir3,HLdir4,HLdir5,  { Directory submenu }
  41.                    HLdir6,HLdir7,HLdir8,HLdir9,HLdirL,
  42.                    HLe1,HLe2,HLe3,HLe4,HLe5,  { Enter data submenu }
  43.                    HLe6,HLe7,HLe8,HLe9,HLe10,
  44.                    HLe11,HLe12,HLe13,HLe14,HLeL,
  45.                    HLi1,HLi2,HLiL,            { IRS menu }
  46.                    HLd1,HLd2,HLd3,HLdL,       { Date submenu }
  47.                    HLu1,HLu2,HLuL,            { Update submenu }
  48.                    HLx1,HLx2,HLxL,            { eXecute choice menu }
  49.                    HLs1,HLs2,HLsL,            { Single choice menu }
  50.                    HLm1,HLm2,HLmL,            { Multiple choice menu }
  51.                    HLn1,HLn2,HLnL,            { Numeric data entry window }
  52.                    HLtx1,HLtx2,HLtxL);        { Text data entry window }
  53. { Careful! - Always test your last main menu, submenu, data window, and help
  54.   window for run-time error!  It makes sure you have allotted enough memory
  55.   with your constants.  The compiler cannot check it with these typed scalars.}
  56.  
  57. procedure GetUserPullStats;
  58. procedure GetOverrideStats;
  59. procedure CheckGlobalKeys;
  60.  
  61.  
  62. IMPLEMENTATION
  63.  
  64. { ************************ GetUserPullStats ********************************* }
  65. { The major configurations for all menus go here.  The program first clears   }
  66. { all RECORD values to $00.  The values below will set new values. Therefore, }
  67. { setting RECORD values to "false" or the like is not necessary.              }
  68. { --------------------------------------------------------------------------- }
  69.  
  70. procedure GetUserPullStats;
  71. begin
  72.   LocationWarning:=true;   { If true and a Submenu won't fit, a message is
  73.                              displayed.  (It says "Too many Windows", but this
  74.                              will be changed next time.)  If false, you can
  75.                              override the location without the message. }
  76.  
  77.   { ------------------ Set up your colors and borders here: ---------------- }
  78.   TopMenuAttr:=  black+LightGrayBG;  TopMenuHattr:= white+BlackBG;
  79.  
  80.   MainMenuBattr:=lightgray+BlackBG;
  81.   MainMenuHattr:=black+LightGrayBG;  MainMenuLattr:=yellow+BlackBG;
  82.   MainMenuCattr:=lightgray+BlackBG;
  83.  
  84.   SubMenuWattr:= black+CyanBG;       SubMenuBattr:= black+CyanBG;
  85.  
  86.   if VideoMode=7 then
  87.     begin
  88.       TopMenuLattr :=TopMenuAttr;
  89.       MainMenuWattr:=lightgray+BlackBG;
  90.       SubMenuHattr :=black    +LightGrayBG;
  91.       SubMenuLattr :=white    +BlackBG;
  92.       SubMenuCattr :=lightgray+BlackBG;
  93.     end
  94.   else
  95.     begin
  96.       TopMenuLattr :=red  +LightGrayBG;
  97.       MainMenuWattr:=white+BlackBG;
  98.       SubMenuHattr :=white+BlueBG;
  99.       SubMenuLattr :=white+CyanBG;
  100.       SubMenuCattr :=blue +CyanBG;
  101.     end;
  102.  
  103.   DataWndwWattr:=black+BrownBG;     DataWndwBattr:=black+BrownBG;
  104.   HelpWndwWattr:=black+GreenBG;     HelpWndwBattr:=black+LightGrayBG;
  105.   MsgLineAttr  :=green+BlackBG;     KeyStatusAttr:=black+GreenBG;
  106.  
  107.   Brdr[UserBrdr1].BrdrArray:='╒═╕││└─┘╞═╡╤│┴╪';
  108.   MainMenuBrdr:=UserBrdr1;              SubMenuBrdr :=SingleBrdr;
  109.   DataWndwBrdr:=HdoubleBrdr;            HelpWndwBrdr:=HdoubleBrdr;
  110.   HelpWndwModes:=ZoomMode+ShadowRight;
  111.   RowsBelowHelp:=4;                     RowsBelowMsg:=0;
  112.  
  113.   { ------------------------- Top Menu defaults ----------------------------- }
  114.   TopMenuRow:=2;        { Top menu to appear on row 2 }
  115.   MPulled:=3;           { Main menu title to be HiLited when F10 is pressed. }
  116.   MoreCmdSeq:='ATB';    { Sequence of command letter(s) as if keyed in.  This }
  117.                         { will be the default menu(s) pulled. }
  118.   PullDown:=false;      { Set this true if you want the command sequence}
  119.                         {  to pull down the menus at startup. }
  120.  
  121.   { ------------------- Set up your MainMenu records here: ------------------ }
  122.   MainMenuRow:=3;       { First row of Main menus to appear on screen row 3 }
  123.   with MainMenu[ord(FilesMenu)] do
  124.   begin
  125.     MenuMode:=ExecSingleChoice; SingleFlagLine:=5;
  126.     Title:='Files';
  127.     Line[1]:='Path';               LineMode[1]:=ToDataWndw;
  128.                                    LinkNum [1]:=ord(PathDW);
  129.     Line[2]:='Mask for Directory'; LineMode[2]:=ToDataWndw;
  130.                                    LinkNum [2]:=ord(FileMaskDW);
  131.     Line[3]:='Directory';          LineMode[3]:=ToUserWndw;
  132.     Line[4]:='──────────────────'; LineMode[4]:=Comment;
  133.     Line[5]:='Merge';
  134.     Line[6]:='make Backup';
  135.     Line[7]:='text Out';
  136.     Line[8]:='';                   LineMode[8]:=Partition;
  137.     Line[9]:='Help comment';       LineMode[9]:=Comment;
  138.     MenuLines:=9;                  DefaultLine:=3;
  139.     MsgLineNum:=3;                 HelpWndwNum:=ord(FilesMenuHW);
  140.   end;
  141.   with MainMenu[ord(ColorMenu)] do
  142.   begin
  143.     MenuMode:=SingleChoice;     SingleFlagLine:=2;
  144.     Title:='Color';
  145.     Line[1]:='Blue';
  146.     Line[2]:='Green';
  147.     Line[3]:='Orange';
  148.     Line[4]:='Yellow';
  149.     Line[5]:='Red';
  150.     Line[6]:='Cyan';
  151.     Line[7]:='Ultraviolet';
  152.     MenuLines:=7;               DefaultLine:=5;
  153.     MsgLineNum:=3;              HelpWndwNum:=ord(SingleChoiceHW);
  154.   end;
  155.   with MainMenu[ord(AutoPartsMenu)] do
  156.   begin
  157.     MenuMode:=MultipleChoice;
  158.     Title:='AutoParts';
  159.     Line[1]:='Tires';           LineMode[1]:=ToSubMenu;
  160.                                 LinkNum [1]:=ord(TiresMenu);
  161.     Line[2]:='Radio';           LineMode[2]:=ToSubMenu;
  162.                                 LinkNum [2]:=ord(RadioMenu);
  163.     Line[3]:='Seats';           LineMode[3]:=ToDataWndw;
  164.                                 LinkNum [3]:=ord(BytesDW);
  165.     Line[4]:='Mirrors';         Flagged[4]:=true;
  166.     Line[5]:='Locks';
  167.     Line[6]:='HiBeams';         Flagged[6]:=true;
  168.     Line[7]:='Wheels';
  169.     MenuLines:=7;               DefaultLine:=1;
  170.     MsgLineNum:=3;              HelpWndwNum:=ord(MultipleChoiceHW);
  171.   end;
  172.   with MainMenu[ord(EnterDataMenu)] do
  173.   begin
  174.     MenuMode:=MultipleChoice;
  175.     Title:='EnterData';
  176.     Line[1]:='Byte';            LineMode[1]:=ToDataWndw;
  177.                                 LinkNum [1]:=ord(BytesDW);
  178.     Line[2]:='Word';            LineMode[2]:=ToDataWndw;
  179.                                 LinkNum [2]:=ord(WordsDW);
  180.     Line[3]:='Integer';         LineMode[3]:=ToDataWndw;
  181.                                 LinkNum [3]:=ord(IntegersDW);
  182.     Line[4]:='LongInt';         LineMode[4]:=ToDataWndw;
  183.                                 LinkNum [4]:=ord(LongIntsDW);
  184.     Line[5]:='Real';            LineMode[5]:=ToDataWndw;
  185.                                 LinkNum [5]:=ord(RealsDW);
  186.     Line[6]:='Hex';             LineMode[6]:=ToDataWndw;
  187.                                 LinkNum [6]:=ord(HexDW);
  188.     Line[7]:='Character';       LineMode[7]:=ToDataWndw;
  189.                                 LinkNum [7]:=ord(CharsDW);
  190.     Line[8]:='String';          LineMode[8]:=ToDataWndw;
  191.                                 LinkNum [8]:=ord(StringsDW);
  192.     MenuLines:=8;               DefaultLine:=2;
  193.     MsgLineNum:=3;              HelpWndwNum:=ord(EnterDataMenuHW);
  194.   end;
  195.   with MainMenu[ord(OptionsMenu)] do
  196.   begin
  197.     MenuMode:=MultipleChoice;
  198.     Title:='Options';
  199.     Line[1]:='Dual drive';
  200.     Line[2]:='Hard disk';       Flagged[2]:=true;
  201.     Line[3]:='Extended Mem';
  202.     Line[4]:='CGA';             Flagged[4]:=true;
  203.     Line[5]:='VGA';
  204.     Line[6]:='KeyBoard';
  205.     Line[7]:='Price limit';     LineMode[7]:=ToDataWndw;
  206.                                 LinkNum [7]:=ord(IntegersDW);
  207.     MenuLines:=7;               DefaultLine:=1;
  208.     MsgLineNum:=3;              HelpWndwNum:=ord(MultipleChoiceHW);
  209.   end;
  210.   with MainMenu[ord(UtilitiesMenu)] do
  211.   begin
  212.   { MenuMode:=ExecChoice; }     { This is the default }
  213.     Title:='Utilities';
  214.     Line[1]:='Copy   files';
  215.     Line[2]:='Delete files';
  216.     Line[3]:='List   file';
  217.     Line[4]:='Edit   file';
  218.     Line[5]:='Find   file';
  219.     Line[6]:='Rename file';
  220.     Line[7]:='Sort   files';
  221.     MenuLines:=7;               DefaultLine:=2;
  222.     MsgLineNum:=3;              HelpWndwNum:=ord(ExecChoiceHW);
  223.   end;
  224.   with MainMenu[ord(IRSmenu)] do
  225.   begin
  226.   { MenuMode:=ExecChoice; }     { This is the default }
  227.     Title:='IRSaccounting';
  228.     Line[1]:='Date';            LineMode[1]:=ToSubMenu;
  229.                                 LinkNum [1]:=ord(DateMenu);
  230.     Line[2]:='Cost';
  231.     Line[3]:='Revenue';
  232.     Line[4]:='Taxes';
  233.     Line[5]:='Insurance';
  234.     Line[6]:='Update';          LineMode[6]:=ToSubMenu;
  235.                                 LinkNum [6]:=ord(UpdateMenu);
  236.     Line[7]:='Years';           LineMode[7]:=ToDataWndw;
  237.                                 LinkNum [7]:=ord(BytesDW);
  238.     MenuLines:=7;               DefaultLine:=1;
  239.     MsgLineNum:=3;              HelpWndwNum:=ord(IRSmenuHW);
  240.   end;
  241.   with MainMenu[ord(QuitMenu)] do
  242.   begin
  243.   { MenuMode:=ExecChoice; }     { This is the default }
  244.     Title:='Quit';
  245.     Line[1]:='Stay';
  246.     Line[2]:='Quit';
  247.     MenuLines:=2;               DefaultLine:=1;  BackToDefault:=true;
  248.     MsgLineNum:=3;              HelpWndwNum:=ord(ExecChoiceHW);
  249.   end;
  250.  
  251.   { ----------------------- Set up your SubMenus here: --------------------- }
  252.   { Careful! -- indexes to SubMenus must be numbered in order of level; i.e.,
  253.     ALL SubMenus first, ALL SubSubMenus second, ALL SubSubSubMenus, ... etc. }
  254.   with SubMenu[ord(TiresMenu)] do
  255.     begin
  256.       MenuMode:=SingleChoice;     SingleFlagLine:=5;
  257.       Line[1]:='Brands';          LineMode[1]:=ToSubMenu;
  258.                                   LinkNum[1] :=ord(BrandsMenu);
  259.       Line[2]:='Radials';
  260.       Line[3]:='Knobbies';
  261.       Line[4]:='Track';
  262.       Line[5]:='Snow';
  263.       Line[6]:='All-Weather';
  264.       Line[7]:='4-ply';
  265.       MenuLines:=7;               DefaultLine:=1;
  266.       MsgLineNum:=4;              HelpWndwNum:=ord(SingleChoiceHW);
  267.     end;
  268.   with SubMenu[ord(RadioMenu)] do
  269.     begin
  270.       MenuMode:=MultipleChoice;
  271.       Line[1]:='FM Stereo';       Flagged[1]:=true;
  272.       Line[2]:='AM Radio';        Flagged[2]:=true;
  273.       Line[3]:='Tape player';
  274.       Line[4]:='Compact Disc';
  275.       MenuLines:=4;               DefaultLine:=4;
  276.       MsgLineNum:=4;              HelpWndwNum:=ord(MultipleChoiceHW);
  277.     end;
  278.   with SubMenu[ord(DateMenu)] do
  279.     begin
  280.     { MenuMode:=ExecChoice; }     { This is the default }
  281.       Line[1]:='Month';           LineMode[1]:=ToDataWndw;
  282.                                   LinkNum [1]:=ord(DateDW);
  283.       Line[2]:='Day';             LineMode[2]:=ToDataWndw;
  284.                                   LinkNum [2]:=ord(DateDW);
  285.       Line[3]:='Year';            LineMode[3]:=ToDataWndw;
  286.                                   LinkNum [3]:=ord(YearDW);
  287.       MenuLines:=3;               DefaultLine:=1;  BackToDefault:=true;
  288.       MsgLineNum:=4;              HelpWndwNum:=ord(DateMenuHW);
  289.     end;
  290.   with SubMenu[ord(UpdateMenu)] do
  291.     begin
  292.     { MenuMode:=ExecChoice; }     { This is the default }
  293.       Line[1]:='1 process';
  294.       Line[2]:='2 process and pop';
  295.       Line[3]:='3 pop and process';
  296.       Line[4]:='4 pop, process, pull';
  297.       Line[5]:='5 pop, pull to Years';
  298.       Line[6]:='6 pop, pull Radio';
  299.       MenuLines:=6;               DefaultLine:=4;
  300.       MsgLineNum:=4;              HelpWndwNum:=ord(UpdateMenuHW);
  301.     end;
  302.   { Here's a SubSubMenu: }
  303.   with SubMenu[ord(BrandsMenu)] do
  304.     begin
  305.       MenuMode:=SingleChoice;     SingleFlagLine:=2;
  306.       Line[1]:='Michelin';
  307.       Line[2]:='General';
  308.       Line[3]:='Firestone';
  309.       Line[4]:='Bridgestone';
  310.       Line[5]:='WeatherGuard';
  311.       MenuLines:=5;               DefaultLine:=3;
  312.       MsgLineNum:=4;              HelpWndwNum:=ord(BrandsMenuHW);
  313.     end;
  314.  
  315.   { ----------------- Set up your Data Windows here: --------------------- }
  316.   { Justification will default with numbers right justified and string to  }
  317.   { the left if none is specified.                                         }
  318.   AutoNumLock:=true;    { Turns NumLock on with data entry }
  319.   CapsLockCol:=41;      { First column for ' CAPS NUM SCROLL ' on MsgLine. }
  320.   with DataWndw[ord(BytesDW)] do
  321.     begin
  322.       Line[1]:='Currently:';
  323.       Line[2]:='Enter byte:';
  324.     { TypeOfData:=Bytes; }        { This is the default }
  325.       Field:=3;
  326.     { Justify:=Right; }           { This is the default }
  327.       MsgLineNum:=5;              HelpWndwNum:=ord(NumericHW);
  328.     end;
  329.   with DataWndw[ord(WordsDW)] do
  330.     begin
  331.       Line[1]:='Currently:';
  332.       Line[2]:='Enter word:';
  333.       TypeOfData:=Words;
  334.       Field:=5;
  335.     { Justify:=Right; }           { This is the default }
  336.       MsgLineNum:=5;              HelpWndwNum:=ord(NumericHW);
  337.     end;
  338.   with DataWndw[ord(IntegersDW)] do
  339.     begin
  340.       Line[1]:='Currently:';
  341.       Line[2]:='Enter integer:';
  342.       TypeOfData:=Integers;
  343.       Field:=6;
  344.       MsgLineNum:=5;              HelpWndwNum:=ord(NumericHW);
  345.     end;
  346.   with DataWndw[ord(LongIntsDW)] do
  347.     begin
  348.       Line[1]:='Currently:';
  349.       Line[2]:='Enter integer:';
  350.       TypeOfData:=LongInts;
  351.       Field:=11;
  352.       MsgLineNum:=5;              HelpWndwNum:=ord(NumericHW);
  353.     end;
  354.   with DataWndw[ord(RealsDW)] do
  355.     begin
  356.       Line[1]:='Currently:';
  357.       Line[2]:='Enter real:';
  358.       TypeOfData:=Reals;
  359.       Field:=17;
  360.       Decimals:=08;              { Neg value uses R:F.  Pos value - R:F:D. }
  361.       MsgLineNum:=5;              HelpWndwNum:=ord(NumericHW);
  362.     end;
  363.   with DataWndw[ord(CharsDW)] do
  364.     begin
  365.       Line[1]:='Currently:';
  366.       Line[2]:='Enter char:';
  367.       TypeOfData:=Chars;
  368.       Field:=1;
  369.       MsgLineNum:=6;              HelpWndwNum:=ord(TextHW);
  370.     end;
  371.   with DataWndw[ord(HexDW)] do
  372.     begin
  373.       Line[1]:='Currently:';
  374.       Line[2]:='Enter hex:';
  375.       TypeOfData:=UserNums;
  376.       Field:=4;
  377.       MsgLineNum:=6;              HelpWndwNum:=ord(NumericHW);
  378.     end;
  379.   with DataWndw[ord(StringsDW)] do
  380.     begin
  381.       Line[1]:='Currently:';
  382.       Line[2]:='Enter string:';
  383.       TypeOfData:=Strings;
  384.       Field:=25;                 { If field is too large to fit, program
  385.                                    centers it on screen. You can override. }
  386.       MsgLineNum:=6;              HelpWndwNum:=ord(TextHW);
  387.     end;
  388.   with DataWndw[ord(PathDW)] do
  389.     begin
  390.       Line[1]:='Currently:';
  391.       Line[2]:='Enter path:';
  392.       TypeOfData:=UserStrings;
  393.       Field:=45;
  394.       MsgLineNum:=6;              HelpWndwNum:=ord(TextHW);
  395.     end;
  396.  
  397.   DataWndw[ord(FileMaskDW)]:=DataWndw[ord(PathDW)];
  398.   with DataWndw[ord(FileMaskDW)] do
  399.     begin
  400.       Line[2]:='Enter Mask:';
  401.       Field:=12;
  402.     end;
  403.  
  404.   with DataWndw[ord(DateDW)] do
  405.     begin
  406.       Line[1]:='Now:';
  407.       Line[2]:='New:';
  408.     { TypeOfData:=Bytes; }        { This is the default. }
  409.       Field:=2;
  410.       MsgLineNum:=5;              HelpWndwNum:=ord(NumericHW);
  411.     end;
  412.   with DataWndw[ord(YearDW)] do
  413.     begin
  414.       Line[1]:='Now:';
  415.       Line[2]:='New:';
  416.       TypeOfData:=Integers;
  417.       Field:=4;
  418.       MsgLineNum:=5;              HelpWndwNum:=ord(NumericHW);
  419.   end;
  420.  
  421.   { ----------------------- Set up your Help Windows here: ------------------ }
  422.   { HelpWndw[1] is reserved for the Work window. }
  423.   { HelpWndw[2] is reserved for the top menu. }
  424.  
  425.   HelpMsgLineNum:=7;                { Standard message for a Help window }
  426.  
  427.   { For 2 assignments to a record, save code by not using WITH }
  428.   HelpWndw [ord(WorkWndwHW)      ].FirstLine := ord(HLw1);
  429.   HelpWndw [ord(WorkWndwHW)      ].LastLine  := ord(HLwL);
  430.  
  431.   HelpWndw [ord(TopMenuHW)       ].FirstLine := ord(HLt1);
  432.   HelpWndw [ord(TopMenuHW)       ].LastLine  := ord(HLtL);
  433.  
  434.   HelpWndw [ord(FilesMenuHW)     ].FirstLine := ord(HLf1);
  435.   HelpWndw [ord(FilesMenuHW)     ].LastLine  := ord(HLfL);
  436.  
  437.   HelpWndw [ord(DirectoryMenuHW) ].FirstLine := ord(HLdir1);
  438.   HelpWndw [ord(DirectoryMenuHW) ].LastLine  := ord(HLdirL);
  439.  
  440.   HelpWndw [ord(EnterDataMenuHW) ].FirstLine := ord(HLe1);
  441.   HelpWndw [ord(EnterDataMenuHW) ].LastLine  := ord(HLeL);
  442.  
  443.   HelpWndw [ord(BrandsMenuHW)    ].FirstLine := ord(HLb1);
  444.   HelpWndw [ord(BrandsMenuHW)    ].LastLine  := ord(HLbL);
  445.  
  446.   HelpWndw [ord(IRSmenuHW)       ].FirstLine := ord(HLi1);
  447.   HelpWndw [ord(IRSmenuHW)       ].LastLine  := ord(HLiL);
  448.  
  449.   HelpWndw [ord(DateMenuHW)      ].FirstLine := ord(HLd1);
  450.   HelpWndw [ord(DateMenuHW)      ].LastLine  := ord(HLdL);
  451.  
  452.   HelpWndw [ord(UpdateMenuHW)    ].FirstLine := ord(HLu1);
  453.   HelpWndw [ord(UpdateMenuHW)    ].LastLine  := ord(HLuL);
  454.  
  455.   HelpWndw [ord(ExecChoiceHW)    ].FirstLine := ord(HLx1);
  456.   HelpWndw [ord(ExecChoiceHW)    ].LastLine  := ord(HLxL);
  457.  
  458.   HelpWndw [ord(SingleChoiceHW)  ].FirstLine := ord(HLs1);
  459.   HelpWndw [ord(SingleChoiceHW)  ].LastLine  := ord(HLsL);
  460.  
  461.   HelpWndw [ord(MultipleChoiceHW)].FirstLine := ord(HLm1);
  462.   HelpWndw [ord(MultipleChoiceHW)].LastLine  := ord(HLmL);
  463.  
  464.   HelpWndw [ord(NumericHW)       ].FirstLine := ord(HLn1);
  465.   HelpWndw [ord(NumericHW)       ].LastLine  := ord(HLnL);
  466.  
  467.   HelpWndw [ord(TextHW)          ].FirstLine := ord(HLtx1);
  468.   HelpWndw [ord(TextHW)          ].LastLine  := ord(HLtxL);
  469.  
  470.   { ------------------- Set up your Help Lines here: ------------------------ }
  471.   HelpLine[ord(HLw1)]:='              WELCOME TO PULL20.ARC';
  472.   HelpLine[ord(HLw2)]:='These files will enable you to do fully developed';
  473.   HelpLine[ord(HLw3)]:='pull-down menus along with:';
  474.   HelpLine[ord(HLw4)]:='   - Work window(s)';
  475.   HelpLine[ord(HLw5)]:='   - Top, Main, and Multiple Submenus';
  476.   HelpLine[ord(HLw6)]:='     . Each menu can have 1 of 5 menu modes';
  477.   HelpLine[ord(HLw7)]:='     . Each line can have 1 of 7 line modes';
  478.   HelpLine[ord(HLw8)]:='   - Data entry windows';
  479.   HelpLine[ord(HLw9)]:='   - Help windows for each of the above';
  480.   HelpLine[ord(HLw10)]:='   - Pull/Pop remembers last menu';
  481.   HelpLine[ord(HLwL)]:='   - Message lines for prompts and processing';
  482.  
  483.   HelpLine[ord(HLt1)]:='Move cursor and press return OR type a command';
  484.   HelpLine[ord(HLtL)]:='letter.  ESC to return to the Work window.';
  485.  
  486.   HelpLine[ord(HLb1)]:='Notice the number of levels for the menus.  This';
  487.   HelpLine[ord(HLb2)]:='menu is a "Single Choice" menu, but you can choose';
  488.   HelpLine[ord(HLb3)]:='from 1 of 5 menu modes:';
  489.   HelpLine[ord(HLb4)]:='  1. ExecChoice         - process';
  490.   HelpLine[ord(HLb5)]:='  2. ExecSingleChoice   - process and flag';
  491.   HelpLine[ord(HLb6)]:='  3. ExecMultipleChoice - process and toggle flag';
  492.   HelpLine[ord(HLb7)]:='  4. SingleChoice       - flag';
  493.   HelpLine[ord(HLbL)]:='  5. MultipleChoice     - toggle flag';
  494.  
  495.   HelpLine[ord(HLf1)]:='This is a "Execute Single Choice" menu, but there';
  496.   HelpLine[ord(HLf2)]:='are 5 of the 7 possible line modes used here:';
  497.   HelpLine[ord(HLf3)]:='* 1. Choice     - interact with other menu choices';
  498.   HelpLine[ord(HLf4)]:='  2. ExecOnly   - process but do not flag';
  499.   HelpLine[ord(HLf5)]:='* 3. Comment    - bypassed by highlight';
  500.   HelpLine[ord(HLf6)]:='* 4. Partition  - mid-menu border';
  501.   HelpLine[ord(HLf7)]:='* 5. ToDataWndw - pulls data entry window';
  502.   HelpLine[ord(HLf8)]:='  6. ToSubMenu  - pulls next submenu level';
  503.   HelpLine[ord(HLf9)]:='* 7. ToUserWndw - like ExecOnly plus menu symbol';
  504.   HelpLine[ord(HLfL)]:='Any combination of the seven works!';
  505.  
  506.   HelpLine[ord(HLe1)]:='Each data entry window can be tailored to any type';
  507.   HelpLine[ord(HLe2)]:='of data:';
  508.   HelpLine[ord(HLe3)]:='  1. Byte        - 0..255';
  509.   HelpLine[ord(HLe4)]:='  2. Word        - 0..65535';
  510.   HelpLine[ord(HLe5)]:='  3. Integer     - -32768..32767';
  511.   HelpLine[ord(HLe6)]:='  4. LongInt     - -2147483647..2147483647';
  512.   HelpLine[ord(HLe7)]:='  5. Real        - any format';
  513.   HelpLine[ord(HLe8)]:='  6. UserNums    - user defined numbers, like hex';
  514.   HelpLine[ord(HLe9)]:='  7. Char        - one character';
  515.   HelpLine[ord(HLe10)]:='  8. String      - any length';
  516.   HelpLine[ord(HLe11)]:='  9. UserStrings - strings limited by special sets';
  517.   HelpLine[ord(HLe12)]:='Data entry will check validity, range, and user-';
  518.   HelpLine[ord(HLe13)]:='defined limits.   Sets will limit data entry to';
  519.   HelpLine[ord(HLe14)]:='valid characters only.  Field length and labels';
  520.   HelpLine[ord(HLeL)]:='are also user-defined.';
  521.  
  522.   HelpLine[ord(HLi1)]:='This is an "Execute Choice" menu.  But sure to see';
  523.   HelpLine[ord(HLi2)]:='the example of sequential data entry on "Date" and';
  524.   HelpLine[ord(HLiL)]:='menu control on "Update".';
  525.  
  526.   HelpLine[ord(HLd1)]:='This is an "Execute Choice" menu, but there are no';
  527.   HelpLine[ord(HLd2)]:='"choice" lines.  Instead, the lines are all data';
  528.   HelpLine[ord(HLd3)]:='entry lines that have been made to allow either';
  529.   HelpLine[ord(HLdL)]:='random or sequential access.  Start with "Month".';
  530.  
  531.   HelpLine[ord(HLu1)]:='This is an "Execute Choice" menu.  This one will';
  532.   HelpLine[ord(HLu2)]:='show you a few of the possibilities of actually';
  533.   HelpLine[ord(HLuL)]:='controlling the menus themselves.';
  534.  
  535.   HelpLine[ord(HLx1)]:='        This is an "Execute Choice" menu.';
  536.   HelpLine[ord(HLx2)]:='         Notice that there are no flags.';
  537.   HelpLine[ord(HLxL)]:='   "'#240'" means linked SubMenu; "'#250'" - DataWndw.';
  538.  
  539.   HelpLine[ord(HLs1)]:='         This is a "Single Choice" menu.';
  540.   HelpLine[ord(HLs2)]:='          Notice there''s only one flag.';
  541.   HelpLine[ord(HLsL)]:='   "'#240'" means linked SubMenu; "'#250'" - DataWndw.';
  542.  
  543.   HelpLine[ord(HLm1)]:='        This is a "Multiple Choice" menu.';
  544.   HelpLine[ord(HLm2)]:='              Notice several flags.';
  545.   HelpLine[ord(HLmL)]:='   "'#240'" means linked SubMenu; "'#250'" - DataWndw.';
  546.  
  547.   { Directory }
  548.   HelpLine[ord(HLdir1)]:='Directory can optionally default to a closely';
  549.   HelpLine[ord(HLdir2)]:='matching name, if any, in the file name entry';
  550.   HelpLine[ord(HLdir3)]:='field.  Pressing CR replaces the name.  Cursor and';
  551.   HelpLine[ord(HLdir4)]:='letter keys move the highlight:';
  552.   HelpLine[ord(HLdir5)]:='  Letter key  - find name with same first letter';
  553.   HelpLine[ord(HLdir6)]:='  '^X'/'^Y'         - move up/down';
  554.   HelpLine[ord(HLdir7)]:='  Home/End    - move to upper/lower file name';
  555.   HelpLine[ord(HLdir8)]:='  PgUp/PgDn   - move up/down a page';
  556.   HelpLine[ord(HLdir9)]:='  ^Home/^End  - move to top/bottom file name';
  557.   HelpLine[ord(HLdirL)]:='  ^PgUp/^PgDn - move to top/bottom page';
  558.  
  559.   HelpLine[ord(HLn1)]:='This is a numeric scratch pad.  Enter data between';
  560.   HelpLine[ord(HLn2)]:='the symbols.  Only certain characters are valid.';
  561.   HelpLine[ord(HLnL)]:='BS is active.  To clear, ESC+CR. Try to mess up!.';
  562.  
  563.   HelpLine[ord(HLtx1)]:='This is a text scratch pad.  Enter data between';
  564.   HelpLine[ord(HLtx2)]:='the symbols.  Only certain characters are valid.';
  565.   HelpLine[ord(HLtxL)]:='DEL+CR allows a null entry.';
  566.  
  567.   { ------------------ Set up your Message Lines here: ---------------------- }
  568.   { Concatonations here allow source to print on 80 col printer. }
  569.   { MsgLine[1] is reserved as the Work window message line. }
  570.   { MsgLine[2] is reserved as the top menu message line. }
  571.  
  572.   MsgLine[1]:=' F1-help  F2-pull  F10-cmd  ESC-pull    '+
  573.               '                                        ';
  574.   MsgLine[2]:=' F1-help  F2-pop   LTR-cmd  ESC-return  '+
  575.               '        '^[^Z' hilight            CR-select ';
  576.   MsgLine[3]:=' F1-help  F2-pop   LTR-cmd  ESC-return  '+
  577.               '        '^[^Z' menus  '^X^Y'-hilight  CR-select ';
  578.   MsgLine[4]:=' F1-help  F2-pop   LTR-cmd  ESC-return  '+
  579.               '                  '^X^Y'-hilight  CR-select ';
  580.   MsgLine[5]:=' F1-help  F2-pop   F10-cmd  ESC-return  '+
  581.               '                              CR-enter  ';
  582.   MsgLine[6]:=' F1-help  F2-pop            ESC-return  '+
  583.               '                    DEL-null  CR-enter  ';
  584.   MsgLine[7]:=' F1-return         LTR-cmd  ESC-return  '+
  585.               '                                        ';
  586.   MsgLine[8]:=' Processing ...                         '+
  587.               '                                        ';
  588.   MsgLine[9]:=' F1-help  F2-pull  F10-cmd  ESC-pull    '+
  589.               '                              CR-enter  ';
  590.   MsgLine[10]:=' F1-help  F2-pop   F10-top  ESC-return  '+
  591.                '              LTR/'^X^Y'-hilight  CR-select ';
  592.   MsgLine[11]:=' Alt-F-Files  Alt-D-Directory  Alt-P-Pat'+
  593.                'h                            Alt-X-Exit ';
  594.  
  595. { ---------------- Set up your Error Message Lines here: -------------------- }
  596.   { ErrMsgLine[1] is reserved for the Invalid numerical entries. }
  597.  
  598.   ErrMsgLine[1]:=' Invalid entry.             ESC-acknowledge';
  599.   ErrMsgLine[2]:=' Invalid path.  Use [d:][path].  Press ESC.';
  600.   ErrMsgLine[3]:=' $2500 limit.               ESC-acknowledge';
  601.   ErrMsgLine[4]:=' Range is:  -300 >= WorkWndwInteger >= 4000;  Press ESC';
  602.   ErrMsgLine[5]:=' Enter 1..12                ESC-acknowledge';
  603.   ErrMsgLine[6]:=' Enter 1..31                ESC-acknowledge';
  604.   ErrMsgLine[7]:=' Range is:  1960 >= Year >= 2010;  Press ESC';
  605.   ErrMsgLine[8]:=' Limit is 250 file names.   ESC-acknowldege';
  606.  
  607. end;  { procedure GetUserPullStats }
  608.  
  609. { *************************** GetOverrideStats ****************************** }
  610. { You can OVERRIDE the automatic Colors, Sizes, and Locations here.           }
  611. { --------------------------------------------------------------------------- }
  612.  
  613. procedure GetOverrideStats;
  614. begin
  615.   DataWndw[ord(StringsDW)].RowAlt:=12;
  616.   DataWndw[ord(StringsDW)].ColAlt:=18;
  617.  
  618.   with DirectoryMenu do
  619.     begin
  620.       Title:='Directory';
  621.       LinkDir:=Right;
  622.       MenuLines:=CRTrows-7;
  623.       Row:=4;
  624.       Rows:=CRTrows-5;
  625.       with MainMenu[ord(FilesMenu)] do
  626.         DirectoryMenu.Col:=Col+Cols-2;
  627.       Cols:=16;
  628.       Battr:=DataWndwBattr;
  629.       Wattr:=DataWndwWattr;
  630.       Hattr:=yellow;
  631.       Border:=SubMenuBrdr;
  632.       MsgLineNum:=10;
  633.       HelpWndwNum:=ord(DirectoryMenuHW);
  634.     end;
  635.  
  636.   with SubMenu[ord(BrandsMenu)] do
  637.     begin
  638.       Wattr:= black+BrownBG;
  639.       Battr:= black+BrownBG;
  640.       if VideoMode<>7 then
  641.         begin
  642.           Hattr:=yellow+BlackBG;
  643.           Lattr:=yellow+BrownBG;
  644.         end;
  645.     end;
  646.   SubMenu[ord(DateMenu)].LinkDir:=Left;
  647.    { This following changes the command letters on Main Menu 1 to other than
  648.      1st letters.  '#00' is for inaccessible lines. }
  649.   MainMenu[ord(FilesMenu)].CmdLtrs:='PMD'#00'MBO';
  650. end;
  651.  
  652. { ************************* CHECK GLOBAL KEYS ******************************* }
  653. { This procedure gives you the option to add global keys similar to TP4 such  }
  654. { as Alt-R or Alt-F3.  This is for extended keys only.                        }
  655. { --------------------------------------------------------------------------- }
  656.  
  657. const
  658.   AltF    = #33;    { Files menu }
  659.   AltC    = #46;    { Colors menu }
  660.   AltA    = #30;    { AutoParts menu }
  661.   AltE    = #18;    { EnterData menu }
  662.   AltO    = #24;    { Options menu }
  663.   AltU    = #22;    { Utilities menu }
  664.   AltI    = #23;    { IRSaccounting menu }
  665.   AltQ    = #16;    { Quit menu }
  666.   AltD    = #32;    { Directory menu }
  667.   AltP    = #25;    { Path Data entry }
  668.   AltX    = #45;    { Immediately exit program }
  669.  
  670. type SeqStr = string[MaxWndw];
  671.  
  672. procedure SetCmdSeq (NewCmdSeq: SeqStr);
  673. var
  674.   Lmin,Lold,Lnew: byte;
  675.   i:              word;
  676. begin
  677.   Lold:=length(   CmdSeq);
  678.   Lnew:=length(NewCmdSeq);
  679.   if Lnew<Lold then
  680.        Lmin:=Lnew
  681.   else Lmin:=Lold;
  682.   i:=1;
  683.   while (i<=Lmin) and (NewCmdSeq[i]=CmdSeq[i]) do
  684.     inc (i);
  685.   delete (NewCmdSeq,1,pred(i));
  686.   MoreCmdSeq:=NewCmdSeq;
  687.   PopLevels:=Lold-pred(i);
  688. end;
  689.  
  690. { Any of the keys can be modified. PopKey and TopKey1 were defined in
  691.   PullVars.pas. }
  692. procedure CheckGlobalKeys;
  693. begin
  694.   PullDown:=true;
  695.   case Key of
  696.     PopKey:  begin PullDown:=false; PopToWorkWndw:=true; end; { F2 }
  697.     TopKey1: PopToTop:=true;                                  { F10 }
  698.     AltF:    SetCmdSeq ('F');
  699.     AltC:    SetCmdSeq ('C');
  700.     AltA:    SetCmdSeq ('A');
  701.     AltE:    SetCmdSeq ('E');
  702.     AltO:    SetCmdSeq ('O');
  703.     AltU:    SetCmdSeq ('U');
  704.     AltI:    SetCmdSeq ('I');
  705.     AltQ:    SetCmdSeq ('Q');
  706.     AltD:    SetCmdSeq ('FD');
  707.     AltP:    SetCmdSeq ('FP');
  708.     AltX:    begin PopToWorkWndw:=true; Quit:=true; end;
  709.   else PullDown:=false;
  710.   end
  711. end;
  712.  
  713. BEGIN
  714.   AddrGetUserPullStats:=@GetUserPullStats;
  715.   AddrGetOverrideStats:=@GetOverrideStats;
  716.   AddrCheckGlobalKeys :=@CheckGlobalKeys;
  717. END.
  718.