?login_element?

Subversion Repositories NedoOS

Rev

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