Подскажите кто что сможет по курсовой
-сдвигать на одну строку вниз/вверх
-сдвигать на страницу вниз/вверх
-на конец/начало файла
Нужен алгоритм обработки файла и правильного вывода.
Мне важно создать этот алгоритм, однако у самого идеи иссякли. Буду благодарен за участие.
Подскажите как мне сделать (Text_viewer под DOS) вывод на экран содержимого файла? Проблема в том, что нужно выводить 22 строки по 80 символов на экран 80x25 соответственно, причем далее при помощи клавиш мы должны юзать файлик:
-сдвигать на одну строку вниз/вверх
-сдвигать на страницу вниз/вверх
-на конец/начало файла
Нужен алгоритм обработки файла и правильного вывода.
Мне важно создать этот алгоритм, однако у самого идеи иссякли. Буду благодарен за участие.
Конкретно с прокруткой экрана проблемы есть?
Конкретно с прокруткой экрана проблемы есть?
проблема с построчным выводом, так чтоб создавался универсальный буфер(на 23 строки) при прокрутке на строку, страницу и в начало/конец файла
проблема с построчным выводом, так чтоб создавался универсальный буфер(на 23 строки) при прокрутке на строку, страницу и в начало/конец файла
1)Зачем буфер? Читай свой файл ЦЕЛИКОМ куда-нибудь желательно за пределы программной "начинки" - т.е не занимая место в exe бесконечными нулями (я удивляюсь - представляете, некоторые странные люди умудряются даже стековый сегмент забивать в исполняемый файл!)
2) для прокрутки экрана используй приблизительно следующее:
mov ax, (dir SHL 8) OR lines
;dir-направление прокрутки 6-вниз 7-вверх
;lines-количество прокручиваемых строк
mov bx, (back SHL 0Ch)
;back-цвет заполнения фоном новых строк
mov cx, ((x-1) SHL 8) OR (y-1)
mov cx, ((x1-1) SHL 8) OR (y1-1)
;x,y с индексом 1-для нижнего правого угла, без ;оного-для верхнего левого
int 10h
3) Плюнь ты на все эти свои телетайпные функции вывода на экран-неужели так трудно писать всё сразу в видеопамять, в обход прерываний со всякими там вынужденными знаками денежной единицы или нулями (на дух не переношу извращённую идеологию языка C!) на концах строк?
4) Сохраняй указатели начала и конца отображаемого на экране участка буфера считанного файла. Если юзер жмёт на стрелки - выводи по одной дополнительной строчке с проверкой границ диапазона, разумеется. С перемещением в конец файла или на начало-вообще-нет проблем (если, конечно, не пытаться всё оптимизировать, как последний маньяк - я сам в этом плане далеко не пример для подражания(в смысле-ищу наиболее эффективные способы реализации алгоритма))-выводишь свои пресловутые 23 строки из начала или из конца буфера, ничего никуда не прокручивая.
5) Не пытайся только открывать файлы по 2Gb (да и 500K тоже под MS-DOS обеспечат глухое зависание) - никто, я думаю, и не требует, чтобы твоя программа была абсолютно универсальной :-)
А вообще-то, нельзя ли поподробнее, с чем же всё-таки загвоздка у тебя произошла?
1)Зачем буфер? Читай свой файл ЦЕЛИКОМ куда-нибудь желательно за пределы программной "начинки" - т.е не занимая место в exe бесконечными нулями (я удивляюсь - представляете, некоторые странные люди умудряются даже стековый сегмент забивать в исполняемый файл!)
2) для прокрутки экрана используй приблизительно следующее:
mov ax, (dir SHL 8) OR lines
;dir-направление прокрутки 6-вниз 7-вверх
;lines-количество прокручиваемых строк
mov bx, (back SHL 0Ch)
;back-цвет заполнения фоном новых строк
mov cx, ((x-1) SHL 8) OR (y-1)
mov cx, ((x1-1) SHL 8) OR (y1-1)
;x,y с индексом 1-для нижнего правого угла, без ;оного-для верхнего левого
int 10h
3) Плюнь ты на все эти свои телетайпные функции вывода на экран-неужели так трудно писать всё сразу в видеопамять, в обход прерываний со всякими там вынужденными знаками денежной единицы или нулями (на дух не переношу извращённую идеологию языка C!) на концах строк?
4) Сохраняй указатели начала и конца отображаемого на экране участка буфера считанного файла. Если юзер жмёт на стрелки - выводи по одной дополнительной строчке с проверкой границ диапазона, разумеется. С перемещением в конец файла или на начало-вообще-нет проблем (если, конечно, не пытаться всё оптимизировать, как последний маньяк - я сам в этом плане далеко не пример для подражания(в смысле-ищу наиболее эффективные способы реализации алгоритма))-выводишь свои пресловутые 23 строки из начала или из конца буфера, ничего никуда не прокручивая.
5) Не пытайся только открывать файлы по 2Gb (да и 500K тоже под MS-DOS обеспечат глухое зависание) - никто, я думаю, и не требует, чтобы твоя программа была абсолютно универсальной :-)
А вообще-то, нельзя ли поподробнее, с чем же всё-таки загвоздка у тебя произошла?
1)не совсем понял куда [, да и как] предлагаешь это?
2)до прокрутки дело пока не дощло, но я думаю при правильной организации обработки файла проблем у меня с ней особых не будет...
3)видеопамяти BIOS мне хватит на 4 страницы... мало...
4)на этот счет я думаю, что можно было б организовать по-строчное считывание файла и на 80 обрезать строку (кстати при этом можно двигать экран вправо/влево, но длину строки мы не знаем, поэтому придеться отводить память), запоминать придется смещение о начала файла ( и на всякий случай число считанных байт - вдруг понадобятся)
5)да универсальности не требуют, но открывать и смотреть должна ЛЮБОЙ файл...
загвоздка у меня в плане того, что необходимо постоянно подсчитывать число выводимых строк/байт дабы не оказалось что на страницу 80х25 вывели 26 и более строк, отсюда проблемы:
1)как так грамотно организовать ввод чтоб обработка как можно проше (буфер на 1860 байт, видеопамять или ещё как)
2)организация выводимого на экран !хотя при универсальной 1) многие проблемы сразу отпадают
3)как вообще двигать экран влево/вправо
А вообще цель курсача, я так понимаю, повторить F3
в Dos Navigator, Far и т.п.
Подскажите как мне сделать (Text_viewer под DOS) вывод на экран содержимого файла? Проблема в том, что нужно выводить 22 строки по 80 символов на экран 80x25 соответственно, причем далее при помощи клавиш мы должны юзать файлик:
-сдвигать на одну строку вниз/вверх
-сдвигать на страницу вниз/вверх
-на конец/начало файла
Нужен алгоритм обработки файла и правильного вывода.
Мне важно создать этот алгоритм, однако у самого идеи иссякли. Буду благодарен за участие.
Чтобы не разводить демагогию, могу сказать так: могу попробовать сделать за какую-нибудь железячку( а вот это я уже писал в разделе приму железо в дар)
Чтобы не разводить демагогию, могу сказать так: могу попробовать сделать за какую-нибудь железячку( а вот это я уже писал в разделе приму железо в дар)
Это не ты ли в Ростове живёшь? Могу подарить C-Media 8738 карту :-)) - оно тебе надо?
Это не ты ли в Ростове живёшь? Могу подарить C-Media 8738 карту :-)) - оно тебе надо?
Угу. Если прочитал и все еще есть желание прислать железячку (Я как понимаю ты в Москве живешь), то дай свое мыло, а я пришлю аддрес, или пиши мне [email]apotap@uic.rsu.ru[/email], на связь выхожу только по будням, т.к. инет муниципальный( халявный), вот :-)
Осталась небольшая проблема: как записать в видеопамять? на ско-ко я понял к не надо обращаться с 08B000H, но чето не выходит...
1. Не 8В000Н, а начиная с адреса 0xB800:0x0000
2. Автору темы:
Если хочешь, могу за пиво написать курсач. К тому же мы с тобой живем оба в Москве + м.быть будущие единомышленники (если ты, коэшо, любишь кодить).
Осталась небольшая проблема: как записать в видеопамять? на ско-ко я понял к не надо обращаться с 08B000H, но чето не выходит...
Да я думаю, что с прямым выводом в видеопамять проблем не должно быть, да кстати я уже начал делать твою прогу, как только сделаю, так сразу же скажу. Да кстати я выводил средствами биоса, а обрабатывал я только следущие байты: 0dh 0ah, и 09h, перенос строки и таб соответственно, а остальные вывожу как есть.Да, уже обрабатывается page_down.
Осталась небольшая проблема: как записать в видеопамять? на ско-ко я понял к не надо обращаться с 08B000H, но чето не выходит...
ЗЫ: я уже написал прогу. Пиво будет? %-Р
ЗЫ: я уже написал прогу. Пиво будет? %-Р
Хы, прям-таки чудеса какие-то, и я уже кое-чо сделал!
Пришли мне штоли свой вариант, я посмотрю, а для qdube, пускай
даст мыло, а я скину свой вариантик.
ЗЫ: я уже написал прогу. Пиво будет? %-Р
пиши на мыло [email]dude007@mail.ru[/email], договоримси на счет пива...
пиши на мыло [email]dude007@mail.ru[/email], договоримси на счет пива...
ну чё, мож всё таки по пиву