A switch like that would be good. The ini format seems like it's designed for text lines containing item=data which end with $crlf, so I'm thinking that most users would not expect $crlf within data to be written to disk. I was tempted to write from -default mode for saveini to -i because -i is easier to read, without having to figure out which line in a big file is the itemname and which is the data.

Looking at the wikipedia page was a little confusing since there doesn't seem to be a unified INI format, so I'm not yet sure which all variants are being supported by hsave/writeini. Based on what I read there, I did find something unexpected related to hashtable or writeini itemnames beginning with semi-colons, as I hadn't realized that INI supported optional comments.

In this example, $ini and $readini can see the itemname beginning with semicolon when looking at the file they wrote to, but can't see it when that file is copied to another filename. Same happens with /hload using a cached version of a non-existant hashtable when reading from that same file, but can't see the same thing from another file written from /writeini.

And just like with the prior alias, once the client restarts and the cache is gone, the data following that embedded $crlf moves to a new itemname if it contains an embedded '=', or becomes data that's ignored. And the itemnames beginning with semicolon which formerly had been seen are now invisible.

//echo -a === | hfree -w test* | var %file1 test1.ini , %file2 test2.ini , %file3 test3.ini , %i 1 , %j 1 | remove %file1 | writeini %file1 hashtable ;not-a-comment words words | writeini %file1 hashtable item data | flushini %file1 | while ($ini(%file1,hashtable,%i)) { echo 4 -a %i : $v1 : $readini(%file1,hashtable,$v1) | inc %i } | echo -a now let's again from another filename where count changes 2->1 | copy -o %file1 %file2 | while ($ini(%file2,hashtable,%j)) { echo 3 -a %j : $v1 : $readini(%file2,hashtable,$v1) | inc %j } | hadd -m test item data | hadd test ;not-a-comment words words | hsave -si test %file3 | hfree -s test | hload -sim test %file1 | noop $hfind(test,*,0,w,echo 3 -a $1 $hget(test,$1) ) | hload -sim test3 %file3 | noop $hfind(test3,*,0,w,echo 4 -a $1 $hget(test3,$1) )