This is a small utility to modify any kind of INI-Files.

It is DOS-based, so you can easily do the modifications from your
batch file or your network login script.

As an example, you can add the TimerCriticalSection=10000 for all users
in the SYSTEM.INI file, just by doing the following:

Create a file named SYSTEM.CMD which contains:
+[386enh]TimerCriticalSection=10000

And put the following command in you (system) login script:
maintini.exe N:\WINDOWS\SYSTEM.INI SYSTEM.CMD

After the new login, all your users have the new parameter set correctly
for the new WINUP9 from Novell.

A backup file with the extension .BAK is made before modifying the file.
Normaly all sections, keys and values are NOT case sensitive.
However _ and * give the possibility to match only if the case matches too.

MAINTINI can process INI-Files of any size, even larger than 64kBytes.
Just the CMD File should not have too much commands, because a dynamic list
with all commands is created. (The actual upper limit is 600 commands,
if you need more, then send me a mail or just split it in two cmd-files.
Anyway, to process an INI-file with 600 commands to apply is just slow.)

Commands of Maintini:

-[section]                The corresponding section is deleted
-[section]Key             The Key in section will be deleted
-[section]Key=Value       The Key is only deleted if the Value matches exactly
                          This is used to delete device=... lines in system.ini
_[section]Key=Value       Same as - but Value is case sensitive
                          Normaly not used.

#[section]                The corresponding section is commented
#[section]Key             The Key in section will be commented
#[section]Key=Value       The Key is only commented if the Value matches exactly
                          This is used to comment device=... lines in system.ini
@[section]                The ; in front of the corresponding section is removed
@[section]Key             The ; in front of the Key in section is removed
@[section]Key=Value       The ; in front of the Key is removed, if the Value 
                          matches exactly. This is used to uncomment
                          device=... lines in system.ini

+[Section]Key=            Adds Key in Section.
+[Section]Key=Value       Adds Key and Value to section.
&[Section]Key=Value       This Key/Value is always inserted, even if already
                          a key exists, but with a different value. Used to
                          insert device=... lines in System.ini
*[Section]Key=Value       Same as &, but the value is casesensitive
                          Normaly not used.

![Section]Key=Value       A key is inserted in section, but a numeric value is 
                          added to Key, representing the highest+1 value of Key.
                          (Only ?) used for Progman.ini to add new program
                          groups
                          [Section]
                          Key1=Value1
                          Key2=Value2
                          Key3=Value3

                          ![Section]Key=ValueZ

                          Gives
                          [Section]
                          Key1=Value1
                          Key2=Value2
                          Key3=Value3
                          Key4=ValueZ

                          If the command in ![Section]Key=Value2 then
                          the line is not duplicated.
                          You can add multiple ! entrys per Section/Key pair
                          in one pass

>[Section]Key= Value      Adds Value to an existing value. The old Value is
                          preserved and the Value is added added at the end
                          of the line.
                          
                          [Section]
                          Key=Value0

                          >[Section]Key= Value1

                          Gives
                          [Section]
                          Key=Value0 Value1
                          
                          It is very important, that you have a space or a
                          period sign before the Value, this is to ensure that
                          the , sign is placed at the right place (or even
                          ignored if this is the first value).

<[Section]Key=Value       Deletes Value from the Key/Value line. Leading and
                          trailing period-signs are cut off.

r[Section]Original=NewValue The string <Original> is replaced with <NewValue>,
                            but only in if [Section] is the current one. If you
                            want to replace the Original in ALL sections (even
                            in the section definition) then specify [] as the
                            section. 

R[Section]Original=NewValue Same as r command, but the case must match.


You should not use more than one < or > command for each Section/Key !!!!
This does not behave correctly. If this is a limitation for you, 
then you can tell me why you want another version who can do this.
I will then implement it, if I find the time to do it.

In ALL Value-strings, you can insert a sequence %...%, to replace the
text with the content of a DOS environment variable.

+[boot]run=F:\USER\%USER%\WINDOWS\CAL.EXE

%USER%  will be replaced with the value of the USER - Environment variable.

When it finds a single % in the line then the % remains in the value.

If it finds %%, then it is replaced with a single %.
So you can use F:\USR\%%USER%%\TEMP to be transformed into
F:\USR\%USER%\TEMP. If you simply use F:\USR\%USER%\TEMP it will
try to replace %USER% with the corresponing environment variable.
You must use this, every time you have more than one % sign
in the value, but don't want to replace it.

If the specified environment variable does not exist, then a warning message
is displayed on the screen, and the %...% is removed from the value.


When you want to rename a section, then do the following:
r[][OldSectionName]=[NewSectionName]
Maintini then looks in each line for the Old-name and if it finds it,
it replaces it with the new name. You should include the [..] to be
sure, that only section headings are replaced.

With the r command it is very easy to move a program/library to a new location.
Of course you must take care to correct all other references to that location.
(In the registeration database OLE, in DDE-statements and of course the
 program icon in the program manager.)

This version of MAINTINI may be freely distributed.

MAINTINI is emailware, which means if you find this program usefull,
you should send me an email. (Or a nice postcard if you don't have
access to an email system)

If you send me a message, then I will inform you of all changes and
new versions of this utility.


My email adress:

Compuserve   :  100034,3536 Andre Schild
Internet     :  100034.3536@compuserve.com
AT&T Mail    :  mhs!csmail!100034.3536
X400         :  /c=US/ad=compuserve/pd=csmail/d.id=100034.3536
MCI          :  TO: Andre Schild   
                EMS: COMPUSERVE/ MCI ID:281-6320
                MBX: 100034,3536
MHS          :  MAIL@CSERVE {100034,3536}

Postal adress:  Andre Schild
                Pfeidstrasse 8
                CH-2555 Bruegg b. Biel
                Switzerland
