summaryrefslogtreecommitdiff
path: root/support/rnototex/iniops.pas
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/rnototex/iniops.pas
Initial commit
Diffstat (limited to 'support/rnototex/iniops.pas')
-rw-r--r--support/rnototex/iniops.pas200
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.