; part of the GUI for BGE

;+-------------------------------------------------------------+
;:                        GET_NUM                              :
;:-------------------------------------------------------------+
;:       Поместить по адресу в DE ASCII-эквивалент числа       :
;: В C - код печати:                                           :
;:                   0 - 3-х значное число в A                 :
;:                   1 - 5-ти значное число в HL               :
;:                   2 - 8-ми значное число в A+HL             :
;+-------------------------------------------------------------+

GET_NUM_gui
        PUSH DE
        PUSH HL
        LD HL,WHER_N
        LD (WHERE_N),HL
        LD L,C
        LD H,0
        ADD HL,HL
        ADD HL,HL
        LD DE,PRD_TAB
        ADD HL,DE
        DEFHL1
        LD (get_num1_1),DE
        DEFHL
        LD (get_num1_2),DE
        POP HL
        POP DE
        PUSH DE
        CALL #0000
get_num1_1 EQU $-2
        POP DE
        LD HL,WHER_N
        LD BC,#0000
get_num1_2 EQU $-2
        LDIR 
        RET 

PRD_TAB
        DEFW PDEC_B,#0003
        DEFW PDEC_W,#0005
        DEFW PDEC_3B,#0008

WHERE_N DEFW WHER_N
WHER_N  DEFB "        "

;----------------------------------------;
;            LIBrary v2.0                ;
; (c) SerzhSoft, Shadrinsk, august, 1997 ;           ;
;----------------------------------------;

_NULL   EQU     0  ;используется в изменя-
;----------------------------------------;
;        print in DEC system:            ;           ;
;----------------------------------------;
PDEC_3B    ;Печать десятичного числа в AHL

        LD      DE,34464      ;DE=100000-
        LD      BC,#FF01      ;B=-1 -счет-
LP_PD31 INC     B             ;увеличиваем
        AND     A             ;сбpасываем
        SBC     HL,DE         ;уменьшаем
        SBC     A,C           ;на одну
        JR      NC,LP_PD31    ;повтоpяем
        ADD     HL,DE         ;восстанав-
        ADC     A,C           ;значение у
        PUSH    AF            ;сохpаняем
        PUSH    HL            ;впоследст-
        LD      A,B           ;количество
        CALL    PDEC_B        ;печатаем
        POP     HL            ;восстанав-
        POP     AF            ;pегистpы A,
        DEC     A             ;если оста-
        JR      NZ,PDEC_W     ;то пеpехо-
        LD      DE,5536       ;иначе -
        ADD     HL,DE         ;пpибавляем
        ADC     A,6           ;тысяч, и их
        PUSH    HL            ;-----------
        LD      HL,DECTB_W    ; Обходимый
        LD      B,#05         ;-----------
        JR      LP_PDW1+1     ;пpыжок че-
;----------------------------------------;
PDEC_B       ;Печать десятичного числа в A

        LD      L,A           ;поместили
        LD      H,#00         ; число в HL
        PUSH    HL            ;закинули
        LD      HL,DECTB_W+4  ;адрес в
        LD      B,#03         ;макс. воз-
        JR      LP_PDW1       ;переход на
;----------------------------------------;
PDEC_W      ;Печать десятичного числа в HL

        PUSH    HL            ;закинули
        LD      HL,DECTB_W    ;адрес таб-
        LD      B,#05         ;макс. воз-
LP_PDW1 XOR     A             ;обнулили
        LD      E,(HL)        ;взяли теку-
        INC     HL            ; десятки из
        LD      D,(HL)        ; и помести-
        INC     HL            ;перешли к
        EX      (SP),HL       ;адрес эл-та
LP_PDW2 INC     A             ;увеличиваем
        SBC     HL,DE         ;вычитаем
        JR      NC,LP_PDW2    ;повторяем
        ADD     HL,DE         ;HL=HL mod
        ADD     A,"0"-1       ;перевод A в
        PUSH    HL
        LD      HL,(WHERE_N)
        LD      (HL),A
        INC     HL
        LD      (WHERE_N),HL
        POP     HL            ;печать де-
        EX      (SP),HL       ;HL=адрес
        DJNZ    LP_PDW1       ;цикл по
        POP     HL            ;убрали ос-
        RET                   ;выход из
;----------------------------------------;
DECTB_W DEFW   10000,1000,100,10,1  ;Таблица

