?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. cmdcalctextaddr
  2. ;out: hl=addr, a=curcmdx
  3. ;keeps ix
  4.         ld a,(curcmdx)
  5.         ld c,a
  6.         ld b,0
  7.         ld hl,cmdbuf
  8.         add hl,bc
  9.         ret
  10.  
  11. cmdcalcpromptsz
  12.         ld hl,cmdprompt
  13.         call strlen
  14.         ld a,l
  15.         inc a
  16.         ret
  17.  
  18. cmdcalccurxy
  19. ;out: de=yx
  20. ;x=cmdpromptsz+curcmdx-curcmdscroll
  21.         call cmdcalcpromptsz ;a=promptsz
  22.         ld hl,curcmdx ;не на экране, а внутри команды
  23.         add a,(hl)
  24.         ld hl,curcmdscroll ;сдвиг команды относительно экрана
  25.         sub (hl)
  26.         ld e,a
  27.         ;ld d,txtscrhgt-1
  28.         ld d,CMDLINEY
  29.         ret
  30.  
  31. fixscroll_prcmd
  32. ;цикл поиска скролла для текущего положения курсора
  33. editcmd_scroll0
  34.         call cmdcalccurxy ;e=scrx
  35.         call cmdcalcpromptsz ;a=promptsz
  36.         ld hl,curcmdscroll
  37.         dec a
  38.         cp e ;scrx
  39.         jr c,editcmd_noscrollleft ;x>=promptsz (x>(promptsz-1))
  40. ;x<promptsz - скролл влево
  41.         dec (hl)
  42.         jr editcmd_scroll0
  43. editcmd_noscrollleft
  44.         ld a,e ;scrx
  45.         cp txtscrwid
  46.         jr c,editcmd_noscrollright
  47. ;x>=txtscrwid - скролл вправо
  48.         inc (hl)
  49.         jr editcmd_scroll0
  50. editcmd_noscrollright
  51. ;prcmd
  52.         ld de,_COLOR
  53.         SETCOLOR_
  54.         ;ld de,+(txtscrhgt-1)*256+0
  55.         ld de,CMDLINEY*256+0
  56.         SETX_;SETXY_
  57.         ld hl,cmdprompt
  58.         ld c,0
  59.         call prtext
  60.         push bc
  61.         ld a,'>'
  62.         PRCHAR_
  63.         pop bc
  64.         inc c
  65.         ld hl,(curcmdscroll)
  66.         ld h,0
  67.         ld de,cmdbuf
  68.         add hl,de
  69.         call prtext
  70. ;добьём остаток строки пробелами
  71.         ;ld hl,tspaces
  72.         ;jp prtext
  73.         jp clearrestofline
  74.  
  75. ;tspaces
  76. ;        ds txtscrwid-1,' '
  77. ;        db 0
  78.  
  79. cmdprNchars
  80. ;hl=buffer
  81. ;de=size
  82. ;out: hl=buffer+size
  83.         ex de,hl
  84.         push de
  85.         push hl
  86.         call sendchars
  87.         pop hl
  88.         pop de
  89.         add hl,de
  90.         ret
  91.        
  92. prtext
  93. ;c=x
  94.         push bc
  95.         push hl
  96.         ld a,txtscrwid-1
  97.         sub c
  98.         ld c,a
  99.         push bc
  100.         call strlen ;hl=length
  101.         pop bc
  102.         ld b,0
  103.         call minhl_bc_tobc
  104.         ld h,b
  105.         ld l,c
  106.         pop de
  107.         pop bc ;c=x
  108.         ld a,h
  109.         or l
  110. ;de=buf
  111. ;hl=len
  112.         push bc
  113.         push hl
  114.         call nz,sendchars
  115.         pop hl
  116.         pop bc
  117.         add hl,bc
  118.         ld c,l
  119. ;c=x        
  120.         ret
  121.  
  122. minhl_bc_tobc
  123.         or a
  124.         sbc hl,bc
  125.         add hl,bc
  126.         ret nc ;bc<=hl
  127.         ld b,h
  128.         ld c,l
  129.         ret
  130.  
  131. strdelch
  132. ;delete char at (hl-1), shift string left
  133. ;keeps ix
  134. editcmd_bs0
  135.         ld a,(hl)
  136.         dec hl
  137.         ld (hl),a
  138.         inc hl
  139.         inc hl
  140.         or a
  141.         jr nz,editcmd_bs0
  142.         ret
  143.  
  144. strinsch
  145. ;insert char E at (hl), shift string right
  146. ;keeps ix
  147. editcmd_ins0
  148.         ld a,(hl)
  149.         ld (hl),e
  150.         ld e,a
  151.         inc hl
  152.         or a
  153.         jr nz,editcmd_ins0
  154.         ld (hl),a
  155.         ret
  156.  
  157. curcmdscroll ;сдвиг команды относительно экрана
  158.         db 0
  159. curcmdx ;не на экране, а внутри команды
  160.         db 0
  161. cmdprompt
  162.         ds MAXPATH_sz;MAXCMDSZ+1
  163. ;tcmd
  164. ;        db "cmd "
  165. ;tcmd_sz=$-tcmd
  166. cmdbuf
  167.         db 0
  168.         ds cmdbuf+MAXCMDSZ+1-$
  169.