diff --git a/DSS/API/PutChar.asm b/DSS/API/PutChar.asm index 74be50b..eeaace9 100644 --- a/DSS/API/PutChar.asm +++ b/DSS/API/PutChar.asm @@ -122,8 +122,4 @@ PUTCHAR: LD C,0 ; POP HL RET - -; .NO_SCROLL: - -; .CHAR: DZ "X" ;/////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/DSS/build.txt b/DSS/build.txt index b44fe09..d1cbcfa 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -65 \ No newline at end of file +66 \ No newline at end of file diff --git a/SHELL/BATCH.ASM b/SHELL/BATCH.ASM index ef347f4..058fe0e 100644 --- a/SHELL/BATCH.ASM +++ b/SHELL/BATCH.ASM @@ -323,8 +323,10 @@ CMDMODE: ld b,a inc hl ;+5 push bc - ld c,BIOS.LP_PRINT_LINE2 ; вывод строки без атрибутов - RST ToBIOS + LD C,Dss.PChars + RST ToDSS + ;ld c,BIOS.LP_PRINT_LINE2 ; вывод строки без атрибутов + ;RST ToBIOS pop bc ; b=длина строки ld a,(width_inpline) ; ширина поля ввода (76..48) sub b @@ -403,7 +405,7 @@ EVALCMD: xor a call EVALSTR ld hl,Buffers.work.buffer2 ;work_buffer+256 ld de,Buffers.input_line.Path ; куда - ld bc,255 ;!HARDCODE + ld bc,max_len_comline+2 .loop: LD A,C DEC A JR Z,.error @@ -413,10 +415,11 @@ EVALCMD: xor a inc b or a jr nz,.loop + ; dec b ld a,b ld (Buffers.input_line.Symbols_Num),a ; длина строки (edline.asm) - and a + ;and a ret ; .error: LD (DE),A diff --git a/SHELL/EDLINE.ASM b/SHELL/EDLINE.ASM index fc778ee..d49ea6f 100644 --- a/SHELL/EDLINE.ASM +++ b/SHELL/EDLINE.ASM @@ -57,6 +57,7 @@ input_line: ld (cursor_position),de ; Y/X позиция курсора call clear_inpline ; очистить структуру ~input line~ call print_compath ; вывести путь + новая ширина поля ввода + call print_inpline jp event_input_line ; на обраб. строки ввода @@ -98,6 +99,7 @@ print_compath: ld a,">" ld bc,1*256 + BIOS.LP_PRINT_SYM ; символ без атрибута RST ToBIOS + RET ;jr print_inpline ; вывод строки ввода ;------------------------------------------------- ; Вывод строки ~input line~ на экран @@ -156,7 +158,7 @@ print_inpline: ld e,(iy + Input_Line.Cur_X) ;+2 тек. полож. курсора в строке add a,e cp width_inpline.MAX ; ширина экрана - jr c,prne1__ + jr c,.prne1 ld b,width_inpline.MAX-1 sub b ld d,a ; "наезд" за правый край @@ -164,7 +166,7 @@ print_inpline: sub d 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 - полный путь @@ -367,7 +369,7 @@ inpline_work: add a,(iy + Input_Line.Left_Shift) cp (iy + Input_Line.max_Len) ;ret nc - JR NC,LastChar_BEEP + JR NC,NoMoreChars_BEEP bit 7,(iy + Input_Line.ReadyString) ;ret nz JR NZ,NoMoreChars_BEEP @@ -424,22 +426,34 @@ no_insert: pop de ; восст. баланс стека input_line_done: ret -LastChar_BEEP: - ;!TODO если символы привысили максимальное число, то на экране - ; в строке остаётся эхо нажатой клавиши, которая не влезла - ; и висит до нажатия очередной клавиши. Исправить. - LD A,7 ;ASCII BELL - LD C,Dss.PutChar - JP ToDSS +; LastChar_BEEP: +; ; если символы привысили максимальное число, то на экране +; ; в строке остаётся эхо нажатой клавиши, которая не влезла +; ; и висит до нажатия очередной клавиши. Исправить. +; LD A,7 ;ASCII BELL +; LD C,Dss.PutChar +; JP ToDSS +;!FIXIT SCROLL сделать уже функции доса для печати в консоль без скролла NoMoreChars_BEEP: ;!TODO если символы привысили максимальное число, то на экране ; в строке остаётся эхо нажатой клавиши, которая не влезла ; и висит до нажатия очередной клавиши. Исправить. - LD A,7 ;ASCII BELL + LD DE,(cursor_position) + LD C,Dss.Locate + RST ToDSS + PUSH DE + LD C,Dss.RdChar + RST ToDSS ; A - символ, B - атрибут + POP DE + LD A,' ' ; символ + LD C,Dss.WrChar ; #58 + RST ToDSS + LD A,7 ;ASCII BELL LD C,Dss.PutChar JP ToDSS + ; Событие - курс. клавиши или комбинации EvComComb: ld b,(hl) ;+1 what diff --git a/SHELL/EXEC.ASM b/SHELL/EXEC.ASM index 24dbe3f..4239d78 100644 --- a/SHELL/EXEC.ASM +++ b/SHELL/EXEC.ASM @@ -8,8 +8,8 @@ SAVEHL: dw 0 ;------------------------------------------------------------- COMP: call EVALCMD ; (batch.asm) RET C - ld hl,Buffers.input_line.Path - dec hl + ld hl,Buffers.input_line.Path - 1 + ;dec hl ld c,(hl) ; длина строки ld b,0 inc hl ; Buffers.input_line.Path diff --git a/SHELL/SHELL.ASM b/SHELL/SHELL.ASM index 5090b2d..f350eb4 100644 --- a/SHELL/SHELL.ASM +++ b/SHELL/SHELL.ASM @@ -553,6 +553,12 @@ T8C24: db "OFF",0 include 'Commands/set.asm' ; задать переменную окружения include 'Commands/reboot.asm' ; софт ресет ; + DISPLAY "bat_params: ",/H,Buffers.bat_params, ". Size: ",/H, BAT_PARAMS, " End: ",/H, Buffers.bat_params + BAT_PARAMS - 1 + DISPLAY "screen_path: ",/H,Buffers.screen_path, ". Size: ",/H, 2 + max_screen_path + 1, " End: ",/H, Buffers.screen_path + (2 + max_screen_path + 1) - 1 + DISPLAY "sys_path: ",/H,Buffers.sys_path, ". Size: ",/H, 256, " End: ",/H, Buffers.sys_path + 255 + DISPLAY "input_line: ",/H,Buffers.input_line, ". Size: ",/H, Input_Line, " End: ",/H, Buffers.input_line + Input_Line - 1 + DISPLAY "history: ",/H,Buffers.history, ". Size: ",/H, history_size, " End: ",/H, Buffers.history + history_size - 1 + DISPLAY "work: ",/H,Buffers.work, ". Size: ",/H, Work, " End: ",/H, Buffers.work + Work - 1 DISPLAY "Empty space for buffers from ",/H,$ DISPLAY "Free space from ",/H,$ + Struc_Buffers assert ($ + Struc_Buffers) < (stack_point - stack_size), "Buffers can leack to stack!" diff --git a/SHELL/structures.inc b/SHELL/structures.inc index 37d85c1..a0caf21 100644 --- a/SHELL/structures.inc +++ b/SHELL/structures.inc @@ -1,5 +1,5 @@ STRUCT Input_Line -.max_Len BYTE 253 ;+0 254 макс. число ввод. символов +.max_Len BYTE max_len_comline ;+0 .max_Len-1=254 макс. число ввод. символов .ReadyString BYTE 0 ;+1 флаг ReadyString .Cur_X BYTE 0 ;+2 X тек. полож. курсора в пределах строки .Left_Shift BYTE 0 ;+3 X смещ. строки за левый край (в символах) diff --git a/Shared_Includes b/Shared_Includes index 51198ce..d2ba40c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 51198ce44bd19f511b63e6fafaf91b3de5470f9d +Subproject commit d2ba40c4620459681fdc5eb8d4cadcb50eb79aa8