Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-05 - decus/20-0137/kwic/kwic.mac
There are 5 other files named kwic.mac in the archive. Click here to see a list.
;THIS PROGRAM WAS OBTAINED FROM DECUS (NO. 10-151) AND ADAPTED
; AT WESTERN MICHIGAN UNIVERSITY.
	COMMENT	>
*****************************************************************
*****************************************************************
*****************************************************************
*								*
*								*
*								*
*								*
*								*
*			K----W----I----C			*
*								*
*			     1----0				*
*								*
*		WRITTEN BY					*
*			G.B. MOERSDORF				*
*								*
*								*
*								*
*								*
*								*
*****************************************************************
*****************************************************************
*****************************************************************
>
	PAGE
	TITLE	KWIC
	SUBTTL	GERRY MOERSDORF, OHIO STATE UNIVERSITY PDP-10
	TWOSEG ;26 NOV 73-RRB
;MODIFIED FOR WMU - 29 NOV 73 BY RUSS BARR III

	COMMENT *
    THIS ROUTINE DOES A SINGLE KEY-WORD-IN-CONTEXT
(KWIC) INDEX.  THE SYSTEM ALLOWS ANY ARRANGMENT OF I/O DEVICES
AND ANY TYPE OF MASTER FILE DATA.  THE STOP LIST MAY BE
ADDED TO AND EDITED IN ANY WAY TO SUITE THE
USER'S NEEDS.  MANY PARAMETERS ARE ASKED FOR BUT ALL WILL
DEFAULT IF THE USER TYPES A (CR).  THE PARAMETERS ARE AS FOLLOWS
AND ALL ARE ENTERED IN THE FORM 'DEV:FILE.EXT':

MASTER FILE:	THE FILE WHERE THE RECORDS TO BE
			INDEXED ARE

		[DEFAULT]---KWIC.MAS  (KWIC MASTER)

STOP FILE:	THE FILE CONTAINING THE WORDS NOT VALID AS KEY WORDS

		[DEFAULT]---KWIC.STP   (KWIC STOP)

INDEX FILE:	THE FILE WHERE THE INDEX IS TO BE WRITTEN

		[DEFAULT]---KWIC.NDX   (KWIC INDEX)

FREQUENCY FILE:	THE FILE WHERE THE FREQUENCY LISTING IS TO
			BE WRITTEN

		[DEFAULT]---KWIC.FRQ	(KWIC FREQUENCY)

LISTING TITLE: 	THE TITLE OF THE LISTING (80 CARS OR LESS)

		[DEFAULT]---NO TITLE
*
	PAGE
	;ACCUMULATOR DEF'S

	AC=1
	CAR=2
	INDEX=3
	F=4
	P=5
	CNT1=6
	TITL=7
	CNT2=17
	PTR=10
	PTR2=11
	TAC=12
	ARG=13
	FILE=14
	EXT=15
	PAGE=EXT
	PPN=17
	DATE=16
	PAGE
	;FLAGS AND CONSTANTS

	F.LRG==10		;LINE TOO LONG
	F.ECO==200		;SO AS NOT TO MAKE TOO MUCK PAPER
	F.SYN==400000		;SYNTAX ERROR HAS OCCURED
	F.NOK==20000		;NO KEY ENTERED
	F.NPE==40000		;NO PERIOD SEEN
	F.PER==100		;PERIOD SEEN IN COMMAND
	F.BEG==400		;BEGINING SECTOR OF SCAN
	F.OUT==40		;QUIT AFTER MASTER READ IN SWITCH
	F.NST==1		;NO STORE
	F.EOI==2		;PERIOD SEEN
	F.BRK==4		;BRACKET SEEN
	F.FRQ==20		;FREQUENCY LIST MODE
	STKSIZ==^D30		;SIZE OF PUSH DOWN STACK
	MASCH==1		;CHANEL FOR MASTER FILE
	STPCH==2		;CHANNEL FOR STOP FILE
	NDXCH==3		;CHANNEL FOR INDEX LISTING
	FRQCH==4		;CHANEL FOR FREQ LIST
	IB==10			;IMAGE BINARY MODE
	AL==1			;ASCII LINE MODE
	CORE==11		;CORE UUO
	SLEEP==31		;SLEEP UUO
	JOBFF==121		;JOB FIRST FREE
	VERSION==2		;WMU VERSION NUMBER
	JOBVER==137		;PLACE TO PUT VERSION NUMBER
	UTIME==22		;TIME IN JIFFYS
	UDATE==14		;DATE UUO NUMBER
	IFNDEF SIZWRD,<SIZWRD==^D50>	;SIZE OF LARGEST WORD
	SIZSTP==SIZWRD/6+2		;SIXBIT BUT 1 WORK WORD USED
	IFNDEF IDLEN,<IDLEN=^D10>	;LENGTH OF I.D. FIELD
	MAXKEY=IDLEN+1		;1 EXTRA FOR DELIMITER
	IFNDEF MAXSAM,<MAXSAM==^D300>	;MAX NUMBER OF ITEMS SAME
	IFNDEF DEBUG,<DEBUG==0>	;ONE TO DEBUG
	IFN DEBUG,<REENT==0>	;IF DEBUGING MAKE NON REENT
	IFNDEF REENT,<REENT==0>	;DEFAULT RENTRANT VERSION
	IFNDEF DELSRT,<DELSRT=="=">	;DEFAULT FOR SORT DELIM
	IFNDEF DELKEY,<DELKEY=="[">	;DEFAULT FOR ID. NUMBER DELIM
	IFNDEF DELEOL,<DELEOL=="]">	;END OF LINE DEFAULT
	IFNDEF MAXLIN,<MAXLIN==^D50>	;LINES PER PAGE
	IFNDEF	FREQSW,<FREQSW==1>	;INCLUDE FREQ LIST CODE IF 1

	LOC	JOBVER
	XWD	0,VERSION		;SET UP VERSION NUMBER
