OBJNAM BASE.LIT ; Created 22-Nov-84, Last modified 3-Mar-85
; by Irv Bromberg, Medic/OS Consultants
; 78 Wildginger Way, Toronto, Ontario, CANADA M3H 5X1
VEDIT=11.
VMINOR=2
VMAJOR=3
VSUB=0
IF EQ,1
Syntax: BASE O for octal
BASE D for decimal
BASE H for hexadecimal
BASE <return> shows current base
For decimal mode to work the OCVT patch must have been installed during
bootup, using the OCTPCH command near the beginning of AMOSL.INI file.
ENDC
SEARCH SYS
SEARCH SYSSYM
JCB =A0
Buffer =A2
Mode =D0
Number =D1
J.DEC=^O10000
Header: PHDR -1,0,PH$REE!PH$REU
; check if OCVT patch active, warn user if it has not been installed
MOV JOBCUR,JCB ; save existing OCT/DEC/HEX mode bits
BYP ; OCVT is active, check for Base code
LIN
BEQ ShowBase
CMPB @Buffer,#'O
JNE TryDec
TYPE <Octal>
ANDW #^C<J.DEC!J.HEX>,JOBTYP(JCB)
JMP Done
ChkPCH: PUSH Buffer ; save pointer to input line
PUSHW JOBTYP(JCB)
ORW #<J.DEC!J.HEX>,JOBTYP(JCB) ; set DEC mode
PUSHW ; get some workspace
MOV SP,Buffer
MOV #11.,Number ; output the number 11 - if DEC patch
OCVT 0,OT$MEM ; not active result will be "B"
POPW Number
POPW JOBTYP(JCB) ; restore original OCT/DEC/HEX mode
POP Buffer
CMPW Number,#<'1_8.+'1> ; did we get "11" ?
RTN
ShowBase:MOVW JOBTYP(JCB),Mode
TYPE <Current OCVT base is >
ANDW #J.DEC!J.HEX,Mode ; select relevant bits
BEQ Octal
CMPW Mode,#J.HEX ; is it hex only?
BEQ Hex
Dec: TYPECR <Decimal>
EXIT
Hex: TYPECR <Hexadecimal>
EXIT
Octal: TYPECR <Octal>
CALL ChkPCH
BEQ Exit
TYPE <%WARNING -- >
NotIn: TYPECR <OCVT patch has not been installed>
Exit: EXIT
TryDec: CMPB @Buffer,#'D
BNE TryHex
CALL ChkPCH
BEQ 10$
TYPE <?>
BR NotIn
10$: TYPE <Decimal>
ORW #<J.HEX!J.DEC>,JOBTYP(JCB)
BR Done
TryHex: CMPB @Buffer,#'H
BEQ SetHex
TYPECR <?Illegal base code: O=Octal D=Decimal H=Hexadecimal>
EXIT
SetHex: ANDW #^C<J.DEC>,JOBTYP(JCB)
ORW #J.HEX,JOBTYP(JCB)
TYPE <Hexadecimal>
Done: TYPECR < mode set>
EXIT
END