Собственно вопрос в заголовке. Порылся в инете, но ни чего не нашел, как в DOS скажем сделать окно типа "EDIT", сделать кнопку, существуют ли какие-то компоненты уже в DOSe или все это надо рисовать самому?
Первое не обязательна. Code (Text): { DOS Pascal } {$F+} Procedure Outt(Color,X,Y:byte; AddrText:pointer); Begin Asm pusha push ds push es push ScreenSeg pop es cld mov al,160 mov ah,Y add ah,StartYWindow cmp ah,1 jb @@NotDisplay cmp ah,MaxRows ja @@NotDisplay dec ah mul ah mov bx,ax xor dx,dx mov dl,X add dl,StartXWindow lds si,AddrText lodsb xor ch,ch mov cl,al test cx,cx jz @@NotDisplay mov ah,Color @@FillStr: lodsb cmp dl,1 jb @@SkipDisplay cmp dl,MaxCol ja @@SkipDisplay mov di,dx dec di shl di,1 add di,bx stosw @@SkipDisplay: inc dl loop @@FillStr @@NotDisplay: pop es pop ds popa End; End;
окна какого типа? граф/текст? для текст - турбовижн или, например, ауи от опенваткома или еще поищите
Окна текстовые, надо просто подправить одну программу написанную для DOSa, а она вся сделана в виде таких окошечек, вот и возник вопрос, как все это раньше делалось, может были для этого какие то библиотеки в составе DOSа. А какой отладчик можете посоветовать для программ под DOS?
Либо через BIOS - это будет видно если перехватить определенные функции int 10h (удобно в SoftIce) - если да, то попадешь сначала в библиотечную функцию, или действительно через прямую запись в видеобуфер (маловероятно, но...). В любом случае это будет subprogram - поднимаясь вверх по вызовам ,,, и т.д. td или просто SoftIce (для проблемных случаев, под win который).
Практически никто во времена ДОСа не юзал int 10h, ибо слишком медленно. Обычное дело было - рисовать прямо в видеопамять.
тебе сильно повезет если в просторах сети найдешь исходник msdos там на с реализация мини винды на псевдографике, называется коровой - cow - charaster oriented windows
с интерфейсом мотора управляющего окнами разобрался ?? В DOS средств для поддержки окон нет. Существовало много разных оконных движков особенно псевдографических. Автор hddspeed например испоьзовал борландовский.
На окна решил забить, скачал SoftIce 2.8 для DOS и описание, но вот пока запустить его не могу. Единственное не могу понять, на этой машине еще установлина Win98, соответственно при запуске HIMEM.SYS и ЕММ386.EXE грузится из папки WINDOWS. Вот чем они отличаются от родных DOSовских, незнаю, может поэтому SoftIce не работает. Вот все собираюсь дойти до той машины скормить ей из DOS6.22 HIMEM.SYS и ЕММ386.EXE может поможет запутить SoftIce.
al79 забей на СофтАйс для дос. Как любитель доса, могу сказать - неудобно. ОСОБЕННО если отлаживаешь не sys, а обычную пользовательскую программу. Хороший отладчик - insight. А если специальные случаи, вместо отладки лучше дампы скидывать, а потом в дизассемблере нужное (и только нужное) место смотреть. Дамперов под ДОС масса, в том числе - с выбором нужной области памяти. - если у тебя старая прога, работающая с базами данных (фокспро или клиппер какой), и ты в нее хочешь в форму добавить новое поле... которого вообще не было... то флаг тебе в руки, но я бы не взялся, будь я на твоем месте. Я бы сказал "е... в смысле, дальше мучайтесь без меня". Потому что дело не ограничится добавлением поля... легче всю базу переконвертировать и под виндоуз переписать оболочку. - если проблема стоит в русификации - для этого не нужно разбираться как выводились окна. Ищещь строку, заменяешь на свое. - если возникает ошибка "переполнение", то это легко устранимо, опять же, не разбираясь в окнах. Там определяется скорость процессора путем выполнения некоторого цикла. И потом что-то на что-то делится... А поскольку на быстрых машинах этот цикл выполняется очень быстро, то число получается маленькое... и переполнение при делении. Поэтому, может стоит подробнее рассказать, чего именно надо сделать? Чтоб зазря месяц на разборки с SoftIce 2.8 не тратить?
Пробовал SoftIce загружать до HIMEM.SYS и ЕММ386.EXE, тогда он раза три останавливается и в дампе все показывает, что остановился в точке вызова INT 3, а потом просто все виснет. Если загружать после HIMEM.SYS и ЕММ386.EXE, то выдает сообщеие не поню точно, но что то там ругается на CONTROLER 386. Дело даже не в руссификации, просто эту программу надо заставить кирилицу принимать, а то сейчас она ругается "Инвалидный символ". А по поводу окон сначала думал, что по окну можно найти его обработчик ну соответственно было бы проще поправить программу.
Нет там обработчиков там простая плоская логика - ждать ввода строки, проверить на валидность. Должна быть элементарная проверка - "если символ > 127, то выдать ошибку". Как правило, это делалось либо в случаях когда введенное являлось потом именем файла (файлы в ДОС именуются в формате 8.3, только латинские символы и цифры, некоторые специальные символы (!-#) ), либо по каким-то соображениям автора. Тебе надо не отладчик. Тебе надо дизассемблер. Типа Sourcer. Хотя ИДА тоже вполне подойдет. 1. Смотришь на предмет упакованности. Если упаковано чем-то, распаковываешь. 2. Распакованный скармливаешь дизассемблеру. 3. Ищешь то, что может быть вводом строки. Скорее всего, это сделано через прерывания, а не чтением скан-кодов из порта. Скорее всего, это в единственном месте (в процедуре, которую смело можешь назвать InputString). Ищещь вызовы этой процедуры - либо поиском в листинге соурсера, либо используя файл перекрестных ссылок, либо в ИДЕ - там все проще и удобнее. 4. После найденных точек вызова процедуры ищещь проверку на валидность. Проверка может быть как внутри процедуры (тогда ты ее уже найдешь на шаге 3, глобальный запрет кириллицы), либо в одном-двух местах (авторы посчитали, что тут критически важно позволять ввод только латинских символов). Как-то так.
Что за программа, если не секрет? Может быть легче выложить куда-нибудь, показать в натуре? Задача выглядит несложной и вполне решаемой, если только какие экзотические упаковщики-крипторы не используются, или это в самом деле окажется база данных клиппер-парус-фокспро для ДОС, там проверка может быть мудреной. Через описание допустимых знаков в каком-нибудь отдельном файле. Тады ой... время тратить жалко.