?login_element?

Subversion Repositories NedoOS

Rev

Rev 637 | 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.         SETX_;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_c
  132. ;добьём остаток строки пробелами
  133.         ;ld hl,tspaces
  134.         ;jp prtext_c
  135.         jp clearrestofline
  136.  
  137. ;tspaces
  138. ;        ds txtscrwid-1,' '
  139. ;        db 0
  140.  
  141. cmdprNchars
  142. ;hl=buffer
  143. ;de=size
  144. ;out: hl=buffer+size
  145.         ex de,hl
  146.         push de
  147.         push hl
  148.         call sendchars
  149.         pop hl
  150.         pop de
  151.         add hl,de
  152.         ret
  153.        
  154. prtext
  155.         ;ld c,0
  156.         push hl ;text
  157.         call strlen ;hl=length
  158.         jr prtextgo
  159. prtext_c
  160. ;c=x
  161.         push hl ;text
  162.         push bc
  163.         ld a,txtscrwid-1
  164.         sub c
  165.         ld c,a
  166.         push bc
  167.         call strlen ;hl=length
  168.         pop bc
  169.         ld b,0
  170.         call minhl_bc_tobc
  171.         ld h,b
  172.         ld l,c
  173.         pop bc ;c=x
  174. prtextgo
  175.         pop de ;text
  176.         ld a,h
  177.         or l
  178. ;de=buf
  179. ;hl=len
  180.         push bc
  181.         push hl
  182.         call nz,sendchars
  183.         pop hl
  184.         pop bc
  185.         add hl,bc
  186.         ld c,l
  187. ;c=x        
  188.         ret
  189.  
  190. minhl_bc_tobc
  191.         or a
  192.         sbc hl,bc
  193.         add hl,bc
  194.         ret nc ;bc<=hl
  195.         ld b,h
  196.         ld c,l
  197.         ret
  198.  
  199. strdelch
  200. ;delete char at (hl-1), shift string left
  201. ;keeps ix
  202. editcmd_bs0
  203.         ld a,(hl)
  204.         dec hl
  205.         ld (hl),a
  206.         inc hl
  207.         inc hl
  208.         or a
  209.         jr nz,editcmd_bs0
  210.         ret
  211.  
  212. strinsch
  213. ;insert char E at (hl), shift string right
  214. ;keeps ix
  215. editcmd_ins0
  216.         ld a,(hl)
  217.         ld (hl),e
  218.         ld e,a
  219.         inc hl
  220.         or a
  221.         jr nz,editcmd_ins0
  222.         ld (hl),a
  223.         ret
  224.  
  225. curcmdscroll ;сдвиг команды относительно экрана
  226.         db 0
  227. curcmdx ;не на экране, а внутри команды
  228.         db 0
  229. cmdprompt
  230.         ds MAXPATH_sz;MAXCMDSZ+1
  231. ;tcmd
  232. ;        db "cmd "
  233. ;tcmd_sz=$-tcmd
  234. cmdbuf
  235.         db 0
  236.         ds cmdbuf+MAXCMDSZ+1-$
  237.