;26 NOV 73-RRB
	UCORE==MATBL		;UCORE NEEDS 200 WORDS
	ACCT==MATBL+200		;4 WORDS HERE
	BLC==10			;AC FOR IOWD
	RELOC 400000
	PAGE
	;STARTS HERE

	IFN	REENT<HISEG>
START:	CALLI	0,0
;SPECIAL COPY OF WMU USAGE - R. BARR - 21-NOV-73
;FROM HERE TO START1-1
	JRST	START1
	DMOVE	0,[SIXBIT/USAGEBAPL/]
	DMOVEM	0,ACCT
	SETO	4,
	MOVE	BLC,[IOWD 200,UCORE]	;BLC IS AC 10(CURRENTLY)
	SETZM	BLC+1
	MOVNI	2,3
	MOVEM	2,ACCT+4
	MOVEI	2,5
	INIT	15,16
	SIXBIT	/DSK/
	0
	JRST	MESS
	MOVE	5,[3,,3]
	MOVEM	5,ACCT+3
	LOOKUP	15,ACCT
	JRST	MESS
TRYGAN:	MOVEM	5,ACCT+3
	ENTER	15,ACCT
	JRST	WAIT
	USETI	15,1
	INPUT	15,BLC
	STATZ	15,740000
	JRST	MESS
	MOVEI	3,175			;LAST 2 WORDS ARE FOR INIT DATE
	DMOVE	6,[ASCII/KWIC      /]
LUP1:	CAMN	6,UCORE-1(3)
	JRST	MATCH
	SKIPN	UCORE-1(3)
	MOVE	4,3
NOMAT:	SUBI	3,2
	JUMPG	3,LUP1
	SKIPGE	4
	JRST	MESS
	SETZM	UCORE(4)
	AOS	UCORE(4)
	MOVEM	6,UCORE-1(4)
	MOVE	6,[ASCII/     /]
	HLLM	6,UCORE(4)
	JRST	FINS
MATCH:	HLLZS	7
	TLZ	7,3777
	HLLZ	2,UCORE(3)
	TLZ	2,3777
	CAME	7,2
	JRST	NOMAT
	AOS	UCORE(3)
FINS:	USETO	15,1
	OUTPUT	15,BLC
MESS:	CLOSE	15,
	RELEAS	15,
	JRST	START1
WAIT:	HRRZ	1,ACCT+1
	CAIE	1,3			;FILE BEING MODIFYED?
	JRST	MESS			;SOMETHING ELSE
	SLEEP	2,
	AOSLE	ACCT+4			;THREE TRYS ONLY
	JRST	MESS
	JRST	TRYGAN
START1:	MOVE	P,[IOWD STKSIZ,STACK]
	SETZB	F,ZERLST
	MOVE	PTR,[XWD ZERLST,ZERLST+1]
	BLT	PTR,ELST		;CLEAR OUT LOW SEGMENT
	MOVE	AC,JOBFF
	MOVEM	AC,EPROG1
	TTCALL	3,[ASCIZ/
KEY-WORD-IN-CONTEXT  WMU VERSION
/]
CONT5:	TTCALL	3,[ASCIZ/
MASTER FILE: /]
	PUSHJ	P,SETFIL
	MOVSI	EXT,'MAS'
	PUSHJ	P,SETCMD
	MOVEM	CAR,MASDEV
	MOVEI	AC,IB
	SETZ	INDEX,
	OPEN	MASCH,AC
	JRST	NMAS
	DMOVEM	FILE,MAFIL
	DMOVEM	DATE,MAFIL+2
	LOOKUP	MASCH,FILE
	JRST	NMASFI
CONT4:
	TTCALL	3,[ASCIZ/STOP FILE: /]
	PUSHJ	P,SETFIL
	MOVSI	EXT,'STP'
	PUSHJ	P,SETCMD
	MOVEI	AC,IB
	HRRZI	INDEX,STPBUF
	OPEN	STPCH,AC
	JRST	NSTP
	LOOKUP	STPCH,FILE
	JRST	NSTPFI
CONT3:
	TTCALL	3,[ASCIZ/INDEX FILE: /]
	PUSHJ	P,SETFIL
	MOVSI	EXT,'NDX'
	PUSHJ	P,SETCMD
;LPTSIZ 6LINES 26 NOV 73-RRB
	MOVEM	CAR,NDXDEV
	MOVEI	AC,^D130
	MOVEM	AC,LPTSIZ
	MOVEI	AC,^D70
	CAMN	CAR,[SIXBIT/TTY/]
	MOVEM	AC,LPTSIZ
	MOVEI	AC,AL
	HRLZI	INDEX,NDXBUF
	OPEN	NDXCH,AC
	JRST	NNDX
	ENTER	NDXCH,FILE
	JRST	NNDXF
	OUTBUF	NDXCH,3
	IFN	FREQSW,
<
CONT2:	TTCALL	3,[ASCIZ/FREQUENCY FILE: /]
	PUSHJ	P,SETFIL
	MOVSI	EXT,'FRQ'
	PUSHJ	P,SETCMD
;OUTPUT BUG PATCH 7LINES 29 NOV 73-RRB
	CAMN	CAR,[SIXBIT/TTY/]
	CAME	CAR,NDXDEV
	JRST	.+3
	TTCALL	3,[ASCIZ/
?MAY NOT USE TTY FOR BOTH INDEX AND FREQUENCY LISTS
/]
	JRST	CONT3
	MOVEI	AC,AL
	HRLZI	INDEX,FRQBUF
	OPEN	FRQCH,AC
	JRST	NFRQ
	ENTER	FRQCH,FILE
	JRST	NFRQF
	OUTBUF	FRQCH,2
>
	MOVE	AC,JOBFF
	MOVEM	AC,STSTP
	INBUF	STPCH,3
	TTCALL	3,[ASCIZ/LISTING TITLE
:/]
	TTCALL	4,AC
	MOVE	PTR,[POINT 7,TITLE]
