home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / dprog131.zip / PROGFORM.TXT < prev    next >
Text File  |  1988-08-07  |  45KB  |  1,915 lines

  1. *%%OPENFROM,SYSNAME
  2. *%%IF,PRG
  3. *%%DOCUMENT,PRG,Main Program
  4. SET ESCAPE OFF
  5. SET STATUS OFF
  6. SET TALK OFF
  7. SET ECHO OFF
  8. SET BELL OFF
  9. SET HEADING OFF
  10. SET SAFETY OFF
  11. SET DEVICE TO SCREEN
  12. CLEAR
  13. *%%SETPROC
  14. PUBLIC DBVersion, UserScrn
  15. *%%DBVERSION
  16. *%%MMLOAD
  17. SELECT A
  18. USE &MainFile
  19. DO IND WITH MainFile, IndxFile, IndxExpr, "ENSURE"
  20. SET FILTER TO .T.
  21. *%%IF,PUB
  22. DO PUB
  23. *%%ENDIF
  24. *%%MMINIT
  25. CLEAR GETS
  26. MHH=MH1
  27. P=0
  28. DO WHILE .T.
  29.    *%%MMSHOW
  30.    @ 24,0
  31.    @ 2,3 SAY DTOC(DATE())
  32.    @ 2,69 SAY Time()
  33.    @p+5,C GET MHH
  34.    CLEAR GETS
  35.    DO WHIL .T.
  36.    o=0
  37.    DO WHIL o<=0
  38.    o=INKE()
  39.    ENDD
  40.    t=0
  41.    @p+5,C SAY MHH
  42.    DO CASE
  43.    CASE o=5
  44.    p=p-1
  45.    CASE o=24
  46.    p=p+1
  47.    CASE o=13
  48.    t=P+1
  49.    OTHE
  50.    t=AT(UPPE(CHR(o)),VK)
  51.    p=IIF(t=0,p,t-1)
  52.    ENDC
  53.    p=IIF(p<0,NOP,p)
  54.    p=IIF(p>NOP,0,p)
  55.    DO CASE
  56.    CASE P=0
  57.    @ 5,C GET MH1
  58.    MHH=MH1
  59.    CASE P=1
  60.    @ 6,C GET MH2
  61.    MHH=MH2
  62.    CASE P=2
  63.    @ 7,C GET MH3
  64.    MHH=MH3
  65.    CASE P=3
  66.    @ 8,C GET MH4
  67.    MHH=MH4
  68.    CASE P=4
  69.    @ 9,C GET MH5
  70.    MHH=MH5
  71.    CASE P=5
  72.    @ 10,C GET MH6
  73.    MHH=MH6
  74.    CASE P=6
  75.    @ 11,C GET MH7
  76.    MHH=MH7
  77.    CASE P=7
  78.    @ 12,C GET MH8
  79.    MHH=MH8
  80.    CASE P=8
  81.    @ 13,C GET MH9
  82.    MHH=MH9
  83.    CASE P=9
  84.    @ 14,C GET MH10
  85.    MHH=MH10
  86.    ENDC
  87.    CLEAR GETS
  88.    IF t>0
  89.    MH_Function=SUBS(VK,t,1)
  90.    EXIT
  91.    ENDI
  92.    ENDD
  93.    DO CASE
  94.       *%%IF,ADD
  95.       CASE MH_Function="A"
  96.          DO ADD
  97.          LOOP
  98.       *%%ENDIF
  99.       *%%IF,UPD
  100.       CASE MH_Function="U"
  101.          IF RECCOUNT()=0
  102.             *%%IF,PRG
  103.             DO WAI WITH 24, 0, "File empty, request denied. "
  104.             *%%ENDIF
  105.             LOOP
  106.          ENDIF
  107.          DO UPD
  108.          LOOP
  109.       *%%ENDIF
  110.       *%%IF,RPT
  111.       CASE MH_Function="R"
  112.          DO RPT
  113.          GO TOP
  114.          LOOP
  115.       *%%ENDIF
  116.       *%%IF,MM
  117.       CASE MH_Function="M"
  118.          DO MM
  119.          GO TOP
  120.          LOOP
  121.       *%%ENDIF
  122.       *%%IF,LAB
  123.       CASE MH_Function="L"
  124.          DO LAB
  125.          GO TOP
  126.          LOOP
  127.       *%%ENDIF
  128.       *%%IF,HLP
  129.       CASE MH_Function="H"
  130.          DO HLP WITH 1
  131.          LOOP
  132.       *%%ENDIF
  133.       CASE MH_Function="P"
  134.          @24,0
  135.          @24,0 SAY "Delete all marked records"
  136.          STORE "N" TO MH_Ans
  137.          @24,30 GET MH_Ans
  138.          READ
  139.          IF UPPER(MH_Ans) = "Y"
  140.             PACK
  141.             GO TOP
  142.          ENDIF
  143.          RELEASE MH_Ans
  144.          LOOP
  145.       CASE MH_Function="I"
  146.          DO IND WITH MainFile, IndxFile, IndxExpr, "REINDEX"
  147.          LOOP
  148.       CASE MH_Function="Q"
  149.          RELEASE MH_Function
  150.          *%%IF,REL
  151.          DO REL
  152.          *%%ENDIF
  153.          CLOSE DATABASES
  154.          CLOSE PROC
  155.          CLEAR
  156.          QUIT
  157.       *%%IF,SRT
  158.       CASE MH_Function="S"
  159.          DO DPSORT
  160.          *%%SETPROC
  161.          USE &MainFile
  162.          DO IND WITH MainFile, IndxFile, IndxExpr, "ENSURE"
  163.          LOOP
  164.       *%%ENDIF
  165.       CASE MH_Function="D"
  166.          RELEASE MH_Function
  167.          *%%IF,REL
  168.          DO REL
  169.          *%%ENDIF
  170.          CLOSE DATABASES
  171.          CLOSE PROC
  172.          CLEAR
  173.          SET ESCAPE ON
  174.          SET STATUS ON
  175.          SET TALK ON
  176.          SET BELL ON
  177.          SET HEADING ON
  178.          SET SAFETY ON
  179.          RETURN
  180.    ENDCASE
  181. ENDDO
  182. RETURN
  183. *%%ENDIF
  184.  
  185. *%%IF,PRG
  186. *%%DOCUMENT,WAI,Wait / Message routine
  187. PROCEDURE WAI
  188. PARA y, x, msg
  189. PRIV dummy
  190. dummy=" "
  191. SET INTE OFF
  192. @Y,X
  193. @Y,X SAY msg+" Press any key to continue..." GET dummy
  194. READ
  195. SET INTE ON
  196. @Y,X
  197. RETU
  198. *%%ENDIF
  199.  
  200. *%%IF,PRG
  201. *%%DOCUMENT,BMU,Parameterized bar menu routine
  202. PROCEDURE BMU
  203. PARA m,s,L,R,p,C
  204. * parameters:
  205. * in:  m(menustr),L(len 1 opt),R(row);
  206. * out: p (pos. in m, global for continuity), C (choice char)
  207. PRIV g,t,o,sc
  208. sc=" "+s
  209. E=LEN(M)/L-1
  210. g=SUBS(m,p*L+1,L)
  211. @r,0 SAY m
  212. @r,p*L GET g
  213. CLEA GETS
  214. t=0
  215. c=" "
  216. DO WHIL c=" "
  217. o=0
  218. DO WHIL o<=0
  219. o=INKE()
  220. ENDD
  221. t=0
  222. DO CASE
  223. CASE o=4.OR.o=32
  224. p=p+1
  225. CASE o=19
  226. p=p-1
  227. CASE o=13
  228. t=p+1
  229. OTHE
  230. t=AT(UPPE(CHR(o)),s)
  231. p=IIF(t=0,p,t-1)
  232. ENDC
  233. p=IIF(p<0,E,p)
  234. p=IIF(p>E,0,p)
  235. C=SUBS(sc,t+1,1)
  236. g=SUBS(m,p*L+1,L)
  237. @r,0 SAY m
  238. @r,p*L GET g
  239. CLEA GETS
  240. ENDD
  241. RETU
  242. *%%ENDIF
  243.  
  244. *%%IF,FMT
  245. *%%DOCUMENT,FMT,Screen Format File
  246. PROCEDURE FMT
  247. *%%FMT
  248. RETURN
  249. *%%ENDIF
  250.  
  251. *%%IF,PUB
  252. *%%DOCUMENT,PUB,Define Public Fields
  253. PROCEDURE PUB
  254. PUBLIC Clipper
  255. *%%PUB
  256. RETURN
  257. *%%ENDIF
  258.  
  259. *%%IF,CAL
  260. *%%DOCUMENT,CAL,Calculate and display Calculated fields
  261. PROCEDURE CAL
  262. PARAMETERS Updating
  263. *%%CAL
  264. RETURN
  265. *%%ENDIF
  266.  
  267. *%%IF,INI
  268. *%%DOCUMENT,INI,Initialize memory fields from Init or empty
  269. PROCEDURE INI
  270. *%%INI
  271. RETURN
  272. *%%ENDIF
  273.  
  274. *%%IF,STO
  275. *%%DOCUMENT,STO,Store file fields to memory variables
  276. PROCEDURE STO
  277. *%%STO
  278. RETURN
  279. *%%ENDIF
  280.  
  281. *%%IF,REP
  282. *%%DOCUMENT,REP,Replace file fields with memory variables
  283. PROCEDURE REP
  284. *%%REP
  285. RETURN
  286. *%%ENDIF
  287.  
  288. *%%IF,REL
  289. *%%DOCUMENT,REL,Release Memory variables
  290. PROCEDURE REL
  291. *%%REL
  292. RETURN
  293. *%%ENDIF
  294.  
  295. *%%IF,ADD
  296. *%%DOCUMENT,ADD,Add New records to file
  297. PROCEDURE ADD
  298. STORE " " TO MH_Wait
  299. IF "DB3+" $ DBVersion
  300.    CALL &UserScrn
  301. ELSE
  302.    CLEAR
  303.    DO DB3
  304. ENDIF
  305. DO WHILE .T.
  306.    *%%IF,INI
  307.    DO INI
  308.    *%%ENDIF
  309.    *%%IF,FMT
  310.    DO FMT
  311.    *%%ENDIF
  312.    @24,0
  313.    @24,0 SAY "Press Ctrl-W without entering data to exit"
  314.    READ
  315.    *%%ADD
  316.       *%%IF,VAL
  317.       DO VAL
  318.       *%%ENDIF
  319.       @24,0
  320.       APPEND BLANK
  321.       *%%IF,CAL
  322.       DO CAL WITH "ALL"
  323.       *%%ENDIF
  324.       *%%IF,REP
  325.       DO REP
  326.       *%%ENDIF
  327.       *%%IF,PRG
  328.       DO WAI WITH 24,0,""
  329.       *%%ENDIF
  330.    ELSE
  331.      EXIT
  332.    ENDIF
  333. ENDDO
  334. RELEASE MH_Wait
  335. RETURN
  336. *%%ENDIF
  337.  
  338. *%%IF,UPD
  339. *%%DOCUMENT,UPD,Search,Update,Edit,Find,Print,Examine file
  340. PROCEDURE UPD
  341. PRIVATE MH_Function, MH_Answer
  342. STORE "N" TO MH_Function
  343. STORE "N" TO MH_Answer
  344. STORE SPACE(65) TO MH_Filt
  345. IF "DB3+" $ DBVersion
  346.    CALL &UserScrn
  347. ELSE
  348.    CLEAR
  349.    DO DB3
  350. ENDIF
  351. DO WHILE .T.
  352.    *%%IF,STO
  353.    DO STO
  354.    *%%ENDIF
  355.    *%%IF,DIS
  356.    DO DIS
  357.    *%%ENDIF
  358.    *%%IF,CAL
  359.    DO CAL WITH "VIRTUAL"
  360.    *%%ENDIF
  361.    IF LEN(TRIM(MH_Filt)) = 0
  362.       @24,55 SAY "    "
  363.    ELSE
  364.       @24,55 SAY "FILT"
  365.    ENDIF
  366.    IF Deleted()
  367.       @24,60 SAY "DEL"
  368.    ELSE
  369.       @24,60 SAY "   "
  370.    ENDIF
  371.    @24,65 SAY Ltrim(Str(RECNO()))+"/"+Ltrim(STR(RECCOUNT()))+"     "
  372.    MH_Lcho=0
  373.    DO BMU WITH "Next Prev Top  Bot  Quit Edit Set  List Find Help Del  ","NPTBQESLFHD",5,24,MH_Lcho,MH_Function
  374.    @24,0 SAY SPACE(55)
  375.    DO CASE
  376.       CASE UPPER(MH_Function) = "N"
  377.       IF .NOT. EOF()
  378.           Skip 1
  379.           IF EOF()
  380.              GO BOTT
  381.           ENDIF
  382.       ENDIF
  383.       LOOP
  384.       CASE UPPER(MH_Function) = "P"
  385.       IF .NOT. BOF()
  386.          SKIP -1
  387.          IF BOF()
  388.             GO TOP
  389.          ENDIF
  390.       ENDIF
  391.       LOOP
  392.       CASE UPPER(MH_Function) = "E"
  393.          *%%IF,STO
  394.          DO STO
  395.          *%%ENDIF
  396.          *%%IF,FMT
  397.          DO FMT
  398.          *%%ENDIF
  399.          READ
  400.          *%%IF,VAL
  401.          DO VAL
  402.          *%%ENDIF
  403.          *%%IF,CAL
  404.          DO CAL WITH "ALL"
  405.          *%%ENDIF
  406.          *%%IF,REP
  407.          DO REP
  408.          *%%ENDIF
  409.          LOOP
  410.       CASE UPPER(MH_Function) = "T"
  411.         GOTO TOP
  412.         LOOP
  413.       CASE UPPER(MH_Function) = "B"
  414.         GOTO BOTTOM
  415.         LOOP
  416.       CASE UPPER(MH_Function) = "D"
  417.          STORE "N" TO MH_Answer
  418.          @24,0
  419.          IF DELETED()
  420.             @24,0 SAY "Recall this record?"
  421.          ELSE
  422.             @24,0 SAY "Delete this record?"
  423.          ENDIF
  424.          @24,22 GET MH_Answer
  425.          READ
  426.          IF UPPER(MH_Answer) = "Y"
  427.             IF DELETED()
  428.                RECALL
  429.             ELSE
  430.                DELETE
  431.             ENDIF
  432.          ENDIF
  433.          LOOP
  434.       CASE UPPER(MH_Function) = "S"
  435.          STORE "N" TO MH_Answer
  436.          STORE MH_Filt TO MH_FiltH
  437.          @24,0
  438.          @24,0 SAY "FILTER: "
  439.          @24,9 GET MH_Filt
  440.          READ
  441.          @24,0
  442.          IF MH_Filt <> MH_FiltH
  443.             IF LEN(TRIM(MH_Filt))<>0
  444.                IF IIF(Clipper,.F.,TYPE(MH_Filt)<>"L")
  445.                   *%%IF,PRG
  446.                   DO Wai WITH 24,0,"Filter expression defective, not usable. "
  447.                   *%%ENDIF
  448.                   MH_Filt=MH_FiltH
  449.                   LOOP
  450.                ENDIF
  451.                SET FILTER TO &MH_Filt
  452.             ELSE
  453.                SET FILTER TO .T.
  454.             ENDIF
  455.             GOTO TOP
  456.             IF EOF()
  457.                *%%IF,PRG
  458.                DO WAI WITH 24,0, "Nothing matches filter! "
  459.                *%%ENDIF
  460.             ENDIF
  461.          ENDIF
  462.          LOOP
  463.       *%%IF,FND
  464.       CASE UPPER(MH_Function) = "F"
  465.         DO FND
  466.         LOOP
  467.       *%%ENDIF
  468.       CASE UPPER(MH_Function) = "Q"
  469.         EXIT
  470.       CASE UPPER(MH_Function) = "L"
  471.         *%%IF,3PLUS
  472.         ON ERROR DO WAI WITH 24,0,"FIX PRINTER!!! "
  473.         *%%ENDIF
  474.         SET DEVICE TO PRINT
  475.         *%%IF,DIS
  476.         DO DIS
  477.         *%%ENDIF
  478.         SET DEVICE TO SCREEN
  479.         *%%IF,3PLUS
  480.         ON ERROR
  481.         *%%ENDIF
  482.         LOOP
  483.       *%%IF,HLP
  484.       CASE UPPER(MH_Function)="H"
  485.         DO HLP WITH 2
  486.         IF "DB3+" $ DBVersion
  487.            CALL &UserScrn
  488.         ELSE
  489.            CLEAR
  490.            DO DB3
  491.         ENDIF
  492.         LOOP
  493.       *%%ENDIF
  494.    ENDCASE
  495. ENDDO
  496. SET FILTER TO .T.
  497. RETURN
  498. *%%ENDIF
  499.  
  500. *%%IF,DIS
  501. *%%DOCUMENT,DIS,Display-only Format file
  502. PROCEDURE DIS
  503. *%%DIS
  504. RETURN
  505. *%%ENDIF
  506.  
  507. *%%IF,FND
  508. *%%DOCUMENT,FND,Find record by key routine
  509. PROCEDURE FND
  510. IF .NOT. Indexed
  511.    *%%IF,PRG
  512.    DO WAI WITH 24, 0, "Database is not indexed. Set a filter. "
  513.    *%%ENDIF
  514.    RETURN
  515. ENDIF
  516. PRIVATE MH_Find, MH_Answer, MH_Rec
  517. @24,0
  518. @24,0 SAY "Enter data to find in open fields"
  519. *%%FND
  520. IF LEN(TRIM(MH_Find)) # 0
  521.    STORE RECNO() TO MH_Rec
  522.    SEEK MH_Find
  523.    IF EOF()
  524.       GOTO MH_Rec
  525.       *%%IF,PRG
  526.       DO WAI WITH 24, 0, "Record Not Found. "
  527.       *%%ENDIF
  528.    ENDIF
  529. ENDIF
  530. @24,0
  531. RETURN
  532. *%%ENDIF
  533.  
  534. *%%IF,RPT
  535. *%%DOCUMENT,RPT,Report module
  536. PROCEDURE RPT
  537. STORE .N. TO MH_Prt
  538. STORE .Y. TO MH_Con
  539. STORE .N. TO MH_Disk
  540. STORE "        " TO MH_Frm
  541. STORE ".T."+SPACE(73) TO MH_Cri
  542. STORE "             " TO MH_DFname
  543. IF "DB3+"$DBVersion
  544.    *%%IF,3PLUS
  545.    CALL DPOUT
  546.    *%%ENDIF
  547. ELSE
  548.    CLEAR
  549.    DO DPO
  550. ENDIF
  551. @5,22 SAY MH_Prt
  552. @6,22 SAY MH_Con
  553. @7,22 SAY MH_Disk
  554. @7,42 SAY MH_DFname
  555. @9,15 SAY MH_Frm
  556. DO WHILE .T.
  557.    @5,22 GET MH_Prt PICTURE "L"
  558.    @6,22 GET MH_Con PICTURE "L"
  559.    @7,22 GET MH_Disk PICTURE "L"
  560.    @7,42 GET MH_Dfname PICTURE "!!!!!!!!!!!!!!"
  561.    @9,15 GET MH_Frm PICTURE "!!!!!!!!"
  562.    READ
  563.    @24,0
  564.    IF MH_Prt .AND. MH_Con
  565.       @24,0 SAY "You must only specify one output device"
  566.       LOOP
  567.    ENDIF
  568.    IF MH_Prt .AND. MH_Disk
  569.       @24,0 SAY "You must only specify one output device"
  570.       LOOP
  571.    ENDIF
  572.    IF MH_Con .AND. MH_Disk
  573.       @24,0 SAY "You must only specify one output device"
  574.       LOOP
  575.    ENDIF
  576.    IF MH_Disk .AND. MH_Dfname = "          "
  577.       @24,0 SAY "You must specify a disk file name"
  578.       LOOP
  579.    ENDIF
  580.    IF MH_Frm = "        "
  581.       @24,0 SAY "You must enter a sort name or 'NOSORT'"
  582.       LOOP
  583.    ENDIF
  584.    EXIT
  585. ENDDO
  586. IF MH_Frm = "NOSORT  "
  587.    STORE .F. TO MH_NdxL
  588.    ELSE
  589.    IF .NOT.(FILE("DPSORT.DBF") .AND. FILE("DPSORT."+IndxExt))
  590.       *%%IF,PRG
  591.       DO WAI WITH 24,0,"DPSORT files not found. "
  592.       *%%ENDIF
  593.       RETURN
  594.    ENDIF
  595.    SELE I
  596.    USE DPSORT INDEX DPSORT
  597.    SEEK MH_Frm
  598.    IF EOF()
  599.       *%%IF,PRG
  600.       DO Wai WITH 24,0, "Sort name not on selection file (DPSORT.DBF). "
  601.       *%%ENDIF
  602.       SELE A
  603.       RETURN
  604.    ENDIF
  605.    STORE SORTCRI TO MH_Cri
  606.    STORE SORTNDX TO MH_NDX
  607.    STORE SORTFRM TO MH_FRM
  608.    STORE .F. TO MH_NdxL
  609.    MH_Srt="*"
  610.    SortOk=.F.
  611.    DO SortChk WITH MH_Srt, MH_NdxL, SortOk
  612.    IF .NOT. SortOk
  613.       *%%IF,PRG
  614.       DO WAI WITH 24,0,"Unknown Sort Field, or Field Type not C,D,N. "
  615.       *%%ENDIF
  616.       RETURN
  617.    ENDIF
  618. ENDIF
  619. @16,13 GET MH_Frm
  620. @19,2  GET MH_Cri
  621. READ
  622. DO WHILE LEN(TRIM(MH_Frm)) = 0
  623.    @24,0 SAY "You must specify a form for REPORTs and LABELS"
  624.    @16,13 GET MH_Frm
  625.    READ
  626. ENDDO
  627. @24,0
  628. DO WHILE IIF(Clipper,.F.,TYPE(MH_Cri)<>"L")
  629.    @24,0 SAY "Criteria NOT a legal expression"
  630.    @19,2 GET MH_Cri
  631.    READ
  632. ENDDO
  633. @24,0
  634. STORE TRIM(MH_Frm)+".FRM" TO MH_work
  635. IF .NOT. FILE(MH_Work)
  636.    *%%IF,PRG
  637.    DO WAI WITH 24,0,"REPORT FORM "+TRIM(MH_Frm)+" not found. "
  638.    *%%ENDIF
  639.    RETURN
  640. ENDIF
  641. IF MH_NdxL
  642.    @24,0
  643.    @24,0 SAY "SELECTING/SORTING DATA! PLEASE WAIT . . . "
  644.    IF MH_Cri=SPACE(76)
  645.    STORE ".T."+SPACE(73) TO MH_Cri
  646.    ENDIF
  647.    IF RECCOUNT()>1
  648.    SORT TO &MH_NDX ON &MH_SRT FOR &MH_Cri
  649.    ELSE
  650.    COPY TO &MH_NDX FOR &MH_Cri
  651.    ENDIF
  652.    SELE J
  653.    USE &MH_NDX
  654. ELSE
  655.     @24,0
  656.     @24,0 SAY "Using Unsorted File"
  657. ENDIF
  658. @24,0
  659. @24,0 SAY "PRODUCING OUTPUT. PLEASE WAIT . . . "
  660. DO CASE
  661.    CASE MH_Con
  662.        REPORT FORM &MH_Frm FOR &MH_Cri
  663.    CASE MH_Prt
  664.         SET CONSOLE OFF
  665.         REPORT FORM &MH_Frm TO PRINT FOR &MH_Cri
  666.         SET CONSOLE ON
  667.    CASE MH_Disk
  668.       SET CONSOLE OFF
  669.       SET ALTERNATE TO &MH_Dfname
  670.       SET ALTERNATE ON
  671.       REPORT FORM &MH_Frm FOR &MH_Cri
  672.       SET ALTERNATE OFF
  673.       CLOSE ALTERNATE
  674.       SET CONSOLE ON
  675. ENDCASE
  676. IF MH_NdxL
  677.    USE
  678. ENDIF
  679. SELE A
  680. RETURN
  681. *%%ENDIF
  682.  
  683. *%%IF,LAB
  684. *%%DOCUMENT,LAB,Label Module
  685. PROCEDURE LAB
  686. STORE .N. TO MH_Prt
  687. STORE .Y. TO MH_Con
  688. STORE .N. TO MH_Disk
  689. STORE "        " TO MH_Frm
  690. STORE ".T."+SPACE(73) TO MH_Cri
  691. STORE "             " TO MH_DFname
  692. IF "DB3+"$DBVersion
  693.    *%%IF,3PLUS
  694.    CALL DPOUT
  695.    *%%ENDIF
  696. ELSE
  697.    CLEAR
  698.    DO DPO
  699. ENDIF
  700. @5,22 SAY MH_Prt
  701. @6,22 SAY MH_Con
  702. @7,22 SAY MH_Disk
  703. @7,42 SAY MH_DFname
  704. @9,15 SAY MH_Frm
  705. DO WHILE .T.
  706.    @5,22 GET MH_Prt PICTURE "L"
  707.    @6,22 GET MH_Con PICTURE "L"
  708.    @7,22 GET MH_Disk PICTURE "L"
  709.    @7,42 GET MH_Dfname PICTURE "!!!!!!!!!!!!!!"
  710.    @9,15 GET MH_Frm PICTURE "!!!!!!!!"
  711.    READ
  712.    @24,0
  713.    IF MH_Prt .AND. MH_Con
  714.       @24,0 SAY "You must only specify one output device"
  715.       LOOP
  716.    ENDIF
  717.    IF MH_Prt .AND. MH_Disk
  718.       @24,0 SAY "You must only specify one output device"
  719.       LOOP
  720.    ENDIF
  721.    IF MH_Con .AND. MH_Disk
  722.       @24,0 SAY "You must only specify one output device"
  723.       LOOP
  724.    ENDIF
  725.    IF MH_Disk .AND. MH_Dfname = "          "
  726.       @24,0 SAY "You must specify a disk file name"
  727.       LOOP
  728.    ENDIF
  729.    IF MH_Frm = "        "
  730.       @24,0 SAY "You must enter a sort name or 'NOSORT'"
  731.       LOOP
  732.    ENDIF
  733.    EXIT
  734. ENDDO
  735. IF MH_Frm = "NOSORT  "
  736.    STORE .F. TO MH_NdxL
  737. ELSE
  738.    IF .NOT.(FILE("DPSORT.DBF") .AND. FILE("DPSORT."+IndxExt))
  739.       *%%IF,PRG
  740.       DO WAI WITH 24,0,"DPSORT files not found. "
  741.       *%%ENDIF
  742.       RETURN
  743.    ENDIF
  744.    SELE I
  745.    USE DPSORT INDEX DPSORT
  746.    SEEK MH_Frm
  747.    IF EOF()
  748.       *%%IF,PRG
  749.       DO Wai WITH 24,0,"Sort name not on selection file (DPSORT.DBF). "
  750.       *%%ENDIF
  751.       SELE A
  752.       RETURN
  753.    ENDIF
  754.    STORE SORTCRI TO MH_Cri
  755.    STORE SORTNDX TO MH_NDX
  756.    STORE SORTFRM TO MH_FRM
  757.    STORE .F. TO MH_NdxL
  758.    MH_Srt="*"
  759.    SortOk=.F.
  760.    DO SortChk WITH MH_Srt, MH_NdxL, SortOk
  761.    IF .NOT. SortOk
  762.       *%%IF,PRG
  763.       DO WAI WITH 24,0,"Unknown Sort Field, or Field Type not C,D,N. "
  764.       *%%ENDIF
  765.       RETURN
  766.    ENDIF
  767. ENDIF
  768. @16,13 GET MH_Frm
  769. @19,2  GET MH_Cri
  770. READ
  771. DO WHILE LEN(TRIM(MH_Frm)) = 0
  772.    @24,0 SAY "You must specify a form for REPORTs and LABELS"
  773.    @16,13 GET MH_Frm
  774.    READ
  775. ENDDO
  776. @24,0
  777. DO WHILE IIF(Clipper,.F.,TYPE(MH_Cri)<>"L")
  778.    @24,0 SAY "Criteria NOT a legal expression"
  779.    @19,2 GET MH_Cri
  780.    READ
  781. ENDDO
  782. @24,0
  783. STORE TRIM(MH_Frm)+".LBL" TO MH_work
  784. IF .NOT. FILE(MH_Work)
  785.    *%%IF,PRG
  786.    DO WAI WITH 24,0,"LABEL FORM "+TRIM(MH_Frm)+" not found. "
  787.    *%%ENDIF
  788.    RETURN
  789. ENDIF
  790. IF MH_NdxL
  791.    @24,0
  792.    @24,0 SAY "SELECTING/SORTING DATA! PLEASE WAIT . . . "
  793.    IF MH_Cri=SPACE(76)
  794.    STORE ".T."+SPACE(73) TO MH_Cri
  795.    ENDIF
  796.    IF RECCOUNT()>1
  797.    SORT TO &MH_NDX ON &MH_SRT FOR &MH_Cri
  798.    ELSE
  799.    COPY TO &MH_NDX FOR &MH_Cri
  800.    ENDIF
  801.    SELE J
  802.    USE &MH_NDX
  803. ELSE
  804.     @24,0
  805.     @24,0 SAY "Using Unsorted File"
  806. ENDIF
  807. @24,0
  808. @24,0 SAY "PRODUCING OUTPUT. PLEASE WAIT . . . "
  809. DO CASE
  810.    CASE MH_Con
  811.        LABEL FORM &MH_Frm FOR &MH_Cri
  812.    CASE MH_Prt
  813.         SET CONSOLE OFF
  814.         LABEL FORM &MH_Frm TO PRINT FOR &MH_Cri
  815.         SET CONSOLE ON
  816.    CASE MH_Disk
  817.       SET CONSOLE OFF
  818.       SET ALTERNATE TO &MH_Dfname
  819.       SET ALTERNATE ON
  820.       LABEL FORM &MH_Frm FOR &MH_Cri
  821.       SET ALTERNATE OFF
  822.       CLOSE ALTERNATE
  823.       SET CONSOLE ON
  824. ENDCASE
  825. IF MH_NdxL
  826.    USE
  827. ENDIF
  828. SELE A
  829. RETURN
  830. *%%ENDIF
  831.  
  832. *%%IF,MM
  833. *%%DOCUMENT,MM,Mail Merge module
  834. PROCEDURE MM
  835. STORE .N. TO MH_Prt
  836. STORE .N. TO MH_Con
  837. STORE .Y. TO MH_Disk
  838. STORE "MMWORK    " TO MH_DFname
  839. STORE "        " TO MH_Frm
  840. STORE "WORDSTAR" TO MH_WP
  841. STORE ".T."+SPACE(73) TO MH_Cri
  842. IF "DB3+"$DBVersion
  843.    *%%IF,3PLUS
  844.    CALL DPOUT
  845.    *%%ENDIF
  846. ELSE
  847.    CLEAR
  848.    DO DPO
  849. ENDIF
  850. @11,2 SAY "Word Processor:"
  851. @7,22 SAY MH_Disk
  852. @7,42 SAY MH_DFname
  853. @9,15 SAY MH_Frm
  854. @11,19 SAY MH_WP
  855. DO WHILE .T.
  856.    @7,42 GET MH_Dfname PICTURE "!!!!!!!!!!"
  857.    @9,15 GET MH_Frm PICTURE "!!!!!!!!"
  858.    @11,19 GET MH_WP PICTURE "!!!!!!!!"
  859.    READ
  860.    @24,0
  861.    IF MH_Disk .AND. MH_Dfname = "          "
  862.       @24,0 SAY "You must enter a disk filename"
  863.       LOOP
  864.    ENDIF
  865.    IF MH_Frm = "        "
  866.       @24,0 SAY "You must enter a sort form or 'NOSORT'"
  867.       LOOP
  868.    ENDIF
  869.    IF .NOT.(MH_WP = "WORDSTAR" .OR. MH_WP = "MSWORD  ")
  870.       @24,0 SAY "Current WP formats are: WORDSTAR, MSWORD"
  871.       LOOP
  872.    ENDIF
  873.    EXIT
  874. ENDDO
  875. IF MH_Frm = "NOSORT  "
  876.    STORE .F. TO MH_NdxL
  877. ELSE
  878.    IF .NOT. (FILE("DPSORT.DBF") .AND. FILE("DPSORT."+IndxExt))
  879.       *%%IF,PRG
  880.       DO WAI WITH 24,0,"DPSORT files not found. "
  881.       *%%ENDIF
  882.       RETURN
  883.    ENDIF
  884.    SELE I
  885.    USE DPSORT INDEX DPSORT
  886.    SEEK MH_Frm
  887.    IF EOF()
  888.       *%%IF,PRG
  889.       DO WAI WITH 24,0,"Sort name not on selection file (DPSORT.DBF). "
  890.       *%%ENDIF
  891.       USE
  892.       SELE A
  893.       RETURN
  894.    ENDIF
  895.    STORE SORTCRI TO MH_Cri
  896.    STORE SORTNDX TO MH_NDX
  897.    STORE .F. TO MH_NdxL
  898.    MH_Srt="*"
  899.    SortOk=.F.
  900.    DO SortChk WITH MH_Srt, MH_NdxL, SortOk
  901.    IF .NOT. SortOk
  902.       *%%IF,PRG
  903.       DO WAI WITH 24,0,"Unknown Sort Field, or Field Type not C,D,N. "
  904.       *%%ENDIF
  905.       RETURN
  906.    ENDIF
  907. ENDIF
  908. @24,0
  909. @19,2 GET MH_Cri
  910. READ
  911. DO WHILE IIF(Clipper,.F.,TYPE(MH_Cri)<>"L")
  912.    @24,0 SAY "Criteria NOT a legal expression"
  913.    @19,2 GET MH_Cri
  914.    READ
  915. ENDDO
  916. @24,0
  917. IF MH_NdxL
  918.    @24,0
  919.    @24,0 SAY "SELECTING/SORTING DATA! PLEASE WAIT . . . "
  920.    IF MH_Cri=SPACE(76)
  921.    STORE ".T."+SPACE(73) TO MH_Cri
  922.    ENDIF
  923.    IF RECCOUNT()>1
  924.    SORT TO &MH_NDX ON &MH_SRT FOR &MH_Cri
  925.    ELSE
  926.    COPY TO &MH_NDX FOR &MH_Cri
  927.    ENDIF
  928.    SELE J
  929.    USE &MH_NDX
  930. ELSE
  931.     @24,0
  932.     @24,0 SAY "Using Unsorted File"
  933. ENDIF
  934. @24,0
  935. @24,0 SAY "PRODUCING OUTPUT. PLEASE WAIT . . . "
  936. IF (.NOT. MH_NdxL) .AND. (LEN(TRIM(MH_Cri)) <> 0)
  937.    LOCATE FOR &MH_Cri
  938. ENDIF
  939. IF EOF()
  940.    *%%IF,PRG
  941.    DO WAI WITH 24,0,"No records meet criteria. "
  942.    *%%ENDIF
  943.    SELE A
  944.    RETURN
  945. ENDIF
  946. *
  947. * Turn on output device
  948. *
  949. SET CONSOLE OFF
  950. STORE TRIM(MH_Dfname)+".DOC" TO MH_Ofn
  951. SET ALTERNATE TO &MH_Ofn
  952. SET ALTERNATE ON
  953. *
  954. * Output field header
  955. *
  956. DO CASE
  957.    CASE MH_WP = "WORDSTAR"
  958.       ?".OP"
  959.       ?".DF "+MH_DFNAME+".DAT"
  960.       ?".RV "
  961.       *%%MMFIELDS
  962.       ?
  963.       SET ALTERNATE OFF
  964.       CLOSE ALTERNATE
  965.       STORE TRIM(MH_Dfname)+".DAT" TO MH_Ofn
  966.       SET ALTERNATE TO &MH_Ofn
  967.       SET ALTERNATE ON
  968.    CASE MH_WP = "MSWORD  "
  969.       ?
  970.       *%%MMFIELDS
  971. ENDCASE
  972. *
  973. * Output Selected data
  974. *
  975. DO WHILE .NOT. EOF()
  976.    DO CASE
  977.       CASE (MH_WP = "WORDSTAR") .OR. (MH_WP = "MSWORD  ")
  978.          ? ""
  979.          *%%MMDATA
  980.    ENDCASE
  981.    IF  MH_NdxL .OR. (LEN(TRIM(MH_Cri)) = 0)
  982.        SKIP
  983.    ELSE
  984.        CONTINUE
  985.    ENDIF
  986. ENDDO
  987. *
  988. * Finish output
  989. *
  990. SET ALTERNATE OFF
  991. CLOSE ALTERNATE
  992. SET CONSOLE ON
  993. IF MH_NdxL
  994.    USE
  995. ENDIF
  996. SELE A
  997. RETURN
  998. *%%ENDIF
  999.  
  1000. *%%IF,VAL
  1001. *%%DOCUMENT,VAL,Validate data module
  1002. PROCEDURE VAL
  1003. *%%VAL
  1004. RETURN
  1005. *%%ENDIF
  1006.  
  1007. *%%IF,HLP
  1008. *%%DOCUMENT,HLP,Give general information
  1009. PROCEDURE HLP
  1010. PARAMETERS What
  1011. *%%HLP
  1012. RETURN
  1013. *%%ENDIF
  1014.  
  1015. *%%IF,PRG
  1016. *%%DOCUMENT,IND,Build/re-build Index module
  1017. PROCEDURE IND
  1018. PARAMETERS DataFile, IndxFile, IndxExpr, action
  1019. IF .NOT. Indexed
  1020.    RETURN
  1021. ENDIF
  1022. USE &DataFile
  1023. @24,0
  1024. IF .NOT. File(IndxFile)
  1025.    @24,0 SAY "Please wait, file is being Indexed . . . "
  1026.    INDEX ON &IndxExpr TO &IndxFile
  1027. ELSE
  1028.    IF action="REINDEX"
  1029.       @24,0 SAY "Please wait, file is being Re-Indexed . . . "
  1030.       REINDEX
  1031.    ENDIF
  1032. ENDIF
  1033. SET INDEX TO &IndxFile
  1034. @24,0
  1035. RETURN
  1036. *%%ENDIF
  1037.  
  1038. *%%IF,PRG*(SRT+RPT+LAB+MM)
  1039. *%%DOCUMENT,SCH,Validate/Verify Sort Fields for Sort routine
  1040. PROCEDURE SortChk
  1041. PARAMETERS MH_Srt, MH_NdxL, SortOK
  1042. PRIVATE sfld, sortf, sorto, SVar
  1043.  SortOK=.T.
  1044.  SELE I
  1045.  USE DPSORT INDEX DPSORT
  1046.  MH_Srt=""
  1047.  sfld=1
  1048.  DO WHILE sfld<=10
  1049.     sortf="SORTF"+LTRIM(STR(sfld))
  1050.     sorto="SORTO"+LTRIM(STR(sfld))
  1051.     SVar=TRIM(&sortf)
  1052.     IF &SORTF <> "       "
  1053.        SELE A
  1054.        IF .NOT. TYPE(SVar)$"CDN"
  1055.           SELE I
  1056.           USE
  1057.           SELE A
  1058.           SortOK=.F.
  1059.           RETURN
  1060.        ENDIF
  1061.        SELE I
  1062.        IF LEN(MH_Srt)=0
  1063.           STORE TRIM(&SORTF)+"/"+&SORTO TO MH_Srt
  1064.        ELSE
  1065.           STORE MH_Srt+", "+TRIM(&SORTF)+"/"+&SORTO TO MH_Srt
  1066.        ENDIF
  1067.        STORE .T. TO MH_NdxL
  1068.      ENDIF
  1069.      sfld=sfld+1
  1070.  ENDDO
  1071.  USE
  1072.  SELE A
  1073. RETURN
  1074. *%%ENDIF
  1075. *%%IF,~(3PLUS)
  1076. *%%MAKEDB3
  1077. *%%ENDIF
  1078. *%%CLOSE
  1079.  
  1080. *%%IF,SRT*PRG
  1081. *%%OPENDIRECT,DPSORT
  1082. *%%DOCUMENT,PRG,Main Menu Program
  1083. * database: DPSORT
  1084. PRIVATE MH_Function, MH_Loop
  1085. SET STATUS OFF
  1086. SET TALK OFF
  1087. SET ECHO OFF
  1088. SET BELL OFF
  1089. SET HEADING OFF
  1090. SET SAFETY OFF
  1091. SET DEVICE TO SCREEN
  1092. SET PROCEDURE TO DPSORT
  1093. SELECT I
  1094. DO IND_ WITH "ENSURE"
  1095. USE DPSORT INDEX DPSORT
  1096. SET FILTER TO
  1097. DO PUB_
  1098. STORE .T. TO MH_Loop
  1099. DO WHILE MH_Loop
  1100.    DO CASE
  1101.       CASE "CLIPPER"$DBVersion
  1102.         *%%IF,CLIPPER
  1103.         CLEAR
  1104.         DO DPMMSRTS
  1105.         *%%ENDIF
  1106.       CASE "DB3+"$DBVersion
  1107.         *%%IF,3PLUS
  1108.         CALL DPMMSORT
  1109.         *%%ENDIF
  1110.       CASE "DB3"$DBVersion
  1111.         *%%IF,DB3
  1112.         CLEAR
  1113.         DO DPMMSRTS
  1114.         *%%ENDIF
  1115.    ENDCASE
  1116.    STORE " " TO MH_Function
  1117.    @ 24,0
  1118.    @ 2,3 SAY DTOC(DATE())
  1119.    @ 2,69 SAY Time()
  1120.    @ 23,47 SAY "Choice:"
  1121.    @ 23,55 GET MH_Function PICT "!"
  1122.    READ
  1123.    DO CASE
  1124.       CASE UPPER(MH_Function)="A"
  1125.          DO ADD_
  1126.          LOOP
  1127.       CASE UPPER(MH_Function)="U"
  1128.         IF RECCOUNT()=0
  1129.            DO WAI_ WITH 24, 0, "File empty, request denied."
  1130.            LOOP
  1131.         ENDIF
  1132.         DO UPD_
  1133.         LOOP
  1134.       CASE UPPER(MH_Function)="I"
  1135.         DO IND_ WITH "REINDEX"
  1136.         LOOP
  1137.       CASE UPPER(MH_Function)="H"
  1138.         DO HLP_ WITH 1
  1139.         LOOP
  1140.       CASE UPPER(MH_Function)="P"
  1141.         @24,0
  1142.         @24,0 SAY "Delete all marked records"
  1143.         PRIVATE MH_Ans
  1144.         STORE "N" TO MH_Ans
  1145.         @24,30 GET MH_Ans PICT "!"
  1146.         READ
  1147.         IF MH_Ans="Y"
  1148.            PACK
  1149.         ENDIF
  1150.         RELEASE MH_Ans
  1151.         LOOP
  1152.       CASE UPPER(MH_Function)="Q"
  1153.         DO REL_
  1154.         CLOSE DATABASES
  1155.         CLEAR
  1156.         QUIT
  1157.       CASE UPPER(MH_Function)="D"
  1158.         DO REL_
  1159.         CLOSE DATABASES
  1160.         RETURN
  1161.       CASE UPPER(mh_function)="R"
  1162.         IF Clipper
  1163.            DO WAI_ WITH 24, 0, "Report Create/Modify not implemented by Clipper."
  1164.            LOOP
  1165.         ENDIF
  1166.         STORE "        " TO MH_Name
  1167.         @24,0
  1168.         @24,0 SAY "Report Name:"
  1169.         @24,14 GET MH_Name
  1170.         READ
  1171.         IF MH_Name <> "        "
  1172.            SELE A
  1173.            *%%IF,~(CLIPPER)
  1174.            MODI REPORT &MH_Name
  1175.            *%%ENDIF
  1176.            SELE I
  1177.         ENDIF
  1178.         LOOP
  1179.       CASE UPPER(mh_function)="L"
  1180.         IF Clipper
  1181.            DO WAI_ WITH 24, 0, "Label Create/Modify not implemented by Clipper."
  1182.            LOOP
  1183.         ENDIF
  1184.         STORE "        " TO MH_Name
  1185.         @24,0
  1186.         @24,0 SAY "Label Name:"
  1187.         @24,14 GET MH_Name
  1188.         READ
  1189.         IF MH_Name <> "        "
  1190.            SELE A
  1191.            *%%IF,~(CLIPPER)
  1192.            MODI LABEL &MH_Name
  1193.            *%%ENDIF
  1194.            SELE I
  1195.         ENDIF
  1196.         LOOP
  1197.    ENDCASE
  1198. ENDDO
  1199. RETURN
  1200.  
  1201. *%%DOCUMENT,IND,Build/ReBuild Index
  1202. PROCEDURE IND_
  1203. PARAMETERS action
  1204. SELE I
  1205. USE DPSORT
  1206. IF (.NOT. FILE("DPSORT"+IIF(Clipper,".NTX",".NDX"))) .OR. action="REINDEX"
  1207.    @24,0
  1208.    @24,0 SAY "Please wait, file is being Indexed"
  1209.    INDEX ON SORTNAM TO DPSORT
  1210.    @24,0
  1211. ENDIF
  1212. SET INDEX TO DPSORT
  1213. RETURN
  1214.  
  1215. *%%DOCUMENT,FMT,Screen Format file
  1216. PROCEDURE FMT_
  1217. PARA Action
  1218. IF action="A"
  1219.    @4,13 GET MA_SORTNAM PICTURE "!!!!!!!!"
  1220. ENDIF
  1221. @4,48 GET MA_SORTNDX PICTURE "!!!!!!!!"
  1222. @4,70 GET MA_SORTFRM PICTURE "!!!!!!!!"
  1223. @5,15 GET MA_SORTDES
  1224. @8,2 GET MA_SORTCRI
  1225. RETURN
  1226.  
  1227. *%%DOCUMENT,PUB,Define Public Fields
  1228. PROCEDURE PUB_
  1229. PUBLIC MA_SORTNAM
  1230. PUBLIC MA_SORTNDX
  1231. PUBLIC MA_SORTFRM
  1232. PUBLIC MA_SORTDES
  1233. PUBLIC MA_SORTCRI
  1234. PUBLIC MA_SORTF1
  1235. PUBLIC MA_SORTO1
  1236. PUBLIC MA_SORTF2
  1237. PUBLIC MA_SORTO2
  1238. PUBLIC MA_SORTF3
  1239. PUBLIC MA_SORTO3
  1240. PUBLIC MA_SORTF4
  1241. PUBLIC MA_SORTO4
  1242. PUBLIC MA_SORTF5
  1243. PUBLIC MA_SORTO5
  1244. PUBLIC MA_SORTF6
  1245. PUBLIC MA_SORTO6
  1246. PUBLIC MA_SORTF7
  1247. PUBLIC MA_SORTO7
  1248. PUBLIC MA_SORTF8
  1249. PUBLIC MA_SORTO8
  1250. PUBLIC MA_SORTF9
  1251. PUBLIC MA_SORTO9
  1252. PUBLIC MA_SORTF10
  1253. PUBLIC MA_SORTO10
  1254. RETURN
  1255.  
  1256. *%%DOCUMENT,CAL,Calculate and Display Calculated Fields
  1257. PROCEDURE CAL_
  1258. RETURN
  1259.  
  1260. *%%DOCUMENT,INT,Initialize Memory fields from Init or empty
  1261. PROCEDURE INT_
  1262. STORE SPACE(8) TO MA_SORTNAM
  1263. STORE "SORTWORK" TO MA_SORTNDX
  1264. STORE SPACE(8) TO MA_SORTFRM
  1265. STORE SPACE(63) TO MA_SORTDES
  1266. STORE ".T."+SPACE(LEN(DPSORT->SORTCRI)-1) TO MA_SORTCRI
  1267. STORE SPACE(7) TO MA_SORTF1
  1268. STORE "A" TO MA_SORTO1
  1269. STORE SPACE(7) TO MA_SORTF2
  1270. STORE "A" TO MA_SORTO2
  1271. STORE SPACE(7) TO MA_SORTF3
  1272. STORE "A" TO MA_SORTO3
  1273. STORE SPACE(7) TO MA_SORTF4
  1274. STORE "A" TO MA_SORTO4
  1275. STORE SPACE(7) TO MA_SORTF5
  1276. STORE "A" TO MA_SORTO5
  1277. STORE SPACE(7) TO MA_SORTF6
  1278. STORE "A" TO MA_SORTO6
  1279. STORE SPACE(7) TO MA_SORTF7
  1280. STORE "A" TO MA_SORTO7
  1281. STORE SPACE(7) TO MA_SORTF8
  1282. STORE "A" TO MA_SORTO8
  1283. STORE SPACE(7) TO MA_SORTF9
  1284. STORE "A" TO MA_SORTO9
  1285. STORE SPACE(7) TO MA_SORTF10
  1286. STORE "A" TO MA_SORTO10
  1287. RETURN
  1288.  
  1289. *%%DOCUMENT,STO,Store file Fields to memory variables
  1290. PROCEDURE STO_
  1291. STORE DPSORT -> SORTNAM to MA_SORTNAM
  1292. STORE DPSORT -> SORTNDX to MA_SORTNDX
  1293. STORE DPSORT -> SORTFRM to MA_SORTFRM
  1294. STORE DPSORT -> SORTDES to MA_SORTDES
  1295. STORE DPSORT -> SORTCRI to MA_SORTCRI
  1296. STORE DPSORT -> SORTF1  to MA_SORTF1
  1297. STORE DPSORT -> SORTO1  to MA_SORTO1
  1298. STORE DPSORT -> SORTF2  to MA_SORTF2
  1299. STORE DPSORT -> SORTO2  to MA_SORTO2
  1300. STORE DPSORT -> SORTF3  to MA_SORTF3
  1301. STORE DPSORT -> SORTO3  to MA_SORTO3
  1302. STORE DPSORT -> SORTF4  to MA_SORTF4
  1303. STORE DPSORT -> SORTO4  to MA_SORTO4
  1304. STORE DPSORT -> SORTF5  to MA_SORTF5
  1305. STORE DPSORT -> SORTO5  to MA_SORTO5
  1306. STORE DPSORT -> SORTF6  to MA_SORTF6
  1307. STORE DPSORT -> SORTO6  to MA_SORTO6
  1308. STORE DPSORT -> SORTF7  to MA_SORTF7
  1309. STORE DPSORT -> SORTO7  to MA_SORTO7
  1310. STORE DPSORT -> SORTF8  to MA_SORTF8
  1311. STORE DPSORT -> SORTO8  to MA_SORTO8
  1312. STORE DPSORT -> SORTF9  to MA_SORTF9
  1313. STORE DPSORT -> SORTO9  to MA_SORTO9
  1314. STORE DPSORT -> SORTF10 to MA_SORTF10
  1315. STORE DPSORT -> SORTO10  to MA_SORTO10
  1316. RETURN
  1317.  
  1318. *%%DOCUMENT,REP,Replace file Fields with memory variables
  1319. PROCEDURE REP_
  1320. REPLACE DPSORT -> SORTNAM WITH MA_SORTNAM
  1321. REPLACE DPSORT -> SORTNDX WITH MA_SORTNDX
  1322. REPLACE DPSORT -> SORTFRM WITH MA_SORTFRM
  1323. REPLACE DPSORT -> SORTDES WITH MA_SORTDES
  1324. REPLACE DPSORT -> SORTCRI WITH MA_SORTCRI
  1325. REPLACE DPSORT -> SORTF1  WITH MA_SORTF1
  1326. REPLACE DPSORT -> SORTO1  WITH MA_SORTO1
  1327. REPLACE DPSORT -> SORTF2  WITH MA_SORTF2
  1328. REPLACE DPSORT -> SORTO2  WITH MA_SORTO2
  1329. REPLACE DPSORT -> SORTF3  WITH MA_SORTF3
  1330. REPLACE DPSORT -> SORTO3  WITH MA_SORTO3
  1331. REPLACE DPSORT -> SORTF4  WITH MA_SORTF4
  1332. REPLACE DPSORT -> SORTO4  WITH MA_SORTO4
  1333. REPLACE DPSORT -> SORTF5  WITH MA_SORTF5
  1334. REPLACE DPSORT -> SORTO5  WITH MA_SORTO5
  1335. REPLACE DPSORT -> SORTF6  WITH MA_SORTF6
  1336. REPLACE DPSORT -> SORTO6  WITH MA_SORTO6
  1337. REPLACE DPSORT -> SORTF7  WITH MA_SORTF7
  1338. REPLACE DPSORT -> SORTO7  WITH MA_SORTO7
  1339. REPLACE DPSORT -> SORTF8  WITH MA_SORTF8
  1340. REPLACE DPSORT -> SORTO8  WITH MA_SORTO8
  1341. REPLACE DPSORT -> SORTF9  WITH MA_SORTF9
  1342. REPLACE DPSORT -> SORTO9  WITH MA_SORTO9
  1343. REPLACE DPSORT -> SORTF10 WITH MA_SORTF10
  1344. REPLACE DPSORT -> SORTO10 WITH MA_SORTO10
  1345. RETURN
  1346.  
  1347. *%%DOCUMENT,REL,Release Memory variables
  1348. PROCEDURE REL_
  1349. RELEASE MA_SORTNAM
  1350. RELEASE MA_SORTNDX
  1351. RELEASE MA_SORTFRM
  1352. RELEASE MA_SORTDES
  1353. RELEASE MA_SORTCRI
  1354. RELEASE MA_SORTF1
  1355. RELEASE MA_SORTO1
  1356. RELEASE MA_SORTF2
  1357. RELEASE MA_SORTO2
  1358. RELEASE MA_SORTF3
  1359. RELEASE MA_SORTO3
  1360. RELEASE MA_SORTF4
  1361. RELEASE MA_SORTO4
  1362. RELEASE MA_SORTF5
  1363. RELEASE MA_SORTO5
  1364. RELEASE MA_SORTF6
  1365. RELEASE MA_SORTO6
  1366. RELEASE MA_SORTF7
  1367. RELEASE MA_SORTO7
  1368. RELEASE MA_SORTF8
  1369. RELEASE MA_SORTO8
  1370. RELEASE MA_SORTF9
  1371. RELEASE MA_SORTO9
  1372. RELEASE MA_SORTF10
  1373. RELEASE MA_SORTO10
  1374. RETURN
  1375.  
  1376. *%%DOCUMENT,ADD,Add new records to file
  1377. PROCEDURE ADD_
  1378. PRIVATE MH_Loop, MH_Wait
  1379. STORE .T. TO MH_Loop
  1380. STORE " " TO MH_Wait
  1381. DO CASE
  1382.    CASE "CLIPPER"$DBVersion
  1383.      *%%IF,CLIPPER
  1384.      CLEAR
  1385.      DO DPSORTS
  1386.      *%%ENDIF
  1387.    CASE "DB3+"$DBVersion
  1388.      *%%IF,3PLUS
  1389.      CALL DPSORT
  1390.      *%%ENDIF
  1391.    CASE "DB3"$DBVersion
  1392.      *%%IF,DB3
  1393.      CLEAR
  1394.      DO DPSORTS
  1395.      *%%ENDIF
  1396. ENDCASE
  1397. DO WHILE MH_Loop
  1398.    DO INT_
  1399.    DO FMT_ WITH "A"
  1400.    @24,0
  1401.    @24,0 SAY "Press Ctrl-W without entering data to exit"
  1402.    READ
  1403.    IF LEN(TRIM(MA_SORTNAM)) <> 0
  1404.        SEEK MA_SORTNAM
  1405.        @ 24,0
  1406.        DO WHILE .NOT. EOF()
  1407.           ?? CHR(7)
  1408.           @24,0 SAY "Sort Name is a duplicate; change it to allow the addition."
  1409.           @04,13 GET MA_SORTNAM PICTURE "!!!!!!!!"
  1410.           READ
  1411.           SEEK MA_SORTNAM
  1412.        ENDDO
  1413.        @ 24,0
  1414.        DO VAL_
  1415.        APPEND BLANK
  1416.        DO REP_
  1417.        DO CAL_
  1418.        DO WAI_ WITH 24, 0, ""
  1419.    ELSE
  1420.      STORE .F. TO MH_Loop
  1421.    ENDIF
  1422. ENDDO
  1423. RELEASE MH_Loop,MH_Wait
  1424. RETURN
  1425.  
  1426. *%%DOCUMENT,UPD,Search Update Edit Find Print Examine file
  1427. PROCEDURE UPD_
  1428. PRIVATE MH_Loop, MH_Function, MH_Answer
  1429. STORE .T. TO MH_Loop
  1430. STORE "N" TO MH_Function
  1431. STORE "N" TO MH_Answer
  1432. STORE SPACE(70) TO MH_Filt
  1433. STORE "Next,Previous,Top,Bottom,Quit,Help,Delete,Edit,More " TO MH_Menu1
  1434. STORE "Find,Set filter,pRint,More                          " TO MH_Menu2
  1435. STORE MH_Menu1 TO MH_Menu
  1436. DO CASE
  1437.    CASE "CLIPPER"$DBVersion
  1438.      *%%IF,CLIPPER
  1439.      CLEAR
  1440.      DO DPSORTS
  1441.      *%%ENDIF
  1442.    CASE "DB3+"$DBVersion
  1443.      *%%IF,3PLUS
  1444.      CALL DPSORT
  1445.      *%%ENDIF
  1446.    CASE "DB3"$DBVersion
  1447.      *%%IF,DB3
  1448.      CLEAR
  1449.      DO DPSORTS
  1450.      *%%ENDIF
  1451. ENDCASE
  1452. DO WHILE MH_Loop
  1453.    DO STO_
  1454.    DO DIS_
  1455.    DO CAL_
  1456.    @24,0 SAY MH_Menu
  1457.    @24,53 GET MH_Function PICT "!"
  1458.    IF LEN(TRIM(MH_Filt)) = 0
  1459.       @24,55 SAY "    "
  1460.    ELSE
  1461.       @24,55 SAY "FILT"
  1462.    ENDIF
  1463.    IF Deleted()
  1464.       @24,60 SAY "DEL"
  1465.    ELSE
  1466.       @24,60 SAY "   "
  1467.    ENDIF
  1468.    @24,65 SAY Ltrim(Str(RECNO()))+"/"+Ltrim(STR(RECCOUNT()))+"     "
  1469.    READ
  1470.    DO CASE
  1471.       CASE UPPER(MH_Function) = "N"
  1472.            IF .NOT. EOF()
  1473.               Skip 1
  1474.               IF EOF()
  1475.                  GO BOTT
  1476.               ENDIF
  1477.            ENDIF
  1478.            LOOP
  1479.       CASE UPPER(MH_Function) = "P"
  1480.            IF .NOT. BOF()
  1481.               SKIP -1
  1482.               IF BOF()
  1483.                  GO TOP
  1484.               ENDIF
  1485.            ENDIF
  1486.            LOOP
  1487.       CASE UPPER(MH_Function) = "E"
  1488.            DO STO_
  1489.            DO FMT_ WITH "E"
  1490.            READ
  1491.            IF READKEY()=12 .OR. READKEY()=268
  1492.               LOOP
  1493.            ENDIF
  1494.            DO VAL_
  1495.            DO CAL_
  1496.            DO REP_
  1497.            LOOP
  1498.       CASE UPPER(MH_Function) = "T"
  1499.            GOTO TOP
  1500.            LOOP
  1501.       CASE UPPER(MH_Function) = "B"
  1502.            GOTO BOTTOM
  1503.            LOOP
  1504.       CASE UPPER(MH_Function) = "D"
  1505.            STORE "N" TO MH_Answer
  1506.            @24,0
  1507.            IF DELETED()
  1508.               @24,0 SAY "Recall this record?"
  1509.            ELSE
  1510.               @24,0 SAY "Delete this record?"
  1511.            ENDIF
  1512.            @24,22 GET MH_Answer
  1513.            READ
  1514.            IF UPPER(MH_Answer) = "Y"
  1515.               IF DELETED()
  1516.                  RECALL
  1517.               ELSE
  1518.                  DELETE
  1519.               ENDIF
  1520.            ENDIF
  1521.            LOOP
  1522.       CASE UPPER(MH_Function) = "S"
  1523.            STORE "N" TO MH_Answer
  1524.            STORE MH_Filt TO MH_FiltH
  1525.            @24,0
  1526.            @24,0 SAY "FILTER: "
  1527.            @24,9 GET MH_Filt
  1528.            READ
  1529.            @24,0
  1530.            IF MH_Filt <> MH_FiltH
  1531.               IF LEN(TRIM(MH_Filt)) <> 0
  1532.                  IF IIF(Clipper,.F.,TYPE(MH_Filt)<>"L")
  1533.                     DO WAI_ WITH 24, 0, "Filter expression defective, not usable."
  1534.                     MH_Filt=MH_FiltH
  1535.                     LOOP
  1536.                  ENDIF
  1537.                  SET FILTER TO &MH_Filt
  1538.               ELSE
  1539.                  SET FILTER TO .T.
  1540.               ENDIF
  1541.               GO TOP
  1542.               IF EOF()
  1543.                  DO WAI_ WITH 24, 0, "Nothing matches filter!"
  1544.               ENDIF
  1545.            ENDIF
  1546.            LOOP
  1547.       CASE UPPER(MH_Function) = "F"
  1548.            DO FND_
  1549.            LOOP
  1550.       CASE UPPER(MH_Function) = "M"
  1551.            IF MH_Menu1 = MH_Menu
  1552.               STORE MH_Menu2 TO MH_Menu
  1553.            ELSE
  1554.               STORE MH_Menu1 TO MH_Menu
  1555.            ENDIF
  1556.            LOOP
  1557.       CASE UPPER(MH_Function) = "Q"
  1558.            STORE .F. TO MH_LOOP
  1559.            LOOP
  1560.       CASE UPPER(MH_Function) = "R"
  1561.            DO WAI_ WITH 24,0,"MAKE SURE PRINTER IS ON LINE!!!"
  1562.            DO CASE
  1563.              CASE "DB3+"$DBVersion
  1564.                 *%%IF,3PLUS
  1565.                 ON ERROR DO WAI_ WITH 24,0,"Fix PRINTER !!!"
  1566.                 *%%ENDIF
  1567.              CASE "CLIPPER"$DBVersion
  1568.                 *%%IF,CLIPPER
  1569.                 DO WHILE .NOT. ISPRINTER()
  1570.                    ?? CHR(7)
  1571.                    DO WAI_ WITH 24,0,"Fix PRINTER !!!"
  1572.                 ENDDO
  1573.                 *%%ENDIF
  1574.            ENDCASE
  1575.            SET DEVICE TO PRINT
  1576.            DO DIS_
  1577.            SET DEVICE TO SCREEN
  1578.            *%%IF,3PLUS
  1579.            IF "DB3+"$DBVersion
  1580.              ON ERROR
  1581.            ENDIF
  1582.            *%%ENDIF
  1583.            LOOP
  1584.       CASE UPPER(MH_Function)="H"
  1585.            DO HLP_ WITH 2
  1586.            DO CASE
  1587.               CASE "CLIPPER"$DBVersion
  1588.                 *%%IF,CLIPPER
  1589.                 CLEAR
  1590.                 DO DPSORTS
  1591.                 *%%ENDIF
  1592.               CASE "DB3+"$DBVersion
  1593.                 *%%IF,3PLUS
  1594.                 CALL DPSORT
  1595.                 *%%ENDIF
  1596.               CASE "DB3"$DBVersion
  1597.                 *%%IF,DB3
  1598.                 CLEAR
  1599.                 DO DPSORTS
  1600.                 *%%ENDIF
  1601.            ENDCASE
  1602.            LOOP
  1603.    ENDCASE
  1604. STORE "N" TO MH_Function
  1605. ENDDO
  1606. SET FILTER TO .T.
  1607. RELEASE MH_Function,MH_Loop,MH_Answer
  1608. RETURN
  1609.  
  1610. *%%DOCUMENT,DIS,Display-only Format file
  1611. PROCEDURE DIS_
  1612. @4,13 SAY MA_SORTNAM PICTURE "!!!!!!!!"
  1613. @4,48 SAY MA_SORTNDX PICTURE "!!!!!!!!"
  1614. @4,70 SAY MA_SORTFRM PICTURE "!!!!!!!!"
  1615. @5,15 SAY MA_SORTDES
  1616. @8,2 SAY MA_SORTCRI
  1617. @13,30 SAY MA_SORTF1 PICTURE "!!!!!!!"
  1618. @13,46 SAY MA_SORTO1 PICTURE "!"
  1619. @14,30 SAY MA_SORTF2 PICTURE "!!!!!!!"
  1620. @14,46 SAY MA_SORTO2 PICTURE "!"
  1621. @15,30 SAY MA_SORTF3 PICTURE "!!!!!!!"
  1622. @15,46 SAY MA_SORTO3 PICTURE "!"
  1623. @16,30 SAY MA_SORTF4 PICTURE "!!!!!!!"
  1624. @16,46 SAY MA_SORTO4 PICTURE "!"
  1625. @17,30 SAY MA_SORTF5 PICTURE "!!!!!!!"
  1626. @17,46 SAY MA_SORTO5 PICTURE "!"
  1627. @18,30 SAY MA_SORTF6 PICTURE "!!!!!!!"
  1628. @18,46 SAY MA_SORTO6 PICTURE "!"
  1629. @19,30 SAY MA_SORTF7 PICTURE "!!!!!!!"
  1630. @19,46 SAY MA_SORTO7 PICTURE "!"
  1631. @20,30 SAY MA_SORTF8 PICTURE "!!!!!!!"
  1632. @20,46 SAY MA_SORTO8 PICTURE "!"
  1633. @21,30 SAY MA_SORTF9 PICTURE "!!!!!!!"
  1634. @21,46 SAY MA_SORTO9 PICTURE "!"
  1635. @22,30 SAY MA_SORTF10 PICTURE "!!!!!!!"
  1636. @22,46 SAY MA_SORTO10 PICTURE "!"
  1637. RETURN
  1638.  
  1639. *%%DOCUMENT,FND,Find record by key routine
  1640. PROCEDURE FND_
  1641. PRIVATE MH_Find,MH_Answer,MH_Rec
  1642. STORE " " TO MH_Find
  1643. STORE " " TO MH_Answer
  1644. STORE 0   TO MH_Rec
  1645. @4,13 GET MA_SORTNAM PICTURE "!!!!!!!!"
  1646. @4,48 SAY MA_SORTNDX PICTURE "!!!!!!!!"
  1647. @4,70 SAY MA_SORTFRM PICTURE "!!!!!!!!"
  1648. @5,15 SAY MA_SORTDES
  1649. @8,2 SAY MA_SORTCRI
  1650. @13,30 SAY MA_SORTF1 PICTURE "!!!!!!!"
  1651. @13,46 SAY MA_SORTO1 PICTURE "!"
  1652. @14,30 SAY MA_SORTF2 PICTURE "!!!!!!!"
  1653. @14,46 SAY MA_SORTO2 PICTURE "!"
  1654. @15,30 SAY MA_SORTF3 PICTURE "!!!!!!!"
  1655. @15,46 SAY MA_SORTO3 PICTURE "!"
  1656. @16,30 SAY MA_SORTF4 PICTURE "!!!!!!!"
  1657. @16,46 SAY MA_SORTO4 PICTURE "!"
  1658. @17,30 SAY MA_SORTF5 PICTURE "!!!!!!!"
  1659. @17,46 SAY MA_SORTO5 PICTURE "!"
  1660. @18,30 SAY MA_SORTF6 PICTURE "!!!!!!!"
  1661. @18,46 SAY MA_SORTO6 PICTURE "!"
  1662. @19,30 SAY MA_SORTF7 PICTURE "!!!!!!!"
  1663. @19,46 SAY MA_SORTO7 PICTURE "!"
  1664. @20,30 SAY MA_SORTF8 PICTURE "!!!!!!!"
  1665. @20,46 SAY MA_SORTO8 PICTURE "!"
  1666. @21,30 SAY MA_SORTF9 PICTURE "!!!!!!!"
  1667. @21,46 SAY MA_SORTO9 PICTURE "!"
  1668. @22,30 SAY MA_SORTF10 PICTURE "!!!!!!!"
  1669. @22,46 SAY MA_SORTO10 PICTURE "!"
  1670. @24,0
  1671. @24,0 SAY "Enter data to search for in open fields"
  1672. READ
  1673. IF LEN(TRIM(MA_SORTNAM)) <> 0
  1674.    STORE MA_SORTNAM TO MH_Find
  1675.    STORE RECNO() TO MH_Rec
  1676.    FIND &MH_Find
  1677.    IF EOF()
  1678.       GOTO MH_Rec
  1679.       DO WAI_ WITH 24, 0, "Record NOT Found! "
  1680.    ELSE
  1681.       DO WAI_ WITH 24, 0, "Record Found! "
  1682.    ENDIF
  1683. ENDIF
  1684. RELEASE MH_Find,MH_Answer,MH_Rec
  1685. @24,0
  1686. RETURN
  1687.  
  1688. *%%DOCUMENT,VAL,Validate Data module
  1689. PROCEDURE VAL_
  1690. @ 24,0
  1691. SELE A
  1692. DO WHILE IIF(Clipper,.F.,TYPE(MA_SORTCRI)<>"L")
  1693.    ?? CHR(7)
  1694.    @ 24,0 SAY "Sort Criteria defective; repair the expression"
  1695.    @ 8,2 GET MA_SORTCRI
  1696.    READ
  1697. ENDDO
  1698. @ 24,0
  1699. SELE I
  1700. IF .NOT. CLIPPER
  1701.    SET ESCA OFF
  1702. ENDIF
  1703. ofs=12
  1704. sel=1
  1705. fc=10
  1706. key=0
  1707. nums="1 2 3 4 5 6 7 8 9 10"
  1708. DO WHIL key<>27
  1709. FVar="MA_SORTF"+SUBS(nums,(sel-1)*2+1,2)
  1710. OVar="MA_SORTO"+SUBS(nums,(sel-1)*2+1,2)
  1711. @ 24,0
  1712. @ 24,0 SAY "Up, Down arrows change fields;  <RETURN> = access;  <Esc> = quit"
  1713. @ sel+ofs,29 SAY "@"
  1714. DO GetKey WITH CHR(5)+CHR(24)+CHR(13)+CHR(27),key
  1715. @sel+ofs,29 SAY " "
  1716. DO CASE
  1717.   CASE key=5
  1718.     sel=sel-1
  1719.   CASE key=24
  1720.     sel=sel+1
  1721.   CASE key=13
  1722.     DO SDF WITH sel+ofs,30,46,&Fvar,&OVar
  1723. ENDC
  1724. sel=IIF(sel>fc,1,sel)
  1725. sel=IIF(sel<1,fc,sel)
  1726. ENDD
  1727. SET ESCA ON
  1728. @ 24,0
  1729. RETU
  1730.  
  1731. *%%DOCUMENT,SDF,Scan and Select; (or Enter) Sort Field Names
  1732. PROCEDURE SDF
  1733. PARA Ln, Cl, Cl2, Fld, Ord
  1734. PRIV key
  1735. fld=fld+SPACE(7-LEN(fld))
  1736. Ord=Ord+SPACE(1-LEN(Ord))
  1737. key=0
  1738. DO WHILE .T.
  1739. @ Ln,Cl SAY Fld
  1740. @ Ln,Cl2 SAY Ord
  1741. @ 24,0
  1742. @ 24,0 SAY "<SPACE> = Field Scan;  <RETURN> = Field Edit   <Esc> = done field"
  1743. DO GetKey WITH " "+CHR(13)+CHR(27),key
  1744. @ 24,0
  1745. DO CASE
  1746.    CASE key=27
  1747.       RETURN
  1748.    CASE key=13
  1749.       @ 24,0 SAY "Edit the fieldname; <Esc> restores original"
  1750.       fno=0
  1751.       fldh=fld
  1752.       DO WHIL fno=0
  1753.          @ Ln,Cl GET fld PICTURE "!!!!!!!"
  1754.          READ
  1755.          IF LEN(TRIM(fld))=0
  1756.             EXIT
  1757.          ENDIF
  1758.          IF READKEY()=12.OR.READKEY()=268
  1759.             fld=fldh
  1760.             EXIT
  1761.          ENDIF
  1762.          @ 24,55 say "CHECKING..."
  1763.          DO ValidFld WITH fld, fno
  1764.          @ 24,55
  1765.          @ 24,55 say IIF(fno>0,"OK","BAD FIELD")
  1766.       ENDD
  1767.       @ Ln,Cl SAY Fld
  1768.    CASE key=32
  1769.       @ 24,0 SAY "Arrows Scan, <RETURN> selects, <Esc> quits Scan"
  1770.       STOR 1 TO I,K
  1771.       sks=CHR(4)+CHR(19)+CHR(13)+CHR(27)
  1772.       SELE A
  1773.       DO WHILE LEN(FIELD(I))>0
  1774.         @ Ln,Cl SAY "           "
  1775.         @ Ln,Cl SAY FIELD(I)
  1776.         DO GetKey WITH sks,k
  1777.         DO CASE
  1778.         CASE k=13
  1779.           fld=FIELD(I)+SPACE(7-LEN(FIELD(I)))
  1780.           EXIT
  1781.         CASE k=19
  1782.           I=IIF(i>1,i-1,i)
  1783.         CASE k=4
  1784.           I=IIF(LEN(FIELD(i+1))=0,i,i+1)
  1785.         CASE k=27
  1786.           EXIT
  1787.         ENDC
  1788.       ENDDO
  1789.       SELE dpsort
  1790. ENDCASE
  1791. IF LEN(TRIM(fld))=0
  1792.    Ord=" "
  1793. ELSE
  1794.    badord=.T.
  1795.    @ 24,0
  1796.    DO WHILE badord
  1797.       @ 24,0 SAY "Enter 'A' or 'D' for Ascending/Descending Sort Order"
  1798.       @ Ln,Cl2 GET ord PICTURE "!"
  1799.       READ
  1800.       badord=.NOT.(ord$"AD")
  1801.    ENDDO
  1802.    @ 24,0
  1803. ENDIF
  1804. ENDD
  1805. RETU
  1806.  
  1807. *%%DOCUMENT,INK,Low-level keyboard-reading routine
  1808. PROCEDURE GetKey
  1809. PARA S,K
  1810. k=INKE()
  1811. DO WHIL k=0 .AND..NOT. CHR(k)$S
  1812. k=INKE()
  1813. ENDD
  1814. RETU
  1815.  
  1816. *%%DOCUMENT,VFD,Ensure valid Sort Field Name entry
  1817. PROCEDURE ValidFld
  1818. PARA fld, fno
  1819. fno=0
  1820. i=1
  1821. SELE A
  1822. SET EXAC ON
  1823. DO WHIL LEN(FIEL(I))>0
  1824. IF TRIM(fld)=FIEL(I)
  1825. fno=I
  1826. EXIT
  1827. ENDI
  1828. I=I+1
  1829. ENDD
  1830. SELE I
  1831. SET EXAC OFF
  1832. RETU
  1833.  
  1834. *%%DOCUMENT,HLP,Give general help information
  1835. PROCEDURE HLP_
  1836. PARAMETERS What
  1837. DO CASE
  1838. CASE What = 1
  1839.      @0,0 SAY "Sorry, No help available"
  1840. CASE What = 2
  1841.      @0,0 SAY "Sorry, No help available"
  1842. OTHERWISE
  1843.      @0,0 SAY "LOGIC ERROR IN PROGRAM"
  1844. ENDCASE
  1845. DO WAI_ WITH 24, 0, ""
  1846. @0,0
  1847. RETURN
  1848.  
  1849. *%%DOCUMENT,WAI,Low-level WAIT and Message-display routine
  1850. PROCEDURE WAI_
  1851. PARA y,x,msg
  1852. PRIV dummy
  1853. dummy=" "
  1854. SET INTE OFF
  1855. @Y,X
  1856. @Y,X SAY msg+" Press any key to continue..." GET dummy
  1857. READ
  1858. SET INTE ON
  1859. @Y,X
  1860. RETU
  1861.  
  1862. *%%DOCUMENT,SMM,Sort/select Main Menu screen (used when LOAD/CALL unavailable)
  1863. PROCEDURE DPMMSRTS
  1864. @ 1,0 SAY "╔══════════════════════════════════════════════════════════════════════════════╗"
  1865. @ 2,0 SAY "║                         Sort/select definition Menu                          ║"
  1866. @ 3,0 SAY "╟──────────────────────────────────────────────────────────────────────────────╢"
  1867. @ 4,0 SAY "║                                                                              ║"
  1868. @ 5,0 SAY "║                   A - Add new definitions                                    ║"
  1869. @ 6,0 SAY "║                   U - Update, Edit, Scan, Find definitions                   ║"
  1870. @ 7,0 SAY "║                   R - Create/Modify a Dbase III Report Form                  ║"
  1871. @ 8,0 SAY "║                                                                              ║"
  1872. @ 9,0 SAY "║                   L - Create/Modify a Dbase III Label Form                   ║"
  1873. @ 10,0 SAY "║                   I - Rebuild the Index                                      ║"
  1874. @ 11,0 SAY "║                   P - Pack the database to remove deleted definitions        ║"
  1875. @ 12,0 SAY "║                                                                              ║"
  1876. @ 13,0 SAY "║                                                                              ║"
  1877. @ 14,0 SAY "║                   Q - Quit Program, return to DOS                            ║"
  1878. @ 15,0 SAY "║                   D - Return to your application                             ║"
  1879. @ 16,0 SAY "║                                                                              ║"
  1880. @ 17,0 SAY "║                                                                              ║"
  1881. @ 18,0 SAY "║                   Please choose one of the above options                     ║"
  1882. @ 19,0 SAY "║                                                                              ║"
  1883. @ 20,0 SAY "╚══════════════════════════════════════════════════════════════════════════════╝"
  1884. @ 23,0 SAY "                                               Choice:                          "
  1885. RETURN
  1886.  
  1887. *%%DOCUMENT,STS,Sort Definitions screen (used when LOAD/CALL unavailable)
  1888. PROCEDURE DPSORTS
  1889. @ 1,0 SAY "╔══════════════════════════════════════════════════════════════════════════════╗"
  1890. @ 2,0 SAY "║                         Sort/Selection Definitions                           ║"
  1891. @ 3,0 SAY "╠══════════════════════════════════════════════════════════════════════════════╣"
  1892. @ 4,0 SAY "║ Sort Name:                 Sorted File Name:            Form Name:           ║"
  1893. @ 5,0 SAY "║ Description:                                                                 ║"
  1894. @ 6,0 SAY "╟──────────────────────────────────────────────────────────────────────────────╢"
  1895. @ 7,0 SAY "║                             Selection Criteria                               ║"
  1896. @ 8,0 SAY "║                                                                              ║"
  1897. @ 9,0 SAY "╟──────────────────────────────────────────────────────────────────────────────╢"
  1898. @ 10,0 SAY "║                                Sort Fields                                   ║"
  1899. @ 11,0 SAY "╟──────────────────────────────────────────────────────────────────────────────╢"
  1900. @ 12,0 SAY "║                             Field Name    Order                              ║"
  1901. @ 13,0 SAY "║                          1)                                                  ║"
  1902. @ 14,0 SAY "║                          2)                                                  ║"
  1903. @ 15,0 SAY "║                          3)                                                  ║"
  1904. @ 16,0 SAY "║                          4)                                                  ║"
  1905. @ 17,0 SAY "║                          5)                                                  ║"
  1906. @ 18,0 SAY "║                          6)                                                  ║"
  1907. @ 19,0 SAY "║                          7)                                                  ║"
  1908. @ 20,0 SAY "║                          8)                                                  ║"
  1909. @ 21,0 SAY "║                          9)                                                  ║"
  1910. @ 22,0 SAY "║                         10)                                                  ║"
  1911. @ 23,0 SAY "╚══════════════════════════════════════════════════════════════════════════════╝"
  1912. RETURN
  1913. *%%CLOSE
  1914. *%%ENDIF
  1915.