home *** CD-ROM | disk | FTP | other *** search
- <<* MSAPROC.INC *>>
-
-
- <<* MODIFIED 5 May 1988 *>>
-
- <<procedure GenProcStandard>>
- <<string alpha>>
- <<begin>>
-
-
- PROCEDURE {fileprefix}_Menu
- PARAMETER RS,CS,MN,MW
- SAVE SCREEN TO MENUSCRN
- DIME AMENU(MN)
- i = 1
- DO WHILE i <= MN
- STORE "MSG"+IIF(i >= 10,STR(i,2,0),STR(i,1,0)) TO MSG
- AMENU(i) = &MSG
- STORE i + 1 TO i
- ENDDO
- DO WHILE .T.
- <<GenColor( 0,'SCREEN')>>
- @ 23,0 SAY 'Press <Esc> to remove menu'
- @ RS,CS MENU AMENU,MN,MIN(MN,10)
- READ MENU TO menuchoice SAVE
- * ---CHECK FOR HELP KEY OR DELETE
- DO CASE
- CASE readkey() = 36
- DO SYS_HELP
- CASE READKEY() = 12
- RESTORE SCREEN FROM MENUSCRN
- STORE INKEY(0) TO STOP
- OTHERWISE
- EXIT
- ENDCASE
- ENDDO
- RELEASE AMENU
- RESTORE SCREEN FROM MENUSCRN
- RETURN
-
- PROCEDURE SYS_HELP
- SAVE SCREEN TO HELPSCRN
- <<GenColor( 0,'SCREEN')>>
- H = 0
- * ---HELP MENU
- DIME MHELP(3)
- MHELP(1) = 'Help'
- MHELP(2) = 'Calendar'
- MHELP(3) = 'Calculator'
- @ 1,60 MENU MHELP,3,3 TITLE ' Help '
- READ MENU TO H SAVE
- DO CASE
- CASE H = 1
- DO {fileprefix}_HELP WITH SYS(16,2)
- CASE H = 2
- DO D_CAL WITH 1,25
- OTHERWISE
- @ 24,0 CLEAR
- @ 24,0 SAY 'Not implemented in current release.'
- STORE INKEY(3) TO STOP
- ENDCASE
- RELEASE mhelp
- RESTORE SCREEN FROM HELPSCRN
- RETURN
-
-
- ******
- * date1()
- *
- * user defined PROCEDURE
- ******
- PROCEDURE date1
- * Syntax: date1( <date> )
- * Return: Character string of the date in mmm,dd,yyyy
- *
- PARAMETERS cl_date1
- RETURN SUBSTR(CMONTH(cl_date1),1,3)+" "+LTRIM(STR(DAY(cl_date1)))+ ;
- ", "+LTRIM(STR(YEAR(cl_date1)))
-
- ******
- * date2()
- *
- * user defined PROCEDURE
- ******
- PROCEDURE date2
- * Syntax: date2( <date> )
- * Return: Character string of the date in mmm,yyyy
- *
- PARAMETERS cl_date2
- RETURN SUBSTR(CMONTH(cl_date2),1,3)+" "+ ;
- LTRIM(STR(YEAR(cl_date2)))
-
- ******
- * date3()
- *
- * user defined PROCEDURE
- ******
- PROCEDURE date3
- * Syntax: date1( <date> )
- * Return: Character string of the date in mmm,dd
- *
- PARAMETERS cl_date3
- RETURN SUBSTR(CMONTH(cl_date3),1,3)+" "+LTRIM(STR(DAY(cl_date3)))
-
-
- ******
- * date4()
- *
- * user defined PROCEDURE
- ******
- PROCEDURE date4
- * Syntax: date4( <date> )
- * Return: Character string of the date in Month dd,yyyy
- *
- PARAMETERS cl_date4
- RETURN CMONTH(cl_date4)+" "+LTRIM(STR(DAY(cl_date4)))+ ;
- ", "+LTRIM(STR(YEAR(cl_date4)))
-
- ******
- * firstday()
- *
- * user defined PROCEDURE
- ******
- PROCEDURE firstday
- * Syntax: firstday( <date> )
- * Return: firstday of month
- *
- PARAMETERS cl_firstday
-
- RETURN ;
- CTOD(SUBSTR(DTOC(cl_firstday),1,3)+"01"+SUBSTR(DTOC(cl_firstday),6,3))
-
-
- ******
- * lastday()
- *
- * user defined PROCEDURE
- ******
- PROCEDURE lastday
- * Syntax: lastday( <date> )
- * Return: lastday of month
- *
- PARAMETERS cl_lastday
- PRIVATE cl_lastday,lastday
- DO CASE
- CASE MONTH(cl_lastday) <= 8
- STORE CTOD("0"+ltrim(str(month(cl_lastday)+1))+;
- "/01/"+ltrim(str(year(cl_lastday))))-1 TO lastday
- CASE MONTH(cl_lastday) >= 9 .AND. MONTH(cl_lastday) < 12
- STORE CTOD(ltrim(str(month(cl_lastday)+1)) + ;
- "/01/"+ltrim(str(year(cl_lastday))))-1 TO lastday
- CASE MONTH(cl_lastday) = 12
- STORE CTOD("01/01/"+ltrim(str(year(cl_lastday)+1)))-1 TO lastday
- ENDCASE
- RETURN lastday
-
- ******
- * months()
- *
- * user defined PROCEDURE
- ******
- PROCEDURE MONTHS
- * Syntax: MONTHS( <expD>, <expN> )
- * Return: A date n months ahead or behind
- *
- PARAMETERS cl_date, cl_num
- STORE VAL(SUBSTR(DTOC(cl_date),1,2)) TO CUR_MNTH
- STORE CUR_MNTH+cl_num TO TARGET_NUM
- IF VAL(SUBSTR(DTOC(cl_date),4,2)) >= 29
- * ---NEED TO CHECK OUT TARGET MONTH
- * ---WHAT IS LAST DAY OF TARGET MONTH?
- * ---IF IT IS NOT IN RANGE WE CHANGE cl_date
- IF TARGET_NUM <= 0 .OR. TARGET_NUM > 12
- STORE IIF(mod(TARGET_NUM,12)=0,12,mod(TARGET_NUM,12)) TO N_MONTH
- ELSE
- STORE TARGET_NUM TO N_MONTH
- ENDIF
- * ---CREATE A DATE
- IF N_MONTH <= 9
- STORE CTOD("0"+STR(N_MONTH,1,0)+ "/"+;
- "01/"+STR(YEAR(cl_date),4,0)) TO TEST_DT
- ELSE
- STORE CTOD(STR(N_MONTH,2,0)+ "/"+;
- "01/"+STR(YEAR(cl_date),4,0)) TO TEST_DT
- ENDIF
- IF VAL(SUBSTR(DTOC(cl_date),4,2)) <= ;
- VAL(SUBSTR(DTOC(LASTDAY(TEST_DT)),4,2))
- * --- DATE IS OK
- ELSE
- * --- REPLACE DATE WITH LASTDAY OF TEST_DT
- STORE CTOD(SUBSTR(DTOC(cl_date),1,3)+SUBSTR(DTOC(LASTDAY(TEST_DT)),4,3)+;
- SUBSTR(DTOC(cl_date),7,2)) TO cl_date
- ENDIF
-
- ENDIF
- * ---JUST ADD TO THE MONTHS AND CHECK THE YEAR
- DO CASE
-
- CASE TARGET_NUM <= 0
- STORE YEAR(cl_date)-1-INT(-TARGET_NUM/12) TO N_YEAR
- STORE IIF(mod(TARGET_NUM,12)=0,12,mod(TARGET_NUM,12)) TO N_MONTH
- * --- TEST N_YEAR FOR LEAP IF MONTH = 2 AND DAY = 29
- IF N_MONTH = 2 .AND. DAY(cl_date) = 29 .AND. ;
- mod(N_YEAR,4) <> 0
- STORE cl_date-1 TO cl_date
- ENDIF
- IF N_MONTH <= 9
- STORE CTOD("0"+STR(N_MONTH,1,0)+ "/"+;
- SUBSTR(DTOC(cl_date),4,2)+"/"+STR(N_YEAR,4,0)) TO TARGET_DT
- ELSE
- STORE CTOD(STR(N_MONTH,2,0)+ "/"+;
- SUBSTR(DTOC(cl_date),4,2)+"/"+STR(N_YEAR,4,0)) TO TARGET_DT
- ENDIF
- CASE TARGET_NUM <= 9 .AND. TARGET_NUM > 0
- STORE CTOD("0"+STR(TARGET_NUM,1,0)+ "/"+;
- SUBSTR(DTOC(cl_date),4,5)) TO TARGET_DT
- CASE TARGET_NUM > 9 .AND. TARGET_NUM <= 12
- STORE CTOD(STR(TARGET_NUM,2,0)+ "/"+;
- SUBSTR(DTOC(cl_date),4,5)) TO TARGET_DT
- CASE TARGET_NUM > 12
- STORE YEAR(cl_date)+INT(TARGET_NUM/12) TO N_YEAR
- STORE IIF(mod(TARGET_NUM,12)=0,12,mod(TARGET_NUM,12)) TO N_MONTH
- * --- TEST N_YEAR FOR LEAP IF MONTH = 2 AND DAY = 29
- IF N_MONTH = 2 .AND. DAY(cl_date) = 29 .AND. ;
- mod(N_YEAR,4) <> 0
- STORE cl_date-1 TO cl_date
- ENDIF
- IF N_MONTH <= 9
- STORE CTOD("0"+STR(N_MONTH,1,0)+ "/"+;
- SUBSTR(DTOC(cl_date),4,2)+"/"+STR(N_YEAR,4,0)) TO TARGET_DT
- ELSE
- STORE CTOD(STR(N_MONTH,2,0)+ "/"+;
- SUBSTR(DTOC(cl_date),4,2)+"/"+STR(N_YEAR,4,0)) TO TARGET_DT
- ENDIF
-
- ENDCASE
-
- RETURN TARGET_DT
-
- PROCEDURE D_CAL
-
- PARAMETERS ROW,COL
- PRIVATE ROW,COL,CUR_MNTH,DAY_NUM,LDAY,FDAY,i,k
- SAVE SCREEN
- SET COLOR TO W/R,R/W
- DIME CALENDAR(37)
-
- * --- THE FIRST CALENDAR WILL BE CURRENT MONTH
- STORE DATE() TO CUR_MNTH
-
- * ---WRITE TEMPLATE TO SCREEN
- * ---WRITE TEMPLATE TO SCREEN
- @ ROW+1,COL+1,ROW+15,COL+31 BOX '████████'
- @ ROW,COL CLEAR TO ROW+13,COL+30
- @ ROW,COL TO ROW+11,COL+30 DOUBLE
- @ ROW+10, COL+26 SAY ' µS '
- @ ROW+2,COL SAY '╟─────────────────────────────╢'
- @ ROW+3,COL+2 SAY 'Sun Mon Tue Wed Thu Fri Sat'
- @ ROW+11,COL SAY '╠═════════════════════════════╣'
- @ ROW+12,COL SAY '║ Use Arrow keys to navigate ║'
- @ ROW+13,COL SAY '║ Press <End> to Quit ║'
- @ ROW+14,COL SAY '╚═════════════════════════════╝'
-
- DO WHILE .T.
-
- * --- DETERMINE THE FIRST AND LAST DAY OF THE MONTH
- STORE LASTDAY(CUR_MNTH) TO LDAY
- STORE FIRSTDAY(CUR_MNTH) TO FDAY
-
- * ---REPLACE ARRAY WITH BLANKS
- i = 1
- DO WHILE i <= 37
- CALENDAR(i) = SPACE(2)
- i = i+1
- ENDDO
- * ---SET INDEX
- i = DOW(FDAY)
- * ---LOAD THE ARRAY
- STORE 1 TO DAY_NUM
- DO WHILE DAY_NUM <= DAY(LDAY)
- CALENDAR(i) = STR(DAY_NUM,2,0)
- DAY_NUM = DAY_NUM + 1
- i = i + 1
- ENDDO
- * ---WRITE THE MONTH AND DAYS
- STORE DATE2(CUR_MNTH) TO SCRN_DT
- @ ROW+1,COL+11 SAY SCRN_DT
- STORE 5 TO RW
- STORE 2 TO CL
- STORE 1 TO i
- DO WHILE i <= 37
- @ ROW+RW,COL+CL SAY CALENDAR(i)
- i = i + 1
- CL = CL + 4
- IF MOD(i,7) = 1
- RW = RW + 1
- CL = 2
- ENDIF
- ENDDO
- * ---CAPTURE THE KEY
- DO WHILE .T.
- k = 0
- DO WHILE k = 0
- k = INKEY()
- ENDDO
- DO CASE
- CASE k = 6 && END DEPRESSED
- RESTORE SCREEN
- RELEASE CALENDAR
- <<GenColor( 4,'SCREEN')>>
- * SET CURSOR ON
- RETURN
- CASE k = 5 && ARROW UP DEPRESSED
- STORE MONTHS(CUR_MNTH,12) TO CUR_MNTH
- EXIT
- CASE k = 24 && ARROW DOWN
- STORE MONTHS(CUR_MNTH,-12) TO CUR_MNTH
- EXIT
- CASE k = 4 && RIGHT ARROW PRESSED
- STORE MONTHS(CUR_MNTH,1) TO CUR_MNTH
- EXIT
- CASE k = 19 && LEFT ARROW PRESSED
- STORE MONTHS(CUR_MNTH,-1) TO CUR_MNTH
- EXIT
- ENDCASE
- ENDDO &&KEY
-
- ENDDO MAIN LOOP
- RETURN
-
-
- PROCEDURE SayRec
- * ---"SayRec" is used by the EDIT program and PROCEDURE DoCONT.
- *
- DO StatLine WITH RECNO(),DELETED()
- DO {fileprefix}_SAYS
- *
- * ---If you are calling "SayRec" from more than one
- * ---application, you may wish to replace the above
- * ---line with a DO CASE structure, as follows:
- *
- * * ---"appnum" is the application ID number.
- * DO CASE
- * CASE appnum = 1
- * DO AP1_SAYS
- * CASE appnum = 2
- * DO AP2_SAYS
- * ENDCASE
- *
- RETURN
-
- PROCEDURE GetKey
- PARAMETER choice,keychars
- PRIVATE keycode
- choice = "*"
- DO WHILE .NOT. (choice $ keychars)
- keycode = INKEY()
- IF keycode > 0
- choice = UPPER(CHR(keycode))
- ENDIF
- * ---A keyfilter can be implemented here, as follows:
- *
- * * ---FROM: {{}F1} ^leftarrow ^rightarrow
- * * ---INTO: "H" leftarrow rightarrow
- * fromkeys = CHR(28) + CHR(26) + CHR(2)
- * intokeys = "H" + CHR(19) + CHR(4)
- * choice = SUBSTR( "*"+intokeys,AT(choice,fromkeys) + 1,1 )
- ENDDO
- RETURN
-
- <<if ismultipage>>
-
- PROCEDURE Page
- PARAMETER pageno,pagedir,PageMax
- pageno = pageno + pagedir
- DO CASE
- CASE pageno < 1
- * ---Circle to last page.
- pageno = PageMax
- CASE pageno > PageMax
- * ---Circle to first page.
- pageno = 1
- ENDCASE
- RETURN
-
- <<endif>>
-
- PROCEDURE StatLine
- PARAMETER recnum,IsDeleted
- <<GenColor( 1,'STATUS' )>>
- @ 0,0 SAY STR( recnum,7,0 ) + "/"+LTRIM( STR(Reccount()) )
- <<if ismultipage>>
- @ 0,23 SAY STR( pageno,2 )
- <<endif>>
- <<if ismultials>>
- @ 0,29 SAY "< >"
- @ 0,30 SAY SUBSTR( DBFname,1,AT( ".",DBFname )-1 )
- <<endif>>
- IF IsDeleted
- @ 0,50 SAY " <Del> "
- ELSE
- @ 0,50 SAY " "
- ENDIF
- RETURN
-
- PROCEDURE PromptBar
- <<GenColor( 0,'HILITE' )>>
- STORE DATE4(DATE()) TO SYSDATE
- @ 22,0 SAY SPACE(80) &&CLEAR LINE
- @ 22,1 SAY INST_INC+SPACE(48-LEN(SYSDATE))+SYSDATE
- * ---Center the menu heading.
- col = (80 - LEN(menuhdg)) / 2
- @ 22,col SAY menuhdg
- <<Gencolor( 0,'SCREEN' )>>
-
- Return
-
- PROCEDURE SayEOF
- PARAMETER row,oldrecnum
- <<GenColor( 1,'PROMPT' )>>
- @ row,0 CLEAR
- IF EOF()
- @ row,0 SAY "END-OF-FILE encountered"
- ELSE
- @ row,0 SAY "BEGINNING-OF-FILE encountered"
- ENDIF
- WAIT
- @ row,0 CLEAR
- IF oldrecnum > 0
- GOTO oldrecnum
- ENDIF
- RETURN
-
-
- PROCEDURE SayLine
- PARAMETER row,strg
- <<GenColor( 1,'PROMPT' )>>
- @ row,0 CLEAR
- @ row,0 SAY strg
- RETURN
-
-
- PROCEDURE GotoRec
- PARAMETER row,recnum,lastrecnum
- recnum = 0
- SAVE SCREEN TO GOTOSCR
- @ 1,15,4,50 BOX ''
- @ 1,15,4,50 BOX "╒═╕│╛═╘│"
- @ 2,17 SAY "{ 1 to "
- @ 2,24 SAY SUBSTR( STR( lastrecnum + 1000000,7 ),2 ) + " } + {Return}"
- ?? SYS(2002,1)
- @ 3,17 SAY "Enter RECORD number" GET recnum;
- PICTURE "@Z 9999999" RANGE 0,lastrecnum
- READ
- ?? SYS(2002)
- RESTORE SCREEN FROM GOTOSCR
- IF recnum > 0
- GOTO recnum
- ENDIF
- RETURN
-
-
- PROCEDURE DoGOTO
- PARAMETER row,recnum,lastrecnum
- recnum = 0
- <<GenColor( 1,'PROMPT' )>>
- @ row,0 CLEAR
- menuchoice = 0
- MSG1 = "Top"
- MSG2 = "Bottom"
- MSG3 = "Number"
- MSG4 = "Return"
- DO {fileprefix}_MENU WITH 1,65,4,7
- choice = SUBSTR( Returnkey+"TBR"+Returnkey,menuchoice + 1,1 )
- @ row,0 CLEAR
- DO CASE
- CASE choice = Returnkey
- RETURN
- CASE choice = "T"
- GOTO TOP
- recnum = RECNO()
- CASE choice = "B"
- GOTO BOTTOM
- recnum = RECNO()
- CASE choice = "R"
- DO GotoRec WITH row,recnum,lastrecnum
- ENDCASE
- RETURN
-
-
- PROCEDURE DoLOCATE
- PARAMETER row,expr
- PRIVATE oldrecnum
- oldrecnum = RECNO()
- DO SayLine WITH row,"Locating..."
- LOCATE FOR &expr
- IF EOF()
- DO SayEOF WITH row,oldrecnum
- ELSE
- @ row,0 CLEAR
- @ row,0 SAY "LOCATE FOR" GET expr
- CLEAR GETS
- DO DoCONT WITH row
- ENDIF
- RETURN
-
-
- PROCEDURE DoCONT
- PARAMETER row
- PRIVATE oldrecnum
- choice = "Y"
- DO WHILE choice = "Y" .AND. .NOT. EOF()
- oldrecnum = RECNO()
- DO SayRec
- DO SayLine WITH row+1,"Continue? (y/n)"
- DO GetKey WITH choice,"YN"+Returnkey
- @ row+1,0 CLEAR
- IF choice = "Y"
- CONTINUE
- ENDIF
- ENDDO
- IF EOF()
- DO SayEOF WITH row,oldrecnum
- ENDIF
- RETURN
-
- <<end>> <<*GenProcStandard*>>
-
-
- <<#
- procedure GenFuncStandard
- begin
- select all
- select fields on ("VLU(" $ upper(fldval))
- if (fldtotal > 0)
- #>>
-
- PROCEDURE VLU
- PARAMETER lookals,lookexp,lookmsg
- PRIVATE origals,notvalid
- origals = STR( SELECT(),2 )
- SELECT &lookals
- SEEK lookexp
- notvalid = EOF()
- IF notvalid
- * ---Could not find <exp> in <LOOKUP> file.
- DO SayLine WITH PromptRow,lookmsg
- WAIT
- @ PromptRow,0 CLEAR
- ENDIF
- SELECT &origals
- RETURN .NOT. notvalid
-
- <<endif>>
- <<select all fields>>
- <<end GenFuncStandard>>
-
-
- <<procedure GenExecSeek>>
- <<string fixedkey>>
- <<begin>>
- <<fixedkey := fixautomem(ndxkey)>>
- <<if ndxtyp = 'C'>>
- expr = TRIM( {fixedkey} )
- IF "" <> expr
- SEEK expr
- ENDIF
- <<elsif ndxtyp = 'N'>>
- expr = {fixedkey}
- IF expr <> 0
- SEEK expr
- ENDIF
- <<else>> <<*DATE type*>>
- expr = {fixedkey}
- IF DTOC(expr) <> " / / "
- SEEK expr
- ENDIF
- <<endif>>
- <<end GenExecSeek>>
-
-
- <<#
- procedure GenKeySeek
- string pic,firstpart,keyfld
- integer count
- begin
- select all fields
- select fields on (fldtyp $ 'CDN') and (fldals <> 'M')
- forall (upper(fldnam) $ upper(ndxkey)) and (forcount <= 2)
- keyfld := fixfldnam
- #>>
- <<if fldtyp = 'C'>>
- {keyfld} = SPACE({fldwid})
- <<elsif fldtyp = 'N'>>
- {keyfld} = 0.0
- <<else>>
- {keyfld} = CTOD(" / / ")
- <<endif>>
- <<#
- endfor
- count := 0
- forall (upper(fldnam) $ upper(ndxkey)) and (forcount <= 2)
- count := count + 1
- keyfld := fixfldnam
-
- if forcount = 1
- firstpart := '@ row, 0 SAY "Enter ' + fldnam + '"'
- else
- firstpart := '@ row+1,0 SAY " ' + fldnam + '"'
- endif
-
- <<*---PICTURE---*>>
- pic := fldpic
- if fldtyp = 'N' <<*Force PICTURE on Numerics*>>
- pic := replicate( '9',fldwid )
- if flddec
- pic[ fldwid-flddec ] := '.'
- endif
- endif
- #>>
- <<if pic>>
- {firstpart} GET {keyfld} PICTURE {"}{pic}{"}
- <<else>>
- {firstpart} GET {keyfld}
- <<endif>>
- <<endfor>>
- <<if count = 0>>
- * ---Key expression: {ndxkey}
- DO SayLine WITH row,"Key expression does not match database file."
- WAIT
- @ row,0 CLEAR
- <<else>>
- READ
- <<GenExecSeek>>
- <<endif>>
- <<select all fields>>
- <<end GenKeySeek>>
-
-
- <<procedure GenSingleSEEK>>
- <<string alpha,fixedkey>>
- <<begin>>
-
- <<alpha := chr( dbfcount + 64 )>>
- <<if ismultials>>
- PROCEDURE {fileprefix}_{alpha}SEE
- <<else>>
- PROCEDURE {fileprefix}_SEEK
- <<endif>>
- PARAMETER row
- PRIVATE expr
- <<if not ismultials>>
- IF NdxOrder = "0"
- RETURN
- ENDIF
- <<endif>>
- <<GenColor( 1,'PROMPT' )>>
- @ row,0 CLEAR
- DO CASE
- <<forall indexes>>
- CASE NdxOrder = {"}{ndxcount}{"}
- <<GenKeySeek>>
- <<endfor>>
- ENDCASE
- RETURN
-
- <<end GenSingleSEEK>>
-
-
- <<procedure GenMultiSEEK>>
- <<string alpha>>
- <<begin>>
-
- PROCEDURE {fileprefix}_SEEK
- PARAMETER row
- IF NdxOrder = "0"
- RETURN
- ENDIF
- DO CASE
- <<forall databases>>
- CASE dbfarea = {"}{dbfcount}{"}
- <<alpha := chr( dbfcount + 64 )>>
- <<if ndxtotal > 0>>
- DO {fileprefix}_{alpha}SEE WITH row
- <<else>>
- * ---<none>.
- <<endif>>
- <<endfor>>
- ENDCASE
- RETURN
-
- <<end>> <<*GenMultiSEEK*>>
-
-
- <<procedure GenSetIndex( procname : string )>>
- <<string keydisp,keyopts,ndxnames>>
- <<integer width>>
- <<begin>>
-
- PROCEDURE {procname}
- PARAMETER row,ndxchoice
- <<GenColor( 1,'PROMPT' )>>
- @ row,0 CLEAR
- <<#
- forall indexes
- filespec( ndxnam,fpath,fname,fext )
- keydisp := keydisp + ' ' + str( ndxcount ) + '-' + fname + ' '
- genln(' MSG',str( ndxcount ),' = "',fname,'"' )
- keyopts := keyopts + str( ndxcount )
- endfor
- #>>
- @ 24,0 CLEAR
- @ 24,0 SAY 'Select index...'
- DO {fileprefix}_menu WITH 1,50,{ ndxtotal },8
- IF menuchoice = 0
- RETURN
- ENDIF
- STORE STR(menuchoice,1,0) to ndxchoice, NdxOrder
- SET ORDER TO &NdxOrder
- RETURN
-
- <<end>> <<*GenSetIndex*>>
-
-
- <<procedure GenSetNdxs>>
- <<string alpha,keydisp,keyopts,ndxnames>>
- <<begin>>
-
- PROCEDURE {fileprefix}_NDXS
- PARAMETER row,ndxchoice
- DO CASE
- <<forall databases>>
- CASE dbfarea = {"}{dbfcount}{"}
- <<alpha := chr( dbfcount + 64 )>>
- <<if ndxtotal > 1>>
- DO {fileprefix}_{alpha}NDX WITH row,ndxchoice
- <<else>>
- * ---Only one index.
- <<endif>>
- <<endfor>>
- ENDCASE
- RETURN
-
- <<end>> <<*GenSetNdxs*>>
-
-
- <<procedure GenSetFile>>
- <<string keydisp1,keyopts1,keydisp2,keyopts2,ndxnames>>
- <<integer width>>
- <<begin>>
-
- PROCEDURE {fileprefix}_FILE
- PARAMETER row,dbfchoice
- <<GenColor( 1,'PROMPT' )>>
- @ row,0 CLEAR
- <<#
- forall databases
- filespec( dbfnam,fpath,fname,fext )
- if forcount <= 5
- keydisp1 := keydisp1 + ' ' + str( dbfcount ) + '-' + fname + ' '
- keyopts1 := keyopts1 + str( dbfcount )
- else
- keydisp2 := keydisp2 + ' ' + str( dbfcount ) + '-' + fname + ' '
- keyopts2 := keyopts2 + str( dbfcount )
- endif
- endfor
- select all databases
- #>>
- <<if dbftotal <= 5>>
- @ row,0 SAY {"}SELECT: {keydisp1}{"}
- <<else>>
- @ row+1,0 SAY {"} {keydisp2}{"}
- @ row,0 SAY {"}SELECT: {keydisp1}{"}
- <<endif>>
- DO GetKey WITH dbfchoice,{"}{keyopts1}{keyopts2}{"}+Returnkey
- IF dbfchoice = Returnkey
- RETURN
- ENDIF
- dbfarea = dbfchoice
- DO {fileprefix}_AREA
- RETURN
-
- <<end>> <<*GenSetFile*>>
-
-
- <<procedure GenSetArea>>
- <<begin>>
-
- PROCEDURE {fileprefix}_AREA
- PRIVATE oldrecnum
- SELECT &dbfarea
- oldrecnum = RECNO()
- <<if ismultials>>
- DO CASE
- <<endif>>
- <<forall databases>>
- <<if ismultials>>
- CASE dbfarea = {"}{dbfcount}{"}
- <<pushmargin( 2 )>>
- <<else>>
- <<pushmargin( 1 )>>
- <<endif>>
- <<#
- GenFileVars
- if ndxtotal = 0
- genln( '* ---<No indexes>.' )
- genln( 'NdxOrder = "0"' )
- else
- GenIndexVars
- genln( 'NdxOrder = "1"' )
- endif
- if ismultipage
- select field 1
- genln( 'pageno = ',fldpag )
- genln( 'dbfpagemax = ',pagtotal )
- endif
- popmargin
- endfor
- #>>
- <<if ismultials>>
- ENDCASE
- <<endif>>
- LastRec = RECCOUNT()
- IF oldrecnum > 0 .AND. LastRec > 0
- GOTO oldrecnum
- ENDIF
- RETURN
-
- <<end GenSetArea>>
-
-
- <<#
- procedure GenProcSecond
- begin
- GenSetArea
- if ismultials
- GenSetFile
- endif
- GenFuncStandard
- select all
- if ndxtotal > 1
- if ismultials
- forall databases
- if ndxtotal > 1
- GenSetIndex( fileprefix + '_' + chr( 64 + dbfcount ) + 'NDX' )
- endif
- endfor
- if ismultindx
- GenSetNdxs
- endif
- else
- select database 1
- GenSetIndex( fileprefix + '_NDXS' )
- endif
- endif
- select all
- if ndxtotal > 0 <<*Total ndxs for entire system*>>
- if ismultials
- forall databases
- if ndxtotal > 0 <<*Total ndxs for each dbf*>>
- GenSingleSEEK
- endif
- endfor
- GenMultiSEEK
- else
- select database 1
- GenSingleSEEK
- endif
- endif
- end>> <<*GenProcSecond*>>
-
- <<* EOF: MSAPROC.INC *>>
- #>>
-