Login

Subversion Repositories NedoOS

Rev

Rev 1410 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

        DEVICE ZXSPECTRUM128
        include "../_sdk/sys_h.asm"

NEDOOS=1
PRSTDIO=1

;1992, IskraSOFT corp. ╨б╨Я╨▒, ╨а╨╛╤Б╤Б╨╕╤П
;LL0000=0;$-#a7
;LL5db2=$-#f5
;LL5da8=$-#ff
;LL0010=0x10;$-#97
;LL5fc1=$-#e6
;LL5dc9=$-#de
;LL5ddf=$-#c8
;LL6091=$-#16
LL0005=5;$-#a2
;LL609c=$-#0b
LL000f=0x0f;$-#98
;LL6169=$-#3e
;LL0300=0x300;$-#a7
        if PRSTDIO
SCRHGT=25
        else
SCRHGT=24
        endif

MAXCMDSZ=COMMANDLINE_sz-1-4-4 ;not counting terminator (-4 for "cmd ")


        org PROGSTART
begin
;0x5da4=23972
       if NEDOOS
        ld sp,0xc000
       if PRSTDIO
        call initstdio
        ld a,(stdiohgt)
        ;ld (scrhgt),a
       else
        ld e,3
        OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
        ld a,(user_scr0_high) ;ok
        SETPG4000
       endif

        call keepdir

        ld hl,COMMANDLINE
        call skipword
        call skipspaces
        ld (par1addr),hl
        call skipword
       push hl
        call skipspaces
        ld (par2addr),hl
       pop hl
        ld (hl),0
       endif
        call domenu;LL5dbd
       if NEDOOS
        jr c,failquit ;CY=error
       else
        ret c ;CY=error
       endif
okquit;LL5da8
       if NEDOOS
        ld hl,0
        QUIT
failquit
        ld hl,-1
        QUIT
       else
        xor a
        ld a,#f4
        ret
       endif

LL5dac
;hl=╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕
        call LL5db2 ;run (p_com+exebat)
       if NEDOOS
        jr c,failquit ;CY=error
       else
        ret c ;CY=error
       endif
        jr okquit;LL5da8

LL5db2
;run (p_com+exebat)
;hl=╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕
       if NEDOOS
;cmd <hl>
       push hl
        call findCR
        dec hl
        ld (hl),0
;run "cmd <command to run>"
        OS_SETSYSDRV
       pop hl ;ld hl,cmdbuf
        call loadandrun ;nz=error, e=id
        jp nz,failquit
        WAITPID
        jp okquit
       else
        xor a
        ld b,#01 ;???
        ld c,#48 ;72(48):run    - = p_com(#49) + exebat(#44). (╨Т╤Л╤Е╨╛╨┤ ╤Б╨╝. exebat). ╨Я╨╡╤А╨╡╨┤╨░╤О╤В╤Б╤П ╤А╨╡╨│╨╕╤Б╤В╤А╤Л IX,B.
;73(49):p_com  - ╨Ч╨░╨┐╨╛╨╗╨╜╨╕╤В╤М  ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣  ╨▒╤Г╤Д╨╡╤А ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. HL = ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║╨╕, ╨╛╨║╨░╨╜╤З╨╕╨▓╨░╤О╤Й╨╡╨╣╤Б╤П ╨║╨╛╨┤╨╛╨╝ 13. ╨Я╤А╨╕ ╨┤╨╗╨╕╨╜╨╡ ╤Б╤В╤А╨╛╨║╨╕ ╨▒╨╛╨╗╨╡╨╡ 128 ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨╛╤И╨╕╨▒╨║╤Г (╤Д╨╗╨░╨│ C)
;68(44):exebat - ╨Ч╨░╨┐╤Г╤Б╨║  ╤Д╨░╨╣╨╗╨░ ╨┐╨╛ ╨┐╤Г╤В╨╕ ╨╕ ╨╕╨╝╨╡╨╜╨╕ ╤Д╨░╨╣╨╗╨░, ╨╜╨░╤Е╨╛╨┤╤П╤Й╨╡╨│╨╛╤Б╤П ╨▓╨╛ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╡╨╝ ╨▒╤Г╤Д╨╡╤А╨╡ ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. ╨Т╤Е╨╛╨┤: A=0:  ╤Б╤В╨░╨╜╨┤╨░╤А╤В╤А╨░╤П  ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨░  ╤В╨╕╨┐╨░ ╤Д╨░╨╣╨╗╨░, ╤В.╨╡. ╨╛╨▒╤А╨░╤Й╨╡╨╜╨╕╨╡ ╨║ ╤Д╨░╨╣╨╗╤Г S:extent.txt, A>0: DE = ╨░╨┤╤А╨╡╤Б ╨▒╤Г╤Д╨╡╤А╨░  ╤Б  ╨┐╤Г╤В╨╡╨╝  ╨╕  ╨╕╨╝╨╡╨╜╨╡╨╝  ╤В╨╡╨║╤Б╤В╨╛╨▓╨╛╨│╨╛ ╤Д╨░╨╣╨╗╨░. ╨Т╤Л╤Е╨╛╨┤: CARRY SET - ╤Б╨╡╤А╤М╨╡╨╖╨╜╨░╤П ╨╛╤И╨╕╨▒╨║╨░, ╨╕╨╜╨░╤З╨╡: Z - O.K.,  NZ  -  ╨║╨░╨║╨░╤П-╨╜╨╕╨▒╤Г╨┤╤М ╨┤╨╛╤Б╨░╨┤╨╜╨░╤П ╨╝╨╡╨╗╨╛╤З╤М
        rst #10
        ret c ;CY=error
        ld c,#41 ;65(41):fmrst  - ╨Т╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤В ╨┐╨╡╤А╨▓╨╛╨╜╨░╤З╨░╨╗╤М╨╜╨╛╨╡ ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╤Б╤А╨╡╨┤╤Л. (╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛, ╨║╨░╤В╨░╨╗╨╛╨│ ╨╕ ╤Д╨░╨╣╨╗, ╨╖╨░╨┐╨╛╨╝╨╕╨╜╨░╨╡╨╝╤Л╨╡ ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╨░╨╝╨╕ ╤А╨░╨▒╨╛╤В╨░╤О╤Й╨╕╨╝╨╕ ╤Б ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╛╨╣). ╨Т╤Л╤Е╨╛╨┤: ╤Б ╨╛╨▒╤А. ╨╛╤И╨╕╨▒╨╛╨║, ╨╕╨╜╨░╤З╨╡ ╤Б╨╛╤Е╤А╨░╨╜╤П╨╡╤В AF.
        rst #10
       endif
        ret

domenu;LL5dbd
        ld a,#01
        ld (LL5fc1),a ;1=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М exe, 0=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г?
       if NEDOOS
;╨╛╤В╨║╤А╤Л╨▓╨░╨╡╨╝ ╨╗╨╕╨▒╨╛ ╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А (╨╡╤Б╨╗╨╕ ╨╛╨╜ .mnu), ╨╗╨╕╨▒╨╛ SYSPATH/╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А (╨╡╤Б╨╗╨╕ ╨╛╨╜ .mnu), ╨╗╨╕╨▒╨╛ SYSPATH/mainmenu
       ld hl,(par1addr)
       xor a
       ld c,0xff
       cpir
       ld de,tdotmnuz+5
       ld b,5
checkdotmnu0
       dec hl
       dec de
       ld a,(de)
       cp (hl)
       jr nz,checkdotmnu_nomnu
       djnz checkdotmnu0
        ld de,(par1addr)
        OS_OPENHANDLE
        or a
        jr z,_LL5ddf
        OS_SETSYSDRV
        ld de,(par1addr)
        OS_OPENHANDLE
        or a
        jr z,_LL5ddf
checkdotmnu_nomnu
        OS_SETSYSDRV
        ld de,mainmenufilename;LL6091
        OS_OPENHANDLE
        or a
        scf
        ret nz ;error (CY)
       ld hl,(par1addr)
       ld (par2addr),hl
_LL5ddf
        ld a,b
        ld (curhandle),a
       else
;╨╛╤В╨║╤А╤Л╨▓╨░╨╡╨╝ ╨╗╨╕╨▒╨╛ ╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А, ╨╗╨╕╨▒╨╛ mainmenu, ╨╗╨╕╨▒╨╛ mainmenupath/mainmenu
        ld c,#40;64(40):oparm  - ╨Ю╤В╨║╤А╤Л╨▓╨░╨╡╤В  ╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А.  ╨Я╤Г╤В╤М  ╨║ ╤Д╨░╨╣╨╗╤Г  (╨┐╨╛╨╗╨╜╤Л╨╣ ╨╕╨╗╨╕ ╨╛╤В ╤В╨╡╨║╤Г╤Й╨╡╨│╨╛ ╨║╨░╤В╨░╨╗╨╛╨│╨░) ╨╗╨╡╨╢╨╕╤В ╨▓ ╨▒╤Г╤Д╨╡╤А╨╡ ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣  ╤Б╤В╤А╨╛╨║╨╕  ╨▓╨╝╨╡╤Б╤В╨╡ ╤Б ╨╕╨╝╨╡╨╜╨╡╨╝ ╤Д╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨╡╨│╨╛ ╨╝╨░╤Б╨║╨╛╨╣.
        rst #10
        jr c,_LL5dc9 ;error
        jr z,_LL5ddf ;file opened
