5.5.17. Фн 65h - Получить расширеную национальную информацию

      Вход: AH = 64h (ДОС 3.3)

            AL = номер подфункции:

                 1 - получить расширенную национальную информацию

                 2 - получить таблицу заглавных букв

                 4 - получить   таблицу  заглавных   букв  для

                     спецификаций файлов

                 6 - получить таблицу совпадения символов

            DX = код страны

            BX = кодовая страница (0FFFFh=консоль)

            CX = количество байтов принимаемой информации (>= 5)

            ES:DI = адрес буфера для приема информации

 

      Выход: AX = код ошибки, если установлен флаг CF

             ES:DI = адрес полученной информации

 

      Описание:  Эта функция  позволяет получить  несколько видов

 национальной информации. Впервые появилась в ДОС 3.3.

 

      Если код страницы или кодовая страница недопустимы, либо CX

 < 5, возвращается  код ошибки. Если  CX >= 5,  но меньше размера

 запрошенной  информации,  то  возвращаемые  данные  усекаются  и

 происходит возврат из функции без ошибки.

 

      Подфн  01h: Возвращает  расширенную национальную информацию

 по адресу ES:DI. Предполагает CX >= 29h.

 

 Смещение Длина Содержимое        Комментарий

 ───────────────┬───┬────────────────────────────────────────────

   +0       1   │ 1 │ Идентификатор информации = 1

                ├───┴───┐

   +1       2          │ Длина информации

                ├───────┤

   +3       2          │ Код страны (см. фн 38h)

                ├───────┤

   +5       2          │ Кодовая страница (см. фн 66h)

                ├───────┤                         \

   +7       2          │ Формат даты             

                ├───┬───┼───────┐                 

   +9       5   │'Z'│ 0 │       │ Денежная единица │

                ├───┼───┼───────┘                 

   +0Eh     2   │','│ 0 │ Разделитель тысяч       

                ├───┼───┤                          │ Эти поля

   +10h     2   │'.'│ 0 │ Разделитель дробной части│ совпадают

                ├───┼───┤                          │ с блоком

   +12h     2   │'-'│ 0 │ Разделитель даты         │национальной

                ├───┼───┤                          │ информации

   +14h     2   │':'│ 0 │ Разделитель времени       > для

                ├───┼───┘                          │ фн 38h

   +16h     1      │ Формат денежной суммы       

                ├───┤                             

   +17h     1      │ Длина дробной части в       

                ├───┤ денежных суммах             

   +18h     1      │ Формат времени              

                ├───┴───────┐                     

   +19h     4   │ CaseMap   │ Длинный адрес CaseMap│

                ├───┬───┬───┘                     

   +1Dh     2   │','│ 0 │ Разделитель данных в    

                ├───┴───┴───────┐ списках         

   +1Fh   0Ah       резерв     │ Нули            

                └───────────────┘                 /

   29h      Длина блока

 ────────────────────────────────────────────────────────────────

 


 

      Подфн  02h:  Возвращает  адрес  таблицы,  используемой  для

 преобразования символов в верхний регистр. Требует CX=5.

 

      Буквы  с  ASCII-кодами  менее  128  переводятся  в  верхний

 регистр вычитанием 20h; с символами из старшей половины ситуация

 сложнее - они требуют специальной таблицы.

 

      Например, верхний регистр символа с  кодом 87h - это символ

 (80h); для (81h) - (9Ah); для (82h) - (69h).

 

      По адресу ES:DI засылается следующая информация:

 

 Смещение Длина Содержимое      Комментарий

 ───────────────┬───┬────────────────────────────────────────────

  +0        1   │ 2 │ Идентификатор информации = 2

                ├───┴──────────┐

  +1        4                 │ Длинный адрес 130-битовой таблицы

                └──────────────┘

   5        Длина блока

 ────────────────────────────────────────────────────────────────

 

 Сама таблица имеет вид:

 

 Смещение Длина Содержимое      Комментарий

 ───────────────┬──────────────┬─────────────────────────────────

  +0        2                 │ Размер таблицы

                ├───┬──────┬───┤

  +2      80h      │ . . .│   │ Таблица прописных букв

                └───┴──────┴───┘

 ────────────────────────────────────────────────────────────────

 

 Пример:   cmp  al,80h       ; нужен перевод

           jb    done        ; нет, обходим

 

             . . .           ; установки для фн 65h

 

           int   21h         ; получить информацию

           lds  bx,es:[di+1] ; DS:BX = адрес таблицы

           add  bx,2         ; указатель на первый символ

           sub  al,80h

           xlat              ; AL = верхний регистр

 

             . . .

 ────────────────────────────────────────────────────────────────

 

      Подфн  04h: Полностью  аналогична подфн  02h, но возвращает

 адрес таблицы  перевода в верхний регистр  тех символов, которые

 используются в именах и типах файлов (идентификатор информации =

 4).

 

 ────────────────────────────────────────────────────────────────

 

      Подфн  06h:  Возвращает  адрес  таблицы совпадения символов

 (ASCII 0-255). Требует CX=5.


 

 Смещение Длина Содержимое      Комментарий

 ───────────────┬───┬────────────────────────────────────────────

  +0        1   │ 6 │ Идентификатор информации = 6

                ├───┴──────────┐

  +1        4                 │ Длинный адрес 258-байтовой

                └──────────────┘ таблицы

  +5        Длина блока

 ────────────────────────────────────────────────────────────────

 

 Таблица имеет вид:

 

 Смещение Длина Содержимое      Комментарий

 ───────────────┬───────┬────────────────────────────────────────

  +0        2                  Размер таблицы

                ├───┬───┴──┬───┐

  +2     100h      │ . . .│   │ Таблица совпадения символов

                └───┴──────┴───┘

 

      См. также: Фн 38h

                 Фн 66h

 

 

 

Вы находитесь в разделе: 
Также вам будет интересно:

Добавить коментарий