
PDP7/9 SYMBOLIC TAPE EDITOR - REVISED 8/21/67


/57 ASSIGNMENT FOR 4K CANUTE

MCD=707042

	JMS CLFLAG
	PUNSET
	TTYSET
	LAC (NOP
	DAC TTOSWT
	DAC TISW
	JMP CONTROL

/CANUTE - PART I

LUON=20	LN=40	TN=40	PN=300
DOLLAR=45

/CONTROL STATEMENT "HANDLER"

CONTROL,	CLC
	DAC ARGC#NT
	DZM  ARG#2	/ARG2=SECOND  ARG IF ANY
	DZM ARG#0	/ARG0=FIRST
	CLC
	DAC ARG#1	/ARG0-ARG2
	LAC (NOP
	DAC CRSWT
	DAC DLYSWT
	LAC (SKP
CON0,	DAC N#ARG	/BECOMES  NOP IF ANY ARGS IN
	DZM ARG#S	/SIGN OF NEXT NUMBER
	DZM N#UM	/WILL CONTAIN VALUE
	DZM LUI#NIN	/COUNTS DIGITS IN

CON1,	CLL
	SETDEC
	JMS DECLUI	/LINK CONTAINS MODE
	LAC LUICHR
	SAD (CHAR R.
	JMP CONPER
	SAD (CHAR R/
	JMP CONSLA

CON2,	LAC LUINUM
	XOR ARGS
	ADD NUM
	DAC NUM
	DZM ARGS
	LAC LUICHR	/CONTAINS FIRST NON-DIGIT CHAR
	SAD (CHAR R-
	JMP CONMIN
	SAD (CHAR R,
	JMP CONAG	/END OF ARGUMENT
	SAD (CHAR R=	/TO PRINT VALUE
	JMP PRNVAL
	RCR		/REMOVE  CASE  BIT
	SNA
	JMP CONLF
	SAD (2
	JMP CONTROL
	SAD (10
	JMP CONLF	/LINE  FEED SEEN
	SAD (4
	JMP CON1	/SPACE MEANS PLUS
	SZL
	JMP CONERR	/NOT LOWER CASE, ERROR
	ADD (LAC DSPTCH
	DAC .+1
	XX
	DAC  CONOUT	/SAVE  ENTRY FOR LATER DISPATCH
	SNA
	JMP CONERR

/MORE CONTROL STATEMENT INPUT

CON3,	LAC ARGCNT
	SZA
	JMP CON4	/NON-ZERO MEANS NO ARGUMENTS
	LAC NUM		/ZERO MEANS 1, SET  UP SECOND
	DAC ARG2
	CMA
	ADD ARG0
	SMA
	CLC
	DAC ARG1
	LAC LUININ
	SNA
	JMP CONERR

/WAIT FOR CARRIAGE RETURN TERMINATION

CON5,	CLL
	JMS LUI
	RCR
	SAD (10
	JMP CONERS	/LINE FEED MEANS ERASE
	SAD (2
	SKP
	JMP CONERR

CONOUT,	XX	/CALL FUNCTION, RETURN HERE
	JMP CONTROL

/COME HERE IF ONLY  ONE ARGUMENT IN

CON4,	LAC LUININ
	SNA
	JMP CON5
	LAC NUM	/ONE ARGUMENT
	DAC ARG0
	DAC ARG2
	LAC (NOP
	DAC NARG
	JMP CON5

/ERASE AFTER LINE FEED

CONERS,	LAW 4
	JMS TYPCHR
	JMP CONTROL

/ERROR ROUTINE

CONERR,	LAW CHAR R?
	JMS TYPCHR
	JMS TCR
	JMP CONTROL 

/SOME SPECIAL ROUTINES

CONSLA,	LAC LASTN
	SKP
CONPER,	LAC THISN
	DAC LUINUM
	ISZ LUININ	/SIMULATE NUMBER IN
	CLL		/ZERO LINK FOR NODE
	JMS LUI
	JMP CON2

/SET TO SUBTRACT NEXT ELEMENT

CONMIN,	CLC
	DAC ARGS
	JMP CON1

/ARGUMENT IN

CONAG,	ISZ ARGCNT
	JMP CONERR
	LAC LUININ
	SNA
	JMP CONERR
	LAC NUM
	DAC ARG0
	LAC (NOP	/SET ARGUMENT IN SWITCH
	JMP CON0

/CHECK THE VALUE OF AN ARGUMENT FOR RANGE

CHKVAL,	0
	DAC VAL#TEM
	SMA!SZA!CMA
	SKP
	JMP CONERR
	TAD (1
	TAD LASTN
	SPA
	JMP CONERR
	LAC VALTEM
	JMP I CHKVAL

/CHECK FOR ZER ONE OR TWO ARGUMENTS. RETURN . 1 WITH ZERO
/RETURN . 2 WITH ONE OR TWO LEGAL ARGS

CHKARG=JMS .
	0
	XCT NARG
	SKP
	XT  CHKARG	/NO ARGS
	LAC ARG0
	JMS CHKVAL
	LAC ARG2
	JMS CHKVAL
	LAC ARG2
	CMA
	ADD ARG0
	SMA
	JMP CONERR
	ISZ CHKARG-JMS
	XT  CHKARG

/CHECK FOR CONE AND ONLY ONE ARGUMENT
/RETURN . 1 IF NO ARGS, RETURN . 2 WITH -N 1  IN AC IF ONE

CHKONE=JMS .
	0
	XCT NARG
	SKP
	XT CHKONE
	LAC ARGCNT
	TAD (1
	SZA
	XT CHKONE
	LAC ARG0
	CMA
	TAD (1
	SZA
	ISZ CHKONE-JMS
	XT CHKONE

/SIMULATE NO ARGUMENTS

NOARG,	0
	CLC
	DAC ARG1
	DZM ARG0
	DZM ARG2
	LAC (SKP
	DAC NARG
	JMP I NOARG


/LINE FEED IN - PRINT NEXT LINE

CONLF,	LAC LUININ
	SZA
	JMP CONERS
	LAC THISN
	ADD (1
CONLF1,	JMS CHKVAL
	DAC ARG0
	DAC ARG2
	LAC (NOP
	DAC NARG
	JMS LIST
	JMP CONTROL

/PRINT THE VALUE OF THE ARGUMENT

PRNVAL,	SETDEC
	LAC (33
	DAC BTACAS
	LAC NUM
	DECPNT
	JMS TCR
	JMP CONTROL

/BACKUP AND PRINT LINE

BACKUP,	0
	LAC LUININ
	SZA
	JMP CONERR
	CLC
	TAD THISN
	JMP CONLF1

/LIST 1 OR N PAGES

WRIT,	0
	CHKONE
	SKP
	JMP WRIT1
	JMS WRITE
	JMP I WRIT

/W HAS ARGUMENTS

WRIT1,	DAC W#CNT

WRIT2,	JMS KILL
	JMS NOARG
	JMS READ
	JMS WRITE
	LAC LASTN
	TAD (-102 1
	SMA
	JMP .-2
	DAC F#CNT
	LAW 10
	JMS LUO
	ISZ FCNT
	JMP .-3
	ISZ WCNT
	JMP WRIT2
	JMS KILL
	JMP I WRIT

/FIODEC TO TELETYPE AND OUTPUT

TTO=JMS .	0
	AND (77
	DAC T#OCH
TTOSWT,	NOP
	SAD (72
	JMP TOLC
	SAD (74
	JMP TOUC
	SAD (77
	JMP TOCR
	SAD (36
	JMP TOTB
	SAD (76
	703301
	SKP
	JMP TQUEST
	ADD (LAC TABLE
	DAC .+1
	XX

FIOCAS,	NOP
	JMS RAR9		/LOWER CASE CHAR IN LEFT HALF
	AND (177
	SNA
	JMP TOSC
	TAD (777700
	SMA
	JMP TODOL
TQU,	JMS TYPCHR
	XT  TTO

TOLC,	LAC (NOP
	SKP

TOUC,	LAC (SKP
	DAC FIOCAS
	XT  TTO

TOCR,	JMS TCR
	XT  TTO

TQUEST,	LAC (47
	JMP TQU

/A TAB IS OUTPUT

TOTB,	JMS TTAB
	XT  TTO

/CHAR WITH NO CORRESPONDENCE

TOSC,	LAW DOLLAR
	JMS TYPCHR
	SETOCT
	LAC FIOCAS
	XOR (SKP
	SZA!CLA
	LAC (100
	TAD TOCH
	DECPNT
	XT  TTO

/REMAINDER OF OUTPUT CONVERSION ROUTINE

TODOL,	DAC TO#TEM
	SAD (17	/CHECK FOR CENTER DOT
	JMP TOCEN
	LAW DOLLAR
	JMS TYPCHR
	LAC TOTEM
	JMS TYPCHR
	XT  TTO

/SET TO PROCESS AFTER A CENTER DOT

TOCEN,	LAC (JMP TOCHK
	DAC TTOSWT
	XT  TTO

/CHECK CHARACTER AFTER A CENTER DOT

FIODEC

TOCHK,	SAD (CHAR R.
	JMP TOPER
	SAD (CHAR R,
	JMP TOCOM

TELETYPE

	LAW DOLLAR
	JMS TYPCHR
	LAC TOTEM
	JMS TYPCHR
	LAC (NOP
	DAC TTOSWT
	LAC TOCH
	JMP TTOSWT 1

TOPER,	LAW 35
	SKP
TOCOM,	LAW 37
	JMS TYPCHR
	LAC (NOP
	DAC TTOSWT
	XT  TTO

/TELETYPE INPUT AND CONVERSION TO FIODEC

TTI=JMS .	0
TISW,	NOP
	STL
	JMS LUI		/SIX BIT BAUDOT RETURNED FROM LUI
	SAD (DOLLAR
	JMP TIST		/DOLLAR SIGN CHARACTERS
	SAD (35
	JMP TICOL		/COLON
	SAD (37
	JMP TISEM		/SEMICOLON
	RCR		/BACK TO 5-BIT BAUDOT,-CASE BIT GOES TO LINK
	SAD (10
	JMP TTILF		/LINE FEED
	SAD (2)
CRSWT,	NOP		/MODIFIED FOR Y COMMAND,-ON C. R.
	SNA
	JMP BLANK		/DELETE OR TERMINATION CHARATER
	TAD (LAC TELFIO
	DAC  Z
TTIB,	LAC (SKP
	SNL		/LINK=0 FOR LOWER CASE BAUDOT
	LAC (NOP
	DAC  Z 1
TTIC,	LAC FOCS
	RAL
Z,	XX		/LOAD CORRECT FRODEC CODE
	XX		/SKIP IF UPPER CASE BAUDOT,-NOP IF LOWER CASE
	JMS RAR9		/LEFT HALF OF FRODEC TABLE IS LOWER CASE IS BAUDOT CHARS
	AND (177		/RIGHT HALF CONTAINS CONVERSION FOR UPPER CASE BAUDOT CHARS
	TAD (377700
	SMA		/UPPER CASE FRODEC?
	JMP FOTC		/NO, CHECK LOWER CASE
	SNL		/IS UPPER CASE ALREADY TAKE CARE OF?
	JMP FOUC		/NO, THEN OUTPUT IT.
CASEOK,	AND (77
	XT  TTI

/LINE FEED - TYPE CARRIAGE RETURN AND LOWER CASE

TTILF,	LAW 4		/CARRIAGE RETURN
	JMS TYPCHR
	JMP SPECXT

/INPUT AND UPPER CASE LETTER, OR A NUMERIC CODE

TIST,	LAM -2
	DAC LUININ
	SETOCT
	STL		/SET MODE INTO LINK
	JMS DECLUI
	LAC LUININ
	SAD (-2
	JMP TLET
	LAC LUINUM
TISTS,	AND (177
	DAC S#V
	LAC (LAC SV
	DAC Z
	STL
	JMP TTIB

/FIODEC CASE HANDLING

FOUC,	LAC (400074		/UPPER CASE
	JMP FOTC 3
FOTC,	SNL
	JMP CASEOK
	LAC (72		/LOWER CASE
	DAC F#OCS
	LAC TISW		/SAVE OLD VALUE OF TISW
	DAC TISWSV#
	LAC (JMP FOXT	/MODIFY FLOW AFTER OUTPUT A FRODEC CASE CHAR.
	DAC TISW
	LAC FOCS
	JMP CASEOK

FOXT,	LAC TISWSV		/RESTORE TISW
	DAC TISW		/NOW CASE OK, SO CAN OUTPUT THE CHARACTER
	JMP TTIC

RAR9,	0
	RTR
	RTR
	RTR
	RTR
	RAR
	DAC RAR#TEM
	LAC RAR9
	RAL
	LAC RARTEM
	JMP I RAR9

/HANDLE DOLLAR SIGN TYPE INPUT

TLET,	LAC LUICHR		/CONTAINS CHAR OFTEN DOLLAR SIGN
	RCR		/LINK CONTAINS BOUDOT CASE
	SAD (10		/D FOR LOWER CASE
	JMP TTILF		/LINE FEED
	SAD (2
	JMP DOLCAR		/CARRIAGE RETURN
	SNA
	JMP TISW 1
	SZL
	JMP TPNC		/UPPER CASE CHAR.
	TAD (LAC TELFIO	/LOWER CASE,-USE OLD TABLE
	DAC .+1
	XX
	TAD (100000
	DAC SV
	LAC (LAC SV
	DAC Z
	JMP TTIB

TPNC,	TAD (LAC TELPNC	/NEW TABLE FOR UPPER CASE
	DAC Z		/BOUDOT DOLLAR SIGN CHARS
	JMP TTIB

/MAKE COLONS AND SEMI-COLONS INTO CENTER DOT ETC

FIODEC

TICEN,	0
	LAC TISW	/SAVE RESTORE FOR SWITCH
	DAC TI#SWV
	LAC (JMP TICENA	/MODIFY FLOW FOR DBLE CHARS
	DAC TISW
	LAW 40		/CENTER DOT
	JMP TISTS
TICENA,	LAC TISWV
	DAC TISW
	JMP I TICEN

TICOL,	JMS TICEN
	LAW CHAR R.
	JMP TISTS

TISEM,	JMS TICEN
	LAW CHAR R,
	JMP TISTS

TELETYPE

/DOLLAR SIGN- CARRIAGE RETURN ADD TO NEXT LINE

DOLCAR,	LAC (JMP DSET
	DAC TISW
	LAC (NOP
	DAC DLYSWT
	LAC (77
	JMP CASEOK

/SET UP TO PRINT AND COPY THE NEXT LINE

DSET,	LAC (JMP I DSUB
	DAC TISW		/EXIT FROM GET NEXT CHARACTER
	LAC (JMS DSUB	/COME TO PRINT AND USE NEXT CHARACTER
	DAC OUTPUT
	LAC (SKP
	DAC SUPSW
	LAC (NOP
	DAC CRSWT
	LAC THISN
	ADD (1
	DAC ARG0
	DAC ARG2
	JMS CHKVAL
	CLC
	DAC ARG1
	JMS UNPACK
	HLT

/GET THE NEXT CHARACTER FROM THD LINE, PRINT IT, AND APPEND IT TO THE NEW LINE

DSUB,	0
	SAD (277
	JMP DSUB1
DLYSWT,	NOP	/SKIP IF Y FORMAT
	JMP DSUBA
	TTO
	LAC (-52		/0.7 SEC DELAY
	DAC 7		/BETWEEN CHARS
	CLON		/(Y COMMAND)
	JMP .
	LAC LUICCT
	SAD (-0		/CHECK FOR TYPE IN
	JMP DSUB0
	JMS LUI
	RCR
	SZA
	JMP CONERR
	LAC (JMP DSUBCR
	DAC CRSWT
	LAC (NOP		/SET TO APPEND TYPED CHARACTERS TO LINE
	DAC TISW		/AND RETURN (DSUBCR) WHEN CR IS TYPED
	JMP DSUB0

/SET TO APPEND REMAINING CHARACTERS IN ORIGINAL LINE
/TO LINE, BUT NOT TYPE THEM OUT
DSUBCR,	LAC (JMP DSUB0+1
	DAC DLYSWT
	LAC (JMP I DSUB
	DAC TISW
	LAC (NOP
	DAC CRSWT
	JMP I DSUB

DSUBA,	TTO
DSUB0,	LAC TOCH
	SAD (72
	JMP DLC
	SAD (74
	JMP DUC
	JMP CASEOK	/APPEND THE CHARACTER

/DELETE THE ORIGINAL LINE
DSUB1,	LAC THISN
	DAC ARG0
	DAC ARG2
	CLC
	DAC ARG1
	JMS DELETE	/DELETE THE OLD VERSION OF THE LINE
	LAC (NOP
	DAC TISW
	LAC DLYSWT		/IF  CR ONLY APPEND CHARS
	SAD (JMP DSUB0+1	/IF Y FORMAT AND CR TYPED FINISH LINE.
	SKP
	JMP TISW+1		/RETURN TO APPEND TO THE LINE
	LAC (277
	JMP CASEOK

DUC,	LAC (400074
DLC,	DAC FOCS
	JMP CASEOK

/DISPATCH TABLES FOR CONTROL LETTERS

DSPTCH,	0
	JMS TAPE
	0
	JMS OALL
	0
	0
	JMS NEXT
	0
	0
	JMS LIST
	JMS READ
	JMS TAG
	JMS INSERT
	JMS PUN
	JMS CHANGE
	0
	0
	JMS SKIP
	JMS DELETE
	JMS BACKUP
	JMS STOP
	JMS Y
	JMS FEED
	JMS X
	JMS APPEND
	JMS WRIT
	0
	0
	0
	JMS Q
	JMS KILL
	0

/TELETYPE 28 TO FIODEC CONVERSION
/FIRST TWO DIGITS FOR LOWER CASE, LAST 3 FOR UPPER CASE BAUDOT
/FIODEC CODE CONVERSION WHICH IS ITSELF UPPER CASE IS INDICATED BY AN OCTAL
/DIGIT 1 PRECEDING THE 6 BIT FIODEC CODE

TELFIO,	0	23005	77077	46011	/NULL; T,5; CR,CR; S,9;
	0	70173	45033	44073	/SPACE; H,#; ETC.
	0	43055	51004	67154
	71010	47020	63000	25000
	65003	31140	64000	62121	/X,T,+,-,?,^ = UPPERCASE FIODEC CHARS
	22036	30006	66111	27021
	61054	26002	41056	0
	24007	50001	42057	0

/CONVERSION FOR DOLLAR SIGN CHARACTERS

TELPNC,	0	0	0	0
	0	106	104	40
	0	155	0	110
	0	0	133	120
	0	101	0	103
	0	0	156	105
	107	0	102	0
	0	0	157	0

/FIODEC TO TELETYPE

TABLE,	010010	073143	063165	041147
	025115	003157	053113	071161
	031127	007055	0	0
	0	0	0	0

	033137	057047	050150	002102
	070170	036136	062162	056156
	052152	042142	0	015135
	0	0	0	0

	117043	064164	074174	022122
	016116	014114	006106	032132
	072172	024124	0	0
	061027	023123	065155	075175

	0	060160	046146	034134
	044144	040140	054154	026126
	012112	030130	0	017013
	0	0	100100	0

START
