;------------------------------------------------- ; Вывод сообщения ошибки по индексу ; вход: a=номер ошибки ;------------------------------------------------- print_err_message: ld e,a ld d,0 inc de ld hl,ERR0 ; массив строк ld bc,ERR0.Size ; размер массива call LCPIR ; найти строку call PRINTZ ; формат. вывод строки ; call newline jp newline ; Вывод строки ошибки ;A850D: invalid_param: ld de,MAIN_MSG.INVALID ; индекс "Invalid parametr" jr ECHO_MESSAGE ;------------------------------------------------- ; Вывод сообщения по индексу ; вход: de=индекс строки ;------------------------------------------------- ECHO_MESSAGE: call FMESAGE ; найти строку по индексу jp PRINTZ ; формат. вывод строки ;jp A82CC ; узнать и уст. полож. курсора ; Найти строку по индексу ; вход: de=индекс строки ; выход: hl=строка FMESAGE: inc de ld hl,MAIN_MSG.TABLE ; начало массива строк ld bc,MAIN_MSG.TABLE.Size ; размер массива LCPIR: xor a cpir ret po ret nz ;R11 XOR A CP (HL) JR Z,.no_mess ; dec de ld a,d or e jr nz,LCPIR ret .no_mess: INC HL RET ;----------------------------------------------------------------------; ; Форматированный вывод строки с подстановкой аргументов вместо %1-%9 ; вход: hl=буфер строки ;----------------------------------------------------------------------; PRINTZ: ld a,(hl) inc hl or a ret z ; cp '%' jr z,.check_PRM .char: ld c,Dss.PutChar RST ToDSS jp PRINTZ ; .bad_PRM: ld a,'%' jp .char ; .check_PRM: ld a,(hl) cp '9'+1 jr nc,.bad_PRM ; inc hl sub '1' push hl ADD A ADD A ADD A ADD A LD L,A LD H,0 ; ld bc,Buffers.bat_params.PRM1 add hl,bc ld c,Dss.PChars ; вывод строки RST ToDSS pop hl jp PRINTZ /* ;[x] исправлен баг с выходом за пределы буфера PRM. Чуть оптимизирована ;----------------------------------------------------------------------; ; Форматированный вывод строки с подстановкой аргументов вместо %1-%9 ; вход: hl=буфер строки ;----------------------------------------------------------------------; PRINTZ: ld a,(hl) inc hl or a ret z cp '%' jr z,.check_PRM .char: ld c,Dss.PutChar RST ToDSS jp PRINTZ .bad_PRM: ld a,'%' jp .char .check_PRM: ld a,(hl) cp '9'+1 jr nc,.bad_PRM inc hl sub '1' push hl ;!TEST ;ld l,a ;ld h,0 ;add hl,hl ;1+1=2 ;add hl,hl ;2+2=4 ;add hl,hl ;4+4=8 ;add hl,hl ;8+8=16 размер отдельного подбуфера ADD A ADD A ADD A ADD A LD L,A LD H,0 ; ld bc,Buffers.bat_params.PRM1 add hl,bc ld c,Dss.PChars ; вывод строки RST ToDSS pop hl jp PRINTZ */ ; буферы аргументов командной строки ; PRM1: BLOCK 16,0 ; аргумент %1 ; PRM2: BLOCK 16,0 ; аргумент %2 ; PRM3: BLOCK 16,0 ; аргумент %3 ; PRM4: BLOCK 16,0 ; аргумент %4 ; PRM5: BLOCK 16,0 ; аргумент %5 ; PRM6: BLOCK 16,0 ; аргумент %6 ; PRM7: BLOCK 16,0 ; аргумент %7 ; PRM8: BLOCK 16,0 ; аргумент %8 ; PRM9: BLOCK 16,0 ; аргумент %9 ;