================================================================
КОДЫ КЛАВИШ В КЛАРИОНЕ
----------------------------------------------------------------
Формат кода клавиши в Кларионе
================================================================
Каждой клавише клавиатуры соответствует код клавиши в Кларионе.
Коды от 0 до 255 - это стандартные ASCII коды, от 256 и выше
специфичны для языка Кларион. Коды клавиш Клариона возвращаются
функцией KEYCODE() и имеют следующий формат:
----T---T---T---T------------¬
¦ F ¦ A ¦ C ¦ N ¦ КОД ¦
L---+---+---+---+-------------
Биты 11 10 9 8 7 0
Значения битов:
F=1 - Код функционально клавиши (коды 1-10 для Fl-F10)
A=1 - Клавиша нажата вместе с Alt
C=1 - Клавиша нажата вместе с Ctrl
A и C=1 - Клавиша нажата вместе с Shift
N=1 - Код не выводится на экран
----------------------------------------------------------------
Таблицы кодов клавиш
-----------------T--------T--------T--------T--------¬
¦ Клавиша ¦ Код ¦ +Shift ¦ +Ctrl ¦ +Alt ¦
+----------------+--------+--------+--------+--------+
¦ пробел ¦ 32 ¦ 289 ¦ 290 ¦ ¦
¦ 0 ) ¦ 48 ¦ 41 ¦ ¦ 1072 ¦
¦ 1 ! ¦ 49 ¦ 33 ¦ ¦ 1073 ¦
¦ 2 @ ¦ 50 ¦ 64 ¦ 562 ¦ 1074 ¦
¦ 3 # ¦ 51 ¦ 35 ¦ ¦ 1075 ¦
¦ 4 $ ¦ 52 ¦ 6 ¦ ¦ 1076 ¦
¦ 5 % ¦ 53 ¦ 7 ¦ ¦ 1077 ¦
¦ 6 ^ ¦ 54 ¦ 94 ¦ 566 ¦ 1078 ¦
¦ 7 & ¦ 55 ¦ 38 ¦ ¦ 1079 ¦
¦ 8 * ¦ 56 ¦ 42 ¦ ¦ 1080 ¦
¦ 9 ( ¦ 57 ¦ 40 ¦ ¦ 1081 ¦
¦ a A ¦ 97 ¦ 65 ¦ 577 ¦ 1089 ¦
¦ b B ¦ 98 ¦ 66 ¦ 578 ¦ 1090 ¦
¦ c C ¦ 99 ¦ 67 ¦ 579 ¦ 1091 ¦
¦ d D ¦ 100 ¦ 68 ¦ 580 ¦ 1092 ¦
¦ e E ¦ 101 ¦ 69 ¦ 581 ¦ 1093 ¦
¦ f F ¦ 102 ¦ 70 ¦ 582 ¦ 1094 ¦
¦ g G ¦ 103 ¦ 71 ¦ 583 ¦ 1095 ¦
¦ h H ¦ 104 ¦ 72 ¦ 584 ¦ 1096 ¦
¦ i I ¦ 105 ¦ 73 ¦ 585 ¦ 1097 ¦
¦ j J ¦ 106 ¦ 74 ¦ 586 ¦ 1098 ¦
¦ k K ¦ 107 ¦ 75 ¦ 587 ¦ 1099 ¦
¦ l L ¦ 108 ¦ 76 ¦ 588 ¦ 1100 ¦
¦ m M ¦ 109 ¦ 77 ¦ 589 ¦ 1101 ¦
¦ n N ¦ 110 ¦ 78 ¦ 590 ¦ 1102 ¦
¦ o O ¦ 111 ¦ 79 ¦ 591 ¦ 1103 ¦
¦ p P ¦ 112 ¦ 80 ¦ 592 ¦ 1104 ¦
¦ q Q ¦ 113 ¦ 81 ¦ 593 ¦ 1105 ¦
¦ r R ¦ 114 ¦ 82 ¦ 594 ¦ 1106 ¦
¦ s S ¦ 115 ¦ 83 ¦ 595 ¦ 1107 ¦
¦ t T ¦ 116 ¦ 84 ¦ 596 ¦ 1108 ¦
¦ u U ¦ 117 ¦ 85 ¦ 597 ¦ 1109 ¦
¦ v V ¦ 118 ¦ 86 ¦ 598 ¦ 1110 ¦
¦ w W ¦ 119 ¦ 87 ¦ 599 ¦ 1111 ¦
¦ x X ¦ 120 ¦ 88 ¦ 600 ¦ 1112 ¦
¦ y Y ¦ 121 ¦ 89 ¦ 601 ¦ 1113 ¦
¦ z Z ¦ 122 ¦ 90 ¦ 602 ¦ 1114 ¦
¦ - _ ¦ 45 ¦ 95 ¦ 557 ¦ 1169 ¦
¦ = + ¦ 61 ¦ 43 ¦ ¦ 1185 ¦
¦ [ { ¦ 91 ¦ 123 ¦ 603 ¦ ¦
¦ ] } ¦ 93 ¦ 125 ¦ 605 ¦ ¦
¦ ; : ¦ 59 ¦ 58 ¦ ¦ ¦
¦ ' " ¦ 39 ¦ 34 ¦ ¦ ¦
¦ ` ~ ¦ 96 ¦ 126 ¦ ¦ ¦
¦ \ | ¦ 92 ¦ 124 ¦ ¦ ¦
¦ , < ¦ 44 ¦ 60 ¦ ¦ ¦
¦ . > ¦ 46 ¦ 62 ¦ ¦ ¦
¦ / ? ¦ 47 ¦ 63 ¦ ¦ ¦
¦ Esc ¦ 256 ¦ 273 ¦ 279 ¦ ¦
¦ Enter ¦ 257 ¦ 274 ¦ 280 ¦ ¦
¦ Backspace ¦ 258 ¦ 275 ¦ 281 ¦ ¦
¦ Tab ¦ 259 ¦ 276 ¦ ¦ ¦
¦ Gray * ¦ 260 ¦ ¦ 282 ¦ ¦
¦ Home ¦ 261 ¦ ¦ 283 ¦ ¦
¦ Стрелка вверх ¦ 262 ¦ ¦ ¦ ¦
¦ Page Up ¦ 263 ¦ ¦ 284 ¦ ¦
¦ Gray - ¦ 264 ¦ 277 ¦ ¦ ¦
¦ Стрелка влево ¦ 265 ¦ ¦ 285 ¦ ¦
¦ Стрелка вправо ¦ 266 ¦ ¦ 286 ¦ ¦
¦ Gray + ¦ 267 ¦ 278 ¦ ¦ ¦
¦ End ¦ 268 ¦ ¦ 287 ¦ ¦
¦ Стрелка вниз ¦ 269 ¦ ¦ ¦ ¦
¦ Page Down ¦ 270 ¦ ¦ 288 ¦ ¦
¦ Insert ¦ 271 ¦ ¦ ¦ ¦
¦ Delete ¦ 272 ¦ ¦ ¦ ¦
¦ F1 ¦ 2049 ¦ 3585 ¦ 2561 ¦ 3073 ¦
¦ F2 ¦ 2050 ¦ 3586 ¦ 2562 ¦ 3074 ¦
¦ F3 ¦ 2051 ¦ 3587 ¦ 2563 ¦ 3075 ¦
¦ F4 ¦ 2052 ¦ 3588 ¦ 2564 ¦ 3076 ¦
¦ F5 ¦ 2053 ¦ 3589 ¦ 2565 ¦ 3077 ¦
¦ F6 ¦ 2054 ¦ 3590 ¦ 2566 ¦ 3078 ¦
¦ F7 ¦ 2055 ¦ 3591 ¦ 2567 ¦ 3079 ¦
¦ F8 ¦ 2056 ¦ 3592 ¦ 2568 ¦ 3080 ¦
¦ F9 ¦ 2057 ¦ 3593 ¦ 2569 ¦ 3081 ¦
¦ F10 ¦ 2058 ¦ 3594 ¦ 2570 ¦ 3082 ¦
¦ F11 ¦ 2059 ¦ 3595 ¦ 2571 ¦ 3083 ¦
¦ F12 ¦ 2060 ¦ 3596 ¦ 2572 ¦ 3084 ¦
L----------------+--------+--------+--------+---------
KEYCODES.EQU
Мнемонические EQUATE-метки кодов клавиш хранятся в файле KEYCODES.EQU.
Это файл в формате CLARION SOURCE, который содержит оператор EQUATE для
каждого кода клавиши. Изначально этот файл находится в том каталоге, в
который был установлен CDD. Этот файл можно включить в исходный текст
программы оператором: INCLUDE('KEYCODES.EQU').
Коды клавиш в этом файле перечислены в алфавитном порядке присвоенных им
меток.
Alt0 EQUATE(1072) !Alt-0
Alt1 EQUATE(1073) !Alt-1
Alt2 EQUATE(1074) !Alt-2
Alt3 EQUATE(1075) !Alt-3
Alt4 EQUATE(1076) !Alt-4
Alt5 EQUATE(1077) !Alt-5
Alt6 EQUATE(1078) !Alt-6
Alt7 EQUATE(1079) !Alt-7
Alt8 EQUATE(1080) !Alt-8
Alt9 EQUATE(1081) !Alt-9
AltA EQUATE(1089) !Alt-A
AltB EQUATE(1090) !Alt-B
AltC EQUATE(1091) !Alt-C
AltD EQUATE(1092) !Alt-D
AltE EQUATE(1093) !Alt-E
AltEqual EQUATE(1085) !Alt-РАВНО
AltF EQUATE(1094) !Alt-F
AltF1 EQUATE(3073) !Alt-F1
AltF10 EQUATE(3082) !Alt-F10
AltF11 EQUATE(3083) !Alt-F11
AltF12 EQUATE(3084) !Alt-F12
AltF2 EQUATE(3074) !Alt-F2
AltF3 EQUATE(3075) !Alt-F3
AltF4 EQUATE(3076) !Alt-F4
AltF5 EQUATE(3077) !Alt-F5
AltF6 EQUATE(3078) !Alt-F6
AltF7 EQUATE(3079) !Alt-F7
AltF8 EQUATE(3080) !Alt-F8
AltF9 EQUATE(3081) !Alt-F9
AltG EQUATE(1095) !Alt-G
AltH EQUATE(1096) !Alt-H
AltI EQUATE(1097) !Alt-I
AltJ EQUATE(1098) !Alt-J
AltK EQUATE(1099) !Alt-K
AltL EQUATE(1100) !Alt-L
AltM EQUATE(1101) !Alt-M
AltMinus EQUATE(1069) !Alt-Minus
AltN EQUATE(1102) !Alt-N
AltO EQUATE(1103) !Alt-O
AltP EQUATE(1104) !Alt-P
AltQ EQUATE(1105) !Alt-Q
AltR EQUATE(1106) !Alt-R
AltS EQUATE(1107) !Alt-S
AltT EQUATE(1108) !Alt-T
AltU EQUATE(1109) !Alt-U
AltV EQUATE(1110) !Alt-V
AltW EQUATE(1111) !Alt-W
AltX EQUATE(1112) !Alt-X
AltY EQUATE(1113) !Alt-Y
AltZ EQUATE(1114) !Alt-Z
BSKey EQUATE(258) !Backspace
Ctrl2 EQUATE(562) !Ctrl-2
Ctrl6 EQUATE(566) !Ctrl-6
CtrlA EQUATE(577) !Ctrl-A
CtrlB EQUATE(578) !Ctrl-B
CtrlBS EQUATE(281) !Ctrl-Backspace
CtrlC EQUATE(579) !Ctrl-C
CtrlD EQUATE(580) !Ctrl-D
CtrlE EQUATE(581) !Ctrl-E
CtrlEnd EQUATE(287) !Ctrl-End
CtrlEnter EQUATE(280) !Ctrl-Enter
CtrlEsc EQUATE(279) !Ctrl-Esc
CtrlF EQUATE(582) !Ctrl-F
CtrlF1 EQUATE(2561) !Ctrl-F1
CtrlF10 EQUATE(2570) !Ctrl-F10
CtrlF11 EQUATE(2571) !Ctrl-F11
CtrlF12 EQUATE(2572) !Ctrl-F12
CtrlF2 EQUATE(2562) !Ctrl-F2
CtrlF3 EQUATE(2563) !Ctrl-F3
CtrlF4 EQUATE(2564) !Ctrl-F4
CtrlF5 EQUATE(2565) !Ctrl-F5
CtrlF6 EQUATE(2566) !Ctrl-F6
CtrlF7 EQUATE(2567) !Ctrl-F7
CtrlF8 EQUATE(2568) !Ctrl-F8
CtrlF9 EQUATE(2569) !Ctrl-F9
CtrlG EQUATE(583) !Ctrl-G
CtrlGAst EQUATE(282) !Ctrl-Gray *
CtrlH EQUATE(584) !Ctrl-H
CtrlHome EQUATE(283) !Ctrl-Home
CtrlI EQUATE(585) !Ctrl-I
CtrlJ EQUATE(586) !Ctrl-J
CtrlK EQUATE(587) !Ctrl-K
CtrlL EQUATE(588) !Ctrl-L
CtrlLBrk EQUATE(603) !Ctrl-[
CtrlLeft EQUATE(285) !Ctrl-Курсор влево
CtrlM EQUATE(589) !Ctrl-M
CtrlMinus EQUATE(557) !Ctrl-Minus
CtrlN EQUATE(590) !Ctrl-N
CtrlO EQUATE(591) !Ctrl-O
CtrlP EQUATE(592) !Ctrl-P
CtrlPgDn EQUATE(288) !Ctrl-PgDn
CtrlPgUp EQUATE(284) !Ctrl-PgUp
CtrlQ EQUATE(593) !Ctrl-Q
CtrlR EQUATE(594) !Ctrl-R
CtrlRBrk EQUATE(605) !Ctrl-]
CtrlRight EQUATE(286) !Ctrl-Курсор вправо
CtrlS EQUATE(595) !Ctrl-S
CtrlSlash EQUATE(604) !Ctrl-Слэш (/)
CtrlSpace EQUATE(290) !Ctrl-пробел
CtrlT EQUATE(596) !Ctrl-T
CtrlU EQUATE(597) !Ctrl-U
CtrlV EQUATE(598) !Ctrl-V
CtrlW EQUATE(599) !Ctrl-W
CtrlX EQUATE(600) !Ctrl-X
CtrlY EQUATE(601) !Ctrl-Y
CtrlZ EQUATE(602) !Ctrl-Z
DelKey EQUATE(272) !Del
DownKey EQUATE(269) !Курсор вниз
EndKey EQUATE(268) !End
EnterKey EQUATE(257) !Enter
EscKey EQUATE(256) !Esc
F10Key EQUATE(2058) !F10
F11Key EQUATE(2059) !F11
F12Key EQUATE(2060) !F12
F1Key EQUATE(2049) !F1
F2Key EQUATE(2050) !F2
F3Key EQUATE(2051) !F3
F4Key EQUATE(2052) !F4
F5Key EQUATE(2053) !F5
F6Key EQUATE(2054) !F6
F7Key EQUATE(2055) !F7
F8Key EQUATE(2056) !F8
F9Key EQUATE(2057) !F9
GAstKey EQUATE(260) !Gray *
GMinusKey EQUATE(264) !Gray -
GPlusKey EQUATE(267) !Gray +
HomeKey EQUATE(261) !Home
InsKey EQUATE(271) !Ins
MouseLeft EQUATE(4000) !Левая кнопка мышки
MouseLeft2 EQUATE(4002) !Двойной щелчок левой кнопкой мышки
MouseRight EQUATE(4001) !правая кнопка мышки
LeftKey EQUATE(265) !Курсор влево
PgDnKey EQUATE(270) !PgDn
PgUpKey EQUATE(263) !PgUp
RighTKey EQUATE(266) !Курсор вправо
ShftBS EQUATE(275) !Shft-Backspace
ShftEnter EQUATE(274) !Shft-Enter
ShftEsc EQUATE(273) !Shft-Esc
ShftF1 EQUATE(3585) !Shft-F1
ShftF10 EQUATE(3594) !Shft-F10
ShftF11 EQUATE(3595) !Shft-F11
ShftF12 EQUATE(3596) !Shft-F12
ShftF2 EQUATE(3586) !Shft-F2
ShftF3 EQUATE(3587) !Shft-F3
ShftF4 EQUATE(3588) !Shft-F4
ShftF5 EQUATE(3589) !Shft-F5
ShftF6 EQUATE(3590) !Shft-F6
ShftF7 EQUATE(3591) !Shft-F7
ShftF8 EQUATE(3592) !Shft-F8
ShftF9 EQUATE(3593) !Shft-F9
ShftGMinus EQUATE(277) !Shft-Gray -
ShftGPlus EQUATE(278) !Shft-Gray +
ShftSpace EQUATE(289) !Shft-пробел
ShftTab EQUATE(276) !Shft-Tab
TabKey EQUATE(259) !Tab
UpKey EQUATE(262) !Курсор вверх
Перевод всей документации выполнил Сергей АгАрков. Если возникли
какие-либо вопросы или предложения по качеству перевода, обращайтесь:
Jew Smile MO Station 2:5040/22.3 Serg Agarkoff +7-(421)-626-8486 время
работы станции с 15:00 до 23:30 по московскому времени в будние дни и
круглосуточно в выходные и праздники. По этому же телефону меня можно
застать с 3:00 до 12:00 по московскому времени. Спросить капитана Агаркова.
Домашний телефон +7-(421)-626-8486 ўс 13:00 до 0:30 по москве.
Приложение B
КОДЫ ОШИБОК
ERRORS.EQU
EQUATE-метки кодов ошибок присваивают мнемонические метки кодам,
возвращаемым функцией ERRORCODE(). Файл EQUATE-меток кодов ошибок
(ERRORS.EQU) это файл в формате CLARION SOURCE, содержащий оператор EQUATE
для каждого кода ошибки, который можно перехватить на уровне Клариона. Есть
уйма всяческих ошибок, которые, в принципе, могут привести к состоянию
"ОСТАНОВ ВО ВРЕМЯ ИСПОЛНЕНИЯ" (Run-time Halt). Это означает, что программа
немедленно обламывается, выводится сообщение об ошибке и юзер вылетает в
ДОС.
ERRORS.EQU изначально находится там, куда был устанолен CDD. Этот файл
можно подключить к исходному тексту программы оператором:
INCLUDE('ERRORS.EQU').
! ERRORS.EQU -- ERRORCODE EQUATES
! Значение, Значение,
! возвращаемое возвращаемое
! ERRORCODE() ERROR()
NoError EQUATE(0) !''
NoFileErr EQUATE(02) !'File Not Found'
!Файл не найден
NoPathErr EQUATE(03) !'Path Not Found'
!Путь не найден
TooManyErr EQUATE(04) !'Too Many Open Files'
!Слишком много открытых файлов
NoAccessErr EQUATE(05) !'Access Denied'
!Доступ запрещен
BadMemErr EQUATE(07) !'Memory Corrupted'
!Неисправность памяти
NoMemErr EQUATE(08) !'Insufficient Memory'
!Недостаточно памяти
BadDriveErr EQUATE(15) !'Invalid Drive'
!Неправильно указан диск
NoEntryErr EQUATE(30) !'Entry Not Found'
!Элемент не найден
IsLockedErr EQUATE(32) !'File Is Already Locked'
!Файл уже заблокирован
BadRecErr EQUATE(33) !'Record Not Available'
!Запись недоступна
NoRecErr EQUATE(35) !'Record Not Found'
!Запись не найдена
BadFileErr EQUATE(36) !'Invalid Data File'
!Ошибка в файле данных
NotOpenErr EQUATE(37) !'File Not Open'
!Файл не открыт
DupKeyErr EQUATE(40) !'Creates Duplicate Key'
!Запись с таким ключом уже есть
IsHeldErr EQUATE(43) !'Record Is Already Held'
!Запись уже захвачена
BadNameErr EQUATE(45) !'Invalid Filename'
!Неправильное имя файла (А.С.П - Так он
ругается на попытку создать файл с русским именем, например АГАРКОВ.С_П,
несмотря на то, что ДОС это вполне позволяет.)
BadKeyErr EQUATE(46) !'Key Files must be Rebuilt'
!Надо перестроить ключевые файлы
InvalidFileErr EQUATE(47) !'Invalid File Declaration'
!Неправильное описание файла
BadTranErr EQUATE(48) !'Unable to log transaction'
!Не могу вести протокол транзакции
IsOpenErr EQUATE(52) !'File Already Open'
!Файл уже открыт
NoCreateErr EQUATE(54) !'No Create Attribute'
!У файла нет атрибута CREATE
NoShareErr EQUATE(55) !'File Must Be Shared'
!Файл надо открыть в совместном режиме
BadMemoErr EQUATE(57) !'Invalid Memo File'
!Ошибка в файле примечаний
ExclReqErr EQUATE(63) !'Exclusive Access Required'
!Требуется монопольный доступ
ShareVioErr EQUATE(64) !'Sharing Violation'
!Нарушение совместного режима
CantRollErr EQUATE(65) !'Unable to rollback transaction'
!Не могу отменить транзакцию
TypeDescErr EQUATE(75) !'Invalid Field Type Descriptor'
!Неверный описательтипа поля
BadIndexErr EQUATE(76) !'Invalid Index String'
!Неправильная строка для индексации
IndexAccessErr EQUATE(77) !'Unable To Access Index'
!Не могу получить доступ к индексу
BadParmErr EQUATE(78) !'Invalid Number Of Parameters'
!Параметров или мало или много
NoDriverSupport EQUATE(80) !'Function not supported'
!Эта функция не поддерживается
Перевод всей документации выполнил Сергей АгАрков. Если возникли
какие-либо вопросы или предложения по качеству перевода, обращайтесь:
Jew Smile MO Station 2:5040/22.3 Serg Agarkoff +7-(421)-626-8486 время
работы станции с 15:00 до 23:30 по московскому времени в будние дни и
круглосуточно в выходные и праздники. По этому же телефону меня можно
застать с 3:00 до 12:00 по московскому времени. Спросить капитана Агаркова.
Домашний телефон +7-(421)-626-8486 ўс 13:00 до 0:30 по москве.
Приложение C
УПРАВЛЕНИЕ ВИРТУАЛЬНОЙ ПАМЯТЬЮ
Система управления памятью, включает в себя технологию Менеджера
Виртуальной Памяти (VMM). VMM автоматически управляет EMS и XMS (если,
конечно, таковые имеются на складе :) а также виртуальной памятью на диске.
Стандартная (conventional) память, это память, в которой иногда можно
запускать программы, в диапазоне от 0K до 640K.
EMS (expanded, добавочная) - это память выше 640K, обслуживаемая
системным менеджером добавочной памяти типа QEMM или EMM386. Добавочная
память не занимает какого-то определенного диапазона адресов, она
использует отображение для выделения блоков памяти по 64Kг. EMS
используется для хранения и подкачки данных, но не может использоваться для
запуска программ.
XMS (extended, расширенная) - это память выше 1Mb. Она не использует
"переключение страниц" как EMS, а просто копирует блоки данных туда-сюда
между стандартной памятью и областью выше 1 Mb.
Виртуальная память - это EMS (в стандарте LIM EMS 3.2 или выше), XMS и
место на диске. Дисковая виртуальная память может быть выделена на любом
устройстве, к которому ДОС может обратиться по букве диска и
(необязательно) пути. Виртуальные диски (RAM-диски) или быстрые винчестеры
дают большую производительность дисковой виртуальной памяти.
(Далее по тексту термин "добавочная память" будет означать как EMS так и
XMS, кроме тех случаев, где указано что-то конкретное) (А.С.П. - Там, где
написано ...ВСЮ ХХХ..., следует читать как ...всю ДОСТУПНУЮ ххх...)
Прикладыне программы на Кларионе используют виртуальную память для
хранения ОЧЕРЕДЕЙ, ЭКРАНОВ и ГРАФИЧЕСКИХ ОБРАЗОВ. VMM Клариона
самостоятельно занимается перемещением даннх между памятью (стандартной и
добавочной) и диском. Используя "верхние области памяти" и место на диске,
приклдные программы на Кларионе могут обращаться к 64 МЕГАбайтам виртульной
памяти.
При запуске программы на Кларионе, VMM автоматически определяет, сколько
имеется в наличии добавочной памяти (если вообще имеется). По умолчанию,
VMM использует всю добавочную память кроме 64K (до 4М). Если в наличии
меньше 4М добавочной памяти, VMM использует диск для получения 4М
виртуальной памяти. Виртуальная дисковая память выделяется в текущем
каталоге. Параметры виртуальной памяти, задаваемые по умолчанию, могут быть
изменены переменной окружения CLAVM.
CLAVM (конфигурация виртуальной памяти)
CLAVM= ¦EMS Kбайт¦[,путь][,размер блока][,блоков одновременно]
¦XMS Kбайт¦ [,мегабайт]
¦ NOEMS ¦
¦ OFF ¦
¦ ¦
EMS Kбайт - Этот параметр сообщает VMM, сколько Kb EMS использовать.
Субпараметр КБАЙТ нужен обязательно. Если он отрицателен, это значит, что
использовать всю доступную EMS, кроме указанного количества. Минимальный
размер выделяемой памяти - 64К. Установка по умолчанию - EMS-64 (всю EMS
кроме 64K).
XMS Kбайт - Этот параметр сообщает VMM, сколько Kb XMS использовать. Он
аналогичен параметру EMS во всем кроме типа используемой памяти. По
умолчанию установка XMS-64 (всю XMS кроме 64K).
NOEMS - Приказывает VMM использовать под виртуальную память только диск.
OFF - Отключает VMM, вынуждая бедную программу обходиться только
стандартной памятью.
путь - Задает диск (необязательно) и путь, для выделения виртуальной
дисковой памяти. VMM создает дисковую память после того, как забьет всю
добавочную. Если нету никакой добавочной памяти, то вся виртуальная память
размещается на диске. Этот параметр может содержать любую разрешенную в ДОС
спецификацию. VMM проверяет существование пути. Если путь задан
неправильно, то диск не используется вообще. По умолчанию ПУТЬ=. (точка),
что вынуждает VMM ипользовать текущие диск и каталог. ПУТЬ=* означает, что
для виртуальной памяти диск использовать не разрешается.
размер блока - Должен быть от 8 до 64 включительно. Этим задается размер (в
килобайтах) максимального блока памяти, который можно подкачивать из/в
виртуальной памяти. Если для блока заданного размера не хватает памяти, то
выделяется блок меньшего размера. Этот параметр не проверяется системой
виртуальной памяти. По умолчанию РАЗМЕР БЛОКА равен 32K.
блоков одновременно - Число виртуальных блоков, одновременно содержащихся
в стандартной памяти прежде чем происходит выгрузка. Число БЛОКОВ
ОДНОВРЕМЕННО должно быть 3 или больше. По умолчанию - 3.
мегабайт - Максимальный размер виртуальной памяти для VMM. Это общее
количество памяти, которое может быть выгружено в добавочную память, на
диск, или и туда и туда. Эта настройка не должна быть больша параметра
РАЗМЕР БЛОКА. Значение по умолчанию - 4 мегабайта. (А.С.П. - т.е. размер
виртуалки в МЕГах не больше размера блока в КИЛОграммах)
Для управления виртуальной памятью, VMM использует выгружаемые блоки
данных, размер которых задается параметром РАЗМЕР БЛОКА. Если используется
EMS а не XMS, то первый виртуальный блок данных (весом до 64K) создается в
Кадре Страницы EMS (см. рис. 1). VMM не использует стандартную память до
тех пор, пока не заполнится виртуальный блок в Кадре Страницы EMS. Когда
потребуются еще виртуальные блоки, VMM разместит до БЛОКОВ ОДНОВРЕМЕННО
виртуальных блоков данных в стандартной памяти.
---------------------------------------------------------------¬
¦ 32Meg------------------------------------------¬ ¦
¦ | Добавочная память | ¦
¦ ¦-----------¬ -----------¬ -----------¬¦ ¦
¦ ¦¦::::::::::¦ ¦::::::::::¦ ¦::::::::::¦¦ ¦
¦ ¦¦::::::::::¦ ¦::::::::::¦ ¦::::::::::¦¦ ¦
¦ ¦¦::::::::::¦ ¦::::::::::¦ ¦::::::::::¦¦ ¦
¦ ¦L----------- L----------- L-----------¦ ¦
¦ 1Meg---+--------------------------------------+ ¦
¦ ¦######################################¦--¬ ¦
¦ ¦######### Кадр страницы EMS ##########¦ 64K¦
¦ ¦######################################¦--- ¦
¦ E000H---+--------------------------------------+ ¦
¦ ¦ Периферийная BIOS ¦ ¦
¦ +--------------------------------------+ ¦
¦ ¦ Видеопамять ¦ ¦
¦ -------A000H---+--------------------------------------+--¬ ¦
¦ ¦ ¦-----------¬ -----------¬ -----------¬¦ ¦ ¦
¦ ¦ ¦¦::::::::::¦ ¦::::::::::¦ ¦::::::::::¦¦ ¦ ¦
¦ ¦ ¦¦::::::::::¦ ¦::::::::::¦ ¦::::::::::¦¦ ¦ ¦
¦ Стандартная ¦¦::::::::::¦ ¦::::::::::¦ ¦::::::::::¦¦640K¦
¦ Память ¦L----------- L----------- L-----------¦ ¦ ¦
¦ ¦ ¦ -----------------------¬ ¦ ¦ ¦
¦ ¦ ¦ ¦ Таблица отслеживания ¦ ¦ ¦ ¦
¦ ¦ ¦ L----------------------- ¦ ¦ ¦
¦ ¦ ¦ Данные программы ¦ ¦ ¦
¦ ¦ +--------------------------------------+ ¦ ¦
¦ ¦ ¦ Код программы ¦ ¦ ¦
¦ ¦ +--------------------------------------+ ¦ ¦
¦ ¦ ¦ DOS ¦ ¦ ¦
¦ L------0000H---L------------------------------------------ ¦
¦ -----------¬ ¦
¦ ¦::::::::::¦ ¦
¦ ¦:::32 K:::¦ = Выгружаемый блок данных ¦
¦ ¦::::::::::¦ [Образы экранов, очереди и т.д.] ¦
¦ L----------- ¦
L---------------------------------------------------------------
Рисунок 1. Распределение памяти по умолчанию
Когда все возможные выгружаемые блоки в стандартной памяти заполнены,
самый редко используемый блок выгружается в EMS. Когда EMS исчерпана,
выгружаемые блоки данных создаются на диске в файле с расширением SWP.
Настройки VMM, принимаемые по умолчанию, можн изменит, используя CLAVM из
командной строки ДОС, из файла конфигурации или из переменной окружения.
Командная строка имеет высший приоритет и перекрывает все прочие методы. У
файла конфигурации второй приоритете, и у переменной окружения - самый
низкий.
Это важно: НИКОГДА не ставьте пробелов между словом CLAVM и знаком
равенства, поскольку ДОС рассматривает CLAVM= and CLAVM = как две разные
переменные - "CLAVM" и "CLAVM ". Программы на Кларионе распознают только
CLAVM=.
Настройка из командной строки
Установки Системы Виртуальной Памяти,сделанные по умолчанию, могут быть
перекрыты из командной строки вводом CLAVM=, за которой идут желаемые
параметры. Параметры должны быть заключены в двойные кавычки (скажем,
CLAVM="EMS-64,.,32,3,4") если используется инициализация командной строки.
НЕЛЬЗЯ использовать SETCOMMAND для установки параметров CLAVM (слишком
много времени уйдет на выполнение SETCOMMAND).
Настройка из файла конфигурации
Во время исполнения, программа ищет в текущем каталоге файл, под именем
program.INI (где program - это имя .EXE-файла программы). Скажем, программа
FUCK'EM!.EXE может использовать файл конфигурации под именем FUCK'EM!.INI.
Это обычный текстовый файл, в котором могут содержаться параметры
программы, в том числе и настройки для CLAVM. Каждый параметр программы в
этом файле должен занимать отдельную строку.
Настройка из переменной окружения
VMM, также, можно подстроить, установив CLAVM как переменную окружения, с
помощью досовской команды SET. Это может быть сделано в пакетном файле
(типа AUTOEXEC.BAT) или из командной строки ДОС.
Оптимизируем производительность
На производительность программы влияет как количество добавочной памяти,
так и скорость устройства, используемого для дисковой виртуальной памяти.
Для получения оптимальной производительности может понадобиться подстроить
параметры РАЗМЕР БЛОКА, БЛОКОВ ОДНОВРЕМЕННО и МЕГАБАЙТ.
Оптимальный РАЗМЕР БЛОКА зависит от программы. Наиболее подходящий РАЗМЕР
блока определяется размером самой большой ОЧЕРЕДИ в программе, размером
наибольшего сохраненного ЭКРАНА и размером графических образов. В общем,
РАЗМЕР БЛОКА не должен превышать максимально выделяемого участка памяти,
выделенного, скажем под сохраненный ЭКРАН или под ОЧЕРЕДЬ, и не стоит его
делать меньше 16K. Для большинства программ, оптимумом является стандартный
размер в 32К.
Увеличение количества БЛОКОВ ОДНОВРЕМЕННО приводит, с одной стороны к
большему расходу стандартной памяти, а с другой - к меньшей перекачке
данных между стандартной и виртуальной памятью. Если стандартной памяти
достаточно, то можно увеличить этот параметр для повышения
производительности. РАЗМЕР БЛОКА и БЛОКОВ ОДНОВРЕМЕННО тесно связаны между
собой. Уменьшение РАЗМЕРА БЛОКА позволяет хранить в стандартной памяти
больше БЛОКОВ ОДНОВРЕМЕННО.
VMM создает в стандартной памяти "таблицу отслеживания", которая содержит
указатели на данные, хранящиеся в виртуальной памяти. Для вычисления
размера это таблицы можно использовать формулу:
РАЗМЕР_ТАБЛИЦЫ = (1024 / (РАЗМЕР_БЛОКА / МЕГАБАЙТ)) * 22
По умолчанию, VMM создает "таблицу отслеживания" длиной 2816 байт в
стандартной памяти (2816=(1024/(32/4))*22).
Параметр МЕГАБАЙТ влияет на размер этой "таблицы отслеживания". Чрезмерное
завышение этого параметра приводит к напрасному расходу стандартной памяти
и к увеличению времени доступа к виртуальным данным. Добавочное время,
требуемое для поиска указателя в большей таблице, снижает
производительность.
Возвращаемые ошибки:
8 Недостаточно памяти
68 Ошибка виртуальной памяти
Если VMM отключен (CLAVM=OFF), то испольуется только стандартная память.
Когда стандартная память исчерпывается, программа вылетает по ошибке
"Недостаточно памяти".
При исчерпании виртуальной памяти, программа вылетает по "Ошибке
виртуальной памяти", а в информационном окне выводится расширенное описание
ошибки:
(А.С.П. - Поскольку еще нет локализованной для России версии Клариона, то
расширенные описания ошибок я оставляю в том виде, в котором они могут
появиться, хотя стандартные сообщения об ошибках я, иногда, перевожу.)
Расширенное описание Возможная причина
-------------------------------T-------------------------------¬
¦Oversized allocation or memory¦ Слишком мал РАЗМЕР БЛОКА ¦
¦corrupt ¦ ¦
¦ ¦ ¦
¦Попытка выделить памяти боль- ¦ ¦
¦ше, чем есть или память не в ¦ ¦
¦порядке ¦ ¦
+------------------------------+-------------------------------+
¦ No memory to save VM mapping ¦ Исчерпана стандартная память ¦
¦ ¦ ¦
¦Не хватает памяти для сохране-¦ ¦
¦ния "таблицы отслеживания" ¦ ¦
+------------------------------+-------------------------------+
¦ Attempt to exceed tracking ¦ Исчерпана виртуальная память ¦
¦ tables ¦ ¦
¦ ¦ ¦
¦Попытка выйти за пределы "таб-¦ ¦
¦лицы отслеживания" ¦ ¦
+------------------------------+-------------------------------+
¦ Write failure saving data ¦ Аппаратная проблема либо с ¦
¦ ¦ ОЗУ либо с диском ¦
¦Сбой при записи данных ¦ ¦
+------------------------------+-------------------------------+
¦ Attempt to exceed tracking ¦ Слишком мал параметр МЕГАБАЙТ ¦
¦ tables, increase Meg ¦ ¦
¦ ¦ ¦
¦Попытка выйти за пределы "таб-¦ ¦
¦лицы отслеживания", попробуй ¦ ¦
¦увеличить параметр МЕГАБАЙТ ¦ ¦
L------------------------------+--------------------------------
Пример:
Перекрытие настроек VMM из файла конфигурации:
CLAVM=EMS-64,C:\SWAP,32,3,4 (используем всю EMS кроме 64K, а на диске
выделяем место в подкаталоге C:\SWAP)
CLAVM=XMS-64,C:\SWAP,32,3,4 (используем всю XMS кроме 64K, а на диске
выделяем место в подкаталоге C:\SWAP)
CLAVM=NOEMS,C:\SWAP,32,3,4 (забудем про EMS и XMS и все будем сбрасывать
на диск в подкаталог C:\SWAP)
CLAVM=EMS-64,*,32,3,4 (запрещаем свопинг на диск)
Перекрытие настроек VMM из командной строки:
C> Program.exe CLAVM="EMS-64.*,32.3,4" (из командной строки запрещаем
свопинг на диск)
C> Program.exe CLAVM=OFF (вообще отключаем VMM из командной строки)
Перекрытие настроек VMM из пакетного файла или командной строки ДОС:
C> SET CLAVM=EMS-64,C:\SWAP.32,3,4 (сохраняем стандартные настройки, только
свопинг на диск будет в каталог C:\SWAP)
C> SET CLAVM=XMS-64,C:\SWAP.32.3,4 (сохраняем стандартные настройки, только
свопинг на диск будет в каталог C:\SWAP)
C> SET CLAVM=OFF (запрещаем VMM переменной окружения)
Знаете ли Вы, что абстракция - это процесс изменения уровня детализации программы. Когда мы абстрагируемся от проблемы, мы предполагаем игнорирование ряда подробностей с тем, чтобы свести задачу к более простой.