diff --git a/SHELL/Commands/CLS.ASM b/SHELL/Commands/CLS.ASM index 432fc70..3f62cbb 100644 --- a/SHELL/Commands/CLS.ASM +++ b/SHELL/Commands/CLS.ASM @@ -51,16 +51,16 @@ cls_clear: ld a,b ; ascii -> int -ascii2byte: - cp "0" - ret c - cp "9"+1 - jr c,$+10 ;!FIXIT $ - and 5Fh - cp "F"+1 - ccf - ret c - sub 7 - sub "0" - or a - ret +ascii2byte: cp "0" + ret c + cp "9"+1 + jr c,.number + ; + and %0101'1111 + cp "F"+1 + ccf + ret c + sub 7 +.number: sub "0" + or a + ret diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index 47d0c71..70dbd0c 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -328,7 +328,7 @@ Print_Header: ; %1 JP ECHO_MESSAGE ; вывести строку ; -; Подготовить строку списка файлов/папок +; Подготовить строку списка файлов/папок ; !FIXIT не готова к LFN PRNNAME: dec hl ld a,(hl) and FAT_ATTR.DIRECTORY @@ -358,18 +358,22 @@ PRNNAME: dec hl ld b,11 ;!HARDCODE длина имени DOS .loop: inc hl ld a,(hl) - cp 'A' - jr c,.next - cp 'Z'+1 - jr c,.letter - ; - cp 'А' ;#80 - jr c,.next - cp 'Я'+1 ;#9F + 1 - jr nc,.next - ; -.letter: or %0010'0000 - ld (hl),a + call CorrBigChar +; cp 'A' +; jr c,.next +; cp 'Z'+1 +; jr c,.letter +; ; +; cp 'А' ;#80 +; jr c,.next +; cp 'П'+1 ;#9F + 1 +; jr c,.letter +; ; +; cp 'Я'+1 +; jr c,.next +; ; +; .letter: or %0010'0000 + ld (hl),a .next: djnz .loop ex de,hl ret diff --git a/SHELL/EXEC.ASM b/SHELL/EXEC.ASM index 70f520f..9f78156 100644 --- a/SHELL/EXEC.ASM +++ b/SHELL/EXEC.ASM @@ -55,11 +55,7 @@ COMP: call EVALCMD ; (batch.asm) cp c ; 2-й символ jr nz,RUN_EXT ; задан не диск ld a,b ; 1-й символ - cp "a" - jr c,.NOUP - cp "z"+1 - jr nc,.NOUP - and #5F ; a..z -> A..Z + CALL COMPARE.cmp_AZ .NOUP: sub "A" ; номер диска ld (.dsk),a ld c,Dss.ChDisk ; сменить тек. диск diff --git a/SHELL/Procedures/parsers.asm b/SHELL/Procedures/parsers.asm index 7cccc6b..9a59823 100644 --- a/SHELL/Procedures/parsers.asm +++ b/SHELL/Procedures/parsers.asm @@ -9,11 +9,7 @@ RUN_COMMAND: push de ; .loop: ld a,(de) - cp "a" - jr c,.skip - cp "z"+1 - jr nc,.skip - and %0101'1111 ; a..z -> A..Z + CALL COMPARE.cmp_AZ .skip: cp (hl) jr nz,.not_cmd ; не команда inc hl diff --git a/SHELL/Procedures/shared.asm b/SHELL/Procedures/shared.asm index ec636ce..ea07568 100644 --- a/SHELL/Procedures/shared.asm +++ b/SHELL/Procedures/shared.asm @@ -221,4 +221,29 @@ volume_string_yes: db "has label",0 ; ; has_not_full_info: db ' (?)',0 /////////////////////////////////////////////////////////////////////// -;----------------------------------------------------------------------; \ No newline at end of file +;----------------------------------------------------------------------; + + + +;Процедура коррекции буквы к маленькой букве +CorrBigChar: CP 'A' + RET C + CP 'Z' + 1 + JR NC,.CheckRUS +.Dec: ADD #20 + RET + ; +.CheckRUS: CP 'А' + RET C + CP 'П'+1 + JR C,.Dec + ; +.BGUPPER: CP 'Я' + 1 + JR NC,.HGUPPER + ADD #50 + RET + ; +.HGUPPER: CP 'Ё' ; русская буква ё, код #F1 + RET NZ + INC A + RET diff --git a/SHELL/SHELL.ASM b/SHELL/SHELL.ASM index 8908e4f..5090b2d 100644 --- a/SHELL/SHELL.ASM +++ b/SHELL/SHELL.ASM @@ -285,30 +285,26 @@ GET_CMD: ; Тест на опции шелла и уст. бит-флагов ; вход: hl=строка опций set_option_flag: - ld a,(RUNMODE) ; ячейка бит-флагов - ld c,a - ld a,(hl) - cp "a" - jr c,setopt1 - cp "z"+1 - jr nc,$+4 ;!FIXIT $ - and #5F ; a..z -> A..Z -setopt1: cp "P" ; запуск шелла с отраб. autoexec.bat - jr nz,setopt2 - set 7,c - jr setopt4 - ; -setopt2: cp "S" ; запуск 2-й копии шелла (без отраб. autoexec.bat) - jr nz,setopt3 - set 5,c - jr setopt4 - ; -setopt3: cp "C" ; выполн. bat-файл и вернуться в родит. процесс - ret nz - set 4,c -setopt4: ld a,c - ld (RUNMODE),a - ret + ld a,(RUNMODE) ; ячейка бит-флагов + ld c,a + ld a,(hl) + call COMPARE.cmp_AZ +.setopt1: cp "P" ; запуск шелла с отраб. autoexec.bat + jr nz,.setopt2 + set 7,c + jr .setopt4 + ; +.setopt2: cp "S" ; запуск 2-й копии шелла (без отраб. autoexec.bat) + jr nz,.setopt3 + set 5,c + jr .setopt4 + ; +.setopt3: cp "C" ; выполн. bat-файл и вернуться в родит. процесс + ret nz + set 4,c +.setopt4: ld a,c + ld (RUNMODE),a + ret ; Сохранить тек. диск и путь @@ -355,23 +351,25 @@ newline: push hl pop hl ret -; Сравнение строк +; Сравнение строк (Английский) ; in: de=string1 ; hl=string2 ; b=длина строки -COMPARE: - ld a,(de) - cp "a" - jr c,.next - cp "z"+1 - jr nc,.next - and 5Fh ; a..z -> A..Z -.next: cp (hl) - ret nz - inc hl - inc de - djnz COMPARE - ret +COMPARE: ld a,(de) + call .cmp_AZ +.next: cp (hl) + ret nz + inc hl + inc de + djnz COMPARE + ret + ; +.cmp_AZ: cp "a" + ret c + cp "z"+1 + ret nc + and %0101'1111 ; a..z -> A..Z + ret ; Скопир. строку (с нулем), макс. 15 символов diff --git a/SHELL/build.txt b/SHELL/build.txt index c047c4a..8db1e5f 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -518 \ No newline at end of file +522 \ No newline at end of file