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