LOOP7:	IDPB	AC,PTR
	TTCALL	0,AC
	CAIE	AC,12
	JRST	LOOP7
	SETZ	AC,
	IDPB	AC,PTR
	PAGE
	;READ INTO CORE ROUTINE
	MOVE	AC,JOBFF
	MOVEM	AC,TMPST
	MOVSI	PTR,(POINT 6,0)
	HRR	PTR,TMPST
	SETZ	CNT2,
	PUSHJ	P,ALLOC
LOOP1:	PUSHJ	P,STPGET
	TRNE	CAR,1
	JRST	LOOP1
	MOVE	PTR2,CARPT
	MOVEI	CNT1,5
LOOP2:	ILDB	AC,PTR2
	JUMPE	AC,CONT1
	CAIN	AC,12
	JRST	NULBUG
	CAIG	AC," "
	JRST	CONT1
	CAILE	AC,"_"
	SUBI	AC,40
	SUBI	AC,40
	PUSHJ	P,STORE
CONT1:	SOJG	CNT1,LOOP2
	JRST	LOOP1
STORE:	IDPB	AC,PTR
	AOS	CNT2
	CAIE	CNT2,6
	POPJ	P,0
	SETZ	CNT2,
	JRST	ALLOC


	;ROUTINE TO SET UP NUL IN END OF WORD

SETNUL:
NULIT:	SETZ	AC,
	PUSHJ	P,STORE
	HRRZ	ARG,PTR
LOOP5:	PUSHJ	P,STORE
	HRRZ	FILE,PTR
	CAMN	FILE,ARG
	JRST	LOOP5
	HRLI	PTR,(POINT 6,0)
	POPJ	P,0
NULBUG:	PUSHJ	P,NULIT
	JRST	CONT1
	MOVE	AC,JOBFF
	MOVEM	AC,OLDSIZ
PCORE:
	IDIVI	AC,2000
	SKIPE	CAR
	AOS	AC
	PUSHJ	P,PDEC2
	TTCALL	3,[ASCIZ/K CORE USED
/]
	POPJ	P,0
PDEC2:	IDIVI	AC,12
	JUMPE	AC,NODIG
	ADDI	AC,60
	TTCALL	1,AC
NODIG:	ADDI	CAR,60
	TTCALL	1,CAR
	POPJ	P,0
STPEOF:	PUSHJ	P,NULIT		;COME HERE ON EOF FROM STOP FILE AND
	SETOM	@PTR		;SHUFFEL STOP LIST DOWN ON TOP OF IT'S
	RELEASE	STPCH,		;BUFFER TO SAVE CORE
	HRR	PTR,STSTP
	HRL	PTR,TMPST
	MOVE	AC,JOBFF
	SUB	AC,TMPST
	ADD	AC,STSTP
	BLT	PTR,(AC)
	MOVEM	AC,ENDSTP
	AOS	AC
	MOVEM	AC,JOBFF
	CALLI	AC,CORE
	JRST	BADFAL
	TTCALL	3,[ASCIZ/
STOP LIST /]
	PUSHJ	P,PCORE-2
	PAGE
	;PRINT STOP LIST ROUTINE
	SETZ	PTR,
	TLO	F,F.ECO			;ECOLOGY NOW!
	MOVE	INDEX,STSTP
	SETZ	PAGE,
LOOP20:;NO STPLST FOR TTY 3LINES 28 NOV 73-RRB
	MOVSI	TITL,'TTY'
	CAMN	TITL,NDXDEV
	JRST	SKPTIT
	MOVEI	TITL,[ASCIZ/CURRENT STOP LIST----/]
	PUSHJ	P,PHDR
	MOVEI	CNT1,MAXLIN
;LPTSIZ 1LINES 26 NOV 73-RRB
;	MOVEI	PTR2,LPTSIZ
	MOVE	PTR2,LPTSIZ
LOOP21:	PUSHJ	P,FETCH
	PUSHJ	P,SIXOUT
	TRNN	ARG,77
	JRST	ENDWD
	PUSHJ	P,FETCH
	PUSHJ	P,SIXOUT
CONT22:	TRNE	ARG,77
	JRST	GETMOR
	MOVEI	CAR,"	"
	JRST	TAB1
GETMOR:	PUSHJ	P,FETCH
	JRST	CONT22
ENDWD:	MOVEI	CAR,"	"
	PUSHJ	P,NDXPUT
TAB1:	PUSHJ	P,NDXPUT
	AOS	PTR
	SUBI	PTR2,^D16
	CAILE	PTR2,^D16
	JRST	LOOP21
	PUSHJ	P,PCRLF
	SOJG	CNT1,LOOP21-1
	JRST	LOOP20
FETCH:	MOVE	ARG,@INDEX
	CAMN	ARG,STOP
	JRST	DONSTP
	AOS	INDEX
	POPJ	P,0
DONSTP:	MOVEI	ARG,[ASCIZ/




STOP LIST TOTAL /]
	SOS	PTR
	PUSHJ	P,PNT
	MOVE	ARG,PTR
	PUSHJ	P,PDEC
	PAGE
	;READ IN OF MASTER ROUTINE

SKPTIT:	SETZ	F,
	MOVEI	AC,IB
	MOVE	AC+1,MASDEV
	HRRZI	AC+2,MASBUF
	OPEN	MASCH,AC
	JRST	WOW
	LOOKUP	MASCH,MAFIL
	JRST	WOW		;HERE WHEN CAN NO LONGER GET TO DEVICE
	INBUF	MASCH,3		;AND FILES OF INDEX DATA
	MOVE	PTR,JOBFF
	HRLI	PTR,(POINT 6,0)
	MOVEM	PTR,SORTPT
	PUSHJ	P,ALLOC
	SETZ	CNT2,
