File: FORMAT.PA of Tape: Sources/Other/new-17
(Source file text) 

/***********************************************************************
/
/ FORMAT ; PROGRAM TO RE-FORMAT ASSEMBLER PROGRAM FILES
/ A.WINDRAM    28 JAN 75, 15-FEB-79, 22-FEB-79
/
/ THIS PROGRAM IS DESIGNED TO REPLACE STRINGS OF SPACES BY TABS
/ IN A MORE INTELLIGENT WAY THAN EDIT
/
/ THE MAIN RULES ARE :-
/
/ 1) ANY INSTRUCTION STARTING IN COLS 2-9 AND PRECEDED BY 1 OR MORE
/    SPACES IS INDENTED 1 TAB STOP
/
/ 2) ANY INSTRUCTION STARTING TO THE RIGHT OF COL 9 IS PRECEDED
/    BY ENOUGH TABS & SPACES TO MAINTAIN ITS POSITION
/
/ 3) TEXT STRINGS, QUOTED CHARACTERS, & COMMENTS ARE COPIED UNALTERED
/    E.G.   TEXT "ABCD"    ("/    ETC.
/    THE TEXT PSEUDO-OP *MUST* BE FOLLOWED BY AT LEAST 1 SPACE OR TAB
/
/ 4) COMMENTS START IN COL 1, OR COL 25 PRECEDED BY 1 OR MORE TABS
/    UNLESS AN INSTRUCTION ON THE SAME LINE REACHES COL 24,
/    IN WHICH CASE THE COMMENT & THE INSTRUCTION REMAIN SEPARATED
/    AS IN THE INPUT FILE
/
/ 5) SPACES FOLLOWED IMMEDIATELY BY A TAB ARE ELIMINATED,
/    OR REPLACED BY ONE OR MORE TABS
/
/ 6) TRAILING SPACES ON LINES NOT CONTAINING A COMMENT ARE OMITTED
/
/
/ ONE OUTPUT FILE, & UP TO 9 INPUT FILES CAN BE SPECIFIED
/ DEFAULT EXTENSION FOR BOTH INPUT & OUTPUT FILES IS "PA"
/ ALTMODE RETURNS TO MONITOR, CR RETURNS TO COMMAND DECODER
/
/ PROGRAM LAYOUT :-
/  00000 - 01377	PROGRAM
/  01400 - 01777	INPUT HANDLER ( 2 PAGES )
/  02000 - 02377	OUTPUT HANDLER ( 2 PAGES )
/  02400 - 04777	INPUT BUFFER ( 5 BLOCKS )
/  05000 - 07377	OUTPUT BUFFER ( 5 BLOCKS )
/
/ TO ASSEMBLE & LOAD THE PROGRAM :-
/
/ .R PAL8
/ *FORMAT/L/9/P$
/
/ .SAVE SYS FORMAT
/
/***********************************************************************
FIELD 0
*20
SPACES,	0
PLCO,	0
PLSP,	0
LCO,	0
CHAR,	0

OPCH,	0
	DCA LCO
	ISZ PLCO
	TAD LCO
	JMS I (OCHAR
	JMP FATLO	/ FATAL OUTPUT ERROR
	JMP I OPCH

OPTAB,	0
	CLA		/ FIXES BUG !! (AC MAY NOT BE CLEAR !)
	TAD (211
	JMS OPCH
	CMA
	TAD PLCO
	AND (7770
	TAD (10
	DCA PLCO
	JMP I OPTAB

OPSPS,	0
	TAD SPACES
	SPA SNA
	JMP OPSP2
	CIA
	DCA SPACES
	TAD (" 
	JMS OPCH
	ISZ SPACES
	JMP .-3
	JMP I OPSPS
OPSP2,	CLA
	DCA SPACES
	JMP I OPSPS

GCHAR,	0
	JMS I (ICHAR
	JMP EOF
	AND (177
	SNA
	JMP GCHAR+1
	TAD (200
	DCA CHAR
	JMP I GCHAR

EOF,	SZA CLA
	JMP FATLI
	JMS I (OCLOS
	JMP FATLO
TEST,	CDF 10
	TAD I (7642
	CDF 0
	SMA CLA
	JMP CALLCD
	JMP I (7600

/ IF LAST THING OUTPUT WAS A LABEL, & WE ARE IN COLS 2 TO 9
/ THEN OUTPUT A TAB TO SHUFFLE UP TO COL 9
FIX8,	0
	TAD SPACES
	SNA CLA
	JMP I FIX8
	TAD PLCO
	TAD (-10
	SMA CLA
	JMP FIX83
	TAD LCO
	TAD (-",
	SZA CLA
	JMP FIX83	/ IF , NOT LAST THING OUTPUT
	TAD PLCO
	TAD SPACES
	DCA PLSP

FIX82,	JMS OPTAB
	TAD PLCO
	TAD (10
	CIA
	TAD PLSP
	SMA
	JMP FIX82
	TAD (10
	DCA SPACES

FIX83,	JMS OPSPS
	JMP I FIX8

/ ERROR HANDLING
FATLO,	CLA
	TAD (OFTLM
	JMP FATLI1

FATLI,	CLA
	TAD (IFTLM

FATLI1,	DCA LCO
	TAD I LCO
	ISZ LCO
	SNA
	JMP CALLCD
	TLS
	TSF
	JMP .-1
	CLA
	JMP FATLI1+1
*200
/ START OF PROGRAM
START,	NOP		/ IGNORE ANY CHAIN PARAMETERS
	CIF 10
	JMS I (7700
	10		/ LOCK IN USR

CALLCD,	JMS I (IOSTRT	/ CALL CD
	2001		/ 'PA' FILES ASSUMED
	CDF 10
	TAD I (7600	/ CHECK FOR OUTPUT FILE
	CDF 0
	SNA CLA
	JMP TEST	/ JUST TEST ALTMODE BIT
	JMS I (OOPEN
	2001		/ 'PA' FILES IMPLIED
	JMP FATLO
	JMS I (IOPEN
	JMP FATLI

/ START OF LINE
SLINE,	DCA PLCO	/ POSITION OF LAST CHAR OUTPUT
	TAD (",		/ DUMMY FOR FIX8
	DCA LCO		/ LAST CHAR OUTPUT
GCC1,	DCA SPACES	/ NO OF SPACES IN STRING

GCC,	JMS GCHAR	/ GET NEXT CHAR INTO 'CHAR'

CLASS,	TAD CHAR
	TAD (-" 
	SNA
	JMP SPACE	/ IF SPACE
	TAD (" -211
	SNA
	JMP TAB		/ IF TAB
	TAD (211-"/
	SNA
	JMP SLASH	/ IF /
	TAD ("/-""
	SNA
	JMP QUOTE	/ IF "
	TAD (""-"T
	SNA
	JMP TEE		/ IF T (TEXT?)
	TAD ("T-215
	SNA
	JMP EOL		/ IF CR (END OF LINE)
	TAD (215-214
	SNA
	JMP FF		/ IF FORM FEED
	TAD (214
	DCA CHAR
	JMS FIX8

ECHO,	CLA
	TAD CHAR
	JMS OPCH	/ IF ANYTHING ELSE
	JMP GCC

/ END OF LINE
EOL,	TAD CHAR
	JMS OPCH
	JMS GCHAR

EOL2,	TAD CHAR
	JMS OPCH
	JMP SLINE

/ FORM FEED
FF,	TAD PLCO
	SNA CLA
	JMP EOL2	/ IF AT START OF LINE
	JMP ECHO

/ SPACE
SPACE,	ISZ SPACES
	JMP GCC

/ TAB CHARACTER
TAB,	TAD PLCO
	TAD SPACES
	AND (7770
	TAD (10
	DCA PLSP	/ NEXT TAB POSITION

TAB2,	JMS OPTAB
	TAD PLCO
	CIA
	TAD PLSP
	SPA CLA
	JMP TAB2
	JMP GCC1

/ SLASH ( START OF COMMENT )
SLASH,	TAD PLCO
	TAD SPACES
	SNA CLA
	JMP SLASH2
	TAD PLCO
	TAD (-30
	SMA CLA
	JMP SLASH2
	JMS OPTAB
	DCA SPACES
	JMP SLASH

SLASH2,	JMS OPSPS
	TAD ("/
	JMS OPCH

SLASH3,	JMS GCHAR
	TAD CHAR
	JMS OPCH
	TAD CHAR
	TAD (-212
	SZA CLA
	JMP SLASH3
	JMP SLINE

/ QUOTED CHARACTER
QUOTE,	JMS FIX8
	TAD (""
	JMS OPCH
	JMS GCHAR
	TAD CHAR
	JMS OPCH
	JMP GCC1


	PAGE
/ T MET ; MAYBE TEXT STRING
TEE,	JMS FIX8
	TAD LCO
	TAD (-"Z-1
	CLL
	TAD ("Z+1-"A
	SZL
	JMP ECHO
	TAD ("A-"9-1
	CLL
	TAD ("9+1-"0
	SZL CLA
	JMP ECHO

/ TEXT STRING MORE LIKELY
	TAD CHAR
	JMS OPCH
	JMS GCHAR
	TAD CHAR
	TAD (-"E
	SZA CLA
	JMP CLASS
	TAD CHAR
	JMS OPCH
	JMS GCHAR
	TAD CHAR
	TAD (-"X
	SZA CLA
	JMP CLASS
	TAD CHAR
	JMS OPCH
	JMS GCHAR
	TAD CHAR
	TAD (-"T
	SZA CLA
	JMP CLASS
	TAD CHAR
	JMS OPCH
	JMS GCHAR
	JMS TSPTB
	JMP CLASS

TSP,	ISZ SPACES
	JMP TTAB3

TTAB,	TAD PLCO
	TAD SPACES
	AND (7770
	TAD (10
	CIA
	DCA PLSP
	DCA SPACES

TTAB2,	JMS OPTAB
	TAD PLCO
	TAD PLSP
	SPA CLA
	JMP TTAB2

TTAB3,	JMS GCHAR
	JMS TSPTB

ELSE,	TAD CHAR
	CIA
	DCA PLSP
	JMS OPSPS
	TAD CHAR
	JMS OPCH

ELSE2,	JMS GCHAR
	TAD CHAR
	JMS OPCH
	TAD CHAR
	TAD PLSP
	SZA CLA
	JMP ELSE2
	JMP GCC1

TSPTB,	0
	TAD CHAR
	TAD (-" 
	SNA
	JMP TSP
	TAD (" -211
	SNA CLA
	JMP TTAB
	JMP I TSPTB

OFTLM,	"O;"U;"T;"P;"U;"T;" ;"F;"A;"I;"L;"U;"R;"E;215;212;0
IFTLM,	"I;"N;"P;"U;"T;" ;"F;"A;"I;"L;"U;"R;"E;215;212;0

	PAGE
/ PS/8 I/O MACROS (8BAL) (DMK) (MODIFIED BY AW TO FIX 3 BUGS)

	ZZZ=0	/FOR FILL-INS

IOSTRT,	.-.
	JMS RETFLD
	DCA IOST2
	TAD I IOSTRT
	ISZ IOSTRT
	DCA IOST1
	RIF
	TAD (6201
	JMS THISFL
	JMS THISFL
	CIF 10
	JMS I (200
	 5	/CD
IOST1,	 ZZZ
	TAD (7616
	DCA CDP		/SET UP POINTER FOR IOPEN
IOST2,	 ZZZ
	JMP I IOSTRT

ICNT=IOST2
CDP=IOST1	/ORDER IMPORTANT

ICHRP2=.
IOPEN,	.-.
	SNA
	JMP IOPN1
	CLL RAL
	TAD (7614
	DCA CDP
IOPN1,	JMS RETFLD
	DCA IOPNRT
	TAD (1401
	DCA IHNDAD
	CDF 10
	ISZ CDP
	TAD I CDP
	SNA
	JMP IOPNRT
	JMS THISFL
	CIF 10
	JMS I (200
	 1	/FETCH HANDLER
IHNDAD,	 1401
	 JMP IOPNE1
	ISZ CDP
	CDF 10
	TAD I CDP
	DCA IBLK
	TAD (ICHR2
	DCA ICHRS1
	ISZ IOPEN
IOPNRT,	 ZZZ
	JMP I IOPEN

IOPNE1,	STL RAR
	JMP IOPNRT

ICHAR,	.-.
	JMS RETFLD
	DCA ICHRRT
	JMP I ICHRS1

ICHR1,	JMS THISFL
	JMS IOPEN
	 JMP ICHRRT
ICHR2,	JMS THISFL
	CIF 0
	JMS I IHNDAD
	 5^20+0^10
ICHRP1,	 2400
IBLK,	 ZZZ
	SMA
	SKP CLA
	JMP ICHRRT	/RETURN ERROR
	TAD (-200^5
	DCA ICNT
	TAD ICHRP1
	DCA ICHRP2
	TAD IBLK
	TAD (5
	DCA IBLK
ICHR3,	0^10 CDF
	TAD I ICHRP2
	JMS ICHRS1
	0^10 CDF
	TAD I ICHRP2
	JMS ICHRS1
	CMA CLL RAL
	TAD ICHRP2
	DCA ICHRP2
	JMS ICHRS2
	ISZ ICHRP2
	JMS ICHRS2
	RAL
	JMS ICHRS1
	ISZ ICNT
	JMP ICHR3
	JMP ICHR2

ICHRT1=.
ICHRS1,	.-.
	AND (377
	TAD (-232	/^Z
	SNA
	JMP ICHR1
	TAD (232
	ISZ ICHRP2
	ISZ ICHAR
ICHRRT,	 ZZZ
	JMP I ICHAR

ICHRS2,	.-.
	DCA ICHRT1
	0^10 CDF
	TAD I ICHRP2
	AND (7400
	TAD ICHRT1
	RTL
	RTL
	JMP I ICHRS2


	PAGE

OWRIT,	.-.
	TAD OCHRP1
	CIA
	TAD OCHRP2
	TAD (177
	AND (7600
	CLL RAR
	DCA OWRTT1
	TAD OWRTT1
	CLL RTR
	RTR
	RTR
	SNA
	JMP OWRIT1
	IAC
	RAR
	TAD OLEN
	DCA OLEN
	CLL
	TAD OLIM
	TAD OLEN
	SZL CLA
	JMP OWRTE1
	TAD OWRTT1
	TAD (0^10+4000
	DCA OWRTT1
	CIF 0
	JMS I OHNDAD
OCHRT1=.
OWRTT1,	 ZZZ
OCHRP1,	 5000
OBLK,	 ZZZ
	 JMP OWRTE1
	TAD OBLK
	TAD (5
	JMS OSETUP
OWRIT1,	ISZ OWRIT
	JMP I OWRIT
OWRTE1,	CLA STL RAR
	JMP I OWRIT

OHNDAD, 0

OCLOS,	.-.
	JMS RETFLD
	DCA OCLORT
	JMS THISFL
	TAD (232
OCLO1,	JMS OCHAR
	 JMP OCLORT
	TAD OCNT
	AND (177
	SZA CLA
	JMP OCLO1
	JMS OWRIT
	 JMP OCLORT
	TAD OOPNCW
	CIF 10
	JMS I (200
	 4
	 OFLNM
OLEN,	 ZZZ
	 JMP OCLOE1
	DCA OOPNI1
	ISZ OCLOS
OCLORT,	 ZZZ
	JMP I OCLOS
OCLOE1,	STL RAR
	JMP OCLORT

OCNT, 0

OCHAR,	.-.
	AND (377
	DCA OCHRT1
	JMS RETFLD
	DCA OCHRRT
	JMP I OCHRS1
OCHR1,	ISZ OCHAR
OCHR2,	JMS OCHRS1
	JMS OCHRS2
	JMS OCHRS2
	CMA CLL RAL
	TAD OCHRP2
	DCA OCHRP2
	JMS OCHRS3
	JMS OCHRS3
	ISZ OCNT
	JMP OCHR1
	JMS THISFL
	JMS OWRIT
	 JMP OCHRE1
	JMP OCHR1

OCHRS1,	.-.
OCHRRT,	 ZZZ
	JMP I OCHAR

OCHRS2,	.-.
	TAD OCHRT1
	0^10 CDF
	DCA I OCHRP2
	ISZ OCHRP2
	ISZ OCHAR
	JMS OCHRS1
	JMP I OCHRS2

OCHRS3,	.-.
	TAD OCHRT1
	CLL RTL
	RTL
	DCA OCHRT1
	TAD OCHRT1
	AND (7400
	0^10 CDF
	TAD I OCHRP2
	DCA I OCHRP2
	ISZ OCHRP2
	JMP I OCHRS3

OCHRP2, 0
	PAGE

OCHRE1,	CLA		/ERROR FROM OCHR
	DCA OOPNI1
	STL RAR		/RETURN ERROR INDICATION
	JMP OCHR2

OOPEN,	.-.
	DCA OOPNT1
	JMS RETFLD
	DCA OOPNRT
	TAD OOPNI1
	SZA CLA
	JMP OOPNE1	/ONLY 1 OUTPUT FILE
	TAD OOPNT1
	CLL RTL
	TAD OOPNT1
	TAD (7600
	DCA OOPNP1
	TAD I OOPEN
	DCA OOPNT1
	TAD (OOPNCW
	DCA OOPNP2
	JMS OOPNS1
	JMS OOPNS1
	JMS OOPNS1
	JMS OOPNS1
	JMS OOPNS1
	TAD OOPNEX
	SNA
	TAD OOPNT1
	DCA OOPNEX
	TAD (2001
	DCA OOPNT1
	TAD OOPNCW
	AND (17
	SNA
	JMP OOPNRT
	CIF 10
	JMS I (200
	 1
OOPNT1,	 2001
	 JMP OOPNE1
	TAD OOPNT1
	DCA OHNDAD
	TAD (OFLNM
	DCA OOPN1
	TAD OOPNCW
	CIF 10
	JMS I (200
	 3	/ENTER
OOPN1,	 OFLNM
OLIM,	 0
	 JMP OOPNE1
	ISZ OOPNI1
	TAD OOPN1
	JMS OSETUP
	TAD (OCHR2+1
	DCA OCHRS1
	DCA OLEN
	ISZ OOPEN
	SKP
OOPNE1,	CLA STL RAR
OOPNRT,	 ZZZ
	ISZ OOPEN
	JMP I OOPEN

OOPNS1,	.-.
	CDF 10
	TAD I OOPNP1
	JMS THISFL
	DCA I OOPNP2
	ISZ OOPNP1
	ISZ OOPNP2
	JMP I OOPNS1

OSETUP,	.-.
	DCA OBLK
	TAD (-200^5
	DCA OCNT
	TAD OCHRP1
	DCA OCHRP2
	JMP I OSETUP

OOPNCW, 0
OFLNM, 0;0;0
OOPNEX, 0

OOPNP1, 0
OOPNP2, 0
OOPNI1, 0

THISFL,	.-.
	DCA .
	JMP I THISFL

RETFLD,	.-.
	CLA
	RDF
	TAD (CDF CIF 0
	JMP I RETFLD


	XLIST 0
	PAGE	/END OF PS/8 I/O MACROS

$$$$$$$$