_LL5dc9 ld hl,mainmenufilename;LL6091
        ld c,#25;37(25):fopen  - ╨Я╨╛╨╕╤Б╨║ ╨╕ ╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Д╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨║╨░╤В╨░╨╗╨╛╨│╨░ ╨┐╨╛ ╨╕╨╝╨╡╨╜╨╕ ╨╕ ╤В╨╕╨┐╤Г. HL - ╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П (╨╕╨╝╤П, ╤В╨╕╨┐). (╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В╤Б╤П, ╤В.╨╡. ╨╡╨│╨╛  ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М (19 ╨▒╨░╨╣╤В) ╤Б╤З╨╕╤В╤Л╨▓╨░╤О╤В╤Б╤П ╨▓ ╤Б╨╕╤Б. ╨╛╨▒╨╗╨░╤Б╤В╤М ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╨║╨░╤В╨░╨╗╨╛╨│╨░. ╨Т╤Л╤Е╨╛╨┤: ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨╛╨║  ╨╜╨╡╤В:   ╨╕ ╨╡╤Б╨╗╨╕  BIT5=0, ╤В╨╛ ╤Д╨░╨╣╨╗ ╨╛╤В╨║╤А╤Л╤В, ╨▓ A - ╤А╨╡╨│╨╕╤Б╤В╤А ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╤П ╤Д╨░╨╣╨╗╨░ (FSTAT), ╨▓ HL' - ╨░╨┤╤А╨╡╤Б 32-╨▒╨░╨╣╤В╨╛╨▓╨╛╨│╨╛ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ (FNAME) ╨╡╤Б╨╗╨╕ BIT5=1, ╤В╨╛ ╤Д╤Г╨╜╨║╤Ж╨╕╤П FOPEN ╨╛╤В╨║╤А╤Л╨╗╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣ ╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│
        rst #10
        jr nc,_LL5ddf ;file opened
        ld hl,mainmenupath;LL6088
        ld c,#42;66(42):comstr - ╨а╨░╨╖╨▒╨╕╤А╨░╨╡╤В╤Б╤П ╤Б ╤Г╨║╨░╨╖╨░╨╜╨╜╤Л╨╝ ╨┐╤Г╤В╨╡╨╝ ╨╕ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В ╨┤╨░╨╜╨╜╨╛╨╡ ╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛ ╨╕ ╨║╨░╤В╨░╨╗╨╛╨│ (╤Д╨░╨╣╨╗ ╨╜╨╡ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В!) ╨╕╨╗╨╕ ╤Б╨╜╨╕╨╝╨░╨╡╤В  ╨║╨╗╤О╤З.  ╨Т╤Е╨╛╨┤: HL = ╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. ╨Т╤Л╤Е╨╛╨┤: ╤Д╨╗╨░╨│ C: ╨╛╤И╨╕╨▒╨║╨░ ╨▓╨▓╨╛╨┤╨░/╨▓╤Л╨▓╨╛╨┤╨░ (╨▓╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤В╤Б╤П ╨┐╤А╨╡╨╢╨╜╤П╤П ╤Б╤А╨╡╨┤╨░); NC,Z:  A=0: HL'= 11-╨▒╨░╨╣╤В╨╛╨▓╤Л╨╣ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М/╤И╨░╨▒╨╗╨╛╨╜ ╤Д╨░╨╣╨╗╨░ (╨╡╤Б╨╗╨╕ ╨╕╨╝╤П/╨╝╨░╤Б╨║╨░ ╤Д╨░╨╣╨╗╨░ ╨╜╨╡ ╤Г╨║╨░╨╖╨░╨╜╨╛ ╨┐╨╛╤Б╨╗╨╡ ╨┐╤Г╤В╨╕, ╤В╨╛ ╤И╨░╨▒╨╗╨╛╨╜ ╨╕╨╖ #FF); A>0: HL'= ╨░╨┤╤А╨╡╤Б ╤Б╨╕╨╝╨▓╨╛╨╗╨░ "/" (╨╛╨▒╨╜╨░╤А╤Г╨╢╨╡╨╜ ╨║╨╗╤О╤З), A=╨┐╨╡╤А╨▓╤Л╨╣ ╤Б╨╕╨╝╨▓╨╛╨╗ ╨┐╨╛╤Б╨╗╨╡ ╨║╨╗╤О╤З╨░. NC,NZ:  ╨╕╨╗╨╕  ╨┐╤Г╤В╨╕  ╨╜╨╡╤В,  ╨╕╨╗╨╕  ╨║╨╗╤О╤З╨░ ╨╜╨╡╤В (╨┐╤Г╤Б╤В╨░╤П ╤Б╤В╤А╨╛╨║╨░), ╨╕╨╗╨╕ ╤Б╨╕╨╜╤В╨░╨║╤Б╨╕╤З╨╡╤Б╨║╨░╤П ╨╛╤И╨╕╨▒╨║╨░ ╨▓ ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╡.
        rst #10
        ret c ;error
        ld hl,mainmenufilename;LL6091
        ld c,#25;37(25):fopen  - ╨Я╨╛╨╕╤Б╨║ ╨╕ ╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Д╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨║╨░╤В╨░╨╗╨╛╨│╨░ ╨┐╨╛ ╨╕╨╝╨╡╨╜╨╕ ╨╕ ╤В╨╕╨┐╤Г. HL - ╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П (╨╕╨╝╤П, ╤В╨╕╨┐). (╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В╤Б╤П, ╤В.╨╡. ╨╡╨│╨╛  ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М (19 ╨▒╨░╨╣╤В) ╤Б╤З╨╕╤В╤Л╨▓╨░╤О╤В╤Б╤П ╨▓ ╤Б╨╕╤Б. ╨╛╨▒╨╗╨░╤Б╤В╤М ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╨║╨░╤В╨░╨╗╨╛╨│╨░. ╨Т╤Л╤Е╨╛╨┤: ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨╛╨║  ╨╜╨╡╤В:   ╨╕ ╨╡╤Б╨╗╨╕  BIT5=0, ╤В╨╛ ╤Д╨░╨╣╨╗ ╨╛╤В╨║╤А╤Л╤В, ╨▓ A - ╤А╨╡╨│╨╕╤Б╤В╤А ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╤П ╤Д╨░╨╣╨╗╨░ (FSTAT), ╨▓ HL' - ╨░╨┤╤А╨╡╤Б 32-╨▒╨░╨╣╤В╨╛╨▓╨╛╨│╨╛ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ (FNAME) ╨╡╤Б╨╗╨╕ BIT5=1, ╤В╨╛ ╤Д╤Г╨╜╨║╤Ж╨╕╤П FOPEN ╨╛╤В╨║╤А╤Л╨╗╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣ ╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│
        rst #10
        ret c ;error
_LL5ddf
       endif