LOOP40:	MOVEI	CNT1,5
	MOVE	PTR2,CARPT
	PUSHJ	P,GETMAS
	TRNE	CAR,1
	JRST	SETSEQ
LOOP41:	ILDB	AC,PTR2
	CAIG	AC," "
	JRST	BRCK
	CAILE	AC,"_"
	SUBI	AC,40
	CAIN	AC,DELSRT
	JRST	PER
	CAIN	AC,DELKEY
	JRST	KEY
	CAIN	AC,DELEOL
	JRST	EOL
STRE:	SUBI	AC,40
	TLO	F,F.BEG
	TLNN	F,F.NST
	PUSHJ	P,STORE
	AOS	INDEX
CONT41:
	SOJG	CNT1,LOOP41
	JRST	LOOP40
BRCK:	CAIN	AC," "
	JRST	SEP
	CAIE	AC,"	"
	JRST	CONT41
SEP:	TLNN	F,F.NST
	PUSHJ	P,SETNUL
	JRST	CONT41
PER:	TLOE	F,F.EOI
	PUSHJ	P,SYNTAX
	PUSHJ	P,SETNUL
	TLO	F,F.NST
	JRST	CONT41
KEY:	TLOE	F,F.BRK
	PUSHJ	P,SYNTAX
	TLZ	F,F.NST
	SETZ	INDEX,
	JRST	STRE
EOL:	TLZN	F,F.EOI
	PUSHJ	P,NOPER
	TLZN	F,F.BRK
	PUSHJ	P,NOKEY
	PUSHJ	P,SETNUL
	TLZ	F,F.BEG
	CAILE	INDEX,MAXKEY
	PUSHJ	P,LRGKEY
	JRST	CONT41
SYNTAX:	TRO	F,F.SYN
	JRST	ERROR
LRGKEY:	TROA	F,F.LRG
NOKEY:	TRO	F,F.NOK
	JRST	ERROR
NOPER:	TRO	F,F.NPE
	JRST	ERROR
MASEOF:	TLNN	F,F.BEG
	JRST	CON567
	TRO	F,F.SYN
	PUSHJ	P,ERROR
CON567:	SETOM	@PTR
	TTCALL	3,[ASCIZ/
MASTER FILE /]
	MOVE	AC,JOBFF
	SUB	AC,OLDSIZ
	PUSHJ	P,PCORE
	TRNE	F,F.OUT
	JRST	CRASH
	PAGE
	;KWIC SORT ROUTINE

	IFN	FREQSW,
<
	MOVEI	AC,MAXLIN
	MOVEM	AC,FRQLIN
	TRO	F,F.FRQ
	EXCH	PAGE,FRQPAG
	MOVEI	TITL,FRQTIL
	TLO	F,F.ECO
	PUSHJ	P,PHDR
	EXCH	PAGE,FRQPAG
	TRZ	F,F.FRQ
>
LOOP49:	MOVEI	DATE,MAXLIN
	MOVEI	TITL,NDXTIL
	PUSHJ	P,PHDR
LOOP50:	MOVE	PTR,[XWD OLDMAX,OLDMIN]
	BLT	PTR,OLDMIN+SIZSTP-1
	HRRZ	INDEX,SORTPT
	SETOM	OLDMAX
	SETZB	CNT1,MATBL
LOOP95:	MOVE	ARG,INDEX
LOOP54:	MOVE	TITL,INDEX
	MOVE	PTR,[POINT 18,OLDMIN]
	MOVE	PTR2,INDEX
	HRLI	PTR2,(POINT 18,0)
	MOVE	TAC,[POINT 18,OLDMAX]
LOOP55:	ILDB	CAR,PTR2
	ILDB	AC,PTR
	CAMGE	CAR,AC
	JRST	INCRE
	CAMN	CAR,AC
	JRST	VERIFY
	MOVE	PTR2,INDEX
	HRLI	PTR2,(POINT 18,0)
BUG100:	ILDB	CAR,PTR2
	ILDB	AC,TAC
	CAMLE	CAR,AC
	JRST	INCRE
	CAMN	CAR,AC
	JRST	WYNOT
	SETZ	CNT1,
STRE2:
NOTSTP:	HRLM	ARG,MATBL(CNT1)
	HRRM	TITL,MATBL(CNT1)
	SETZM	MATBL+1(CNT1)
	SETZ	CNT2,
LOOP91:	MOVE	CAR,@TITL
	MOVEM	CAR,OLDMAX(CNT2)
	TRNN	CAR,77
	JRST	INCRE
	AOS	CNT2
	CAIN	CNT2,SIZSTP
	JRST	TOBIG
	AOJA	TITL,LOOP91
INCRE:	HRRZM	PTR2,INDEX
LOOP93:	MOVE	CAR,@INDEX
	TRNE	CAR,77
	AOJA	INDEX,LOOP93
	AOS	INDEX
	MOVE	PTR,[POINT 6,(INDEX)]
	ILDB	AC,PTR
	CAIE	AC,DELKEY-40
	JRST	LOOP54
LOOP94:	MOVE	CAR,@INDEX
	TRNE	CAR,77
	AOJA	INDEX,LOOP94
	AOS	INDEX
	MOVE	CAR,@INDEX
	CAMN	CAR,STOP
	JRST	ISITST
	JRST	LOOP95
VERIFY:	TRNN	CAR,77
	JRST	INCRE
	JRST	LOOP55
NXTSTP:	HRLI	PTR,0
	MOVE	AC,@PTR
	TRNE	AC,77
	AOJA	PTR,NXTSTP+1
	AOS	PTR
	SKIPN	(PTR)
	JRST	KWICP
	JRST	MAKPTR
WYNOT:	TRNE	CAR,77
	JRST	BUG100
	CAIL	CNT1,MAXSAM-1
	JRST	LOTS
	AOJA	CNT1,STRE2
