Turbo Pascal - biblioteki standardowe

  W systemie Turbo Pascal wersja 6.0 dostępnych jest 6 bibliotek standardowych zawierających wiele pożytecznych procedur i funkcji oraz deklaracje predefiniowanych typów, stałych i zmiennych. Dostępne są następujące biblioteki standardowe:

  • System - zawiera procedury i funkcje obsługi plików, konwersji danych, do wykonywania operacji na łańcuchach, zarządzania pamięcią zmiennych dynamicznych, arytmetyczne (w tym programowy emulator koprocesora 8087) i inne.
  • Dos - umożliwia wykonywanie podstawowych funkcji systemu operacyjnego: operacje na zbiorach i katalogach, uruchamianie programów, operacje związane z datą i czasem
  • Crt - obsługa klawiatury i ekranu w trybie tekstowym.
  • Graph - bogaty zestaw funkcji i procedur graficznych.
  • Overlay - umożliwia tworzenie programów nakładkowych, tzn. podzielonych na mniejsze części ładowane w razie potrzeby do pamięci.
  • Printer - ułatwiający dostęp do drukarki.

  Ponadto dostępne są jeszcze dwa moduły, Turbo3 i Graph3, umożliwiające uruchamianie programów napisanych w wersji 3.0 Turbo Pascala.

  Użytkownik może wykorzystywać wszystkie procedury, funkcje, typy, stałe i zmienne, zdefiniowane w bibliotekach standardowych, w swoich programach i modułach, o ile na początku programu lub modułu zadeklaruje ich nazwy instrukcją uses. Deklaracji nie wymaga korzystanie z biblioteki system. Wszystkie elementy w niej zawarte są dostępne w każdym programie i module.

  Nazwy procedur i funkcji zdefiniowanych w bibliotekach standardowych nie są słowami kluczowymi i mogą być dowolnie używane w programach. Jeżeli jednak użyjemy w naszym programie identyfikatora zdefiniowanego w zadeklarowanym do wykorzystania module, tracimy bezpośredni dostęp do elementu oznaczonego tym identyfikatorem w module. Możliwy jest zawsze dostęp poprzez podanie nazwy kwalifikowanej w postaci nazwa_modułu.identyfikator.

Przykład:

program sinus;
function sin(x: real): integer;
begin
  if x > 0 then sin:=1
  else if x = 0 then sin:=0
  else sin:=-1
end;
begin
  writeln(sin(pi)); {1} {pi > 0}
  writeln(system.sin(pi)); {0}
end.

  Wszystkie zdefiniowane w tej bibliotece stałe, zmienne, funkcje i procedury są automatycznie dostępne w każdym programie bez konieczności użycia deklaracji „uses system”.

PREDEFINIOWANE IDENTYFIKATORY.

W części publicznej biblioteki SYSTEM znajdują się następujące deklaracje stałych i zmiennych:

const

ErrorAddr : Pointer = nil;

ExitCode : Integer = 0;

ExitProc : Pointer = nil;

FileMode : Byte = 2;

FreeMin : Word = 0;

FreePtr : Pointer = nil;

HeapError : Pointer = nil;

HeapOrg : Pointer = nil;

HeapPtr : Pointer = nil;

InOutRes : Integer = 0;

OvrCodeList : Word = 0;

OvrDebugPtr : Pointer = nil;

OvrDosHandle : Word = 0;

OvrEmsHandle : Word = 0;

OvrHeapEnd : Word = 0;

OvrHeapOrg : Word = 0;

OvrHeapPtr : Word = 0;

OvrHeapSize : Word = 0;

OvrLoadList : Word = 0;

PrefixSeg : Word = 0;

RandSeed : LongInt = 0;

StackLimit : Byte = 0;

Test8087 : Byte = 0;

var

Input : Text;

Output : Text;

SaveInt00 : Pointer;

SaveInt02 : Pointer;

SaveInt1B : Pointer;

SaveInt23 : Pointer;

SaveInt24 : Pointer;

SaveInt34 : Pointer;

SaveInt35 : Pointer;

SaveInt36 : Pointer;

SaveInt37 : Pointer;

SaveInt38 : Pointer;

SaveInt39 : Pointer;

SaveInt3A : Pointer;

SaveInt3B : Pointer;

SaveInt3C : Pointer;

SaveInt3D : Pointer;

SaveInt3E : Pointer;

SaveInt3F : Pointer;

SaveInt75 : Pointer;

  Zmienne zaczynające się od Ovr wykorzystywane są przez bibliotekę Overlay do zarządzania pamięcią w programach nakładkowych i są dokładnie omówione w opisie biblioteki Overlay.

  Zmienne ExitProc, ExitCode i ErrorAddr są wykorzystywane przez procedury wyjścia z programu. Istnieje możliwość dołączenia własnych procedur zakończenia programu. Jest to najprostszy i najbezpieczniejszy sposób kontroli sposobu zakończenia programu niezależnie od tego, w którym miejscu program został przerwany. Procedury obsługi zakończenia programu powinny w szczególności być używane do sprawdzenia, czy zostały zamknięte wszystkie pliki i ewentualnego zamknięcia ich. Zakończenie programu bez zamknięcia plików grozi utratą części danych w tych plikach. Do zainstalowania własnej procedury obsługi zakończenia programu służy zmienna ExitProc, której należy przypisać wskazanie do naszej procedury. Procedura obsługi zakończenia programu powinna być bezparametrowa i skompilowana z włączoną opcją wywołań dalekich ({$R+}. Procedura powinna przywracać zmiennej ExitProc wartość pierwotną lub przypisać jej wartość nill. Początkowo w module system zmiennej ExitProc nadawana jest wartość nill, jednak inne moduły wykorzystywane w programie mogą w swojej części inicjacyjnej wstawiać adresy własnych procedur kończących w sposób prawidłowy działanie modułu przed zakończeniem działania programu. Procedura obsługi zakończenia programu może testować sposób przerwania programu przez testowanie zmiennych ExitCode i ErrorAddr. W przypadku normalnego zakończenia programu w zmiennej ExitCode znajduje się 0, a w zmiennej ErrorAddr - nill. Jeżeli zakończenie programu następuje po wywołaniu procedury Halt, w zmiennej ExitCode znajduje się wartość równa argumentowi wywołania procedury Halt, a w zmiennej ErrorAddr - nill. Jeżeli natomiast zakończenie programu następuje wskutek wystąpienia błędu wykonania, w zmiennej ExitCode znajduje się kod zaistniałego błędu, a w zmiennej ErrorAddr znajduje się adres miejsca wystąpienia błędu.

  Zmienne HeapOrg, HeapPtr, HeapEnd, FreeList i HeapError używane są przez podprogram zarządzający pamięcią stosu zmiennych dynamicznych. Bezpośrednie korzystanie z tych zmiennych w programie jest możliwe, ale powinno się to robić bardzo ostrożnie, gdyż łatwo doprowadzić do błędów o zupełnie nieprzewidywalnych dla programu konsekwencjach. Błędy tego typu są trudne do zlokalizowania. Pamięć zmiennych dynamicznych. Zmienna PrefixSeg zawiera segment adresu obszaru PSP, tworzonego dla każdego uruchamianego programu przez DOS. W obszarze PSP DOS zapisuje informacje niezbędne do prawidłowej obsługi uruchamianego programu.