;file opened
       if NEDOOS
        ld a,(curhandle)
        ld b,a
        OS_GETFILESIZE ;b=handle, out: dehl=file size
        ld a,d
        or e
        scf
        ret nz ;error (CY)
        ex de,hl
       else
        ld c,#35;53(35):bkfcb  - ╨Т╨╛╨╖╨▓╤А╨░╤В ╨░╨┤╤А╨╡╤Б╨░ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ HL'(=FNAME)
        rst #10
        exx
        push hl
        pop ix
        ld e,(ix+#0e)
        ld d,(ix+#0f)
       endif
;de=filesz
       if NEDOOS
       ld hl,menutext+128;LL623a
       add hl,de
       ret c ;error (no free mem)
       ex de,hl
       ld de,menutext;LL623a
;de=menutext, hl=filesz
       push de
       push hl
        ld a,(curhandle)
        ld b,a
       push bc
        OS_READHANDLE
       pop bc
        OS_CLOSEHANDLE
       pop hl
       pop de
        or a
        scf
        ret nz ;error (CY)
       else
        ld ix,menutext;LL623a
        push ix
        pop hl
        add hl,de ;hl=menutext+filesz?
        inc hl
        ld c,#10;16(10):g_cnfg - ╨Т╨╛╨╖╨▓╤А╨░╤В ╨▓╨╡╨║╤В╨╛╤А╨░ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕ ╤П╨┤╤А╨░. HL'- ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕ ╤П╨┤╤А╨░, ╨Р - ╨╜╨╛╨╝e╤А ╨║╨░╨╜╨░╨╗╨░ ╤Б╨╕╤Б╤В╨╡╨╝╨╜╨╛╨│╨╛ ╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨░
        rst #10
        push hl
        exx
        ld bc,LL0005
        add hl,bc ;hl=╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕ ╤П╨┤╤А╨░+5
        ld e,(hl)
        inc hl
        ld d,(hl) ;free mem???
        exd   ;hl=free mem???
        pop de
        xor a
        sbc hl,de
        ld a,#82
        ret c ;no free mem???
        exx
;ix=menutext, de=filesz
        xor a
        ld h,a
        ld l,a
        ld c,#29 ;41(29):rpart  - ╨з╤В╨╡╨╜╨╕╨╡ ╤З╨░╤Б╤В╨╕ ╤Д╨░╨╣╨╗╨░. A,HL - ╤Г╨║╨░╨╖╨░╤В╨╡╨╗╤М, IX - ╨░╨┤╤А╨╡╤Б ╨▓ ╨┐╨░╨╝╤П╤В╨╕, DE - ╨┤╨╗╨╕╨╜╨░ ╨▓ ╨▒╨░╨╣╤В╨░╤Е.
        rst #10
        ret c ;error
        push ix
        pop hl
       endif
;hl=menutext
;de=filesz
        add hl,de ;hl=menutext+filesz
        ld (hl),#0d
        inc hl
        ld (hl),#03 ;╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░
       if !NEDOOS
        ld c,#41 ;65(41):fmrst  - ╨Т╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤В ╨┐╨╡╤А╨▓╨╛╨╜╨░╤З╨░╨╗╤М╨╜╨╛╨╡ ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╤Б╤А╨╡╨┤╤Л. (╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛, ╨║╨░╤В╨░╨╗╨╛╨│ ╨╕ ╤Д╨░╨╣╨╗, ╨╖╨░╨┐╨╛╨╝╨╕╨╜╨░╨╡╨╝╤Л╨╡ ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╨░╨╝╨╕ ╤А╨░╨▒╨╛╤В╨░╤О╤Й╨╕╨╝╨╕ ╤Б ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╛╨╣). ╨Т╤Л╤Е╨╛╨┤: ╤Б ╨╛╨▒╤А. ╨╛╤И╨╕╨▒╨╛╨║, ╨╕╨╜╨░╤З╨╡ ╤Б╨╛╤Е╤А╨░╨╜╤П╨╡╤В AF
        rst #10
        ret c ;error
       endif
;file loaded
        ld e,'H';#48 ;H - ╤Б╤В╤А╨╛╨║╨╕ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        jr z,_LL5e2a ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        ld a,#01
        ld (hintspresent),a;(LL6226),a
_LL5e2a ld e,'K';#4b ;K - ╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ (╨╛╨┤╨╜╨░ ╨▓ ╤В╨╡╨║╤Б╤В╨╡) ;╨╜╨░╨┐╤А╨╕╨╝╨╡╤А: K/A1/K40/J5/C160/O21
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        call nz,interpret_keys_hl;LL5fc9 ;╨╕╨╜╤В╨╡╤А╨┐╤А╨╡╤В╨╕╤А╤Г╨╡╨╝ ╨║╨╗╤О╤З╨╕
;╨╕╤Й╨╡╨╝ ╤Б╨░╨╝╤Г╤О ╤И╨╕╤А╨╛╨║╤Г╤О ╤Б╤В╤А╨╛╨║╤Г ╤В╨╕╨┐╨░ 'A' (menuwid) ╨╕ ╨▓╤Л╤Б╨╛╤В╤Г ╨╛╨║╨╜╨░ (menuhgt):
        ld e,'A';#41
        ld d,#01
_LL5e36 call LL609e ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        jr z,_LL5e49 ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        inc d
        ld c,a
        ld a,(menuwid);(LL6232)
        cp c
        jr nc,_LL5e44
        ld a,c
_LL5e44 ld (menuwid),a;(LL6232),a
        jr _LL5e36
_LL5e49 inc d
        ld a,d
        cp #02
        ret z ;╨▓ ╨╝╨╡╨╜╤О ╨╜╨╡╤В ╨╜╨╕ ╨╛╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕
        cp SCRHGT-3;21;#15
        jr c,_LL5e54
        ld a,SCRHGT-4;20;#14
_LL5e54 ld (menuhgt),a;(LL622d),a
;╨╡╤Й╤С ╤А╨░╨╖ ╨╕╤Й╨╡╨╝ ╨▓╤Л╤Б╨╛╤В╤Г ╨╛╨║╨╜╨░???
        ld e,'A';#41
        ld d,#01
_LL5e5b call LL609e ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ret z ;╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        inc d
        dec hl
        ld a,e
        cp (hl)
        jr nz,_LL5e5b
        ld a,d
        cp SCRHGT-5;19;#13
        ret nc
;╨╕╤Й╨╡╨╝ menuwid_chrs, menux
        ld a,(menuwid);(LL6232)
       if PRSTDIO
        ld c,80-1
       else
        ld c,#21
       endif
        dec a
        cp c
        jr c,_LL5e73
        ld a,c
_LL5e73 ld (menuwid),a;(LL6232),a
       if PRSTDIO
        add a,2
       else
        ld b,a
        add a,a
        add a,b ;*3
        srl a
        srl a ;*3/4
        inc a
        inc a
        inc a ;*3/4 +3
        srl a
        add a,a ;╤З╤С╤В╨╜╨╛╨╡
       endif
        ld (menuwid_chrs),a;(LL622e),a
        ld b,a
        ld a,(menux);(LL622b)
        cp #ff
        jr nz,_LL5e96
       if PRSTDIO
        ld a,80
       else
        ld a,#20
       endif
        sub b
        srl a
        ld (menux),a;(LL622b),a
_LL5e96
       if PRSTDIO
        inc a
       else
        sla a
        sla a
        ld b,#01
        ld c,#03
        inc a
_LL5e9f cp c
        jr c,_LL5ea6
        sub c
        inc b
        jr _LL5e9f
_LL5ea6 ld a,b ;???
        ld a,(menuwid);(LL6232)
        and #07
        cp #04
        jr z,LL5eb8
        cp #05
        jr z,LL5eb8
        cp #07
        jr nz,LL5eb9
LL5eb8  inc b
LL5eb9  ld a,b
       endif
        ld (menux_chrs),a

        ld a,(hintx);(LL621d)
       if PRSTDIO
        inc a;add a,2
       else
        sla a
        sla a
        ld b,#00
        ld c,#03
        inc a
_LL5ec9 cp c
        jr c,_LL5ed0
        sub c
        inc b
        jr _LL5ec9
_LL5ed0 ld a,b
        inc a
        inc a
       endif
        ld (LL6223),a ;??? NU hinthgt_chrs?
;
        ld a,(menuy);(LL622c)
        cp #ff
        jr nz,_LL5ee9
        ld a,(menuhgt);(LL622d)
        ld b,a
        ld a,SCRHGT;#18
        sub b
        srl a
        ld (menuy),a;(LL622c),a
_LL5ee9

        ld a,(hintwid);(LL6224)
       if PRSTDIO
        add a,2
       else
        srl a
        srl a
        ld b,a
        set 7,b
        ld c,#03
        xor a
LL5ef6  add a,c
        dec b
        bit 7,b
        jr nz,LL5ef6
        inc a
        inc a
       endif
        ld (LL6220),a ;hintwid_chrs?
;
        ld a,(action);(LL6087)
        ld b,a
        bit 0,a ;1 = ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б ╤В╨╡╨╜╤М╤О
        jr z,_LL5f11
        ld a,(shadowcolor);(LL6230)
        res 7,a
        ld (shadowcolor),a;(LL6230),a
_LL5f11 xor a ;╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣
        bit 2,b ;4 = ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б 2-╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣
        jr z,_LL5f18
        ld a,#02 ;╨╛╨║╨╜╨╛ ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣
_LL5f18
        ld ix,MENU;LL622b
       if NEDOOS
       if PRSTDIO
        call prwin
       else
        call sR_WT ;╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░ (╨▒╨╡╨╖ ╤В╨╡╨║╤Б╤В╨░). ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
       endif
       else
        ld c,#61 ;97(61):wt    - ╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░. ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
        rst #10
       endif
        ld a,(action);(LL6087)
        and #0a
        ld (action),a;(LL6087),a
        ld a,(flags);(LL6235)
        and #14
        ld (flags),a;(LL6235),a
        ld a,(action);(LL6087)
        bit 3,a ;8 = ╨╜╨╡ ╨▓╤Л╨┐╨╛╨╗╨╜╤П╤В╤М ╤Б╤В╤А╨╛╨║╤Г ╨а
        jr nz,_LL5f43
        ld e,'P';#50 ;P - ╤Б╤В╤А╨╛╨║╨░ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╤Е ╨║╨╛╨╝╨░╨╜╨┤ (╨╛╨┤╨╜╨░ ╨▓ ╤В╨╡╨║╤Б╤В╨╡)
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        ld ix,MENU;LL622b
        call nz,LL5db2 ;run (p_com+exebat)
        ret c ;error
_LL5f43 ld a,(flags);(LL6235)
        and #1f
        ld (flags),a;(LL6235),a
        ld ix,MENU;LL622b
        call cycleinmenu;LL60ca
        jr c,LL5fc2 ;╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╤Б╤В╤А╨╛╨║╤Г 'T'
        call LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld e,'Z';#5a ;Z - ╤Б╤В╤А╨╛╨║╨░ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╤Е ╨║╨╛╨╝╨░╨╜╨┤
        call LL60a1 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        call nz,LL5db2 ;run (p_com+exebat)
        ret c
        ld a,(flags);(LL6235)
        res 5,a
        ld (flags),a;(LL6235),a
        ld a,(action);(LL6087)
        bit 1,a ;2 = ╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╤Б╨╛╨╛╤В╨▓╨╡╤В╤Б╤В╤Г╤О╤Й╤Г╤О ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Г╤О ╤Б╤В╤А╨╛╨║╤Г Z ╨╕ ╨▓╨╡╤А╨╜╤Г╤В╤М╤Б╤П ╤Б╨╜╨╛╨▓╨░ ╨▓ ╨╝╨╡╨╜╤О
        jr nz,_LL5f43 ;???
        call LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld e,'C';#43 ;C ╨╕╨╗╨╕ c - ╤Б╤В╤А╨╛╨║╨╕ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Л╤Е ╤Б╤В╤А╨╛╨║ (C - ╤Б╤В╨░╨╜╨┤╨░╤А╤В╨╜╤Л╨╣ ╨▓╤Л╨╖╨╛╨▓, ╤Б - ╨▓╤Л╨╖╨╛╨▓ ╤Б╤В╤А╨╛╨║╨╕ ╤З╨╡╤А╨╡╨╖ SHELL ( ╨┤╨╗╤П ╨▒╨╛╨╗╤М╤И╨╕╤Е ╨┐╤А╨╛╨│╤А╨░╨╝╨╝ ( ╨╜╨░╨┐╤А╨╕╨╝╨╡╤А ╤А╨╡╨┤╨░╨║╤В╨╛╤А╨░, ╤В.╨╡. ╨┤╨╗╤П ╨┐╤А╨╛╨│╤А╨░╨╝╨╝ ╤Г ╨║╨╛╤В╨╛╤А╤Л╤Е ╨░╨┤╤А╨╡╤Б ╨╖╨░╨│╤А╤Г╨╖╨║╨╕ ╨╝╨╡╨╜╤М╤И╨╡ 25000) ╨╕ ╨┐╨░╨║╨╡╤В╨╛╨▓)
        call LL60a1 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ret z ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        push af
        dec hl
        ld a,'c';#63
        inc hl
        cp (hl)
        jr nz,_LL5f84
        xor a
        ld (LL5fc1),a ;0=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г?
_LL5f84 pop af
LL5f85  ret z
        ld a,'*';#2a ;╨┐╨╛╨┤╤Б╤В╨░╨▓╨╗╤П╤В╤М ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╨║╨╛╨╜╤Ж╨╡ ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕ (╨╜╨╡ ╨┤╨╛╨║╤Г╨╝╨╡╨╜╤В╨╕╤А╨╛╨▓╨░╨╜╨╛!!!)
        cp (hl)
        jr nz,LL5fa5
;╨▒╨╡╤А╤С╨╝ ╤Д╨░╨╣╨╗ ╨┐╨╛╨┤ ╨║╤Г╤А╤Б╨╛╤А╨╛╨╝
       if NEDOOS
;╨▒╤А╨░╤В╤М ╨╕╨╖ ╨▓╤В╨╛╤А╨╛╨│╨╛ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╨░ ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕: menu.com menu.mnu filename.ext
        ld de,(par2addr)
       else
        ld c,#8a ;138(8A):g_curs - ╨Т╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨┐╨░╤А╨░╨╝╨╡╤В╤А╤Л ╨┐╨░╨╜╨╡╨╗╤М╨╜╨╛╨│╨╛ ╨║╤Г╤А╤Б╨╛╤А╨░. ╨Т╤Л╤Е╨╛╨┤: A=E'= ╨╜╨╛╨╝╨╡╤А ╤Д╨░╨╣╨╗╨░, D'= ╨┐╨╛╨╖╨╕╤Ж╨╕╤П Y ╨▓ ╨╛╨║╨╜╨╡ (=H ╨┤╨╗╤П wtpos), B' - ╨╜╨╛╨╝╨╡╤А ╤В╨╡╨║╤Г╤Й╨╡╨╣ ╨┐╨░╨╜╨╡╨╗╨╕ (0 - ╨╗╨╡╨▓╨░╤П, 1 - ╨┐╤А╨░╨▓╨░╤П), HL' - ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨╛╨║╨╜╨░ ╨┐╨░╨╜╨╡╨╗╨╕
        rst #10
        ld e,a
        ld c,#27 ;39(27):gname  - ╨Т╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М  ╤Д╨░╨╣╨╗╨░, ╨╜╨╡  ╨╛╤В╨║╤А╤Л╨▓╨░╤П ╨╡╨│╨╛  ╨╜╨░ ╨▓╤Е╨╛╨┤╨╡ ╨▓ ╤А╨╡╨│.╨Х - ╨╜╨╛╨╝╨╡╤А ╤Д╨░╨╣╨╗╨░. ╨Т╤Л╤Е╨╛╨┤: ╨╡╤Б╨╗╨╕ O.K., ╤В╨╛ HL' - ╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        rst #10
        ret c
       endif
        push hl ;╨░╨┤╤А╨╡╤Б '*'?
        call findCR;LL61a1
        dec hl
        ld (hl),#20 ;╨▓╨╝╨╡╤Б╤В╨╛ CR
        inc hl
       if NEDOOS
        ex de,hl
        call strcopy
       else
        exx
        push hl ;╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        exx
        pop de ;╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        exd  ;hl=╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        ld c,#4f ;79(4F):convr  - ╨Я╤А╨╡╨╛╨▒╤А╨░╨╖╤Г╨╡╤В  11-╨▒╨░╨╣╤В╨╛╨▓╤Л╨╣ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М  ╨╕╨╝╨╡╨╜╨╕ ╨╕ ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П ╤Д╨░╨╣╨╗╨░ (╨▓ HL), ╨▓ 13-╨▒╨░╨╣╤В╨╛╨▓╨╛╨╡ ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░ ╤Б ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╨╡╨╝ ╤З╨╡╤А╨╡╨╖ ╤В╨╛╤З╨║╤Г ╨╕ ╤Б "13" ╨▓ ╨║╨╛╨╜╤Ж╨╡ (╨▓ DE). ╨Э╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ DE' - ╨░╨┤╤А╨╡╤Б #0D
        rst #10
       endif
        pop hl ;╨░╨┤╤А╨╡╤Б '*'?
        inc hl ;hl=╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ "command bla-bla filename.ext"
LL5fa5  pop bc
       if NEDOOS
       jp LL5dac ;run (p_com+exebat),okquit
       else
        ld a,(LL5fc1)
        or a
        jp nz,LL5dac ;run (p_com+exebat),okquit
;╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г?
        ld c,#49 ;73(49):p_com  - ╨Ч╨░╨┐╨╛╨╗╨╜╨╕╤В╤М  ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣  ╨▒╤Г╤Д╨╡╤А ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. HL = ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║╨╕, ╨╛╨║╨░╨╜╤З╨╕╨▓╨░╤О╤Й╨╡╨╣╤Б╤П ╨║╨╛╨┤╨╛╨╝ 13. ╨Я╤А╨╕ ╨┤╨╗╨╕╨╜╨╡ ╤Б╤В╤А╨╛╨║╨╕ ╨▒╨╛╨╗╨╡╨╡ 128 ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨╛╤И╨╕╨▒╨║╤Г (╤Д╨╗╨░╨│ C).
        rst #10
        xor a
        ld c,#93 ;147(93):shexe  - ╨Т╤Л╤Е╨╛╨┤ ╨▓ ╨╛╨▒╨╛╨╗╨╛╤З╨║╤Г ╤Б ╨╖╨░╨┐╤Г╤Б╨║╨╛╨╝ RST exebat(#44) ╤Б A=0
        rst #10
       endif

LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld a,(cursory);(LL6234)
        ld d,a
        ld e,'A';#41
        call LL609e ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        dec hl
        ld d,#01
        ret ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛

LL5fc1  nop   ;0=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г, 1=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М exe?

LL5fc2  ld e,'T';#54 ;C/c,T - ╤Б╤В╤А╨╛╨║╨╕ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Л╤Е ╤Б╤В╤А╨╛╨║ (T - ╨┤╨╛╨╗╨╢╨╜╨░ ╤Б╤В╨╛╤П╤В╤М ╨║╨╛╨╝╨░╨╜╨┤╨╜╨░╤П ╤Б╤В╤А╨╛╨║╨░, ╨▓╤Л╨╖╤Л╨▓╨░╨╡╨╝╨░╤П ╨┐╤А╨╕ ╨╛╤В╨║╨░╨╖╨╡ (SS + A)
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        jr LL5f85 ;╤В╨░╨╝ ret z ╨╕ ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╜╨░ '*'...

interpret_keys_hl;LL5fc9
;hl=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21
        ld a,'/';#2f
        cp (hl)
        ret nz
        inc hl
        ld b,(hl)
        push bc ;b=╤В╨╕╨┐ ╨║╨╗╤О╤З╨░
        inc hl
        push hl ;hl=╨╜╨░╤З╨░╨╗╨╛ ╤З╨╕╤Б╨╗╨░ ╨▓ ╨║╨╗╤О╤З╨╡
        xor a
        ld b,a
LL5fd4  ld a,#20
        cp (hl)
        jr z,_LL5fe7
        ld a,'/';#2f
        cp (hl)
        jr z,_LL5fe7
        ld a,#0d
        cp (hl)
        jr z,_LL5fe7
        inc hl
        inc b
        jr LL5fd4
_LL5fe7 pop de ;de=╨╜╨░╤З╨░╨╗╨╛ ╤З╨╕╤Б╨╗╨░ ╨▓ ╨║╨╗╤О╤З╨╡
        push hl ;hl=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21 - ╨┐╨╛╤Б╨╗╨╡ ╤З╨╕╤Б╨╗╨░
        exd   ;hl=╨╜╨░╤З╨░╨╗╨╛ ╤З╨╕╤Б╨╗╨░ ╨▓ ╨║╨╗╤О╤З╨╡
        ld a,b ;╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░
        ld b,#00
       if NEDOOS
        call sa_d
       else
        ld c,#7d ;125(7D):a_d   - ╨┐╤А╨╡╨╛╨▒╤А╨░╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╤В╤А╨╛╨║╨╕ ASCII-╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓ 4-╨▒╨░╨╣╤В╨╛╨▓╨╛╨╡ ╤З╨╕╤Б╨╗╨╛. ╨Т╨╡╨┤╤Г╤Й╨╕╨╡ ╨┐╤А╨╛╨▒╨╡╨╗╤Л ╨╕╨│╨╜╨╛╤А╨╕╤А╤Г╤О╤В╤Б╤П. HL - ╨░╨┤╤А╨╡╤Б  ASCII - ╨▒╤Г╤Д╨╡╤А╨░, ╨Р - ╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░ ( ╨╡╤Б╨╗╨╕ ╨Р=0, ╤В╨╛ ╨┤╨╛ ╨║╨╛╨┤╨░ 13 ), ╨Т - ╨╛╤Б╨╜╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╨╕╤Б╤В╨╡╨╝╤Л ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О (╨╜╨╡ ╨▒╨╛╨╗╨╡╨╡ 16, B=0 ╨┐╨╛╨╜╨╕╨╝╨░╨╡╤В╤Б╤П ╨║╨░╨║ 10). ╨б╨╕╤Б╤В╨╡╨╝╨░ ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨╝╨╛╨╢╨╡╤В ╤В╨░╨║╨╢╨╡ ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╤В╤М╤Б╤П ╨┐╨╛ ╨┐╨╡╤А╨▓╨╛╨╝╤Г ╤Б╨╕╨╝╨▓╨╛╨╗╤Г ╨▒╤Г╤Д╨╡╤А╨░: #,h,H - 16; .,d - 10; o,O - 8; %,b,B - 2. ╨Т╤Л╤Е╨╛╨┤: 32-╤А╨░╨╖╤А╤П╨┤╨╜╨╛╨╡ ╤З╨╕╤Б╨╗╨╛ ╨▓ DE'HL'. BC' - ╨┐╤А╨╛╨┤╨╛╨╗╨╢╨╡╨╜╨╕╨╡ ASCII-╨▒╤Г╤Д╨╡╤А╨░. ╨Т╨╛╨╖╨╝╨╛╨╢╨╜╤Л╨╡ ╨╛╤И╨╕╨▒╨║╨╕ (╤Д╨╗╨░╨│ C): ╨╜╨╡╤Ж╨╕╤Д╤А╨╛╨▓╨╛╨╣ ╤Б╨╕╨╝╨▓╨╛╨╗ (A=0), ╨┐╨╡╤А╨╡╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ (A=1)
        rst #10
       endif
        exx
        ld b,l ;result
        pop de ;de=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21
        ld hl,LL5ffd
        pop af ;a=╤В╨╕╨┐ ╨║╨╗╤О╤З╨░
       if NEDOOS
        call sanaly
       else
        ld c,#7e ;126(7E):analys - ╨Я╨╡╤А╨╡╨┤╨░╤З╨░ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╡ ╨┐╨╛ ╨░╨┤╤А╨╡╤Б╤Г ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л. HL - a╨┤╤А╨╡╤Б ╤В╨░╨▒╨╗╨╕╤Ж╤Л, ╨Р - ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л. ╨в╨░╨▒╨╗╨╕╤Ж╨░ ╤Б╨╛╤Б╤В╨╛╨╕╤В ╨╕╨╖  ╨╖╨░╨┐╨╕╤Б╨╡╨╣ ╨┐╨╛ 3 ╨▒╨░╨╣╤В╨░: 0(1) ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л, 1(2) ╨░╨┤╤А╨╡╤Б ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╤Л. ╨Т ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨╣ ╨╖╨░╨┐╨╕╤Б╨╕ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╗╨╡╨╢╨░╤В╤М ╨▒╨░╨╣╤В #FF ╨╕ ╨░╨┤╤А╨╡╤Б ╨╛╤В╤А╨░╨▒╨╛╤В╨║╨╕ ╤Б╨╕╤В╤Г╨░╤Ж╨╕╨╕ "╨║╨╛╨┤ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜"
        rst #10 ;(╨▓ de'hl' ╨╝╤Л ╨┐╨╡╤А╨╡╨┤╨░╨╗╨╕ ╤З╨╕╤Б╨╗╨╛╨▓╨╛╨╣ ╨┐╨░╤А╨░╨╝╨╡╤В╤А ╨┤╨╗╤П ╤Н╤В╨╛╨│╨╛ ╨║╨╗╤О╤З╨░)
       endif
        exd
;hl=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21
        jr interpret_keys_hl;LL5fc9 ;╨┐╤А╨╛╨┤╨╛╨╗╨╢╨░╨╡╨╝ ╤А╨░╨╖╨▒╨╛╤А ╨║╨╗╤О╤З╨╡╨╣

;    C╨┐╨╕╤Б╨╛╨║ ╨║╨╗╤О╤З╨╡╨╣:
; ╨Р - ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П : 0 - ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╡╨╕╤О;
;          1 - ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б ╤В╨╡╨╜╤М╤О;
;          2 - ╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╤Б╨╛╨╛╤В╨▓╨╡╤В╤Б╤В╤Г╤О╤Й╤Г╤О
;            ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Г╤О ╤Б╤В╤А╨╛╨║╤Г Z ╨╕
;            ╨▓╨╡╤А╨╜╤Г╤В╤М╤Б╤П ╤Б╨╜╨╛╨▓╨░ ╨▓ ╨╝╨╡╨╜╤О;
;          4 - ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б 2-╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣;
;          8 - ╨╜╨╡ ╨▓╤Л╨┐╨╛╨╗╨╜╤П╤В╤М ╤Б╤В╤А╨╛╨║╤Г ╨а;
;         xx - ╤Б╤Г╨╝╨╝╨░╤А╨╜╨╛╨╡ ╨┤╨╡╨╣╤Б╤В╨▓╨╕╨╡,
;             ╨╜╨░╨┐╤А╨╕╨╝╨╡╤А : 1+4=5 xx=5 .
; B - ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П :16 - ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О;
;               4 - ╨║╨╛╤А╨╛╤В╨║╨╕╨╣ ╨║╤Г╤А╤Б╨╛╤А;
;               16- ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨░ ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕;
;               xx - ╤Б╤Г╨╝╨╝╨░╤А╨╜╨╛╨╡ ╨┤╨╡╨╣╤Б╤В╨▓╨╕╨╡.
; E - ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ x ╨╝╨╡╨╜╤О
;     (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О ╤Ж╨╡╨╜╤В╤А╨╛╨▓╨║╨░ ╨┐╨╛ X);
; D - ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ Y ╨╝╨╡╨╜╤О
;     (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О ╤Ж╨╡╨╜╤В╤А╨╛╨▓╨║╨░ ╨┐╨╛ Y);
; F - ╨┐╨╛╨╗╨╛╨╢╨╡╨╜╨╕╨╡ ╨║╤Г╤А╤Б╨╛╤А╨░ ╨▓ ╨╝╨╡╨╜╤О
;    (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О ╨▓ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╡ ╨╝╨╡╨╜╤О);
; J - ╤Ж╨▓╨╡╤В ╨║╤Г╤А╤Б╨╛╤А╨░ ╨╝╨╡╨╜╤О
;      (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О %00111001 );
; T - ╤Ж╨▓╨╡╤В ╤В╨╡╨╜╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 0 );
; K - ╤Ж╨▓╨╡╤В ╨╝╨╡╨╜╤О (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О %00001111);
; O - ╤Ж╨▓╨╡╤В ╨║╤Г╤А╤Б╨╛╤А╨░ ╨┐╤А╨╕ ╨▓╤Л╤Е╨╛╨┤╨╡ ╨╕╨╖ ╨╝╨╡╨╜╤О
;          (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О %00100000 );
; G - Y ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 0  );
; I - ╤Ж╨▓╨╡╤В ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕
;     (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О  %00001111 );
; H - X ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 0 );
; N - ╨▓╤Л╤Б╨╛╤В╨░ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 1 );
; C - ╨┤╨╗╨╕╨╜╨░ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 32 ).

