; раб. ячейка D8374: dw 0 ;------------------------------------------------------------- ; Разбор и выполнение введенных команд и имен файлов ;------------------------------------------------------------- A82E7: call EVALCMD ; (batch.asm) ld hl,struct_input_line+5 dec hl ;ld hl,struct_input_line+4;; ld c,(hl) ; длина строки ld b,0 inc hl ; struct_input_line+5 ;ld hl,work_buffer+256;; A82F2: ld a,(hl) cp " " jr nz,A82FC inc hl dec c jr nz,A82F2 ret ; A82FC: ld d,h ld e,l add hl,bc ld (hl),0 sbc hl,bc ld a,c ex af,af' ld a," " cpir jr nz,A830C inc c A830C: ex af,af' sub c ld c,a ld hl,CMDLIST ; список команд ДОС-а ; de=struct_input_line+5, c=длина строки ; от bat-отработки A8312: push bc push de A8314: ld a,(de) cp "a" jr c,A8321 cp "z"+1 jr nc,A8321 and 5Fh ; a..z -> A..Z A8321: cp (hl) jr nz,COMP002 ; не дос-команды inc hl inc de dec c jr nz,A8314 xor a cp (hl) jr nz,COMP002 pop bc pop bc ld a,(de) cp " " jr nz,A8338 inc de A8338: inc hl ld a,(hl) inc hl ld h,(hl) ld l,a jp (hl) ; на соотв. обработчик дос-команды ; Не дос-команды. Тест на задание диска и запуск файла COMP002: xor a LD C,A CPIR inc hl inc hl pop de pop bc ld a,(hl) or a jr nz,A8312 ; назад в цикл, еще не дошли конца списка дос-команд ld h,d ld l,e ; hl=struct_input_line+5 ld b,(hl) ;+0 1-й символ inc hl ld c,(hl) ;+1 2-й символ inc hl ld a,(hl) ;+2 3-й символ or a ; задан диск типа "x:" ? jr nz,A8376 ; нет, имеем больше 2-х символов ld a,":" ; постфикс буквы диска cp c ; 2-й символ jr nz,A8376 ; задан не диск ld a,b ; 1-й символ cp "a" jr c,A8369 cp "z"+1 jr nc,A8369 and 5Fh ; a..z -> A..Z A8369: sub "A" ; номер диска ld c,Dss.ChDisk ; сменить тек. диск RST ToDSS jp c,print_err_message ; вывод сообщения ; тест на существование папки на целевом диске ld hl,system_path ; буфер сист. пути ld c,Dss.ChDir ; уст. тек. путь RST ToDSS jp nc,save_disk_path ; Ok ; уст. корень, нет такой папки на новом диске ld hl,system_path+1 ; буфер сист. пути ld (hl),0 dec hl ld (hl),'\' ld c,Dss.ChDir ; уст. тек. путь RST ToDSS jp c,print_err_message ; вывод сообщения jp save_disk_path ; Ok ; задан не диск A8376: ex de,hl ; восст. адрес начала строки ld (D8374),hl ; struct_input_line+5 ld de,T8C1A ; буфер ld bc,4*256 + Dss.EX_Path ; выделить расш. файла RST ToDSS ld hl,(D8374) ; имя файла jr c,A83D7 ; выполнить exe-файл bit 1,a ; есть расш. ? jr z,A839D ; нет ; есть расш. файла ld de,T8C1A ; буфер расш. файла ld hl,T8C1E ; "BAT" ld b,3 ; длина сравнения call A874E ; сравнить строки ld hl,(D8374) jp z,A83E8 ; выполнить bat-файл (batch.asm) jr A83D7 ; выполнить exe-файл A839D: ld bc,0*256 + Dss.Exec ; загр. и выполнить программу RST ToDSS ;R10 CALL Restore_Screen ;R10 ret nc ; Ok ld hl,(D8374) cp 3 ; код ошибки "файл не обнаружен" jr nz,A83DD push hl ;ld a,(D96AD) ;; длина строки (inline.asm) ld a,(struct_input_line+4) ; длина строки ld b,a A83AF: ld a,(hl) cp " "+1 jr c,A83B7 inc hl djnz A83AF A83B7: ld e,b ld d,0 add hl,de push hl ld e,4 add hl,de pop de ex de,hl ld c,b ld b,0 inc c lddr inc hl ld (hl),"." inc hl ld (hl),"B" inc hl ld (hl),"A" inc hl ld (hl),"T" pop hl jp A83E8 ; выполнить bat-файл (batch.asm) ; Выполнить exe-файл ; hl=имя файла A83D7: ld bc,0*256 + Dss.Exec ; загрузить программу, выполнить файл RST ToDSS ;R10 CALL Restore_Screen ;R10 ret nc A83DD: cp DSS_Error.sys.INVALID_HANDLE ; код ошибки "нет дескриптора" jp nc,print_err_message ; вывод сообщения xor a ; индекс "Bad command or file name" jp print_err_message