Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0041/kwic.mac
There are 5 other files named kwic.mac in the archive. Click here to see a list.
	COMMENT	>
*****************************************************************
*****************************************************************
*****************************************************************
*								*
*								*
*								*
*								*
*								*
*			K----W----I----C			*
*								*
*			     1----0				*
*								*
*		WRITTEN BY					*
*			G.B. MOERSDORF				*
*								*
*								*
*								*
*								*
*								*
*****************************************************************
*****************************************************************
*****************************************************************
>
	PAGE
	TITLE	KWIC
	SUBTTL	GERRY MOERSDORF, OHIO STATE UNIVERSITY PDP-10

	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


	EDIT HISTORY

[1]	USE MASTER INPUT FILE NAME AS DEFAULT NAME FOR THE
	.FRQ AND .NDX OUTPUT FILES.  HD TODD, 21 OCT 77, WESLEYAN UNIV.
[2]	IF THE .STP FILE CANNOT BE FOUND ON THE USER'S AREA, LOOK IN THE
	PPN AREA FROM WHICH THE PROGRAM WAS RUN.  THIS FACILITATES USE OF
	THE KWIC PROGRAM AS A LIBRARY PROGRAM WITH A STANDARD STOP FILE.
	HD TODD, 21 OCT 77, WESLEYAN UNIVERSITY.


*
	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==1		;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==1>	;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 LPTSIZ,<LPTSIZ==^D132>	;SIZE OF LINE PRINTER
	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
	RELOC
	PAGE
	;STARTS HERE

	IFN	REENT<HISEG>
START:	CALLI	0,0
	MOVEM	7,SRCPPN	;[2]SAVE PPN FROM WHICH PROGRAM RAN
	MOVEM	11,SRCDEV	;[2]SAVE DEV: FROM WHICH PROGRAM RAN
	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
/]
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
	MOVEM	FILE,MAFIL
	MOVEM	EXT,MAFIL+1
	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	;FIRST, LOOK ON THE USER'S AREA
	SKIPA			;[2]NO LUCK - TRY AGAIN
	JRST	CONT3		;[2]
	MOVE	CAR,SRCDEV	;[2]
	OPEN	STPCH,AC	;[2]USE ERSATZ DEVICE OF PROGRAM
	JRST	NSTP
	MOVE	PPN,SRCPPN	;[2]TRY LOOKING WHERE THE PROGRAM RAN FROM
	LOOKUP	STPCH,FILE	;[2]
	JRST	NSTPFI		;GIVE UP HOPE
CONT3:
	TTCALL	3,[ASCIZ/INDEX FILE: /]
	PUSHJ	P,SETMAS	;[1]
	MOVSI	EXT,'NDX'
	PUSHJ	P,SETCMD
	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,SETMAS	;[1]
	MOVSI	EXT,'FRQ'
	PUSHJ	P,SETCMD
	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:	MOVEI	TITL,[ASCIZ/CURRENT STOP LIST----/]
	PUSHJ	P,PHDR
	MOVEI	CNT1,MAXLIN
	MOVEI	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

	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:	CAIN	CNT1,<LPTSIZ/2>
	JRST	PRNT
	CAIG	CNT1,<LPTSIZ/2>
	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:	CAIE	CNT1,<<LPTSIZ/2>-MAXKEY-1>
	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
	CAIL	CNT1,<<LPTSIZ/2>-MAXKEY>
	JRST	LOOP83
	ILDB	CAR,PTR
	JUMPE	CAR,.-1
	JRST	CONT80
PADCK:	CAIN	CNT1,<<LPTSIZ/2>-MAXKEY>
	JRST	BUG99
BUG98:	MOVEI	CAR," "
	PUSHJ	P,NDXPUT
	AOS	CNT1
	CAIE	CNT1,<<LPTSIZ/2>-MAXKEY>
	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 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
	MOVEI	CNT1,LPTSIZ-^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
	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
	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
EXTP:	TLNN	F,F.BRK
	JRST	CPOP
	TLNN	F,F.PER
	SKIPA	FILE,TAC
	MOVE	EXT,TAC
CPOP:	POP	P,0
	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:	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
	RELEASE	MASCH,
	RELEASE	NDXCH,
	IFN	FREQSW,
<
	RELEASE	FRQCH,0
>
	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
SETMAS:	MOVE	FILE,MAFIL	;[1] ADD THIS SECTION TO SET MASTER FILE
	SETZB	PPN,DATE	;     NAME AS DEFAULT OUTPUT FILE NAME
	MOVSI	CAR,'DSK'
	POPJ	P,
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
	PAGE
	IFN	REENT<LOC 140>
	;LOW SEGMENT
SRCDEV:	BLOCK	1		;[2]SAVE DEV: OF SOURCE HERE
SRCPPN:	BLOCK	1		;[2]SAVE PPN OF SOURCE HERE
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
OLDSIZ:	BLOCK	1		;SIZE OF STOP LIST
	IFN	FREQSW,
<
FRQLIN:	BLOCK	1
FRQPAG:	BLOCK	1
FRQBUF:	BLOCK	3
>
ELST:	BLOCK	1		;END OF ZERO OUT AREA
	END	START		;DAS IS ALLIS