SHELL: подвигал буферы; комманда DIR теперь работает с путями корректно

This commit is contained in:
Anatoliy Belyanskiy 2024-05-25 03:17:00 +10:00
parent 6088a447f7
commit 9ad718d6b3
17 changed files with 427 additions and 400 deletions

View File

@ -75,9 +75,9 @@ BATCH:
;
push hl ; á®åà. ¨¬ï bat-ä ©« 
ld de,work_buffer ; 512 ¬¥áâ­ë© ¡ãä¥à
ld de,Buffers.work.buffer ; 512 ¬¥áâ­ë© ¡ãä¥à
call copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
ld hl,work_buffer ; 512 ¬¥áâ­ë© ¡ãä¥à
ld hl,Buffers.work.buffer ; 512 ¬¥áâ­ë© ¡ãä¥à
ld de,BAT_PRM_ARRAY ; â ¡«¨æ  㪠§ â. ­  "ZERO".."NINE"
ld b,BAT_PRM_ARRAY.TOTAL ; ç¨á«® á«®¢ "ZERO".."NINE"
call MAKE_BATCH_PRM_ARRAY
@ -123,15 +123,15 @@ BATCH:
ret
; [x] 11/12/23 ¢«®¦¥­­ë¥ bat
.new_process:
ld de,work_buffer2
ld de,Buffers.work.buffer2
call copy_string
;
ld hl,.shell
ld de,struct_input_line+5
ld de,Buffers.input_line.Path
call copy_string
;
ld hl,work_buffer2
ld de,struct_input_line+5 + .shell.size - 1
ld hl,Buffers.work.buffer2
ld de,Buffers.input_line.Path + .shell.size - 1
call copy_string
;
; ld c,Dss.CurDisk
@ -139,7 +139,7 @@ BATCH:
; add a,'A'
; ld (.shell),a
;
ld hl,struct_input_line+5
ld hl,Buffers.input_line.Path
ld bc,Dss.Exec
RST ToDSS
;!TODO ¢«®¦¥­­ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â­® ¢ ¢ë§ë¢ î騩 bat
@ -172,9 +172,9 @@ BATCH:
NEWLINE:
LD (cmd_break.sp),SP ; [x] 11/12/23 cmd_break
;
ld de,struct_input_line+5 ;!HARDCODE
ld de,Buffers.input_line.Path
.ADDBAT: push de
call READBAT ; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©«  ¢ "work_buffer1"
call READBAT ; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©«  ¢ "Buffers.work.buffer1"
pop de
;!TODO ¤®¤¥« âì âãâ ­®à¬ «ì­ãî ¯à®¢¥àªã ­  ®¡«®¬ á ç⥭¨¥¬ ä ©« , ¢ë¢®¤¨âì ®è¨¡ªã
jp c,cmd_break.exit
@ -182,11 +182,11 @@ NEWLINE:
jr nz,.BATLINE
;
ex de,hl
ld de,struct_input_line+5
ld de,Buffers.input_line.Path
sbc hl,de
jp z,cmd_break.exit; ;[x] <Vasil> ã¡à ­ ¡ £ á ­¥§ ªàëâë¬ BAT-ä ©«®¬
ld a,l
ld (struct_input_line+4),a ; ¤«¨­  áâப¨
ld (Buffers.input_line.Symbols_Num),a ; ¤«¨­  áâப¨
call CMDMODE ; â¥áâ ­  bat-ª®¬ ­¤ë
; ^^^^^^^
;!TODO ¢«®¦¥­­ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â­® ¢ ¢ë§ë¢ î騩 bat
@ -200,21 +200,21 @@ NEWLINE:
; ret
;
.BATLINE:
ld hl,work_buffer1
.loop: call MOVWORD ; ᪮¯¨à. work_buffer1 -> struct_input_line+5
ld hl,Buffers.work.buffer1
.loop: call MOVWORD ; ᪮¯¨à. Buffers.work.buffer1 -> Buffers.input_line.Path
jr c,.ADDBAT
ld a,b
ld (MOVWORD.count),a ; ®áâ «®áì ¯à®¯ àá¨âì ¯à®ç¨â ­­ëå ¡ ©â®¢
push hl
ex de,hl
ld de,struct_input_line+5
ld de,Buffers.input_line.Path
sbc hl,de
ld a,l
ld (struct_input_line+4),a ; ¤«¨­  áâப¨
ld (Buffers.input_line.Symbols_Num),a ; ¤«¨­  áâப¨
call CMDMODE ; â¥áâ ­  bat-ª®¬ ­¤ë
; ^^^^^^^
;!TODO ¢«®¦¥­­ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â­® ¢ ¢ë§ë¢ î騩 bat
ld de,struct_input_line+5
ld de,Buffers.input_line.Path
pop hl
jr .loop
@ -255,7 +255,7 @@ MOVWORD:
;!TODO ¤®¤¥« âì âãâ ­®à¬ «ì­ãî ¯à®¢¥àªã ­  ®¡«®¬ á ç⥭¨¥¬ ä ©« , ¢ë¢®¤¨âì ®è¨¡ªã
RET C
;ld hl,BATBUFF ; 128 ¡ãä¥à (ccp.asm) "work_buffer1"
ld hl,work_buffer1
ld hl,Buffers.work.buffer1
ld b,a ; ç¨á«® ¯à®ç¨â. ¡ ©â
or a
jr nz,.loop2
@ -264,8 +264,7 @@ MOVWORD:
; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©« 
READBAT:
;ld hl,T99B9 ; 128 ¡ãä¥à ¯®¤ ¤ ­­ë¥ (ccp.asm) "work_buffer1"
ld hl,work_buffer1
ld hl,Buffers.work.buffer1
ld de,128 ; ᪮«ìª®
ld a,(BAT_FM) ; ¤¥áªà. bat-ä ©« 
ld c,Dss.Read ; ç⥭¨¥ ä ©« 
@ -288,18 +287,18 @@ CMDMODE:
call EVALCMD ; (batch.asm)
;ld ix,T96AC ; ­ã¦­®?? § ª®¬¥­â à¨« (inline.asm)
;ld hl,T96AE ;;256 ¡ãä¥à (inline.asm)
ld hl,struct_input_line+5
ld hl,Buffers.input_line.Path
ld a,(hl)
cp "@" ; 40h
jr nz,.A8240
dec hl
;ld hl,struct_input_line+4;;
;ld hl,Buffers.input_line.Symbols_Num;;
dec (hl)
jr z,.A825B
ld c,(hl) ; ¤«¨­  áâப¨
inc hl
ld b,0
;ld hl,work_buffer+256;;
;ld hl,Buffers.work.buffer+256;;
ld d,h
ld e,l
inc hl
@ -311,7 +310,7 @@ CMDMODE:
jr z,.A825B ; off
; ¢ë¢¥á⨠á¨áâ. ¯ãâì ¨ áâபã ᮤ¥à¦¨¬®£® bat-ä ©« 
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
;ld de,struct_input_line+5
;ld de,Buffers.input_line.Path
;call A95DE ; ¢ë¢®¤ íªà ­. ¯ã⨠á ">" (inline.asm)
; ¢ë¢¥á⨠íªà ­. ¯ãâì ¨ ¢¢¥¤. ª®¬ ­¤ã
ld c,BIOS.LP_GET_PLACE ; ã§­ âì ¯®«®¦. ªãàá®à 
@ -322,8 +321,8 @@ CMDMODE:
ld de,(YXpos) ; Y/X ­ ç «® ª®¬-áâப¨
ld c,Dss.Locate ; ãáâ. ¯®«®¦. ªãàá®à 
RST ToDSS
;ld hl,work_buffer+256;;
ld hl,struct_input_line+4 ; ¤«¨­  áâப¨
;ld hl,Buffers.work.buffer+256;;
ld hl,Buffers.input_line.Symbols_Num ; ¤«¨­  áâப¨
ld a,(hl)
ld b,a
inc hl ;+5
@ -348,25 +347,25 @@ CMDMODE:
;
;
;ld a,(D96AD) ;; ¤«¨­  áâப¨ (inline.asm)
;ld a,(struct_input_line+4);-
;ld a,(Buffers.input_line.Symbols_Num);-
;or a
;ret z
;call newline
;jr A8264
;
.A825B: ;ld a,(D96AD) ;; ¤«¨­  áâப¨ (inline.asm)
ld a,(struct_input_line+4)
ld a,(Buffers.input_line.Symbols_Num)
or a
ret z
;A8264: ld hl,T96AE ;;256 ¡ãä¥à (inline.asm)
;ld hl,struct_input_line+5
;ld hl,Buffers.input_line.Path
;dec hl
; ã¡à âì ª®­æ¥¢ë¥ ¯à®¡¥«ë áâப¨
ld hl,struct_input_line+4
ld hl,Buffers.input_line.Symbols_Num
ld c,(hl) ; hl=¤«¨­  áâப¨ (inline.asm)
ld b,0
inc hl
;ld hl,work_buffer+256;;
;ld hl,Buffers.work.buffer+256;;
.A826C: ld a,(hl)
cp " "
jr nz,.A8276
@ -391,23 +390,23 @@ CMDMODE:
ld c,a ; ¤«¨­  á«®¢  ¨«¨ áâப¨ ?
ld hl,BATLIST ; ª®¬ ­¤ë bat + dos-ª®¬ ­¤ë
;
; de=struct_input_line+5, c=¤«¨­  áâப¨ (¡¥§ ª®­æ. ¯à®¡¥«®¢)
; de=Buffers.input_line.Path, c=¤«¨­  áâப¨ (¡¥§ ª®­æ. ¯à®¡¥«®¢)
; ¢ë¯®«­. ª®¬ ­¤ã ¨«¨ § ¯ãáâ¨âì ä ©«
jp COMP.start
; ¤®«¦­  ã¡à âì ª®­æ. ¯à®¡¥«ë ¨ ãáâ. ¤«¨­ã áâப¨, ¥á«¨ ã१ « áì
EVALCMD: xor a
ld hl,struct_input_line+4 ;!HARDCODE
ld hl,Buffers.input_line.Symbols_Num ;!HARDCODE
ld c,(hl)
ld b,a
inc hl
add hl,bc
ld (hl),a ; 0 ¢ ª®­¥æ áâப¨
sbc hl,bc
ld de,work_buffer2 ; 256 ¡ãä¥à
ld de,Buffers.work.buffer2 ; 256 ¡ãä¥à
call EVALSTR
ld hl,work_buffer2 ;work_buffer+256
ld de,struct_input_line+5 ; ªã¤ 
ld hl,Buffers.work.buffer2 ;work_buffer+256
ld de,Buffers.input_line.Path ; ªã¤ 
ld bc,255 ;!HARDCODE
.loop: ld a,(hl)
ldi
@ -416,7 +415,7 @@ EVALCMD: xor a
jr nz,.loop
dec b
ld a,b
ld (struct_input_line+4),a ; ¤«¨­  áâப¨ (edline.asm)
ld (Buffers.input_line.Symbols_Num),a ; ¤«¨­  áâப¨ (edline.asm)
and a
ret

