OSFree TPCrt

Материал из Русский WINE
Перейти к: навигация, поиск

TPCrt — это специализированный модуль для работы с текстовым экраном, созданный для программ на Turbo Pascal. В контексте osFree он играет роль «моста», который позволяет старым приложениям, написанным для DOS, напрямую и эффективно использовать видеоресурсы современной системы, не переписывая их код.

Изначально Crt — это стандартный модуль в составе Turbo Pascal, предоставляющий программисту простые инструменты для управления текстовым выводом: очистку экрана, установку цвета, позиционирование курсора, работу с окнами и клавиатурой.

TPCrt (Turbo Pascal Crt) — это, по сути, расширенная или адаптированная версия этого модуля. Он включает в себя как стандартные процедуры (ClrScr, GotoXY, TextColor), так и множество нестандартных, расширенных возможностей. Например, функции для прямой записи в видеопамять в обход BIOS (FastWrite, FastFill), чтобы избежать «снега» на экране и увеличить скорость, а также низкоуровневые операции с курсором (SetCursorSize) и даже работа с библиотеками упакованных окон (PackWindow).

osFree — это проект по созданию свободной операционной системы, совместимой с OS/2, но построенной на современном микроядре L4. Ключевая идея проекта — бинарная совместимость: возможность запускать старые приложения OS/2 и DOS без их перекомпиляции.

Вот тут и появляется TPCrt. Приложения, написанные на Turbo Pascal для DOS, используют этот модуль для вывода на экран. Вместо того чтобы заставлять программу обращаться к устаревшему оборудованию или эмулировать его медленно через BIOS, osFree может предоставить TPCrt как системный сервис (персоналию), который напрямую транслирует вызовы в графическую подсистему самой osFree.

Это дает несколько преимуществ:

  • Скорость: Прямая работа с видеоресурсами хоста быстрее, чем полная программная эмуляция видеокарты.
  • Совместимость: Старые DOS-программы, активно использующие экран, будут работать корректно и быстро.
  • Гибкость: Это еще один пример «персоналии» — изолированного сервера, который реализует конкретный API (в данном случае, API модуля Crt) поверх микроядра.

Проще говоря, TPCrt в osFree — это не просто библиотека, а адаптер, который позволяет устаревшему коду Turbo Pascal «разговаривать» с современной графической системой osFree так же легко, как он когда-то разговаривал с видеокартой DOS.

Содержание

Функции TPCrt

Модуль TPCrt.

FrameWindow

procedure FrameWindow(LeftCol, TopRow, RightCol, BotRow, FAttr, HAttr : Byte; Header : shortstring);

Рисует рамку вокруг окна.

WhereXAbs

function WhereXAbs: Byte;

Возвращает абсолютную координату курсора по столбцу.

WhereYAbs

function WhereYAbs: Byte;

Возвращает абсолютную координату курсора по строке.

WhereXY

function WhereXY: Word;

Возвращает абсолютные координаты курсора.

ScreenX

function ScreenX: Byte;

Возвращает абсолютную координату курсора по столбцу.

ScreenY

function ScreenY: Byte;

Возвращает абсолютную координату курсора по строке.

FastWrite

procedure FastWrite(St : string; Row, Col, Attr : Byte);

Записывает St в позицию Row, Col с атрибутом Attr (видеоатрибут) без «снега».

SetFrameChars

procedure SetFrameChars(Vertical, Horizontal, LowerRight, UpperRight, LowerLeft, UpperLeft : Char);

Задаёт символы рамки, используемые в последующих вызовах FrameWindow.

WhereXYdirect

procedure WhereXYdirect(var X, Y : Byte);

Считывает текущее положение курсора напрямую из контроллера CRT.

GetCrtMode

function GetCrtMode : Byte;

Возвращает текущий видеорежим. Также повторно инициализирует внутренние переменные. Может сбросить: CurrentMode, ScreenWidth, ScreenHeight, CurrentPage и VideoSegment.

GotoXYAbs

procedure GotoXYAbs(X, Y : Byte);

Перемещает курсор в столбец X, строку Y. Проверка ошибок не выполняется.

SetVisiblePage

procedure SetVisiblePage(PageNum : Byte);

Устанавливает текущую видеостранцу.

ScrollWindowUp

procedure ScrollWindowUp(XLo, YLo, XHi, YHi, Lines : Byte);

Прокручивает указанное окно вверх на заданное число строк.

ScrollWindowDown

procedure ScrollWindowDown(XLo, YLo, XHi, YHi, Lines : Byte);

