?login_element?

Subversion Repositories NedoOS

Rev

Rev 646 | 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 de
  175.         push hl
  176.         call nz,sendchars
  177.         pop hl
  178.         pop de
  179.         pop bc
  180.         ld a,l
  181.         add a,c
  182.         ld c,a
  183.          add hl,de
  184.          inc hl
  185. ;c=x        
  186. ;hl=after terminator
  187.         ret
  188.  
  189. minhl_bc_tobc
  190.         or a
  191.         sbc hl,bc
  192.         add hl,bc
  193.         ret nc ;bc<=hl
  194.         ld b,h
  195.         ld c,l
  196.         ret
  197.  
  198. strdelch
  199. ;delete char at (hl-1), shift string left
  200. ;keeps ix
  201. editcmd_bs0
  202.         ld a,(hl)
  203.         dec hl
  204.         ld (hl),a
  205.         inc hl
  206.         inc hl
  207.         or a
  208.         jr nz,editcmd_bs0
  209.         ret
  210.  
  211. strinsch
  212. ;insert char E at (hl), shift string right
  213. ;keeps ix
  214. editcmd_ins0
  215.         ld a,(hl)
  216.         ld (hl),e
  217.         ld e,a
  218.         inc hl
  219.         or a
  220.         jr nz,editcmd_ins0
  221.         ld (hl),a
  222.         ret
  223.  
  224. curcmdscroll ;сдвиг команды относительно экрана
  225.         db 0
  226. curcmdx ;не на экране, а внутри команды
  227.         db 0
  228. cmdprompt
  229.         ds MAXPATH_sz;MAXCMDSZ+1
  230. tcmd
  231.         db "cmd "
  232. tcmd_sz=$-tcmd
  233. cmdbuf
  234.         db 0
  235.         ds cmdbuf+MAXCMDSZ+1-$
  236.