FUNCTION setini PARAMETER pcinifile, pcsection, ; pcvar, pcval PRIVATE lasect PRIVATE lavars PRIVATE ALL LIKE j* DIMENSION lasect[1], lavars[ 1,3] jlsuccess = .T. IF .NOT. EMPTY(pcinifile) jcfilename = IIF(AT('.', ; pcinifile) > 0, ; pcinifile, ; pcinifile + ; '.INI') pcsection = ALLTRIM(pcsection) pcvar = ALLTRIM(pcvar) pcval = ALLTRIM(pcval) IF FILE(jcfilename) jnhandle = FOPEN(jcfilename, ; 2) IF jnhandle < 0 jlsuccess = .F. = messagebox( ; 'Unable to open file: ' + ; jcfilename, ; 'File Open Error', ; 0) RETURN jlsuccess ENDIF ELSE jnhandle = -1 ENDIF = buildarray(jnhandle, ; @lasect,@lavars) IF jnhandle > -1 = FCLOSE(jnhandle) ENDIF jsuccess = buildini(jcfilename, ; pcsection,pcvar, ; pcval,@lasect, ; @lavars) ELSE jlsuccess = .F. ENDIF RETURN jlsuccess ENDFUNC && setini *!* FUNCTION buildini PARAMETER pcfilename, pcsection, ; pcvar, pcval, pasect, ; pavars PRIVATE ALL LIKE j* jlsuccess = .T. jnfhandle = 0 jlfoundvar = .F. jnfound = 0 IF .NOT. EMPTY(pasect) FOR jncount = 1 TO ; ALEN(pasect, 1) IF UPPER(pasect(jncount)) == ; UPPER(pcsection) jnfound = jncount EXIT ENDIF ENDFOR ENDIF IF jnfound > 0 FOR jncount = 1 TO ; ALEN(pavars, 1) IF pavars(jncount,1) == ; pcvar .AND. ; pavars(jncount,3) == ; jnfound pavars[ jncount, ; 2] = pcval jlfoundvar = .T. EXIT ENDIF ENDFOR IF .NOT. jlfoundvar IF .NOT. ; EMPTY(pavars(1)) jnlen2 = ALEN(pavars, ; 1) + 1 DIMENSION pavars[ ; jnlen2, ; 3] ELSE jnlen2 = 1 ENDIF pavars[ jnlen2, 1] = ; pcvar pavars[ jnlen2, 2] = ; pcval pavars[ jnlen2, 3] = ; jnfound ENDIF ELSE IF .NOT. EMPTY(pasect(1)) jnlen = ALEN(pasect, 1) + ; 1 DIMENSION pasect[ ; jnlen] ELSE jnlen = 1 ENDIF pasect[ jnlen] = pcsection IF .NOT. EMPTY(pavars(1)) jnlen2 = ALEN(pavars, ; 1) + 1 DIMENSION pavars[ ; jnlen2, 3] ELSE jnlen2 = 1 ENDIF pavars[ jnlen2, 1] = pcvar pavars[ jnlen2, 2] = pcval pavars[ jnlen2, 3] = jnlen ENDIF IF FILE(pcfilename) jcoldfile = SUBSTR(pcfilename, ; 1, AT('.', ; pcfilename) - 1) + ; '.BAK' IF FILE(jcoldfile) DELETE FILE (jcoldfile) ENDIF RENAME (pcfilename) TO ; (jcoldfile) ENDIF jnfhandle = FCREATE(pcfilename) IF .NOT. jnfhandle == -1 .AND. ; .NOT. EMPTY(pasect) FOR ncount = 1 TO ; ALEN(pasect, 1) IF (';' $ ; pasect(ncount)) .OR. ; EMPTY(pasect(ncount)) = FPUTS(jnfhandle, ; pasect(ncount)) ELSE = FPUTS(jnfhandle, ; '[' + ; pasect(ncount) + ; ']') ENDIF FOR ncount2 = 1 TO ; ALEN(pavars, 1) IF pavars(ncount2, ; 3) == ncount = FPUTS(jnfhandle, ; pavars(ncount2, ; 1) + ' = ' + ; pavars(ncount2, ; 2)) ENDIF ENDFOR ENDFOR = FCLOSE(jnfhandle) ELSE = messagebox( ; 'Unable to create file: ' + ; jcfilename, ; 'File create error',0) jlsuccess = .F. ENDIF RETURN jlsuccess ENDFUNC && buildini *!* FUNCTION buildarray PARAMETER pnfhandle, pasect, ; pavars PRIVATE ALL LIKE j* jnalen = 1 jnvarlen = 1 IF pnfhandle > -1 = FSEEK(pnfhandle, 0) DO WHILE .NOT. ; FEOF(pnfhandle) jcline = FGETS(pnfhandle) IF ';' $ jcline .OR. ; EMPTY(jcline) IF EMPTY(pasect(1)) pasect[ 1] = ; jcline ELSE jnalen = ALEN(pasect, ; 1) + ; 1 DIMENSION pasect[ ; jnalen] pasect[ ; jnalen] = ; jcline ENDIF ELSE jnfound1 = AT('[', jcline) jnfound2 = AT(']', jcline) IF jnfound1 > 0 .AND. jnfound2 > 0 jcsection = SUBSTR(jcline, ; jnfound1 + ; 1, ; jnfound2 - ; 2) IF EMPTY(pasect(1)) pasect[ ; 1] = ; jcsection ELSE jnalen = ; ALEN(pasect, ; 1) + 1 DIMENSION ; pasect[ ; jnalen] pasect[ ; jnalen] = ; jcsection ENDIF jnalen = ALEN(pasect, ; 1) ELSE IF AT('=', ; jcline) > ; 0 IF EMPTY(pavars(1, ; 1)) pavars[ ; 1, ; 1] = ; ALLTRIM(SUBSTR(jcline, ; 1, ; AT( ; '=', ; jcline) - ; 1)) pavars[ ; 1, ; 2] = ; ALLTRIM(SUBSTR(jcline, ; AT( ; '=', ; jcline) + ; 1)) pavars[ ; 1, ; 3] = ; jnalen ELSE jnvarlen = ; ALEN(pavars, ; 1) + ; 1 DIMENSION ; pavars[ ; jnvarlen, ; 3] pavars[ ; jnvarlen, ; 1] = ; ALLTRIM(SUBSTR(jcline, ; 1, ; AT( ; '=', ; jcline) - ; 1)) pavars[ ; jnvarlen, ; 2] = ; ALLTRIM(SUBSTR(jcline, ; AT( ; '=', ; jcline) + ; 1)) pavars[ ; jnvarlen, ; 3] = ; jnalen ENDIF ENDIF ENDIF ENDIF ENDDO ENDIF RETURN .T. ENDFUNC && buildarray *!* FUNCTION getini PARAMETER pcinifile, pcsection, ; pcvar PRIVATE ALL LIKE j* jcretval = '' IF .NOT. EMPTY(pcinifile) jcfilename = IIF(AT('.', ; pcinifile) > 0, ; pcinifile, ; pcinifile + ; '.INI') IF FILE(jcfilename) jnhandle = FOPEN(jcfilename) IF jnhandle < 0 jlsuccess = .F. = messagebox( ; 'Unable to open file: ' + ; jcfilename, ; 'File Open Error', ; 0) ELSE pcsection = ALLTRIM(UPPER(pcsection)) pcvar = ALLTRIM(UPPER(pcvar)) jcretval = readini(@jnhandle, ; pcsection, ; pcvar) = FCLOSE(jnhandle) ENDIF ENDIF ENDIF RETURN jcretval ENDFUNC && getini *!* FUNCTION readini PARAMETER pnfhandle, pcsection, ; pcvar PRIVATE ALL LIKE j* jcline = '' jcsection = '' jnfound1 = 0 jnfound2 = 0 jnfound3 = 0 jnalen = 0 jcretval = '' IF .NOT. EMPTY(pnfhandle) = FSEEK(pnfhandle, 0) DO WHILE .NOT. ; FEOF(pnfhandle) jcline = FGETS(pnfhandle) jnfound1 = AT('[', ; jcline) jnfound2 = AT(']', ; jcline) IF jnfound1 > 0 .AND. ; jnfound2 > 0 jcsection = UPPER(SUBSTR(jcline, ; jnfound1 + ; 1, ; jnfound2 - ; 2)) ENDIF IF jcsection == ; pcsection jnfound3 = AT('=', ; jcline) IF jnfound3 > 0 IF ALLTRIM(UPPER(SUBSTR(jcline, ; 1, ; jnfound3 - ; 1))) == ; pcvar jcretval = ; ALLTRIM(SUBSTR(jcline, ; jnfound3 + ; 1)) EXIT ENDIF ENDIF ENDIF ENDDO ENDIF RETURN jcretval ENDFUNC && readini