Termcap - Termcap
Termcap ( terminal kapacitet ) er en software bibliotek og database bruges på Unix-lignende computere. Det gør det muligt programmer til at bruge display computerterminaler i en enhedsuafhængig måde, der forenkler processen med at skrive bærbare tekst-mode applikationer. Bill Joy skrev det første termcap-bibliotek i 1978 til Berkeley Unix- operativsystemet ; den er siden blevet portet til de fleste Unix og Unix-lignende miljøer, endda OS-9 . Joys design blev angiveligt påvirket af designet af terminaldatalageret i det tidligere inkompatible tidsdelingssystem .
En termcap-database kan beskrive mulighederne i hundredvis af forskellige displayterminaler. Dette gør det muligt for programmer at have karakterbaseret displayoutput uafhængigt af typen af terminal. Teksteditorer på skærmen som vi og emacs er eksempler på programmer, der muligvis bruger termcap. Andre programmer er anført i kategorien Termcap .
Eksempler på hvad databasen beskriver:
- hvor mange kolonner bredt displayet er
- hvilken streng der skal sendes for at flytte markøren til en vilkårlig position (inklusive hvordan man koder række- og kolonnetal)
- hvordan man ruller skærmen op en eller flere linjer
- hvor meget polstring der er brug for til en sådan rulleoperation.
Datamodel
Termcap-databaser består af en eller flere beskrivelser af terminaler.
Indeks
Hver beskrivelse skal indeholde terminalens kanoniske navn. Det kan også indeholde et eller flere aliasser for terminalens navn. Det kanoniske navn eller aliaserne er de nøgler, hvormed biblioteket søger i termcap-databasen.
Dataværdier
Beskrivelsen indeholder en eller flere funktioner, som har konventionelle navne. Funktionerne er skrevet: boolsk , numerisk og streng . Termcap-biblioteket har ingen forudbestemt type for hvert kapacitetsnavn. Det bestemmer typerne for hver kapacitet ved hjælp af syntaksen:
- strengfunktioner har et "=" mellem kapacitetsnavnet og dets værdi,
- numeriske funktioner har et "#" mellem kapacitetsnavnet og dets værdi, og
- boolske funktioner har ingen tilknyttet værdi (de er altid sande, hvis det er specificeret).
Applikationer, der bruger termcap, forventer dog bestemte typer for de almindeligt anvendte kapaciteter og opnår værdierne for kapaciteter fra termcap-databasen ved hjælp af biblioteksopkald, der kun vender tilbage, når databaseindholdet matcher den antagne type.
Hierarki
Termcap-beskrivelser kan konstrueres ved at inkludere indholdet af en beskrivelse i en anden, undertrykke kapaciteter fra den medfølgende beskrivelse eller tilsidesætte eller tilføje muligheder. Ligegyldigt hvad opbevaring model bruges, den termcap biblioteket konstruerer terminalen beskrivelse fra den anmodede beskrivelse, herunder, undertrykke eller tvingende på tidspunktet for anmodningen.
Opbevaringsmodel
Termcap-data gemmes som tekst, hvilket gør det nemt at ændre. Teksten kan hentes af termcap-biblioteket fra filer eller miljøvariabler.
Miljøvariabler
Den TERM miljøvariablen indeholder terminalen typen navn.
Den termcap miljøvariabel kan indeholde en termcap database. Det bruges oftest til at gemme en enkelt termcap-beskrivelse, der er indstillet af en terminalemulator for at give terminalens egenskaber til shell og afhængige programmer.
Den termpath miljøvariablen understøttes af nyere termcap implementeringer og definerer en søgesti for termcap filer.
Flad fil
Den originale (og mest almindelige) implementering af termcap-biblioteket henter data fra en flad tekstfil. Søgning efter en stor termcap-fil, f.eks. 500 kB, kan være langsom. For at hjælpe med ydeevnen bruges et værktøj som f.eks. Genbestilling til at placere de hyppigst anvendte poster nær begyndelsen af filen.
Hashed-database
BSD-4.4-baserede implementeringer af termcap gemmer terminalbeskrivelsen i en hashed-database (f.eks. Noget som Berkeley DB version 1.85). Disse gemmer to typer poster: aliaser, der peger på den kanoniske post, og selve den kanoniske post. Teksten til termcap-posten gemmes bogstaveligt.
Begrænsninger og udvidelser
Den oprindelige implementering af termcap var designet til at bruge lidt hukommelse:
- fornavnet er to tegn, der passer til 16 bits
- kapacitetsnavne er to tegn
- beskrivelser er begrænset til 1023 tegn.
- kun en termcap-post med dens definitioner kan medtages og skal være i slutningen.
Nyere implementeringer af termcap-grænsefladen kræver normalt ikke navnet på to tegn i starten af posten.
Funktionsnavne er stadig to tegn i alle implementeringer.
Den tgetent funktion, der bruges til at læse terminal beskrivelsen anvender en puffer, hvis størrelse skal være stor nok til de data, og antages at være 1024 tegn. Nyere implementeringer af termcap-grænsefladen kan lempe denne begrænsning ved at tillade en nul-markør i stedet for den faste buffer eller ved at skjule de data, der ikke passer, f.eks. Via ZZ- kapaciteten i NetBSD- termcap. Den terminfo bibliotek interfacet emulerer også termcap interface, og faktisk ikke bruge fast størrelse puffer.
Terminfo-bibliotekets emulering af termcap gør det muligt at inkludere flere andre poster uden at begrænse positionen. Et par andre nyere implementeringer af termcap-biblioteket kan også give denne mulighed, selvom det ikke er veldokumenteret.
Forældede funktioner
En særlig kapacitet, "hz" -funktionen, blev defineret specifikt for at understøtte Hazeltine 1500- terminalen, som havde den uheldige egenskab ved at bruge ASCII- tilde-tegnet ('~') som en kontrolsekvensintroducer. For at understøtte denne terminal skulle kode, der brugte databasen, ikke kun vide om brug af tilde til at indføre bestemte kontrolsekvenser, men det måtte også vide, at erstatte et andet udskrivbart tegn for alle tildes i den viste tekst, da en tilde i teksten ville blive fortolket af terminalen som starten på en kontrolsekvens, hvilket resulterede i manglende tekst og skærmguld. Derudover tog attributmarkører (såsom start og slutning af understregning) selv plads på skærmen. Kommentarer i databasens kildekode henvises ofte til dette som "Hazeltine braindamage". Da Hazeltine 1500 var en meget brugt terminal i slutningen af 1970'erne, var det vigtigt for applikationer at kunne håndtere dens begrænsninger.
Se også
- Computerterminaler
- Forløb (programmeringsbibliotek)
- Terminfo
- ANSI escape sekvenser , forsøger at forene de mange sekvenser