Compucolor.org – Virtual Media

Listing of file='PROCES.MAC;05' on disk='vmedia/text_formatter-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	PROCES - PROCESS A LINE OF TEXT
;

	EXTRN	ERROR,MACRO,NXTLIN
	EXTRN	CMND,CWS,FILL,LINBUF
	EXTRN	MACADR,MACSUB,MACWRD

	ENTRY	PROCES

	PUBLIC	CMND

PROCES:	LXI	H,LINBUF
	MOV	A,M
	CPI	CMND
	JZ	INTERP
;
;	INSERT TEXT INTO PAGE BUFFER
;
	LDA	FILL
	ORA	A
	CZ	NXTLIN

	RET
;
;	INTERPRET COMMANDS/MACROS
;
INTERP:	INX	H
	MOV	A,M
	CPI	'*'
	JZ	CM
	CALL	UPPER
	CALL	LETTER


	INX	H
	MOV	C,M
	INX	H
	PUSH	H
	PUSH	B
	LDA	MACSUB
	ORA	A
	JZ	NATIVE
	LXI	D,MACWRD
	LXI	H,MACADR
	CALL	LOOKUP
	MOV	A,E
	ORA	D
	JZ	NATIVE
	CALL	MACRO

NATIVE:	POP	B
	LXI	D,CMDWRD
	LXI	H,CMDADR
	CALL	LOOKUP
	MOV	A,E
	ORA	D
	JZ	COMERR
	POP	H
	XCHG
	PCHL

	RET

COMERR:	POP	H
	DCX	H
	DCX	H
	DCX	H
	MVI	A,1
	CALL	ERROR
	RET

@CM:	RET		;IGNORE COMMENTS

NXTCMD:	LDA	CWS
NXT10:	CMP	M
	INX	H
	JNZ	NXT10
	RET

CMDWRD:
	DB	'AD'	;ADJUST
	DB	'AP'	;APPEND FILE

	DB	'BD'	;BOLD
	DB	'BI'	;BOLD ITALIC
	DB	'BM'	;BOTTOM MARGIN
	DB	'BP'	;BEGIN PAGE
	DB	'BR'	;BREAK
	DB	'BS'	;BACKSPACE
	DB	'BT'	;BOTTOM TITLE

	DB	'CE'	;CENTRE
	DB	'CM'	;COMMENT
	DB	'CO'	;CONCATENATE
	DB	'CP'	;CONDITIONAL PAGE
	DB	'CR'	;CONTROL WORD REPLACEMENT
	DB	'CW'	;CONTROL WORD SEPARATOR

	DB	'DM'	;DEFINE MACRO

	DB	'EB'	;EVEN BOTTOM TITLE
	DB	'EM'	;EMPTY PAGE SUPPRESS
	DB	'EP'	;EVEN PAGE
	DB	'ER'	;ERROR
	DB	'ET'	;EVEN TOP TITLE
	DB	'EX'	;EXECUTE (FCS COMMAND)

	DB	'FI'	;FILL
	DB	'FM'	;FOOTING MARGIN
	DB	'FO'	;FORMAT
	DB	'FS'	;FOOTING SPACE
	DB	'FT'	;FOOTER

	DB	'HE'	;HEADER
	DB	'HM'	;HEADING MARGIN
	DB	'HS'	;HEADING SPACE

	DB	'IL'	;INDENT LINE
	DB	'IM'	;IMBED
	DB	'IN'	;INDENT

	DB	'JU'	;JUSTIFY

	DB	'LE'	;LEADING BLANKS
	DB	'LI'	;LITERAL
	DB	'LL'	;LINE LENGTH
	DB	'LN'	;LINE NUMBER
	DB	'LS'	;LINE SPACING

	DB	'MA'	;MARGINS
	DB	'MS'	;MACRO SUBSTITUTION

	DB	'NC'	;NO CONCATENATE
	DB	'NE'	;NEED
	DB	'NF'	;NO FILL
	DB	'NJ'	;NO JUSTIFY

	DB	'OB'	;ODD BOTTOM TITLE
	DB	'OP'	;ODD PAGE
	DB	'OT'	;ODD TOP TITLE

	DB	'PA'	;PAGE
	DB	'PI'	;PARAGRAPH INDENT
	DB	'PL'	;PAGE LENGTH
	DB	'PN'	;PAGE NUMBERING
	DB	'PP'	;PARAGRAPH
	DB	'PR'	;PRINT (ON CRT)
	DB	'PS'	;PAGE SYMBOL

	DB	'RD'	;READ FROM TERMINAL
	DB	'RE'	;RESTORE STATUS

	DB	'SA'	;SAVE STATUS
	DB	'SI'	;SIGNAL
	DB	'SK'	;SKIP
	DB	'SP'	;SPACE
	DB	'SY'	;SYSTEM (EXECUTE FCS COMMAND)

	DB	'TB'	;TABS
	DB	'TE'	;TERMINAL INPUT
	DB	'TM'	;TOP MARGIN
	DB	'TT'	;TOP TITLE
	DB	'TY'	;TYPE (ON CRT)

	DB	'UC'	;UPPER CASE
	DB	'UL'	;UNDERLINE
	DB	'UP'	;UPPER CASE
	DB	'US'	;UNDERSCORE

	DB	'WD'	;WIDOW
	DB	'WT'	;WAIT

;
;	COMMAND ADDRESS TABLE - ALL ROUTINES ARE EXTERNAL
;

CMDADR:
	DW	@AD##
	DW	@AP##

	DW	@BD##
	DW	@BI##
	DW	@BM##
	DW	@PA##	;.BP = .PA
	DW	@BR##
	DW	@BS##
	DW	@BT##

	DW	@CE##
	DW	@CM	;COMMENT IS INTERNAL
	DW	@CO##
	DW	@CP##
	DW	@CR##
	DW	@CW##

	DW	@DM##

	DW	@EB##
	DW	@EM##
	DW	@EP##
	DW	@ER##
	DW	@ET##
	DW	@SY##	;.EX = .SY

	DW	@CO##	;.FI = .CO
	DW	@FM##
	DW	@FO##
	DW	@FS##
	DW	@BT##	;.FT = .BT

	DW	@TT##	;.HE = .TT
	DW	@HM##
	DW	@HS##

	DW	@IL##
	DW	@IM##
	DW	@IN##

	DW	@JU##

	DW	@LE##
	DW	@LI##
	DW	@LL##
	DW	@LN##
	DW	@LS##

	DW	@MA##
	DW	@MS##

	DW	@CONO##	;.NC = .CO NO
	DW	@CP##	;.NE = .CP
	DW	@FONO##	;.NF = .FO NO
	DW	@JUNO##	;.NJ = .JU NO

	DW	@OB##
	DW	@OP##
	DW	@OT##

	DW	@PA##
	DW	@PI##
	DW	@PL##
	DW	@PN##
	DW	@PP##
	DW	@TY##	;.PR = .TY
	DW	@PS##

	DW	@RD##
	DW	@RE##

	DW	@SA##
	DW	@SI##
	DW	@SK##
	DW	@SP##
	DW	@SY##

	DW	@TB##
	DW	@TE##
	DW	@TM##
	DW	@TT##
	DW	@TY##

	DW	@UC##
	DW	@US##	;.UL = .US
	DW	@UP##
	DW	@US##

	DW	@WD##
	DW	@WT##

	END