home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / dbase / buildmdx.arj / BUILDMDX.PRG next >
Encoding:
Text File  |  1991-07-05  |  37.1 KB  |  1,312 lines

  1. *:*********************************************************************
  2. *:
  3. *:        Program: BUILDMDX.PRG
  4. *:
  5. *:         System: View DBF Structure and Recreate indexes
  6. *:         Author: Gerald J. Fay M.D.
  7. *:      Copyright (c) 1991, Gerald J. Fay M.D.
  8. *:  Last modified: 06/21/91     20:33
  9. *:
  10. *:  Procs & Fncts: M_CHOICE
  11. *:               : TEMPFILE()
  12. *:               : CHECKFOR
  13. *:               : SHADOWNG
  14. *:               : DELREIN
  15. *:               : LOCK_REP
  16. *:               : R_INDEX
  17. *:               : CHK_FILE
  18. *:               : PRINTDBF
  19. *:               : PHEADER
  20. *:               : ENDPAGE
  21. *:               : TAGBLD
  22. *:               : EMPTY()
  23. *:               : MYDATE()
  24. *:               : ERR_OUT
  25. *:               : CHECKDBF()
  26. *:               : CENTER()
  27. *:
  28. *:           Uses: INDTEMP.DBF    
  29. *:               : MTEMP.DBF (Temporary file created from indtemp and Tempfile())
  30. *:               : MDBF (The Selected DBF file)
  31. *:         : DEFINIT.DBF (Dbase file which stores Tag name and expression
  32. *:         : CONDIT.DBF (Dbase file which stores Conditional index
  33. *:    Other Files: HOLDIND.TXT Text file created from LIST STATUS
  34. *:
  35. *:      Documented 06/21/91 at 20:39                SNAP!  version 4.02i
  36. *:*********************************************************************
  37. CLEAR
  38. SET TALK OFF
  39. SET STATUS OFF
  40. SET CURSOR OFF
  41. ON ESCAPE  
  42. *ON ERROR DO err_out WITH MDIR,ERROR(),lineno()
  43. _PLINENO=0
  44. mpage=1
  45. l_ookmore=.T.                   &&Variable for main DO WHILE Routine
  46. mlineno=1                       &&Variable to store _plineno
  47. STORE SPACE(1) TO gen1,gen2,gen3
  48. MDIR=SET("DIRECTORY")
  49. gen1=GETENV("DBHEAP")                   &&Checking Dbheap
  50. IF EMPTY(gen1)
  51.    gen1="50"
  52. ENDIF                                   &&Searching for Temp Directory
  53. gen2=GETENV("DBTMP")
  54. IF EMPTY(gen2)
  55.    gen2=GETENV("TMP")
  56.    IF EMPTY(gen2)
  57.       gen2=MDIR
  58.    ENDIF
  59. ENDIF
  60. STORE LEN(gen2) TO m_len
  61. dskspace=DISKSPACE()/1000000
  62. @9,11 FILL TO 15,71 COLOR /N
  63. @8,10 FILL TO 14,70 COLOR /W
  64. @1,1 FILL TO 4,m_len+23 COLOR N/N
  65. @2,2 SAY "Dbheap is set at: "+gen1 COLOR W+/N
  66. @3,2 SAY "Temporary Directory: "+gen2 COLOR W+/N
  67. @9,15 SAY "This Computer is Running: "+VERSION() COLOR N/W
  68. @10,20 SAY "Operating System: "+OS() COLOR N/W
  69. @11,10 TO 11,70 DOUBLE COLOR R/W
  70. @12,15 SAY "Available Diskspace is: "+LTRIM(STR(dskspace,5,1))+" MegaBytes" COLOR B/W
  71. @13,20 SAY "Available Memory is: "+LTRIM(STR(MEMORY(),3))+ " K" COLOR B/W
  72. @ 20,25 SAY "Look-up Database file Y/N? " GET l_ookmore PICTURE "Y" ERROR "Enter Y or N only" COLOR GR+/B,R/W
  73. READ
  74. IF l_ookmore=.F.
  75.    CLEAR
  76.    SET CURSOR ON
  77.    RETURN
  78. ENDIF
  79. again=.F.             &&Variable to release store TAGLIST ARRAY for new lookup
  80. DEFINE POPUP lookfile FROM 1,30 TO 21,45 PROMPT Files LIKE *.dbf;
  81.    MESSAGE "Please Select File from List by Pressing "+CHR(17)+CHR(196)+CHR(217)+" on File"
  82. ON SELECTION POPUP lookfile DEACTIVATE POPUP
  83. DEFINE POPUP c_hoser FROM 9,24 TO 17,59;
  84.    MESSAGE "Please Select with "+CHR(17)+CHR(196)+CHR(217)
  85. DEFINE BAR 1 OF c_hoser PROMPT "      SELECT OPTION ON FILE" SKIP
  86. DEFINE BAR 2 OF c_hoser PROMPT "----------------------------------" SKIP
  87. DEFINE BAR 3 OF c_hoser PROMPT " Print DBF structure and Tags"
  88. DEFINE BAR 4 OF c_hoser PROMPT " Reindex file"
  89. DEFINE BAR 5 OF c_hoser PROMPT " Delete and Recreate Index file"
  90. DEFINE BAR 6 OF c_hoser PROMPT " View another database"
  91. DEFINE BAR 7 OF c_hoser PROMPT " Clear and Return to Mainprogram"
  92. ON SELECTION POPUP c_hoser DO m_choice WITH mdbf,l_fldnum
  93. DEFINE WINDOW indexer FROM 17,10 TO 23,70 COLOR N/W,,GR+/RB
  94. DO WHILE l_ookmore=.T.
  95. MDBF=SPACE(30)
  96.    CLEAR
  97.    IF again
  98.       RELEASE taglist
  99.       RELEASE condit
  100.       again=.F.
  101.    ENDIF
  102.    @ 2,31 FILL TO 22,46 COLOR /N
  103.    ACTIVATE POPUP lookfile
  104.    IF LASTKEY()=27
  105.    EXIT
  106.    ENDIF
  107.    STORE PROMPT() TO MDBF
  108.    CLEAR
  109.    IF CHECKDBF(MDBF,MDIR)=.T.      && Checks to see if Selected file is
  110.    @10,11 FILL TO 15,71 COLOR /N    && DEFINIT.DBF or CONDIT.DBF
  111.    @9,10 FILL TO 14,70 COLOR /W
  112.    @11,CENTER(MDBF,80) SAY MDBF COLOR R/W 
  113.    @12,19  SAY "Sorry this file is required for this program" COLOR B/W
  114.    @14,45  SAY "Press any key to exit" COLOR N/W
  115.    STORE INKEY(0) TO it
  116.    CLEAR
  117.    l_ookmore=.T.
  118.    LOOP
  119.    ENDIF
  120.    @12,34 fill to 14,48 color /n
  121.    @11,33 fill to 13,47 color /w
  122.    @ 12,35 SAY "Please Wait" COLOR R/W
  123.    mtemp=tempfile(GEN2)
  124.    COPY FILE indtemp.dbf TO &mtemp
  125.    SELECT A
  126.    USE (mdbf)
  127.    SET CONSOLE OFF
  128.    LIST STATUS TO holdind.txt
  129.    IF MDIR="DONE"
  130.    l_ookmore=.F.
  131.    LOOP
  132.    ENDIF
  133.    SELECT B
  134.    USE (mtemp)
  135.    APPEND FROM holdind.txt TYPE DELIMITED
  136.    ERASE holdind.txt
  137.    DECLARE condit[20,2]               && Hold up to 20 conditional index tags
  138.    GO TOP
  139.    m_keyer=1
  140.    condition=.F.                   && Marker for Conditional Index in Index TAG (FALSE is Default)
  141.    DO WHILE AT("File search path:",hold)=0 .AND. .NOT. EOF()
  142.       m_mhold=AT("For:",hold)
  143.       IF m_mhold>0
  144.          m_thold=AT("TAG:",hold)
  145.          m_khold=AT("Key:",hold)
  146.          m_thold=m_thold+9
  147.          m_tagname=LTRIM(SUBSTR(hold,m_thold,m_khold-m_thold))
  148.          STORE .T. TO condition
  149.          m_mhold1=LTRIM(SUBSTR(hold,m_mhold+4,20))
  150.          m_mhold1=TRIM(m_mhold1)
  151.          condit[M_keyer,1]=TRIM(m_tagname)
  152.          condit[M_keyer,2]=TRIM(m_mhold1)
  153.          m_keyer=m_keyer+1
  154.          SKIP
  155.       ENDIF
  156.       SKIP
  157.    ENDDO
  158.    SELECT A
  159.    USE IN B
  160.    ERASE (mtemp)
  161.    RELEASE ALL LIKE m_*
  162.    SET CONSOLE ON
  163.    CLEAR
  164.    @9,11 FILL TO 15,71 COLOR /N
  165.    @8,10 FILL TO 14,70 COLOR /W
  166.    @ 9,15 SAY "The Current Database File Is:  "+DBF() COLOR B/W
  167.    @ 10,20 SAY "The File Contains: "+LTRIM(STR(RECCOUNT(), 10))+ " RECORDS." COLOR N/W
  168.    @ 11,20 SAY "The File Was Last Updated On: "+CDOW(LUPDATE())+", " +DTOC(LUPDATE()) COLOR N/W
  169.    @ 12,20 SAY "Each Record Contains "+LTRIM(STR(RECSIZE(),10))+" CHARACTERS" COLOR N/W
  170.    @ 13,15 SAY "Press Any Key To See Defined Fields Or <Esc> TO Exit" COLOR R/W
  171.    STORE INKEY(0) TO it
  172.    IF LASTKEY()= 27
  173.       CLEAR
  174.       @ 12,25 SAY "Look-up another file Y/N? " GET l_ookmore PICTURE "Y" ERROR "Enter Y or N only" COLOR GR+/B,R/W
  175.       READ
  176.       LOOP
  177.    ENDIF
  178.     DECLARE taglist[42,2]
  179.    N = 1
  180.    DO WHILE LEN(TRIM(TAG(N))) <> 0
  181.       taglist[n,1] = TAG(N)
  182.       taglist[n,2] = KEY(N)
  183.       IF TRIM(taglist[n,1]) = TRIM(ORDER())
  184.          ln_ordno = N
  185.       ENDIF && TRIM(TAGLIST[n]) = TRIM(ORDER())
  186.       N = N + 1
  187.    ENDDO  &&  TAG(n) <> ""
  188.    l_fldnum=1
  189.    DO WHILE ""<>FIELD(l_fldnum)
  190.       l_fldnum=l_fldnum+1
  191.    ENDDO
  192.    l_fldnum=l_fldnum-1
  193.    CLEAR
  194.    @2,3 FILL TO 23,78 COLOR /N
  195.    @1,2 FILL TO 22,77 COLOR /W
  196.    fieldnum=1
  197.    LINE=3
  198.    DO WHILE fieldnum<=l_fldnum
  199.       @ 1,4 SAY TRIM(DBF())+" Contains The Following Fields:" COLOR B/W
  200.       @ 2,5 SAY "  Name                             Type              Length" COLOR R/W
  201.       x_tt=FIELD(fieldnum)
  202.       @LINE,4 SAY "FIELD # "+STR(fieldnum,2) + " "+FIELD(fieldnum)  COLOR N/W
  203.       DO CASE
  204.       CASE TYPE(FIELD(fieldnum))="C"
  205.          fieldtype="CHARACTER"
  206.          x_te=LEN(&x_tt)
  207.          x_tx=STR(x_te,3)
  208.       CASE TYPE(FIELD(fieldnum))="N" .OR. TYPE(FIELD(fieldnum))="F"
  209.          fieldtype="NUMERIC"
  210.          x_tf=TRANSFORM(&x_tt,"@9")
  211.          x_tg=LEN(x_tf)
  212.          x_tp=AT(".",x_tf)
  213.          x_ty=x_tg-x_tp
  214.          x_tx=STR(x_tg,3)
  215.          IF x_tp>0
  216.             x_tx=x_tx +"  Decimal " +LTRIM(STR(x_ty))
  217.          ENDIF
  218.       CASE TYPE(FIELD(fieldnum))="D"
  219.          fieldtype="DATE"
  220.          x_tx="  8"
  221.       CASE TYPE(FIELD(fieldnum))="L"
  222.          fieldtype="LOGICAL"
  223.          x_tx="  1"
  224.       CASE TYPE(FIELD(fieldnum))="M"
  225.          fieldtype="MEMO"
  226.          x_tx="64K"
  227.       ENDCASE
  228.       @ LINE,39 SAY fieldtype COLOR N/W
  229.       @ LINE,60 SAY TRIM(x_tx) COLOR N/W
  230.       fieldnum=fieldnum+1
  231.       LINE=LINE+1
  232.       IF LINE>19 .AND. l_fldnum/fieldnum>1
  233.          @LINE+1,4 SAY "Press any key to see more fields" COLOR R/W
  234.          STORE INKEY(0) TO it
  235.          @ 3,2 FILL TO 22,77 COLOR W/W
  236.          LINE=3
  237.       ENDIF
  238.       RELEASE ALL LIKE x_t*
  239.    ENDDO
  240.    @LINE+1,4 SAY "Finished viewing fields....Press any key to view index tags" COLOR R/W
  241.    LINE=LINE+3
  242.    STORE INKEY(0) TO it
  243.    IF LINE>=18
  244.       @ 1,2 FILL TO 22,77 COLOR W/W
  245.       LINE=2
  246.       X=1
  247.    ELSE
  248.       X=LINE+1
  249.       LINE=LINE+1
  250.    ENDIF
  251.  IF TYPE("taglist[1,1]")="L"
  252.    @X,20 SAY "No tags noted on: "+dbf() color N/W
  253.    @LINE+1,4 SAY "....Press any key to Continue" COLOR R/W
  254.  ELSE
  255.    @X,5 SAY "The following index tags are noted on: "+DBF() COLOR B/W
  256.    @ LINE+1,3 SAY "    Tag Name           Expression                    For:" COLOR R/W
  257.    LINE=LINE+2
  258.    m=1
  259.    DO WHILE TYPE("TAGLIST[M,1]")#"L"
  260.       forx=SPACE(30)                    &&stores conditional expression
  261.       IF condition=.T.
  262.          DO checkfor WITH m,forx
  263.       ENDIF
  264.       @ LINE,5 SAY taglist[M,1] COLOR N/W
  265.       @ LINE,22 SAY taglist[M,2] COLOR N/W
  266.       IF condition=.T.
  267.          @ LINE,54 SAY TRIM(forx) COLOR RB/W
  268.       ENDIF
  269.       m=m+1
  270.       IF LINE>19 .AND. TYPE("TAGLIST[M,1]")#"L"
  271.          @LINE+1,4 SAY "Press any key to see more index tags" COLOR R/W
  272.          STORE INKEY(0) TO it
  273.          @ 1,2 FILL TO 22,77 COLOR W/W
  274.          LINE=2
  275.       ELSE
  276.          LINE=LINE+1
  277.       ENDIF
  278.    ENDDO
  279.    @LINE+1,4 SAY "Finished viewing file....Press any key to continue" COLOR R/W
  280.  endif
  281.    STORE INKEY(0) TO it
  282.    CLEAR
  283.    EMPTY=LTRIM(STR(DISKSPACE()/RECSIZE(),10))
  284.    @11,11 FILL TO 15,71 COLOR /N
  285.    @10,10 FILL TO 14,70 COLOR /W
  286.    @ 12,15 SAY "You have room to add approximately: " COLOR N/W
  287.    @ 12,51 SAY EMPTY COLOR R/W
  288.    @ 12,51+LEN(EMPTY)+1 SAY " records" COLOR N/W
  289.    STORE INKEY(1.2) TO it
  290.    CLEAR
  291.    @4,3 FILL TO 6,41 COLOR /N
  292.    @3,2 FILL TO 5,40 COLOR /W
  293.    @4,3 SAY "File: " COLOR R/W
  294.    @4,9 SAY mdbf COLOR N/W
  295.    DO shadowng WITH 9,24,17,59
  296.    ACTIVATE POPUP c_hoser
  297.    IF LASTKEY()=27
  298.    EXIT
  299.    ENDIF
  300. ENDDO
  301. CLEAR
  302. RELEASE taglist
  303. RELEASE condit
  304. RELEASE POPUP lookfile
  305. RELEASE POPUP c_hoser
  306. RELEASE WINDOW indexer
  307. RELEASE MDIR
  308. ERASE (mtemp)
  309. ERASE holdind.txt
  310. ON ERROR
  311. ON ESCAPE
  312. SET CURSOR ON
  313. CLOSE DATABASE
  314. RETURN
  315. *!*********************************************************************
  316. *!
  317. *!      Procedure: M_CHOICE
  318. *!
  319. *!      Called by: BUILDMDX.PRG                   
  320. *!
  321. *!          Calls: PRINTDBF
  322. *!               : R_INDEX
  323. *!               : DELREIN
  324. *!       Defines Case bar()'s from Popup
  325. *!*********************************************************************
  326. PROCEDURE m_choice
  327. PARAMETER mdbf,l_fldnum
  328. DO CASE
  329. CASE BAR()=3
  330.    @23,27 SAY "Please Wait while Printing"
  331.    SET CONSOLE OFF
  332.    DO printdbf WITH mdbf,l_fldnum,mlineno
  333.    SET CONSOLE ON
  334.    @23,27 SAY "    Finished printing     "
  335.    STORE INKEY(.5) TO it
  336.    @23,24 CLEAR TO 23,60
  337. CASE BAR()=4
  338.    DO r_index WITH mdbf
  339. CASE BAR()=5
  340.    DO delrein WITH mdbf,N,mdir
  341. CASE BAR()=6
  342.    again=.T.
  343.    DEACTIVATE POPUP
  344. CASE BAR()=7
  345.    IF mlineno>1
  346.       SET PRINTER ON
  347.       EJECT PAGE
  348.       SET PRINTER OFF
  349.       ON ERROR
  350.       ON ESCAPE
  351.    ENDIF
  352.    STORE .F. TO l_ookmore
  353.    DEACTIVATE POPUP
  354. ENDCASE
  355. *!*********************************************************************
  356. *!
  357. *!      Procedure: DELREIN
  358. *!
  359. *!      Called by: M_CHOICE
  360. *!
  361. *!          Calls: CHK_FILE
  362. *!               : LOCK_REP
  363. *!               : TAGBLD
  364. *!               : CHECKFOR
  365. *!
  366. *!           Uses: CONDIT.DBF WITH PATH
  367. *!               : DEFINIT.DBF WITH PATH
  368. *!               : MDBF THE CHOSEN DBF FILE WITH PATH
  369. *!  The blood sweat and tears of this program saves index information
  370. *!  If elected deletes the MDX tag then recreates the index
  371. *!
  372. *!*********************************************************************
  373. PROCEDURE delrein     && DELETE MDX AND REINDEX
  374. PARAMETER mdbf,N,mdir
  375. d_index=.T.
  376. IF .NOT. FILE("DEFINIT.DBF")
  377.    ACTIVATE WINDOW indexer
  378.    @1,27 SAY "ERROR" COLOR R/W*
  379.    @2,1 SAY " The file 'DEFINIT.DBF' does not exist" COLOR N/W
  380.    @4,13 SAY ".......Press any key to exit......" COLOR W+/N
  381.    STORE INKEY(0) TO it
  382.    DEACTIVATE WINDOW indexer
  383.    RETURN
  384. ENDIF
  385. IF CHK_FILE(MDBF,MDIR,GEN2)=.T.
  386. d_index=.T.
  387. ELSE
  388. d_index=.F.
  389. RETURN
  390. ENDIF
  391. PATH=AT("\",mdbf)
  392. m_path=STUFF(mdbf,PATH,1,"-")
  393. DO WHILE PATH#0
  394.    pathld=PATH-1
  395.    PATH=AT("\",m_path)
  396.    m_path=STUFF(m_path,PATH,1,"-")
  397. ENDDO
  398. m_path= SUBSTR(mdbf,1,pathld)
  399. SET DIRECTORY TO &m_path        && Change to path of dbase file to avoid
  400. DO WHILE d_index=.T.            && Warning if Set Path (DOS) points to a
  401.    SELECT C                     && directory containing the same DBF name
  402.    m_cond=mdir+"\condit.dbf"   && The wrong index may be created
  403.    USE (m_cond)
  404.    SET ORDER TO TAG tager
  405.    SELECT B
  406.    m_defin=mdir+"\definit.dbf"
  407.    USE (m_defin)
  408.    SET FILTER TO typer="D"
  409.    SET ORDER TO TAG d_base
  410.    GO TOP
  411.    SEEK mdbf
  412.    IF FOUND()
  413.       d_recno=RECNO()
  414.       SET FILTER TO typer="S"
  415.       SEEK mdbf
  416.       IF FOUND()
  417.          m_ind=2
  418.          ind=2
  419.       ELSE
  420.          SET FILTER TO
  421.          GO d_recno
  422.      m_match=.T.
  423.      DO COMPTAG WITH m_match
  424.          IF m_match=.F.
  425.             SAVE SCREEN TO hold
  426.             SECOND=.T.
  427.             @6,11 FILL TO 21,71 COLOR /N
  428.             @5,10 FILL TO 20,70 COLOR W/W
  429.             @6,14 SAY "MDX EXPRESSION                  DEFAULT EXPRESSION" COLOR R/W
  430.             LINE=7
  431.             m=1
  432.             H=STR(m,2)
  433.             m_fld="EXPRESS"+H
  434.             DO WHILE TYPE("TAGLIST[M,1]")#"L"
  435.                @ LINE,12 SAY taglist[M,2] COLOR N/W
  436.                H=STR(m,2)
  437.                m_fld="EXPRESS"+LTRIM(H)
  438.                IF .NOT. EMPTY(&m_fld)
  439.                   @ LINE,42 SAY TRIM(&m_fld) COLOR N/W
  440.                ENDIF
  441.                IF LINE>17 .AND. TYPE("TAGLIST[M,2]")#"L"
  442.                   @LINE+1,4 SAY "Press any key to see more index tags" COLOR R/W
  443.                   STORE INKEY(0) TO it
  444.                   @ 7,10 FILL TO 20,70 COLOR W/W
  445.                   LINE=7
  446.                ELSE
  447.                   LINE=LINE+1
  448.                   m=m+1
  449.                ENDIF
  450.             ENDDO
  451.             DO WHILE .NOT. EMPTY(&m_fld)
  452.                H=STR(m,2)
  453.                m_fld="EXPRESS"+LTRIM(H)
  454.                @ LINE,42 SAY TRIM(&m_fld) COLOR N/W
  455.                IF LINE>17 .AND.  LTRIM(&m_fld)#""
  456.                   @LINE+1,4 SAY "Press any key to see more index tags" COLOR R/W
  457.                   STORE INKEY(0) TO it
  458.                   @ 7,10 FILL TO 20,70 COLOR W/W
  459.                   LINE=7
  460.                ELSE
  461.                   LINE=LINE+1
  462.                   m=m+1
  463.                ENDIF
  464.             ENDDO
  465.             @23,12 SAY "Do you wish to save present MDX as a secondary file: " GET SECOND ;
  466.                PICTURE "Y" MESSAGE "Press Y to Save N to not save" COLOR GR+/B,W+/R
  467.             READ
  468.         CLEAR
  469.             IF SECOND=.T.
  470.         ACTIVATE WINDOW indexer
  471.         @2,1 SAY "    Saving Index expression to DEFINIT.DBF as Secondary" COLOR N/W
  472.                 DO lock_rep WITH "S"
  473.         @2,1 FILL TO 2,55 COLOR W/W
  474.         DEACTIVATE WINDOW indexer
  475.                 m_ind=2
  476.                 ind=2
  477.                 CLEAR
  478.                 RESTORE SCREEN FROM hold
  479.                 RELEASE SCREEN hold
  480.             ELSE
  481.                m_ind=2
  482.                ind=1
  483.                R_BUILD="D"
  484.                CLEAR
  485.                DECLARE tagbld[47,3]
  486.                DO tagbld
  487.                RESTORE SCREEN FROM hold
  488.                RELEASE SCREEN hold
  489.             ENDIF
  490.          ELSE
  491.             m_ind=1
  492.             ind=1
  493.          ENDIF
  494.       ENDIF
  495.    ELSE
  496.       ACTIVATE WINDOW indexer
  497.       @2,1 SAY "    Saving Index expression to DEFINIT.DBF as Default" COLOR N/W
  498.       DO lock_rep WITH "D"
  499.       d_recno=RECNO()
  500.       m_ind=1         && EXPRESSES NUMBER OF MATCHED INDEXES STORED
  501.       @2,1 FILL TO 2,55 COLOR W/W
  502.       DEACTIVATE WINDOW indexer
  503.    ENDIF
  504.    
  505.    IF m_ind=2 .AND. ind=2
  506.       SAVE SCREEN TO hold
  507.         m_m=1
  508.     m_expres="EXPRESS"
  509.     m_condit="CONDIT"
  510.     m_name="NAME"
  511.       B=LTRIM(STR(m_m,2))
  512.       expresr=m_expres+B
  513.       conditr=m_condit+B
  514.       namer=m_name+B
  515.       m_ore=.T.
  516.       DECLARE sectag[47,3]
  517.       DO WHILE m_ore
  518.     sectag[M_M,1]=&namer
  519.     sectag[M_M,2]=&expresr
  520.     sectag[M_M,3]=&conditr
  521.          m_m=m_m+1
  522.          B=LTRIM(STR(m_m,2))
  523.          expresr=m_expres+B
  524.          conditr=m_condit+B
  525.      namer=m_name+B
  526.          IF EMPTY(&expresr)
  527.             m_ore=.F.
  528.          ENDIF
  529.       ENDDO
  530.       m_m=m_m-1
  531.       CLEAR
  532.       GO TOP
  533.       SET FILTER TO
  534.       m=1
  535.       n_n=1
  536.       g_more=.T.
  537.       m_ore=.T.
  538.       GO d_recno
  539.       DO WHILE g_more
  540.          @6,6 FILL TO 21,76 COLOR /N
  541.          @5,5 FILL TO 20,75 COLOR W/W
  542.          @6,9 SAY "SECONDARY EXPRESS    FOR:            DEFAULT EXPRESS   FOR:" COLOR R/W
  543.          LINE=7
  544.          g_more=.F.
  545.          DO WHILE m=<m_m .AND. .NOT. g_more
  546.             @ LINE,6 SAY LEFT(TRIM(sectag[M,2]),19) COLOR N/W
  547.         IF sectag[M,3]=.T.
  548.         SELECT C
  549.         SEEK TRIM(MDBF)+TRIM(sectag[M,1])+"S"
  550.         @ LINE,26 SAY LEFT(C->CONEXPRESS,15) COLOR RB/W
  551.         SELECT B
  552.         ENDIF
  553.             m=m+1
  554.             IF LINE>17
  555.                IF m<=m_m
  556.                   g_more=.T.
  557.                ENDIF
  558.                LOOP
  559.             ELSE
  560.                LINE=LINE+1
  561.             ENDIF
  562.          ENDDO
  563.          LINE=7
  564.          B=LTRIM(STR(n_n,2))
  565.           expresr=m_expres+B
  566.           conditr=m_condit+B
  567.       namer=m_name+B
  568.          DO WHILE m_ore
  569.             @LINE,40 SAY LEFT(TRIM(&expresr),19) COLOR N/W
  570.         IF &CONDITR=.T.
  571.         T_HOLD=TRIM(&NAMER)
  572.         SELECT C
  573.         SEEK TRIM(MDBF)+T_HOLD+"D"
  574.         @LINE,60 SAY LEFT(TRIM(C->CONEXPRESS),15) COLOR RB/W
  575.         SELECT B
  576.         ENDIF
  577.             n_n=n_n+1
  578.             B=LTRIM(STR(n_n,2))
  579.             expresr=m_expres+B
  580.          conditr=m_condit+B    
  581.         namer=m_name+B
  582.             IF EMPTY(&expresr)
  583.                m_ore=.F.
  584.                LOOP
  585.             ENDIF
  586.             IF LINE>17 .AND. .NOT. EMPTY(&expresr)
  587.                m_ore=.F.
  588.                g_more=.T.
  589.                @20,12 SAY "Press any key to see more index tags" COLOR R/W
  590.                STORE INKEY(0) TO it
  591.                LOOP
  592.             ENDIF
  593.             LINE=LINE+1
  594.          ENDDO
  595.          @20,12 SAY "Finished...press any key" COLOR R/W
  596.          STORE INKEY(0) TO it
  597.       ENDDO
  598.       r_build=SPACE(1)
  599.       @23,9 SAY "Selecting R will replace a stored expression with the present MDX "
  600.       @22,27  SAY "Select index to rebuild: " GET r_build PICTURE "@! X" VALID ;
  601.          UPPER(r_build) $ "S,D,R,E" MESSAGE "Choose <S> for Secondary <D> for Default <R> to replace or <E> to Exit" ;
  602.          ERROR "Enter S,D,R OR E Only" COLOR GR+/B,R/W
  603.       READ
  604.       IF UPPER(r_build)="E"
  605.          CLEAR
  606.          RESTORE SCREEN FROM hold
  607.          RELEASE sectag
  608.          RELEASE SCREEN hold
  609.          d_index=.F.
  610.          LOOP
  611.       ENDIF
  612.       IF UPPER(r_build)="R"
  613.           @22,0 CLEAR TO 23,79
  614.         r_build=space(1)
  615.           @22,23 SAY "Select Stored index to Replace: " GET r_build PICTURE "@! X" VALID ;
  616.             UPPER(r_build) $ "S,D" MESSAGE "Choose <S> for Secondary or <D> for Default" ;
  617.             ERROR "Enter S or D only" COLOR GR+/B,W+/R
  618.           READ
  619.           SET FILTER TO typer=UPPER(r_build)
  620.           GO TOP
  621.           SEEK trim(mdbf)
  622.            IF FOUND()
  623.            DELETE FOR TRIM(D_BASE)=MDBF
  624.            SELECT C
  625.            SET FILTER TO TYPER=UPPER(R_BUILD)
  626.            DELETE FOR TRIM(D_BASE)=MDBF
  627.            SET EXCLUSIVE ON
  628.            SELECT B
  629.            SET FILTER TO
  630.            PACK
  631.            SELECT C
  632.            SET FILTER TO
  633.            PACK
  634.            SET EXCLUSIVE OFF
  635.            SELECT B
  636.            ENDIF
  637.           restore screen from hold
  638.           release screen hold
  639.           ACTIVATE WINDOW indexer
  640.            IF R_BUILD="S"
  641.              M_BUILD="Secondary"
  642.            ELSE
  643.              M_BUILD="Default"
  644.            ENDIF
  645.           @2,1 SAY "  Placing MDX tags in DEFINIT.DBF as "+M_BUILD COLOR N/W
  646.               DO lock_rep WITH r_build
  647.           @2,1 FILL TO 2,55 COLOR W/W
  648.           DEACTIVATE WINDOW indexer
  649.           LOOP
  650.       ENDIF
  651.       IF UPPER(r_build)="S"
  652.          SET FILTER TO typer="S"
  653.          SEEK mdbf
  654.       ELSE
  655.          SET FILTER TO typer="D"
  656.          SEEK mdbf
  657.       ENDIF
  658.       DECLARE tagbld[47,3]
  659.       DO tagbld 
  660.       CLEAR
  661.       RESTORE SCREEN FROM hold
  662.       RELEASE SCREEN hold
  663.    ENDIF
  664.    ACTIVATE WINDOW indexer
  665.    @2,9 SAY "Proceed with Rebuild of Index now: " GET d_index PICTURE "Y" ;
  666.       MESSAGE "Warning present MDX will be deleted and a new MDX file created" COLOR N/W,GR+/B
  667.    READ
  668.    IF d_index=.F.
  669.       DEACTIVATE WINDOW indexer
  670.       LOOP
  671.    ENDIF
  672.    IF .NOT. FLOCK()
  673.       @1,27 SAY "ERROR" COLOR R/W*
  674.       @2,1 SAY " File is in use by:"+LKSYS(2)+" please verify" COLOR N/W
  675.       @4,13 SAY ".......Press any key to exit......" COLOR W+/N
  676.       STORE INKEY(0) TO it
  677.       DEACTIVATE WINDOW indexer
  678.       d_index=.F.
  679.       LOOP
  680.    ENDIF
  681.    @2,9 FILL TO 2,45 COLOR W/W
  682.    SELECT B
  683.    USE IN A
  684.    STORE AT(".",mdbf) TO hhh
  685.    hhh=hhh-1
  686.    STORE SUBSTR(mdbf,1,hhh) TO mmdx   && stores name of MDX file
  687.    mmdx=mmdx+".MDX"
  688.    ERASE &mmdx
  689.    SET INSTRUCT OFF
  690.    SELECT B
  691.    IF RLOCK()
  692.    ELSE
  693.       ACTIVATE WINDOW indexer
  694.       @1,27 SAY "ERROR" COLOR R/W*
  695.       @2,1 SAY "   The file cannot be used exclusively" COLOR N/W
  696.       @4,13 SAY ".......Press any key to exit......" COLOR W+/N
  697.       STORE INKEY(0) TO it
  698.       DEACTIVATE WINDOW indexer
  699.       RETURN
  700.    ENDIF
  701.    SET EXCLUSIVE ON
  702.    SELECT A
  703.    USE (mdbf)
  704.    SET INSTRUCT ON
  705.    ACTIVATE WINDOW indexer
  706.    n_n=1
  707.    IF m_ind=2
  708.     SET CURSOR OFF
  709.     SET TALK ON
  710.       SELECT C
  711.       DO WHILE TYPE("TAGBLD[N_N,1]")#"L"
  712.          IF tagbld[N_N,3]=.F.
  713.             SELECT A
  714.         @ 1,3 SAY "INDEXING ON "+TAGBLD[N_N,1] COLOR B/W
  715.         @ 1,1 SAY "▀" COLOR R/W*
  716.         store inkey(.5) to it
  717.             INDEX ON &tagbld[N_N,2] TAG &tagbld[N_N,1]
  718.                 @ 1,0 FILL TO 4,58 COLOR W/W
  719.          ELSE
  720.             SELECT C
  721.             SEEK TRIM(mdbf)+TRIM(tagbld[N_N,1])+r_build
  722.             STORE conexpress TO ex_p
  723.             SELECT A
  724.         @ 1,3 SAY "INDEXING ON "+ TAGBLD[N_N,1]+ " FOR "+ex_p COLOR B/W
  725.         @ 1,1 SAY "▀" COLOR R/W*
  726.         store inkey(.5) to it
  727.             INDEX ON &tagbld[N_N,2] TAG &tagbld[N_N,1] FOR &ex_p
  728.         @ 1,0 fill to 4,58 COLOR W/W
  729.          ENDIF
  730.          n_n=n_n+1
  731.       ENDDO
  732.       SET TALK OFF
  733.       SELECT A
  734.       RELEASE tagbld
  735.    ELSE
  736.    SET CURSOR OFF   
  737.    SET TALK ON
  738.       DO WHILE TYPE("TAGLIST[N_N,1]")#"L"
  739.          forx=SPACE(30)
  740.          IF condition=.T.
  741.             DO checkfor WITH n_n,forx
  742.          ENDIF
  743.          IF .NOT. EMPTY(forx)
  744.         @ 1,3 SAY "INDEXING ON "+ TAGLIST[N_N,1]+ " FOR  "+forx COLOR B/W
  745.         @ 1,1 SAY "▀" COLOR R/W*
  746.         STORE INKEY(.5) TO IT
  747.             INDEX ON &taglist[N_N,2] TAG &taglist[N_N,1] FOR &forx
  748.         @1,0 FILL TO 4,58 COLOR W/W
  749.          ELSE
  750.         @ 1,3 SAY "INDEXING ON "+TAGLIST[N_N,1] COLOR B/W
  751.         @ 1,1 SAY "▀" COLOR R/W*
  752.         STORE INKEY(.5) TO IT
  753.             INDEX ON &taglist[N_N,2] TAG &taglist[N_N,1]
  754.         @1,0 FILL TO 4,58 COLOR W/W
  755.          ENDIF
  756.          n_n=n_n+1
  757.       ENDDO
  758.       SET TALK OFF
  759.       SET EXCLUSIVE OFF
  760.    ENDIF
  761.    DEACTIVATE WINDOW indexer
  762.    d_index=.F.
  763. ENDDO
  764. SET DIRECTORY TO &mdir
  765. CLOSE DATABASE
  766. SET EXCLUSIVE OFF
  767. SELECT A
  768. use(mdbf)
  769. RETURN
  770. *!*********************************************************************
  771. *!
  772. *!      Procedure: LOCK_REP
  773. *!
  774. *!      Called by: DELREIN        (procedure in BUILDMDX.PRG)
  775. *!
  776. *!          Calls: CHECKFOR       (procedure in BUILDMDX.PRG)
  777. *!   Replace the stored Index Tags for mdbf in definit.dbf and condit.dbf
  778. *!*********************************************************************
  779. PROCEDURE lock_rep
  780. PARAMETER fl_t
  781. APPEND BLANK
  782. m_name="NAME"
  783. m_expres="EXPRESS"
  784. m_condit="CONDIT"
  785. m=1
  786. DO WHILE TYPE("TAGLIST[M,1]")#"L"
  787.    forx=SPACE(30)
  788.    IF condition=.T.
  789.       DO checkfor WITH m,forx
  790.    ENDIF
  791.    B=LTRIM(STR(m,2))
  792.    m_namer=m_name+B
  793.    m_expresr=m_expres+B
  794.    m_conditr=m_condit+B
  795.    REPLACE &m_namer WITH taglist[M,1]
  796.    REPLACE &m_expresr WITH taglist[M,2]
  797.    IF .NOT. EMPTY(forx)
  798.       REPLACE &m_conditr WITH .T.
  799.       SELECT C
  800.       APPEND BLANK
  801.       REPLACE d_base WITH mdbf
  802.       REPLACE conexpress WITH forx
  803.       REPLACE tagname WITH taglist[M,1]
  804.       REPLACE typer WITH fl_t
  805.       SELECT B
  806.    ELSE
  807.       REPLACE &m_conditr WITH .F.
  808.    ENDIF
  809.    m=m+1
  810. ENDDO
  811. REPLACE d_base WITH mdbf
  812. REPLACE typer WITH fl_t
  813. RETURN
  814. *!*********************************************************************
  815. *!
  816. *!      Procedure: R_INDEX
  817. *!
  818. *!      Called by: M_CHOICE       (procedure in BUILDMDX.PRG)
  819. *!
  820. *!          Calls: CHK_FILE       (procedure in BUILDMDX.PRG)
  821. *!
  822. *!           Uses: MDBF
  823. *!     Reindex the DBF
  824. *!*********************************************************************
  825. PROCEDURE r_index
  826. PARAMETER mdbf
  827. d_index=.T.
  828. IF CHK_FILE(MDBF,MDIR,GEN2)=.T.
  829. d_index=.T.
  830. ELSE
  831. d_index=.F.
  832. RETURN
  833. ENDIF
  834. CLOSE DATABASE
  835. SET EXCLUSIVE ON
  836. SELECT A
  837. USE (mdbf)
  838.    ACTIVATE WINDOW indexer
  839. SET TALK ON
  840.    REINDEX
  841. SET TALK OFF
  842.    DEACTIVATE WINDOW indexer
  843. SET EXCLUSIVE OFF
  844. CLOSE DATABASE
  845. SELECT A
  846. use(mdbf)
  847. RETURN
  848. *!*********************************************************************
  849. *!
  850. *!      Function: CHK_FILE
  851. *!
  852. *!      Called by: DELREIN        (procedure in BUILDMDX.PRG)
  853. *!               : R_INDEX        (procedure in BUILDMDX.PRG)
  854. *!      Checks size requirements for Reindexing or creating Index
  855. *!*********************************************************************
  856. FUNCTION chk_file
  857. PARAMETER mdbf,mdir,gen2
  858. xtemp=tempfile(GEN2)
  859. COPY FILE indtemp.dbf TO &xtemp
  860.    SET DEFAULT TO &gen2
  861.    STORE DISKSPACE() TO dskspace
  862.    SET DEFAULT TO &mdir
  863. SET CONSOLE OFF
  864. SET PRINTER TO
  865. SET PRINTER TO FILE "holdind.txt"
  866. SET PRINTER ON
  867. DIR &MDBF
  868. SET PRINTER OFF
  869. SET PRINTER TO
  870. SET CONSOLE ON
  871. SELECT B
  872. use (xtemp)
  873. APPEND FROM holdind.txt TYPE DELIMITED
  874. go top
  875. do while .not. eof()
  876. IF at("file",hold)>0
  877. store trim(hold) to m_fsize
  878. ENDIF
  879. SKIP
  880. enddo
  881. STORE AT("byte",m_fsize) to fsr
  882. fsr=fsr-2
  883. STORE TRIM(SUBSTR(m_fsize,1,fsr)) TO m_fsize
  884. s_hld=VAL(m_fsize)
  885. IF dskspace/s_hld <2
  886.    ACTIVATE WINDOW indexer
  887.    @1,27 SAY "ERROR" COLOR R/W*
  888.    @ 2,1 SAY "The Temporary directory is too small to reindex this file" COLOR N/W
  889.    @4,13 SAY ".......Press any key to exit......" COLOR W+/N
  890.    STORE INKEY(0) TO it
  891.    DEACTIVATE WINDOW indexer
  892. STORE .F. TO OKIND
  893. ELSE
  894. STORE .T. TO OKIND
  895. ENDIF
  896. SELECT A
  897. USE IN B
  898. ERASE HOLDIND.TXT
  899. ERASE (XTEMP)
  900. RETURN OKIND
  901. *-EOP:CHECK
  902. *!*********************************************************************
  903. *!
  904. *!      Procedure: PRINTDBF
  905. *!
  906. *!      Called by: M_CHOICE       (procedure in BUILDMDX.PRG)
  907. *!
  908. *!          Calls: MYDATE()       (function  in BUILDMDX.PRG)
  909. *!               : PHEADER        (procedure in BUILDMDX.PRG)
  910. *!               : ENDPAGE        (procedure in BUILDMDX.PRG)
  911. *!               : CHECKFOR       (procedure in BUILDMDX.PRG)
  912. *!   Main program to print DBF structure and Index tags
  913. *!*********************************************************************
  914. PROCEDURE printdbf
  915. PARAMETER mdbf,l_fldnum,mlineno
  916. fieldnum=1
  917. _PLENGTH=66
  918. _PPITCH="elite"
  919. _PQUALITY=.T.
  920. _PEJECT="NONE"
  921. _PADVANCE ="LINEFEEDS"
  922. IF mlineno>1
  923.    _PLINENO=mlineno
  924. ENDIF
  925. STORE mydate(DATE()) TO m_td
  926. SET PRINTER ON
  927. PRINTJOB
  928.    DO CASE
  929.    CASE mlineno=1
  930.       DO pheader WITH mpage,m_td
  931.    CASE _PLINENO>57
  932.       mpage=mpage+1
  933.       EJECT PAGE
  934.       mlineno=1
  935.       DO pheader WITH mpage,m_td
  936.    OTHERWISE
  937.       ?
  938.       ?
  939.    ENDCASE
  940.    ?
  941. IF _PQUALITY=.T.
  942.    ?? 
  943. ELSE
  944.    ??"DATABASE: "+TRIM(mdbf) STYLE "BI" AT 23
  945. ENDIF
  946.    ?
  947.    ?? TRIM(DBF())+" Contains The Following Fields:" AT 4
  948.    ?
  949.    ?? "Name" STYLE "BU" AT 10
  950.    ?? "Type" STYLE "BU" AT 39
  951.    ?? "Length" STYLE "BU" AT 63
  952.    DO WHILE fieldnum<=l_fldnum
  953.       x_tt=FIELD(fieldnum)
  954.       ?
  955.       ?? "FIELD # "+STR(fieldnum,2) + " "+FIELD(fieldnum) AT 6
  956.       DO CASE
  957.       CASE TYPE(FIELD(fieldnum))="C"
  958.          fieldtype="CHARACTER"
  959.          x_te=LEN(&x_tt)
  960.          x_tx=STR(x_te,3)
  961.       CASE TYPE(FIELD(fieldnum))="N" .OR. TYPE(FIELD(fieldnum))="F"
  962.          fieldtype="NUMERIC"
  963.          x_tf=TRANSFORM(&x_tt,"@9")
  964.          x_tg=LEN(x_tf)
  965.          x_tp=AT(".",x_tf)
  966.          x_ty=x_tg-x_tp
  967.          x_tx=STR(x_tg,3)
  968.          IF x_tp>0
  969.             x_tx=x_tx +"  Decimal " +LTRIM(STR(x_ty))
  970.          ENDIF
  971.       CASE TYPE(FIELD(fieldnum))="D"
  972.          fieldtype="DATE"
  973.          x_tx="  8"
  974.       CASE TYPE(FIELD(fieldnum))="L"
  975.          fieldtype="LOGICAL"
  976.          x_tx="  1"
  977.       CASE TYPE(FIELD(fieldnum))="M"
  978.          fieldtype="MEMO"
  979.          x_tx="64K"
  980.       ENDCASE
  981.       ?? fieldtype AT 35
  982.       ?? TRIM(x_tx) AT 64
  983.       fieldnum=fieldnum+1
  984.       IF _PLINENO>57 .AND. l_fldnum/fieldnum>1
  985.          DO endpage WITH mpage,m_td
  986.          ?
  987.          ?? "DATABASE: "+TRIM(mdbf) STYLE "BI" AT 36
  988.          ?
  989.          ?? "Name" STYLE "BU" AT 10
  990.          ?? "Type" STYLE "BU" AT 39
  991.          ?? "Length" STYLE "BU" AT 63
  992.       ENDIF
  993.       RELEASE ALL LIKE x_t*
  994.    ENDDO
  995.    ?
  996.    ?
  997.    IF _PLINENO>54
  998.       DO endpage WITH mpage,m_td
  999.    ENDIF
  1000.    ?
  1001. IF TYPE("taglist[1,1]")="L"
  1002.    ?? "No tags noted on: "+dbf()  AT 30
  1003.    ?
  1004. ELSE
  1005.    ?? "The following index tags are noted on:"+mdbf
  1006.    ?
  1007.    ?
  1008.    ??"     Tag Name             Expression                           For   " STYLE "B" AT 3
  1009.    ?
  1010.    m=1
  1011.    DO WHILE TYPE("TAGLIST[M,1]")#"L"
  1012.       forx=SPACE(30)
  1013.       IF condition=.T.
  1014.          DO checkfor WITH m,forx
  1015.       ENDIF
  1016.       ?
  1017.       ?? taglist[M,1] AT 5
  1018.       ?? taglist[M,2] AT 30
  1019.       IF condition=.T.
  1020.          ?? TRIM(forx) AT 66
  1021.       ENDIF
  1022.       m=m+1
  1023.       IF LINE>57 .AND. TYPE("TAGLIST[M,1]")#"L"
  1024.          DO endpage WITH mpage,m_td
  1025.       ENDIF
  1026.    ENDDO
  1027. ENDIF
  1028.    mlineno=_PLINENO
  1029. ENDPRINTJOB
  1030. SET PRINTER OFF
  1031. RETURN
  1032. *!*********************************************************************
  1033. *!
  1034. *!      Procedure: PHEADER
  1035. *!
  1036. *!      Called by: PRINTDBF       (procedure in BUILDMDX.PRG)
  1037. *!               : ENDPAGE        (procedure in BUILDMDX.PRG)
  1038. *!     Called to begin a new page
  1039. *!*********************************************************************
  1040. PROCEDURE pheader
  1041. PARAMETER mpage,m_td
  1042. ?
  1043. ?
  1044. ?? m_td AT 5
  1045. ?? "Page: " AT 72
  1046. ?? mpage AT 78 FUNCTION "T"
  1047. ?
  1048. RETURN
  1049. *!*********************************************************************
  1050. *!
  1051. *!      Procedure: ENDPAGE
  1052. *!
  1053. *!      Called by: PRINTDBF       (procedure in BUILDMDX.PRG)
  1054. *!
  1055. *!          Calls: PHEADER        (procedure in BUILDMDX.PRG)
  1056. *!    Called to end a page
  1057. *!*********************************************************************
  1058. PROCEDURE endpage
  1059. PARAMETER mpage,m_td
  1060. EJECT PAGE
  1061. mlineno=1
  1062. mpage=mpage+1
  1063. DO pheader WITH mpage,m_td
  1064. RETURN
  1065. *!*********************************************************************
  1066. *!
  1067. *!      Procedure: TAGBLD
  1068. *!
  1069. *!      Called by: DELREIN        (procedure in BUILDMDX.PRG)
  1070. *! Builds the Tag building array from information in Definit.dbf,Condit.dbf
  1071. *!*********************************************************************
  1072. PROCEDURE tagbld
  1073. n_n=1
  1074. m_ore=.T.
  1075. m_expres="EXPRESS"
  1076. m_name="NAME"
  1077. m_condit="CONDIT"
  1078. DO WHILE m_ore
  1079.    B=LTRIM(STR(n_n,2))
  1080.    expresr=m_expres+B
  1081.    namer=m_name+B
  1082.    conditr=m_condit+B
  1083.    IF EMPTY(&namer)
  1084.       m_ore=.F.
  1085.    ELSE
  1086.       tagbld[N_N,1]=&namer
  1087.       tagbld[N_N,2]=&expresr
  1088.       tagbld[N_N,3]=&conditr
  1089.       n_n=n_n+1
  1090.    ENDIF
  1091. ENDDO
  1092. RETURN
  1093. *!*********************************************************************
  1094. *!
  1095. *!      Procedure: CHECKFOR
  1096. *!
  1097. *!      Called by: BUILDMDX.PRG                   
  1098. *!               : DELREIN        (procedure in BUILDMDX.PRG)
  1099. *!               : LOCK_REP       (procedure in BUILDMDX.PRG)
  1100. *!               : PRINTDBF       (procedure in BUILDMDX.PRG)
  1101. *!       Checks for existence of Conditional Tag in array Condit
  1102. *!*********************************************************************
  1103. PROCEDURE checkfor
  1104. PARAMETER m,forx
  1105. L=1
  1106. ENOUGH=.F.
  1107. DO WHILE TYPE("CONDIT[L,1]")#"L" .AND. ENOUGH=.F.
  1108.    IF taglist[M,1]=condit[L,1]
  1109.       forx=condit[L,2]
  1110.       ENOUGH=.T.
  1111.       LOOP
  1112.    ELSE
  1113.       l=l+1
  1114.    ENDIF
  1115. ENDDO
  1116. RETURN
  1117. *!*********************************************************************
  1118. *!
  1119. *!       Function: TEMPFILE()
  1120. *!
  1121. *!      Called by: BUILDMDX.PRG                   
  1122. *!  Generate a temporary file name in Temp directory from indtemp.dbf
  1123. *!*********************************************************************
  1124. FUNCTION tempfile
  1125. PARAMETER GEN2
  1126. IF RIGHT(GEN2,1)="\"
  1127. tempf= (gen2+LTRIM(STR(RAND(-1)*100000000,8))+".DBF")
  1128. ELSE
  1129. tempf=(gen2+"\"+LTRIM(STR(RAND(-1)*100000000,8))+".DBF")
  1130. ENDIF
  1131. RETURN tempf
  1132. *!*********************************************************************
  1133. *!
  1134. *!      Procedure: ERR_OUT
  1135. *!
  1136. *!      Called by: ON ERROR
  1137. *!               : ON ESCAPE
  1138. *!                           ERROR EXIT PROGRAM
  1139. *!*********************************************************************
  1140. PROCEDURE ERR_OUT
  1141. PARAMETER MDIR,M_ER,M_line
  1142. m_err=.t.
  1143. STORE MESSAGE() TO M_ESS
  1144. IF AT("does not support quality",M_ESS)>0
  1145. _PQUALITY=.F.
  1146. RETURN
  1147. ENDIF
  1148. SET DIRECTORY TO &MDIR
  1149. STORE WINDOW() TO WIN
  1150. STORE POPUP() TO POP
  1151. STORE MESSAGE() TO M_MESS
  1152. IF .NOT. EMPTY(WIN)
  1153. DEACTIVATE WINDOW &WIN
  1154. ENDIF
  1155. SET BELL TO 400,2
  1156. ?? CHR(7)
  1157. SET BELL TO 400,2
  1158. ?? CHR(7)
  1159. SET BELL TO 400,2
  1160. ?? CHR(7)
  1161. SET BELL TO 200,7
  1162. ?? CHR(7)
  1163. SET BELL TO
  1164. ACTIVATE WINDOW INDEXER
  1165. if m_er=125 .OR. m_er=126
  1166. @ 2,1 SAY "WARNING " color r/w
  1167. @ 2,10 SAY "Printer must be turned on and connected" color N/W
  1168. @ 4,1 say "  PRESS <ESC> to exit or any other key to continue " color n/w
  1169. STORE INKEY(0) TO IT
  1170. IF IT#27  
  1171. DEACTIVATE WINDOW INDEXER
  1172. RETURN
  1173. ENDIF
  1174. ELSE
  1175. IF M_ER>0
  1176. @ 2,1 SAY "ERROR: " COLOR R/W
  1177. @ 2,9 SAY M_MESS COLOR N/W
  1178. @ 3,10 say "line # "
  1179. @ 3,18 say m_line
  1180. @ 4,1 say "Press any key to exit" COLOR N/W
  1181. store inkey(0) to IT
  1182. ENDIF
  1183. DEACTIVATE WINDOW INDEXER
  1184. ENDIF
  1185. CLOSE DATABASE
  1186. ERASE holdind.txt
  1187. ERASE (mtemp)
  1188. ERASE (XTEMP)
  1189. IF SET("PRINTER")="ON"
  1190. SET PRINTER OFF
  1191. ENDIF
  1192. SET CONSOLE ON
  1193. IF .NOT. EMPTY(POP)
  1194. L_OOKMORE=.F.
  1195. DEACTIVATE POPUP
  1196. ENDIF
  1197. MDIR="DONE"
  1198. RETURN
  1199. *-EOP: ERR_OUT
  1200. *!*********************************************************************
  1201. *!
  1202. *!      Function: CHECKDBF
  1203. *!
  1204. *!      Check user has not selected DEFINIT.DBF or CONDIT.DBF
  1205. *!*********************************************************************
  1206. FUNCTION CHECKDBF
  1207. PARAMETER MDBF,MDIR
  1208. IF MDIR+"\DEFINIT.DBF"=MDBF .OR. MDIR+"\CONDIT.DBF"=MDBF .OR. MDIR+"\INDTEMP.DBF"=MDBF
  1209. FILE=.T.
  1210. ELSE
  1211. FILE=.F.
  1212. ENDIF
  1213. RETURN FILE
  1214. *EOP: CHECKDBF()
  1215.  
  1216. *: EOF: BUILDMDX.PRG
  1217. *!*********************************************************************
  1218. *!
  1219. *!      Procedure: COMPTAG
  1220. *!        
  1221. *!      Compares Tags to see if expressions  are the same
  1222. *!*********************************************************************
  1223. PROCEDURE COMPTAG
  1224. PARAMETER m_match
  1225. m_m=1
  1226. m_expres="EXPRESS"
  1227. m_finis=.F.
  1228.     DO WHILE m_finis=.F.       && Check to see if present MDX TAGS
  1229.         B=LTRIM(STR(m_m))       && are the same as the Default stored
  1230.         expresr=m_expres+B
  1231.           DO CASE
  1232.             CASE TYPE("TAGLIST[M_M,2]")="L" .AND. EMPTY(&expresr)
  1233.                m_finis=.T.
  1234.             CASE TYPE("TAGLIST[M_M,2]")="L" .AND. .NOT. EMPTY(&expresr)
  1235.                m_match=.F.
  1236.                m_finis=.T.
  1237.             CASE TYPE("TAGLIST[M_M,2]")#"L" .AND. EMPTY(&expresr)
  1238.                m_match=.F.
  1239.                m_finis=.T.
  1240.             CASE TRIM(taglist[M_M,2])=TRIM(&expresr)
  1241.                m_match=.T.
  1242.             CASE TRIM(taglist[M_M,2])#TRIM(&expresr)
  1243.                m_match=.F.
  1244.                m_finis=.T.
  1245.           ENDCASE
  1246.          m_m=m_m+1
  1247.     ENDDO
  1248. RETURN
  1249.  
  1250.  
  1251. *!*********************************************************************
  1252. *!
  1253. *!      Procedure: SHADOWNG
  1254. *!
  1255. *!      Called by: BUILDMDX.PRG                   
  1256. *!    The famous Dbase shadowing routine
  1257. *!*********************************************************************
  1258. PROCEDURE shadowng                      && displays shadow that grows
  1259. PARAMETER x1,y1,x2,y2
  1260. PRIVATE x1,y1,x2,y2
  1261. @ x1+1,y1+2 FILL TO x2+1,y2+2 COLOR N+/N
  1262. RETURN
  1263. *-- EOP: Shadowng
  1264. *!*********************************************************************
  1265. *!
  1266. *!       Function: EMPTY()
  1267. *!   Looks to see if memory variable or field is empty
  1268. *!*********************************************************************
  1269. FUNCTION EMPTY
  1270. PARAMETER X
  1271. PRIVATE retval, lc_type
  1272. lc_type = TYPE("x")
  1273. DO CASE
  1274. CASE lc_type = "C"
  1275.    retval = (LEN(TRIM(X))=0)
  1276. CASE lc_type$"NF"
  1277.    retval = (X=0)
  1278. CASE lc_type = "D"
  1279.    retval = (" "$DTOC(X))
  1280. OTHERWISE &&lc_type = "U"
  1281.    retval = .T.
  1282. ENDCASE
  1283. RETURN (retval)
  1284. *-- EOP: Empty()
  1285. *!*********************************************************************
  1286. *!
  1287. *!       Function: MYDATE()
  1288. *!            converts DATE() to Month,Day,Year format
  1289. *!*********************************************************************
  1290. FUNCTION MYDATE
  1291.     *Author: Gerald J. Fay M.D.
  1292. PARAMETER MDATE1
  1293. STORE CDOW(MDATE1)+", "+CMONTH(MDATE1)+" "+LTRIM(STR(DAY(MDATE1),2))+", "+STR(YEAR(MDATE1),4) TO RETDATE
  1294. RETURN RETDATE
  1295. *--EOP:Mydate()
  1296. *!*********************************************************************
  1297. *!
  1298. *!      Function: CENTER
  1299. *!
  1300. *!      Centers SAY or GET expressions 
  1301. *!*********************************************************************
  1302. FUNCTION Center
  1303. * UDF to center a string.
  1304. * lc_string = String to center
  1305. * ln_width = Width of screen to center in
  1306. PARAMETER lc_string, ln_width
  1307. RETURN ((ln_width/2)-(LEN(lc_string)/2))
  1308. *EOP: Center()
  1309.  
  1310. *: EOF: BUILDMDX.PRG
  1311.  
  1312.