Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-04 - decus/20-0135/comp/marg.sim
There are 2 other files named marg.sim in the archive. Click here to see a list.
00040	BEGIN COMMENT sets margin, TABS on GNT, DIABLO; OPTIONS(/L);
00080	EXTERNAL PROCEDURE outchr, exit, outstring, outche, forceout;
00120	EXTERNAL INTEGER PROCEDURE trmop, iondx;
00160	EXTERNAL TEXT PROCEDURE inline, scanto, rest;
00200	EXTERNAL BOOLEAN PROCEDURE rescan;
00240	EXTERNAL REF (infile) PROCEDURE findinfile;
00280	
00320	CHARACTER terminaltype, gnt, diablo, escape, fill, backspace, hmi
00360	, afyrchar;
00400	INTEGER marg, right, i, crlf, fillcount, clears, ioindex;
00440	BOOLEAN eventabs, afyra;
00480	TEXT tabs, sysinimage;
00520	
00560	gnt:= 'G'; diablo:= 'D'; afyrchar:= 'A'; eventabs:= TRUE;
00600	escape:= char(27); fill:= char(127); backspace:= char(8);
00640	hmi:= char(31); ! horizontal motion index for diablos;
00680	sysinimage:- sysin.image; sysinimage.setpos(1);
00720	ioindex:= iondx(sysout);
00760	
00800	IF rescan THEN
00840	BEGIN
00880	  inimage;
00920	  scanto(sysinimage,'-');
00960	  IF sysinimage.more THEN
01000	  BEGIN
01040	    INSPECT findinfile(rest(sysinimage)) DO
01080	    BEGIN eventabs:= FALSE;
01120	      open(blanks(300)); inimage;
01160	      tabs:- copy(image.strip);
01200	      close;
01240	    END OTHERWISE
01280	    BEGIN outtext("Cannot find file: ");
01320	      outtext(sysinimage.strip); outimage;
01360	      exit(0);
01400	    END;
01440	  END;
01480	END;
01520	start:
01560	terminaltype:= inline("Answer GNT, DIABLO, A4 or ? for help: "
01600	,sysin).getchar;
01640	IF terminaltype = '?' THEN
01680	BEGIN
01720	  outtext("This program will on a GNT or DIABLO terminal:");
01760	  outimage;
01800	  outtext("1) Set wanted left margin and succeeding tab stops");
01840	  outimage;
01880	  outtext("2) Make .TTY GAG, .TTY TAB, .TTY NO CRLF, .TTY WIDTH,");
01920	  outimage;
01960	  outtext("   .TTY BLANKS och .TTY FORM");
02000	  outimage;
02040	  outtext("3) For diablo make .TTY NO FILL");
02080	  outimage;
02120	  outtext("Answer A4 for Diablo terminal with A4 paper.");
02160	  outimage; GOTO start;
02200	END;
02240	IF terminaltype > 'Z' THEN
02280	terminaltype:= char(rank(terminaltype)-32);
02320	IF terminaltype = afyrchar THEN
02360	BEGIN afyra:= TRUE; terminaltype:= diablo;
02400	END;
02440	
02480	IF terminaltype = diablo
02520	THEN trmop(8R2017,sysout,0) ! .TTY NO FILL;
02560	ELSE IF terminaltype NE gnt THEN
02600	BEGIN
02640	  outtext("?MARG - You answered neither GNT, A4 nor DIABLO.");
02680	  outimage; GOTO start;
02720	END;
02760	right:= IF terminaltype = gnt THEN 120
02800	ELSE IF afyra THEN 103 ELSE 140;
02840	marg:= inline("Input wanted left margin: ",sysin).getint;
02880	IF marg < 1 THEN
02920	BEGIN outtext("Marginal cannot be to the left of 1");
02960	  outimage; GOTO start;
03000	END ELSE IF marg > right THEN
03040	BEGIN outtext("Too large left margin");
03080	  outimage; GOTO start;
03120	END;
03160	
03200	trmop(8R2013,sysout,0); ! .TTY GAG;
03240	trmop(8R2025,sysout,0); ! .TTY BLANKS;
03280	trmop(8R2006,sysout,1); ! .TTY FORM;
03320	trmop(8R2005,sysout,1); ! .TTY TAB;
03360	trmop(8R2012,sysout,right-marg+1); ! .TTY WIDTH;
03440	trmop(8R2010,sysout,1); ! .TTY NO CRLF;
03480	outchr(sysout,escape,1); outchr(sysout,'2',1);
03520	outimage;
03540	clears:= 140/12+1;
03560	IF terminaltype = diablo THEN
03600	BEGIN
03640	  ! Set maximum character width;
03680	  outchr(sysout,escape,1); forceout(sysout);
03720	  outche(ioindex,hmi); outche(ioindex,'~');
03760	  ! Backspace to start of line;
03800	  outchr(sysout,backspace,clears);
03840	  ! Restore normal character width;
03880	  outchr(sysout,escape,1); forceout(sysout);
03920	  outche(ioindex,hmi); outche(ioindex,char(11));
03960	  ! Backspace last inch;
04000	  outchr(sysout,backspace,14);
04040	END;
04080	
04120	outchr(sysout,' ',marg-1);
04160	outchr(sysout,escape,1);
04200	IF terminaltype = diablo THEN outchr(sysout,'9',1)
04240	ELSE outchr(sysout,'1',1);
04280	IF eventabs THEN
04320	BEGIN
04360	  FOR i:= marg+9 STEP 8 UNTIL right DO
04400	  BEGIN
04440	    outchr(sysout,' ',7);
04480	    outchr(sysout,'+',1);
04520	    outchr(sysout,escape,1);
04560	    outchr(sysout,'1',1);
04600	  END;
04640	END ELSE
04680	BEGIN
04720	  WHILE tabs.more DO
04760	  BEGIN outstring(sysout,scanto(tabs,' '));
04800	    IF tabs.more THEN
04840	    BEGIN
04880	      outchr(sysout,'+',1); outchr(sysout,escape,1);
04920	      outchr(sysout,'1',1);
04960	    END;
05000	  END;
05040	END;
05080	outimage; outtext("Ready!");
05120	outimage; exit(0);
05160	END;