View File

@ -5,11 +5,11 @@
;///////////////////////////////////////////////////
cmd_chdir:
ex de,hl
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
xor a
ld hl,work_buffer1;
ld hl,Buffers.work.buffer1;
cp (hl)
jr nz,.chdir
ld (hl),"." ; ".." த¨â. ¯ ¯ª 

View File

@ -7,7 +7,7 @@
;///////////////////////////////////////////////////
cmd_cls: ex de,hl ; hl=ª®¬-áâப 
;ld de,T9186 ; ¡ãä¥à ¯®¤ ¯ à ¬¥âà
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
push de
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS

View File

@ -9,10 +9,10 @@
;///////////////////////////////////////////////////
cmd_date:
ex de,hl ; hl=ª®¬-áâப 
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld a,(de)
or a
jr z,.cmd_dt1
@ -104,11 +104,11 @@ cmd_date:
cmd_time:
ex de,hl
;ld de,T9186
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch
RST ToDSS
;ld de,T9186
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld a,(de)
or a
jr z,cmd_tm1

View File

@ -4,10 +4,10 @@
;
;///////////////////////////////////////////////////
cmd_del: ex de,hl
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch
RST ToDSS
ld hl,work_buffer1;
ld hl,Buffers.work.buffer1;
ld c,Dss.Delete
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï

View File

