mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 17:34:06 +00:00
218 lines
5.3 KiB
Plaintext
218 lines
5.3 KiB
Plaintext
$title ('PRINT MODULE')
|
|
print:
|
|
do;
|
|
|
|
/*
|
|
|
|
modified 3/26/81 R. Silberstein
|
|
modified 3/30/81 R. Silberstein
|
|
modified 4/7/81 R. Silberstein
|
|
modified 4/9/81 R. Silberstein
|
|
modified 4/16/81 R. Silberstein
|
|
modified 4/20/81 R. Silberstein
|
|
modified 5/5/81 R. Silberstein
|
|
modified 7/24/81 R. Silberstein
|
|
modified 7/27/81 R. Silberstein
|
|
modified 8/19/81 R. Silberstein
|
|
modified 9/2/81 R. Silberstein
|
|
modified 9/19/81 R. Silberstein
|
|
|
|
*/
|
|
|
|
$include (:f1:macro.lit)
|
|
$include (:f1:struc.lit)
|
|
$INCLUDE (:F1:DEV.LIT)
|
|
$include (:f1:files.ext)
|
|
$include (:f1:subr2.ext)
|
|
$include (:f1:global.ext)
|
|
$include (:f1:text.ext)
|
|
|
|
dcl
|
|
pageno byte, /* current page no */
|
|
lineno byte, /* current line no */
|
|
col byte, /* column counter */
|
|
field1start lit '6', /* start of hexoutput print */
|
|
FIELD15START LIT '19', /* START OF ABSOLUTE ADDRESS FIELD */
|
|
field2start lit '24'; /* start of source output print */
|
|
|
|
printbyt: proc(ch);
|
|
dcl ch byte;
|
|
if not asciichar(ch) then ch='#';
|
|
if ch <> lf then col=col+1;
|
|
if ch = cr then col=0;
|
|
call outprintbyte(ch);
|
|
end printbyt;
|
|
|
|
advance: proc(n); /* advance to column "n" */
|
|
dcl n byte;
|
|
do while n > col;
|
|
call printbyt(space);
|
|
end$while;
|
|
end advance;
|
|
|
|
printtext: proc(s);
|
|
dcl s address,ch based s byte;
|
|
DO WHILE CH <> 0;
|
|
CALL PRINTBYT (CH);
|
|
S = S + 1;
|
|
END;
|
|
end printtext;
|
|
|
|
printheader: proc;
|
|
COL = 0;
|
|
pageno=pageno+1;
|
|
call printtext(.initials);
|
|
call printtext(.sourcename);
|
|
call printtext(.(' ',0));
|
|
call printtext(.title);
|
|
call advance(maxcol-11);
|
|
call printtext(.pagetext);
|
|
call decout(pageno,.help(0));
|
|
call printtext(.help(1));
|
|
call printtext(.(cr,lf,cr,lf,cr,lf,0));
|
|
lineno=4;
|
|
end printheader;
|
|
|
|
/* Public routine to perform page eject */
|
|
|
|
eject: proc public;
|
|
if simform then$do
|
|
do while (lineno:=lineno+1) <= pagesize;
|
|
call printbyt(cr);
|
|
call printbyt(lf);
|
|
end$while;
|
|
else$do
|
|
call outprintbyte(formfeed);
|
|
end$if;
|
|
lineno=0;
|
|
end eject;
|
|
|
|
printnewpage: proc public;
|
|
IF LINENO > 4 THEN$DO
|
|
call eject;
|
|
call printheader;
|
|
END$IF;
|
|
end printnewpage;
|
|
|
|
incrementline: proc;
|
|
lineno = lineno + 1;
|
|
if lineno >= pagesize - 10 then call printnewpage;
|
|
end incrementline;
|
|
|
|
/* Print single byte,update column counter,
|
|
expand tabs (each 8.th column) */
|
|
|
|
print$single$byte: proc(ch) public;
|
|
dcl ch byte;
|
|
if ch=tab then$do
|
|
ch=8-((col-field2start) mod 8);
|
|
do while (ch:=ch-1) <> 0ffh;
|
|
call printbyt(space);
|
|
end$while;
|
|
else$do
|
|
call printbyt(ch);
|
|
if ch = lf then call incrementline;
|
|
end$if;
|
|
end print$single$byte;
|
|
|
|
print$crlf: proc public;
|
|
call print$single$byte(cr);
|
|
call print$single$byte(lf);
|
|
end print$crlf;
|
|
|
|
/* Print a field given by last column of field,source-
|
|
array containing ascii bytes,index of this array, and
|
|
index of last byte of source array. Before entry, the
|
|
current column position must be start of this field. */
|
|
|
|
print$field: proc (sourceindex,s,lastindex,stopcol);
|
|
dcl (sourceindex,s,lastindex) address,
|
|
stopcol byte,
|
|
source based s (1) byte,
|
|
k based sourceindex byte,
|
|
last based lastindex byte;
|
|
|
|
do while col < stopcol and k < last;
|
|
call print$single$byte(source(k));
|
|
k=k+1;
|
|
end$while;
|
|
end print$field;
|
|
|
|
print$sl: proc;
|
|
dcl (i,j) byte;
|
|
DECLARE K BYTE;
|
|
|
|
IF (PRINTDEVICE = NULL) AND NOT ERRORPRINTED THEN RETURN; /* NO NEED TO WASTE TIME HERE */
|
|
if include$on then$do
|
|
prefix(0)='=';
|
|
if prefixptr=0 then prefixptr=1;
|
|
end$if;
|
|
i,j,col=0;
|
|
/* print first field of line prefix */
|
|
call printfield(.i,.prefix(0),.prefixptr,field1start);
|
|
|
|
/* Print rest of prefix and source.
|
|
If line overflow, print rest on
|
|
following lines. */
|
|
|
|
if prefixptr-i+sourceptr > 0 then$do
|
|
do while (prefixptr-i) + (sourceptr-j) >0;
|
|
call advance(field1start);
|
|
call printfield(
|
|
.i,.prefix(0),.prefixptr,((field15start-1)/3)*3);
|
|
IF ABSADDR (0) <> SPACE THEN$DO
|
|
CALL ADVANCE (FIELD15START);
|
|
DO K = 0 TO 3;
|
|
CALL PRINTSINGLEBYTE (ABSADDR (K));
|
|
END;
|
|
END$IF;
|
|
if sourceptr-j >0 then$do
|
|
call advance(field2start);
|
|
call printfield(.j,.sourcebuf(0),.sourceptr,maxcol-1);
|
|
end$if;
|
|
call printcrlf;
|
|
end$while;
|
|
else$do
|
|
call printcrlf;
|
|
end$if;
|
|
end print$sl;
|
|
|
|
/* Public routine to print prefix and source line on printfile. */
|
|
|
|
print$source$line: proc public;
|
|
IF PRINT$ON OR ERRORPRINTED THEN CALL PRINT$SL;
|
|
CALL FILL (SPACE, PREFIXPTR, .PREFIX);
|
|
CALL FILL (SPACE, LENGTH (ABSADDR), .ABSADDR);
|
|
prefixptr,sourceptr=0;
|
|
end print$source$line;
|
|
|
|
/* Public routine to initiate print module */
|
|
|
|
printinit: proc public;
|
|
if print$on then$do
|
|
pageno=0;
|
|
LINENO = 0FFH;
|
|
CALL PRINTNEWPAGE;
|
|
end$if;
|
|
end printinit;
|
|
|
|
|
|
/* Public routine to print module information on printfile */
|
|
|
|
printterminate: proc (USEFACT) public;
|
|
DECLARE USEFACT BYTE;
|
|
if print$on then$do
|
|
CALL PRINTCRLF;
|
|
CALL PRINTCRLF;
|
|
call printtext(.endtext); /* END OF ASSEMBLY. NO OF ERRORS: */
|
|
call decout(errors,.help(0));
|
|
call printtext(.help(2));
|
|
CALL PRINTTEXT (.USEFACTOR);
|
|
CALL DECOUT (USEFACT, .HELP (0));
|
|
CALL PRINTTEXT (.HELP (3));
|
|
CALL PRINTTEXT (.(25H,CR,LF,0)); /* % */
|
|
end$if;
|
|
end printterminate;
|
|
|
|
end$module print;
|