ISITST:	MOVE	PTR,STSTP
MAKPTR:	HRLI	PTR,(POINT 18,0)
	HRR	PTR2,MATBL
	HRLI	PTR2,(POINT 18,0)
BUG102:	ILDB	CAR,PTR2
	ILDB	AC,PTR
	CAMGE	AC,CAR
	JRST	NXTSTP
	CAME	AC,CAR
	JRST	KWICP
	TRNE	AC,77
	JRST	BUG102
	JRST	LOOP50
	PAGE
	;PRINT ROUTINE KWIC FASION

KWICP:
	SETZ	CNT2,
	SKIPN	MATBL
	JRST	ENDRUN
LOOP99:	SETZ	CNT1,
	HLRZ	PTR,MATBL(CNT2)
	HRRZ	AC,MATBL(CNT2)
	HRLI	PTR,(POINT 6,0)
LOOP80:	ILDB	CAR,PTR
	PUSHJ	P,SPACA
	HRRZ	TAC,PTR
	CAME	TAC,AC
	AOJA	CNT1,LOOP80
	HLR	PTR,MATBL(CNT2)
	HRLI	PTR,(POINT 6,0)
LOOP81:;LPTSIZ 3LINES 26 NOV 73-RRB
;	CAIN	CNT1,<LPTSIZ/2>
	MOVE	CAR,LPTSIZ
	IDIVI	CAR,2
	CAMN	CNT1,CAR
	JRST	PRNT
;LPTSIZ 1LINES 26 NOV 73-RRB
;	CAIG	CNT1,<LPTSIZ/2>
	CAMG	CNT1,CAR
	JRST	PUTSPC
	ILDB	CAR,PTR
	PUSHJ	P,SPACB
	SOJA	CNT1,LOOP81
PUTSPC:	MOVEI	CAR," "
	PUSHJ	P,NDXPUT
	AOJA	CNT1,LOOP81
PRNT:	ILDB	CAR,PTR
CONT83:	HRRZ	TAC,PTR
	CAMN	TAC,AC
	JRST	WINDOW
	JUMPE	CAR,SPACC
	ADDI	CAR,40
	PUSHJ	P,NDXPUT
	JRST	PRNT
WINDOW:	MOVEM	CAR,TAC
	MOVEI	CAR," "
	PUSHJ	P,NDXPUT
	MOVEI	CNT1,1
	SKIPA	CAR,TAC
LOOP82:	ILDB	CAR,PTR
	JUMPE	CAR,NULWOW
CONT80:	CAIN	CAR,DELKEY-40
	JRST	PADCK
	ADDI	CAR,40
	PUSHJ	P,NDXPUT
CONT81:;LPTSIZ 4LINES 26 NOV 73-RRB
;	CAIE	CNT1,<<LPTSIZ/2>-MAXKEY-1>
	MOVE	CAR,LPTSIZ
	IDIVI	CAR,2
	SUBI	CAR,MAXKEY-1
	CAME	CNT1,CAR
	AOJA	CNT1,LOOP82
LOOP83:	ILDB	CAR,PTR
	CAIE	CAR,DELKEY-40
	JRST	LOOP83
LOOP84:	ADDI	CAR,40
	PUSHJ	P,NDXPUT
	ILDB	CAR,PTR
	SKIPE	CAR
	JRST	LOOP84
	PUSHJ	P,PCRLF
	AOS	CNT2
	SOS	DATE
	JUMPE	DATE,NEWPAG
CONT99:	SKIPE	MATBL(CNT2)
	JRST	LOOP99
	IFN	FREQSW,
<
	EXCH	PAGE,FRQPAG
	EXCH	DATE,FRQLIN
	SETZ	CNT1,
	HRRZ	PTR,MATBL
	HRLI	PTR,(POINT 6,0)
LOO150:	ILDB	CAR,PTR
	JUMPE	CAR,DON150
	ADDI	CAR,40
	PUSHJ	P,FRQPUT
	AOS	CNT1
	CAIE	CNT1,SIZWRD
	JRST	LOO150
DON150:	MOVEI	CAR," "
LO151:	PUSHJ	P,FRQPUT
	AOS	CNT1
	CAIGE	CNT1,SIZWRD+1
	JRST	LO151
	MOVE	ARG,CNT2
	TRO	F,F.FRQ
	PUSHJ	P,PDEC
	PUSHJ	P,PCRLF
	SOS	DATE
	JUMPE	DATE,NEWPG
CON199:	TRZ	F,F.FRQ
	EXCH	PAGE,FRQPAG
	EXCH	DATE,FRQLIN
>
	JRST	LOOP50
NEWPAG:	MOVEI	TITL,NDXTIL
	PUSH	P,CNT2
	PUSHJ	P,PHDR
	POP	P,CNT2
	MOVEI	DATE,MAXLIN
	JRST	CONT99
SPACC:	MOVEI	CAR," "
	PUSHJ	P,NDXPUT
	ILDB	CAR,PTR
	JUMPE	CAR,.-1
	JRST	CONT83
SPACA:	JUMPN	CAR,CPOPJ1
	AOS	CNT1
LOOP88:	ILDB	CAR,PTR
	JUMPE	CAR,LOOP88
	POPJ	P,0
SPACB:	JUMPN	CAR,CPOPJ1
	SOS	CNT1
LOOP89:	ILDB	CAR,PTR
	JUMPE	CAR,LOOP89
	POPJ	P,0
NULWOW:	MOVEI	CAR," "
	PUSHJ	P,NDXPUT
	AOS	CNT1
;LPTSIZ 4LINES 26 NOV 73-RRB
;	CAIL	CNT1,<<LPTSIZ/2>-MAXKEY>
	MOVE	CAR,LPTSIZ
	IDIVI	CAR,2
	SUBI	CAR,MAXKEY
	CAML	CNT1,CAR
	JRST	LOOP83
	ILDB	CAR,PTR
	JUMPE	CAR,.-1
	JRST	CONT80