@ -7,7 +7,7 @@ cmd_dir: push de
;;;; [ ] ¯®¤¤¥à¦ª  ¯ à ¬¥â஢
; § ­ã«ï¥¬ ¢á¥ ¯ à ¬¥âàë ­  áâ àâ¥
xor a
ld (work_buffer2),a
ld (Buffers.work.buffer2),a
ld (read_disk_info.full),a
ld (.key_p),a
; ¢ë¯®«­ï¥¬/­ áâà ¨¢ ¥¬ ¢á¥ ­ ©¤¥­­ë¥ ¯ à ¬¥âàë ¢ áâப¥
@ -38,43 +38,43 @@ cmd_dir: push de
ld (S_HIGH),a
;
ex de,hl
ld de,work_buffer1
ld de,Buffers.work.buffer1
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;!TODO âãâ ¢ work_buffer1 «¥¦¨â ¯ãâì ¨/¨«¨/«¨¡® ¬ áª  ä ©« 
;!TODO âãâ ¢ Buffers.work.buffer1 «¥¦¨â ¯ãâì ¨/¨«¨/«¨¡® ¬ áª  ä ©« 
; ­ ¤® à §®¡à âì ¥ñ Dss.EX_Path ¢ë¤¥«¨âì ¥á«¨ ¥áâì ¤¨áª, ¯ãâì ¨ ¬ áªã, ¯®á«¥ 祣® 㦥
; ®â¯¥ç â뢠âì ¯ãâì ¢ è ¯ª¥, ã§­ ¢ âì CurDisk ª ª ¢ .skip ¢ëè¥. „¥« âì íâ® ¤® ¢ë§®¢ 
; ¯à®æ¥¤ãàë read_disk_info. ‹ãçè¥ ¤¥« âì íâ® ¯®á«¥ ¬¥âª¨ .skip
;
ld a,(work_buffer1)
ld a,(Buffers.work.buffer1)
or a
;jr nz,.SkipMask ; § ¤ ­  ¬ áª  ¨¬ñ­
jr z,.NoSkipMask ; ­¥ § ¤ ­  ¬ áª  ¨¬ñ­
; á®åà ­¨âì ⥪ã騩 ¯ãâì ¢ work_buffer2
; á®åà ­¨âì ⥪ã騩 ¯ãâì ¢ Buffers.work.buffer2
; ˆ§ ¡ãä¥à  DE § ¯®¬­¨âì ¬ áªã (¯¥à¢ë¥ á¯à ¢  ᨬ¢®«ë ¯®á«¥ ¯¥à¢®£® á¯à ¢  '\') ¨ ã¡à âì ¥ñ
; ¥á«¨ ¬ áª¨ ­¥â ¨ ¯®á«¥¤­¨© ¢ áâப¥ '\', â® ¯®â®¬ ¤®¡ ¢¨âì ¬ áªã ª ª ¢ "; ¤®¡ ¢«¥­¨¥ ¬ áª¨"
; ᤥ« âì CD ¢ ¤¨à¥ªâ®à¨î ¨§ ¡ãä¥à  DE
; make_short_path
;
ld hl,work_buffer1
ld hl,Buffers.work.buffer1
ld bc,Dss.EX_Path.GET_ALL
rst ToDSS
;
and %00001100 ; ¨¬ï ¤¨áª  ¨ ¯ãâì
jr z,.SkipMask
;
ld hl,work_buffer2+2
ld hl,Buffers.work.buffer2+2
ld c,Dss.CurDir
rst ToDSS
ld c,Dss.CurDisk
rst ToDSS
add a,"A"
ld (work_buffer2),a
ld (Buffers.work.buffer2),a
ld a,":"
ld (work_buffer2+1),a
ld (Buffers.work.buffer2+1),a
;
xor a
ld hl,work_buffer1
ld hl,Buffers.work.buffer1
ld bc,256
cpir
;!FIXIT ¯à®¢¥àª  ­  ®è¨¡ªã ¯® ä« £ã P/V
@ -95,12 +95,12 @@ cmd_dir: push de
ld de,PRM1
call ncopy_string ; á®å࠭塞 ¬ áªã ä ©« 
;
ld hl,work_buffer1
ld hl,Buffers.work.buffer1
ld c,Dss.ChDir
rst ToDSS
;
ld hl,PRM1
ld de,work_buffer1
ld de,Buffers.work.free
call ncopy_string ; ¢®ááâ ­ ¢«¨¢ ¥¬ ¬ áªã ä ©« 
;
ld a,(PRM1)
@ -109,7 +109,7 @@ cmd_dir: push de
;
; ¤®¡ ¢«¥­¨¥ ¬ áª¨
.NoSkipMask: ld hl,mask_fname ; "*.*"
ld de,work_buffer1
ld de,Buffers.work.free
call copy_string
; !TEST 23/05/24
.SkipMask: LD C,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª
@ -118,8 +118,8 @@ cmd_dir: push de
;
CALL Print_Header
; [ ] 01/10/23
ld hl,work_buffer1 ; ¨¬ï ä ©« 
ld de,work_buffer1 ; 80 ¡ãä¥à
ld hl,Buffers.work.free ; ¨¬ï ä ©« 
ld de,Buffers.work.buffer1 ; 80 ¡ãä¥à
ld a,FAT_ATTR.NoVolID ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
RST ToDSS
@ -144,13 +144,13 @@ cmd_dir: push de
;ld (.key_p),a ; ®â¬¥­ï¥¬ ESC
.skip_esc: ld a,32-1
.skip_wait: PUSH AF
ld hl,work_buffer1+33 ; 80
ld hl,Buffers.work.buffer1+33 ; 80
;push af
;ld de,33
;add hl,de
call PRNNAME
;
ld ix,work_buffer1 ; 80
ld ix,Buffers.work.buffer1 ; 80
ld a,(ix+32) ;  âਡãâ ⥪. § ¯¨á¨
and FAT_ATTR.DIRECTORY ; ¯ ¯ª  ?
jr z,.Calc_Size ; ­¥â
@ -201,7 +201,7 @@ cmd_dir: push de
adc a,0
ld (S_HIGH),a
;exx
.next: ld de,work_buffer1 ; 80 ¡ãä¥à
.next: ld de,Buffers.work.buffer1 ; 80 ¡ãä¥à
ld c,Dss.F_Next ; ¯®¨áª á«¥¤.
RST ToDSS
jp nc,.loop ; ­ § ¤ ¢ 横«, ¥á«¨ ­¥ ª®­¥æ ᯨ᪠
@ -242,7 +242,7 @@ cmd_dir: push de
CALL MESSAGE ; ¢ë¢¥á⨠áâபã
;
; [ ] 23/05/2024
ld hl,work_buffer2
ld hl,Buffers.work.buffer2
ld c,Dss.ChDir
ld a,(hl)
or a
@ -278,7 +278,13 @@ Print_Header: ; %1
ld a,'"'
ld (hl),a
inc hl
ld a,(screen_path) ; ¤¨áª ; !TODO ¢®â íâ® § ¬¥­¨âì ­  ¢ë¢®¤ ç¥áâ­®£® ¤¨áª 
push hl
;
ld c,Dss.CurDisk
rst ToDSS
add a,"A"
;
pop hl
ld (hl),a
inc hl
ld a,'"'
@ -290,12 +296,31 @@ Print_Header: ; %1
ld hl,serial_string ; áâப  á¥à¨©­®£® ­®¬¥à  ¤¨áª 
ld de,PRM2 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; ¤¨áª ; !TODO ¢®â íâ® § ¬¥­¨âì ­  ¢ë¢®¤ ç¥áâ­®£® ¯ãâ¨
; ¯à¨¬¥à ¢ë¢®¤  ¤«¨­­®© áâப¨ ¯ã⨠¥áâì ¢ print_compath:
; %3
ld hl,screen_path ; !FIXIT ¥á«¨ ¢¢¥á⨠"DIR gamez\*.*", â® ®â®¡à ¦ ¥¬ë© ¯ãâì ¢ § £®«®¢ª¥ ¡ã¤¥â ­¥¢¥à­ë¬
ld de,PRM3 ; 16 ¡ãä¥à
CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; %3..5
;push hl
ld hl,Buffers.work.free + 256 + 128 ; 128 - ­  ¢á直© á«ãç ©
ld c,Dss.CurDir
rst ToDSS
ld hl,PRM3
ld a,(PRM1 + 1)
ld (hl),a
inc hl
ld (hl),':'
;
ld hl,PRM3+2
ld de,PRM3+2+1
ld (hl),0
ld bc,16+16+16-1-2
ldir
;
ld hl,Buffers.work.free + 256 + 128 ; á¨áâ. ¯ãâì
ld de,PRM3 + 2 ;+PRM4..5 ; 2 + 48 ¡ ©â®¢ ¡ãä¥à
call make_short_path
;pop hl
; ld hl,Buffers.screen_path ; !FIXIT ¥á«¨ ¢¢¥á⨠"DIR gamez\*.*", â® ®â®¡à ¦ ¥¬ë© ¯ãâì ¢ § £®«®¢ª¥ ¡ã¤¥â ­¥¢¥à­ë¬
; ld de,PRM3 ;+PRM4 ; 32 ¡ ©â  ¡ãä¥à
; CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
;
ld de,MAIN_MSG.DIR_1 ; ¨­¤¥ªá "Volume in drive %1..."
JP MESSAGE ; ¢ë¢¥á⨠áâபã
@ -318,7 +343,7 @@ PRNNAME: dec hl
ldi
ldi
ld (de),a
ld ix,work_buffer1
ld ix,Buffers.work.buffer1
call PRNSIZE ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©«  ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
call PRNDATE ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
call PRNTIME ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
@ -593,7 +618,7 @@ SIZE_BUFFER: db " " ;
; ¨­ ï «®£¨ª  ¯®«ã祭¨ï ¬¥âª¨ ⮬  - á­ ç «  ¨é¥âáï ¢ ª®à­¥¢®© ¤¨à¥ªâ®à¨¨,
; ¥á«¨ â ¬ ­¥â, â® ¡¥àñâáï ¨§ BPB
read_disk_info: OR #80
LD HL,work_buffer
LD HL,Buffers.work.buffer
.full+1: LD B,0
LD C,Dss.DskInfo
RST ToDSS
@ -681,7 +706,7 @@ read_disk_info: OR #80
.no_full_space_option:
; parse
LD D,0
LD HL,work_buffer
LD HL,Buffers.work.buffer
; âãâ ¢ HL ¤«¨­  ¯®«ï "” ©«®¢ ï á¨á⥬ "
LD E,(HL)
ADD HL,DE
@ -723,14 +748,14 @@ read_disk_info: OR #80
; ¯®¨áª ¬¥âª¨
;ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
ld hl,SlashMaskFname ; "\*.*" ¨¬ï ¬¥âª¨
ld de,work_buffer1 ; ªã¤ 
ld de,Buffers.work.buffer1 ; ªã¤ 
ld a,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬ 
ld bc,Dss.F_First.FATname ; f_first, ä®à¬ â 11
RST ToDSS
;push af
;call restore_path ; ¢®ááâ. ⥪. ¯ãâì
;pop af
ld hl,work_buffer1 + BUFFER_FIND.REC_Name ; ­ ç «® ¬¥âª¨ ¢ ¡ãä¥à¥ f_first
ld hl,Buffers.work.buffer1 + BUFFER_FIND.REC_Name ; ­ ç «® ¬¥âª¨ ¢ ¡ãä¥à¥ f_first
jr nc,volume_label ; ¬¥âª  ¢ ª®à­¥¢®¬ ª â «®£¥
; ¡¥àñ¬ ¬¥âªã ¨§ BPB
; âãâ ¢ HL ¤«¨­  ¯®«ï "Œ¥âª  ¤¨áª "
@ -749,26 +774,26 @@ read_disk_info: OR #80
DJNZ .loop
POP HL ; á­¨¬ ¥¬ «¨è­¥¥
; ­¥â ¬¥âª¨
.no_volume_label:; %4
.no_volume_label:; %6
ld hl,volume_string_no ; áâப 
ld de,PRM4 ; ªã¤ 
ld de,PRM6 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
XOR A
LD (PRM5),A
LD (PRM7),A
ret
.good_label: POP HL
PUSH HL ; ⮫ª ¥¬ «¨è­¥¥
; ¥áâì ¬¥âª 
volume_label: POP DE ; á­¨¬ ¥¬ «¨è­¥¥
; %5
ld de,PRM5
; %7
ld de,PRM7
ld bc,11 ;!HARDCODE ¤«¨­  ¬¥âª¨
ldir
xor a
ld (de),a
; %4
; %6
ld hl,volume_string_yes ; áâப 
ld de,PRM4 ; ªã¤ 
ld de,PRM6 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
ret
;

View File

@ -6,11 +6,11 @@
cmd_mkdir:
ex de,hl
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld hl,T9186 ; ¨¬ï ¯ ¯ª¨
ld hl,work_buffer1;
ld hl,Buffers.work.buffer1;
ld c,Dss.MkDir ; á®§¤ âì ¯ ¯ªã
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï

View File

@ -34,7 +34,7 @@ cmd_path:
; <20>®ª § âì á¨á⥬­ë© ¯ãâì
A85B9: ;ld de,T9186 ; ªã¤ 
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld hl,T858C ; ¨¬ï ¯¥à¥¬¥­­®© "PATH="
ld bc,Dss.Environ.Get ; ¯®«ãç¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
RST ToDSS
@ -43,7 +43,7 @@ A85B9: ;ld de,T9186 ;
ld c,Dss.PChars
RST ToDSS
;ld hl,T9186 ; áâப 
ld hl,work_buffer1;
ld hl,Buffers.work.buffer1;
ld c,Dss.PChars
RST ToDSS
jp newline

View File

@ -6,17 +6,17 @@
cmd_rename:
ex de,hl
;ld de,T9186
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch
RST ToDSS
;ld de,T9206
ld de,work_buffer+256;
ld de,Buffers.work.buffer+256;
ld c,Dss.GSwitch
RST ToDSS
;ld hl,T9186
;ld de,T9206
ld hl,work_buffer1;
ld de,work_buffer+256;
ld hl,Buffers.work.buffer1;
ld de,Buffers.work.buffer+256;
ld c,Dss.Rename
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï

View File

@ -6,11 +6,11 @@
cmd_rmdir:
ex de,hl
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1;
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld hl,T9186 ; ¨¬ï ¯ ¯ª¨
ld hl,work_buffer1;
ld hl,Buffers.work.buffer1;
ld c,Dss.RmDir ; 㤠«¨âì ¯ ¯ªã
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï

View File

@ -21,11 +21,11 @@ cmd_set:ld a,(de) ;
; <20>®ª § âì á¨á⥬­®¥ ®ªà㦥­¨¥
A85EE: ;ld hl,T9186 ; ªã¤ 
ld hl,work_buffer1;
ld hl,Buffers.work.buffer1;
ld bc,Dss.Environ.Read ; ¯®«ãç¨âì á¨áâ. ®ªà㦥­¨¥
RST ToDSS
;ld hl,T9186
ld hl,work_buffer1;
ld hl,Buffers.work.buffer1;
A85F8: ld c,Dss.PChars
RST ToDSS
call newline

View File

@ -4,12 +4,12 @@
; ”ã­ªæ¨ï áâப¨ । ªâ¨à®¢ ­¨ï. ˆ¬¥¥â ¨áâ®à¨î ¢¢®¤¨¬ëå áâப.
; ”ã­ªæ¨ï ¨á¯®«ì§ã¥â ¤«ï ᢮¥© à ¡®âë ¢à¥¬¥­­ë© ¡ãä¥à:
;
; work_buffer - íâ®â ¡ãä¥à ¨á¯®«ì§ã¥â ¨áâ®à¨ï
; ;work_buffer+256 - ¢®§¢à é ¥âáï ­ ¡à ­­ ï áâப 
; Buffers.work.buffer - íâ®â ¡ãä¥à ¨á¯®«ì§ã¥â ¨áâ®à¨ï
; ;Buffers.work.buffer+256 - ¢®§¢à é ¥âáï ­ ¡à ­­ ï áâப 
;
; Š« ¢¨è¨:
; Esc - á¡à®á¨âì ⥪ãéãî áâபã
; Enter - ¢ë室 ¨§ ä㭪樨 (¢ work_buffer+256 £®â®¢ ï áâப )
; Enter - ¢ë室 ¨§ ä㭪樨 (¢ Buffers.work.buffer+256 £®â®¢ ï áâப )
; Ins - ᬥ­  ०¨¬  ¢¢®¤  (¢áâ ¢ª /§ ¬¥­ )
; , ªãàá®à - ¯à®ªàã⪠ ¨áâ®à¨¨
; PageUp - ¢ ­ ç «® ¨áâ®à¨¨
@ -45,7 +45,7 @@ evCombKey equ 2 ;
; ‘âப  । ªâ¨à®¢ ­¨ï
;
; ‚ë室 ¨§ áâப¨ ¯® ª« ¢¨è¥ <Enter>,
; ;¢ work_buffer+256 = ­ ¡à ­­ ï áâப  (¨«¨ ¯ãáâ ï)
; ;¢ Buffers.work.buffer+256 = ­ ¡à ­­ ï áâப  (¨«¨ ¯ãáâ ï)
;===========================================================
input_line:
ld a,1
@ -66,8 +66,8 @@ input_line:
; ‚뢮¤ ¯ã⨠¢ ª®¬-áâப¥ ­  íªà ­ + ­®¢ ï è¨à¨­  ¯®«ï ¢¢®¤ 
;---------------------------------------------------------------
print_compath:
ld hl,system_path ; á¨áâ. ¯ãâì
ld de,screen_path+2 ; ¡ãä¥à ¤«ï ª®à®âª®£® ¯ãâ¨
ld hl,Buffers.sys_path ; á¨áâ. ¯ãâì
ld de,Buffers.screen_path+2 ; ¡ãä¥à ¤«ï ª®à®âª®£® ¯ãâ¨
call make_short_path
xor a
ld (de),a ; § ­ã«¥­¨¥ áâப¨
@ -91,7 +91,7 @@ print_compath:
RST ToBIOS
pop bc
; ¢ë¢¥á⨠íªà ­. ¯ãâì
ld hl,screen_path ; íªà ­. ¯ãâì
ld hl,Buffers.screen_path ; íªà ­. ¯ãâì
;call print_inpchar ; ¢ë¢®¤ áâப¨ ¯® áç¥â稪ã
ld c,BIOS.LP_PRINT_LINE2
RST ToBIOS;
@ -103,68 +103,68 @@ print_compath:
; ‚뢮¤ áâப¨ ~input line~ ­  íªà ­
;-------------------------------------------------
print_inpline:
ld de,(YXpos) ; Y/X ­ ç «® ª®¬-áâப¨
ld c,Dss.Locate ; ãáâ. ªãàá®à
ld de,(YXpos) ; Y/X ­ ç «® ª®¬-áâப¨
ld c,Dss.Locate ; ãáâ. ªãàá®à
RST ToDSS
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
push hl
pop iy
ld a,(iy+3) ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld a,(iy + Input_Line.Left_Shift) ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
add a,l
ld l,a
jr nc,$+3
jr nc,$+3 ; !FIXIT
inc h
inc hl
inc hl
inc hl
inc hl
inc hl
ld a,(width_inpline) ; è¨à¨­  ¯®«ï
ld a,(width_inpline) ; è¨à¨­  ¯®«ï
ld c,a
ld b,a
push bc
xor a
ld de,work_buffer ; ¢à¥¬. ¡ãä¥à
ld de,Buffers.work.buffer ; ¢à¥¬. ¡ãä¥à
push de
ld (de),a
inc de
djnz $-2 ; !FIXIT
ld a,(iy+0)
sub (iy+3)
djnz $-2 ; !FIXIT
ld a,(iy + Input_Line.max_Len)
sub (iy + Input_Line.Left_Shift)
cp c
jr nc,$+3
jr nc,$+3 ; !FIXIT
ld c,a
ld a,(iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld a,(iy + Input_Line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub c
jr nc,$+4
jr nc,$+4 ; !FIXIT
add a,c
ld c,a
pop de
push de
ld a,b
or c
jr z,$+4
jr z,$+4 ; !FIXIT
ldir
pop hl
pop bc
ld a,b ; ¤«¨­  áâப¨
ld a,b ; ¤«¨­  áâப¨
or a
;call nz,print_inpchar ; ¢ë¢®¤ áâப¨ ¯® áç¥â稪ã
;call nz,print_inpchar ; ¢ë¢®¤ áâப¨ ¯® áç¥â稪ã
ld c,BIOS.LP_PRINT_LINE2
call nz,ToBIOS
ld a,(YXpos) ; X ­ ç «® ª®¬-áâப¨
ld e,(iy+2) ;+2 ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(YXpos) ; X ­ ç «® ª®¬-áâப¨
ld e,(iy + Input_Line.Cur_X) ;+2 ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,e
cp width_inpline.MAX ; è¨à¨­  íªà ­ 
cp width_inpline.MAX ; è¨à¨­  íªà ­ 
jr c,prne1__
ld b,width_inpline.MAX-1
sub b
ld d,a ; "­ ¥§¤" §  ¯à ¢ë© ªà ©
ld d,a ; "­ ¥§¤" §  ¯à ¢ë© ªà ©
ld a,e
sub d
ld (iy+2),a ;+2 ­®¢®¥ ¯®«®¦. ªãàá®à 
ld (iy + Input_Line.Cur_X),a ;+2 ­®¢®¥ ¯®«®¦. ªãàá®à 
ld a,b
prne1__:ld (cursor_position),a ; X ¯®«®¦. ªãàá®à  ­  íªà ­¥
prne1__:ld (cursor_position),a ; X ¯®«®¦. ªãàá®à  ­  íªà ­¥
ret
; ¢å®¤: HL - ¯®«­ë© ¯ãâì
@ -257,11 +257,6 @@ handle_event_comb:
; ¯®«¥ ᮡë⨩
what: ds 3
step_scroll equ 1 ; è £ X áªà®««¨­£  áâப¨
@ -269,11 +264,11 @@ step_scroll equ 1 ; 蠣 X
; Ž¡à ¡®â稪 ᮡë⨩ ~Input Line~
;=================================================
event_input_line:
call handle_event ; ç¨â ¥¬ ᮡë⨥
call handle_event ; ç¨â ¥¬ ᮡë⨥
ld hl,event_input_line
push hl
ld iy,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld hl,what ; ᯨ᮪ ᮡë⨩
ld iy,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld hl,what ; ᯨ᮪ ᮡë⨩
ld a,(hl)
inc hl
cp evKeyboard
@ -285,8 +280,8 @@ event_input_line:
; <Enter>
Enter: pop hl ; ¢®ááâ. ¡ « ­á á⥪  (¢ë室 ¨§ ®¡à ¡®â稪 )
xor a
;ld (work_buffer+256),a ; § ¤ âì ¯ãáâãî áâபã
ld hl,struct_input_line+4 ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
;ld (Buffers.work.buffer+256),a ; § ¤ âì ¯ãáâãî áâபã
ld hl,Buffers.input_line.Symbols_Num ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld e,(hl)
cp e
ret z ; ¯ãáâ ï áâப 
@ -309,12 +304,12 @@ Enter: pop hl ;
ld a,b
or a
ret z ; ¡ë«¨ ®¤­¨ ¯à®¡¥«ë
ld de,struct_input_line+4 ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld de,Buffers.input_line.Symbols_Num ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld (de),a ; ­®¢®¥ ç¨á«® (¤«ï history_adding)
ent1__: call history_adding ; ¤®¡ ¢¨âì áâப㠢 history
; ᪮¯¨à. áâப㠢® ¢à¥¬. ¡ãä¥à
; ld hl,struct_input_line+4 ; ®âªã¤ 
; ld de,work_buffer+254 ; ªã¤ 
; ld hl,Buffers.input_line.Symbols_Num ; ®âªã¤ 
; ld de,Buffers.work.buffer+254 ; ªã¤ 
; ld a,(hl) ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; ldi
; or a
@ -327,8 +322,8 @@ ent1__: call history_adding ;
; xor a
; ld (YXpos+1),a;
; ¢®ááâ. ¡ãä¥à
; ld hl,work_buffer+254 ; ®âªã¤ 
; ld de,struct_input_line+4 ; ªã¤ 
; ld hl,Buffers.work.buffer+254 ; ®âªã¤ 
; ld de,Buffers.input_line.Symbols_Num ; ªã¤ 
; ld a,(hl) ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; ldi
; or a
@ -341,57 +336,57 @@ ent1__: call history_adding ;
; ‘®¡ë⨥ - ®¡ëç­ ï ª« ¢¨è 
EvComKeys:
ld a,(hl) ;+1 what
cp #1B ; Esc
jp z,clear_input_line ; ®ç¨áâ¨âì áâப㠢¢®¤ 
cp #0D ; Enter
ld a,(hl) ;+1 what
cp #1B ; Esc
jp z,clear_input_line ; ®ç¨áâ¨âì áâப㠢¢®¤ 
cp #0D ; Enter
jr z,Enter
cp 8 ; Backspace
cp 8 ; Backspace
jr z,inpline_work
cp " "
ret c
inpline_work:
ld de,input_line_done
push de
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ex af,af'
res 7,(iy+1) ;+1 ä« £ ReadyString
ld a,(insert_mode) ; ०¨¬ ¢¢®¤ : 1-inser, 0-overwrite
res 7,(iy + Input_Line.ReadyString) ;+1 ä« £ ReadyString
ld a,(insert_mode) ; ०¨¬ ¢¢®¤ : 1-inser, 0-overwrite
and 1
rrca ; ¢¯à ¢® (¬«.¡¨â -> ¯¥à¥­®á)
or (iy+1)
ld (iy+1),a ;+1 ä« £ ReadyString
rrca ; ¢¯à ¢® (¬«.¡¨â -> ¯¥à¥­®á)
or (iy + Input_Line.ReadyString)
ld (iy + Input_Line.ReadyString),a ;+1 ä« £ ReadyString
ex af,af'
cp 8 ; Backspace
cp 8 ; Backspace
jp z,back_space
ex af,af'
ld a,(iy+4) ; InputSymb
cp (iy+0) ; Max len
ld a,(iy + Input_Line.Symbols_Num) ; InputSymb
cp (iy + Input_Line.max_Len)
jr nz,ILn___
ld a,(iy+2)
add a,(iy+3)
cp (iy+0)
ld a,(iy + Input_Line.Cur_X)
add a,(iy + Input_Line.Left_Shift)
cp (iy + Input_Line.max_Len)
;ret nc
JR NC,LastChar_BEEP
bit 7,(iy+1)
bit 7,(iy + Input_Line.ReadyString)
;ret nz
JR NZ,NoMoreChars_BEEP
ILn___: ld a,(iy+4)
sub (iy+3)
sub (iy+2)
ILn___: ld a,(iy + Input_Line.Symbols_Num)
sub (iy + Input_Line.Left_Shift)
sub (iy + Input_Line.Cur_X)
jr z,no_insert
dec (iy+4)
bit 7,(iy+1)
dec (iy + Input_Line.Symbols_Num)
bit 7,(iy + Input_Line.ReadyString)
jr z,no_insert
inc (iy+4)
inc (iy + Input_Line.Symbols_Num)
; ¢¢®¤ ¢ á¥à¥¤¨­ã ⥪áâ  (¢áâ ¢ª )
ld c,a
ld b,0
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy + Input_Line.Symbols_Num) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
add a,l
ld l,a
jr nc,$+3
jr nc,$+3 ;!FIXIT
inc h
inc hl
inc hl
@ -403,12 +398,12 @@ ILn___: ld a,(iy+4)
dec hl
lddr
no_insert:
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy+3)
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy + Input_Line.Left_Shift)
add a,l
ld l,a
jr nc,$+3
jr nc,$+3 ;!FIXIT
inc h
inc hl
inc hl
@ -416,17 +411,17 @@ no_insert:
inc hl
inc hl
ex af,af'
ld (hl),a ; á®åà. ᨬ¢®« ¢ áâப¥
inc (iy+4)
inc (iy+2)
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr nz,$+8
ld (hl),a ; á®åà. ᨬ¢®« ¢ áâப¥
inc (iy + Input_Line.Symbols_Num)
inc (iy + Input_Line.Cur_X)
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr nz,$+8 ;!FIXIT
; ªãàá®à §  ¯®«¥¬
inc (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
call print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
pop de ; ¢®ááâ. ¡ « ­á á⥪ 
inc (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
call print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
pop de ; ¢®ááâ. ¡ « ­á á⥪ 
input_line_done:
ret
LastChar_BEEP:
@ -447,35 +442,35 @@ NoMoreChars_BEEP:
; ‘®¡ë⨥ - ªãàá. ª« ¢¨è¨ ¨«¨ ª®¬¡¨­ æ¨¨
EvComComb:
ld b,(hl) ;+1 what
ld b,(hl) ;+1 what
inc hl
ld a,(hl) ;+2 what
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld de,input_line_done ; â®çª  ¢ë室 
ld a,(hl) ;+2 what
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld de,input_line_done ; â®çª  ¢ë室 
push de
cp #54 ; ªãàá®à ¢«¥¢®
cp #54 ; ªãàá®à ¢«¥¢®
jr z,Left
cp #56 ; ªãàá®à ¢¯à ¢®
cp #56 ; ªãàá®à ¢¯à ¢®
jr z,Right
cp #58 ; ªãàá®à ¢¢¥àå, ¯à¥¤. áâப  ¨áâ®à¨¨
cp #58 ; ªãàá®à ¢¢¥àå, ¯à¥¤. áâப  ¨áâ®à¨¨
jp z,history_prev
cp #52 ; ªãàá®à ¢­¨§, á«¥¤. áâப  ¨áâ®à¨¨
cp #52 ; ªãàá®à ¢­¨§, á«¥¤. áâப  ¨áâ®à¨¨
jp z,history_next
cp #59 ; PageUp, ¢ ­ ç «® ¨áâ®à¨¨
cp #59 ; PageUp, ¢ ­ ç «® ¨áâ®à¨¨
jp z,history_begin
cp #53 ; PageDown, ¢ ª®­¥æ ¨áâ®à¨¨
cp #53 ; PageDown, ¢ ª®­¥æ ¨áâ®à¨¨
jp z,history_last
cp #4F ; Del, 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
cp #4F ; Del, 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
jp z,Delete
cp #57 ; Home, ¢ ­ ç «® áâப¨
cp #57 ; Home, ¢ ­ ç «® áâப¨
jp z,Home
cp #51 ; End, ¢ ª®­¥æ áâப¨
cp #51 ; End, ¢ ª®­¥æ áâப¨
jp z,End1
cp #50 ; Ins, ᬥ­  ०¨¬  ¢¢®¤ 
cp #50 ; Ins, ᬥ­  ०¨¬  ¢¢®¤ 
jr z,change_insert_mode
bit 5,b ; Ctrl ¡¨â
bit 5,b ; Ctrl ¡¨â
jr z,.exit
cp #4F+#80 ; Ctrl+Del, ®ç¨áâ¨âì ¨áâ®à¨î ª®¬ ­¤
cp #4F+#80 ; Ctrl+Del, ®ç¨áâ¨âì ¨áâ®à¨î ª®¬ ­¤
jp z,clear_history
.exit: pop de
ret
@ -488,52 +483,52 @@ change_insert_mode:
ret
; Šãàá®à ¢«¥¢®
Left: ld a,(iy+2)
Left: ld a,(iy + Input_Line.Cur_X)
dec a
jp p,ComPrint
ld a,(iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub step_scroll ; è £ áªà®««¨­£ 
ret c ; ªãàá®à ¢ ªà ©­¥¬ «¥¢®¬ ¯®«®¦.
ld (iy+3),a ; X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
ld a,(iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
add a,step_scroll-1 ; è £ áªà®««¨­£ 
ld a,(iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub step_scroll ; è £ áªà®««¨­£ 
ret c ; ªãàá®à ¢ ªà ©­¥¬ «¥¢®¬ ¯®«®¦.
ld (iy + Input_Line.Left_Shift),a ; X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
ld a,(iy + Input_Line.Cur_X) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
add a,step_scroll-1 ; è £ áªà®««¨­£ 
ComPrint:
ld (iy+2),a
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
ld (iy + Input_Line.Cur_X),a
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
; Šãàá®à ¢¯à ¢®
Right: ld a,(iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
add a,(iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
cp (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
Right: ld a,(iy + Input_Line.Cur_X) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
add a,(iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
cp (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ret z
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
ld b,a
ld a,(iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
ld a,(iy + Input_Line.Cur_X) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
inc a
cp b
jr nz,ComPrint
inc (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld a,(iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
sub step_scroll-1 ; è £ áªà®««¨­£ 
inc (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld a,(iy + Input_Line.Cur_X) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
sub step_scroll-1 ; è £ áªà®««¨­£ 
jr ComPrint
; Backspace - 㤠«¨âì ᨬ¢®« «¥¢¥¥ ªãàá®à 
back_space:
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
or a
jr nz,back_space1
ld a,(iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub step_scroll ; è £ áªà®««¨­£ 
ld a,(iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub step_scroll ; è £ áªà®««¨­£ 
ret c
ld (iy+3),a
inc (iy+2) ;+2 ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld (iy + Input_Line.Left_Shift),a
inc (iy + Input_Line.Cur_X) ;+2 ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
back_space1:
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy+2) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy+3) ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy + Input_Line.Cur_X) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy + Input_Line.Left_Shift) ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
add a,l
ld l,a
jr nc,$+3
jr nc,$+3 ;!FIXIT
inc h
inc hl
inc hl
@ -543,27 +538,27 @@ back_space1:
ld d,h
ld e,l
dec de
ld a,(iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub (iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr z,$+7 ; ªãàá®à §  ª®­æ®¬ áâப¨
ld a,(iy + Input_Line.Symbols_Num) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub (iy + Input_Line.Cur_X) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr z,$+7 ; ªãàá®à §  ª®­æ®¬ áâப¨ ;!FIXIT
ld c,a
ld b,0
ldir ; ®¡­®¢¨âì ®áâ â®ª áâப¨
ldir ; ®¡­®¢¨âì ®áâ â®ª áâப¨
xor a
ld (de),a ; ¢ ª®­¥æ áâப¨
dec (iy+2) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
dec (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
ld (de),a ; ¢ ª®­¥æ áâப¨
dec (iy + Input_Line.Cur_X) ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
dec (iy + Input_Line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
; Delete - 㤠«¨âì ᨬ¢®« ¢ ⥪. ¯®§¨æ¨¨
Delete: ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
Delete: ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
inc a
add a,(iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
add a,(iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
add a,l
ld l,a
jr nc,$+3
jr nc,$+3 ;!FIXIT
inc h
inc hl
inc hl
@ -573,74 +568,74 @@ Delete: ld hl,struct_input_line ;
ld d,h
ld e,l
dec de
ld a,(iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ret z ; ªãàá®à §  ª®­æ®¬ áâப¨
ld a,(iy + Input_Line.Symbols_Num) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ret z ; ªãàá®à §  ª®­æ®¬ áâப¨
ld c,a
ld b,0
ldir ; ®¡­®¢¨âì ®áâ â®ª áâப¨
ldir ; ®¡­®¢¨âì ®áâ â®ª áâப¨
xor a
ld (de),a ; ¢ ª®­¥æ áâப¨
dec (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
ld (de),a ; ¢ ª®­¥æ áâப¨
dec (iy + Input_Line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
; Home - ¢ ­ ç «® áâப¨
Home: ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
Home: ld a,(iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ret z
xor a ; X ¯®«®¦. ªãàá®à 
ld (iy+2),a ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
ld (iy+3),a ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
jp ComPrint ; ¢ë¢¥á⨠áâப㠭  íªà ­
xor a ; X ¯®«®¦. ªãàá®à 
ld (iy + Input_Line.Cur_X),a ; X ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
ld (iy + Input_Line.Left_Shift),a ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
jp ComPrint ; ¢ë¢¥á⨠áâப㠭  íªà ­
; End - ¢ ª®­¥æ áâப¨
End1: ld a,(iy+4) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy+3) ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
cp (iy+2) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
End1: ld a,(iy + Input_Line.Symbols_Num) ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy + Input_Line.Left_Shift) ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
cp (iy + Input_Line.Cur_X) ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ret z
add a,(iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
add a,(iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld c,a
ld (iy+3),0 ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
ld (iy + Input_Line.Left_Shift),0 ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
sub c
jr z,EndLp
jr nc,EndNIL
neg
EndLp: inc (iy+3) ; X ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub step_scroll ; è £ áªà®««¨­£ 
EndLp: inc (iy + Input_Line.Left_Shift) ; X ᬥé. áâப¨ §  «¥¢ë© ªà ©
sub step_scroll ; è £ áªà®««¨­£ 
jr nc,EndLp
EndNIL: ld a,(iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
jp ComPrint ; ¢ë¢¥á⨠áâப㠭  íªà ­
EndNIL: ld a,(iy + Input_Line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
sub (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
jp ComPrint ; ¢ë¢¥á⨠áâப㠭  íªà ­
; Žç¨áâ¨âì ¡ãä¥à áâப¨
clear_input_line:
call clear_inpline ; ®ç¨áâ¨âì áâàãªâãàã ~input line~
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
call clear_inpline ; ®ç¨áâ¨âì áâàãªâãàã ~input line~
jp print_inpline ; ¢ë¢¥á⨠áâப㠭  íªà ­
; ®ç¨áâ¨âì áâàãªâãàã ~input line~
clear_inpline:
xor a
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld b,(hl) ;+0 ¬ ªá. ¤«¨­  áâப¨
inc hl
ld (hl),a ;+1 á¡à. ä« £ ReadyString
inc hl
ld (hl),a ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
inc hl
ld (hl),a ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
inc hl
ld (hl),a ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
cp b
ret z
inc hl ;+5 ¡ãä¥à । ªâ. áâப¨
ld (hl),a
djnz $-2
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld b,(hl) ;+0 ¬ ªá. ¤«¨­  áâப¨
inc hl
ld (hl),a ;+1 á¡à. ä« £ ReadyString
inc hl
ld (hl),a ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
inc hl
ld (hl),a ;+3 ᬥé. áâப¨ §  «¥¢ë© ªà ©
inc hl
ld (hl),a ;+4 ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
cp b
ret z
inc hl ;+5 ¡ãä¥à । ªâ. áâப¨
ld (hl),a
djnz $-2 ;!FIXIT
ret
@ -648,17 +643,17 @@ clear_inpline:
; ‚áâ ¢¨âì áâப㠨§ history-¡ãä¥à 
; ¢å®¤: de=áâàãªâãà  áâப¨: +0=¤«¨­  áâப¨, +1=áâப 
put_from_history:
call clear_inpline ; ®ç¨áâ¨âì áâப㠢¢®¤ 
ld a,(de) ;+0 ¤«¨­  áâப¨
call clear_inpline ; ®ç¨áâ¨âì áâப㠢¢®¤ 
ld a,(de) ;+0 ¤«¨­  áâப¨
ld c,a
put_history_loop:
inc de
ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy+3)
ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy + Input_Line.Left_Shift)
add a,l
ld l,a
jr nc,$+3
jr nc,$+3 ;!FIXIT
inc h
inc hl
inc hl
@ -667,14 +662,14 @@ put_history_loop:
inc hl
ld a,(de)
ld (hl),a
inc (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
inc (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr nz,$+8
inc (iy + Input_Line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
inc (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr nz,$+8 ;!FIXIT
; ªãàá®à §  ¯à ¢ë¬ ªà ¥¬ ¯®«ï ¢¢®¤ 
inc (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
inc (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
dec c
jr nz,put_history_loop
; ¢ë¢¥á⨠áâப㠭  íªà ­
@ -684,11 +679,11 @@ put_history_loop:
; Žç¨áâ¨âì ¨áâ®à¨î ª®¬ ­¤
clear_history:
call clear_input_line ; ®ç¨áâ¨âì áâபã ~input line~
call clear_input_line ; ®ç¨áâ¨âì áâபã ~input line~
xor a
ld (history_count),a ; ç¨á«® áâப ¢ history
ld (history_cur_string),a ; ­®¬¥à ⥪. áâப¨ history
ld hl,history_buff ; ª®­¥æ ¯®á«. áâப¨
ld (history_count),a ; ç¨á«® áâப ¢ history
ld (history_cur_string),a ; ­®¬¥à ⥪. áâப¨ history
ld hl,Buffers.history ; ª®­¥æ ¯®á«. áâப¨
ld (history_end),hl
ret
@ -702,13 +697,13 @@ clear_history:
;========================================================================
history_count:
db 0 ; ç¨á«® áâப ¢ ¨áâ®à¨¨
db 0 ; ç¨á«® áâப ¢ ¨áâ®à¨¨
;
history_cur_string:
db 0 ; ­®¬¥à ⥪. áâப¨ ¨áâ®à¨¨
db 0 ; ­®¬¥à ⥪. áâப¨ ¨áâ®à¨¨
;
history_end:
dw history_buff ; ª®­¥æ ¯®á«¥¤. áâப¨ ¨áâ®à¨¨
dw Buffers.history ; ª®­¥æ ¯®á«¥¤. áâப¨ ¨áâ®à¨¨
@ -718,10 +713,10 @@ history_end:
history_begin:
ld a,(history_count)
or a
ret z ; ­¥â áâப
ret z ; ­¥â áâப
xor a
ld (history_cur_string),a
jr history_copy ; ¯¥à¥©â¨ ­  1-î áâபã
jr history_copy ; ¯¥à¥©â¨ ­  1-î áâபã
;-------------------------------------------------
; ª®­¥æ ¨áâ®à¨¨
@ -729,9 +724,9 @@ history_begin:
history_last:
ld a,(history_count)
or a
ret z ; ­¥â áâப
ld (history_cur_string),a ; ãáâ. ¯®á«¥¤. ¯ãáâãî áâபã
jp clear_input_line ; ¢¥à­ãâì ¯ãáâãî áâபã
ret z ; ­¥â áâப
ld (history_cur_string),a ; ãáâ. ¯®á«¥¤. ¯ãáâãî áâபã
jp clear_input_line ; ¢¥à­ãâì ¯ãáâãî áâபã
;-------------------------------------------------
; ‘«¥¤ãîé ï áâப 
@ -745,7 +740,7 @@ history_next:
ld hl,history_cur_string
ld a,(hl)
cp b
jr c,$+7
jr c,$+7 ;!FIXIT
inc b
ld (hl),b
jp clear_input_line ; ¢¥à­ãâì ¯ãáâãî áâபã
@ -767,7 +762,7 @@ history_prev:
or a
jr z,history_copy ; 㯥૨áì ¢ ­ ç «® ¨áâ®à¨¨
cp b
jr c,$+3
jr c,$+3 ;!FIXIT
ld a,b
dec a
ld (hl),a
@ -780,14 +775,14 @@ history_copy:
; ¢ë室: de=áâப  (¥¥ áâàãªâãà  ¨§ history-¡ãä¥à )
history_index:
ld b,0
ld hl,history_buff ; ¡ãä¥à ¨áâ®à¨¨
ld hl,Buffers.history ; ¡ãä¥à ¨áâ®à¨¨
or a ; ¨­¤¥ªá áâப¨
jr z,hist_index ; 1-ï áâப  ¨áâ®à¨¨
ld c,(hl) ; à §¬¥à áâப¨
inc c
add hl,bc ; ­  á«¥¤. áâபã
dec a
jr nz,$-4
jr nz,$-4 ;!FIXIT
hist_index:
ex de,hl
ret
@ -799,24 +794,24 @@ hist_index:
; â¥å ¯®à, ¯®ª  ¯®ï¢¨âáï ¤®áâ â®ç­® ¬¥áâ  ¤«ï ­®¢®© áâப¨.
;-----------------------------------------------------------
history_adding:
ld de,struct_input_line+4 ; áâàãªâãà  áâப¨
call history_compare ; áà ¢­¨âì áâப¨
ret z ; 㦥 ¥áâì â ª ï áâப 
ld bc,(history_end) ;  ¤à¥á ª®­æ  ¯®á«. áâப¨
ld hl,history_buff+history_size ;  ¤à¥á ª®­æ  ¡ãä¥à 
ld de,Buffers.input_line.Symbols_Num ; áâàãªâãà  áâப¨
call history_compare ; áà ¢­¨âì áâப¨
ret z ; 㦥 ¥áâì â ª ï áâப 
ld bc,(history_end) ;  ¤à¥á ª®­æ  ¯®á«. áâப¨
ld hl,Buffers.history + history_size ;  ¤à¥á ª®­æ  ¡ãä¥à 
and a
sbc hl,bc ; hl=à §¬¥à ᢮¡. ¬¥áâ 
ld a,(de) ; ¤«¨­  ­®¢®© áâப¨
sbc hl,bc ; hl=à §¬¥à ᢮¡. ¬¥áâ 
ld a,(de) ; ¤«¨­  ­®¢®© áâப¨
inc a
ld c,a
xor a
ld b,a
sbc hl,bc ; 㬥é. ¢ ᢮¡. ¬¥á⥠¡ãä¥à  ¨áâ®à¨¨ ?
jr nc,history_add_ok ; ¤ 
sbc hl,bc ; 㬥é. ¢ ᢮¡. ¬¥á⥠¡ãä¥à  ¨áâ®à¨¨ ?
jr nc,history_add_ok ; ¤ 
; 㤠«¨âì ¯¥à¢ãî (á ¬ãî áâ àãî) áâப㠨§ ¡ãä¥à 
;push de
ld de,history_buff ; ¡ãä¥à ¨áâ®à¨¨
ld a,(de) ; ¤«¨­  1-© áâப¨
ld de,Buffers.history ; ¡ãä¥à ¨áâ®à¨¨
ld a,(de) ; ¤«¨­  1-© áâப¨
inc a
ld c,a
xor a
@ -837,7 +832,7 @@ history_adding:
ldir
ld hl,history_count
dec (hl) ; --ç¨á«® áâப ¢ history
;pop de ; ¢®ááâ.  ¤à¥á struct_input_line+4
;pop de ; ¢®ááâ.  ¤à¥á Buffers.input_line.Symbols_Num
jr history_adding
;
history_add_ok:
@ -866,7 +861,7 @@ history_compare:
ex af,af'
xor a ; á¡à. ¨­¤¥ªá áà ¢­. áâப¨
ex af,af'
ld hl,history_buff ; ¡ãä¥à ¨áâ®à¨¨
ld hl,Buffers.history ; ¡ãä¥à ¨áâ®à¨¨
history_comp_loop:
push de
ld (move_cur_str+1),hl ; ⥪. áâப  ¨áâ®à¨¨
@ -922,7 +917,7 @@ move_to_end_history:
; á®åà. áâப㠢® ¢à¥¬. ¡ãä¥à¥
move_cur_str:
ld hl,0 ; ⥪. áâப  ¨áâ®à¨¨
ld de,work_buffer ; ¢à¥¬. ¡ãä¥à
ld de,Buffers.work.buffer ; ¢à¥¬. ¡ãä¥à
ld c,(hl) ;+0 ¤«¨­  áâப¨
inc c ; ãç¥áâì ï祩ªã ¤«¨­ë áâப¨
xor a
@ -944,7 +939,7 @@ move_cur_str:
pop hl ; ®âªã¤ 
ldir
; ¢®ááâ. áâப㠨§ ¢à¥¬. ¡ãä¥à  ¢ ª®­¥æ ¨áâ®à¨¨
ld hl,work_buffer ; ¢à¥¬. ¡ãä¥à
ld hl,Buffers.work.buffer ; ¢à¥¬. ¡ãä¥à
ld c,(hl)
inc c
ld b,a
@ -982,18 +977,18 @@ insert_mode:
; 5 0
; íªà ­­ë© ¯ãâì
screen_path:
db "A:"
BLOCK max_screen_path+1,0 ; 32+1
; screen_path:
; db "A:"
; BLOCK max_screen_path+1,0 ; 32+1
; 6 0
; á¨á⥬­ë© ¯ãâì
system_path:
BLOCK 256,0 ;!HARDCODE
; system_path:
; BLOCK 256,0 ;!HARDCODE
; ; 7 0
; ; ‘âàãªâãà  áâப¨ ¢¢®¤  ~input line~
; struct_input_line:
; Buffers.input_line.:
; db max_len_comline ;+0 254 ¬ ªá. ç¨á«® ¢¢®¤. ᨬ¢®«®¢
; db 0 ;+1 ä« £ ReadyString
; db 0 ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
@ -1008,7 +1003,7 @@ system_path:
; ; 9 0
; ; <20> ¡®ç¨© ¡ãä¥à
; work_buffer:
; Buffers.work.buffer:
; BLOCK 512,0
////////////////////////////////////////////////////////////////////////
;

View File

@ -7,11 +7,11 @@ SAVEHL: dw 0
; <20> §¡®à ¨ ¢ë¯®«­¥­¨¥ ¢¢¥¤¥­­ëå ª®¬ ­¤ ¨ ¨¬¥­ ä ©«®¢
;-------------------------------------------------------------
COMP: call EVALCMD ; (batch.asm)
ld hl,struct_input_line+5
ld hl,Buffers.input_line.Path
dec hl
ld c,(hl) ; ¤«¨­  áâப¨
ld b,0
inc hl ; struct_input_line+5
inc hl ; Buffers.input_line.Path
.loop: ld a,(hl)
cp " "
jr nz,.COMP01
@ -42,7 +42,7 @@ COMP: call EVALCMD ; (batch.asm)
.skip: ; <20>¥ ¤®á-ª®¬ ­¤ë. ’¥áâ ­  § ¤ ­¨¥ ¤¨áª  ¨ § ¯ã᪠䠩« 
ld h,d
ld l,e
; hl=struct_input_line+5
; hl=Buffers.input_line.Path
ld b,(hl) ;+0 1-© ᨬ¢®«
inc hl
ld c,(hl) ;+1 2-© ᨬ¢®«
@ -65,10 +65,10 @@ COMP: call EVALCMD ; (batch.asm)
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
;!FIXIT âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥
;!TODO ¤®áâ ¢ âì system_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
;!TODO ¤®áâ ¢ âì Buffers.sys_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥
IFDEF MANY_SYS_PATHES
ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld hl,Buffers.sys_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp nc,Get_Path ; Ok
@ -76,7 +76,7 @@ COMP: call EVALCMD ; (batch.asm)
;
; ãáâ. ª®à¥­ì, ­¥â â ª®© ¯ ¯ª¨ ­  ­®¢®¬ ¤¨áª¥
ld hl,system_path+1 ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld hl,Buffers.sys_path + 1 ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld (hl),0
dec hl
ld (hl),'\'
@ -92,7 +92,7 @@ COMP: call EVALCMD ; (batch.asm)
; § ¤ ­ ­¥ ¤¨áª
RUN_EXT: ex de,hl ; ¢®ááâ.  ¤à¥á ­ ç «  áâப¨
ld (SAVEHL),hl ; struct_input_line+5
ld (SAVEHL),hl ; Buffers.input_line.Path
ld de,EXTBF ; ¡ãä¥à
ld bc,4*256 + Dss.EX_Path ; ¢ë¤¥«¨âì à áè. ä ©« 
RST ToDSS
@ -124,7 +124,7 @@ RUN_EXT: ex de,hl ;
jr nz,EXEERR
push hl
;ld a,(D96AD) ; ¤«¨­  áâப¨ (inline.asm)
ld a,(struct_input_line+4) ; ¤«¨­  áâப¨
ld a,(Buffers.input_line.Symbols_Num) ; ¤«¨­  áâப¨
ld b,a
.loop: ld a,(hl)
cp " "+1
@ -187,12 +187,12 @@ RESTORE_ALL:
;[x] 01/11/23 ;!TEST
CALL Get_Path
;
LD A,(screen_path)
LD A,(Buffers.screen_path)
SUB 'A'
LD C,Dss.ChDisk
RST ToDSS
;
LD HL,system_path
LD HL,Buffers.sys_path
LD C,Dss.ChDir
RST ToDSS
;

View File

@ -31,7 +31,7 @@ MAIN_MSG:
;
; 1 2 3 4 5 6 7
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789;
stN .DIR_1_ : db "Volume in drive %1 %4 %5\r\n"
stN .DIR_1_ : db "Volume in drive %1 %6 %7\r\n"
db "Volume Serial Number is %2\r\n"
DZ "\r\nDirectory of %3\r\n\n"
stN .VERS_ : DZ "Estex DSS version %1. Shell version %2.\r\n" ;R13

View File

@ -56,6 +56,7 @@ Loader_length EQU 0
code_addr EQU shell
program_start EQU shell
stack_point EQU #C000
stack_size EQU #100
org_addr EQU #8000 + CLP_Buffer
;---------------------------------------------------------------------[]
;
@ -91,15 +92,17 @@ org_addr EQU #8000 + CLP_Buffer
;==============================================================
; ’®çª  ¢å®¤  ¢ ˜¥««
;==============================================================
shell:
;!TODO merge:  ªâ¨¢¨à®¢ âì ª®£¤  ¡ãä¥àë ¡ã¤ãâ ç¥à¥§ áâàãªâãàã,   ­¥ ­ã«ï¬¨
;LD HL,WORK_BUFFERS
;LD DE,WORK_BUFFERS+1
;LD BC,BUFFERS_STRUCT-1
;LD (HL),0
;LDIR
shell: ld hl,Buffers
ld de,Buffers+1
ld (hl),0
ld bc,Struc_Buffers-1
ldir
;
ld hl,":A"
ld (Buffers.screen_path),hl
ld a,max_len_comline
ld (Buffers.input_line),a
;
; á®åà. ã஢¥­ì ⥪. 襫« 
ld a,(ix-1)
ld (cmd_exit.TASKX),a
@ -155,8 +158,8 @@ back_to_parent_process:
;---------------------------------------------------------------
option_c:
;ld hl,T96AE ; ¨¬ï bat-ä ©« , 256 ¡ãä¥à (inline.asm)
;ld hl,work_buffer+256;;
ld hl,struct_input_line+5 ; ¨¬ï bat-ä ©« 
;ld hl,Buffers.work.buffer+256;;
ld hl,Buffers.input_line.Path ; ¨¬ï bat-ä ©« 
call BATCH ; ®¡à ¡®âª  bat-ä ©«  (batch.asm)
;!TODO ¢«®¦¥­­ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â­® ¢ ¢ë§ë¢ î騩 bat
jr back_to_parent_process.saveA ; ¢¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá
@ -187,7 +190,7 @@ run_shell_loop:
run_shell_loop1:
call input_line
call newline ; ­  ­®¢ãî áâபã
ld a,(struct_input_line+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
ld a,(Buffers.input_line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
or a
jr z,run_shell_loop1 ; ¯ãáâ ï
; <20> àᨭ£ ¨ ¢ë¯®«­¥­¨¥ ª®¬ ­¤
@ -225,12 +228,12 @@ GET_CMD:
dec hl
cp '/' ; ®¯æ¨ï
jr nz,.PROCESS
ld de,work_buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
ld de,Buffers.work.buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
ld c,Dss.GSwitch ; ¢ë¤¥«. ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
push af
ex de,hl
ld hl,work_buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
ld hl,Buffers.work.buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
inc hl
call set_option_flag ; ãáâ. ¡¨âë ä« £®¢
pop af
@ -239,18 +242,18 @@ GET_CMD:
; ãáâ. ¡¨â-ä« £
.PROCESS:
ld a,(RUNMODE)
set 6,a ; 6-© ¡¨â (¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë) ;!HARDCODE
set 6,a ; 6-© ¡¨â (¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë) ;!HARDCODE
ld (RUNMODE),a
; ᪮¯¨à. ¯ à ¬¥âà ¨§ ª®¬-áâப¨
; ¢ ¡ãä¥à áâப¨ । ªâ¨à®¢ ­¨ï
;copy_to_input_line:
ld iy,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld iy,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
push hl
call clear_inpline ; ®¡­ã«¨âì áâàãªâãàã "input line"
pop de ; de=墮áâ áâப¨
.loop: ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy+3)
call clear_inpline ; ®¡­ã«¨âì áâàãªâãàã "input line"
pop de ; de=墮áâ áâப¨
.loop: ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy + Input_Line.Left_Shift)
add a,l
ld l,a
jr nc,1F
@ -260,20 +263,20 @@ GET_CMD:
inc hl
inc hl
inc hl
ld a,(de) ; ᨬ¢®« ¨§ áâப¨
ld a,(de) ; ᨬ¢®« ¨§ áâப¨
ld (hl),a
or a
ret z ; ª®­¥æ áâப¨
inc (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
inc (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
ret z ; ª®­¥æ áâப¨
inc (iy + Input_Line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
inc (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr nz,2F
; ªãàá®à §  ¯à ¢ë¬ ªà ¥¬ ¯®«ï ¢¢®¤ 
inc (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
2: ld a,(de) ; ᨬ¢®« ¨§ áâப¨
inc de ; ¯à®¤¢. ¯®â®ª
inc (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
2: ld a,(de) ; ᨬ¢®« ¨§ áâப¨
inc de ; ¯à®¤¢. ¯®â®ª
cp " "
jr nc,.loop
ret
@ -315,21 +318,21 @@ setopt4: ld a,c
;GETPATH:
Get_Path:
; ã§­ âì ⥪. ª â «®£
ld hl,system_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld hl,Buffers.sys_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.CurDir
RST ToDSS
.disk: ; ã§­ âì ⥪. ¤¨áª
ld c,Dss.CurDisk
RST ToDSS
add a,"A"
ld (screen_path),a ; 33 áâப  íªà ­­®£® ¯ãâ¨
ld (Buffers.screen_path),a ; 33 áâப  íªà ­­®£® ¯ãâ¨
ret
;!FIXIT ã¡à âì «¨è­¨¥ ¢ë§®¢ë
; ‚®ááâ ­®¢¨âì ⥪. ¤¨áª ¨ ¯ãâì (¯®á«¥ ®è¨¡ª¨)
restore_disk_path:
; ãáâ. ⥪. ¤¨áª
ld a,(screen_path) ; 33 áâப  íªà ­­®£® ¯ãâ¨
ld a,(Buffers.screen_path) ; 33 áâப  íªà ­­®£® ¯ãâ¨
sub "A"
ld c,Dss.ChDisk
RST ToDSS
@ -337,7 +340,7 @@ restore_disk_path:
;!FIXIT ã¡à âì «¨è­¨¥ ¢ë§®¢ë
restore_path:
; ãáâ. ⥪. ª â «®£
ld hl,system_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld hl,Buffers.sys_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir
RST ToDSS
ret
@ -556,33 +559,40 @@ T8C24: db "OFF",0
include 'Commands/reboot.asm' ; á®äâ à¥á¥â
;
DISPLAY "Empty space for buffers from ",/H,$
CLEAR_ZONE:
DISPLAY "Free space from ",/H,$ + Struc_Buffers
assert ($ + Struc_Buffers) < (stack_point - stack_size), "Buffers can leack to stack!"
Buffers Struc_Buffers = $
; 5 0
; íªà ­­ë© ¯ãâì
;screen_path:
; db "A:"
; BLOCK max_screen_path+1,0 ; 32+1
; 6 0
; á¨á⥬­ë© ¯ãâì
; system_path:
; BLOCK 256,0 ;!HARDCODE
; 7 0
; ‘âàãªâãà  áâப¨ ¢¢®¤  ~input line~
struct_input_line:
db max_len_comline ;+0 254 ¬ ªá. ç¨á«® ¢¢®¤. ᨬ¢®«®¢
db 0 ;+1 ä« £ ReadyString
db 0 ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
db 0 ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
db 0 ;+4 ç¨á«® ¢¢¥¤¥­­ëå ᨬ¢®«®¢
BLOCK max_len_comline+1,0 ;+5 áâப  ¢¢®¤ 
; struct_input_line:
; db max_len_comline ;+0 254 ¬ ªá. ç¨á«® ¢¢®¤. ᨬ¢®«®¢
; db 0 ;+1 ä« £ ReadyString
; db 0 ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
; db 0 ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
; db 0 ;+4 ç¨á«® ¢¢¥¤¥­­ëå ᨬ¢®«®¢
; BLOCK max_len_comline+1,0 ;+5 áâப  ¢¢®¤ 
; 8 0
; <20>ãä¥à ¨áâ®à¨¨
history_buff:
BLOCK history_size,0 ; 256
; history_buff:
; BLOCK history_size,0 ; 256
; 9 0
; <20> ¡®ç¨© ¡ãä¥à
work_buffer:
BLOCK 512,0
; work_buffer:
; BLOCK 512,0
work_buffer1 equ $ ; 2-© à ¡. ¡ãä¥à ; 128 bytes
work_buffer2 equ work_buffer1+128 ; 3-© à ¡. ¡ãä¥à ; 256 bytes
; work_buffer1 equ $ ; 2-© à ¡. ¡ãä¥à ; 128 bytes
; work_buffer2 equ work_buffer1+128 ; 3-© à ¡. ¡ãä¥à ; 256 bytes
;

View File

@ -1 +1 @@
370
393

View File

@ -7,19 +7,17 @@
.Path BLOCK max_len_comline+1,0 ;+5 áâப  ¢¢®¤ 
ENDS
STRUCT History
.cmds BLOCK history_size,0 ; 256
ENDS
STRUCT Work
.work_buffer BLOCK 512,0
.work_buffer1 BLOCK 128,0
.work_buffer2 BLOCK 256,0
.free_buffer BLOCK 3840,0
.buffer BLOCK 512,0
.buffer1 BLOCK 128,0
.buffer2 BLOCK 256,0
.free BLOCK 3840,0
ENDS
STRUCT Struc_Buffers
.screen_path BLOCK 2 + max_screen_path + 1, 0 ; db "A:" : BLOCK max_screen_path+1,0
.sys_path BLOCK 256,0
.input_line Input_Line
.history History
.history BLOCK history_size,0 ; 256
.work Work
ENDS