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