PADCK:;LPTSIZ 4LINES 26 NOV 73-RRB
;	CAIN	CNT1,<<LPTSIZ/2>-MAXKEY>
	MOVE	CAR,LPTSIZ
	IDIVI	CAR,2
	SUBI	CAR,MAXKEY
	CAMN	CNT1,CAR
	JRST	BUG99
BUG98:	MOVEI	CAR," "
	PUSHJ	P,NDXPUT
	AOS	CNT1
;LPTSIZ 4LINES 26 NOV 73-RRB
;	CAIE	CNT1,<<LPTSIZ/2>-MAXKEY>
	MOVE	CAR,LPTSIZ
	IDIVI	CAR,2
	SUBI	CAR,MAXKEY
	CAME	CNT1,CAR
	JRST	BUG98
BUG99:	MOVEI	CAR,DELKEY-40
	JRST	LOOP84

	PAGE
;ROUTINES FOR DOING FREQ LIST

	IFN	FREQSW,
<
NEWPG:	MOVEI	TITL,FRQTIL
	PUSHJ	P,PHDR
	MOVEI	DATE,MAXLIN
	JRST	CON199
FRQPUT:	SOSG	FRQBUF+2
	JRST	FRQOUT
FRQNXT:	IDPB	CAR,FRQBUF+1
	POPJ	P,0
FRQOUT:	OUT	FRQCH,0
	JRST	FRQNXT
	TTCALL	3,[ASCIZ/
?WRITE ERROR ON FREQUENCY FILE/]
	JRST	CRASH
>

;SOME SUPER SUBROUTINES

	;HEADER ROUTINE

PHDR:	MOVEI	ARG,[ASCIZ/KEY-WORD-IN-CONTEXT  WMU VERSION /]
	AOS	PAGE
	MOVEI	CAR,14
	TLZN	F,F.ECO		;ECOLOGY NOW!!
	PUSHJ	P,NDXPUT
	PUSH	P,TITL
	PUSHJ	P,PNT
	MOVE	ARG,JOBVER
	PUSHJ	P,PDEC
	PUSHJ	P,SPACE
	PUSHJ	P,PDATE
;LPTSIZ 2LINES 26 NOV 73-RRB
;	MOVEI	CNT1,LPTSIZ-^D60
	MOVE	CNT1,LPTSIZ
	SUBI	CNT1,^D60
	MOVEI	CAR," "
	PUSHJ	P,NDXPUT
	SOJG	CNT1,.-1
	MOVEI	ARG,[ASCIZ/PAGE /]
	PUSHJ	P,PNT
	MOVE	ARG,PAGE
	PUSHJ	P,PDEC
	PUSHJ	P,PCRLF
	POP	P,ARG
	PUSHJ	P,PNT
	MOVEI	ARG,TITLE
	PUSHJ	P,PNT
	PUSHJ	P,PCRLF
	PUSHJ	P,PCRLF

;ROUTINE TO PUT CR LF ON LPT

PCRLF:	MOVEI	ARG,[ASCIZ/
/]
	JRST	PNT


;ROUTINE TO PRINT DATE AND TIME

PDATE:	CALLI	TAC,UTIME
	IDIVI	TAC,^D3600
	IDIVI	TAC,^D60
	PUSH	P,TAC+1
	MOVE	ARG,TAC
	PUSHJ	P,PDECT
	MOVEI	CAR,":"
	PUSHJ	P,NDXPUT
	POP	P,ARG
	PUSHJ	P,PDECT
	PUSHJ	P,SPACE
	CALLI	TAC,UDATE
	IDIVI	TAC,^D31
	PUSH	P,TAC
	MOVEI	ARG,1(TAC+1)
	PUSHJ	P,PDEC
	POP	P,TAC
	IDIVI	TAC,^D12
	MOVEI	CAR,"-"
	PUSHJ	P,NDXPUT
	MOVEI	ARG,MONTAB(TAC+1)
	PUSHJ	P,PNT
	MOVEI	ARG,^D64(TAC)
	JRST	PDEC


;ROUTINE TO PRINT A SPACE

SPACE:	MOVEI	CAR," "
	JRST	NDXPUT


;ROUTINE TO PRINT 2 DIG NUMBER IN DECIMAL

PDECT:	IDIVI	ARG,^D10
	ADDI	ARG,60
	ADDI	ARG+1,60
	MOVE	CAR,ARG
	PUSHJ	P,NDXPUT
	MOVE	CAR,ARG+1
	JRST	NDXPUT

;ROUTINE TO PRINT DECIMAL ON LPT

PDEC:	IDIVI	ARG,12
	PUSH	P,ARG+1
	SKIPE	ARG
	PUSHJ	P,PDEC
	POP	P,CAR
	ADDI	CAR,60
	JRST	NDXPUT


;ROUTINE TO PRINT ASCI STRINGS ON LPT

PNT:	HRLI	ARG,(POINT 7,0)
LOOPR:	ILDB	CAR,ARG
	JUMPE	CAR,CPOPJ1
	PUSHJ	P,NDXPUT
	JRST	LOOPR
CPOPJ1:	POPJ	P,0


;SET UP SEQUENCE NUMBER SUBROUTINE

SETSEQ:	MOVEM	CAR,CURLIN
	PUSHJ	P,GETMAS
	IBP	PTR2
	JRST	CONT41


;ROUTINE TO PRINT OUT ERROR MESSAGES

ERROR:	TTCALL	3,[ASCIZ/?ERROR IN LINE /]
	TRO	F,F.OUT
	SETZM	CURLIN+1
	TTCALL	3,CURLIN
	TRZE	F,F.LRG
	TTCALL	3,[ASCIZ/---I.D. NUMBER TOO LONG/]
	TRZE	F,F.NOK
	TTCALL	3,[ASCIZ/---NO I.D. NUMBER FOUND/]
	TRZE	F,F.NPE
	TTCALL	3,[ASCIZ/---NO SORT DELIM FOUND/]
	TRZE	F,F.SYN
	TTCALL	3,[ASCIZ/---SYNTAX ERROR/]
	TTCALL	3,[ASCIZ/
/]
	POPJ	P,0


