Termcap - Termcap

Termapi.svg

Termcap ( funkcja terminala ) to biblioteka oprogramowania i baza danych używana na komputerach typu Unix . Umożliwia programom korzystanie z terminali komputerowych w sposób niezależny od urządzenia, co znacznie upraszcza proces pisania przenośnych aplikacji tekstowych . Bill Joy napisał pierwszą bibliotekę termcap w 1978 roku dla systemu operacyjnego Berkeley Unix ; od tego czasu został przeportowany do większości środowisk uniksowych i uniksopodobnych, nawet OS-9 . Na projekt Joy podobno wpłynął projekt magazynu danych terminala we wcześniejszym Incompatible Timesharing System .

Baza danych termcap może opisywać możliwości setek różnych terminali wyświetlających. Dzięki temu programy mogą wyświetlać dane wyjściowe w postaci znaków , niezależnie od typu terminala. Przykładami programów, które mogą używać termcap, są ekranowe edytory tekstu, takie jak vi i emacs . Inne programy są wymienione w kategorii Termcap .

Przykłady tego, co opisuje baza danych:

  • ile kolumn ma szerokość wyświetlacza
  • jaki ciąg wysłać, aby przesunąć kursor do dowolnej pozycji (w tym jak zakodować numery wierszy i kolumn)
  • jak przewinąć ekran w górę o jedną lub kilka linii
  • ile dopełnienia jest potrzebne do wykonania takiej operacji przewijania.

Model danych

Bazy danych Termcap składają się z jednego lub więcej opisów terminali.

Indeksy

Każdy opis musi zawierać kanoniczną nazwę terminala. Może również zawierać jeden lub więcej aliasów dla nazwy terminala. Nazwa kanoniczna lub aliasy to klucze, za pomocą których biblioteka przeszukuje bazę danych termcap.

Wartości danych

Opis zawiera jedną lub więcej możliwości, które mają konwencjonalne nazwy. Możliwości są wpisywane: boolean , numeric i string . Biblioteka termcap nie ma z góry określonego typu dla każdej nazwy możliwości. Określa typy każdej zdolności według składni:

  • możliwości ciągów znaków mają znak „=” między nazwą właściwości a jej wartością,
  • możliwości numeryczne mają znak „#” między nazwą funkcji a jej wartością, a
  • Możliwości logiczne nie mają skojarzonej wartości (są zawsze prawdziwe, jeśli zostały określone).

Aplikacje używające termcap oczekują określonych typów dla powszechnie używanych możliwości i uzyskują wartości możliwości z bazy danych termcap przy użyciu wywołań bibliotek, które zwracają się pomyślnie tylko wtedy, gdy zawartość bazy danych odpowiada założonemu typowi.

Hierarchia

Opisy termcap mogą być konstruowane przez włączenie zawartości jednego opisu do innego, wygaszenie możliwości zawartego opisu lub przesłanianie lub dodawanie możliwości. Bez względu na używany model pamięci , biblioteka termcap tworzy opis terminala na podstawie żądanego opisu, włączając w to pomijanie lub nadpisywanie w momencie żądania.

Model przechowywania

Dane Termcap są przechowywane jako tekst, dzięki czemu można je łatwo modyfikować. Tekst może być odczytany przez bibliotekę termcap z plików lub zmiennych środowiskowych.

Zmienne środowiska

TERM zmienna zawiera nazwę typu terminala.

TERMCAP zmienna może zawierać bazę danych termcap. Jest najczęściej używany do przechowywania pojedynczego opisu termcap, ustawianego przez emulator terminala, aby zapewnić właściwości terminala powłoce i programom zależnym.

TERMPATH zmienna jest obsługiwany przez nowsze implementacje termcap i określa ścieżkę przeszukiwania dla plików termcap.

Plik płaski

Oryginalna (i najbardziej powszechna) implementacja biblioteki termcap pobiera dane z płaskiego pliku tekstowego. Przeszukiwanie dużego pliku termcap, np. 500 kB, może być powolne. Aby zwiększyć wydajność, narzędzie, takie jak zmiana kolejności, jest używane do umieszczania najczęściej używanych wpisów na początku pliku.

Zaszyfrowana baza danych

Implementacje termcap oparte na BSD-4.4 przechowują opis terminala w haszowanej bazie danych (np. Coś w rodzaju Berkeley DB wersja 1.85). Przechowują one dwa typy rekordów: aliasy wskazujące na wpis kanoniczny i sam wpis kanoniczny. Tekst wpisu termcap jest przechowywany dosłownie.

Ograniczenia i rozszerzenia

Oryginalna implementacja termcap została zaprojektowana tak, aby zużywała mało pamięci:

  • pierwsze imię składa się z dwóch znaków, mieszczących się w 16 bitach
  • nazwy funkcji składają się z dwóch znaków
  • opisy są ograniczone do 1023 znaków.
  • może być zawarty tylko jeden wpis termcap wraz z definicjami i musi on znajdować się na końcu.

Nowsze implementacje interfejsu termcap generalnie nie wymagają dwuznakowej nazwy na początku wpisu.

Nazwy możliwości są nadal dwoma znakami we wszystkich implementacjach.

Funkcja tgetent używana do odczytywania opisu terminala używa bufora, którego rozmiar musi być wystarczająco duży dla danych i przyjmuje się, że ma 1024 znaki. Nowsze implementacje interfejsu termcap mogą złagodzić to ograniczenie, zezwalając na zerowy wskaźnik zamiast ustalonego bufora lub ukrywając dane, które nie pasowałyby, np. Poprzez możliwość ZZ w termcapie NetBSD . Terminfo interfejs biblioteki emuluje również interfejs termcap, a nie faktycznie korzysta z bufora o stałym rozmiarze.

Emulacja termcap biblioteki terminfo pozwala na dołączenie wielu innych wpisów bez ograniczania pozycji. Kilka innych nowszych implementacji biblioteki termcap może również zapewniać tę możliwość, chociaż nie jest to dobrze udokumentowane.

Przestarzałe funkcje

Specjalna zdolność, zdolność „hz”, została zdefiniowana specjalnie do obsługi terminala Hazeltine 1500 , który miał niefortunną cechę polegającą na używaniu znaku tyldy ASCII („~”) jako wprowadzającego sekwencję sterującą. Aby obsługiwać ten terminal, kod, który korzystał z bazy danych, musiał nie tylko wiedzieć o używaniu tyldy do wprowadzania pewnych sekwencji sterujących, ale także musiał wiedzieć, że należy podstawić inny drukowalny znak dla wszelkich tyld w wyświetlanym tekście, ponieważ tylda w tekście zostanie zinterpretowany przez terminal jako początek sekwencji sterującej, co spowoduje brak tekstu i zniekształcenie ekranu. Dodatkowo znaczniki atrybutów (takie jak początek i koniec podkreślenia) same zajmowały miejsce na ekranie. Komentarze w kodzie źródłowym bazy danych często nazywają to „Hazeltine braindamage”. Ponieważ Hazeltine 1500 był szeroko stosowanym terminalem pod koniec lat 70., ważne było, aby aplikacje były w stanie radzić sobie z jego ograniczeniami.

Zobacz też

Bibliografia

Linki zewnętrzne