Termcap

Termapi.svg

Termcap ( terminal capability ) är ett mjukvarubibliotek och databas som används på Unix-liknande datorer. Det gör det möjligt för program att använda displaydatorterminaler ett enhetsoberoende sätt, vilket avsevärt förenklar processen att skriva bärbara textlägesapplikationer . Bill Joy skrev det första termcap-biblioteket 1978 för operativsystemet Berkeley Unix ; det har sedan dess porterats till de flesta Unix- och Unix-liknande miljöer, även OS-9 . Joys design påverkades enligt uppgift av utformningen av terminaldatalagret i det tidigare Incompatible Timesharing System . [ bättre källa behövs ] [ tveksamt ]

En termcap-databas kan beskriva kapaciteten hos hundratals olika displayterminaler. Detta gör att program kan ha teckenbaserad visningsutgång, oberoende av typen av terminal. Textredigerare på skärmen som vi och Emacs är exempel på program som kan använda termcap. Andra program listas i kategorin Termcap .

Exempel på vad databasen beskriver:

  • hur många kolumner bred displayen är
  • vilken sträng som ska skickas för att flytta markören till en godtycklig position (inklusive hur man kodar rad- och kolumnnumren)
  • hur man rullar skärmen upp en eller flera rader
  • hur mycket stoppning behövs för en sådan rullningsoperation.

Datamodell

Termcap-databaser består av en eller flera beskrivningar av terminaler.

Index

Varje beskrivning måste innehålla terminalens kanoniska namn. Den kan också innehålla ett eller flera alias för namnet på terminalen. Det kanoniska namnet eller aliasen är nycklarna med vilka biblioteket söker i termcap-databasen.

Datavärden

Beskrivningen innehåller en eller flera funktioner som har konventionella namn. Möjligheterna är skrivna: boolesk , numerisk och sträng . Termcap-biblioteket har ingen förutbestämd typ för varje funktionsnamn. Den bestämmer typerna av varje förmåga genom syntaxen:

  • strängfunktioner har ett "=" mellan förmågans namn och dess värde,
  • numeriska funktioner har ett "#" mellan förmågans namn och dess värde, och
  • booleska förmågor har inget associerat värde (de är alltid sanna om de anges).

Applikationer som använder termcap förväntar sig specifika typer för de ofta använda funktionerna och erhåller värdena för förmågor från termcap-databasen med hjälp av biblioteksanrop som endast returnerar framgångsrikt när databasinnehållet matchar den antagna typen.

Hierarki

Termcap-beskrivningar kan konstrueras genom att inkludera innehållet i en beskrivning i en annan, undertrycka funktioner från den inkluderade beskrivningen eller åsidosätta eller lägga till funktioner. Oavsett vilken lagringsmodell som används, konstruerar termcap-biblioteket terminalbeskrivningen från den begärda beskrivningen, inklusive, undertrycka eller åsidosätta vid tidpunkten för begäran.

Förvaringsmodell

Termcap-data lagras som text, vilket gör det enkelt att ändra. Texten kan hämtas av termcap-biblioteket från filer eller miljövariabler.

Miljövariabler

Miljövariabeln TERM innehåller terminaltypens namn .

Miljövariabeln TERMCAP kan innehålla en termcap- databas . Det används oftast för att lagra en enda termcap-beskrivning, inställd av en terminalemulator för att ge terminalens egenskaper till skalet och beroende program.

TERMPATH stöds av nyare termcap-implementationer och definierar en sökväg för termcap-filer .

Platt fil

Den ursprungliga (och vanligaste) implementeringen av termcap-biblioteket hämtar data från en platt textfil. Att söka efter en stor termcap-fil, t.ex. 500 kB, kan vara långsam. För att underlätta prestandan används ett verktyg som omordning för att placera de vanligaste posterna nära början av filen.

Hashed databas

4.4BSD-baserade implementeringar av termcap lagrar terminalbeskrivningen i en hashad databas (t.ex. något som Berkeley DB version 1.85). Dessa lagrar två typer av poster: alias som pekar på den kanoniska posten och den kanoniska posten själv. Texten i termcap-posten lagras bokstavligt.

Begränsningar och förlängningar

Den ursprungliga termcap-implementeringen var designad för att använda lite minne:

  • förnamnet är två tecken, för att få plats i 16 bitar
  • kapacitetsnamn är två tecken
  • beskrivningar är begränsade till 1023 tecken.
  • endast en termcap-post med dess definitioner kan inkluderas och måste vara i slutet.

Nyare implementeringar av termcap-gränssnittet kräver i allmänhet inte namnet på två tecken i början av posten.

Kapacitetsnamn är fortfarande två tecken i alla implementeringar.

Den tgetent -funktion som används för att läsa terminalbeskrivningen använder en buffert vars storlek måste vara tillräckligt stor för data, och antas vara 1024 tecken. Nyare implementeringar av termcap-gränssnittet kan lätta på denna begränsning genom att tillåta en nollpekare i stället för den fasta bufferten, eller genom att dölja data som inte skulle passa, t.ex. via ZZ- kapaciteten i NetBSD termcap. Terminfo - bibliotekets gränssnitt emulerar också termcap-gränssnittet och använder faktiskt inte bufferten med fast storlek.

Terminfo-bibliotekets emulering av termcap tillåter att flera andra poster inkluderas utan att begränsa positionen. Några andra nyare implementeringar av termcap-biblioteket kan också ge denna förmåga, även om den inte är väldokumenterad.

Föråldrade funktioner

En speciell förmåga, "hz"-förmågan, definierades specifikt för att stödja Hazeltine 1500- terminalen, som hade den olyckliga egenskapen att använda ASCII- tilde-tecknet ('~') som en kontrollsekvensintroducerare. [ diskutera ] För att stödja den terminalen behövde inte bara koden som använde databasen veta om att använda tilden för att introducera vissa kontrollsekvenser, utan den var också tvungen att ersätta ett annat utskrivbart tecken för alla tilder i den visade texten, eftersom en tilde i texten skulle tolkas av terminalen som början på en kontrollsekvens, vilket resulterar i saknad text och skärmförvrängning. Dessutom tog attributmarkörer (som början och slutet av understrykning) själva plats på skärmen. [ citat behövs ] Kommentarer i databasens källkod hänvisade ofta till detta som "Hazeltine hjärnskada". Eftersom Hazeltine 1500 var en mycket använd terminal i slutet av 1970-talet, var det viktigt för applikationer . att kunna hantera dess begränsningar

Se även

externa länkar