Прокручивает указанное окно вниз на заданное число строк.

CursorTypeSL

function CursorTypeSL : Word;

Возвращает слово. Старший байт содержит начальную строку развёртки, младший — конечную.

CursorStartLine

function CursorStartLine : Byte;

Возвращает начальную строку развёртки курсора.

CursorEndLine

function CursorEndLine : Byte;

Возвращает конечную строку развёртки курсора.

SetCursorSize

procedure SetCursorSize(Startline, EndLine : Byte);

Устанавливает начальную и конечную строки развёртки курсора.

NormalCursor

procedure NormalCursor;

Устанавливает нормальные строки развёртки курсора в зависимости от текущего видеорежима.

FatCursor

procedure FatCursor;

Устанавливает увеличенные строки развёртки курсора в зависимости от текущего видеорежима.

BlockCursor

procedure BlockCursor;

Устанавливает строки развёртки для блочного курсора.

HiddenCursor

procedure HiddenCursor;

Скрывает курсор.

ReadCharAtCursor

function ReadCharAtCursor: Char;

Возвращает символ в текущей позиции курсора на выбранной странице.

ReadAttrAtCursor

function ReadAttrAtCursor: Byte;

Возвращает атрибут в текущей позиции курсора на выбранной странице.

GetCursorState

procedure GetCursorState(var XY, ScanLines: Word);

Возвращает текущее положение и размер курсора.

RestoreCursorState

procedure RestoreCursorState(XY, ScanLines: Word);

Восстанавливает курсор в положение и размер, сохранённые с помощью GetCursorState.

FastWriteWindow

procedure FastWriteWindow(St: string; Row, Col, Attr: Byte);

Записывает строку, используя координаты относительно окна.

FastText

procedure FastText(St: string; Row, Col: Byte);

Записывает St в позицию Row, Col без изменения нижележащего видеоатрибута.

FastTextWindow

procedure FastTextWindow(St: string; Row, Col: Byte);

Записывает St в позицию Row, Col окна без изменения нижележащего видеоатрибута.

FastVert

procedure FastVert(St: string; Row, Col, Attr: Byte);

Записывает St вертикально в позицию Row, Col с атрибутом Attr (видеоатрибут).

FastVertWindow

procedure FastVertWindow(St: string; Row, Col, Attr: Byte);

Записывает строку вертикально, используя координаты относительно окна.

FastFill

procedure FastFill(Number: Word; Ch: Char; Row, Col, Attr: Byte);

Заполняет Number символов Ch в позиции Row, Col с атрибутом Attr (видеоатрибут) без «снега».

FastFillWindow

procedure FastFillWindow(Number: Word; Ch: Char; Row, Col, Attr: Byte);

Заполняет Number символов Ch в позиции Row, Col окна с атрибутом Attr (видеоатрибут) без «снега».

FastCenter

procedure FastCenter(St: string; Row, Attr: Byte);

Записывает St с центрированием по строке Row окна с атрибутом Attr (видеоатрибут) без «снега».

FastFlush

procedure FastFlush(St: string; Row, Attr: Byte);

Записывает St с выравниванием по правому краю по строке Row окна с атрибутом Attr (видеоатрибут) без «снега».

FastRead

procedure FastRead(Number, Row, Col: Byte; var St: string);

Считывает Number символов с экрана в St, начиная с позиции Row, Col.

FastReadWindow

procedure FastReadWindow(Number, Row, Col: Byte; var St: string);

Считывает Number символов с экрана в St, начиная с позиции Row, Col окна.

ReadAttribute

procedure ReadAttribute(Number, Row, Col: Byte; var St: string);

Считывает Number атрибутов с экрана в St, начиная с позиции Row, Col.

ReadAttributeWindow

procedure ReadAttributeWindow(Number, Row, Col: Byte; var St: string);

Считывает Number атрибутов с экрана в St, начиная с позиции Row, Col окна.

WriteAttribute

procedure WriteAttribute(St: String; Row, Col: Byte);

Записывает строку атрибутов St в позицию Row, Col без изменения символов.

WriteAttributeWindow

procedure WriteAttributeWindow(St: String; Row, Col: Byte);

Записывает строку атрибутов St в позицию Row, Col окна без изменения символов.

ChangeAttribute

procedure ChangeAttribute(Number: Word; Row, Col, Attr: Byte);

Изменяет Number видеоатрибутов на Attr, начиная с позиции Row, Col.

ChangeAttributeWindow

procedure ChangeAttributeWindow(Number: Word; Row, Col, Attr: Byte);