LL5ffd  DB 'A';#41
        dw setkey_action;LL6041
        db 'B';#42
        dw setkey_flags;LL6046
        db 'C';#43
        dw setkey_hintwid;LL604b
        DB 'D';#44
        dw setkey_menuy;LL6050
        db 'E';#45
        dw setkey_menux;LL6055
        db 'F';#46
        dw setkey_cursory;LL605a
        db 'G';#47
        dw setkey_hinty;LL605f
        db 'H';#48
        dw setkey_hintx;LL6064
        DB 'I';#49
        dw setkey_hintcolor;LL6069
        db 'J';#4a
        dw setkey_cursorcolor;LL606e
        db 'K';#4b
        dw setkey_menucolor;LL6073
         db 'L';#4c
         dw LL6078
         db 'M';#4d
         dw LL607d
        db 'N';#4e
        dw setkey_hinthgt;LL6082
        db 'O';#4f
        dw setkey_exitcursorcolor;LL603c
        db 'T';#54
        dw setkey_shadowcolor;LL6030
        DB #ff
        dw reter;LL6045

setkey_shadowcolor;LL6030
        ld a,b
        and #07
        ld b,a
        add a,a
        add a,a
        add a,a
        or b
        ld (shadowcolor),a;(LL6230),a
        ret
