
CANUTE PART 2   MAIN SUBROUTINES

X1=10
X2=11

APPEND,	0
	CHKONE
	SKP
	JMP CONERR
	LAC LAST#N
	DAC THISN
	LAC L#AST
	DAC THIS
	LAC (NOP
	DAC TISW		/TELETYPE INPUT SWITCH
	DZM LSTCHR	/STORAGE FOR LAST CHARACTER SEEN
	LAC (JMS TONE	/SET SWITCH IN PACK ROUTINE TO
	DAC ON		/FROM TELTYPE
	JMS A		/APPEND ALL LINES AND RESET POINTERS
	JMP I APPEND

A,	0
	JMS PACK	/ADD ONE LINE
	JMP .-1
	JMP I A

TONE,	0		/TYPE IN
	TTI
	ISZ TONE		/INDEX RETURN IF NOT DONE
	DAC LSTC#HR	/SAVE CHARACTER FIR CHECK IF BLANK KEY TYPED
	JMP I TONE

BLANK,	LAC LSTCHR
	SAD (77
	JMP I TONE	/NO DELETE IF LAST CHARACTER WAS CR
	JMS DECR		/OTHERWISE ERASE ONE CHARACTER
	JMP TONE+1

DECR,	0
	LAC P#CNT		/IF CHARACTER CNT IS -2 MUST BACK UP 1 WORD
	SAD (-2
	JMP FUR
	ADD (-1		/OTHERWISE DECREMENT CHARACTER COUNT BY 1
	DAC PCNT
	LAC PT#EM		/GET PARTIAL ACCUMULATION
DE1,	AND (777700	/AND OUT LAST CHARACTER
	CLL
	RTR	RTR	RTR
	DAC PTEM		/ROTATE WORD BACK ONE CHARACTER
	JMP I DECR


OUTTEM,	0

/APPEND CONTIUED

FUR,	LAC X1		/ASKED TO ERASE TOO MANY?
	SAD BUF#FER
	JMP SET
	DAC TE#M	/POINTER TO WORD TO ERASE
	ADD (-1		/NO, DECREMENT STORAGE POINTER
	DAC X1
	CLC
	DAC PCNT		/SET CNT FOR ONE MORE CHARACTER
	LAC I TEM	/GET WORD BACK AGAIN
	DAC PTEM
	JMP DE1-1	/GO SHIFT IT BACK ONE

/CHANGE

CHANGE,	0
	CHKARG
	JMP NEED
	JMS DELETE
	JMS INSERT
	JMP I CHANGE

/FIND THE NEXT TAG
/THIS ROUTINE REQUIRES ONE ARGUMENT
/A "TAG" IS FOUND IF THE LINE DOESN'T BEGIN WITH CR, TAB, OR SLASH

G,TAG,	0
	CHKARG
	JMP NEED
	LAC ARG0
	SAD LASTN
	SKP
	ADD (1
	DAC ARG0
	DAC THISN
	JMS FIND
	DAC THIS
	LAC LASTN
	CMA
	ADD ARG0
	DAC ARG1
	LAC (NOP
	DAC FIOCAS
	DAC SUPSW
	LAC (JMP TTEST
	DAC SUPSW+1
	JMS UNPACK
	JMP CONERR

TTEST,	SAD (77
	JMP MORE
	SAD (36
	JMP MORE
	SAD (21
	JMP MORE
	LAC THISN
	DAC ARG0
	DAC ARG2
	CLC
	DAC ARG1
	JMS LIST
	JMP I G

INS1,	0
	DAC ON
	LAC (NOP
	DAC TISW
	CLC
	TAD ARG#0
	DAC THIS#N
	JMS FIND
	DAC TH#IS
	JMS PACK
	JMP .-1
	JMP I INS1

INSERT,	0
	LAC (JMS TONE
	JMS INS1
	JMP I INSERT

X,	0
	LAC ARG0
	CMA
	ADD (1
	DAC CRC
	READST
	LAC ARG2
	ADD (1
	DAC ARG0
	LAC (JMP RGET
	JMS INS1
	JMP I X

/KILL

KILL,	0
	LAC BUFFER
	CMA
	TAD BUFBEG
	DAC BUFFER
	LAC BUFBEG
	DAC X1
	DAC X2
	DZM I X1		/CLEAR 1 BUFFER
	DZM I X2		/UP TO THE LAST
	ISZ BUFFER		/LOCATION USED
	JMP .-3
	LAC BUFBEG#
	DAC BUFFER	/RESET FREE STORAGE
	DZM FIRST	/MAKE FIRST POINTER ZERO TO INDICATE END
	DZM THISN	/NUMBER OF .
	DZM LASTN	/NUMBER OF /
	LAW FIRST
	DAC LAST
	DAC THIS
	JMP I KILL

OALL,	0
	CHKARG
	SKP
	JMP CONERR
	JMS PUN
	JMS STOP
	JMS KILL
	JMP I OALL

/LIST

LIST,	0
	CHKARG
	JMP NEED
	LAC (NOP
	DAC FIOCAS
	LAC (SKP
	DAC SUPSW
	LAC (TTO		/SET OUTPUT IN UNPACK TO TELETYPE
	DAC OUTPUT
	JMS UNPACK	/UNPACK AND OUTPUT LINES ACCORDING TO ARG0 ETC.
	JMP I LIST


/PUNCH OUT THIS PAGE AND GET THE NEXT

NEXT,	0
	CHKONE
	CLC
	DAC NC#NT
	JMS NOARG
	JMS PUN
	JMS STOP
	JMS KILL
	JMS READ
	ISZ NCNT
	JMP .-5
	JMP I NEXT


/PUNCH

PUN,	0
	LAC FIRST
	SNA
	JMP CONERR
	LAC (SKP
	DAC SUPSW
	CHKARG
	JMS SETPUN
PUN1,	LAC (PUNLDB	/SET UNPACK TO PUNCH OUTPUT
	DAC OUTPUT
	LAM -140
	J FEEDC
PUNALL,	JMS UNPACK	/OUPUT ALL LINES BETWEEM ARG0 AND ARG2
	JMP I PUN

SETPUN,	0		/SET UP M + N TO ENCOMPASS BUFFER
	LAC (1
	DAC ARG0
	LAC LASTN
	DAC ARG2
	CMA
	ADD ARG0
	SMA
	CLC
	DAC ARG1
	JMP I SETPUN


/TYPE ONLY UP TO SECOND TAB

Q,	0
	LAC FI#RST
	SNA
	JMP CONERR
	LAC (NOP
	DAC FIOCAS
	DAC SUPSW
	LAC (JMP QTEST
	DAC SUPSW+1
	CHKARG
	JMS SETPUN
	LAC (TTO
	DAC OUTPUT
	DZM Q#CNT
	JMS UNPACK
	JMP I Q

QTEST,	DAC Q#TEM
	SAD (77
	DZM QC#NT
	SAD (77
	JMP SUPSW+2
	SAD (36
	ISZ QCNT
	LAM -1
	ADD QCNT
	SMA
	JMP . 3
	LAC QTEM
	JMP SUPSW+2

	LAC (77
	TTO
	DZM QCNT
	JMP MORE

/READ

READ,	0
	LAC (JMP RGET	/SET INPUT TO PAPER TAPE
	DAC ON
	LAC (NOP
	DAC FIOCAS
	DAC TISW		/TELTYPE INPUT SWITCH
	CHKONE
	CLA
	DAC CRC
	LAC LAST
	DAC THIS
	READST
	JMS A		/ADD ON THE LINES; RESET POINTERS
	JMP I READ


RGET,	GETCHR		/GET CHARACTER FROM READER
	JMP ON+1		/RETURN IF NO MORE CHARACTERS
	DAC R#TEM
	LAS
	RAR
	SZL
	JMP NOERR
	LAC RTEM
PARERR,	JMS PARCHK	/CHECK PARITY
	SNL
	JMP TYERR	/PARITY ERROR
NOERR,	LAC RTEM
	JMP ON+2		/RETURN FOR NOT DONE YET

PARCHK,	0
	DAC P#ARTEM
	DZM #PARITY
	RCR
	SZL!RCR
	ISZ PARITY
	SZA
	JMP .-3
	SZL
	JMP .-5
	LAC PARITY
	RAR
	LAC PARTEM
	AND (77
	JMP I PARCHK

TYERR,	LAW PRM1
	JMS TYPE
	SETDEC
	LAC THISN
	ADD (1
	DECPNT
	LAW PRM2
	JMS TYPE
	SETOCT
	LAC RTEM
	DECPNT
	JMS TCR
	LAC (76		/WILL PRINT AS &  IN TEXT
	JMP ON 2

PRM1,	TEXT .
PARITY IN LINE .

PRM2,	TEXT . CHAR IS .

/SKIP N PAGES

SKIP,	0
	CHKONE
	CLC
	DAC CNT
	READST
	GETCHR
	SKP
	JMP .-2
	ISZ CNT
	JMP .-5
	JMP I SKIP

/STOP CODE

STOP,	0
	LAM -5		/PUNCH SMALL AMOUNT OF TAPE FEED
	JMS FEEDC
	LAC (13
	PUNLDB		/AND STOP CODE
	JMP I STOP

CNT,	0

/TAPE TO TAPE TRANSFER

TAPE,	0
	CHKONE
	CLC
	DAC T#CNT
	JMS NOARG
TAP1,	JMS KILL		/KILL TEH BUFFER
	JMS READ		/READ IN A PAGE
	LAC FIRST
	SNA
	JMP TA1
	JMS PUN		/PUNCH IT
	JMS STOP		/AND A STOP CODE
	JMS KILL		/KILL THE BUFFER
TA1,	ISZ TCN#T
	JMP TAP1
	JMP I TAPE


/LIST THE BUFFER

WRITE,	0
	JMS SETPUN	/SET UP COUNTERS FOR WHOLE BUFFER
	LAC (NOP
	DAC NARG
	JMS LIST		/LIST REQUIRED LINES
	JMP I WRITE

/DELETE

DELETE,	0
	CHKARG
	JMP NEED
	LAC ARG1
	TAD LASTN
	DAC LASTN
SNA
	JMP DELK
	CLC
	TAD ARG0
	JMS FIND
	DAC THIS
	CLC
	TAD ARG0
	DAC THISN

DEL0,	LAC I THIS
	DAC DEL#TEM
	LAC I DELTEM
	DAC I THIS
	ISZ ARG1
	JMP DEL0
	LAC LASTN
	JMS FIND
	DAC LAST
	JMP I DELETE

DELK,	JMS KILL
	JMP I DELETE


/FIND

FIND,	0
	CMA
	SMA
	CLC
	DAC C#NTF
	LAW FIRST
	JMP . 3
	LAC I FTEM#
	SZA
	DAC FTEM
	ISZ CNTF
	JMP .-4
	LAC FTEM
	JMP I FIND

/CHARACTER CORRECTION MODE

Y,	0
	CHKONE
	JMP CONERR
	CLC
	TAD ARG0
	DAC THISN
	LAC (JMP DSET
	DAC TISW
	LAC (JMS TONE
	DAC ON
	LAC (SKP
	DAC DLYSWT
	JMS PACK
	NOP
	JMP I Y

/UNPACK AND OUPUT ARG1 LINES

UNPACK,	0
	LAC ARG0		/FIND ADDRESS OF FIRST LINE
	DAC THISN
	JMS FIND
	DAC THIS
	DAC X2		/RETURNS IN AC, PUT IN AUTO-INDEX
LTALLY,	LAM -2		/MAIN LOOP TO UNPACK 1 WORD
	DAC L#CNT
	LAC I X2
	DAC FTEM
TAL,	LAC FTEM
	RTL	RTL	RTL
	DAC FTEM
	RAL
	AND (77
	SAD (13
	JMP MORE		/MORE LINES TO BE OUTPUT?
SUPSW,	XX		/NOP OR SKP
	XX		/JMP TO PRINT SUPPRESSING ROUTINE
	JMS PARCHK
	SNL
	ADD (200
OUTPUT,	XX		/TTO OR PUNLDB
	LAC OUTPUT
	SAD (TTO
	SKP
	JMP . 4
	LAS
	SPA
	JMP NOMORE

	ISZ LCNT
	JMP TAL
	JMP LTALLY


MORE,	ISZ ARG1
	SKP
	JMP I UNPACK
	ISZ THISN
	LAC I THIS
	JMP UNPACK 4

NOMORE,	LAC (77
	TTO
	LAC ARG2
	DAC THISN
	JMS FIND
	DAC THIS
	JMP CONTROL
/FEED N LINES

FEED,	0
	CHKONE
	CLC
	JMS FEEDC
	JMP I FEED

FEEDC,	0
	DAC FEE#DCNT
	CLA
	PUNLDB
	ISZ FEEDCNT
	JMP .-3
	JMP I FEEDC

/ADDS A LINE TO THE PAGE AND RESETS BUFFER, LASTN, AND THIS

PACK,	0
	LAM -2
	DAC PCNT
	DZM PTEM
	LAC BUFFER
	DAC X1
	JMS CHECK
ON,	XX
	JMP  SET
	AND (77
	SAD (77
	JMP DONE
	JMS P1
	JMP ON

P1,	0
	CLL
	DAC C#1
	LAC PTEM
	RTL	RTL	RTL
	ADD C1
	DAC PTEM
	ISZ PCNT
	JMP I P1
	JMS CHECK
	LAC PTEM
	DAC I X1
	LAM -2
	DAC PCNT
	DZM PTEM
	JMP I P1

CHECK,	0
	LAC X1
	SAD ALMO#ST
	JMP ALFULL
	CMA
	ADD (1
	ADD BUFEND#
	SMA
	JMP I CHECK
FULL,	LAW FULLM
	JMS TYPE
	JMP CONTROL
	

/MORE ADD ONE LINE TO THE BUFFER

DONE,	JMS P1
	LAC (13
	JMS P1
	LAC PTEM
	SZA
	JMP .-4
	LAC I THIS
	DAC I BUFFER
	SZA
DONE1,	JMP . 3
	LAC BUFFER
	DAC LAST
	LAC BUFFER
	DAC I THIS
	DAC THIS
	ISZ THISN
	LAC X1
	ADD (1
	DAC BUFFER
	CMA
	ADD (1
	ADD BUFEND
	SPA
	JMP FULL
	ISZ LASTN
	JMP I PACK

SET,	ISZ PACK
SPECXT,	JMP I PACK

/START HERE


GO,	DAC BUFBEG#
	LAC 17762
	AND (10000
	ADD (7661
	DAC ALM#OST
	ADD (100
	DAC BUFEND#
	DAC BUFFER

GOI,	LAC (JMP INTRP
	DAC 1
	JMS KILL		/CLEAR BUFFER, RESET PNTRS., ETC.
	JMS CLFLAG
	TTYSET
	PUNSET
	JMP CONTROL

/SOME DIAGNOSTIG

NEED,	LAW NEEDM
	JMS TYPE
	JMP CONTROL

NEEDM,	TEXT .ARG MISSING
.
ALFULL,	CLC
	DAC CRC#
	LAW ALM
	JMS TYPE
	JMP I CHECK

ALM,	TEXT .BUFFER ALMOST FULL
.

FULLM,	TEXT .BUFFER FULL
.

START GO