;ROUTINE TO ALLOCATE ONE WORD OF CORE AND UPDATE JOBFF

ALLOC:	PUSHJ	P,SETTAC
	CALLI	TAC,CORE
	JRST	SLEP
	PUSHJ	P,SETTAC
	MOVEM	TAC,JOBFF
	POPJ	P,0
SLEP:	MOVEI	TAC,^D30
	TTCALL	3,[ASCIZ/?CORE UUO FAILED--TRYING AGAIN
/]
	CALLI	TAC,SLEEP
	JRST	ALLOC
SETTAC:	MOVE	TAC,JOBFF
	AOS	TAC
	POPJ	P,0


;ROUTINE TO SET UP 'PARSE' THE COMMAND STRING

SETCMD:	TTCALL	4,AC
	TLZ	F,F.PER!F.BRK
RESET:	MOVEI	CNT1,6
;[PPN] 1LINES 26 NOV 73-RRB
	TLZ	F,F.BRK
	SETZ	TAC,
	MOVE	PTR,[POINT 6,TAC]
LOOPA:	PUSHJ	P,CODCHK
	TLO	F,F.BRK
	SUBI	AC,40
	IDPB	AC,PTR
	TTCALL	0,AC
	SOJG	CNT1,LOOPA
ZAP:	PUSHJ	P,CODCHK
	TTCALL	0,AC
	JRST	ZAP
CODCHK:	CAIN	AC,":"
	JRST	PUTDEV
	CAIN	AC,"."
	JRST	PUTFIL
;[PPN] 6LINES 26 NOV 73-RRB
	CAIN	AC,"["
	JRST	EXTP
	CAIN	AC,","
	JRST	PUTPP
	CAIN	AC,"]"
	JRST	PUTPN
	CAIN	AC,15
	JRST	EXTP
	POPJ	P,0
PUTDEV:	MOVE	CAR,TAC
	POP	P,0
LOOPB:	TTCALL	0,AC
	JRST	RESET
PUTFIL:	TLO	F,F.PER
	POP	P,0
	MOVE	FILE,TAC
	JRST	LOOPB
;[PPN] 14LINES 26 NOV 73-RRB
PUTPP:	PUSHJ	P,SXTOOC
	HRLZ	PPN,TAC
PUTPX:	POP	P,0
	JRST	LOOPB
PUTPN:	PUSHJ	P,SXTOOC
	HRR	PPN,TAC
	JRST	PUTPX
SXTOOC:	MOVE	ARG,TAC
	SETZ	TAC,
SXTOOD:	CAIN	ARG,0
	POPJ	P,
	LSH	ARG,3
	LSHC	TAC,3
	JRST	SXTOOD
EXTP:	TLNN	F,F.BRK
	JRST	CPOP
	TLNN	F,F.PER
	SKIPA	FILE,TAC
	HLLZ	EXT,TAC
CPOP:	POP	P,0
;[PPN] 2LINES 26 NOV 73-RRB
	CAIN	AC,"["
	JRST	LOOPB
	TTCALL	0,AC
	POPJ	P,0


;ROUTINE TO OUTPUT SIXBIT ON LPT

SIXOUT:	MOVEI	TAC,6
	MOVE	TITL,[POINT 6,ARG]
LOOPT:	ILDB	CAR,TITL
	ADDI	CAR,40
	PUSHJ	P,NDXPUT
	SOJG	TAC,LOOPT
	POPJ	P,0
	PAGE
	;ERROR MESSAGES


TOBIG:	TTCALL	3,[ASCIZ/?MAXIMUM SIZE WORD EXCEEDED/]
PWRD:	TTCALL	3,[ASCIZ/
WORD=/]
	MOVE	PTR,[POINT 6,OLDMAX]
	SETZM	OLDMAX+SIZSTP-1
CRLOP:	ILDB	CAR,PTR
	JUMPE	CAR,CRASH
	ADDI	CAR,40
	TTCALL	1,CAR
	JRST	CRLOP
CRASH:	MOVE	AC,EPROG1
	MOVEM	AC,JOBFF
	CALLI	0
	CALLI	12
LOTS:	TTCALL	3,[ASCIZ/?TOO MANY MATCHES FOR ARRAY/]
	JRST	PWRD
ENDRUN:;NO STPLST FOR TTY 6LINES UP 6LINES 28 NOV 73-RRB
	RELEASE	MASCH,
	RELEASE	NDXCH,
	IFN	FREQSW,
<
	RELEASE	FRQCH,0
>
	TTCALL	3,[ASCIZ/
INDEX COMPLETE
TOTAL CORE USED /]
	IFN	REENT,<
	SEGSIZ==<EHGH-START>/2000+61
>
	IFE	REENT,<		;FANCY CODING TO MAKE RENTRANT AND
	SEGSIZ==60		;NON RENTRANT CORE NUMBERS CORRECT
>
	MOVEI	AC,SEGSIZ
	TTCALL	1,AC
	MOVEI	AC,"+"
	TTCALL	1,AC
	MOVE	AC,JOBFF
	PUSHJ	P,PCORE
	JRST	CRASH
WOW:	TTCALL	3,[ASCIZ/?MASTER FILE NO LONGER AVAILABLE/]
	JRST	CRASH
NNDX:	TTCALL	3,[ASCIZ/CANNOT INIT INDEX DEVICE
/]
	JRST	CONT3
NSTP:	TTCALL	3,[ASCIZ/CANNOT INIT STOP LIST DEVICE
/]
	JRST	CONT4