setkey_exitcursorcolor;LL603c
        ld a,b
        ld (exitcursorcolor),a;(LL6239),a
        ret
setkey_action;LL6041
        ld a,b
        ld (action),a;(LL6087),a
reter;LL6045
        ret
setkey_flags;LL6046
        ld a,b
        ld (flags),a;(LL6235),a
        ret
setkey_hintwid;LL604b
        ld a,b
        ld (hintwid),a;(LL6224),a
        ret
setkey_menuy;LL6050
        ld a,b
        ld (menuy),a;(LL622c),a
        ret
setkey_menux;LL6055
        ld a,b
        ld (menux),a;(LL622b),a
        ret
setkey_cursory;LL605a
        ld a,b
        ld (cursory),a;(LL6234),a
        ret
setkey_hinty;LL605f
        ld a,b
        ld (hinty),a;(LL621e),a
        ret
setkey_hintx;LL6064
        ld a,b
        ld (hintx),a;(LL621d),a
        ret
setkey_hintcolor;LL6069
        ld a,b
        ld (hintcolor),a;(LL6221),a
        ret
setkey_cursorcolor;LL606e
        ld a,b
        ld (cursorcolor),a;(LL6233),a
        ret
setkey_menucolor;LL6073
        ld a,b
        ld (menucolor),a;(LL622f),a
        ret
LL6078
        ld a,b
        ld (LL6236),a
        ret
LL607d
        ld a,b
        ld (LL6225),a
        ret
setkey_hinthgt;LL6082
        ld a,b
        ld (hinthgt),a;(LL621f),a
        ret

action;LL6087
        DB #00

       if NEDOOS
;mainmenupath;LL6088
        ;db "menu",0
       else
mainmenupath;LL6088
        ;db #53,#3a,#53,#48,#45,#4c,#4c
        ;DB #5c,#0d,#6d,#65,#6e,#75,#20,#20
        ;DB #20,#20,#74,#78,#74
        db "S:SHELL",'\\',13
       endif
mainmenufilename;LL6091
       if NEDOOS
        db "menu/menu.mnu",0
        ;db "menu/resident.mnu",0
       else
        db "menu    txt"
       endif

LL609c
;e=╤В╨╕╨┐ ╤Б╤В╤А╨╛╨║╨╕
        ld d,#01 ;db 0x16,0x01
LL609e  ld hl,menutext;LL623a ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
LL60a1  jp LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
;z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?

LL60a4 ;╨┐╨╡╤А╨╡╨┐╨╡╤З╨░╤В╨║╨░ ╨╛╨║╨╜╨░?
        ld a,(ix+MENU_flags);#0a)
        bit 5,a
        ret nz
        set 5,a
        ld (ix+MENU_flags),a;(ix+#0a),a
        ld a,(ix+MENU_flags);#0a)
        call LL6153 ;goto next menu
        ld b,a
        ld a,(hintspresent);LL6226)
        or a
        jr z,LL60c7 ;no hints ;goto next menu
        ld a,(flags);(LL6235)
        bit 4,a ;16 = ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨░ ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕
        jr nz,_LL60c4
        xor a
