Trailing-Edge
-
PDP-10 Archives
-
decuslib20-02
-
decus/20-0045/pager.mac
There are 2 other files named pager.mac in the archive. Click here to see a list.
TITLE PAGER
SUBTTL PROGRAM BY MARTY SCHULTZ
; COPYRIGHT 1972,1973 MASCO PROGRAM DEVELOPMENT, SYOSSET NY
JOBVER==137
JOBREN==124
JOBFF==121
JOBREL==44
LOC JOBREN
EXP NEXT
VWHO=2
VPAGER=4
VEDIT=7
VMINOR=6
LOC JOBVER
BYTE(3)VWHO(9)VPAGER(6)VEDIT(18)VMINOR
RELOC
IFNDEF HELPPN, <HELPPN==<2,,5>>
IFNDEF OUTEXT, <OUTEXT=='PAG'>
IFNDEF INEXT, <INEXT=='BAS'>
RD==1 ;CHANNEL TO READ FROM
PG==2 ;CHANNEL TO PAGE TO.
.PWAIT==1B35
.NOTXT==1B34
.PTIT==1B33
.PDAT==1B32
.PCUT==1B31
.PFROM==1B30
.PKILL==1B29
.PWID==1B28
.PSEQ==1B27
.PTAB==1B26
.PLIN==1B25
.PEND==1B24
.PDEV==1B23
.PNUM==1B22
.PFF==1B21
.PHELP==1B20
.PTIME==1B19
GNL=1
AC=2
IO=3
N=IO
PAGE=4
PQ=PAGE
WID=5
WORD=6
W=WORD
OFF=7
FLG=10
CNT=11
PNT=12
AA=13
BB=14
CC=15
DD=16
P=17
.FIRST==1
DEFINE EQ (LAB,VAL),
<MOVEI AC,VAL
MOVEM AC,LAB>
DEFINE ST (%A,LEN),
<%A: BLOCK LEN>
DEFINE ERR(STRING),
<JRST [OUTSTR [ASCIZ/
?'STRING/]
JRST RETPAG]>
DEFINE PRINT(CHAR),
<MOVEI IO,CHAR
PUSHJ P,PUT>
DEFINE STRING(CHARS),
<MOVEI PNT,CHARS
PUSHJ P,MESTY>
DEFINE SETP,
<SETZ WORD,
MOVE PNT,[POINT 6,WORD]>
.CRLF: BYTE(7) 15,12,0
.BDB: ASCII/ - /
ST CCL$,1
ST CCLBUF,20
ST SAVEM,2
ST .PDL,20
ST .LPP,1
ST .WIDTH,1
ST .TAB,1
ST .PAGE,1
ST .TITLE,12
CCLBLK: SIXBIT/PAG/
IOWD 12,CCLBUF
PAGER.: TDZA AC,AC
SETO AC,
MOVEM AC,CCL$
SKIPN CCL$
OUTSTR [ASCIZ"
TYPE /H FOR NEW HELP: 11-20
"]
MOVE AC,JOBFF
MOVEM AC,SAVEM
MOVE AC,JOBREL
MOVEM AC,SAVEM+1
MOVE P,[IOWD 20,.PDL]
NEXT: EQ .PAGE,1
EQ .TAB,10
EQ .WIDTH,^D72
EQ .LPP,^D55
PUSHJ P,GETFIL
TRO FLG,.PDEV
BEGIN: TRNE FLG,.PWAIT
JRST NEWPAG
PRINT 14
NEWPAG: ADDI PAGE,1
TRNN FLG,.NOTXT
JRST GOPAG
CAML PAGE,.PAGE
TRZ FLG,.NOTXT
GOPAG: TRNE FLG,.PWAIT
TRNE FLG,.NOTXT
JRST DASH
OUTPUT PG,
INCHRW
JRST REEN
DASH: MOVEI CNT,^D72
PRINT "-"
SOJG CNT,.-1
REEN: STRING .CRLF
PRINT 12
PRINT 12
TRNE FLG,.PKILL
JRST NOTIT
MOVEI CNT,4
PRINT 11
SOJG CNT,.-1
STRING .BDB
MOVE AC,PAGE
PUSHJ P,DECTY
STRING .BDB
STRING .CRLF
TRNN FLG,.PTIT
JRST NOTIT
STRING .TITLE
NOTIT: TRNN FLG,.PDAT
JRST NODAT
PRINT 11
PUSHJ P,PUT
DATE GNL,
IDIVI GNL,^D31
PUSH P,AC
IDIVI GNL,^D12
ADDI AC,1
PUSHJ P,DECTY
PRINT "-"
POP P,AC
ADDI AC,1
PUSHJ P,DECTY
PRINT "-"
MOVEI AC,^D64(GNL)
PUSHJ P,DECTY
NODAT: TRNN FLG,.PTIME
JRST NOTIME
SETZ GNL,
MSTIME GNL,
PRINT 11
PUSHJ P,PUT
IDIVI GNL,^D1000*^D60
IDIVI GNL,^D60
PUSH P,AC
MOVE AC,GNL
PUSHJ P,DECTY
PRINT ":"
POP P,AC
MOVEI IO,"0"
CAIGE AC,^D10
PUSHJ P,PUT
PUSHJ P,DECTY
NOTIME: STRING .CRLF
PRINT 12
SETZ WID,
MOVE CNT,.LPP
TEXT: PUSHJ P,GET
CAIE AC,12
CAIN AC,13
JRST CHECK
CAIE AC,14
JRST NOFF
TRNN FLG,.PFF
JRST CHECK
PRINT 12
SOJG CNT,.-1
JRST CHK2
NOFF: CAIN AC,15
SUBI WID,1
CAIE AC,11
JRST TEXTA
MOVE GNL,WID
IDIV GNL,.TAB
MOVE GNL,.TAB
SUBM GNL,AC
ADD WID,AC
PRINT " "
SOJG AC,.-1
JRST TEXT
TEXTA: CAMGE WID,.WIDTH
JRST NORM
TRNN FLG,.PCUT
JRST [SETZ WID,
SOJA CNT,NORM]
PUSHJ P,GET
CAIE AC,12
JRST .-2
PRINT 15
CHECK: MOVEI IO,12
PUSHJ P,PUT
SETZ WID,
SOJG CNT,TEXT
CHK2: MOVEI CNT,4
PRINT 12
SOJG CNT,.-1
JRST NEWPAG
NORM: MOVE IO,AC
PUSHJ P,PUT
AOJA WID,TEXT
EOFILE: STRING .CRLF
ADDI CNT,3
PRINT 12
SOJG CNT,.-1
TRNE FLG,.PWAIT
JRST LST
MOVEI CNT,^D72
PRINT "-"
SOJG CNT,.-1
LST: MOVEI CNT,10
STRING .CRLF
PRINT 12
SOJG CNT,.-1
OUTPUT PG,
CLOSE 1,
CLOSE 2,
RELEAS 1,
RELEAS 2,
TRNN FLG,.PEND
JRST RETPAG
OUTSTR [ASCIZ/
LAST PAGE:/]
TRZ FLG,.PDEV
MOVE AC,PAGE
PUSHJ P,DECTY
RETPAG: SKIPN CCL$
JRST NEXT
RESET
EXIT 1,
JRST .-1
PUT: TRNN FLG,.PDEV
JRST [OUTCHR IO
POPJ P,]
TRNE FLG,.NOTXT
POPJ P,
PUT2: SOSGE OBUF+2
JRST PUT3
IDPB IO,OBUF+1
POPJ P,
PUT3: OUT PG,
JRST PUT2
ERR <OUTPUT ERROR>
GET: SOSGE IBUF+2
JRST GET2
ILDB AC,IBUF+1
JUMPE AC,GET
MOVE GNL,@IBUF+1
TRNE FLG,.PNUM
TRNN GNL,1
POPJ P,
CAIN AC,"0"
JRST GET
TRZ GNL,1
MOVEM GNL,@IBUF+1
POPJ P,
GET2: IN RD,
JRST GET
JRST EOFILE
DECTY: IDIVI AC,12
HRLM AC+1,(P)
SKIPE AC
PUSHJ P,DECTY
HLRZ IO,(P)
ADDI IO,60
PUSHJ P,PUT
POPJ P,
MESTY: HRLI PNT,(<POINT 7,0>)
ILDB IO,PNT
JUMPE IO,.+3
PUSHJ P,PUT
JRST .-3
POPJ P,
IBUF: BLOCK 3
OBUF: BLOCK 3
TABB: "T",,.PTIT
"P",,.PWAIT
"D",,.PDAT
"C",,.PCUT
"F",,.PFROM
"S",,.PSEQ
"W",,.PWID
"I",,.PTAB
"L",,.PLIN
"E",,.PEND
"Z",,.PNUM
"N",,.PKILL
"H",,.PHELP
"M",,.PTIME
"V",,.PFF
V.SWT==.-TABB
GETFIL: MOVE AC,SAVEM
MOVEM AC,JOBFF
MOVE AC,SAVEM+1
MOVEM AC,JOBREL
SETZ FLG,
SKIPN CCL$
JRST NEWFIL
MOVE AC,[XWD 2,CCLBLK]
MOVE PQ,[XWD 440700,CCLBUF]
TMPCOR AC,
SETZM CCL$
SKIPN CCL$
NEWFIL: OUTSTR [ASCIZ"
*"]
CLRBFI
MOVSI BB,INEXT
PUSHJ P,PARSE
TLNN FLG,.FIRST
CAIE AC,15
JRST .+2
JRST NEWFIL
MOVEM CC,DEVRD+1
SETZ CC,
OPEN RD,DEVRD
ER1: ERR <INPUT DEVICE NOT AVAILABLE>
TRNE FLG,.PHELP
PUSHJ P,HELP
LOOKUP RD,AA
ERR <FILE NOT FOUND>
MOVSI CC,'TTY'
CAIE AC,">"
JRST NEWFL2
MOVSI BB,OUTEXT
PUSHJ P,PARSE
CAIE AC,15
ERR <SYNTAX ERROR>
NEWFL2: MOVEM CC,DEVPG+1
SETZ CC,
OPEN PG,DEVPG
ERR <OUTPUT DEVICE NOT AVAILABLE>
ENTER PG,AA
ERR <CANNOT ENTER FILE>
JRST WRAPUP
PARSE: MOVSI CC,'DSK'
SETZB AA,DD
PUSHJ P,SIXIN
CAIE AC,":"
JRST .+3
MOVEM W,CC
PUSHJ P,SIXIN
MOVEM W,AA
CAIE AC,"."
JRST .+3
PUSHJ P,SIXIN
HLLZM W,BB
CAIE AC,"["
JRST PARSE1
PUSHJ P,OCTIN
HRLZM N,DD
CAIE AC,","
ERR <NO COMMA IN PPN>
PUSHJ P,OCTIN
HRRM N,DD
CAIE AC,"]"
ERR <NO END BRACKET IN PPN>
PUSHJ P,TTYGET
PARSE1: CAIE AC,"/"
POPJ P,
TLO FLG,.FIRST
PUSHJ P,TTYGET
HRLZI CNT,-V.SWT
HLRZ IO,TABB(CNT)
CAME AC,IO
AOBJN CNT,.-2
JUMPL CNT,.+2
ERR <ILLEGAL SWITCH>
HRRZ IO,TABB(CNT)
TDO FLG,IO
PUSHJ P,SIXIN
JRST PARSE1
SIXIN: MOVE PNT,[XWD 440600,W]
SETZ W,
SIXIN1: PUSHJ P,TTYGET
CAIG AC,"Z"
CAIGE AC,"A"
JRST .+2
JRST SIXIN2
CAIG AC,"9"
CAIGE AC,"0"
POPJ P,
SIXIN2: SUBI AC,40
IDPB AC,PNT
TLO FLG,.FIRST
JRST SIXIN1
TTYGET: SKIPN CCL$
JRST .+3
ILDB AC,PQ
JRST .+2
INCHWL AC
CAIN AC," "
JRST TTYGET
POPJ P,
WRAPUP: SETZ PAGE,
TRNN FLG,.PTIT
JRST WRAPA
CLRBFI
OUTSTR [ASCIZ"TITLE:"]
MOVE PNT,[POINT 7,.TITLE]
MOVEI CNT,5*12
ITITL: INCHWL AC
CAIN AC,15
JRST TITA
IDPB AC,PNT
SOJG CNT,ITITL
ERR <TITLE TOO LONG>
TITA: SETZ AC,
IDPB AC,PNT
WRAPA: TRNN FLG,.PFROM
JRST WRAPB
OUTSTR [ASCIZ"FROM PAGE:"]
PUSHJ P,DECIN
TRO FLG,.NOTXT
MOVEM IO,.PAGE
WRAPB: TRNN FLG,.PSEQ
JRST WRAPC
OUTSTR [ASCIZ"PAGE #:"]
PUSHJ P,DECIN
MOVEI PAGE,-1(IO)
WRAPC: TRNN FLG,.PWID
JRST WRAPD
OUTSTR [ASCIZ"LINE WIDTH:"]
PUSHJ P,DECIN
MOVEM IO,.WIDTH
WRAPD: TRNN FLG,.PTAB
JRST WRAPE
OUTSTR [ASCIZ"TAB SIZE:"]
PUSHJ P,DECIN
MOVEM IO,.TAB
WRAPE: TRNN FLG,.PLIN
JRST WRAPF
OUTSTR [ASCIZ"LINES/PAGE:"]
PUSHJ P,DECIN
MOVEM IO,.LPP
WRAPF: CLRBFI
POPJ P,
HELP: MOVSI W,'DSK'
MOVEM W,DEVRD+1
OPEN RD,DEVRD
JRST @ER1
MOVE AA,[SIXBIT/PAGER/]
MOVSI BB,'HLP'
MOVE DD,[EXP HELPPN]
POPJ P,
DEVRD: 0
SIXBIT/DEVICE/
XWD 0,IBUF
DEVPG: 0
SIXBIT/DEVICE/
XWD OBUF,0
DECIN: SETZ IO,
CLRBFI
DECIN1: INCHWL AC
CAIG AC,"9"
CAIGE AC,"0"
POPJ P,
IMULI IO,12
ADDI IO,-60(AC)
JRST DECIN1
OCTIN: SETZ IO,
OCTIN1: PUSHJ P,TTYGET
CAIG AC,"7"
CAIGE AC,"0"
POPJ P,
ASH IO,3
ADDI IO,-60(AC)
JRST OCTIN1
END PAGER.