NMAS:	TTCALL	3,[ASCIZ/CANNOT INIT MASTER DEVICE
/]
	JRST	CONT5
NMASFI:	TTCALL	3,[ASCIZ/CANNOT FIND MASTER FILE
/]
	JRST	CONT5
NNDXF:	TTCALL	3,[ASCIZ/CANNOT ENTER INDEX FILE
/]
	JRST	CONT3
NSTPFI:	TTCALL	3,[ASCIZ/CANNOT FIND STOP FILE
/]
	JRST	CONT4
SETFIL:	MOVE	FILE,[SIXBIT/KWIC/]
	SETZB	PPN,DATE
	MOVSI	CAR,'DSK'
	POPJ	P,0
BADFAL:	TTCALL	3,[ASCIZ/?FATAL UUO FAILURE -BADFAL-/]
	CALLI	0
	CALLI	12
CARPT:	POINT	7,CAR
STPGET:	SOSG	STPBUF+2
	JRST	STPIN
STPNXT:	ILDB	CAR,STPBUF+1
	POPJ	P,0
STPIN:	IN	STPCH,0
	JRST	STPNXT
	STATZ	STPCH,740000
	SKIPA
	JRST	STPEOF
	TTCALL	3,[ASCIZ/
?READ ERROR ON STOP LIST/]
	JRST	CRASH
GETMAS:	SOSG	MASBUF+2
	JRST	MASIN
MASNXT:	ILDB	CAR,MASBUF+1
	POPJ	P,0
MASIN:	IN	MASCH,0
	JRST	MASNXT
	STATZ	MASCH,740000
	SKIPA
	JRST	MASEOF
	TTCALL	3,[ASCIZ/
?READ ERROR ON MASTER FILE/]
	JRST	CRASH
NDXPUT:	TRNE	F,F.FRQ
	JRST	FRQPUT
	SOSG	NDXBUF+2
	JRST	NDXOUT
NDXNXT:	IDPB	CAR,NDXBUF+1
	POPJ	P,0
NDXOUT:	OUT	NDXCH,0
	JRST	NDXNXT
	TTCALL	3,[ASCIZ/
?WRITE ERROR ON INDEX FILE/]
	JRST	CRASH
NDXTIL:	ASCIZ/KWIC INDEX---/
	IFN	FREQSW,
<
FRQTIL:	ASCIZ/FREQUENCY LIST---/
NFRQ:	TTCALL	3,[ASCIZ/CANNOT INIT FREQUENCY DEVICE
/]
	JRST	CONT2
NFRQF:	TTCALL	3,[ASCIZ/CANNOT ENTER FREQUENCY FILE
/]
>
STOP:	OCT	-1
	XLIST		;JUST LITS HERE
	LIT
	LIST
MONTAB:	ASCIZ	.JAN-.
	ASCIZ	.FEB-.
	ASCIZ	.MAR-.
	ASCIZ	.APR-.
	ASCIZ	.MAY-.
	ASCIZ	.JUN-.
	ASCIZ	.JUL-.
	ASCIZ	.AUG-.
	ASCIZ	.SEP-.
	ASCIZ	.OCT-.
	ASCIZ	.NOV-.
	ASCIZ	.DEC-.
EHGH:		;END LOC OF HIGH SEGMENT
	XLIST
	LIT
	LIST
	PAGE
;26 NOV 73-RRB
	RELOC 0
	IFN	REENT<LOC 140>
	;LOW SEGMENT
ZERLST:		;EVERYTHING BETWEEN HERE AND ELIST CLEARED
STACK:	BLOCK	STKSIZ		;PUSH DOWN STACK
MASBUF:	BLOCK	3		;BUFFER HEADER FOR MASTER FILE
NDXBUF:	BLOCK	3		;  "       "    "  INDEX FILE
STPBUF:	BLOCK	3		;  "       "    "  STOP FILE
MAFIL:	BLOCK	4		;PLACE TO STORE NAMES OF MASTER FILE
MASDEV:	BLOCK	1		;MASTER FILE DEVICE KEPT HERE
TMPST:	BLOCK	1		;THE ONE TIME LOCATION OF STOP LIST
STSTP:	BLOCK	1		;LOC OF START OF STOP LIST (AFTER SHUFFELING)
ENDSTP:	BLOCK	1		;LOC OF END OF STOP LIST (AFTER SHUFFEING)
SORTPT:	BLOCK	1		;LOC OF MASTER FILE FIRST WORD
EPROG1:	BLOCK	1		;CONTENTS OF JOBFF AT ENTRY TO PGM
CURLIN:	BLOCK	2		;CURRENT LINE BEING READ INTO CORE IN MASTER FILE
TITLE:	BLOCK	^D16		;LISTING TITLE KEPT HERE
OLDMAX:	BLOCK	SIZSTP		;UPPER LIMIT OF SORT STORED HERE
OLDMIN:	BLOCK	SIZSTP		;LOWER LINIT OF SORT STORED HERRE
MATBL:	BLOCK	MAXSAM		;TABLE OF MATCHES FOUND BY SORT
				;ROUTINE PASSED TO PRINT ROUTINE
				;FORMAT LH=START ADDR OF ENTRY,
				;RH=WINDOW OF ENTRY
;MATBL ALSO USED AT START: TO STORE USAGE BLOCK(128. WORDS)
OLDSIZ:	BLOCK	1		;SIZE OF STOP LIST
	IFN	FREQSW,
<
FRQLIN:	BLOCK	1
FRQPAG:	BLOCK	1
FRQBUF:	BLOCK	3
>
;LPTSIZ 1LINES 26 NOV 73-RRB
LPTSIZ:	BLOCK	1		;SIZE OF OUTPUT PAGE
NDXDEV:	BLOCK	1		;DEVICE FOR INDEX
ELST:	BLOCK	1		;END OF ZERO OUT AREA
	END	START		;DAS IS ALLIS