Path: utzoo!utgpu!water!watmath!clyde!bellcore!rutgers!uwvax!vanvleck!uwmcsd1!ig!agate!ucbvax!ean.ubc.ca!prindiville%ccrs.CDN From: prindiville%ccrs.CDN@ean.ubc.ca (John Edgecombe) Newsgroups: comp.os.vms Subject: Re: RUNOFF to TeX converter Message-ID: <20*prindiville@ccrs.cdn> Date: 11 Jul 88 21:48:00 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 1129 Sorry about the previous send, I am still learning this mailer. I'll try again with a different method. ...................... Cut between dotted lines and save. ..................... $!............................................................................. $! VAX/VMS archive file created by VMS_SHARE V06.00 26-May-1988. $! $! VMS_SHARE was written by James Gray (Gray:OSBUSouth@Xerox.COM) from $! VMS_SHAR by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au). $! $! To unpack, simply save, concatinate all parts into one file and $! execute (@) that file. $! $! This archive was created by user EDGECOMBE $! on 6-APR-1866 20:07:23.76. $! $! ATTENTION: To keep each article below 62 blocks (31744 bytes), this $! program has been transmitted in 5 parts. You should $! concatenate ALL parts to ONE file and execute (@) that file. $! $! It contains the following 18 files: $! ARGOPS.PAS $! BASICFILEOPS.PAS $! COMPILE_RNOTOTEX.COM $! CONVERSION.PAS $! DSROPS.PAS $! FLAGOPS.PAS $! GETCLI.FOR $! INIOPS.PAS $! LATEXOPS.PAS $! LINK_RNOTOTEX.COM $! RNOTOTEX.CLD $! RNOTOTEX.PAS $! RNOTOTEX.RNH $! RNOTOTEX_GUIDE.TEX $! SCREENHANDLERS.PAS $! SETUP.COM $! TREEANDLISTOPS.PAS $! UTILITYOPS.PAS $! $!============================================================================== $ SET SYMBOL/SCOPE=( NOLOCAL, NOGLOBAL ) $ VERSION = F$GETSYI( "VERSION" ) $ IF VERSION .GES "V4.4" THEN GOTO VERSION_OK $ WRITE SYS$OUTPUT "You are running VMS ''VERSION'; ", - "VMS_SHARE V06.00 26-May-1988 requires VMS V4.4 or higher." $ EXIT 44 $VERSION_OK: $ GOTO START $ $UNPACK_FILE: $ WRITE SYS$OUTPUT "Creating ''FILE_IS'" $ DEFINE/USER_MODE SYS$OUTPUT NL: $ EDIT/TPU/COMMAND=SYS$INPUT/NODISPLAY/OUTPUT='FILE_IS'/NOSECTION - VMS_SHARE_DUMMY.DUMMY b_part := CREATE_BUFFER( "{Part}", GET_INFO( COMMAND_LINE, "file_name" ) ) ; s_file_spec := GET_INFO( COMMAND_LINE, "output_file" ); SET( OUTPUT_FILE , b_part, s_file_spec ); b_errors := CREATE_BUFFER( "{Errors}" ); i_errors := 0; pat_beg_1 := ANCHOR & "-+-+-+ Beginning"; pat_beg_2 := LINE_BEGIN & "+-+-+-+ Beginning"; pat_end := ANCHOR & "+-+-+-+-+ End"; POSITION ( BEGINNING_OF( b_part ) ); i_append_line := 0; LOOP EXITIF MARK( NONE ) = END_OF( b_part ); s_x := ERASE_CHARACTER( 1 ); IF s_x = "+" THEN r_skip := SEARCH( pat_beg_1, FORWARD, EXACT ); IF r_skip <> 0 THEN s_x := "" ; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ERASE_LINE; ENDIF; ENDIF ; IF s_x = "-" THEN r_skip := SEARCH( pat_end, FORWARD, EXACT ); IF r_skip < > 0 THEN s_x := ""; MOVE_HORIZONTAL( -CURRENT_OFFSET ); m_skip := MARK( NONE ) ; r_skip := SEARCH( pat_beg_2, FORWARD, EXACT ); IF r_skip <> 0 THEN POSITION ( END_OF( r_skip ) ); MOVE_HORIZONTAL( -CURRENT_OFFSET ); MOVE_VERTICAL( 1 ) ; MOVE_HORIZONTAL( -1 ); ELSE POSITION( END_OF( b_part ) ); ENDIF; ERASE ( CREATE_RANGE( m_skip, MARK( NONE ), NONE ) ); ENDIF; ENDIF ; IF s_x = "V" THEN s_x := ""; IF i_append_line <> 0 THEN APPEND_LINE ; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF; i_append_line := 1; MOVE_VERTICAL ( 1 ); ENDIF; IF s_x = "X" THEN s_x := ""; IF i_append_line < > 0 THEN APPEND_LINE; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF ; i_append_line := 0; MOVE_VERTICAL( 1 ); ENDIF; IF s_x <> "" THEN i_errors := i_errors + 1; s_text := CURRENT_LINE; POSITION( b_errors ); COPY_TEXT ( "The following line could not be unpacked properly:" ); SPLIT_LINE ; COPY_TEXT( s_x ); COPY_TEXT( s_text ); POSITION( b_part ); MOVE_VERTICAL( 1 ); ENDIF; ENDLOOP; POSITION( BEGINNING_OF( b_part ) ); LOOP r_x := SEARCH( "`" , FORWARD, EXACT ); EXITIF r_x = 0; POSITION( r_x ); ERASE_CHARACTER( 1 ) ; IF CURRENT_CHARACTER = "`" THEN MOVE_HORIZONTAL( 1 ); ELSE COPY_TEXT( ASCII ( INT( ERASE_CHARACTER( 3 ) ) ) ); ENDIF; ENDLOOP; IF i_errors = 0 THEN SET ( NO_WRITE, b_errors, ON ); ELSE POSITION( BEGINNING_OF( b_errors ) ) ; COPY_TEXT( FAO( "The following !UL errors were detected while unpacking !AS" , i_errors, s_file_spec ) ); SPLIT_LINE; SET( OUTPUT_FILE, b_errors , "SYS$COMMAND" ); ENDIF; EXIT; $ DELETE VMS_SHARE_DUMMY.DUMMY;* $ CHECKSUM 'FILE_IS $ WRITE SYS$OUTPUT " CHECKSUM ", - F$ELEMENT( CHECKSUM_IS .EQ. CHECKSUM$CHECKSUM, ",", "failed!,passed." ) $ RETURN $ $START: $ FILE_IS = "ARGOPS.PAS" $ CHECKSUM_IS = 1669226973 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X{`009MODULE FOR LIST AND TREE OPERATIONS ARGUMENTS } X{`009RANDALL VENHOLA JULY 8, 1987 } X X X[INHERIT('SCREENHANDLERS','UTILITYOPS')] X XMODULE ARGOPS; X XCONST X X maxchars = 31; {# of chars in arg literal } X maxargsinarray = 15; {for conversion to an array of args} X indexofunknowntexcommand = 0; X XTYPE X X pckstr = VARYING [ maxchars ] of char; X X comparisons = (notvalid, lessthan, equal, greaterthan); X X setofcomparisons = set of comparisons; X X argtype = ( dsrverb, int, signedint, stylespecifier, X`009 textpckstr, character, quotedpckstr, nulltype); X X setofargtype = set of argtype; X X argument = record X`009 source : pckstr; X`009 isgeneralization : boolean; X `009 texindex : integer; X class : setofargtype X`009 end; X X argarray = array[1..maxargsinarray] of argument; X X X X X[GLOBAL] FUNCTION argliteral( arg : argument; smooth : boolean ) : pckstr; X Xvar X s : pckstr; X i,j, firstchar, lastchar : integer; X ch : char; X X procedure findfirstchar( s : pckstr; var firstchar : integer); X begin X firstchar := 1; X while (firstchar < s.length) and (s.body[firstchar] <= blank) do X firstchar := firstchar + 1 X end; X X procedure findlastchar( s : pckstr; var lastchar : integer ); X begin X lastchar := s.length; X while (lastchar > 1) and (s.body[lastchar] <= blank) do X lastchar := lastchar - 1 X end; X Xbegin X if smooth then X begin X findfirstchar( arg.source, firstchar); X findlastchar( arg.source, lastchar); X j := 0; X for i := firstchar to lastchar do X begin X ch := arg.source.body[i]; X if ch < blank then ch := blank; X if ch in ['a'..'z'] then ch := chr(ord(ch) - ord(blank)); X j := j + 1; X s.body[j] := ch X end; X if (j = 1) and (s.body[1] = blank) then X s.length := 0 X else X s.length := j X end X else X s := arg.source; X argliteral := s Xend; X X X X X X[GLOBAL] FUNCTION pckstrisgeneralization( s : pckstr ) : boolean; X label X routineexit; X var X flag : boolean; X begin X flag := false; X if s = '[N]' then X begin X flag := true; X goto routineexit X end; X if s = '[C]' then X begin X flag := true; X goto routineexit X end; X if s = '[Y]' then X begin X flag := true; X goto routineexit X end; X if s = '[T]' then X begin X flag := true; X goto routineexit X end; X if s = '[Q]' then X begin X flag := true; X goto routineexit X end; X routineexit : pckstrisgeneralization := flag Xend; X X X X X[GLOBAL] FUNCTION argisgeneralization( arg : argument ) : boolean; Xbegin X argisgeneralization := arg.isgeneralization Xend; X X X X V[GLOBAL] FUNCTION textualmatch( arg1, arg2 : argument) : boolean; X Xbegin X textualmatch := false; X if (arg1.source = '[T]') and (textpckstr in arg2.class) then X`009textualmatch := true X else X if (arg2.source = '[T]') and (textpckstr in arg1.class) then X`009textualmatch := true Xend; X X X X X[GLOBAL] FUNCTION compareargs( leftarg, rightarg : argument ) : comparisons; Xlabel X routineexit; Xvar X lefts, rights : pckstr; X equalpckstrs : boolean; X comp : comparisons; X X procedure greaterorlessthancompare; X begin X if lefts < rights then X comp := lessthan X else X comp := greaterthan X end; X X procedure checktexindex; X begin X if (leftarg.texindex = indexofunknowntexcommand) or X (rightarg.texindex = indexofunknowntexcommand) then X comp := equal X else X`009if leftarg.texindex = rightarg.texindex then X`009 comp := equal X`009else X greaterorlessthancompare X end; X Xbegin X if textualmatch( leftarg, rightarg) then X begin X comp := equal; X goto routineexit X end; X if (leftarg.class = [nulltype]) or (rightarg.class = [nulltype]) then X begin X comp := equal; X goto routineexit X end; X lefts := argliteral(leftarg, TRUE); X rights := argliteral(rightarg, TRUE); X equalpckstrs := (lefts = rights); X comp := notvalid; X if leftarg.class * rightarg.class <> [] then X begin X if equalpckstrs then X comp := equal X else X if (leftarg.isgeneralization) or (rightarg.isgeneralization) then X checktexindex X else X greaterorlessthancompare X end X else X greaterorlessthancompare; X routineexit : compareargs := comp Xend; X X X X X[GLOBAL] FUNCTION argtexindex( arg : argument ) : integer; Xbegin X argtexindex := arg.texindex Xend; X X X X X[GLOBAL] FUNCTION argclass( arg : argument ) : setofargtype; Xbegin X argclass := arg.class Xend; X X X X X[GLOBAL] PROCEDURE initarg( var arg : argument; classification : setofargtype; X lit : pckstr; index : integer; general : boolean ); Xbegin X arg.source := lit; X arg.class := classification; X arg.texindex := index; X arg.isgeneralization := general Xend; X X X X V[GLOBAL] PROCEDURE reassignargclass( var arg : argument; newclass : setofargtyp Xe); Xbegin X arg.class := newclass Xend; X X X X X[GLOBAL] PROCEDURE reassignargtexindex( var arg : argument; newindex:integer); Xbegin X arg.texindex := newindex Xend; X X X V[GLOBAL] PROCEDURE reassignarggeneralization( var arg : argument;general:boolea Xn); Xbegin X arg.isgeneralization := general Xend; X X X X X[GLOBAL] PROCEDURE appendchartoarg( ch : char; var arg : argument ); Xbegin X if arg.source.length = maxchars then X warningmessage('appendchartoarg','argument too long') X else X begin X arg.source.length := arg.source.length + 1; X arg.source.body[arg.source.length] := ch X end Xend; X X X X V[GLOBAL] PROCEDURE extractintegerfromargument( arg : argument; var successful : X boolean; X`009 var int : integer; X`009 var signed : boolean ); Xvar X s : pckstr; Xbegin X s := argliteral( arg, TRUE); X readv( s, int, error := continue ); X if statusv <> 0 then X successful := false X else X begin X successful := true; X signed := (s.body[1] = '+') or (s.body[1] = '-') X end Xend; X X X XEND. X $ GOSUB UNPACK_FILE $ FILE_IS = "BASICFILEOPS.PAS" $ CHECKSUM_IS = 172942151 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X[INHERIT('UTILITYOPS','SCREENHANDLERS','ARGOPS')] X XMODULE BASICFILEOPS; X XCONST X X maxfidchars = 255; X ndatetimechars = 11; X programversion = 'CVF02B'; X inifilename = 'INIT$RNOTOTEX'; X logfilename = 'RNOTOTEX.LOG'; X X XTYPE X Xfidtype = VARYING[maxfidchars] of char; X Xdatetimetype = packed array[1..ndatetimechars] of char; X X XVAR X inputcontainstexcommands : [EXTERNAL] boolean; X totallines, totalchars : [EXTERNAL] integer; X LOG`009 : [EXTERNAL] text; X X X X X[GLOBAL] PROCEDURE noconversion; Xbegin X writeln(log,'[no conversion performed]') Xend; X X X X X[GLOBAL] PROCEDURE greetuser ( var d, t : datetimetype ); Xbegin X date( d ); X time( t ); X clearscreen; X ttywritestring('RNOTOTEX '); X ttywritestring(programversion); X ttywritestring(' RUNOFF TO TEX CONVERSION '); X ttywritestring( d ); X ttywritestring( t ); X ttywriteln; X ttywriteln; X ttywriteln Xend; X X X X X V[GLOBAL] PROCEDURE openinputfile( fid : fidtype; var f : text; var openerror : Xboolean ); Xbegin X open( file_variable := f, X file_name := fid, X history := readonly, X default := 'INPUT.RNO', X error := continue ); X if status(f) <> 0 then X openerror := true X else X begin X reset( f ); X openerror := false X end Xend; X X X X X V[GLOBAL] PROCEDURE openoutputfile(fid : fidtype; var f : text; var openerror:bo Xolean); Xbegin X open( file_variable := f, X file_name := fid, X history := new, X default := 'OUTPUT.TEX', X error := continue ); X if status(f) <> 0 then X openerror := true X else X begin X openerror := false; X rewrite(f) X end; Xend; X X X X[GLOBAL] PROCEDURE openinifile ( var f : text ); Xbegin X open( file_variable := f, X file_name := inifilename, X history := readonly, X error := message ); X reset( f ); X ttywriteln; X ttywritestring('Loading INI file ...') Xend; X X X X X[GLOBAL] PROCEDURE openlogfile; { global var LOG : text used } Xbegin X open( file_variable := log, X`009 file_name := logfilename, X`009 history := new, X`009 error := continue ); X rewrite( log ) Xend; X X X X[GLOBAL] PROCEDURE closelogfile; Xbegin X close( file_variable := log, error := continue ) Xend; X X[GLOBAL] PROCEDURE closeinifile( var f : text ); Xbegin X close( file_variable := f, error := continue ); X ttywritestring('complete.'); X ttywriteln; Xend; X X X X X X[GLOBAL] PROCEDURE closefiles( var infile, outfile : text ); X Xbegin X close(file_variable := infile, error := continue); X close(file_variable := outfile, error := continue); X ttywritestring('complete.'); X ttywriteln; X ttywriteln; X ttywriteln; X if totallines = 1 then X ttywritestring(' RNOTOTEX read only one line from the input file.') X else X if totallines = 0 then X ttywritestring(' No end of line was found in the input file.') X else X begin X ttywritestring(' RNOTOTEX processed a total of '); X ttywriteint( totallines ); X ttywritestring(' lines.') X end; X ttywriteln; X if totalchars = 1 then X ttywritestring(' There was only one character in the file.') X else X if totalchars = 0 then X ttywritestring(' No printable characters were found in the file.') X else X begin X ttywritestring(' A total of '); X ttywriteint( totalchars ); X ttywritestring(' characters were read.') X end; X ttywriteln Xend; X X X X X X X[GLOBAL] PROCEDURE putcommentstooutput( var outfile : text; infid : fidtype; X`009 d, t : datetimetype ); Xbegin X writeln(outfile,'% document translated from DEC RUNOFF to LaTeX format'); V writeln(outfile,'% by program RNOTOTEX version ',programversion,' at ',d,bla Xnk,t); X writeln(outfile,'% Source file :',infid); X writeln(log,'[RNOTOTEX.LOG for ',infid,' ]'); X writeln(log,'[Processing at ',d, blank, t,' ]') Xend; X X X X X X[GLOBAL] PROCEDURE userinterface( var inputfid, outputfid : fidtype; X`009 var rno, tex : text ); X Xtype X packedarray = packed array[1..255] of char; X Xvar X openerror : boolean; X slashtex : integer; X X procedure getcli( var ifile, ofile : [class_s] packedarray; X var slashtex : integer ); fortran; Xbegin X getcli( inputfid.body, outputfid.body, slashtex ); X inputfid.length := 75; X outputfid.length := 75; X openinputfile( inputfid, rno, openerror); X if openerror then X warningmessage('openinputfile','Could not open that input file.'); X openoutputfile( outputfid, TEX, openerror); X if openerror then X warningmessage('openoutputfile','Could not open that output file.'); X inputcontainstexcommands := slashtex <> 0 Xend; X X XEND. $ GOSUB UNPACK_FILE $ FILE_IS = "COMPILE_RNOTOTEX.COM" $ CHECKSUM_IS = 861748146 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X$ IF ("''P1'" .EQS. "") THEN $ P1="PASCAL/OPTIMIZE/NOCHECK" X$ 'P1' SCREENHANDLERS X$ 'P1' UTILITYOPS X$ 'P1' ARGOPS X$ 'P1' BASICFILEOPS X$ 'P1' TREEANDLISTOPS X$ 'P1' FLAGOPS X$ 'P1' LATEXOPS X$ 'P1' INIOPS X$ 'P1' CONVERSION X$ 'P1' DSROPS X$ 'P1' RNOTOTEX X$ FORTRAN GETCLI $ GOSUB UNPACK_FILE $ FILE_IS = "CONVERSION.PAS" $ CHECKSUM_IS = 777150295 $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY X[INHERIT('UTILITYOPS','ARGOPS','FLAGOPS', X'TREEANDLISTOPS','LATEXOPS')] X XMODULE CONVERSION; X XCONST X maxlists = 8; X maxheaderlevels = 6; X maxlongpckstrchars = 75; XTYPE X Xlongpckstr = VARYING[maxlongpckstrchars] of char; X Xpagesizetype = record X`009 length : integer; X`009 width : integer X`009 end; X Xparagraphdeftype = record X `009 indent : integer; X`009 vertskip : integer; X`009 testpage : integer X`009 end; X Xnumberlisttype = record X`009 listlevel : integer; X`009 valuetoset : integer X`009 end; X Xdisplayelementstype = record X`009 leftchar : char; X`009 style : styletype; X`009 rightchar : char X`009 end; X Xleveltype = record X`009 value : integer; X`009 display : styletype X`009end; X Xheaderleveltype = array[1..maxheaderlevels] of leveltype; X X XVAR X X Xinputcontainstexcommands : [GLOBAL] boolean; X Xtotallines, totalchars : [EXTERNAL] integer; X Xpagesize : [GLOBAL] pagesizetype; X Xnumberpage : [GLOBAL] integer; X Xnumberrunning : [GLOBAL] integer; X Xdisplaynumber : [GLOBAL] styletype; X Xcapitalizetext, lowercasetext : [GLOBAL] boolean; X Xleftmargin : [GLOBAL] integer; X Xrightmargin : [GLOBAL] integer; X Xfill : [GLOBAL] boolean; X Xstartnofillagain : [GLOBAL] boolean; X Xjustify : [GLOBAL] boolean; X Xspacing : [GLOBAL] integer; X Xindent : [GLOBAL] integer; X Xcentering : [GLOBAL] boolean; X Xflushright : [GLOBAL] boolean; X Xminipageactive : [GLOBAL] boolean; X Xinmarginpar : [GLOBAL] boolean; X Xinfootnote : [GLOBAL] boolean; X Xparagraphdef : [GLOBAL] paragraphdeftype; X Xnumberlist : [GLOBAL] numberlisttype; X Xdisplayelements : [GLOBAL] displayelementstype; X Xnumberchapter : [GLOBAL] integer; X Xdisplaychapter : [GLOBAL] styletype; X Xheaderlevel : [GLOBAL] headerleveltype; X Xnestlevel : [GLOBAL] integer; X Xnumberappendix : [GLOBAL] integer; X Xdisplayappendix : [GLOBAL] styletype; X Xwritetexcommands : [GLOBAL] boolean; X Xflagtable : [GLOBAL] flagtabletype; X Xinliteral : [GLOBAL] boolean; X Xtitle, subtitle : [GLOBAL] argarray; X Xdatestring : [GLOBAL] pckstr; X Xpagestyle : [GLOBAL] pagestyletype; X Xliststate : [GLOBAL] array[1..maxlists] of liststatetype; X Xnumberofelements : [GLOBAL] array[1..maxlists] of integer; X Xoutputfirstitem : [GLOBAL] array[1..maxlists] of boolean; X Xlistnestlevel : [GLOBAL] integer; X Xnofillbeforelist : [GLOBAL] boolean; X XLOG : [EXTERNAL] text; X Xunderlineactive : [GLOBAL] enhancmentstates; X Xboldactive : [GLOBAL] enhancmentstates; X X X X[GLOBAL] FUNCTION quotedcharacter( arg : argument ) : char; Xvar X s : pckstr; Xbegin X s := argliteral( arg, true ); X if length(s) = 1 then X quotedcharacter := s[1] X else X if length(s) = 3 then X`009quotedcharacter := s[2] X else X`009quotedcharacter := blank Xend; X X X X[HIDDEN] PROCEDURE noconversion; EXTERN; X X X X X X X X[GLOBAL] PROCEDURE blankifypckstr( var s : pckstr ); Xbegin X s.body := blank; X s.length := 0 Xend; X X X X[GLOBAL] PROCEDURE initglobalvars; Xvar X i : integer; Xbegin X pagesize.length := 58; X pagesize.width := 60; X numberpage := 1; X numberrunning := 1; X displaynumber := decimal; X capitalizetext := false; X lowercasetext := false; X leftmargin := 0; X rightmargin := 60; X fill := true; X startnofillagain := false; X justify := true; X centering := false; X flushright := false; X minipageactive := false; X indent := 5; X spacing := 1; X paragraphdef.indent := 5; X paragraphdef.vertskip := 2; X paragraphdef.testpage := 5; X numberlist.listlevel := 1; X numberlist.valuetoset := 0; X nofillbeforelist := false; X displayelements.leftchar := blank; X displayelements.style := decimal; X displayelements.rightchar := blank; X numberchapter := 0; X numberappendix := 0; X displaychapter := decimal; X for i := 1 to maxheaderlevels do X begin X headerlevel[i].value := 0; X headerlevel[i].display := decimal X end; X nestlevel := 1; X inliteral := false; X makenullarray( title ); X makenullarray( subtitle ); X pagestyle := myheadings; X blankifypckstr( datestring ); X for i := 1 to maxlists do X begin X liststate[i] := nostate; X numberofelements[i] := 0; X outputfirstitem[i] := false X end; X listnestlevel := 0; X underlineactive := notenhanced; X boldactive := notenhanced Xend; X X X X X[GLOBAL] PROCEDURE loglist( list : arglist; index : integer); Xvar X l : arglist; Xbegin X writeln(log); X writeln(log,'INDEX >',index:1,' LENGTH >',arglistlength(list):1); X l := list; X write(log,'RUNOFF >'); X while l <> nulllist do X begin X write(log, argliteral(firstarg(l), false), blank); X l := nextinlist(l) X end; X writeln(log); X write(log,'TEX >') Xend; X X X X X[GLOBAL] PROCEDURE dumpthelist( var outfile : text; list : arglist ); Xbegin X if list <> nulllist then X begin X texwritearg(outfile, firstarg(list)); X dumpthelist(outfile, nextinlist(list)) X end Xend; X X X X X[GLOBAL] PROCEDURE newintvalue( arg : argument; var current : integer; X `009 var modified : parameterchangestates; X`009 var intextracted : integer ); Xvar X signed : boolean; X successful : boolean; Xbegin X modified := nochange; X extractintegerfromargument(arg, successful, intextracted, signed ); X if successful then X begin X if signed then X begin X modified := altered; X current := intextracted + current X end X else X begin X modified := assigned; X current := intextracted X end X end Xend; X X X X X[GLOBAL] PROCEDURE newcountparameter( arg : argument; var current : integer; X`009 var modified : parameterchangestates; X var countervalueextracted : integer; X`009 var class : countparametertype); Xbegin X modified := nochange Xend; X X V[GLOBAL] PROCEDURE newstyleparameter( arg : argument; var current : styletype ) X; Xvar X s : styletype; Xbegin X s := isastylespecifier( arg ); X if s <> undetermined then X current := s Xend; X X X X X[LOCAL] FUNCTION m( i : integer ) : integer; Xbegin X if i < 2 then X m := 1 X else X m := i - 1 Xend; X X X[LOCAL] PROCEDURE C( var f : text ); Xbegin X writeln(f,'}'); X writeln(log,'}') Xend; X X X X X[GLOBAL] PROCEDURE flagchange( f : dsrflagclasses; arg : argument ); Xvar X ch : char; Xbegin X turnflagon( f ); X ch := quotedcharacter( arg ); X if ch <> blank then X changeflagchar(f, ch) Xend; X X X X X[GLOBAL] PROCEDURE puttexcommand( var outfile : text; index : integer; X`009 dsrlist : arglist; X`009 var writeanothertexcommand : integer ); X Xlabel X routineexit; Xconst X charwidth = true; X charheight = false; Xvar X arg : argarray; X i, j, n : integer; X modified : parameterchangestates; X extractedvalue, skip, startindex : integer; X class : countparametertype; X f : dsrflagclasses; X q : char; X startedwithfill : boolean; X Xbegin X Xif (index < 1) or (index > 130) then goto routineexit; X Xwriteanothertexcommand := indexofunknowntexcommand; Xloglist( dsrlist, index ); Xn := arglistlength( dsrlist ); Xlisttoarray( dsrlist, index, arg, maxargsinarray); Xstartedwithfill := fill; Xstopunderline( outfile ); Xstopbold( outfile ); X X{ X n - number of arguments supplied with the DSR command X m(n-1) - one less than that number, unless n < 2 X m(n-2) - two less than the number of arguments, unless < 3 X etc X X arg[i] - the ith input dsr argument; e.g. four args could be : X X 1 2 3 4 X PAGE SIZE 10, 20 } X X X Xcase index of X X {***** PAGE SIZE *****} X 1 : begin X`009newintvalue(arg[n], pagesize.width, modified, extractedvalue); X`009newintvalue(arg[m(n)], pagesize.length, modified, extractedvalue); V adjustlength(outfile, modified, pagesize.width, extractedvalue,charwidt Xh,'textwidth'); V`009adjustlength(outfile, modified, pagesize.length, extractedvalue,charheight, X'textheight') X end; X X {***** HEADERS OFF *****} X 2 : adjustpagestyle(outfile, plain); X X {***** HEADERS ON ***** } X 3 : adjustpagestyle(outfile, headings); X X {***** HEADERS UPPER ***** } X 4 : noconversion; X X {***** HEADERS LOWER ***** } X 5 : noconversion; X X {***** HEADERS MIXED ***** } X 6 : noconversion; X X {***** ENABLE WRITING OF DATE *****} X 7 : begin X datestring := '\today'; X if pagestyle = myheadings then X adjustpagestyle(outfile, myheadings) X else X`009 noconversion X end; X X { ***** DISABLE WRITING OF DATE ***** } X 8 : begin X blankifypckstr( datestring ); X if pagestyle = myheadings then X adjustpagestyle(outfile, myheadings ) X else X noconversion X end; X`009 X { ***** LAYOUT ***** } X 9 : noconversion; X X { ***** NO NUMBER ***** } X 10 : adjustpagestyle(outfile, empty); X X { ***** NUMBER PAGE ***** } X 11 : begin X`009newcountparameter(arg[n], numberpage, modified, extractedvalue,class); X adjustcounter(outfile, modified, numberpage, extractedvalue, 'page') X end; X X { ***** NUMBER RUNNING ***** } X 12 : begin X newintvalue(arg[n], numberrunning, modified, extractedvalue); X adjustcounter(outfile, modified, numberrunning, extractedvalue,'page') X end; X X { ***** DISPLAY NUMBER ***** } X 13 : begin X newstyleparameter(arg[n], displaynumber); X`009adjuststyle(outfile, displaynumber, 'page') X end; X X { ***** NO PAGING ***** } X 14 : noconversion; X X { ***** PAGING ***** } X 15 : noconversion; X X { ***** BEGIN SUBPAGE ***** } X 16 : begin X if not minipageactive then X`009begin X`009 minipageactive := true; X if not startedwithfill then X`009 begin X`009 endnofill( outfile ); X`009 startnofillagain := true X`009 end; X`009 writeln(outfile,'\begin{minipage}'); X writeln( log,'\begin{minipage}'); X`009 if not startedwithfill then X`009 beginnofill( outfile ) X end X`009else X`009begin X`009 writeln(outfile,'% RNOTOTEX - minipage already active'); X`009 writeln( log,'% RNOTOTEX - minipage already active') X`009end X end; X X { ***** END SUBPAGE ***** } X 17 : begin X if minipageactive then X`009begin X if not fill then X`009 endnofill( outfile ); X writeln(outfile,'\end{minipage}'); X writeln( log,'\end{minipage}'); X if startnofillagain then X`009 begin X`009 startnofillagain := false; X`009 beginnofill( outfile ) X end X end X else -+-+-+-+-+ End of part 1 +-+-+-+-+-