_LL60c4
       if NEDOOS
       if PRSTDIO
        call prwin
       else
        call sR_WT ;╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░ (╨▒╨╡╨╖ ╤В╨╡╨║╤Б╤В╨░). ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
       endif
       else
        ld c,#61 ;97(61):wt    - ╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░. ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
        rst #10
       endif
LL60c7  jp LL6153 ;goto next menu

cycleinmenu;LL60ca
        call LL6165 ;╨┐╨╡╤З╨░╤В╤М ╤В╨╡╨║╤Б╤В╨░ ╨▓ ╨╛╨║╨╜╨╡
        call LL6115
        call LL60a4 ;╨▓╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕
        call LL613d
       if NEDOOS
       push ix
       if PRSTDIO
        call yieldgetkeyloop;getkey
       else
        YIELDGETKEYLOOP;OS_GETKEY
       endif
       pop ix
       else
        ld c,#07 ;7(07):ttyin  - ╨Т╨▓╨╛╨┤ ╤Б╨╕╨╝╨▓╨╛╨╗╨░. ╨Т╤Л╤Е╨╛╨┤: A - ╨║╨╛╨┤ ╨╜╨░╨╢╨░╤В╨╛╨╣ ╨║╨╗╨░╨▓╨╕╤И╨╕
        rst #10
       endif
        push af
        ld b,(ix+MENU_menucolor);#04)
        call printcursor;LL612d
        pop af
        ld hl,tkeyhandlers;LL60eb
       if NEDOOS
        call sanaly
       else
         ld c,#7e ;126(7E):analys - ╨Я╨╡╤А╨╡╨┤╨░╤З╨░ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╡ ╨┐╨╛ ╨░╨┤╤А╨╡╤Б╤Г ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л. HL - a╨┤╤А╨╡╤Б ╤В╨░╨▒╨╗╨╕╤Ж╤Л, ╨Р - ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л. ╨в╨░╨▒╨╗╨╕╤Ж╨░ ╤Б╨╛╤Б╤В╨╛╨╕╤В ╨╕╨╖  ╨╖╨░╨┐╨╕╤Б╨╡╨╣ ╨┐╨╛ 3 ╨▒╨░╨╣╤В╨░: 0(1) ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л, 1(2) ╨░╨┤╤А╨╡╤Б ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╤Л. ╨Т ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨╣ ╨╖╨░╨┐╨╕╤Б╨╕ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╗╨╡╨╢╨░╤В╤М ╨▒╨░╨╣╤В #FF ╨╕ ╨░╨┤╤А╨╡╤Б ╨╛╤В╤А╨░╨▒╨╛╤В╨║╨╕ ╤Б╨╕╤В╤Г╨░╤Ж╨╕╨╕ "╨║╨╛╨┤ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜"
         rst #10
       endif
         ret nz
         ret c
        jr cycleinmenu;LL60ca

tkeyhandlers;LL60eb
        DB #0d
        dw handle_enter;LL61a8
        db key_left;#09
        dw handle_left;LL61bb
        db key_up;#0b
        dw handle_up;LL61d3
        db key_down;#0a
        dw handle_down;LL61fc
        db key_right;#08
        dw handle_right;LL61c9
        db 'q';#71
        dw handle_up;LL61d3
        db 'a';#61
        dw handle_down;LL61fc
        db 'p';#70
        dw handle_right;LL61c9
        DB 'o';#6f
        dw handle_left;LL61bb
        db key_end;'A';#41
        dw handle_end;LL61d9
        db key_home;'Q';#51
        dw handle_home;LL6205
        DB key_esc;#10
        dw xorascf;LL6112
        db #ff
        dw xora;LL61f6 ;xor a:ret

xorascf;LL6112
        xor a
        scf
        ret

LL6115
        ld d,(ix+MENU_cursory);#09)
        ld e,'A';#41
        call LL615d ;hl=ix+15
        call LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
        jp z,LL61f8 ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error? ;handle_down+jp LL6115
        dec hl
        ld a,(hl)
        cp 'a';#61
        jp z,LL61f8 ;handle_down+jp LL6115 ;'a' = ╤Б╤В╤А╨╛╨║╨╕ ╨╝╨╡╨╜╤О, ╨┐╨╛ ╨║╨╛╤В╨╛╤А╤Л╨╝ ╨╜╨╡ ╤Е╨╛╨┤╨╕╤В ╨║╤Г╤А╤Б╨╛╤А
        ld b,(ix+MENU_cursorcolor);#08)
;b=color
printcursor;LL612d
        ld a,(flags);(LL6235)
        bit 2,a ;4 = ╨║╨╛╤А╨╛╤В╨║╨╕╨╣ ╨║╤Г╤А╤Б╨╛╤А
        ld a,(ix+MENU_cursory);#09)
       if NEDOOS
      if PRSTDIO
       push af
        ld a,b
        call setcolor_a ;keep ix
       pop af
        ld e,(ix+MENU_menux)
        ld b,(ix+MENU_menuwid_chrs)
        jr z,$+5
         inc e ;╨║╨╛╤А╨╛╤В╨║╨╕╨╣ ╨║╤Г╤А╤Б╨╛╤А
         dec b
         dec b
        push ix
        push bc ;b=cursorwid
        add a,(ix+MENU_menuy)
        ld d,a
        call setxy
        call setcolor_invisible
        ld a,' '
;printcursor_wid=$+1
        pop bc ;ld b,0
;a=symbol
;b=count
        call prNsymbol
        call setcolor_visible
        pop ix
      else
        jr z,_LL6138
        call sAWTC ;100(64):awtc  - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, ╨╜╨╡ ╨╖╨░╤В╤А╨░╨│╨╕╨▓╨░╤П ╤А╨░╨╝╨║╤Г, IX=╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, A=╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, B=╤Ж╨▓╨╡╤В
        jr _LL6138q
_LL6138
        call sAWT ;99(63):awt   - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, c ╤А╨░╨╝╨║╨╛╨╣. ╨Т╤Е╨╛╨┤: IX = ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨╛╨║╨╜╨░, A = ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, ╨║╨╛╤В╨╛╤А╤Г╤О ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╨┐╨╛╨┤╤Б╨▓╨╡╤В╨╕╤В╤М (╨╜╤Г╨╝╨╡╤А╨░╤Ж╨╕╤П ╨╛╤В 1), B = ╤Ж╨▓╨╡╤В
_LL6138q
      endif
       else
        ld c,#63 ;99(63):awt   - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, c ╤А╨░╨╝╨║╨╛╨╣. ╨Т╤Е╨╛╨┤: IX = ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨╛╨║╨╜╨░, A = ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, ╨║╨╛╤В╨╛╤А╤Г╤О ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╨┐╨╛╨┤╤Б╨▓╨╡╤В╨╕╤В╤М (╨╜╤Г╨╝╨╡╤А╨░╤Ж╨╕╤П ╨╛╤В 1), B = ╤Ж╨▓╨╡╤В
        jr z,_LL6138
        ld c,#64 ;100(64):awtc  - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, ╨╜╨╡ ╨╖╨░╤В╤А╨░╨│╨╕╨▓╨░╤П ╤А╨░╨╝╨║╤Г, IX=╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, A=╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, B=╤Ж╨▓╨╡╤В
_LL6138 ;ld a,(ix+MENU_cursory);#09)
        rst #10
       endif
        ret

LL613d  call LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld e,'H';#48 ;H - ╨┤╨╛╨╗╨╢╨╡╨╜ ╤Б╤В╨╛╤П╤В╤М ╤В╨╡╨║╤Б╤В ,╨║╨╛╤В╨╛╤А╤Л╨╣ ╨┐╨╛╤П╨▓╨╗╤П╨╡╤В╤Б╤П ╨▓ c╤В╤А╨╛╨║╨╡ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╡
        call LL60a1 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ret z ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        call LL6153 ;goto next menu
        ld b,#01
        ld a,(ix+MENU_menuhgt);#02)
        srl a ;???
       if NEDOOS
        push af
        push bc
        push hl
        call setmenucolor
        pop hl
        pop bc
        pop af
        call sLWT
       else
        ld c,#65 ;101(65):lwt   - ╨а╨░╤Б╨┐╨╡╤З╨░╤В╨║╨░ ╨╖╨░╨┤╨░╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╤В╤А╨╛╨║ ╨▓ ╨╛╨║╨╜╨╡; A - ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ (╨╜╨░╤З╨░╨╗╨░), IX - ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, HL - ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║ ╤В╨╡╨║╤Б╤В╨░ ╨┤╨╗╤П ╨┐╨╡╤З╨░╤В╨╕, B - ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╤В╤А╨╛╨║, ╨║╨╛╤В╨╛╤А╨╛╨╡ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╤А╨░╤Б╨┐╨╡╤З╨░╤В╨░╤В╤М
        rst #10
       endif
;goto next menu
LL6153
        ld e,(ix+MENU_nextmenuaddr);#0c)
        ld d,(ix+MENU_nextmenuaddr+1);#0d)
        push de
        pop ix
        ret

LL615d ;hl=ix+15
        push ix
        pop hl
        ld bc,LL000f
        add hl,bc
        ret

;╨┐╨╡╤З╨░╤В╤М ╤В╨╡╨║╤Б╤В╨░ ╨▓ ╨╛╨║╨╜╨╡
LL6165
        ld d,#01
        ld e,'A';#41
