|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.01.2010, 01:20 | #1 |
Регистрация: 16.01.2010
Сообщений: 6
|
Паралельная обработка прерываний
Здравствуйте!
Я пишу 16 разрядное приложение под ДОС на чистом С с ассемблерными вставками. Делаю графический интерфейс. Ну кто-нибудь помнит, среда разработки Турбо-Си? Вот, по образу и подобию. Я подключил мышь с помощью прерываний 0х33. Но возникла проблема, мне нужны горячие клавиши, следовательно я должен обрабатывать прерывания и от клавиатуры, а как это сделать параллельно с мышью? Конечно я сделал по другому, опросом 62h,64h портов с помощью in, out. Но мне кажется это вандализм, имеется ли другой способ? Имеется ещё вопрос. Для создания графического интерфейса я пользуюсь библиотекой conio.h со всеми вытекающими функциями window и прочие. Сложилась такая ситуация, мне необходимо ввести строку(например путь файла). Я создаю окно в центре экрана с запросом и вызываю cgets(), в этой функции нет ограничения количества введённых символов, поэтому если пользователь введёт большее количество символов то он выйдет за пределы, созданного окна. Существует ли функция с ограничением количества введенных символов? Как это можно устранить? |
19.01.2010, 00:11 | #2 |
Регистрация: 16.01.2010
Сообщений: 6
|
Возможно, имеет смысл перенести тему в Assembler?
|
20.01.2010, 14:22 | #3 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
JoulupukkiI
Возможно, имеет смысл отказаться от написания 16-разрядного приложения под ДОС и начать писать 32-разрядные приложения под Windows? |
21.01.2010, 10:24 | #4 |
Форумчанин
Регистрация: 31.05.2009
Сообщений: 786
|
Клавиатуру лучше обрабатывать прерыванием 16h
Вот к примеру ф-я, читающая состояние сдвиговых клавиш: INT 16 - KEYBOARD I/O - GET SHIFT STATUS AH = 2 AL = SHIFT STATUS BITS 0 = RIGHT SHIFT KEY DEPRESSED 1 = LEFT SHIFT KEY DEPRESSED 2 = CTRL DEPRESSED 3 = ALT DEPRESSED 4 = SCROLL LOCK ACTIVE 5 = NUM LOCK ACTIVE 6 = CAPS LOCK ACTIVE 7 = INSERT STATE ACTIVE вместо cgets можно использовать cscanf: cscanf("%20s",path); ввод ограничивается 20 символами |
21.01.2010, 11:38 | #5 |
Регистрация: 16.01.2010
Сообщений: 6
|
Спасибо.
Я фанат scanf(), очень удобная функция, только я тормознул, пытался использовать чистый scanf и у меня не получалось, небыло эхо печати, т.е. не видно что я вводил. Теперь всё работает, спасибо. //-------------- У меня задача написать 16-разрядное приложение. Не по теме хочу сказать. Я считаю, что программирование под Windows это халтура, там вообще можно ничего своего не писать, всё и так уже написано в winAPI, только нужные функции вызывай. Многие такие программисты, которые рисуют окошки в билдере даже понятия не имеют как это всё работает, какие там структуры заполняются, какие функции используются, это не правильно. |
21.01.2010, 12:04 | #6 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
JoulupukkiI
Прежде чем словами кидаться -- возьми и напиши простейшее окно на ассемблере... Будут тебе и winAPI, только нужные функции вызывай, и структуры будешь сам заполнять... Можно подумать ты сам компилятор на С написал и на нем же делаешь свои приложения или свою любимую scanf разобрал до байтика... |
21.01.2010, 13:38 | #7 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
21.01.2010, 15:45 | #8 |
Регистрация: 16.01.2010
Сообщений: 6
|
Уже офтоп.
Да, я писал чистые приложение для windows. Каюсь, я начинал с уроков Iczelion'а. Вы хотите меня убедить, что это очень трудно? Сколько бы я ни писал, 90% времени уменя уходит на google и msdn, это првильно? |
21.01.2010, 16:02 | #9 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
не в этом суть...да вам дают готовые контролы(BUTTON EDIT и тд) но они даны для того чтоб был единый дизайн(хотя от него просто отречься)...свои классы писать уже не так просто... да IDE по типу Делфи, C++ Builder...гораздо проще...накидал...и вот те компоненты... но не забывай и об одной вещи, главное алгоритмы всетаки...если твоя прога работает хорошо, то придется ей пользоватся(я беру идеальную ситуацию что нет конкурентов)...а если работает криво но у нее шикарный дизайн...то кому она нужна? ЗЫ: тем более самое важное...винда работает в защищенном режиме процессора...и мы находимся в 3 кольце...а система в 0...у нас просто нет прерываний....тем более у нас многозадачность(чего нет в досе) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
23.01.2010, 01:03 | #10 |
Форумчанин
Регистрация: 26.04.2009
Сообщений: 270
|
Пепел Феникса
ЗЫ: так может г-н JoulupukkiI напишит свою операционку переведет адреацию памяти с реального в защещенный, напишит свою дескрипторную таблицу....и, скоро на порге будет не Windos а, какая не будь другая система..... Откровенно говоря мне тоже больше нравиться "копаться" внизком уровне...как Вы говорить в "0" |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка прерываний | Журенова Катя | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 11.05.2009 01:55 |
обработчик прерываний по таймеру | Петруха | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 26.03.2009 20:57 |
Контроллер прерываний | smileman | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 16.11.2008 14:23 |
Список функций прерываний | Arhe | Помощь студентам | 5 | 22.02.2008 01:05 |
Паралельная форма!!! | metamfetamin | Помощь студентам | 3 | 19.12.2007 20:44 |