Изменяет Number видеоатрибутов на Attr, начиная с позиции Row, Col окна.

MoveScreen

procedure MoveScreen(var Source, Dest; Length : Word);

Перемещает Length слов из Source в Dest без «снега».

FlexWrite

procedure FlexWrite(St : string; Row, Col : Byte; var FAttrs : FlexAttrs);

Записывает St в позицию Row, Col с гибкой обработкой цветов.

FlexWriteWindow

procedure FlexWriteWindow(St :string; Row, Col: Byte; var FAttrs: FlexAttrs);

Записывает строку гибко, используя координаты относительно окна.

SaveWindow

function SaveWindow(XLow, YLow, XHigh, YHigh : Byte; Allocate : Boolean; var Covers : Pointer) : Boolean;

Выделяет буферное пространство, если запрошено, и сохраняет содержимое окна.

RestoreWindow

procedure RestoreWindow(XLow, YLow, XHigh, YHigh : Byte; Deallocate : Boolean; var Covers : Pointer);

Восстанавливает содержимое экрана и освобождает буферное пространство, если запрошено.

StoreWindowCoordinates

procedure StoreWindowCoordinates(var WC : WindowCoordinates);

Сохраняет координаты окна для активного окна.

RestoreWindowCoordinates

procedure RestoreWindowCoordinates(WC : WindowCoordinates);

Восстанавливает ранее сохранённые координаты окна.

PackWindow

function PackWindow(XLow, YLow, XHigh, YHigh : Byte) : PackedWindowPtr;

Возвращает указатель на упакованное окно или nil, если недостаточно памяти.

DispPackedWindow

procedure DispPackedWindow(PWP : PackedWindowPtr);

Отображает упакованное окно, на которое указывает PWP.

DispPackedWindowAt

procedure DispPackedWindowAt(PWP : PackedWindowPtr; Row, Col : Byte);

Отображает упакованное окно, на которое указывает PWP, в позиции Row, Col. При необходимости координаты корректируются, чтобы оно поместилось на экране.

MapPackedWindowColors

procedure MapPackedWindowColors(PWP : PackedWindowPtr);

Сопоставляет цвета в упакованном окне для улучшения внешнего вида на монохромных/чёрно-белых дисплеях.

DisposePackedWindow

procedure DisposePackedWindow(var PWP : PackedWindowPtr);

Уничтожает упакованное окно, устанавливая PWP в nil при выходе.

WritePackedWindow

procedure WritePackedWindow(PWP : PackedWindowPtr; FName : string);

Сохраняет упакованное окно, на которое указывает PWP, в FName.

ReadPackedWindow

function ReadPackedWindow(FName : string) : PackedWindowPtr;

Считывает упакованное окно, сохранённое в FName, в память.

CreateLibrary

function CreateLibrary(var F : file; Name : string; Entries : Byte) : DirectoryPtr;

Создаёт библиотеку с указанным числом элементов каталога.

OpenLibrary

function OpenLibrary(var F : file; Name : string) : DirectoryPtr;

Открывает указанную библиотеку и возвращает указатель на её каталог.

CloseLibrary

procedure CloseLibrary(var F : file; var DP : DirectoryPtr);

Закрывает библиотеку F и освобождает её каталог.

PackLibrary

procedure PackLibrary(LName : string);

Упаковывает библиотеку для удаления удалённых элементов.

AddWindowToLibrary

procedure AddWindowToLibrary(PWP : PackedWindowPtr; var F : file; DP : DirectoryPtr; WinName : LibName);

Добавляет упакованное окно в указанную библиотеку.

ReadWindowFromLibrary

function ReadWindowFromLibrary(var F : file; DP : DirectoryPtr; WinName : LibName) : PackedWindowPtr;

Считывает упакованное окно из библиотеки.

DeleteWindowFromLibrary

procedure DeleteWindowFromLibrary(var F : file; DP : DirectoryPtr; WinName : LibName);

Удаляет упакованное окно из указанной библиотеки.

MapColor

function MapColor(c : Byte) : Byte;

Сопоставляет видеоатрибут для видимости на монохромных/чёрно-белых дисплеях.

SetBlink

procedure SetBlink(Status : Boolean);

Включает мерцание атрибутов текстового режима, если On равно True.

SetCrtBorder

procedure SetCrtBorder(Attr : Byte);

Устанавливает цвет границы в цвет фона, если тип карты и режим это позволяют.

Font8x8Selected

function Font8x8Selected : Boolean;

Возвращает True, если активна EGA или VGA и используется шрифт 8×8.

