****************************************************************************** * * Routine to handle UniVerse SQLCO DBMS Parameters Management * * Module %M% Version %I% Date %H% * * (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved * This is unpublished proprietary source code of Ardent Software Inc. * The copyright notice above does not evidence any actual or intended * publication of such source code. * ******************************************************************************* * * Maintenence log - insert most recent change descriptions at top * * Date.... GTAR# WHO Description........................................ * 10/14/98 23801 SAP Change copyrights. * 10/08/93 12380 CSM comments, cleanup * 10/05/93 ---- CSM Initial programming * ******************************************************************************* $OPTIONS INFORMATION $INCLUDE UNIVERSE.INCLUDE FILENAMES.H $INCLUDE UNIVERSE.INCLUDE MTF.INCL.H common /sqlcocfg/ GNRC, IDBMS, SRVRS, CDBMS, PARMS, config2 ****************************************************************************** * DBPARS is the combination of GNRC and IDBMS for all DB names * lDBPARS is the combination of DBPARS and lCDBMS for the DB name at dbmsploc * * DBPARS: Field n, Value 1 contains a DB name * Value 2 contains the SV params separated by sub-value marks * Value 3 contains keywords of the SV params with SV marks * Value 4 contains the MV params separated by sub-value marks * lDBPARS: Value 5 contains flags set for user-configured MV params * lDBPARS: Value 6 contains flags set for user-configured SV params ****************************************************************************** * Various other variables ****************************************************************************** equ Default to 1 equ Y.N.Start to 17 ; * Starting location of y/n box ****************************************************************************** * Strings representing shell scripts to be executed and files used ****************************************************************************** Blank.Message = @SYS.BELL:UVREADMSG(071004,"") ****************************************************************************** temp=NULL CALL *ISUSER.B(0,temp) IF temp=0 THEN TPRINT UVREADMSG(071000,"") * SLEEP 3 * STOP END help.message=CONVERT(@FM," ",UVREADMSG(073644,"")) ***************************************************************************** * go to all initialization routines ***************************************************************************** GOSUB init.vars ; * initialize local variables ****************************************************************************** * In this section, we draw the first screen, print the menu bar and help * areas, and put up the first title and form to fill out. ****************************************************************************** CALL *DRAW.SCRN.B(UVREADMSG(073842,""),1) CALL *HELP.PRINT.B(CONVERT(@FM," ",UVREADMSG(073802,"")),2) GOSUB init.menu ; * Initialize menu bar items CALL *MNU.BAR.PR.B(Menu.Bar,1) GOSUB init.form ; * Initialize forms to be used CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) CALL READ.CONFIG lCDBMS = CDBMS GOSUB create.lists ****************************************************************************** * Starting point for routines actual activity. Paint help message and * continue ****************************************************************************** help.loop: CALL *HELP.PRINT.B(form,1) ****************************************************************************** * Starting point for actual data input. Here we position the cursor to the * place of the secondary prompt and get the input character, which is returned * in special, if a special character was encountered, or in temp, is data * was entered. ****************************************************************************** input.loop: TPRINT form: ; * position cursor temp=temp.form CALL *CINPUT.B(SEC.PRMPT,temp,special,form,form) ****************************************************************************** * First section handles all the special characters. ****************************************************************************** IF special # 0 THEN ; * if special character encountered BEGIN CASE ****************************************************************************** * Special character was Function Key F10. FALSE menu bar, get more data * Unless operation = Maintain, then do menu bar actions... ****************************************************************************** CASE special = F.10 ; * Function key F10 was pressed action.value = 1 CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) BEGIN CASE CASE action.value = 1 ; * ADD DBMS parameter temp.form<1>="Add" modified=0 CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) IF temp.form<2>=NULL THEN CALL *HELP.BOX.B(5,5,50,UVREADMSG(073849,"")) END GOTO end.f10 CASE action.value = 2 ; * Delete current entry temp.form<1>="Delete" modified=0 GOTO end.f10 CASE action.value = 3 ; * List current parameters of DBMS IF temp.form<2>=NULL THEN CALL *HELP.BOX.B(5,5,50,UVREADMSG(073849,"")) GOTO end.f10 END GOSUB prcurprms GOTO end.f10 CASE action.value = 10 ; * Modify parameter of DBMS temp.form<1>="Modify" modified=0 GOTO end.f10 CASE action.value = 5 ; * Refresh screen flag = TRUE CALL *HELP.PRINT.B(NULL,3) CALL *YES.NO.BOX.B(Y.N.Start,UVREADMSG(073061,""),flag) IF flag=TRUE THEN form.line=2 temp.form<3>=NULL dbms.param=NULL lCDBMS=CDBMS END CASE action.value = 6 ; * Save changes flag=TRUE CALL *HELP.PRINT.B(NULL,3) CALL *YES.NO.BOX.B(Y.N.Start,UVREADMSG(073066,""),flag) IF flag=TRUE THEN GOSUB Write.Config form.line=2 CASE action.value = 7 ; * Exit flag = FALSE CALL *HELP.PRINT.B(NULL,3) CALL *YES.NO.BOX.B(Y.N.Start,UVREADMSG(073066,""),flag) IF flag=TRUE THEN GOSUB Write.Config END STOP @(-1) CASE action.value = 4 ; * help on Application message=UVREADMSG(073808,"") CONVERT @FM TO " " IN message CALL *HELP.BOX.B(4,10,60,message) CASE action.value = 8 ; * help on Keys message=UVREADMSG(076001,"") CONVERT @FM TO " " IN message CALL *HELP.BOX.B(3,10,60,message) CASE action.value = 9 ; * help on version CALL *HELP.BOX.B(6,4,45,UVREADMSG(076000,"")) END CASE end.f10: CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT,1) GOTO help.loop ; * repaint and get new value ****************************************************************************** * Up arrow was pressed. ****************************************************************************** CASE special = UP.ARROW ; * Up arrow was pressed TPRINT form:PRMPT: IF temp.form # NULL THEN TPRINT temp.form: TPRINT STR(SPACE,form-LEN(temp.form)) END form.line-=1 IF form.line < 2 THEN form.line=form.size END GOTO help.loop ; * get more input ****************************************************************************** * Down arrow was pressed. ****************************************************************************** CASE special = DOWN.ARROW ; * Down arrow was pressed TPRINT form:PRMPT: IF temp.form # NULL THEN TPRINT temp.form: TPRINT STR(SPACE,form-LEN(temp.form)) END form.line+=1 IF form.line > form.size THEN form.line=2 END GOTO help.loop ; * get more input ****************************************************************************** * Function key F1 was pushed. This key is used to display more involved * Help messages ****************************************************************************** CASE special = F.1 CALL *HELP.PRINT.B(form,3) GOTO input.loop ; * get more input ****************************************************************************** * Escape key pressed. This is the systems signal to return to the calling * procedure. First clear the screen however ****************************************************************************** CASE special = ESCAPE ; * escape was pressed STOP @(-1) CASE special = F.4 temp="*" GOTO new.enter CASE Default GOTO help.loop END CASE ; * end of case END ; * end of if statement ****************************************************************************** * If we reach here, we must have had data input, which is returned from * *NINPUT in the variable temp. Therefore, process it and execute the * desired operation. ****************************************************************************** ELSE new.enter: sel.val=1 CALL *HELP.PRINT.B(NULL,3) ; * Clears help area jump=0 BEGIN CASE CASE form.line=2 IF temp="*" THEN CALL *HELP.PRINT.B(UVREADMSG(073058,""),2) CALL *HELP.PRINT.B(help.message,2) GOSUB prlstdbms CALL *HELP.PRINT.B(NULL,3) IF sel.val=-1 THEN temp=NULL CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END ELSE temp=sel.val temp.form=temp END CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) END IF temp=NULL THEN CALL *HELP.BOX.B(17,5,50,Blank.Message) temp.form<3>=NULL GOTO help.loop END IF NOT(temp MATCHES "1A0X") THEN CALL *HELP.BOX.B(17,5,50,UVREADMSG(073815,"")) temp.form=NULL temp.form<3>=NULL CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END temp.form=temp dbms.name=temp CASE form.line=3 ; * Enter Parameter IF temp="?" THEN CALL *HELP.PRINT.B(UVREADMSG(073058,""),2) CALL *HELP.PRINT.B(help.message,2) GOSUB prlstprms CALL *HELP.PRINT.B(NULL,3) IF sel.val=-1 THEN temp=NULL ELSE temp=sel.val:" = " temp.form=temp END CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END IF modified=1 OR temp.form<1>="Add" AND temp=NULL THEN CALL *HELP.BOX.B(17,5,50,Blank.Message) temp.form<3>=NULL dbms.param=NULL modified=0 GOTO help.loop END IF temp="*" THEN CALL *HELP.PRINT.B(UVREADMSG(073058,""),2) CALL *HELP.PRINT.B(help.message,2) GOSUB prcurprms CALL *HELP.PRINT.B(NULL,3) IF sel.val=-1 THEN temp=NULL ELSE temp=sel.val temp.form=temp dbms.param = temp END CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END IF NOT(temp=NULL) AND NOT(temp MATCHES "1A0X") THEN CALL *HELP.BOX.B(17,5,50,UVREADMSG(073833,"")) temp.form=NULL CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END IF NOT(temp=NULL) THEN param = upcase(field(temp, ' ', 1)) locate param in PARMS<1> by "AL" setting loc else CALL *HELP.BOX.B(17,5,50,UVREADMSG(073840,param)) temp.form=NULL CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END eqpos=index(temp, '=', 2) IF NOT(eqpos=0) THEN IF NOT(field(temp,' ',2)='=') OR field(temp,' ',3)=NULL OR NOT(field(temp,' ',4)='=') OR field(temp,' ',5)=NULL OR index(temp,' ',5) THEN CALL *HELP.BOX.B(17,5,50,UVREADMSG(073852,"")) temp.form=temp CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END END ELSE IF index(temp,' ',3) THEN CALL *HELP.BOX.B(17,5,50,UVREADMSG(073841,"")) temp.form=temp CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END IF param="MAPERROR" OR param="SQLTYPE" THEN CALL *HELP.BOX.B(17,5,50,UVREADMSG(073852,"")) temp.form=temp CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END END eqpos=index(temp, ' = ', 1) IF eqpos=0 OR NOT(field(temp,' ',2)='=') OR field(temp,' ',3)=NULL THEN CALL *HELP.BOX.B(17,5,50,UVREADMSG(073841,"")) temp.form=temp CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop END temp[1,eqpos]=upcase(temp[1,eqpos]) END temp.form = temp dbms.param = temp END CASE END IF form.line > 2 AND dbms.name=NULL THEN CALL *HELP.BOX.B(17,5,50,Blank.Message) form.line=2 GOTO help.loop END TPRINT form:PRMPT:temp.form: TPRINT STR(SPACE,form-LEN(temp.form)): IF jump=1 THEN jump=0 form.line+=1 TPRINT form:PRMPT:temp.form: TPRINT STR(SPACE,form-LEN(temp.form)): END form.line +=1 IF form.line <= form.size THEN GOTO help.loop IF temp.form<1>="Delete" THEN GOSUB procdel IF temp.form<1>="Modify" AND temp.form<3> = NULL THEN GOSUB procmodify GOTO help.loop END IF temp.form<1>="Add" AND temp.form<3>=NULL THEN CALL *HELP.BOX.B(17,5,50,Blank.Message) form.line=3 GOTO help.loop END IF temp.form<1>="Add" OR temp.form<1>="Modify" THEN flag=FALSE CALL *YES.NO.BOX.B(Y.N.Start,UVREADMSG(073065,""),flag) IF flag = FALSE THEN GOSUB amparam END form.line = 2 CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) GOTO help.loop STOP @(-1) ****************************************************************************** * init.menu - * Routine that initializes Menu Bar values for Maintain Servers section * of code. ****************************************************************************** init.menu: scratch=UVREADMSG(073844,"") Menu.Bar = NULL Menu.Bar<1,1> = 3 ; * Number of Items in Menu.Bar Menu.Bar<1,2> = 2 ; * Line # on which to print the Menu Bar * First Item Menu.Bar<2,1,1>=scratch<1> ; * SubMenu Title Menu.Bar<2,1,2>=3 ; * # of items in SubMenu * SubMenu #1 Menu.Bar<2,2,1>=scratch<2> ; * SubMenu Item Menu.Bar<2,2,2>=5 ; * Action Code (Returned to calling process) Menu.Bar<2,2,3>=scratch<3> Menu.Bar<2,3,1>=scratch<4> Menu.Bar<2,3,2>=6 Menu.Bar<2,3,3>=scratch<5> Menu.Bar<2,4,1>=scratch<6> Menu.Bar<2,4,2>=7 Menu.Bar<2,4,3>=scratch<7> * Second Item Menu.Bar<3,1,1>=scratch<8> ; * SubMenu Title Action Menu.Bar<3,1,2>=4 ; * # of items in SubMenu * SubMenu #1 Menu.Bar<3,2,1>=scratch<9> ; * SubMenu Item Add Menu.Bar<3,2,2>=1 ; * Action Code Menu.Bar<3,2,3>=scratch<10> Menu.Bar<3,3,1>=scratch<11> ; * SubMenu Item Delete Menu.Bar<3,3,2>=2 ; * Action Code Menu.Bar<3,3,3>=scratch<12> Menu.Bar<3,4,1>=scratch<13> ; * SubMenu Item List Menu.Bar<3,4,2>=3 ; * Action Code Menu.Bar<3,4,3>=scratch<14> Menu.Bar<3,5,1>=scratch<15> ; * SubMenu Item Modify Menu.Bar<3,5,2>=10 ; * Action Code Menu.Bar<3,5,3>=scratch<16> scratch=UVREADMSG(073089,"") Menu.Bar<4,1,1>=scratch<1> Menu.Bar<4,1,2>=3 Menu.Bar<4,2,1>=scratch<2> Menu.Bar<4,2,2>=4 Menu.Bar<4,2,3>=scratch<3> Menu.Bar<4,3,1>=scratch<4> Menu.Bar<4,3,2>=8 Menu.Bar<4,3,3>=scratch<5> Menu.Bar<4,4,1>=scratch<6> Menu.Bar<4,4,2>=9 Menu.Bar<4,4,3>=scratch<7> RETURN ****************************************************************************** * Init.form * This routine initializes all the positional parameters, help strings, * text strings, and default values for the form used in this subroutine ****************************************************************************** init.form: form.size=3 form=NULL scratch=UVREADMSG(073845,"") form<1,1>=@(5,5) ; * Start of Field Text form<1,2>=@(17,5) ; * Start of Field Data form<1,3>=scratch<1> ; * Message File Field Text form<1,4>="" ; * Message File Field Help form<1,5>="" ; * Message File Field long help, if any form<1,6>=10 ; * Field data length form<1,7>=1 ; * Field data upper-case form<2,1>=@(5,7) form<2,2>=@(17,7) form<2,3>=scratch<2> form<2,4>=scratch<3> form<2,5>=form<2,4> form<2,6>=31 form<2,7>=1 form<3,1>=@(5,8) form<3,2>=@(17,8) form<3,3>=scratch<4> form<3,4>=scratch<5> form<3,5>=scratch<6> form<3,6>=60 form<3,7>=1 temp.form<1>="Add" RETURN ****************************************************************************** * Write.Config - * This routine will write out the various lists to the configuration file. ****************************************************************************** Write.Config: rewrite: openseq config2 to cfgfile else retry=0 m1=UVREADMSG(073800,"") call *ERROR.BOX.B(10,3,0,UVREADMSG(073005,config2),retry,m1) if retry#0 then stop @(-1) else goto rewrite end line=1 OK=1 m1=UVREADMSG(073818,"") writeseq "[ODBC DATA SOURCES]" to cfgfile else goto writeerr for i=1 to dcount(SRVRS,@FM) writeseq "<":SRVRS:">" to cfgfile else goto writeerr writeseq SRVRS to cfgfile else goto writeerr writeseq SRVRS to cfgfile else goto writeerr writeseq SRVRS to cfgfile else goto writeerr writeseq SRVRS to cfgfile else goto writeerr svpars = dcount(SRVRS,@SVM) for k=1 to svpars writeseq SRVRS to cfgfile else goto writeerr next k mvpars = dcount(SRVRS,@SVM) for k=1 to mvpars writeseq SRVRS to cfgfile else goto writeerr next k next i for i=1 to dcount(lCDBMS,@FM) svpars = dcount(lCDBMS,@SVM) mvpars = dcount(lCDBMS,@SVM) if svpars=0 AND mvpars=0 then continue writeseq "[":lCDBMS:"]" to cfgfile else goto writeerr for k=1 to svpars writeseq lCDBMS to cfgfile else goto writeerr next k for k=1 to mvpars writeseq lCDBMS to cfgfile else goto writeerr next k next i weofseq cfgfile closeseq cfgfile CDBMS = lCDBMS CALL *HELP.BOX.B(5,5,50,UVREADMSG(073816,"")) goto end.wr.config writeerr: m1=UVREADMSG(073818,"") retry=0 CALL *ERROR.BOX.B(5,9,0,UVREADMSG(073070,config2),retry,m1) IF retry#0 THEN STOP @(-1) GOTO rewrite end.wr.config: RETURN ****************************************************************************** * Init.vars - * Routine which initializes various global variables ****************************************************************************** init.vars: form.line = 2 temp.form = NULL dbms.name=NULL dbms.param=NULL modified=0 RETURN ****************************************************************************** * Prlstdbms - * Routine which prints the list of dbms types ****************************************************************************** prlstdbms: heading="" heading=UVREADMSG(073819,"") print.array="" print.count=0 IF IDBMS="" THEN dbmsn=0 ELSE dbmsn = dcount(IDBMS, @FM) FOR i = 1 TO dbmsn locate IDBMS in print.array<1> by "AL" setting dbmsloc else print.array = insert(print.array,dbmsloc;IDBMS) print.count=print.count+1 end NEXT i IF lCDBMS="" THEN dbmsn=0 ELSE dbmsn = dcount(lCDBMS, @FM) FOR i = 1 TO dbmsn locate lCDBMS in print.array<1> by "AL" setting dbmsloc else print.array = insert(print.array,dbmsloc;lCDBMS) print.count=print.count+1 end NEXT i dbmsn = print.count IF print.count = 0 THEN print.array<1>=UVREADMSG(73820,"") print.count=1 END sel.val=1 CALL *LIST.BOX.B(heading,4,10,print.array,print.count,1,sel.val,0) IF dbmsn=0 THEN sel.val=-1 IF NOT(sel.val=-1) THEN sel.val=print.array RETURN ****************************************************************************** * Prlstprms - * Routine which prints the list of parameters ****************************************************************************** prlstprms: heading="" heading=UVREADMSG(073830,"") print.array = PARMS print.count = dcount(PARMS, @FM) IF print.count = 0 THEN print.array<1>=UVREADMSG(73832,"") print.count=1 END sel.val=1 CALL *LIST.BOX.B(heading,4,10,print.array,print.count,1,sel.val,0) IF sel.val=-1 THEN RETURN sel.val=print.array RETURN ****************************************************************************** * Prcurprms - * Routine which prints the list of currently set parameters ****************************************************************************** prcurprms: heading="" heading=UVREADMSG(073831,"") * Go through List 6 and pick out the relevant parameters for this dbms GOSUB locatedbms GOSUB loccdbms print.array = "" IF dbmsploc = 0 AND dbmsloc = 0 THEN svc = dcount(GNRC<1,1>, @SVM) mvc = dcount(GNRC<1,2>, @SVM) print.count = svc + mvc FOR i = 1 TO svc print.array = GNRC<1,1,i> print.array = "" NEXT i FOR i = 1 TO mvc print.array = GNRC<1,2,i> print.array = "" NEXT i END ELSE GOSUB combine.lists svc = dcount(lDBPARS, @SVM) mvc = dcount(lDBPARS, @SVM) print.count = svc + mvc FOR i = 1 TO svc print.array = lDBPARS IF lDBPARS=1 THEN print.array = "User" ELSE print.array = "" NEXT i FOR i = 1 TO mvc print.array = lDBPARS IF lDBPARS=1 THEN print.array = "User" ELSE print.array = "" NEXT i END IF print.count = 0 THEN print.array<1,1>=UVREADMSG(73832,"") print.count=1 END sel.val=1 CALL *LIST.BOX.B(heading,4,10,print.array,print.count,2,sel.val,0) IF svc+mvc=0 THEN sel.val=-1 IF sel.val=-1 THEN RETURN sel.val=print.array RETURN ****************************************************************************** * create.lists - * Routine which creates the lists required for this menu. ****************************************************************************** create.lists: DBPARS = "" TMPL = "" * Move Generic parameters to TMPL for i=1 to dcount(GNRC,@FM) for j=1 to dcount(GNRC,@VM) for k=1 to dcount(GNRC,@SVM) if index(GNRC, ' = ', 1) then param = field(GNRC, ' ', 1) locate param in TMPL<1,1,1> by "AL" setting loc else TMPL = insert(TMPL,1,1,loc,param) end end next k next j next i for dbm=1 to dcount(IDBMS,@FM) * For each internally defined DBMS copy TMPL to DBPARS DBPARS = IDBMS DBPARS = GNRC<1,1> DBPARS = TMPL<1,1> DBPARS = GNRC<1,2> for k=1 to dcount(IDBMS,@SVM) param = field(IDBMS, ' ', 1) locate param in DBPARS by "AL" setting loc then DBPARS = IDBMS else DBPARS = insert(DBPARS,dbm,2,loc,IDBMS) DBPARS = insert(DBPARS,dbm,3,loc,param) end next k for k=1 to dcount(IDBMS,@SVM) locate IDBMS in DBPARS by "AL" setting loc else DBPARS = insert(DBPARS,dbm,4,loc,IDBMS) end next k next dbm * Make Field 4 of lCDBMS to be the list of user configured SV param names for dbm = 1 to dcount(lCDBMS,@FM) for k=1 to dcount(lCDBMS,@SVM) param = field(lCDBMS, ' ', 1) locate param in lCDBMS by "AL" setting loc else lCDBMS = insert(lCDBMS,dbm,4,loc,param) next k next dbm CDBMS=lCDBMS RETURN ****************************************************************************** * combine.lists - * Routine which combines the DBPARS and lCDBMS lists into lDBPARS. ****************************************************************************** combine.lists: * Copy lCDBMS parameters into lDBPARS lDBPARS = DBPARS if dbmsloc=0 then return if dbmsploc=0 then dbmsploc = dcount(lDBPARS,@FM)+1 lDBPARS=lCDBMS lDBPARS = GNRC<1,1> lDBPARS = TMPL<1,1> lDBPARS = GNRC<1,2> end for k=1 to dcount(lCDBMS,@SVM) param = field(lCDBMS, ' ', 1) locate param in lDBPARS by "AL" setting loc then lDBPARS = lCDBMS lDBPARS = "1" end else lDBPARS = insert(lDBPARS,dbmsploc,2,loc,lCDBMS) lDBPARS = insert(lDBPARS,dbmsploc,3,loc,param) lDBPARS = insert(lDBPARS,dbmsploc,6,loc,"1") end next k for j=1 to dcount(lCDBMS,@SVM) param = field(lCDBMS, '=', 1) pval = field(lCDBMS, '=', 3) curparam="" curpval="" nummvpars = dcount(lDBPARS,@SVM) for k=1 to nummvpars curpval = field(lDBPARS, '=', 3) if NOT(pval=curpval) then continue curparam = field(lDBPARS, '=', 1) if NOT(param=curparam) then continue loc = k k = nummvpars next k if param=curparam AND pval=curpval then lDBPARS = lCDBMS lDBPARS = "1" end else locate lCDBMS in lDBPARS by "AL" setting loc else lDBPARS = insert(lDBPARS,dbmsploc,4,loc,lCDBMS) lDBPARS = insert(lDBPARS,dbmsploc,5,loc,"1") end end next j RETURN ****************************************************************************** * locatedbms - * Routine which finds the location of dbms.name in the list IDBMS ****************************************************************************** locatedbms: dbmsploc = 0 if IDBMS[1, len(dbms.name)+1] = dbms.name:@VM then dbmsploc = 1 else loc = index(IDBMS, @FM:dbms.name:@VM, 1) if loc then dbmsploc = dcount(IDBMS[1,loc], @FM) end RETURN ****************************************************************************** * loccdbms - * Routine which finds the location of dbms.name in the list lCDBMS ****************************************************************************** loccdbms: dbmsloc = 0 if lCDBMS[1, len(dbms.name)+1] = dbms.name:@VM then dbmsloc = 1 else loc = index(lCDBMS, @FM:dbms.name:@VM, 1) if loc then dbmsloc = dcount(lCDBMS[1,loc], @FM) end RETURN ****************************************************************************** * amparam - * Routine which adds or modifies the chosen parameter ****************************************************************************** amparam: modified=0 gosub loccdbms if dbmsloc=0 then dbmsloc=dcount(lCDBMS, @FM)+1 lCDBMS=dbms.name end if index(dbms.param, ' = ', 2) then param = field(dbms.param, '=', 1) pval = field(dbms.param, '=', 3) curparam="" curpval="" nummvpars = dcount(lCDBMS,@SVM) for k=1 to nummvpars curpval = field(lCDBMS, '=', 3) if NOT(pval=curpval) then continue curparam = field(lCDBMS, '=', 1) if NOT(param=curparam) then continue loc = k k = nummvpars next k if param=curparam AND pval=curpval then lCDBMS = dbms.param end else lCDBMS = insert(lCDBMS,dbmsloc,3,nummvpars,dbms.param) end else param = field(dbms.param, ' ', 1) locate param in lCDBMS by "AL" setting loc then lCDBMS = dbms.param else lCDBMS = insert(lCDBMS,dbmsloc,2,loc,dbms.param) lCDBMS = insert(lCDBMS,dbmsloc,4,loc,param) end end IF temp.form<1>="Add" THEN CALL *HELP.PRINT.B(UVREADMSG(073838,dbms.param),2) ELSE CALL *HELP.PRINT.B(UVREADMSG(073839,dbms.param),2) RETURN ****************************************************************************** * delparam - * Routine which deletes the chosen parameter ****************************************************************************** delparam: svpars = dcount(lCDBMS,@SVM) mvpars = dcount(lCDBMS,@SVM) if index(dbms.param, ' = ', 2) then for k=1 to mvpars until dbms.param = lCDBMS next k if dbms.param = lCDBMS then lCDBMS = delete(lCDBMS,dbmsloc,3,k) mvpars-=1 temp.form<3>=NULL CALL *HELP.PRINT.B(UVREADMSG(073846,dbms.name),2) end else CALL *HELP.BOX.B(17,5,50,UVREADMSG(073836,"")) end else locate dbms.param in lCDBMS by "AL" setting loc then lCDBMS = delete(lCDBMS,dbmsloc,2,loc) lCDBMS = delete(lCDBMS,dbmsloc,4,loc) svpars-=1 temp.form<3>=NULL CALL *HELP.PRINT.B(UVREADMSG(073846,dbms.name),2) end else CALL *HELP.BOX.B(17,5,50,UVREADMSG(073836,"")) end if svpars=0 AND mvpars=0 then lCDBMS = delete(lCDBMS,dbmsloc) RETURN ****************************************************************************** * procdel - * Routine which processes the delete option. ****************************************************************************** procdel: flag=FALSE CALL *HELP.PRINT.B(NULL,3) IF dbms.name = NULL THEN CALL *HELP.BOX.B(5,5,50,UVREADMSG(073849,"")) RETURN END CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) locname=dbms.name gosub locatedbms gosub loccdbms IF dbmsploc=0 AND dbmsloc=0 THEN CALL *HELP.PRINT.B(UVREADMSG(073843,dbms.name),2) ELSE form.line=3 IF dbms.param=NULL THEN GOSUB prcurprms IF sel.val=-1 THEN temp=NULL ELSE temp=sel.val temp.form=temp dbms.param=temp END CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) END IF dbms.param = NULL THEN RETURN CALL *YES.NO.BOX.B(17,UVREADMSG(073848,dbms.param),flag) IF flag=TRUE THEN GOSUB delparam ELSE CALL *HELP.PRINT.B(UVREADMSG(073847,dbms.name),2) END RETURN ****************************************************************************** * procmodify - * Routine which processes the modify option. ****************************************************************************** procmodify: form.line=3 IF dbms.param=NULL THEN GOSUB prcurprms IF sel.val=-1 THEN temp=NULL ELSE temp=sel.val temp.form=temp dbms.param=temp END modified=1 END CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) RETURN STOP @(-1) END