?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. editline
  2. ;de=yx
  3. ;hl=textaddr
  4. ;a=maxsz
  5. ;out: a=key_enter/key_esc
  6.         ld (editline_maxsz),a
  7.         ld (editline_xy),de
  8.         ld (editline_text),hl
  9.         call strlen ;hl=len
  10.         ld a,l
  11.         ld (editline_curx),a
  12.        
  13. editline_mainloop
  14.         call editline_pr
  15.         ld de,(editline_xy)
  16. editline_curx=$+1
  17.         ld a,0
  18.         add a,e
  19.         ld e,a
  20.         call nv_setxy ;keeps de,hl,ix
  21.         ;OS_GETATTR
  22.         ; ld e,a
  23.         ; push de ;color under cursor
  24.         ;ld e,CURSORCOLOR;#38
  25.         ;OS_PRATTR ;draw cursor
  26.        if PRSTDIO
  27.         call yieldgetkeyloop
  28.        else
  29.         YIELDGETKEYLOOP
  30.        endif
  31.         ; pop de ;d=color under file cursor
  32.         ;push af
  33.         ;OS_PRATTR ;remove cursor
  34.         ;pop af
  35.         cp key_redraw
  36.         jr z,editline_mainloop
  37.         cp key_enter
  38.         ret z
  39.         cp key_esc
  40.         ret z
  41.         ld hl,editline_mainloop
  42.         push hl
  43.         ld hl,(editline_text)
  44.         cp key_left
  45.         jr z,editline_left
  46.         cp key_right
  47.         jr z,editline_right
  48.         cp key_backspace
  49.         jr z,editline_backspace
  50.         cp key_del
  51.         jr z,editline_del
  52.         cp 0x20
  53.         ret c ;прочие системные кнопки не нужны
  54.         ld e,a
  55.         push hl
  56.         call strlen ;hl=len
  57.         ld a,(editline_maxsz)
  58.         cp l
  59.         pop hl
  60.         ret z
  61.         ld a,(editline_curx)
  62.         ld c,a
  63.         ld b,0
  64.         add hl,bc
  65.         inc a
  66.         ld (editline_curx),a
  67.         jp strinsch
  68. editline_backspace
  69.         ld a,(editline_curx)
  70.         or a
  71.         ret z
  72.         ld c,a
  73.         ld b,0
  74.         add hl,bc
  75.         dec a
  76.         ld (editline_curx),a
  77.         jp strdelch ;стирает предыдущий символ
  78.        
  79. editline_del
  80.         ld a,(editline_curx)
  81.         ld c,a
  82.         ld b,0
  83.         add hl,bc
  84.         ld a,(hl)
  85.         or a
  86.         ret z
  87.         inc hl
  88.         jp strdelch ;стирает предыдущий символ
  89.  
  90. editline_left
  91.         ld hl,editline_curx
  92.         ld a,(hl)
  93.         or a
  94.         ret z
  95.         dec (hl)
  96.         ret
  97.  
  98. editline_right
  99.         call strlen ;hl=len
  100.         ld a,l
  101.         ld hl,editline_curx
  102.         cp (hl)
  103.         ret z
  104.         inc (hl)
  105.         ret
  106.        
  107. editline_pr
  108. editline_xy=$+1
  109.         ld de,0
  110.         call nv_setxy ;keeps de,hl,ix
  111. editline_text=$+1
  112.         ld hl,0
  113.         ld c,0
  114.         call prtext
  115. ;добьём остаток строки пробелами
  116. editline_prspc0
  117.         ld a,c
  118. editline_maxsz=$+1
  119.         cp 0
  120.         ret z
  121.         push bc
  122.         ld a,' '
  123.        if PRSTDIO
  124.         PRCHAR_
  125.        else
  126.         PRCHAR
  127.        endif
  128.         pop bc
  129.         inc c
  130.         jp editline_prspc0
  131.