diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/rnototex/iniops.pas |
Initial commit
Diffstat (limited to 'support/rnototex/iniops.pas')
-rw-r--r-- | support/rnototex/iniops.pas | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/support/rnototex/iniops.pas b/support/rnototex/iniops.pas new file mode 100644 index 0000000000..055cf3ef28 --- /dev/null +++ b/support/rnototex/iniops.pas @@ -0,0 +1,200 @@ +{ INI FILE MODULE FOR RNO TO TEX CONVERSION } +{ RANDALL VENHOLA JULY 7, 1987 } + +[INHERIT('UTILITYOPS','BASICFILEOPS','ARGOPS', + 'TREEANDLISTOPS','SCREENHANDLERS'), environment('iniops')] + +MODULE INIOPS; + + + +[GLOBAL] PROCEDURE readarglistfromini( var ini : text; var index : integer; + var list : arglist ); +const + iniseparator = '$'; +var + s : pckstr; + done : boolean; + gotten : boolean; + arg : argument; + inserted : boolean; + + function endofline : boolean; + begin + if eof(ini) then + endofline := true + else + begin + if eoln(ini) then + endofline := true + else + begin + if ini^ = blank then + endofline := true + else + endofline := false + end + end + end; + + function atseparator : boolean; + begin + atseparator := (ini^ = iniseparator) + end; + + procedure readpckstr( var s : pckstr; var gotten : boolean ); + var + ch : char; + done : boolean; + charindex : integer; + begin + s.body := blank; + done := false; + charindex := 0; + repeat + if endofline then + done := true + else + if atseparator then + done := true + else + if charindex = maxchars then + begin + warningmessage('readini','ini file argument size overflow'); + done := true + end + else + begin + read(ini, ch); + charindex := charindex + 1; + s.body[charindex] := ch + end; + s.length := charindex + until done; + gotten := charindex > 0; + if atseparator then read(ini, ch) + end; + + procedure readindex(var index : integer; var gotten : boolean ); + const + ndigits = 3; + var + count : integer; + ch : char; + begin + gotten := true; + count := 0; + index := 0; + repeat + if endofline then + gotten := false + else + if count < ndigits then + begin + read(ini, ch); + count := count + 1; + if ch in ['0'..'9'] then + index := index*10 + ord(ch) - ord('0') + else + begin + warningmessage('readini','bad index digits in INI'); + gotten := false + end + end + until (not gotten) or (count = ndigits); + if (gotten) and (not eof(ini)) then read(ini, ch) + end; + + procedure pckstrtoarg( s : pckstr; index : integer; var arg : argument); + label + routineexit; + begin + initarg(arg, [dsrverb], s, index, false ); + if s = '[N]' then + begin + reassignargclass(arg, [int,signedint,nulltype]); + reassignarggeneralization(arg, true); + goto routineexit + end; + if s = '[Y]' then + begin + reassignargclass(arg, [stylespecifier]); + reassignarggeneralization(arg, true); + goto routineexit + end; + if s = '[T]' then + begin + reassignargclass(arg, [textpckstr,character,nulltype]); + reassignarggeneralization(arg, true); + goto routineexit + end; + if s = '[C]' then + begin + reassignargclass(arg, [character,nulltype]); + reassignarggeneralization(arg, true); + goto routineexit + end; + if s = '[Q]' then + begin + reassignargclass(arg, [quotedpckstr,nulltype]); + reassignarggeneralization(arg, true); + goto routineexit + end; + routineexit : nullstatement + end; + +begin {readarglistfromini} + list := nulllist; + readindex(index, gotten ); + if gotten then + begin + if index < 1 then + warningmessage('readini','bad INI index value'); + repeat + readpckstr(s, gotten ); + if gotten then + begin + pckstrtoarg(s, index, arg ); + appendargonlist(list, arg); + end + until not gotten; + if arglistlength(list) = 0 then + warningmessage('readini','empty argument list in INI file') + end + else + begin + index := indexofunknowntexcommand; + warningmessage('readini','could not read index from INI file') + end; + if not eof(ini) then + readln(ini) +end; + + + + + + +[GLOBAL] PROCEDURE setuptree( var ini : text; var tree : argtree ); +var + list : arglist; + index : integer; +begin + openinifile( ini ); + tree := nulltree; + while not eof(ini) do + begin + readarglistfromini( ini, index, list); + + { ***** ttywritestring(' index read = '); + ttywriteint(index); + ttywriteln; ***** } + + insertlistintotree( list, tree ) + end; + closeinifile( ini ) +end; + + + +END. |