;*; Updated on 24-Aug-1995 at 2:45 AM by James A. Jarboe I V; edit time: 2:21:39
;*; Created on 23-Aug-1995 at 1:52 PM by James A. Jarboe I V; edit time: 0:14:16
;*************************** AMUS Program Label ******************************
; Filename: QTYPE.LIT Date: 08/24/1995
; Category: MUTIL Hash Code: 144-030-734-275 Version: 1.0(101)
; Initials: GR/AM Name: JAMES A. JARBOE IV
; Company: JAJIV Telephone #: 7174761906
; Related Files:
; Min. Op. Sys.: 1.x Expertise Level: BEG
; Special:
; Description: Does low and high intensity text display for .CMD and .DO
; files without having to use XY=11, XY=12 and multiple :< > command file
; text statements. Respects all .DO file $?? values and can be used in
; place of standard :< command file text > characters. Accepts multiple
; lines just like the :< > does. The "_" character is the highlight toggle
; character within the text.
;***************************************************************************
; *
;QTYPE - Outputs low & high intensity comments in command & do files. *
; *
;***************************************************************************
;* Copyright (c) 1995 - James A. Jarboe IV *
;* Unpublished - All rights reserved. *
;***************************************************************************
;
; Usage:
; QTYPE :< _High intensity_ Low intensity _text_ output. >
;
; Just as text output comments are used in .CMD and .DO files, QTYPE can
; be used to create text output comments that contain high and low intensity
; terminal output. QTYPE will always start outputing comments in low
; intensity (-1,11). The toggle character "_" will turn on high intensity
; (-1,12) on if output is currently in low intensity or will turn low
; intensity on (-1,11) if output is currently in high intensity.
; The commented text section must begin with ":<" just as .CMD and .DO
; files start out text output. The text output must also terminate with
; ">" just as .CMD and .DO files terminate the text output.
; QTYPE is also respects all the "$" special variables that .DO files
; are capable of using.
; The main purpose of QTYPE is to eliminate the need for (example)
;
; XY=11
; :< This is low >
; XY=12
; :<this is high
; >
; XY=11
; :< and so on>
;
; With QTYPE you can:
;
; QTYPE :< This is low _this is high_
; and _so_ on ....._until you
; want_ to _end_ the _text_ output.
; it is now _$TM_ on _$TW_._
; >
;
; Also in .DO files:
;
;**************************************************
; :S
; QTYPE :< It is _$TM_.
; You are _$NU_ on job _$NJ_.
; Your terminal is _$NT_ using driver _$ND_.
; The _OS_ is _$NS_ Version _$SV_.
;
; > ; terminator character.
;**************************************************
;
; Quote of the day:
; - If the comments and the code don't match, they are probably both wrong.
;
; Edit history.
;
; [100] 23-Aug-1995 by JAJIV
; - Designed and implemented because I was tired of XY=??
; in .CMD and .DO files for text output.
;
; [101] 24-Aug-1995 by JAJIV
; - Ok got carried away and added:
; /H=char to change highlight char.
; - Added following features for display.
; % = REVERSE
; ~ = BLINK
; ^ = UNDERLINE
; - Added switches for each of the above
; /R=char
; /B=char
; /U=char
; /O to turn screen off before outputting test and on when finished.
; /C to clear screen before processing.
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
PAGE
;***************************************************************************
; *
; V E R S I O N *
; *
;***************************************************************************
;
VMAJOR = 1
VMINOR = 0
VSUB = 0
VEDIT = 101. ; 24-Aug-1995
VWHO = 0
PAGE
;***************************************************************************
; *
; M A C R O ' S *
; *
;***************************************************************************
;
; Output internal text using toggle text.
;
DEFINE HTYPE TEXT
MOVB #$TOGGLE, QT.HIL(A5)
CLR D3
CALL FLIP.IT
LEA A2, 10$$
CALL HTYPE
BR 20$$
10$$: ASCIZ /TEXT/
EVEN
20$$:
ENDM
PAGE
;***************************************************************************
; *
; C O N S T A N T V A L U E S *
; *
;***************************************************************************
;
; Constant values.
;
$LF = 10. ; The linefeed character.
$COLON = 58. ; The : character.
$START = 60. ; The < character.
$TERM = 62. ; The > character.
$TOGGLE = 95. ; The _ character.
$REV = 37. ; The % character.
$BLINK = 126. ; The ~ character.
$UND = 94. ; The ^ character.
PAGE
;***************************************************************************
; *
; I M P U R E A R E A *
; *
;***************************************************************************
;
OFINI
OFDEF QT.FLG, 4 ; Flags.
QT$OFF = 1 ; Turn screen off then on.
QT$CLR = 2 ; Clear screen first.
OFDEF QT.HIL, 1 ; Highlight toggle character value.
OFDEF QM.HIL, 1 ; Current highlight mode.
OFDEF QT.REV, 1 ; Reverse toggle character value.
OFDEF QM.REV, 1 ; Current reverse mode.
OFDEF QT.BLN, 1 ; Blink toggle character value.
OFDEF QM.BLN, 1 ; Current blink mode.
OFDEF QT.UND, 1 ; Underline toggle character value.
OFDEF QM.UND, 1 ; Current underline mode.
OFSIZ S..IMP ; Size of impure area.
;***************************************************************************
; *
; Q T Y P E *
; *
;***************************************************************************
;
; Throughout:
;
; A0 = Indexes JCB.
; D0 = Characters processed.
; D3 = Intensity status.
; D4 = Cmd/Do file Status
;
QTYP: PHDR -1,0,PH$REE!PH$REU!PH$ILC ; input lower case.
GETIMP S..IMP, A5 ; Get impure area.
BYP ; Bypass leading junk.
LIN ; End of line?
JEQ HELP.EM ; Yes..
CALL CHECK.SWITCHES ; Check for switches.
BYP
CMPB @A2, #$COLON ; Preceded by colon.
JNE QTYPE.START.ERROR ; Tell em error.
CMPB 1(A2), #$START ; Preceded by char.
BNE 10$ ; No..let em by anyways.
INC A2 ; Bump past ":".
10$: INC A2 ; Bump pointer.
CLR D3 ; Preclear toggle flag.
CLR D4 ; Preclear JOBCMS save status flags.
15$: JOBIDX A0 ; Index this job.
TSTW JOBCMZ(A0) ; In a command file?
BEQ 20$ ; No..
MOVW JOBCMS(A0), D4 ; Save jobcms status flag.
BCLR #<C%SIL>, JOBCMS(A0) ; And make sure silent is off.
20$: MOV QT.FLG(A5), D7 ; Get flags.
AND #QT$OFF, D7 ; Screen off and on switch?
BEQ 25$ ; No..
MOVW #<-1_8.+36.>, D1 ; Set screen off
TCRT
25$: MOV QT.FLG(A5), D7 ; Get flags.
AND #QT$CLR, D7 ; Clear screen first?
BEQ 28$ ; No..
MOVW #<-1_8.+0>, D1 ; Set clear screen.
TCRT ; Do it.
28$: CALL FLIP.IT ; Preset low intensity.
; This processes the QTYPE command line as a .CMD/.DO file has already
; consumed this much.
;
30$: TSTB @A2 ; End of buffer? just in case.
JEQ QTYPE.FINISH ; Yes..exit.
CALL DO.CHAR ; Do character.
JNE QTYPE.FINISH ; Must be finished.
CMPB D1, #$LF ; Was last char a LF?
BNE 30$ ; No..try again.
; Here we process other lines of data after the command line prompt
; from a .CMD file or a .DO file until the > terminator character or the
; end of the cmd/do file.
;
JOBIDX A0 ; Index the job.
TSTW JOBCMZ(A0) ; In command file?
JEQ QTYPE.FINISH ; No..never mind.
MOV JOBBAS(A0), A2 ; Get job base address.
ADD JOBSIZ(A0), A2 ; Get size of memory.
MOV A2, A1 ; Save end of memory.
CLR D6 ; Preclear.
MOVW JOBCMZ(A0), D6 ; Get size of command file.
SUB D6, A2 ; Offset to remaining cmd file info.
CLR D0 ; Preclear counter.
40$: CMP A2, A1 ; At or past job memory?
BHIS 90$ ; Yes..must have forgot > terminator.
TSTB @A2 ; Any characters?
BEQ 90$ ; No..quit.
CALL DO.CHAR ; Do character.
BEQ 40$ ; Try for another.
90$: CLR D6 ; Preclear
MOVW JOBCMZ(A0), D6 ; Size of cmd/do file. Just in case.
CMP D0, D6 ; Size of cmd/do => chars processed?
BLOS 99$ ; Yes..all ok.
MOV D6, D0 ; Nope..set max JOBCMZ size.
99$: SUBW D0, JOBCMZ(A0) ; Offset Cmd/do file size by the
; number of chars processed.
;;; BR QTYPE.FINISH ; And finish up.
;*****************
; QTYPE.FINISH: *
;*****************
; Finished
; Note - We do not automatically exit with high intensity set
; just in case other standard cmd/do file text output processing
; is to occur after QTYPE is used and the user wants it in low
; intensity or for whatever purpose. To ensure that high intensity
; is on after processing QTYPE text make sure that the correct.
; toggle situation is at hand. (Example:)
;
; high low high low high
; v v v v v
; QTYPE :<_Start High_, then low _and_ exit high_> ; Exits high.
; QTYPE :<_Start High_, then low _and_ exit low> ; Exits low.
; ^ ^ ^ ^
; high low high low
;
QTYPE.FINISH:
MOV QT.FLG(A5), D7 ; Get flags.
AND #QT$OFF, D7 ; Turn screen off & on?
BEQ 10$ ; No..
MOVW #<-1_8.+37.>, D1
TCRT
10$: ANDW #C.SIL, D4 ; Was job in CMD/DO and silent set?
BEQ 99$ ; No..never mind.
JOBIDX A0 ; Yes..index job.
BSET #C%SIL, JOBCMS(A0) ; And turn silent back on.
99$: EXIT
;*********************
; QTYPE.START.ERROR *
;*********************
; Start up error.
;
QTYPE.START.ERROR:
CRLF
HTYPE <?_Must have_ leading _:>
MOVB #$START, D1
TTY
HTYPE < in _QTYPE_ command._>
CRLF
JMP QTYPE.FINISH
PAGE
;*********************+
; DO.CHAR *
;*********************+
; Processes a character at @A2 and outputs it or checks for toggle status.
;
;
; Incoming/dependencies:
;
; A2 => Indexes current input buffer location or
; or in memory command or do file text location.
; D0 =: Current characters processed count.
; D3 =: Current toggle status.
;
; Outgoing/Side effects:
;
; D0 =: Bump character count.
; D1 =: Current character from buffer or command/do file.
; A2 -> Indexes new buffer location.
;
; Z-bit SET if processing was all ok. (BEQ)
; Z-bit CLEAR if terminator character found. (BNE)
;
; D6, D7 are destroyed.
;
DO.CHAR:
MOV #-1, D6 ; Preset error condition.
MOVB (A2)+, D1 ; Yes..get the character.
INC D0 ; Bump char counter.
CMPB D1, #$TERM ; Is this a terminator?
BEQ 99$ ; Yes..then we are finished.
CMPB D1, QT.HIL(A5) ; Is this a toggle character?
BNE 10$ ; No..
CALL FLIP.IT ; Yes..flip insensity.
BR 40$ ; Finish routine.
10$: CMPB D1, QT.REV(A5) ; Is this reverse?
BNE 12$
CALL DO.REVERSE
BR 40$
12$: CMPB D1, QT.BLN(A5)
BNE 15$
CALL DO.BLINK
BR 40$
15$: CMPB D1, QT.UND(A5)
BNE 30$
CALL DO.UNDERLINE
BR 40$
30$: TTY ; Output character.
40$: MOV #0, D6 ; Set ok
99$: TST D6 ; Test condtion.
RTN ; Return to caller.
PAGE
;*********************+
; FLIP.IT *
;*********************+
; Flips terminal intensity from low to high or high to low.
;
; Incoming/dependencies:
;
; D3 =: Current intensity flag.
; 0 = currently high
; -1 = currently low.
;
; Outgoing/Side effects:
;
; D7 is destroyed.
;
; All other standard (A0-A5,D0-D5) registers are preserved.
;
FLIP.IT:
PUSH D1 ; Save character.
MOVW #<-1_8.+12.>, D1 ; Preset high intensity.
TSTB D3 ; In high intensity mode?
BMI 10$ ; No..must be low.
MOVB #11., D1 ; Yes..set low intensity.
10$: TCRT ; Toggle intensity.
COMB D3 ; And toggle flag.
POP D1 ; Restore character.
RTN ; Return to caller.
;*************
; DO.TOGGLE *
;*************
; Processes toggle switching for all status.
;
; Incoming:
; D1 = byte = attribute on value.
; D2 = current status
; Outgoing:
; D2 = toggled value to store.
;
DO.TOGGLE:
ORW #<-1_8.>, D1
TSTB D2 ; Is it on?
BEQ 10$ ; No..
ADDB #1, D1 ; Bump to off.
10$: TCRT ; Output it.
COMB D2 ; Toggle value.
RTN
;**************
; DO.REVERSE *
;**************
; Processes toggle value for Reverse status.
;
DO.REVERSE:
PUSH D1 ; Save d1
MOVB QM.REV(A5), D2 ; Set reverse toggle.
MOVB #32., D1 ; Set on value.
CALL DO.TOGGLE ; Do it.
MOVB D2, QM.REV(A5) ; Reset new condition.
POP D1 ; Restore d1
RTN ; Return to caller.
;************
; DO.BLINK *
;************
; Processes toggle value for Blink status.
;
DO.BLINK:
PUSH D1 ; Save d1
MOVB QM.BLN(A5), D2 ; Set Blink toggle.
MOVB #21., D1 ; Set on value.
CALL DO.TOGGLE ; Do it.
MOVB D2, QM.BLN(A5) ; Reset new condition.
POP D1 ; Restore d1
RTN ; Return to caller.
;****************
; DO.UNDERLINE *
;****************
; Processes toggle value for Underline status.
;
DO.UNDERLINE:
PUSH D1 ; Save d1
MOVB QM.UND(A5), D2 ; Set underline toggle.
MOVB #30., D1 ; Set on value.
CALL DO.TOGGLE ; Do it.
MOVB D2, QM.UND(A5) ; Reset new condition.
POP D1 ; Restore d1
RTN ; Return to caller.
;******************
; CHECK.SWITCHES *
;******************
; Process command line switches.
;
CHECK.SWITCHES:
10$: BYP ; Bypass junk.
LIN ; End of line?
BEQ 99$ ; Yes..finito.
CMPB @A2, #'/ ; Switch option?
BNE 99$ ; Nope..finito.
INC A2 ; Yes..bump pointer.
BYP ; Bypass junk.
MOVB @A2, D1 ; Get character.
UCS D1 ; Upper case it.
MOVB D1, @A2 ; Put it back.
LEA A6, SWITCH ; Index switches.
30$: TSTB @A6 ; End of table?
BMI 99$ ; Yes..must be a mistake.
CMMB @A6, @A2 ; Do we match table?
BEQ 50$ ; Yes..process it.
ADDW #4, A6 ; No..bump to next entry.
BR 30$ ; And try again.
50$: ADD #2, A6 ; Offset to correct address.
ADDW @A6, A6 ; Add offset.
CALL @A6 ; Call routine.
BNE 99$ ; Opps...error.
BR 10$ ; Ok..try for more.
99$: RTN ; Return to caller.
; Errors will be processed as text.
;************
; Highlight switch routine.
;
H.SWITCH:
CALL BYPASS ; Bypass to entry.
BNE 99$ ; Opps..mistake.
MOVB (A2)+,QT.HIL(A5) ; Set alternate highlight character.
LCC #PS.Z ; Set ok.
99$: RTN ; Return to caller.
;************
; R.SWITCH *
;************
; Reverse switch routine.
;
R.SWITCH:
CALL BYPASS ; Bypass to entry.
BNE 99$ ; Opps..mistake.
MOVB (A2)+, QT.REV(A5) ; Set alternate reverse character.
LCC #PS.Z ; Set ok.
99$: RTN ; Return to caller.
;************
; B.SWITCH *
;************
; Blink switch routine.
;
B.SWITCH:
CALL BYPASS ; Bypass to character.
BNE 99$ ; Opps..mistake.
MOVB (A2)+, QT.BLN(A5) ; Set alternate blink character.
LCC #PS.Z ; Set ok.
99$: RTN ; Return to caller.
;************
; U.SWITCH *
;************
; Underline switch routine.
;
U.SWITCH:
CALL BYPASS ; Bypass to character.
BNE 99$ ; Opps..mistake.
MOVB (A2)+, QT.UND(A5) ; Set alternate underline character.
LCC #PS.Z ; Set ok.
99$: RTN ; Return to caller.
;************
; O.SWITCH *
;************
; Screen off/on switch routine.
;
O.SWITCH:
INC A2 ; Bump pointer.
OR #QT$OFF, QT.FLG(A5) ; Set on/off flag.
LCC #PS.Z ; Set ok.
RTN ; Return to caller.
;************
; C.SWITCH *
;************
; Clear screen switch routine.
;
C.SWITCH:
INC A2 ; Bump pointer.
OR #QT$CLR, QT.FLG(A5) ; Set clear screen flag.
LCC #PS.Z ; Set ok.
RTN ; Return to caller.
;************
; BYPASS *
;************
; Bypass = sign and/or get to alternate character.
;
BYPASS:
MOV #1, D6 ; Preset error.
LIN ; End of line?
BEQ 99$ ; Yes..error.
INC A2 ; Bump pointer.
BYP ; Bypass junk.
LIN ; End of line?
BEQ 99$ ; Yes..error.
CMPB @A2, #'= ; At an = sign?
BNE 10$ ; Nope..must have forgotten it.
INC A2 ; Yes..bump pointer.
10$: BYP ; Bypass junk.
LIN ; End of line?
BEQ 99$ ; Yes..error.
CLR D6 ; No..set ok.
99$: TST D6 ; Test condition.
RTN ; Return to caller.
;*********
; HTYPE *
;*********
; Highlight text process for terminal output for help and error messages.
; Called from HTYPE macro.
;
HTYPE:
TSTB @A2 ; End of text?
BEQ 99$ ; Yes..exit routine.
CALL DO.CHAR ; Do character processing.
BEQ HTYPE ; And try again.
99$: RTN ; Return to caller.
;***********
; HELP.EM *
;***********
; Provide help for the innocent.
;
HELP.EM:
CRLF
HTYPE <Usage: _QTYPE_{_>
MOVB #'/, D1
TTY
HTYPE <_switches_}_ :>
MOVB #$START, D1
TTY
TYPE < Output >
MOVB #$TOGGLE, D1
TTY
TYPE <High intensity>
MOVB #$TOGGLE, D1
TTY
TYPE <, low intensity >
MOVB #$TOGGLE, D1
TTY
TYPE <text>
MOVB #$TOGGLE, D1
TTY
TYPE <.>
MOVB #$TOGGLE, D1
TTY
TYPE <>
MOVB #$TERM, D1
TTY
CRLF
CRLF
HTYPE < Use in place of the standard _:>
MOVB #$START, D1
TTY
HTYPE < text output command in>
CRLF
HTYPE < _.CMD_ or _.DO_ files. _Text_ can consist of _multiple_>
HTYPE < lines just as>
CRLF
HTYPE < standard _.CMD_ or _.DO_ files process text with the _>
MOVB #$TERM, D1
TTY
HTYPE < character as>
CRLF
HTYPE < the text terminator.>
CRLF
CRLF
HTYPE <Where:>
CRLF
TYPE < >
MOVB #'/, D1
TTY
HTYPE <_H_=_char_ Change default HIGHLIGHT toggle charcter to _char_.>
CRLF
TYPE < >
MOVB #'/, D1
TTY
HTYPE <_B_=_char_ Change default BLINK toggle charcter to _char_.>
CRLF
TYPE < >
MOVB #'/, D1
TTY
HTYPE <_R_=_char_ Change default REVERSE toggle charcter to _char_.>
CRLF
TYPE < >
MOVB #'/, D1
TTY
HTYPE <_U_=_char_ Change default UNDERLINE toggle charcter to _char_.>
CRLF
TYPE < >
MOVB #'/, D1
TTY
HTYPE <_O_ Turn Screen _OFF_ before processing and _ON_ when finished.>
CRLF
TYPE < >
MOVB #'/, D1
TTY
HTYPE <_C_ Clear screen before processing.>
CRLF
HTYPE < _:>
MOVB #$START, D1
TTY
HTYPE < = the _lead-in_ characters for _text_ output.>
CRLF
HTYPE < _>
MOVB #$TOGGLE, D1
TTY
HTYPE < = the toggle character to turn crt intensity _on_ or _off_.>
CRLF
HTYPE < _>
MOVB #$REV, D1
TTY
HTYPE < = the toggle character to turn REVERSE _on_ or _off_.>
CRLF
HTYPE < _>
MOVB #$UND, D1
TTY
HTYPE < = the toggle character to turn UNDERLINE _on_ or _off_.>
CRLF
HTYPE < _>
MOVB #$BLINK, D1
TTY
HTYPE < = the toggle character to turn BLINK _on_ or _off_.>
CRLF
HTYPE < _>
MOVB #$TERM, D1
TTY
HTYPE < = the _terminator_ character for _text_ output._>
CRLF