Russian English
   Basic.net
Среда, 23.09.2020, 03:34
Меню сайта
Категории раздела
Basic [44]
Помощь [0]
Облако тегов
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа
Главная » Статьи » Basic

Русская буква "р" в QBasic
Share |
Стандартными средствами (INPUT, INPUT$, LINE INPUT, INKEY$)  невозможно  ввести  символ с кодом 224 - это малая русская буква «р» в альтернативной кодировке.  Это связано с  некорректным опросом клавиатуры, который выполняет BASIC. Есть несколько вариантов решения.

1. Использовать драйвер русских букв с изменяемой раскладкой клавиатуры,  который  бы  подставлял  английскую букву «p» вместо русской «р»,  например KEYRUS. Однако, если вы вводите таким способом,  скажем  фамилии,  то их невозможно будет отсортировать по алфавиту;
2. Другим вариантом является использование «примочек» к  фидошному редактору  сообщений GoldED,  например GEDSTART.COM.  Эта программа подменяет при вводе текста не только «H», но и «р». Hедостатки такого подхода те же, что и описанные выше.
3. Отказаться  от  стандартных операторов BASIC и опрашивать клавиатуру самостоятельно, используя прерывание BIOS 16h, функция 0. Для  использования прерываний необходимо загрузить среду с параметром «/L».

CHAR.BAS

‘$INCLUDE: ‘interupt.bi’
DECLARE SUB Char (c$)

‘ Define the type needed for Interrupt
TYPE RegType
ax    AS INTEGER
bx    AS INTEGER
cx    AS INTEGER
dx    AS INTEGER
bp    AS INTEGER
si    AS INTEGER
di    AS INTEGER
flags AS INTEGER
END TYPE

DIM SHARED Inreg AS RegType
DIM SHARED Outreg AS RegType

‘ Вызов процедуры CHAR, печать всех вводимых символов
‘ ESC – конец работы программы
DO
CALL Char(a$): PRINT a$;
IF a$ = CHR$(27) THEN EXIT DO
LOOP
END
SUB Char (c$)


‘ *****************************************************
‘ Данная процедура корректно обрабатывает ввод всех
‘ символов  ASCII, включая малую русскую букву «р»
‘ используя прерывание BIOS 16h, функция 0.
‘ Вызов: CALL Char (variable$)
‘ Аналог:
‘ DO: variable$ = INKEY$: LOOP WHILE variable$ = «»
‘ *****************************************************

n = &H16: ‘ прерывание 16h
inreg.ax = 0: ‘ функция 0
CALL Interrupt(n, inreg, outreg)
nah = outreg.ax \ 256: nal = outreg.ax MOD 256
c$ = CHR$(nal): IF nal = 0 THEN c$ = c$ + CHR$(nah)
END SUB

4. Пропатчить саму среду QuickBASIC и все необходимые для компиляции библиотеки:

QB45.CRK

Russian «p» for QuickBasic 4.5
(c) Igor Knizhny (2:5020/1343.20)

File QB.EXE
qb.exe
00024A75: 3C 0A
00024A76: E0 E4
00024A78: 14 04
00024A7A: F0 E0

File BRUN45.EXE
brun45.exe
00007C97: 3C 0A
00007C98: E0 E4
00007C9A: 14 04
00007C9C: F0 E0

File BCOM45.LIB
bcom45.lib
0001C83C: 3C 0A
0001C83D: E0 E4
0001C83F: 14 04
0001C841: F0 E0


5. Перейти  на следующую версию языка - Microsoft BASIC Professional Development System, где эта ошибка, наконец, исправлена.

Категория: Basic | Добавил: Admin (11.12.2011)
Просмотров: 3413 | Теги: статьи qbasic | Рейтинг: 5.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Наш опрос
Какую версию Basic вы предпочитаете?
Всего ответов: 2028

© Basic.ucoz.net, 2020