LL6169  call LL615d ;hl=ix+15
        call LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
        ret z ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld a,d
        ld b,#01
       if NEDOOS
       push de
        push af
        push bc
        push hl
        call setmenucolor
        pop hl
        pop bc
        pop af
        call sLWT ;101(65):lwt   - ╨а╨░╤Б╨┐╨╡╤З╨░╤В╨║╨░ ╨╖╨░╨┤╨░╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╤В╤А╨╛╨║ ╨▓ ╨╛╨║╨╜╨╡; A - ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ (╨╜╨░╤З╨░╨╗╨░), IX - ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, HL - ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║ ╤В╨╡╨║╤Б╤В╨░ ╨┤╨╗╤П ╨┐╨╡╤З╨░╤В╨╕, B - ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╤В╤А╨╛╨║, ╨║╨╛╤В╨╛╤А╨╛╨╡ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╤А╨░╤Б╨┐╨╡╤З╨░╤В╨░╤В╤М
       pop de
       else
        ld c,#65 ;101(65):lwt   - ╨а╨░╤Б╨┐╨╡╤З╨░╤В╨║╨░ ╨╖╨░╨┤╨░╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╤В╤А╨╛╨║ ╨▓ ╨╛╨║╨╜╨╡; A - ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ (╨╜╨░╤З╨░╨╗╨░), IX - ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, HL - ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║ ╤В╨╡╨║╤Б╤В╨░ ╨┤╨╗╤П ╨┐╨╡╤З╨░╤В╨╕, B - ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╤В╤А╨╛╨║, ╨║╨╛╤В╨╛╤А╨╛╨╡ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╤А╨░╤Б╨┐╨╡╤З╨░╤В╨░╤В╤М
        rst #10
       endif
        inc d
        jr LL6169

LL6179
;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
;hl=text
;d=y?
;e='A'?
;out: hl, z=error?
        push af
        ld b,#00
LL617c  pop af
        call LL6191
        ret z ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        inc b
        push hl
        call findCR;LL61a1
        ld a,b
        cp d
        jr nz,LL617c
        pop hl
        inc hl
        ld a,#fe
        sub c
        or a ;z="╨▓ ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╡╨╣ ╤Б╤В╤А╨╛╨║╨╡ CR ╨╜╨░╨╣╨┤╨╡╨╜ ╨▓ ╨┐╨╡╤А╨▓╨╛╨╣ ╨╢╨╡ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ (╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨░╤П ╤Б╤В╤А╨╛╨║╨░ ╨┐╤Г╤Б╤В╨░╤П)"???
        ret

;e=?
LL6191  ld a,(hl)
        cp #03
        ret z ;╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?
        res 5,a
        cp e
        jr z,LL619f ;╤Б╤В╤А╨╛╨║╨░ ╨╜╤Г╨╢╨╜╨╛╨│╨╛ ╤В╨╕╨┐╨░
        call findCR;LL61a1
        jr LL6191
LL619f  or a
        ret

findCR;LL61a1
        ld c,#ff
        ld a,#0d
        cpir
        ret

handle_enter;LL61a8
        ld a,#01
        or a
LL61ab  push af
        ld a,(ix+MENU_flags);#0a)
        bit 0,a
        jr nz,_LL61b9
        ld b,(ix+MENU_exitcursorcolor);#0e)
        call printcursor;LL612d
_LL61b9 pop af
        ret

handle_left;LL61bb
        ld a,(ix+MENU_flags);#0a)
        bit 3,a
        ret z
        set 6,a
