home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a042 / 2.ddi / DEMO / MAIN.PRG < prev    next >
Encoding:
Text File  |  1991-01-22  |  18.1 KB  |  691 lines

  1. * main.prg
  2. * please note that there have been minor modifications to this 
  3. * code since the manual printing.  Specifically, the routines for
  4. * trapping master.dat exclusion, trapping for non entry into the
  5. * new file create routine ( function notempty ), procedure mnameit 
  6. * also had changes to assure that if you somehow manage to get out 
  7. * from the valid in the get-read, you'll get caught emulating a cancel
  8. * button.  Also, I added the window in front of the main loop to catch
  9. * if there were any files on the machine to "open".  Tied with this also,
  10. * is anything using the numoffiles variable.  I've used numoffiles = 0
  11. * to tell cpu to bypass the loop and go directly to create new file using
  12. * the defaults set.
  13.  
  14.  
  15. STORE .T. TO mainloop
  16. SET WINDOW TITLE TO "Client Entry"
  17. SET PROCEDURE TO main
  18. STORE .F. TO isread,isprinter
  19. STORE 0 TO hm,vm,mc,ls,val,ev,count,i_event
  20. STORE "  " TO ls,bt,cswind,openfile,chk,openindex,ck,bt
  21. STORE "  " TO fileopen,xstate,xstate1,lst
  22. STORE .F. TO flopen,new
  23. numoffiles = adir("_*.dbf")
  24. DO menusetup
  25. do checkmasterdat
  26. DECLARE stlist[13]
  27. DO arraysetup
  28. IF ISCOLOR()
  29.    SET GET VIDEO TO 249
  30.    SET READ VIDEO TO 249
  31.    SET EXIT VIDEO TO 249
  32. ENDIF
  33. if numoffiles = 0
  34.       create window "NEW" from 5,5 to 15,40
  35.       beep
  36.       ? "There are no files created."
  37.       ? "Please, begin this demo by  "
  38.       ? "creating at least one database"
  39.       ?
  40.       ? "***"
  41.       for i = 1 to 4
  42.         inkey(1)
  43.         ?? "***"
  44.       next
  45.       close window "NEW"
  46.       val     = 2
  47.       vm      = 1
  48.       hm      = 1
  49. endif
  50. DO WHILE mainloop
  51.    IF flopen
  52.       DO dispdata
  53.    ENDIF
  54.    if numoffiles <> 0
  55.       sit()
  56.    endif
  57.    isread = .F.
  58.    IF val = 1
  59.       DO controlkeys
  60.    ENDIF
  61.    DO CASE
  62.       CASE val = 2
  63.          DO CASE
  64.             CASE hm = 1
  65.                DO CASE
  66.                   CASE vm = 1
  67.                      DO mnameit
  68.                      IF .NOT. EMPTY(openfile)
  69.                         DO filecreate                       
  70.                         IF .NOT. EMPTY(openfile)
  71.                            DO en1
  72.                            flopen = .T.
  73.                            fileopen = namechk("openfile")
  74.                            DO makebackupfile
  75.                            DO opendatafile
  76.                            DO buttonsetup
  77.                         ENDIF   
  78.                      ENDIF   
  79.                   CASE vm = 2
  80.                      openfile = "_       "
  81.                      do while .t.
  82.                         STORE DBFMENU("_*.DBF") TO openfile
  83.                         do case
  84.                            case empty(openfile)
  85.                               exit
  86.                            case substr(openfile,rat("\",openfile)+1,1) = "_"
  87.                               exit
  88.                         endcase
  89.                      enddo
  90.                      IF .NOT. EMPTY(openfile)
  91.                         flopen = .T.
  92.                         fileopen = namechk("openfile")
  93.                         DO makebackupfile
  94.                         DO opendatafile
  95.                         DO buttonsetup
  96.                      ENDIF
  97.                   CASE vm = 3
  98.                      DO savequestion
  99.                      SELECT B
  100.                      USE
  101.                      SELECT A
  102.                      USE
  103.                      DO dis1
  104.                      DO buttonclose
  105.                      @ 0,0 CLEAR
  106.                      flopen = .F.
  107.                      STORE "" TO openindex,openfile,fileopen
  108.                   CASE vm = 5
  109.                      DO savequestion
  110.                   CASE vm = 6
  111.                      flo = openfile
  112.                      openfile = fileopen+SPACE(8-LEN(fileopen))
  113.                      DO mnameit
  114.                      IF EMPTY(openfile)
  115.                         openfile = flo
  116.                      ELSE
  117.                         SELECT A
  118.                         USE
  119.                         DO makesaveas
  120.                         DO restdatafile
  121.                         fileopen = namechk("openfile")
  122.                         USE &openfile
  123.                      ENDIF
  124.                   CASE vm = 8
  125.                      IF flopen
  126.                         DO savequestion
  127.                      ENDIF
  128.                      SELECT B
  129.                      USE
  130.                      SELECT A
  131.                      USE
  132.                      DO dis1
  133.                      mainloop = .F.
  134.                      CLOSE MENU "MAIN"
  135.                ENDCASE
  136.             CASE hm = 2
  137.                DO CASE
  138.                   CASE vm = 1    && Printer
  139.                      xstate = isprint()
  140.                      IF xstate
  141.                         SET DEVICE TO PRINT
  142.                      ELSE
  143.                         DO buttonclose
  144.                         @ 0,0 CLEAR
  145.                      ENDIF   
  146.                      DO clientreport
  147.                      IF xstate
  148.                         SET DEVICE TO SCREEN
  149.                      ELSE   
  150.                         @ 0,0 CLEAR
  151.                         DO buttonsetup
  152.                      ENDIF
  153.                   CASE vm = 2    && Labels
  154.                      DO clientlabels
  155.                ENDCASE
  156.                GO TOP
  157.             CASE hm = 3
  158.                DO about
  159.          ENDCASE
  160.       CASE val = 6
  161.          DO CASE
  162.             CASE bt = " First  " 
  163.                GO TOP
  164.             CASE bt = "  Last  " 
  165.                GO BOTTOM
  166.             CASE bt = "   Next   " 
  167.                SKIP
  168.                IF EOF()
  169.                   GO BOTTOM
  170.                ENDIF
  171.             CASE bt = " Previous " 
  172.                SKIP -1
  173.                IF BOF()
  174.                   GO TOP
  175.                ENDIF
  176.             CASE bt = "  Edit  "
  177.                STORE .T. TO isread  
  178.             CASE bt = " Delete " 
  179.                IF WARNING("DELETE","This will delete this record. Do you wish to proceed?",2) = 1
  180.                   DELETE 
  181.                ENDIF
  182.             CASE bt = "   Add  " 
  183.                STORE .T. TO isread
  184.                APPEND BLANK
  185.             CASE bt = " Search " 
  186.                DO searchfile
  187.          ENDCASE 
  188.    ENDCASE
  189. ENDDO
  190. RETURN
  191.  
  192. PROCEDURE about
  193.    SET WINDOW TYPE TO 33
  194.    CREATE WINDOW "INFORMATION" FROM 5,25 TO 14,55
  195.    @ 0,08 SAY "dBFast/Windows"
  196.    @ 1,06  SAY "Client Entry V1.0"
  197.    @ 3,1 SAY "Written By Kim V. Phillips"
  198.    @ 4,02 SAY "genSoft Development Corp."   
  199.    @ 6,04 SAY "Copyright ⌐ 1990,1991"
  200.    CREATE BUTTON "   OK   " AT 8,11
  201.    DO WHILE .T.
  202.       sit()
  203.       IF bt = "   OK   " .AND. val <> 10
  204.          EXIT
  205.       ENDIF 
  206.    ENDDO
  207.    CLOSE WINDOW "INFORMATION"
  208. RETURN
  209.  
  210. PROCEDURE arraysetup
  211.    stlist[1] = ""
  212.    stlist[11] = "WA"
  213.    stlist[2] = "CA"
  214.    stlist[3] = "ID"
  215.    stlist[4] = "OR"
  216.    stlist[5] = "NV"
  217.    stlist[6] = "AZ"
  218.    stlist[7] = "NM"
  219.    stlist[8] = "MT"
  220.    stlist[9] = "CO"
  221.    stlist[10] = "UT"
  222.    stlist[12] = "TX"
  223.    stlist[13] = "WY"
  224. RETURN
  225.  
  226. PROCEDURE buttonclose
  227.    CLOSE BUTTON "   Next   " 
  228.    CLOSE BUTTON " Previous " 
  229.    CLOSE BUTTON " First  " 
  230.    CLOSE BUTTON "  Last  " 
  231.    CLOSE BUTTON " Delete " 
  232.    CLOSE BUTTON "   Add  " 
  233.    CLOSE BUTTON "  Edit  "
  234.    CLOSE BUTTON " Search " 
  235. RETURN   
  236.  
  237. PROCEDURE buttonsetup
  238.    CREATE BUTTON "   Next   " AT 17,10
  239.    CREATE BUTTON " Previous " AT 19,10
  240.    CREATE BUTTON " First  " AT 17,24
  241.    CREATE BUTTON "  Last  " AT 19,24
  242.    CREATE BUTTON " Delete " AT 17,36
  243.    CREATE BUTTON "   Add  " AT 19,36
  244.    CREATE BUTTON "  Edit  " AT 17,48
  245.    CREATE BUTTON " Search " AT 19,48
  246. RETURN   
  247.  
  248. PROCEDURE checkmasterdat
  249.    if file ( "master.dat" )
  250.        return
  251.    else
  252.     warning( "MASTER.DAT file missing!" , ;
  253.         "This file did not end up in the proper "+chr(13) + ;
  254.         "directory, please recopy it from the" + ;
  255.         chr(13) + "Installation diskette to your" + chr(13) + ;
  256.         "working directory!" , 2 )
  257.     quit
  258.    endif
  259. RETURN
  260.  
  261. PROCEDURE clientreport
  262.    GO TOP
  263.    DO clientheading
  264.    row = 5
  265.    DO WHILE .NOT. EOF()
  266.       DO clientdetail
  267.       SKIP
  268.       INC row
  269.       IF isprinter
  270.          IF row > 59
  271.             EJECT
  272.             DO clientheading
  273.             row = 5
  274.          ENDIF
  275.       ELSE
  276.          IF row > 24
  277.             WAIT
  278.             @ 0,0 CLEAR
  279.             DO clientheading
  280.             row = 5
  281.          ENDIF
  282.       ENDIF
  283.    ENDDO
  284.    WAIT 
  285. RETURN
  286.  
  287. PROCEDURE clientdetail
  288.    @ row, 2 SAY FIRST
  289.    @ row,18 SAY LAST
  290.    @ row,39 SAY CITY
  291.    @ row,60 SAY STATE
  292.    @ row,65 SAY ZIP
  293. RETURN   
  294.  
  295. PROCEDURE clientlabels
  296.    GO TOP
  297.    numoflines = 0
  298.    cont = 0
  299.    DO buttonclose
  300.    DO labelalign
  301.    IF cont = 2
  302.       DO buttonsetup
  303.       RETURN
  304.    ENDIF
  305.    SET CONSOLE OFF
  306.    SET PRINT ON
  307.    PAGELTH(0)
  308.    DO WHILE .NOT. EOF()
  309.       ? 
  310.       ? TRIM(first)+" "+TRIM(last)
  311.       INC numoflines
  312.       IF .NOT. EMPTY(address1)
  313.          ? TRIM(address1) 
  314.          INC numoflines
  315.       ENDIF
  316.       IF .NOT. EMPTY(address2)
  317.          ? TRIM(address2)
  318.          INC numoflines
  319.       ENDIF
  320.       ? TRIM(city)+", "+state+"  "+zip       
  321.       INC numoflines
  322.       DO CASE
  323.          CASE numoflines = 2
  324.             ?
  325.             ?
  326.             ?
  327.          CASE numoflines = 3
  328.             ?
  329.             ?
  330.          CASE numoflines = 4
  331.             ?
  332.       ENDCASE
  333.       SKIP
  334.    ENDDO
  335.    DO buttonsetup
  336.    SET PRINT OFF
  337.    SET CONSOLE ON
  338. RETURN
  339.  
  340. PROCEDURE clientheading
  341.    @ 1, 33 SAY "Client Report"
  342.    @  3, 3 SAY [Name]
  343.    @  3,39 SAY [City]
  344.    @  3,55 SAY [State]
  345.    @  3,62 SAY [Zip Code]
  346. RETURN
  347.  
  348. PROCEDURE controlkeys
  349.    DO CASE
  350.       CASE ls = 14
  351.          val = 2
  352.          hm = 1
  353.          vm = 1
  354.       CASE ls = 15
  355.          val = 2
  356.          hm = 1
  357.          vm = 2
  358.       CASE ls = 19
  359.          val = 2
  360.          hm = 1
  361.          vm = 5
  362.       CASE ls = 24
  363.          val = 2
  364.          hm = 1
  365.          vm = 8
  366.    ENDCASE
  367. RETURN
  368.  
  369. PROCEDURE dismenu
  370.    DISABLE MENU 1 OFF
  371.    DISABLE MENU 2 OFF
  372.    DISABLE MENU 3
  373. RETURN
  374.  
  375. PROCEDURE dispdata
  376.    @  1, 1 SAY [Title]
  377.    @  3, 1 SAY [Client Name]
  378.    @  6, 1 SAY [Address]
  379.    @  10, 1 SAY [City]
  380.    @  10,38 SAY [State]
  381.    @  10,55 SAY [Zip Code]
  382.    IF RECCOUNT() > 0
  383.       IF isread
  384.          @ 1,13 SAY SPACE(4)
  385.          @ 1,13 GET title RADIOBUTTON 'MR.;MRS.;MS.' HORIZONTAL
  386.       ELSE
  387.          @ 1,13 SAY title   
  388.       ENDIF   
  389.       @  3,13 GET first
  390.       @  3,31 GET last
  391.       @  6,13 GET address1
  392.       @  7,13 GET address2
  393.       @  10,13 GET city
  394.       IF isread
  395.          @  10,44 GET state VIEW
  396.          SET LISTBOX TO 521
  397.          @ 05,48 get state LISTBOX @stlist VALID lstval()
  398.       ELSE
  399.          @  10,44 GET state 
  400.       ENDIF   
  401.       @  10,64 GET zip
  402.    ENDIF   
  403. RETURN
  404.  
  405. PROCEDURE dis1
  406.    if numoffiles = 0
  407.       disable menu 1,2 off
  408.    else 
  409. *      numoffiles = 1
  410.       enable menu 1,2 off
  411.    endif
  412.    DISABLE MENU 1,3 OFF
  413.    DISABLE MENU 1,5 OFF
  414.    DISABLE MENU 1,6 OFF
  415.    ENABLE MENU 1,1 OFF
  416.    ENABLE MENU 1,2 OFF
  417.    DISABLE MENU 2 
  418. RETURN
  419.  
  420. PROCEDURE enmenu
  421.    ENABLE MENU 1 OFF
  422.    ENABLE MENU 2 OFF
  423.    ENABLE MENU 3
  424. RETURN
  425.  
  426. PROCEDURE en1
  427.    ENABLE MENU 1,3 OFF
  428.    ENABLE MENU 1,5 OFF
  429.    ENABLE MENU 1,6 OFF
  430.    DISABLE MENU 1,1 OFF
  431.    DISABLE MENU 1,2 OFF
  432.    ENABLE MENU 2 
  433. RETURN
  434.  
  435. PROCEDURE filecreate
  436.    IF .NOT. FILE("MASTER.DAT")
  437.       WARNING("ERROR","We require the file MASTER.DAT to be located in the current directory",1)
  438.       openfile = SPACE(8)
  439.       RETURN
  440.    ENDIF
  441.    COPY FILE master.dat TO &openfile
  442.    SELECT A
  443.    USE &openfile
  444. RETURN
  445.    
  446.  
  447. PROCEDURE labelalign
  448.    DO WHILE .T.
  449.       SET PRINT ON
  450.       DO labeltest
  451.       SET PRINT OFF
  452.       STORE iscorrect("Label Alignment","Are the labels properly aligned?") TO cont
  453.       DO CASE 
  454.          CASE cont = 0 && Yes
  455.             EXIT
  456.          CASE cont = 1  && No
  457.             WARNING("RE-ALIGN"," Re-align the printer and select OK to continue",3)
  458.          CASE cont = 2  && Cancel
  459.             EXIT
  460.       ENDCASE
  461.    ENDDO
  462. RETURN   
  463.  
  464. PROCEDURE labeltest
  465.    SET CONSOLE OFF
  466.    ? "line 1"
  467.    ? "line 2"
  468.    ? "line 3"
  469.    ? "line 4"
  470.    ? "line 5"
  471.    ? "line 6"
  472.    SET CONSOLE ON
  473. RETURN
  474.  
  475. FUNCTION lstval
  476.    REPLACE GET state WITH state
  477. RETURN(.T.)
  478.  
  479. PROCEDURE makebackupfile
  480.    flo = SUBSTR(fileopen,1,AT(".",fileopen)-1)
  481.    IF FILE(flo+".dbt")
  482.       COPY FILE &FLO..DBT TO &FLO..DBO
  483.    ENDIF
  484.    COPY FILE &fileopen TO &flo..OLD
  485. RETURN
  486.  
  487. PROCEDURE makesaveas
  488.    flo = SUBSTR(fileopen,1,AT(".",fileopen)-1)
  489.    flo1 = SUBSTR(openfile,1,AT(".",openfile)-1)
  490.    IF FILE(flo+".dbt")
  491.       COPY FILE &FLO..DBT TO &FLO1..DBT
  492.    ENDIF
  493.    COPY FILE &fileopen TO &flo1..DBF
  494. RETURN
  495.    
  496. PROCEDURE menusetup
  497.    CREATE POPUP MENU "File" FROM "New...  ^N;Open...^O;Close;;Save    ^S;Save As...;;Exit...  ^X" AT 1,1
  498.    CREATE POPUP MENU "Reports" FROM "Client Report;Client Labels" AT 1,1
  499.    CREATE POPUP MENU "Help" FROM "About Client Entry..." AT 1,1
  500.    CREATE PULLDOWN MENU "MAIN" FROM "File","Reports","Help"
  501.    SET MENU TO "MAIN"
  502.    DO dis1
  503. RETURN
  504.  
  505. PROCEDURE mnameit
  506.    SET WINDOW TYPE TO 4
  507.    CREATE WINDOW "FINAME" 4,5 TO 09,50
  508.    CLEAR
  509.    CREATE BUTTON "   OK   " AT 3,30
  510.    CREATE BUTTON " CANCEL " AT 5,30
  511.    STORE ALLTRIM(openfile)+SPACE(7-LEN(ALLTRIM(openfile))) TO openfile
  512.    @ 1,2 SAY "Create File Name:"
  513.    @ 1,20 SAY CURRENTDIR()
  514.    SET BOX ON
  515.    DO WHILE .T.
  516.       @ 3,2 GET openfile PICTURE "@!" valid notempty()
  517.       READ
  518.       @ 4,1 SAY SPACE(29)
  519.       if empty(openfile)
  520.          i_event = 6
  521.          bt      = " CANCEL "
  522.       endif
  523.       IF i_event = 6
  524.          IF bt = " CANCEL "
  525.             CLOSE WINDOW "FINAME"
  526.             openfile = SPACE(7)
  527.             chk = "C"
  528.             RETURN
  529.          ENDIF
  530.       ENDIF
  531.       openfile = "_" + ALLTRIM(openfile)+".DBF"
  532.       IF FILE(openfile)
  533.          @ 5,1 SAY "Name is already in use. Retry"
  534.       ELSE
  535.          numoffiles = 1
  536.          exit
  537.       ENDIF
  538.       STORE SPACE(8) TO openfile
  539.    ENDDO
  540.    CLOSE WINDOW "FINAME"         
  541. RETURN
  542.  
  543. function notempty
  544. if empty(openfile)
  545.     return(.f.)
  546. else
  547.     return(.t.)
  548. endif
  549.  
  550.  
  551. PROCEDURE opendatafile
  552.    SELECT A
  553.    USE &openfile
  554.    STORE STUFF(openfile,AT(".",openfile),4,".NDX") TO openindex
  555.    IF .NOT. FILE(openindex)
  556.       INDEX ON UPPER(last)+UPPER(first) TO &openindex
  557.    ENDIF
  558.    SET INDEX TO &&openindex
  559.    DO en1
  560.    flopen = .T.
  561.  RETURN
  562.  
  563. PROCEDURE restdatafile
  564.    flo = SUBSTR(fileopen,1,AT(".",fileopen)-1)
  565.    IF FILE(flo+".dbt")
  566.       COPY FILE &flo..DBO TO &flo..DBT
  567.    ENDIF
  568.    COPY FILE &flo..OLD TO &fileopen
  569. RETURN
  570.  
  571. PROCEDURE savequestion
  572.    IF WARNING(fileopen,"Do you wish to save this data file?",2) = 0
  573.       DO restdatafile
  574.    ELSE
  575.       SELECT A
  576.       USE
  577.       DO makebackupfile
  578.       SELECT A
  579.       USE &openfile
  580.    ENDIF
  581. RETURN
  582.  
  583. PROCEDURE searchfile
  584.    SET WINDOW TYPE TO 4
  585.    CREATE WINDOW "SEARCH" FROM 5,20 TO 11,60
  586.    @ 0,7 SAY "ENTER NAME TO SEARCH FOR"
  587.    STORE SPACE(15) TO firstname
  588.    STORE SPACE(20) TO lastname
  589.    @ 2,2  SAY "First Name " GET firstname
  590.    @ 4,2  SAY "Last Name  " GET lastname
  591.    READ
  592.    IF .NOT. EMPTY(lastname)
  593.       LOCATE FOR UPPER(lastname)+UPPER(firstname) = UPPER(last)+UPPER(first)
  594.    ENDIF
  595.    CLOSE WINDOW "SEARCH"
  596. RETURN
  597.  
  598. FUNCTION iscorrect
  599.    PARAMETER wtitle,wmessage
  600.    CREATE WINDOW "ISCORRECT" FROM 5,20 TO 12,60
  601.    SET WINDOW TITLE TO wtitle
  602.    CREATE BUTTON " YES " AT 5,7
  603.    CREATE BUTTON " NO " AT 5,17
  604.    CREATE BUTTON "CANCEL" AT 5,26
  605.    LOAD BITMAP MONOQUES.BMP INTO bitmapvar
  606.    @ 0,0 say bitmapvar
  607.    @ POINT 22,60 SAY wmessage
  608.    DO WHILE .T.
  609.       sit()
  610.       IF val = 6
  611.          DO CASE
  612.             CASE bt = " YES "
  613.                retval = 0
  614.             CASE bt = " NO " 
  615.                retval = 1
  616.             CASE bt = "CANCEL"
  617.                retval = 2
  618.          ENDCASE
  619.          EXIT
  620.       ENDIF
  621.    ENDDO 
  622.    CLOSE WINDOW "ISCORRECT"
  623. RETURN(retval)   
  624.  
  625. FUNCTION isprint
  626.    CREATE WINDOW "ISPRINT" FROM 5,20 TO 12,60
  627.    SET WINDOW TITLE TO "Client Report"
  628.    CREATE PICTURE BUTTON "printer" AT 3,10 FROM FILE "monoprnt.bmp"
  629.    CREATE PICTURE BUTTON "screen" AT 3,24 FROM FILE "monoscrn.bmp"
  630.    @ 0,6 SAY "Select where you would like"
  631.    @ 1,6 SAY "     the output sent.      "
  632.    DO WHILE .T.
  633.       SIT()
  634.       IF val = 6
  635.          DO CASE
  636.             CASE bt = "printer"
  637.                log = .T.
  638.                EXIT   
  639.             CASE bt = "screen"
  640.                log = .F.
  641.                EXIT
  642.          ENDCASE
  643.       ENDIF  
  644.    ENDDO
  645.    CLOSE BUTTON "printer"
  646.    CLOSE BUTTON "screen"
  647.    CLOSE WINDOW "ISPRINT" 
  648. RETURN(log)
  649.    
  650. FUNCTION namechk
  651.    PARAMETER namfile
  652.    IF "\" $ &namfile
  653.       STORE UPPER(SUBSTR(&namfile,RAT("\",&namfile)+1,LEN(&namfile)-RAT("\",&namfile))) TO namfile2
  654.    ELSE
  655.       namfile2 = &namfile
  656.    ENDIF   
  657. RETURN(namfile2)
  658.  
  659. FUNCTION sit
  660.    @ 0,0 SAY ""
  661.    IF .NOT. isread                 | if no read is required we strip for
  662.       CLEAR GETS                   | events.
  663.       val1 = -1                    |
  664.       DO WHILE val1 = -1           | do this loop until an event occurs and
  665.          val1 = CHKEVENT()         | changes value from -1.
  666.       ENDDO  
  667.       val = val1                   |
  668.       DO WHILE val1 <> -1          | Now, strip off the top values from the
  669.          i_event = EVENT()         | event stack until it clears itself.
  670.          val1 = CHKEVENT()         | This is neccessary to check for the
  671.          IF val1 <> -1             | multiple events that can occur under windows.
  672.             val = val1             | event() READS the value but does not remove
  673.          ENDIF 
  674.       ENDDO                        | it from the cue where chkevent() does.
  675.    ELSE isread                     | if read, we do not strip because there is
  676.       READ                         | no stack, it just reads the first event.
  677. *      IF lst = 'Y'
  678. *         READ START WITH 7
  679. *         lst = "  "
  680. *      ENDIF
  681.       val = EVENT()
  682.    ENDIF
  683.    hm = HMENU()                   | These are all public variables
  684.    vm = VMENU()                   | that I store values here so that I
  685.    mr = MROW()                    | do not have to clutter up the actual
  686.    mc = MCOL()                    | working code.
  687.    ls = LASTKEY()                 |
  688.    bt = BUTTON()                  |
  689.    cswind = WINDOW()              |
  690. RETURN(.T.)
  691.