source: branches/guitools-2.0/shared/textini.vrs@ 1036

Last change on this file since 1036 was 455, checked in by Herwig Bauernfeind, 15 years ago

GUI-Tools: EVFSGUI: Fix Ticket #137

File size: 3.2 KB
Line 
1/* Deal with text INI files like smb.conf or WIN.INI */
2
3/* Available functions: */
4/* TRSetIni: Set/update value in a text INI file */
5/* More to be added */
6
7/*:VRX */
8TRSetIni: procedure expose TempDir/* Set value in a text INI file */
9 /* Syntax: */
10 /* ok = TRSetIni("[Section]","Key", "Value", "File") */
11 /* returns: */
12 /* 1 = success */
13 /* 0 = failure */
14
15 /* Check section, make sure it has trailing brackets */
16 SetSect = strip(arg(1))
17 if left(SetSect,1) <> '[' then SetSect = '['||SetSect
18 if right(SetSect,1) <> ']' then SetSect = SetSect||']'
19 USetSect = translate(SetSect)
20
21 /* Key */
22 SetVoc = strip(arg(2))
23 USetVoc = translate(SetVoc)
24
25 /* Value */
26 SetVal = arg(3)
27
28 /* INI file */
29 TINIfile = arg(4)
30
31 /* Temporary work file, FAT compliant */
32 if TempDir = "TEMPDIR" then TempDir = ""
33 tempINI = SysTempFileName(TempDir||"tempINI.???")
34 ok = SysFileDelete(tempINI)
35
36 /* Initialize variables */
37 TINI.0 = 0
38 I = 0
39 FoundSetSect = 0
40 DidUpdate = 0
41
42 /* Read TINIfile into stem and update if the key already exists */
43 do until lines(TINIfile) = 0
44 I = I + 1
45 TINI.I = strip(linein(TINIfile))
46 if TINI.I = "" then do
47 I = I - 1
48 iterate
49 end
50 if left(TINI.I,1) = '[' then do
51 if FoundSetSect = 1 & DidUpdate = 0 then do
52 /* We are through with the section, but our key was
53 not there - let's add it */
54 J = I
55 I = I + 1
56 TINI.I = TINI.J
57 TINI.J = '09'x||setvoc' = 'setval
58 DidUpdate = 1
59 end
60 CurSection = translate(TINI.I)
61 end
62 if CurSection = USetSect then FoundSetSect = 1
63 parse var TINI.I voc '=' val
64 ovoc = strip(voc)
65 voc = strip(translate(voc),,'09'x)
66 voc = strip(voc)
67 if voc = usetvoc & FoundSetSect then do
68 DidUpdate = 1
69 TINI.I = ovoc' = 'setval
70 end
71 end
72 ok = stream(TINIfile,'c','close')
73
74 if FoundSetSect = 1 & DidUpdate = 0 then do
75 /* We are through with the file, still in our section, but the key
76 was not there - let's add it */
77 I = I + 1
78 TINI.I = '09'x||setvoc' = 'setval
79 DidUpdate = 1
80 end
81
82 if FoundSetSect = 0 & DidUpdate = 0 then do
83 /* We are through with the file, neither our section nor our key
84 were there - let's add a new section with our key */
85 I = I + 1
86 TINI.I = SetSect
87 I = I + 1
88 TINI.I = '09'x||setvoc' = 'setval
89 DidUpdate = 1
90 end
91
92 /* Create a new file */
93 TINI.0 = I
94 do I = 1 to TINI.0
95 if left(TINI.I,1) = '[' & I > 1 then do
96 J = I - 1
97 if left(TINI.J,1) <> '#' then call charout tempINI, '0D0A'x
98 end
99 call lineout tempINI, TINI.I
100 end
101 ok = stream(tempINI,'c','close')
102
103 /* Update original and delete temporary */
104 Success = VRCopyFile(tempINI,TINIfile)
105 if Success then ok = SysFileDelete(tempINI)
106return Success
Note: See TracBrowser for help on using the repository browser.