1 REM Ins{nd av Bengt Holgersson <559>    1986-05-11 20.25.07

        ORG  0FA00H      ;DOSBUF 5

TALIN:  LD   HL,0        ;NOLLST[LL RESULTATREGISTER
        PUSH DE
LOOP0:  CALL GETCHR      ;LETA UPP SLUTET P] RADEN
        CP   13
        INC  DE
        JR   NZ,LOOP0
        DEC  DE          ;H[MTA SISTA TECKNET
LOOP1:  DEC  DE
        LD   A,(DE)
        CP   ' '
        JR   Z,LOOP1
        CALL GETCHR
        POP  DE
        CP   'B'
        JR   Z,BIN
        CP   'O'
        JR   Z,OCT
        CP   'Q'
        JR   Z,OCT
        CP   'H'
        JP   Z,HEX
        JR   DECI

GETCH1: INC  DE
GETCHR: LD   A,(DE)
        CP   ' '
        JR   Z,GETCH1
        CP   '`'
        RET  C
        AND  '_'         ;OMVANDLA TILL VERSAL
        RET

BIN:    CALL GETCHR
        CALL CHECK
        JR   NC,ENDBIN
        CP   '2'
        JR   NC,ENDBIN
        SUB  '0'
        LD   C,A
        LD   B,0
        CALL SLHL        ;HL=HL*2
        CALL ADDBC       ;HL=HL+BC
        INC  DE
        JR   BIN

ENDBIN: CP   'B'
        JP   ENDTYP

OCT:    CALL GETCHR
        CALL CHECK
        JR   NC,ENDOCT
        CP   '8'
        JR   NC,ENDOCT
        SUB  '0'
        LD   C,A
        LD   B,3         ;HL=HL*8
LOOP2:  CALL SLHL
        DJNZ LOOP2
        CALL ADDBC       ;HL=HL+BC
        INC  DE
        JR   OCT

ENDOCT: CP   'O'
        JP   Z,ENDTYP
        CP   'Q'
        JP   ENDTYP

DECI:   CALL GETCHR
        CP   13
        JP   Z,ERR30     ;TOM RAD !
        JR   DECI2

DECI1:  CALL GETCHR
DECI2:  CALL CHECK
        JR   NC,ENDDEC
        CP   ':'
        JR   NC,ENDDEC
        SUB  '0'
        LD   C,A
        LD   B,0
        PUSH BC
        LD   B,H         ;HL=HL*10
        LD   C,L
        CALL SLHL
        CALL SLHL
        CALL ADDBC
        CALL SLHL
        POP  BC
        CALL ADDBC       ;HL=HL+BC
        INC  DE
        JR   DECI1

ENDDEC: CP   'D'
        JR   Z,ENDTYP
        JR   ENDCR

HEX:    CALL GETCHR
        CALL CHECK
        JR   NC,ENDHEX
        CP   'G'
        JR   NC,ENDHEX
        SUB  '0'
        CP   00AH
        JR   C,NUM
        SUB  007H
NUM:    LD   C,A
        LD   B,4         ;HL=HL*16
LOOP3   CALL SLHL
        DJNZ LOOP3
        CALL ADDBC       ;HL=HL+BC
        INC  DE
        JR   HEX

ENDHEX: CP   'H'
        JR   ENDTYP

CHECK:  CP   '0'
        JR   C,CLRCY
        CP   '9'+1
        RET  C
        CP   'A'
        JR   C,CLRCY
        CP   'F'+1
        RET  C
CLRCY:  AND  A
        RET

SLHL:   ADD  HL,HL
        RET  NC
        JR   ERR7

ADDBC:  ADD  HL,BC
        RET  NC
        JR   ERR7

ENDTYP: JR   NZ,ERR12
        CALL GETCH1
ENDCR:  CP   13
        JR   NZ,ERR12
        RET

ERR12:  RST  10H
        DEFB 12+128

ERR7:   RST  10H
        DEFB 7+128

ERR30:  RST  10H
        DEFB 30+128

        END
