?login_element?

Subversion Repositories NedoOS

Rev

Rev 573 | Rev 605 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. strcp
  2. ;hl=s1
  3. ;de=s2
  4. ;out: Z (equal, hl=terminator of s1+1, de=terminator of s2+1), NZ (not equal, hl=erroraddr in s1, de=erroraddr in s2)
  5. strcp0.
  6.         ld a,[de] ;s2
  7.         cp [hl] ;s1
  8.         ret nz
  9.         inc hl
  10.         inc de
  11.         or a
  12.         jp nz,strcp0.
  13.         ret ;z
  14.  
  15. cpmname_to_dotname
  16. ;hl -> de
  17.         push hl
  18.         ld b,8
  19. cpmname_to_dotname0
  20.         ld a,(hl)
  21.         cp ' '
  22.         jr z,cpmname_to_dotname0q
  23.         ld (de),a
  24.         inc hl
  25.         inc de
  26.         djnz cpmname_to_dotname0
  27. cpmname_to_dotname0q
  28.         pop hl
  29.         ld bc,8
  30.         add hl,bc ;hl=pointer to ext
  31.         ld a,(hl)
  32.         cp ' '
  33.         jr z,cpmname_to_dotnameq
  34.         ld a,'.'
  35.         ld (de),a
  36.         inc de
  37.         ld  c,3
  38.         ldir
  39. cpmname_to_dotnameq
  40.         xor a
  41.         ld (de),a
  42.         ret
  43.  
  44. makeprompt
  45. ;keeps ix
  46.         push ix
  47.         ld de,cmdprompt ;de=pointer to 64 byte (MAXPATH_sz!) buf
  48.         OS_GETPATH
  49.         pop ix
  50.         ret
  51.  
  52. cmdcalctextaddr
  53. ;out: hl=addr, a=curcmdx
  54. ;keeps ix
  55.         ld a,(curcmdx)
  56.         ld c,a
  57.         ld b,0
  58.         ld hl,cmdbuf
  59.         add hl,bc
  60.         ret
  61.  
  62. cmdcalcpromptsz
  63.         ld hl,cmdprompt
  64.         call strlen
  65.         ld a,l
  66.         inc a
  67.         ret
  68.  
  69. cmdcalccurxy
  70. ;out: de=yx
  71. ;x=cmdpromptsz+curcmdx-curcmdscroll
  72.         call cmdcalcpromptsz ;a=promptsz
  73.         ld hl,curcmdx ;не на экране, а внутри команды
  74.         add a,(hl)
  75.         ld hl,curcmdscroll ;сдвиг команды относительно экрана
  76.         sub (hl)
  77.         ld e,a
  78.         ;ld d,txtscrhgt-1
  79.         ld d,CMDLINEY
  80.         ret
  81.  
  82. strlen
  83. ;hl=str
  84. ;out: hl=length
  85.         ld bc,0 ;чтобы точно найти терминатор
  86.         xor a
  87.         cpir ;найдём обязательно, если длина=0, то bc=-1 и т.д.
  88.         ld hl,-1
  89.         or a
  90.         sbc hl,bc
  91.         ret
  92.  
  93. fixscroll_prcmd
  94. ;цикл поиска скролла для текущего положения курсора
  95. editcmd_scroll0
  96.         call cmdcalccurxy ;e=scrx
  97.         call cmdcalcpromptsz ;a=promptsz
  98.         ld hl,curcmdscroll
  99.         dec a
  100.         cp e ;scrx
  101.         jr c,editcmd_noscrollleft ;x>=promptsz (x>(promptsz-1))
  102. ;x<promptsz - скролл влево
  103.         dec (hl)
  104.         jr editcmd_scroll0
  105. editcmd_noscrollleft
  106.         ld a,e ;scrx
  107.         cp txtscrwid
  108.         jr c,editcmd_noscrollright
  109. ;x>=txtscrwid - скролл вправо
  110.         inc (hl)
  111.         jr editcmd_scroll0
  112. editcmd_noscrollright
  113. ;prcmd
  114.         ld de,_COLOR
  115.         SETCOLOR_
  116.         ;ld de,+(txtscrhgt-1)*256+0
  117.         ld de,CMDLINEY*256+0
  118.         SETXY_
  119.         ld hl,cmdprompt
  120.         ld c,0
  121.         call prtext
  122.         push bc
  123.         ld a,'>'
  124.         PRCHAR_
  125.         pop bc
  126.         inc c
  127.         ld hl,(curcmdscroll)
  128.         ld h,0
  129.         ld de,cmdbuf
  130.         add hl,de
  131.         call prtext
  132. ;добьём остаток строки пробелами
  133.         ld hl,tspaces
  134.         jp prtext
  135.  
  136. tspaces
  137.         ds txtscrwid-1,' '
  138.         db 0
  139.  
  140. cmdprNchars
  141. ;hl=buffer
  142. ;de=size
  143. ;out: hl=buffer+size
  144.         ex de,hl
  145.         push de
  146.         push hl
  147.         call sendchars
  148.         pop hl
  149.         pop de
  150.         add hl,de
  151.         ret
  152.        
  153. prtext
  154. ;c=x
  155.         push bc
  156.         push hl
  157.         ld a,txtscrwid-1
  158.         sub c
  159.         ld c,a
  160.         push bc
  161.         call strlen ;hl=length
  162.         pop bc
  163.         ld b,0
  164.         call minhl_bc_tobc
  165.         ld h,b
  166.         ld l,c
  167.         pop de
  168.         pop bc ;c=x
  169.         ld a,h
  170.         or l
  171. ;de=buf
  172. ;hl=len
  173.         push bc
  174.         push hl
  175.         call nz,sendchars
  176.         pop hl
  177.         pop bc
  178.         add hl,bc
  179.         ld c,l
  180. ;c=x        
  181.         ret
  182.  
  183. minhl_bc_tobc
  184.         or a
  185.         sbc hl,bc
  186.         add hl,bc
  187.         ret nc ;bc<=hl
  188.         ld b,h
  189.         ld c,l
  190.         ret
  191.  
  192. strdelch
  193. ;delete char at (hl-1), shift string left
  194. ;keeps ix
  195. editcmd_bs0
  196.         ld a,(hl)
  197.         dec hl
  198.         ld (hl),a
  199.         inc hl
  200.         inc hl
  201.         or a
  202.         jr nz,editcmd_bs0
  203.         ret
  204.  
  205. strinsch
  206. ;insert char E at (hl), shift string right
  207. ;keeps ix
  208. editcmd_ins0
  209.         ld a,(hl)
  210.         ld (hl),e
  211.         ld e,a
  212.         inc hl
  213.         or a
  214.         jr nz,editcmd_ins0
  215.         ld (hl),a
  216.         ret
  217.  
  218. curcmdscroll ;сдвиг команды относительно экрана
  219.         db 0
  220. curcmdx ;не на экране, а внутри команды
  221.         db 0
  222. cmdprompt
  223.         ds MAXPATH_sz;MAXCMDSZ+1
  224. tcmd
  225.         db "cmd "
  226. tcmd_sz=$-tcmd
  227. cmdbuf
  228.         db 0
  229.         ds cmdbuf+MAXCMDSZ+1-$
  230.