LL61c3  ld (ix+MENU_flags),a;(ix+#0a),a
        scf
        jr LL61ab

handle_right;LL61c9
        ld a,(ix+MENU_flags);#0a)
        bit 3,a
        ret z
        set 7,a
        jr LL61c3

handle_up;LL61d3
        ld a,(ix+MENU_cursory);#09)
        dec a
        jr nz,LL61de
handle_end;LL61d9
        ld a,(ix+MENU_menuhgt);#02)
        dec a
        dec a
LL61de  ld (ix+MENU_cursory),a;(ix+#09),a
        ld d,a
        ld e,'A';#41
        call LL615d ;hl=ix+15
        call LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
        jr z,handle_up;LL61d3 ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?)
        dec hl
        ld a,(hl)
        cp 'a';#61
        jr z,handle_up;LL61d3 ;'a' = ╤Б╤В╤А╨╛╨║╨╕ ╨╝╨╡╨╜╤О, ╨┐╨╛ ╨║╨╛╤В╨╛╤А╤Л╨╝ ╨╜╨╡ ╤Е╨╛╨┤╨╕╤В ╨║╤Г╤А╤Б╨╛╤А
        ld a,d
LL61f3  ld (ix+MENU_cursory),a;(ix+#09),a
xora;LL61f6
        xor a
        ret

LL61f8  ld hl,LL6115
        push hl
handle_down;LL61fc
        ld a,(ix+MENU_cursory);#09)
_LL61ff inc a
        cp (ix+MENU_menuhgt);#02)
        jr nz,LL61f3
handle_home;LL6205
        xor a
        jr _LL61ff

        include "twind.asm" ;sR_WT
        include "wtro.asm"
       if !PRSTDIO
        include "ttyp42.asm"
sATB42
        incbin "Font42_f.cod"
       endif

;╨╕╤Б╤Е╨╛╨┤╨╜╨╕╨║ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜, ╨┐╨╕╤И╨╡╨╝ ╨┐╨╛ ╨┤╨╛╨│╨░╨┤╨║╨╡
;126(7E):analys - ╨Я╨╡╤А╨╡╨┤╨░╤З╨░ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╡ ╨┐╨╛ ╨░╨┤╤А╨╡╤Б╤Г ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л. HL - a╨┤╤А╨╡╤Б ╤В╨░╨▒╨╗╨╕╤Ж╤Л, ╨Р - ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л. ╨в╨░╨▒╨╗╨╕╤Ж╨░ ╤Б╨╛╤Б╤В╨╛╨╕╤В ╨╕╨╖  ╨╖╨░╨┐╨╕╤Б╨╡╨╣ ╨┐╨╛ 3 ╨▒╨░╨╣╤В╨░: 0(1) ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л, 1(2) ╨░╨┤╤А╨╡╤Б ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╤Л. ╨Т ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨╣ ╨╖╨░╨┐╨╕╤Б╨╕ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╗╨╡╨╢╨░╤В╤М ╨▒╨░╨╣╤В #FF ╨╕ ╨░╨┤╤А╨╡╤Б ╨╛╤В╤А╨░╨▒╨╛╤В╨║╨╕ ╤Б╨╕╤В╤Г╨░╤Ж╨╕╨╕ "╨║╨╛╨┤ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜" (╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В NZ?)
sanaly
        inc (hl)
        jr z,sanaly_err
        dec (hl)
        cp (hl)
        jr z,sanaly_ok
        inc hl
        inc hl
        inc hl
        jr sanaly
sanaly_err
        dec (hl) ;NZ
sanaly_ok
        inc hl
        ld a,(hl)
        inc hl
        ld h,(hl)
        ld l,a
        jp (hl)

sPRCHR
;a=chr
;in,out: de'=print addr
       if PRSTDIO
        push bc
        push de
        push hl
         push ix
        call sendchar
         pop ix
        pop hl
        pop de
        pop bc
        ret
       else
        jp sTYP42
       endif
sPRAD
;b=y
;out: de'=print addr, does exx
       if PRSTDIO
        exx
        push bc
        push de
        push hl
         push ix
        exx
        ld d,b
        ld e,c
        call setxy
         pop ix
        pop hl
        pop de
        pop bc
        ret
       else
        jp sADR42
       endif

;╨╕╤Б╤Е╨╛╨┤╨╜╨╕╨║ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜, ╨┐╨╕╤И╨╡╨╝ ╨┐╨╛ ╨┤╨╛╨│╨░╨┤╨║╨╡
;125(7D):a_d   - ╨┐╤А╨╡╨╛╨▒╤А╨░╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╤В╤А╨╛╨║╨╕ ASCII-╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓ 4-╨▒╨░╨╣╤В╨╛╨▓╨╛╨╡ ╤З╨╕╤Б╨╗╨╛. ╨Т╨╡╨┤╤Г╤Й╨╕╨╡ ╨┐╤А╨╛╨▒╨╡╨╗╤Л ╨╕╨│╨╜╨╛╤А╨╕╤А╤Г╤О╤В╤Б╤П. HL - ╨░╨┤╤А╨╡╤Б  ASCII - ╨▒╤Г╤Д╨╡╤А╨░, ╨Р - ╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░ ( ╨╡╤Б╨╗╨╕ ╨Р=0, ╤В╨╛ ╨┤╨╛ ╨║╨╛╨┤╨░ 13 ), ╨Т - ╨╛╤Б╨╜╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╨╕╤Б╤В╨╡╨╝╤Л ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О (╨╜╨╡ ╨▒╨╛╨╗╨╡╨╡ 16, B=0 ╨┐╨╛╨╜╨╕╨╝╨░╨╡╤В╤Б╤П ╨║╨░╨║ 10). ╨б╨╕╤Б╤В╨╡╨╝╨░ ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨╝╨╛╨╢╨╡╤В ╤В╨░╨║╨╢╨╡ ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╤В╤М╤Б╤П ╨┐╨╛ ╨┐╨╡╤А╨▓╨╛╨╝╤Г ╤Б╨╕╨╝╨▓╨╛╨╗╤Г ╨▒╤Г╤Д╨╡╤А╨░: #,h,H - 16; .,d - 10; o,O - 8; %,b,B - 2. ╨Т╤Л╤Е╨╛╨┤: 32-╤А╨░╨╖╤А╤П╨┤╨╜╨╛╨╡ ╤З╨╕╤Б╨╗╨╛ ╨▓ DE'HL'. BC' - ╨┐╤А╨╛╨┤╨╛╨╗╨╢╨╡╨╜╨╕╨╡ ASCII-╨▒╤Г╤Д╨╡╤А╨░. ╨Т╨╛╨╖╨╝╨╛╨╢╨╜╤Л╨╡ ╨╛╤И╨╕╨▒╨║╨╕ (╤Д╨╗╨░╨│ C): ╨╜╨╡╤Ж╨╕╤Д╤А╨╛╨▓╨╛╨╣ ╤Б╨╕╨╝╨▓╨╛╨╗ (A=0), ╨┐╨╡╤А╨╡╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ (A=1)
sa_d
;dec only
;no overflow
;no leading spaces
        exx
        ld hl,0
        ld d,h
        ld e,l
        exx
        ld b,a ;╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░
sa_d_loop
        ld a,(hl)
        inc hl
        sub '0'
        cp 10
        ccf
        jr c,sa_d_loopq
        exx
        call sa_d_mul10
        add a,l
        ld l,a
        ld a,h
        adc a,0
        ld h,a
        jr nc,$+3
        inc de
        exx
        djnz sa_d_loop
       or a ;ok
sa_d_loopq
       push hl
       exx
       pop bc
       exx
        ret

;de'hl'
sa_d_mul10
        ld b,h
        ld c,l
       push de
        add hl,hl
        rl e
        rl d ;*2
        add hl,hl
        rl e
        rl d ;*4
        add hl,bc
       ex de,hl
       pop bc
       adc hl,bc
       ex de,hl ;*5
        add hl,hl
        rl e
        rl d ;*10
        ret

skipword
;hl=string
;out: hl=terminator/space addr
getword0
        ld a,(hl)
        or a
        ret z
        cp ' '
        ret z
        inc hl
        jr getword0

skipspaces
;hl=string
;out: hl=after last space
        ld a,(hl)
        cp ' '
        ret nz
        inc hl
        jr skipspaces

strcopy
;hl->de
;out: hl,de after terminator
        xor a
strcopy0
        cp (hl)
        ldi
        jr nz,strcopy0
        ret

keepdir
        ld de,curdir
        OS_GETPATH
        ret
setolddir
        ld de,curdir
        OS_CHDIR
        ret

loadandrun
;hl=rest of command line
;out: nz=error, e=id
;load file in fcb from system current dir with parameters in tcmd, then set curpaneldir and run
        ld (loadandrun_restcmd),hl
        ld de,cmd_filename
        OS_OPENHANDLE
        or a
        ret nz ;error
        ld a,b
        ld (curhandle),a
        ld hl,nv_closehandle
        push hl
        ;set current drive and dir (will be copied into new app)
        call setolddir

        OS_NEWAPP
        or a
        ret nz ;error
;dehl=╨╜╨╛╨╝╨╡╤А╨░ ╤Б╤В╤А╨░╨╜╨╕╤Ж ╨▓ 0000,4000,8000,c000 ╨╜╨╛╨▓╨╛╨│╨╛ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤П, b=id, a=error
        push bc ;b=id
        ld a,d
        SETPGC000
        push de
        push hl
        ld hl,filenametext
        ld de,0xc000+COMMANDLINE
        ld bc,4
        ldir
loadandrun_restcmd=$+1
        ld hl,0
        call strcopy
        xor a
        ld (0xc000+COMMANDLINE+COMMANDLINE_sz-1),a
        pop hl
        pop de

        call readfile_pages_dehl

        pop de
        ld e,d ;e=id
;run "cmd <commandline>"
        push de
        OS_RUNAPP
        pop de
        xor a
        ret ;z

readfile_pages_dehl
        ld a,d
        SETPGC000
        ld a,0xc100/256
        call cmd_loadpage
        ret nz
        ld a,e
        call cmd_loadfullpage
        ret nz
        ld a,h
        call cmd_loadfullpage
        ret nz
        ld a,l
cmd_loadfullpage
        SETPGC000
        ld a,0xc000/256
cmd_loadpage
;out: a=error, bc=bytes read
;keeps hl,de
        push de
        push hl
        ld d,a
        xor a
        ld l,a
        ld e,a
        sub d
        ld h,a ;de=buffer, hl=size
        call readcurhandle
        ld b,h
        ld c,l
        pop hl
        pop de
        or a
        ret

readcurhandle
curhandle=$+1
        ld b,0
        OS_READHANDLE
        ret

nv_closehandle
;keep de and flags!!!
        push af
        push de
        ld a,(curhandle)
        ld b,a
        OS_CLOSEHANDLE
        pop de
        pop af
        ret

       if PRSTDIO
        include "../_sdk/stdio.asm"

setmenucolor
        ld a,(ix+4) ;menucolor
setcolor_a
        ld e,a
        rra
        rra
        rra
        and 15
        ld d,a ;paper
        ld a,e
        and 7
        ld e,a ;ink
       push ix
        call setcolor ;in: D=paper0..7, E=ink0..15
       pop ix
        ret

prwin
        call setmenucolor

        ld e,(ix+MENU_menux) ;x
        ld d,(ix+MENU_menuy) ;y
        ld b,(ix+MENU_menuhgt) ;hgt
        ld c,(ix+MENU_menuwid_chrs) ;wid
;de=yx
;bc=hgt,wid
;de=yx
;bc=hgt,wid
        ld a,c
        sub 2
        ld (winbeginstroka_wid),a
        ld (winmidstroka_wid),a
        ld (winendstroka_wid),a
       ld a,b
       cp 2
       jr c,prwin_notopline
        ld hl,winbeginstroka
        call prtableline
        dec b
prwin_notopline
       ld a,b
       cp 2
       jr c,prwin_nobottomline
        push bc
        push de
        ld a,d
        add a,b
        ld d,a ;bottom y
        ld hl,winendstroka
        call prtableline
        pop de
        pop bc
        dec b
        inc d
prwin_nobottomline
winlineN_0
        ld hl,winmidstroka
        call prtableline
        inc d
        djnz winlineN_0
        ret
prtableline
;hl=tableline data
;de=yx
;b=hgt
;keeps bc,de,ix
        push bc
        call nv_setxy ;keeps de,hl
prtableline0
        ld a,(hl)
        or a
        jr z,prtablelineq
        inc hl
        ld b,(hl)
        inc hl
        call prNsymbol
        jr prtableline0
prtablelineq
        pop bc
        ret

prNsymbol
;a=symbol
;b=count
        push de
        push hl
        push ix
        ld c,a
prNsymbol0
        push bc
        ld a,c
        call sendchar
        pop bc
        djnz prNsymbol0
        pop ix
        pop hl
        pop de
        ret

nv_setxy
;de=yx (kept)
;keeps de,hl,ix
        push de
        push hl
        push ix
        call setxy
        pop ix
        pop hl
        pop de
        ret

winbeginstroka
        db 0xc9;'╨И'
        db 1
        db 0xcd;'='
winbeginstroka_wid=$
        db 12;wdtcolumn1
        db 0xbb;'╤Ч'
        db 1
        db 0

winmidstroka
        db 0xba;'╤Ц'
        db 1
        db ' '
winmidstroka_wid=$
        db 12;wdtcolumn1
        db 0xba;'╤Ц'
        db 1
        db 0

winendstroka
        db 0xc8;'L'
        db 1
        db 0xcd;'='
winendstroka_wid=$
        db 12;wdtcolumn1
        db 0xbc;'-'
        db 1
        db 0

        endif

cmd_filename
        db "cmd.com",0
filenametext
        db "cmd "

tdotmnuz
        db ".mnu",0

curdir
        ds MAXPATH_sz

par1addr
        dw 0
par2addr
        dw 0

;???
        DB #55;'U'
        db "ABCDEFGHIJ";#41,#42,#43,#44,#45,#46,#47,#48,#49,#4a
        db "0123456789";#30,#31,#32,#33,#34,#35,#36,#37,#38,#39
HINTMENU
hintx;LL621d
        db #00
hinty;LL621e
        db #00
hinthgt;LL621f
        db #01
LL6220 ;hintwid_chrs?
        DB #20
hintcolor;LL6221
        db #0f,#ff
LL6223 ;hinthgt_chrs? ╨╕╨╖ (ix+5) ╤З╨╕╤В╨░╨╡╤В╤Б╤П ╨▓╤А╨╛╨┤╨╡ ╨░╤В╤А╨╕╨▒╤Г╤В shadowcolor
        db #01
hintwid;LL6224
        db #1e
LL6225
        db #00
hintspresent;LL6226
        db #00
        db #00
        DB #00
        dw MENU;#622b

MENU
MENU_menux=$-MENU
menux;LL622b
        db #ff
MENU_menuy=$-MENU
menuy;LL622c
        db #ff
MENU_menuhgt=$-MENU;2
menuhgt;LL622d
        db #00
MENU_menuwid_chrs=$-MENU
menuwid_chrs;LL622e
        db #00
MENU_menucolor=$-MENU;4
menucolor;LL622f
        db #0f
shadowcolor;LL6230
        DB #80
menux_chrs;LL6231
        db #00
;MENU_menuwid=$-MENU;7
menuwid;LL6232
        db #00
MENU_cursorcolor=$-MENU;8
cursorcolor;LL6233
        db #39
MENU_cursory=$-MENU;9
cursory;LL6234
        db #01
MENU_flags=$-MENU;10
flags;LL6235
;bit 0: ╨╜╨╡ ╨┐╨╡╤З╨░╤В╨░╤В╤М ╨║╤Г╤А╤Б╨╛╤А ╤Ж╨▓╨╡╤В╨╛╨╝ exitcursorcolor ╨┐╨╛ left, right, enter
;bit 3: enable left, right
;bit 5: LL60a4 already called (╨╛╨║╨╜╨╛ ╨╜╨░╨┐╨╡╤З╨░╤В╨░╨╜╨╛?)
;bit 6: left pressed
;bit 7: right pressed
        db #10
LL6236
        db #00 ;???
MENU_nextmenuaddr=$-MENU;12
        dw HINTMENU;#621d
MENU_exitcursorcolor=$-MENU;14
exitcursorcolor;LL6239
        db #20
;menu size = 15?

menutext;LL623a
end
        savebin "menu.com",begin,end-begin
        LABELSLIST "../../us/user.l",1