Funktioner och datatyper är kraftfulla komponenter som integrerar program med skrivbordet. Med hjälp av dessa kan du skapa ett användargränssnitt för att starta program och ändra deras datafiler.
Det här kapitlet introducerar begreppen funktioner och datatyper. Det handlar om:
Varför du kan behöva skapa funktioner och datatyper för program.
Hur funktioner och datatyper förhåller sig till varandra.
Hur funktioner och datatyper förhåller sig till utskrifter från skrivbordet.
Procedurerna och reglerna för att skapa funktioner och datatyper beskrivs i tre kapitel i handboken.
Kapitel 11 beskriver hur du kan skapa funktioner och datatyper genom att använda skrivbordsverktyget Skapa funktion.
Du använder Skapa funktion för att skapa funktioner och datatyper till de flesta program, utan att du behöver lära dig syntaxreglerna för definitionerna.
Kapitel 12 och Kapitel 13 beskriver hur du skapar funktioner och datatyper manuellt genom att skapa och redigera konfigurationsfilerna.
När du vill använda andra funktioner som inte stöds av Skapa funktion måste du skapa dessa funktioner och datatyper manuellt.
Funktioner är instruktioner som automatiserar skrivbordsuppgifter, t ex att köra program och öppna datafiler. Funktioner fungerar på ungefär samma sätt som makron och programmeringsfunktioner. Varje funktion har ett namn som används för att köra funktionen.
När du definerar en funktion kan den användas för att anpassa användargränssnittet så att olika aktiviteter blir lättare att utföra. Skrivbordet kan ansluta nya komponenter för användargränssnittet, t ex ikoner, kontroller för Frontpanelen och menyalternativ för funktioner.
Programgruppen Skrivbordsverktyg i programhanteraren innehåller t ex ikoner som startar olika hjälpmedel.
När du dubbelklickar på en ikon kommer en funktion att köras. Här är t ex en del av definitionen till funktionen som körs när användaren dubbelklickar på ikonen för Xwd Display. Funktionen definieras i konfigurationsfilen /usr/dt/appconfig/types/språk/xclients.dt:
ACTION Xwud { LABEL Xwd Display TYPE COMMAND EXEC_STRING /usr/bin/X11/xwud -noclick -in \ %(File)Arg_1"Xwd-fil som ska visas:"% ... }
Kommandot i funktionens EXEC_STRING körs när användaren dubbelklickar på ikonen.
Frontpanelen använder också funktioner. Här är t ex en del av definitionen till ikonen Terminal på panelundermenyn Egna program. Ikonen definieras i konfigurationsfilen /usr/dt/appconfig/types/språk/dtwm.fp:
CONTROL Term { ICON Fpterm LABEL Terminal PUSH_ACTION Dtterm ... }
Fältet PUSH_ACTION anger vilken funktion som ska köras när användaren klickar på kontrollen - i detta fall en funktion kallad Dtterm.
Ett annat vanligt användningsområde för funktioner är menyer. Datafiler har normalt funktioner på Markera-menyn i filhanteraren. XWD-filer (filer med namn som slutar på.xwd eller.wd) har t ex funktionen Öppna som visar skärmbilden genom att köra funktionen Xwud.
Funktionerna på Markera-menyn anges i datatypsdefinitionen för XWD-filen. Definitionen finns i konfigurationsfilen /usr/dt/appconfig/types/språk/xclients.dt.
DATA_ATTRIBUTES XWD { ACTIONS Open,Print ICON Dtxwd ...
}
Datatypen XWD och tillhörande Open- och Print-funktioner förklaras i Failed Cross Reference Format.
Titta på ikonen Visa xwd i programgruppen Skrivbordsverktyg. Om du dubbelklickar på den körs X-klienten xwud. Ikonen representerar dock inte direkt det körbara programmet xwud i /usr/bin/X11/xwud.
Ikonen med namnet Visa xwd visas i programgruppen eftersom det finns en fil i den mappen med namnet Xwud (se Figur 10-4). Den filen motsvarar underliggande funktioner med samma namn - Xwud. I funktionsdefinitionen är funktionsnamnet namnet efter nyckelordet ACTION :
ACTION Xwud { LABEL Xwd Display TYPE COMMAND WINDOW_TYPE NO_STDIO EXEC_STRING /usr/bin/X11/xwud -noclick -in \ %(File)Arg_1"Xwd-fil som ska visas:"% DESCRIPTION Funktionen Visa xwd (Xwud) visar en \ xwd-fil som har skapats med funktionen \ Xwd Capture (Xwd). Den använder \ kommandot 'xwud'. }
Filen kallas för en funktionsfil eftersom den är knuten till en funktion. En fil är en funktionsfil när den är körbar och har samma namn som funktionen. Ikonen i Programhanteraren (eller filhanteraren) kallas för en funktionsikon eller programikon, eftersom programmet startar då du dubbelklickar på den.
När programhanteraren hittar en körbar fil letar den igenom funktionens databas för att se om det finns några funktioner vars namn matchar filnamnet. Om så är fallet vet programhanteraren att filen är en funktionsfil.
Innehållet i en funktionsfil är ointressant eftersom den innehåller kommentarer till skrivbordsfunktionen.
Funktionsfilen är inte detsamma som funktionsdefinitionsfilen. Funktionsfilen är en fil med samma namn som funktionen. Den används för att skapa programikonen i filhanteraren eller programhanteraren. Funktionsdefinitionsfilen är filen med namnet namn.dt som innehåller funktionens definition.
När skrivbordet upptäcker att en fil är en funktionsfil, används den underliggande funktionen för att definiera funktionsfilens utseende och metod.
Fältet EXEC_STRING anger hur funktionsikonen ska fungera. I fallet med ikonen Visa xwd anger EXEC_STRING att funktionsikonen ska köra X-klienten xwud med vissa kommandoradsargument.
Fältet LABEL anger namnet på funktionsikonen.
Fältet DESCRIPTION beskriver texten som visas när användaren begär objekthjälp.
Programikonen Xwud använder standardikonbilden för funktioner, eftersom dess ikondefinition inte innehåller fältet ICON, vilken anger en annan bild.
Ikonen Compress File använder däremot en annan ikonbild eftersom dess underliggande funktionsikon innehåller ett ICON-fält.
Exempel:
ACTION Compress { LABEL Komprimera fil ICON Dtcmprs ... }
Funktionen Xwud kallas en kommandofunktion eftersom dess definition innehåller kommandot som ska köras (EXEC_STRING). Fältet TYPE i funktionsdefinitionen definierar funktionstypen.
Inledningsvis visas ikonen Visa xwd i programgruppen Skrivbordsverktyg. Du kan dock skapa ytterligare kopior av funktionsikonen i valfri mapp där du har skrivbehörighet. Så länge funktionsdefinitionen för Xwud är en del av databasen, blir alla körbara filer du skapar med namnet Xwud en funktionsfil som representerar den funktionen. Ikonen i program- eller filhanteraren används för att köra funktionen.
Ett argument till ett kommando är normalt en fil som kommandot arbetar med. Funktioner kan skrivas för att acceptera filargument.
EXEC_STRING för funktionen Xwud anger t ex att ett filargument krävs:
EXEC_STRING /usr/bin/X11/xwud -noclick -in \ %(File)Arg_1"Xwd-fil som ska visas:"%
Termen Arg står för ordet argument. Syntaxen Arg_1 innebär det första argumentet, och (File) innebär att funktionen behandlar argumentet som en fil.
Det enklaste sättet för användaren att tillhandahålla ett filargument är att släppa en datafil på programikonen. Skrivbordet känner av sökvägen till den släppta filen och placerar den i kommandoraden i stället för texten mellan symbolerna % (%(File)Arg_1"Xwd-fil som ska visas: "%). Kommandot som körs blir då:
/usr/bin/X11/xwud -noclick -in sökväg
När användaren dubbelklickar på programikonen känner skrivbordet av från EXEC_STRING att ett filargument krävs, och visar en dialogruta som ber användaren att skriva ett filnamn eller en sökväg. I fallet med funktionen Xwud blir ledtexten:
Xwd-fil som ska visas:
Filnamnet eller sökvägen som användaren anger används som filargument.
Förutom för att starta program används funktioner på skrivbordet för att skapa funktionalitet i:
Frontpanelen.
Definitionen av en ikon på Frontpanelen omfattar fält som anger vilken funktion som körs när användaren klickar på ikonen eller släpper en fil på den. Mer information finns i "Definiera kontroller på Frontpanelen".
Menyer
Med syntaxen till definitionerna för Fönster- och Arbetsyta-menyn kan du ange vilken funktion som ska köras av ett menyalternativ. Mer information finns i "Arbetsytehanterarens menyer" och i direkthjälpen (man) för dtwmrc(4).
Kommunikation mellan program.
Ett program kan vara utformat för att skicka och ta emot information med en speciell typ av funktion som kallas ToolTalk-meddelande (TT_MSG). TT_MSG -funktioner beskrivs i skrivbordsdokumentationen till utvecklingsmiljön.
När användaren skapar en ny datafil varierar filikonens utseende och metod i filhanteraren, beroende på den typ av datafil som användaren har skapat. Med skrivbordets datatypsmekanism går det att skapa anpassat utseende och en anpassad metod för filer och mappar.
En datatyp är en konstruktion som definieras i skrivbordets databas. Nedan finns t ex definitionen till datatypen XWD. Definitionen finns i konfigurationsfilen /usr/dt/appconfig/types/språk/xclients.dt:
DATA_ATTRIBUTES XWD { ACTIONS Open,Print ICON Dtxwd NAME_TEMPLATE %s.xwd MIME_TYPE application/octet-stream SUNV3_TYPE xwd-file DESCRIPTION Denna fil innehåller en grafisk bild med XWD-format. \ Dessa filer skapas vanligtvis genom att \ funktionen XwdCapture tar en bild av ett fönster. \ Dess datatyp heter XWD. XWD-filer \ har namn som slutar med'.xwd' eller '.wd'. }
DATA_CRITERIA XWD1 { DATA_ATTRIBUTES_NAME XWD MODE f NAME_PATTERN *.xwd } DATA_CRITERIA XWD2 { DATA_ATTRIBUTES_NAME XWD MODE f NAME_PATTERN *.wd }
Alla datatypsdefinitioner består av två delar:
DATA_ATTRIBUTES - beskriver utseendet och egenskaper hos datatypen.
DATA_CRITERIA - bestämmer regler (namn och innehåll) för hur en fil ska kategoriseras så att den tillhör en datatyp.
Fältet DATA_ATTRIBUTES_NAME innehåller villkor till attributen.
Det kan finnas flera DATA_CRITERIA för ett DATA_ATTRIBUTE. Datatypen XWD har t ex två villkor för att ange två olika namnvillkor (NAME_PATTERN) - namn som slutar med .xwd eller .wd.
Ta datatypen XWD som exempel. Användaren skapar en fil av XWD-typ genom att ge filen något av filtypstilläggen .xwd eller.wd. Skrivbordet använder filnamnet som kriterium vid bestämningen av filens datatyp.
Varje fil med datatypen XWD får:
En unik ikonbild som hjälper användaren att känna igen datafilerna.
Objekthjälp som informerar om datatypen.
En egen Markera-meny i filhanteraren som innehåller funktionerna Öppna och Skriv ut. Funktionen Open (Öppna) för XWD-filer kör funktionen Xwud.
Markera-menyn i filhanteraren är bara aktiv när en fil eller en mapp är markerad. Vilket kommando som finns längst ned på Markera-menyn beror på datatypen. Om en XWD-fil är markerad finns alternativen Öppna och Skriv ut på Markera-menyn.
Fältet ACTIONS i datatypsdefinitionen anger vilka kommandon som läggs till längst ned på datatypens Markera-meny.
DATA_ATTRIBUTES XWD { ACTIONS Open,Print ... }
Innehållet på Markera-menyn beror på datatypen. Det finns många datatyper som innehåller funktionen Open (Öppna). Det innebär att när du markerar en fil av en sådan datatyp i filhanteraren och visar Markera-menyn, finns kommandot Öppna på menyn.
Funktionen Open (Öppna) kör normalt programmet som datafilen hör till. Om du t ex öppnar en XWD-fil körs funktionen Xwud, vilken i sin tur kör X-klienten xwud för att visa skärmbilden. Med andra ord är funktionen Open (Öppna) synonym med funktionen Xwud, för datatypen XWD. Om du öppnar en fil av typen TEXTFILE öppnas Textredigeraren. När du öppnar en BM- (bitmapp) eller PM-fil (bildpunktsmönster) körs ikonredigeraren.
Du kan skapa olika Öppna-funktioner som utför olika saker med två möjligheter till funktionsdefinitioner:
Med funktionstilldelning skapar du en funktion som kör en annan funktion i stället för att köra ett kommando direkt. Du kan t ex skapa en Öppna-funktion som tilldelas (kör) funktionen Xwud.
Datatypsrestriktioner för en funktion.
Funktionsdefinitioner kan innehålla fältet ARG_TYPE som begränsar funktionen till vissa datatyper. Du kan t ex ange att Öppna-funktionen som kör funktionen Xwud bara gäller för fält med datatypen XWD.
Nedan finns definitionen av den funktion som tilldelar Öppna-funktionen funktionen Xwud för datatypen XWD. Den finns i databaskonfigurationsfilen /usr/dt/appconfig/types/C/xclients.dt.
ACTION Open { LABEL Open ARG_TYPE XWD TYPE MAP MAP_ACTION Xwud }
Fältet TYPE anger att detta är en tilldelningsfunktion. MAP_ACTION anger att funktionen kör funktionen Xwud. Fältet ARG_TYPE anger att funktionen bara gäller för filer vars datatyp är XWD.
Jämför föregående definition av funktionen Öppna med nästa definition, som finns i databasfilen /usr/dt/appconfig/types/C/dt.dt.
ACTION Open { LABEL Open ARG_TYPE BM TYPE MAP MAP_ACTION Dticon }
Den här definitionen gäller för filer med datatypen (ARG_TYPE) BM (bitmappfiler). Definitionen tilldelar funktionen Öppna funktionen Dticon, som kör Ikonredigeraren.
Vad som händer när du dubbelklickar för en viss datatyp definieras av den första posten i fältet ACTIONS. För datatypen XWD innebär ett dubbelklick att funktionen Öppna körs, vilken i sin tur kör funktionen Xwud.
När användaren släpper en datafil på en funktionsikon körs funktionen som använder den datafilen som ett argument (se "Hur funktioner använder datafiler som argument").
När t ex datafilen XWD släpps på ikonen Visa xwd körs funktionen Xwud med den datafilen som argument. Detta kör X-klienten xwud med den datafilen.
En datafil kan skrivas ut på följande sätt från skrivbordet:
Använd om möjligt kommandot Skriv ut på filhanterarens Markera-meny.
Släpp en datafil på skrivbordets målområde för utskrift (skrivarikonen på Frontpanelen eller en skrivarikon i utskriftshanteraren).
Dessutom går det att skriva ut från många program.
När du skriver ut från skrivbordet används funktionen Skriv ut. Skriv ut är, på samma sätt som Öppna, ett funktionsnamn som används till flera olika typer av data. Därför använder Skriv ut-funktioner funktionstilldelning och fältet ARG_TYPE för att anpassa utskriften efter varje datatyp.
Nedan finns t ex funktionen Skriv ut för datatypen XWD. Definitionen finns i /usr/dt/appconfig/types/språk/xclients.dt:
ACTION Print { LABEL SkrivUt ARG_TYPE XWD TYPE MAP MAP_ACTION NoPrint }
Den här Print (Skriv ut)-funktionen, som är specifik för XWD-filer, tilldelas en NoPrint-funktion. NoPrint är en speciell funktion som definieras i /usr/dt/appconfig/types/språk/dt.dt. Funktionen NoPrint visar en dialogruta som anger att den här datatypen inte kan skrivas ut.
Jämför Print-funktionen för XWD med följande Print-funktion för PCL-filer:
ACTION Print { LABEL SkrivUt ARG_TYPE PCL TYPE MAP MAP_ACTION PrintRaw }
Funktionen PrintRaw, som definieras i konfigurationsfilen /usr/dt/appconfig/types/språk/print.dt, innehåller följande kommandorad för att skriva PCL-filerna:
ACTION PrintRaw { TYPE COMMAND WINDOW_TYPE NO_STDIO EXEC_STRING /usr/dt/bin/dtlp -w %(File)Arg_1% }