SelectFont8x8

procedure SelectFont8x8(Status : Boolean);

Включает или выключает шрифт 8×8.

HercPresent

function HercPresent : Boolean;

Возвращает True, если присутствует графическая карта Hercules.

SwitchInColorCard

procedure SwitchInColorCard(ColorOn : Boolean);

Активирует или деактивирует цвета на карте Hercules InColor.

HercGraphicsMode

function HercGraphicsMode : Boolean;

Возвращает True, если карта Hercules находится в графическом режиме.

HercModeTestWorks

function HercModeTestWorks : Boolean;

Возвращает True, если HercGraphicsMode будет работать.

SetHercMode

procedure SetHercMode(GraphMode : Boolean; GraphPage : Byte);

Устанавливает карту Hercules в графический или текстовый режим и активирует указанную графическую страницу (при переключении в графический режим).

ReadKeyWord

function ReadKeyWord : Word;

Ожидает нажатия клавиши, затем возвращает скан-код и код символа вместе.

CheckKbd

function CheckKbd(var KeyCode : Word) : Boolean;

Возвращает True (и коды клавиш), если ожидается нажатие клавиши.

KbdFlags

function KbdFlags : Byte;

Возвращает флаги состояния клавиатуры в виде битово-кодированного байта.

StuffKey

procedure StuffKey(W : Word);

Помещает одну клавишу в буфер клавиатуры.

StuffString

procedure StuffString(S : string);

Помещает содержимое S в буфер клавиатуры.

ReInitCrt

procedure ReInitCrt;

Повторно инициализирует внутренние переменные модуля CRT. Для TSR или программ с оболочками DOS. Может сбросить: CurrentMode, ScreenWidth, ScreenHeight, WindMin/WindMax, CurrentPage, CurrentDisplay, CheckSnow и VideoSegment.

SetSafeCPSwitching

procedure SetSafeCPSwitching(F: Boolean);

SetUseACP

procedure SetUseACP(F: Boolean);

AssignConToCrt

procedure AssignConToCrt;

ClrScr

procedure ClrScr;

Очищает экран и возвращает курсор в левый верхний угол.

TextBackground

procedure TextBackground(Color: Byte);

Выбирает цвет фона.

TextColor

procedure TextColor(Color: Byte);

Выбирает цвет символов переднего плана.

Window

procedure Window(X1,Y1,X2,Y2: Byte);

Определяет текстовое окно на экране.

GotoXY

procedure GotoXY(X,Y: Byte);

Перемещает курсор в заданные координаты в пределах экрана.

WhereX

function WhereX: Byte;

Возвращает координату X текущего положения курсора.

WhereY

function WhereY: Byte;

Возвращает координату Y текущего положения курсора.

ClrEol

procedure ClrEol;

Очищает все символы от позиции курсора до конца строки, не перемещая курсор.

KeyPressed

function KeyPressed: Boolean;

Определяет, была ли нажата клавиша на клавиатуре, и возвращает True, если клавиша была нажата.

ReadKey

function ReadKey: Char;

Считывает символ с клавиатуры и возвращает символ или расширенный скан-код.

TextMode

procedure TextMode (Mode: word);

InsLine

procedure InsLine;

Вставляет пустую строку в позиции курсора.

DelLine

procedure DelLine;

Удаляет строку, содержащую курсор.

LowVideo

procedure LowVideo;

Выбирает символы низкой интенсивности.

HighVideo

procedure HighVideo;

Выбирает символы высокой интенсивности.

NormVideo

procedure NormVideo;

Выбирает символы нормальной интенсивности.

Delay

procedure Delay(MS: Word);

Sound

procedure Sound(Hz: Word);

NoSound

procedure NoSound;

AssignCrt

procedure AssignCrt(var F: Text);

Связывает текстовый файл с устройством CRT.

PlaySound

procedure PlaySound(Freq,Duration: Longint);

GetLastMode

procedure GetLastMode;

Устанавливает координаты окна.


OSFree
Search.png
osFree Архитектура • План работ • Компоненты • Используемые проекты • Экраны • FreePM • L4 • Скриншоты
Загрузчик [ Последовательность загрузки: поток выполнения • изменение карты памяти ] • Загрузочный сектор • L4Ka::Kickstart
Personalities Win16 personality • MVM/DOS/Win16 personality
Разработка Получение исходных кодов • Сборка • Отладка • Отправка отчетов
API TPCrt • FamilyAPI • Win16API • VIO API • MVM API
Сообщество IRC
OS/2 Presentation Manager • IFS • Петиции к IBM