home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / APOG / BORUSR2.ZIP / BOREDIT.PRG < prev    next >
Text File  |  1992-06-29  |  17KB  |  570 lines

  1. *-------------------------------------------------------------------------------
  2. *-- Program.....: BOREDIT.PRG
  3. *-- Programmer..: Ken Mayer
  4. *-- Date........: 06/12/1992
  5. *-- Notes.......: Used to edit data in ATUSER.DBF
  6. *-- Written for.: dBASE IV, 1.1/1.5
  7. *-- Rev. History: 11/26/1991 -- added use of Martin's PICKLIST routine, to
  8. *--                 allow a user to ask for people by STATE. This will bring
  9. *--                 up a list of just those AT/BOR-BBS users for that state.
  10. *--               05/14/1992 -- Added delete routine to THIS, rather than
  11. *--                 having a separate delete routine.
  12. *--               06/12/1992 -- I believe I have cleared up some of the color
  13. *--                 problems in version 1.5 of dBASE that I was having. A few
  14. *--                 other minor changes (like renaming the programs, etc.).
  15. *-------------------------------------------------------------------------------
  16.  
  17. save screen to sEdit
  18. cEdtColor = set("ATTRIBUTES")
  19. clear
  20. x=scrnhead("&cStand2","BOR-BBS Users Database - Search/Update Data")
  21.  
  22. *-- 03/27/1992 -- network() function included to deal with
  23. *--               exclusive/non-exclusive use of database on
  24. *--               a network
  25. if network()
  26.     use atusers excl
  27. else
  28.     use atusers
  29. endif
  30.  
  31. lPgUp = .f.                  && used if user presses <PgUp> in second screen ...
  32.  
  33. *-- window for 'bio' field
  34. define window wBio from 9,10 to 20,79
  35.  
  36. do while .t.                 && loop for menu/search routines
  37.     
  38.     lOk = .f.
  39.     @5,0 clear
  40.     @4,67 clear to 4,79       && clean out any 'deleted' messages that might
  41.                               && be left
  42.     cChoice = VPick(8,30,"~Borland BBS ID~Last Name~State","Search By:",;
  43.                             "Select one, or <Esc> to return to menu",.t.,;
  44.                             "&cStand2,&cStand,&cStand2")
  45.     
  46.     *-- if user pressed <Esc> to exit the popup ...
  47.     if IsBlank(cChoice) && user pressed <Esc>
  48.         exit             && we done
  49.     endif
  50.  
  51.     *-----------------------------------------------------------------------
  52.     *-- Choices from above ...
  53.     *-----------------------------------------------------------------------
  54.     do case
  55.         case cChoice = "B"  && look by AT/BBS Id
  56.         
  57.             cTest = space(9)
  58.             set order to tag borbbs_id
  59.             @10,10 say "Enter BOR BBS Id: " get cTest picture "@!"
  60.             read
  61.             
  62.             *-- check for <Esc> key
  63.             if lastkey() = 27
  64.                 loop
  65.             endif
  66.             
  67.             *-- user press <Enter>? If NOT, look for it ...
  68.             if .not. IsBlank(cTest)
  69.                 seek trim(cTest)
  70.                 lOK = .f.
  71.             else
  72.                 loop
  73.             endif
  74.             
  75.             *-- we didn't find one that matched ...
  76.             if .not. found()
  77.                 x=errormsg("","Could not find record","","&cStand3")
  78.                 loop
  79.             endif
  80.             
  81.             *-- found one, display, if not that one, try another ???
  82.             do while upper(trim(borbbs_id)) = trim(cTest)
  83.             
  84.                 @12,8 SAY "BORBBS ID:" 
  85.                 @12,19 GET Borbbs_id PICTURE "@!" 
  86.                 @13,13 SAY "Name:"
  87.                 @13,19 GET First_name picture "!XXXXXXXXXXXXXXXXXXXXXXXX"
  88.                 @13,45 GET Mi PICTURE "!" message "Middle Initial"
  89.                 @13,47 GET Last_name picture  "!XXXXXXXXXXXXXXXXXXXXXXXX";
  90.                     message "Last Name"
  91.                 @14,8 SAY "Honorific:" 
  92.                 @14,19 GET Honorific PICTURE "!XXXXX";
  93.                     message "Honorific (Mr., Mrs., Ms., Dr., etc.)"
  94.                 clear gets
  95.                 
  96.                 if yesno2(.t.,"BC","Is this the one?","","","&cl_wind1")
  97.                     store .t. to lOK
  98.                     exit
  99.                 else
  100.                     store .f. to lOK
  101.                     skip  && if this ain't it, skip to next record, and
  102.                     loop  && go back and check again ...
  103.                 endif
  104.                 
  105.             enddo
  106.             
  107.         case cChoice = "L"   && check by Last Name
  108.             
  109.             cTest = space(25)
  110.             set order to tag last_name
  111.             @10,10 say "Enter Last Name: " get cTest picture "@!"
  112.             read
  113.             
  114.             *-- check for <Esc> key
  115.             if lastkey() = 27  
  116.                 loop
  117.             endif
  118.             
  119.             *-- user press <Enter>? If NOT, look for it ...
  120.             if .not. IsBlank(cTest)
  121.                 seek trim(cTest)
  122.                 lOK = .f.
  123.             else
  124.                 loop
  125.             endif
  126.             
  127.             *-- we didn't find one that matched ...
  128.             if .not. found()
  129.                 x=errormsg("","Could not find record","","&cl_wind2")
  130.                 loop
  131.             endif
  132.             
  133.             *-- found one, display, if not that one, try another ???
  134.             do while trim(upper(last_name)) = trim(cTest)
  135.             
  136.                 @12,8 SAY "BORBBS ID:" 
  137.                 @12,19 GET Borbbs_id PICTURE "@!" 
  138.                 @13,13 SAY "Name:"
  139.                 @13,19 GET First_name picture "!XXXXXXXXXXXXXXXXXXXXXXXX"
  140.                 @13,45 GET Mi PICTURE "!" message "Middle Initial"
  141.                 @13,47 GET Last_name picture  "!XXXXXXXXXXXXXXXXXXXXXXXX";
  142.                     message "Last Name"
  143.                 @14,8 SAY "Honorific:" 
  144.                 @14,19 GET Honorific PICTURE "!XXXXX";
  145.                     message "Honorific (Mr., Mrs., Ms., Dr., etc.)"
  146.                 clear gets
  147.                 
  148.                 if yesno2(.t.,"BC","Is this the one?","","","&cl_wind1")
  149.                     store .t. to lOK
  150.                     exit
  151.                 else
  152.                     store .f. to lOK
  153.                     skip
  154.                     loop
  155.                 endif
  156.                 
  157.             enddo  && end of search ...
  158.             
  159.         case cChoice = "S"   && state
  160.         
  161.             cTest = space(2)
  162.             set order to tag state
  163.             @10,10 say "Enter State: " get cTest picture "@!"
  164.             read
  165.             
  166.             *-- Check for <Esc> key
  167.             if lastkey() = 27 
  168.                 loop
  169.             endif
  170.             
  171.             *-- user press <Enter>? If NOT, look for it ...
  172.             if .not. IsBlank(cTest)
  173.                 locate for hState = cTest .or. bState = cTest  && home or business
  174.                 lOK = .f.
  175.             else
  176.                 loop
  177.             endif
  178.             
  179.             *-- we didn't find one that matched ...
  180.             if .not. found()
  181.                 x=errormsg("","Could not find record","","&cl_wind2")
  182.                 loop
  183.             endif
  184.             
  185.             *-- now for the fun part ... if here, we found one ... are there
  186.             *-- more?
  187.             nRecNo = recno()
  188.             count to nCount for hState = cTest .or. bState = cTest
  189.             
  190.             if nCount = 1  && if only one record ...
  191.             
  192.                 goto nRecNo
  193.                 @12,8 SAY "BORBBS ID:" 
  194.                 @12,19 GET Borbbs_id PICTURE "@!" 
  195.                 @13,13 SAY "Name:"
  196.                 @13,19 GET First_name picture "!XXXXXXXXXXXXXXXXXXXXXXXX"
  197.                 @13,45 GET Mi PICTURE "!" message "Middle Initial"
  198.                 @13,47 GET Last_name picture  "!XXXXXXXXXXXXXXXXXXXXXXXX";
  199.                     message "Last Name"
  200.                 @14,8 SAY "Honorific:" 
  201.                 @14,19 GET Honorific PICTURE "!XXXXX";
  202.                     message "Honorific (Mr., Mrs., Ms., Dr., etc.)"
  203.                 clear gets
  204.                 
  205.                 if yesno2(.t.,"BC","Is this the one?","","","&cl_wind1")
  206.                     store .t. to lOK
  207.                 else
  208.                     store .f. to lOK
  209.                 endif
  210.     
  211.             else  && there's more than one, bring up a picklist ...
  212.                   && this is a bit slower than I'd like, but since we have to
  213.                   && be flexible enough to deal with the fact that some users
  214.                   && may not want to give either home or state, we need to look
  215.                   && at both business state AND home state (and some might work
  216.                   && across state lines, I suppose ...).
  217.                 set filter to bstate = cTest .or. hstate = cTest
  218.                 set order to last_name
  219.                 go top
  220.                 *-- do a picklist ...
  221.                 save screen to sPick
  222.                 do shadow with 11,7,20,72
  223.                 do picklist with ;
  224.                     "borbbs_id+' │ '+left(first_name,15)+' │ '+left(last_name,15)"+;
  225.                     "+' │ '+iif(len(trim(hcity))>0,hcity,bcity)",;
  226.                     11,7,20,72,"&cstand2","&cStand","DOUBLE"
  227.                 restore screen from sPick
  228.                 release screen sPick
  229.                 set order to
  230.                 if lastkey() = 27  && user pressed <Esc>
  231.                     lOK = .f.       && must not have liked what they saw
  232.                     set filter to
  233.                     loop
  234.                 else
  235.                     lOK = .t.       && ok, this is fine ...
  236.                 endif
  237.                 set filter to
  238.             endif  && nCount = 1
  239.     
  240.     endcase  && type of search
  241.     
  242.     *-- if memvar lOK is false, we still didn't find it ...
  243.     if .not. lOK
  244.         x=errormsg("","Could not find record","","&cl_wind2")
  245.         loop
  246.     endif
  247.     
  248.     *-----------------------------------------------------------------------
  249.     *-- if we go into this loop, we've found a match ...
  250.     *-----------------------------------------------------------------------
  251.     on key label alt-d do delrec  && routine to delete/recall a record
  252.     on key label f2 do memoview   && routine below to deal with VIEWing the memo
  253.     lDone2 = .f.
  254.     
  255.     do while .t.          && main loop once search is complete ...
  256.         
  257.         if lPgUp       && if user pressed <PgUp> to get here, turn it off
  258.             lPgUp = .f.
  259.         endif
  260.         lDone = .f.    && this must be defined SOMEWHERE ...
  261.         
  262.         *-- set deleted flag (on screen)
  263.         if deleted()
  264.             @4,67 say "DELETED" color &cStand3
  265.         else
  266.             @4,67 clear to 4,79
  267.         endif
  268.         
  269.         *-----------------------------------------------------------------------
  270.         *-- SCREEN 1
  271.         *-----------------------------------------------------------------------
  272.         do while .t.      && first screen
  273.             
  274.             @5,0 clear
  275.             
  276.             @  6, 8 SAY "BORBBS ID:" 
  277.             @  6,19 GET Borbbs_id PICTURE "@!" 
  278.             @  7,13 SAY "Name:"
  279.             @  7,19 GET First_name picture "!XXXXXXXXXXXXXXXXXXXXXXXX"
  280.             @  7,45 GET Mi PICTURE "!" message "Middle Initial"
  281.             @  7,47 GET Last_name picture  "!XXXXXXXXXXXXXXXXXXXXXXXX";
  282.                  message "Last Name"
  283.             @  8, 8 SAY "Honorific:" 
  284.             @  8,19 GET Honorific PICTURE "!XXXXX";
  285.                  message "Honorific (Mr., Mrs., Ms., Dr., etc.)"
  286.             @  8,26 say "Bio:"
  287.             @  8,31 get bio window wBio;
  288.                 message;
  289.                 "Interests of user: <Ctrl><Home> = enter/edit,<Ctrl><End> = save, <F2>=view"
  290.             @ 10,10 SAY "Company:" 
  291.             @ 10,19 GET Company message ""
  292.             @ 11,12 SAY "Title:" 
  293.             @ 11,19 GET Title message "Enter Job Title"
  294.             @ 12,10 SAY "Address:" 
  295.             @ 12,19 GET Baddress1 
  296.             @ 13,19 GET Baddress2 message "Enter if second address line necessary";
  297.                 when .not. isblank(bAddress1)
  298.             @ 14,19 GET Bcity message "City"
  299.             @ 14,44 SAY "," 
  300.             @ 14,46 GET Bstate PICTURE "!!" message "State";
  301.                 valid required state(bState) 
  302.             @ 14,50 GET Bzip PICTURE "#####-####" message "Zip"
  303.             @ 15, 7 SAY "Work Phone:" 
  304.             @ 15,19 GET Bphone PICTURE "@R (999) 999-9999" 
  305.             @ 15,36 SAY "Fax:" 
  306.             @ 15,41 GET Fax PICTURE "@R (999) 999-9999" 
  307.             @ 17,13 SAY "Home:" 
  308.             @ 17,19 GET Haddress1 
  309.             @ 18,19 GET Haddress2 message "Enter if second address line necessary";
  310.                 when .not. isblank(hAddress2)
  311.             @ 19,19 GET Hcity message "City"
  312.             @ 19,44 SAY "," 
  313.             @ 19,46 GET Hstate PICTURE "!!" message "State";
  314.                 valid required state(hState)
  315.             @ 19,50 GET Hzip PICTURE "#####-####"  message "Zip"
  316.             @ 20, 7 SAY "Home Phone:" 
  317.             @ 20,19 GET Hphone PICTURE "@R (999) 999-9999" 
  318.             @ 21, 8 SAY "BBS Phone:" 
  319.             @ 21,19 GET Bbsphone PICTURE "@R (999) 999-9999" 
  320.             
  321.             do center with 22,80,"&cStand3",;
  322.                 "Press <Alt>D to "+iif(.not. deleted(),"delete","recall")
  323.             do center with 23,80,"&cStand3",;
  324.                 "Press <PgDn> for next screen"
  325.                 
  326.             read
  327.             
  328.             nI = readkey()
  329.             if nI > 255
  330.                 nI = nI - 256
  331.             endif
  332.             
  333.             *-- if record not changed, and <PgDn>/<Ctrl><End> key was pressed ...
  334.             if readkey() < 255 .and. (lastkey() = 3 .or. lastkey() = 23)
  335.                 lDone = .f.   && just making sure ...
  336.                 exit
  337.             endif
  338.             
  339.             *-- if user pressed <Esc>
  340.             if lastkey() = 27
  341.                 lDone = .t.
  342.                 exit
  343.             endif
  344.             
  345.             *-- check for and process <Ctrl><End>
  346.             if nI+256 = 270  && ^<end> or ^w
  347.                 @22,0 clear
  348.                 cYN = "N"
  349.                 @23,25 say "Finished with this record?" get cYN picture "!";    
  350.                     valid required cYN $ "YN";
  351.                     error chr(7)+"Enter 'Y' or 'N'"
  352.                 read
  353.                 
  354.                 if cYN = "Y"
  355.                     lDone2 = .t.
  356.                     exit
  357.                 else
  358.                     lDone2 = .f.
  359.                     exit
  360.                 endif
  361.             endif
  362.             
  363.             *-- check to see if this is alright
  364.             @22,0 clear
  365.             cYN = "Y"
  366.             @23,25 say "Is this screen ok? " get cYN picture "!";
  367.                 valid required cYN $ "YN";
  368.                 error chr(7)+"Enter 'Y' or 'N'"
  369.             read
  370.             
  371.             *-- if so, exit ...
  372.             if cYN = "Y"
  373.                 exit
  374.             endif
  375.             
  376.         enddo              && end of first screen
  377.         
  378.         *-----------------------------------------------------------------------
  379.         *-- SCREEN 2
  380.         *-----------------------------------------------------------------------
  381.         do while .t.      && second screen
  382.             
  383.             if lDone .or. lDone2   && if <Esc> was pressed in previous screen ...
  384.                 exit
  385.             endif
  386.             
  387.             @5,0 clear
  388.             
  389.             @  6, 8 SAY "BORBBS ID:" 
  390.             @  6,19 get Borbbs_id 
  391.             @  7,13 SAY "Name:" 
  392.             @  7,19 get First_name 
  393.             @  7,45 GET Mi 
  394.             @  7,47 GET Last_name 
  395.             clear gets  && these (above) are display only
  396.             
  397.             @  9, 7 SAY "CompuServe:" 
  398.             @  9,19 GET Compuserve 
  399.             @ 10, 9 SAY "MCI_Mail:" 
  400.             @ 10,19 GET Mci_mail 
  401.             @ 11,12 SAY "GEnie:" 
  402.             @ 11,19 GET Genie 
  403.             @ 12,13 SAY "FIDO:" 
  404.             @ 12,19 GET Fido 
  405.             @ 13, 9 SAY "InterNet:" 
  406.             @ 13,19 GET Internet 
  407.             @ 14,11 SAY "Source:" 
  408.             @ 14,19 GET Source 
  409.             @ 15,10 SAY "Prodigy:" 
  410.             @ 15,19 GET Prodigy 
  411.             @ 16,11 SAY "Delphi:" 
  412.             @ 16,19 GET Delphi 
  413.             @ 17, 3 SAY "America OnLine:" 
  414.             @ 17,19 GET Am_online 
  415.             
  416.             do center with 21,80,"&cStand3","Press <PgUp> for previous screen"
  417.             do center with 22,80,"&cStand3",;
  418.                 "Press <Alt>D to "+iif(.not. deleted(),"delete","recall")
  419.             do center with 23,80,"&cStand3",;
  420.                 "Press <PgDn> or <Ctrl><End> to complete/exit this record"
  421.             read
  422.             
  423.             *-- if user pressed <PgUp>
  424.             if lastkey() = 18
  425.                 lPgUp = .t.
  426.                 exit
  427.             endif
  428.             
  429.             *-- if <Esc>
  430.             if lastkey() = 27
  431.                 lDone = .t.
  432.                 exit
  433.             endif
  434.             
  435.             *-- ask if screen ok
  436.             @21,0 clear
  437.             cYN = "Y"
  438.             @23,25 say "Is this screen ok? " get cYN picture "!";
  439.                 valid required cYN $ "YN";
  440.                 error chr(7)+"Enter 'Y' or 'N'"
  441.             read
  442.             
  443.             *-- if so, exit
  444.             if cYN = "Y"
  445.                 exit
  446.             endif
  447.         
  448.         enddo              && while .t. -- second screen
  449.         
  450.         *--------------------------------------------------------------------
  451.         *-- End of SCREEN Processing
  452.         *--------------------------------------------------------------------
  453.         
  454.         if lDone       && if <Esc> was pressed ...
  455.             exit
  456.         endif
  457.         
  458.         if lPgUp       && user hit <PgUp> on second screen?
  459.             loop
  460.         else
  461.             exit
  462.         endif
  463.         
  464.     enddo  && end of first level loop -- handles <PgUp> ...
  465.     
  466.     on key label alt-d  && turn this off, so we don't get WEIRD results ...
  467.     on key label f2     && turn this off, also ...
  468.     
  469.     *-- check for more records ...
  470.     if yesno(.f.,"More?","Do you wish to edit","another record?",;
  471.         "&cl_wind1")
  472.         loop
  473.     else
  474.         exit
  475.     endif
  476.     
  477. enddo  && while .t.  -- absolute outside loop for menu/search
  478.  
  479. *--------------------------------------------------------------------------
  480. *-- CLEANUP
  481. *--------------------------------------------------------------------------
  482. @22,0 clear
  483. *-- deal with any deleted records ...
  484. count to nCount for deleted()
  485. if nCount > 0
  486.     *-- a little additional code from Joey Carroll (JOEY) -- allow user
  487.     *-- to not HAVE to pack the data at this time ...
  488.     cCount = ltrim(str(nCount))
  489.     if yesno2(.t.,"BC","Your database contains",;
  490.         cCount+" marked deleted record(s).",;
  491.         "Remove them now?","&cl_wind2")
  492.         do center with 23,80,"&cStand3","... Deleting Marked Records ..."
  493.         pack
  494.     endif
  495.     release cCount
  496. endif
  497.  
  498. *-- cleanup
  499. close database
  500. restore screen from sEdit
  501. release screen sEdit
  502. do ReColor with cEdtColor
  503.  
  504. *--------------------------------------------------------------------------
  505. *-- back to menu ...
  506. *--------------------------------------------------------------------------
  507. RETURN
  508.  
  509. *-- Deal with 'deleting' records ...
  510. PROCEDURE DelRec
  511.  
  512.     on key label alt-d  ?? chr(7)  && disallow pressing key until done with this
  513.                                    && routine
  514.     
  515.     if .not. deleted()   && if delete flag is OFF
  516.         if yesno2(.f.,"BC","Delete Record?","Do you really want to",;
  517.             "delete this record?","&cl_wind2")
  518.             delete  && this record
  519.         endif
  520.     else
  521.         if yesno2(.f.,"BC","UnMark Record?","Do you really want to",;
  522.             "undelete this record?","&cl_wind2")
  523.             *-- processing is a bit odd to ensure that the RECALL takes, we must
  524.             *-- move the pointer back and forth ...
  525.             nRec = recno()
  526.             go nRec+iif(nRec > 1,-1,1)
  527.             go nRec
  528.             recall        && <-- this command actually recalls the record ...
  529.             go nRec+iif(nRec > 1,-1,1)
  530.             go nRec
  531.         endif
  532.     endif
  533.     
  534.     *-- set/reset DELETED flag ...
  535.     if deleted()
  536.         @4,67 say "DELETED" color &cStand3
  537.     else
  538.         @4,67 clear to 4,79
  539.     endif
  540.     *-- change message on screen ...
  541.     do center with 22,80,"&cStand3",;
  542.         "Press <Alt>D to "+iif(.not. deleted(),"delete","recall")
  543.         
  544.     on key label alt-d do delrec        && reset ...
  545.  
  546. RETURN 
  547. *-- EoP: DelRec
  548.  
  549. PROCEDURE MemoView   && uses Martin Leon's MEMOPAGR routine (currently residing
  550.                      && in PROC.PRG
  551.     on key label f2 ?? chr(7)
  552.     save screen to sMemoView
  553.     define window wMemotext from 20,10 to 22,70 double color &cl_Wind1
  554.     do shadow with 20,10,22,70 
  555.     activate window wMemoText
  556.     do center with 0,60,"&cStand2","Use arrow keys to scroll, <Esc> when done."
  557.     activate screen
  558.     x=memopagr("bio",9,10,18,77)
  559.     deactivate window wMemoText
  560.     restore screen from sMemoView
  561.     release window wMemoText
  562.     release screen sMemoView
  563.     on key label f2 do memoview
  564.  
  565. RETURN
  566.  
  567. *-------------------------------------------------------------------------------
  568. *-- EoP: BOREDIT.PRG
  569. *-------------------------------------------------------------------------------
  570.