Das hier vorgestellte Programm sorgt dafĂŒr, daĂ die mit dem Kontrollfeld-Accessory gemachten Voreinstellungen der DESKTOP.INF-Datei auch ohne das Kontrollfeld-Accessory wirksam werden. Dabei werden die wenig benutzten AES-Funktionen shel_get, shel_put und form_error erklĂ€rt und weitere Anwendungsmöglichkeiten erlĂ€utert.
Mit dem jedem ST beiliegenden Kontrollfeld-Accessory kann man bekanntlich allerlei tolle Dinge einstellen: Der Tastaturklick und der âGongâ lassen sich an- und abschalten, die Ansprechschwelle und Wiederholrate der Tastaturwiederholung, die Geschwindigkeit der Mausdoppelklicks und die Standardfarbpalette lassen sich wĂ€hlen. AuĂerdem ist eine Voreinstellung der RS232-Schnittstelle und des Druckers möglich. FĂŒr letzteres war bei Ă€lteren Versionen ein eigenes âEmulator-Accessoryâ notwendig, inzwischen hat diese Aufgabe auch das Kontrollfeld ĂŒbernommen.
All diese Einstellungen lassen sich unter dem MenĂŒpunkt âArbeit sichernâ des Desktops sogar abspeichem. Dabei erzeugt das Desktop bekanntlich die DESKTOP.INF-Datei, in der neben der Konfiguration des Desktops (Fensterpositionen, âVoreinstellungenâ usw.) auch die mit dem Kontrollfeld eingestellten Parameter stehen.
Doch wie so vieles bei unserem Lieblingsrechner hat auch dieses einen Haken. Die Kontrollfeldparameter werden nĂ€mlich nur vom Kontrollfeld-Accessory selbst wirksam gemacht (nicht etwa vom Desktop oder vom Betriebssystem), d.h. nur wenn das Kontrollfeld-Accessory geladen ist, kommt man in den GenuĂ all der mĂŒhsam ausprobierten âoptimalenâ Voreinstellungen.
Doch nicht jeder hat Lust, jedesmal das Kontrollfeld-Accessory mitzuladen, da man es sonst im allgemeinen nicht braucht. Das kleine Accessory, das ich Ihnen hier vorstellen möchte, ĂŒbernimmt nun diese Aufgabe, d.h. es macht beim Booten all die oben genannten Einstellungen wirksam, ohne daĂ das Kontrollfeld-Accessory geladen wird. Da es seine Informationen aus dem DESKTOP.INF bezieht, habe ich es auf den kryptischen Namen DSKINF getauft.
Eigentlich ist es eine ziemliche Verschwendung, fĂŒr solch ein âProblemâ ein Accessory zu opfern, daher ist es gĂŒnstiger, DSKINF in ein anderes Accessory, quasi als Zugabe, einzubauen.
Falls Sie bisher das Kontrollfeld-Accessory nicht benutzt haben, könnte es sein, daĂ in Ihrem DESKTOP.INF einige Parameter âmerkwĂŒrdigâ eingestellt sind, die sich bisher nicht bemerkbar gemacht haben. Daher kann es sein, daĂ Ihre Maus sich etwas ungewöhnlich benimmt oder die Farben leicht anders sind.
Dann sollten Sie zuerst mit dem Kontrollfeld-Accessory fĂŒr eine geeignete Einstellung sorgen.
Wo ist das DESKTOP.INF?
Unser Programm muĂ also irgendwie an die im DESKTOP .INF gespeicherten Parameter herankommen. Als erstes wĂŒrde es sich vielleicht anbieten, das DESKTOP.INF direkt von Diskette oder Harddisk zu laden. Doch ist es nicht so einfach, zuverlĂ€ssig das Bootlaufwerk herauszubekommen.
Das âProblemâ löst sich in Wohlgefallen auf, wenn man sich an die in der Literatur recht stiefmĂŒtterlich behandelten AES-Funktionen shel_get und shel_put erinnert (in [2] sind sie korrekt erklĂ€rt). Diese lesen nĂ€mlich einen Puffer des AES aus (bzw. beschreiben ihn), in dem sich normalerweise das DESKTOP.INF befindet. Das AES lĂ€dt das DESKTOP.INF nĂ€mlich beim Systemstart automatisch in einen internen Puffer, und auch das Desktop und das Kontrollfeld-Accessory benutzen diese AES-Funktionen, um darauf zuzugreifen. âArbeit sichernâ speichert dann das DESKTOP.INF aus dem Puffer auf das externe Speichermedium.
Jedesmal, wenn man auf dem Desktop ein Programm startet, speichert das Desktop âseineâ Parameter (wie etwa die Fensterkonfiguration) mit shel_put dort ab. Sobald man wieder zum Desktop âzurĂŒckkehrtâ, liest das Desktop das DESKTOP.INF mit shel_get, um sich an die alten Fensterpositionen usw. âzu erinnernâ.
#a123456
- Betrieb : 0=Vollduplex, 1=Halbduplex
- Baudrate : 0=9600, 1=4800, 2=1200, 3=300, 4=19200, 5=3600, 6=2400, 7=2000, 8=1800, 9=600, â:â=200, â;â=150, â<â=134, â=â=110, â>â=75, â?â=50
- ParitÀt 0=keine, 1=ungerade, 2=gerade
- Datenbits : 0=8, 1=7, 2=6, 3=5
- Handshake: 0=keins, 1=XON/XOFF, 2=RTS/CTS, 3=beides
- Bit8 : 0=gesetzt, 1=gelöscht
#b123456
- Typ: 0=Matrix, 1=Typenrad
- Farbe: 0=SchwarzweiĂ, 1=Farbe
- Auflösung: 0=1280, 1=960 Punkte
- QualitÀt: 0=Test, 1=Maximum
- Port: 0=Centronics, 1=RS232
- Papierart: 0=Endlospapier, 1=Einzelblatt
#c777...123AABB
777... (ersten 48 Ziffern): Farbpalette (s. Text)
- Doppelklick-Geschwindigkeit (0-4, wie im Kontrollfeld)
- Tastenklick: 0=aus, 1=an
- Glocke: 0=aus, 1=an
AA. Tastaturwiederholzeit (zweistellige Hex-Zahl)
BB. Tastaturwiederholrate (zweistellige Hex-Zahl)
Die Kontrollfeld-Parameter im DESKTOP.INF
Aufbau des DESKTOP.INF
Das DESKTOP.INF ist bekanntlich eine Textdatei, in der jede Zeile mit einem â#â-Zeichen beginnt, gefolgt von einem Buchstaben, der angibt, welcher Art die Informationen dieser Zeile sind. Falls Sie mit dem DESKTOP.INF noch nicht so vertraut sind, sollten Sie es sich zunĂ€chst durch einen Doppelklick oder âzeige Infoâ anzeigen lassen.
Hier interessieren uns nur â#aâ â#bâ und â#câ, die fĂŒr die Voreinstellung der seriellen Schnittstelle, die Druckeranpassung und das Kontrollfeld zustĂ€ndig sind. Die Bedeutungen der nachfolgenden Parameter sind kurz in der Abbildung zusammengestellt.
Bei Ă€lteren Versionen des Kontrollfeld-Accessories sind bei âBaud-Rateâ nur die ersten vier Werte einstellbar.
Dem â#câ folgen zunĂ€chst 16 Zifferngruppen aus je 3 Ziffern. Jede Gruppe legt dabei die Farbe einer der maximal 16 Farben der Farbpalette fest. Dabei steht jede der drei Ziffern einer Gruppe fĂŒr die FarbintensitĂ€t der Grundfarben Rot, GrĂŒn und Blau (zwischen 0 und 7). Im Monochrommodus ist nur die erste Dreiergruppe von Bedeutung. Dabei steht â777â fĂŒr die normale und â000â fĂŒr die invertierte Darstellung.
Das DESKTOP.INF endet eigentlich mit einem CTRL-Z (IBM lĂ€Ăt grĂŒĂen), doch fragt DSKINF sicherheitshalber auch noch auf das ĂŒbliche Nullbyte ab. Wer mehr ĂŒber den Aufbau des DESKTOP.INF wissen möchte, sei auf [1] oder [2] verwiesen, da eine komplette Behandlung hierein wenig zu weit fĂŒhren wĂŒrde.
Arbeitsweise von DSKINF
Die Funktion anal_dskinf lĂ€Ăt nun von get_dskinf das DESKTOP.INF mittels shel_get in einen vorher reservierten Puffer lesen. Der erste Parameter bei shel_get gibt die Adresse des vorher bereitgestellten Puffers an, der zweite die Zahl der zu ĂŒbertragenden Zeichen. Die tatsĂ€chliche LĂ€nge des DESKTOP.INF kann nicht im voraus ermittelt werden, doch ist der Puffer nach ATARIs neueren Dokumentationen 1024 Byte lang, also holen wir uns einfach diese 1024 Byte.
Die nachfolgende Schleife sucht nun die fĂŒr uns relevanten EintrĂ€ge im DESKTOP. INF heraus.
Die drei Routinen set_rs232, set_prt und set_cntrl werten nun die nachfolgenden Parameter aus. Zu set_rs232 und set_prt gibt es nicht viel anzumerken. Bei set_rs232 sollten Sie beachten, daĂ die Bits 7,4,3 und 0 des USART-Control-Registers (âucrâ im Listing) im DESKTOP.INF nicht voreingestellt werden können, und daher von DSKINF nicht verĂ€ndert werden sollten. AuĂerdem sind die Parameter âVoll-/Halbduplexâ und â8. Bit an/ausâ keine Einstellmöglichkeiten der seriellen Schnittstelle selbst, sondern werden vom âVT52-Emulatorâ bei der Kommunikation ĂŒber die Schnittstelle berĂŒcksichtigt. Daher können sie von DSKINF nicht ausgewertet werden.
Bei set_prt gibt es keine Besonderheiten, da alle Möglichkeiten, die die Druckereinstellung mit der XBIOS-Funktion Setprt bietet, mit dem DESKTOP.INF auch voreingestellt werden können.
Bei set_cntrl sollten Sie sich aber die Zusammenstellung der Farbpalette etwas genauer ansehen. Die dort angegebenen 16 Farben bilden nĂ€mlich nicht in dieser Reihenfolge die Farbpalette des Shifters (Video-Chips), sondern werden vom Kontrollfeld-Accessory scheinbar nach einem merkwĂŒrdigen Schema in einer anderen Reihenfolge zusammengestellt (abhĂ€ngig von der Auflösung).
Das Feld col_ix in der Funktion _set_cntrl gibt ĂŒber die âVertauschungâ bei niedriger und mittlerer Auflösung Auskunft. Es wird mit der Position einer Farbe innerhalb der â#câ-Zeile indiziert (2. Index) und liefert die zugehörige Position innerhalb der Farbpalette des Shifters. Bei der mittleren Auflösung z.B. wird die zweite Farbe im DESKTOP.INF zur vierten in der Palette des Shifters. Das RĂ€tsel lĂ€Ăt sich erklĂ€ren, wenn man annimmt, daĂ das Kontrollfeld-Accessory die Farben nicht mit der XBIOS-Funktion Setpalette oder Setcolor, sondern mit der VDI-Funktion vs_color setzt (dann ohne âVertauschungâ). Ein Blick ins VDI-Listing [3] zeigt nĂ€mlich, daĂ vs_color die âVDI-Farbenâ (âcolor indexâ) zur Palette des Shifters genau so zuordnet, wie das Kontrollfeld dies macht.
DSKINF könnte nun in der gleichen Weise vorgehen. Doch liegen die Farben im DESKTOP.INF schon in einem der Shifter-Palette angepaĂten Format vor, d.h. die IntensitĂ€ten der Grundfarben sind schon in Werten 0...7 angegeben, das VDI benötigt jedoch eine gerĂ€teunabhĂ€ngige 1000er-Skalierung, bei der die FarbintensitĂ€ten jeweils in Promille der GesamtintensitĂ€t (=1000 Promille) angegeben werden. DSKINF mĂŒĂte also die Farbwerte aus dem DESKTOP.INF auf die VDI-Skalierung umrechnen, auĂerdem mĂŒĂte eine âVDI work stationâ eröffnet werden, um vs_color aufzurufen.
Daher wurde der einfachere Weg gewĂ€hlt, indem DSKINF die Farbpalette ĂŒber das XBIOS setzt und dafĂŒr die Numerierung der Farben selbst umrechnet. Dies könnte also bei anderen BildschirmgerĂ€tetreibern des VDI zu Schwierigkeiten fĂŒhren.
In einer Kleinigkeit verhĂ€lt sich DSKINF ĂŒbrigens anders als das Kontrollfeld-Accessory. WĂ€hrend vs_color nur die tatsĂ€chlich möglichen Farben neu setzt (also 1, 4 oder 16 je nach Auflösung), verĂ€ndert DSKINF immer die ganze Palette. Da die Auflösung aber im allgemeinen nicht verĂ€ndert wird, ohne daĂ neu gebootet wird, macht dies nicht viel aus.
Tastaturklick und âGlockeâ können nur mit der Systemvariablen conterm beeinfluĂt werden, daher muĂ kurzfristig in den Supervisor-Modus umgeschaltet werden, um die sonst âgeschĂŒtzteâ Systemvariable Ă€ndern zu können.
Am Ende von set_cntrl findet sich noch der XBIOS-Aufruf Vsync, mit dem auf den nĂ€chsten Bildwechsel des Monitors gewartet wird. Dies ist erforderlich, da die bei Setpalette angegebene Farbpalette erst beim nĂ€chsten Bildwechsel gesetzt wird. Da Setpalette sich nur den Zeiger auf die Palette merkt und das Feld col nur lokal definiert, also nach dem Verlassen von set_cntrl nicht mehr vorhanden ist, wĂŒrde das BIOS die Palette eventuell gar nicht mehr vorfinden, wenn es sie setzen will. Vsync sorgt also dafĂŒr, daĂ col beim Verlassen von set_cntrl garantiert nicht mehr benötigt wird.
Werfen wir zu guter Letzt noch einen Blick auf das Hauptprogramm (main). Zu Beginn wird das aktuelle DESKTOP.INF gerettet. Da es zu diesem Zeitpunkt kaum schon verÀndert worden sein kann, handelt es sich sicherlich um das Original-DESKTOP.INF, wie es auch auf der Disk vorliegt.
Beim Anklicken des Accessories im Desk-MenĂŒ wird nun dieses gerettete DESKTOP. INF als neues DESKTOP.INF gesetzt. Dazu wird die AES-Funktion shel_put verwendet, die analog zu shel_get arbeitet, nur daĂ hier die spezifizierte Anzahl Bytes in den DESKTOP.INF-Puffer ĂŒbertragen wird. Bei gröĂeren Werten als 1024 werden globale Variablenbereiche des AES ĂŒberschrieben, daher Vorsicht.
Dies kann dazu benutzt werden, das Desktop âaufzurĂ€umenâ. VerĂ€ndern Sie z.B. den Aufbau des Desktops, indem Sie Laufwerkssymbole verschieben, Voreinstellungen verĂ€ndern oder Fenster verĂ€ndern. Starten Sie nun ein GEM-Programm, das den Aufruf von Accessories zulĂ€Ăt, und wĂ€hlen Sie von dort aus DSKINF im DeskmenĂŒ an. Nach der RĂŒckkehr aus dem GEM-Programm finden Sie das Desktop in seiner Anfangskonfiguration wieder.
Vom Desktop aus bewirkt der Aufruf von DSKINF allerdings nichts, da das Desktop bei jedem Programmstart das DESKTOP.INF selbst mit shel_put ĂŒberschreibt und nur mit shel_get liest, wenn das Desktop nach Beendigung des anderen Programms wieder gestartet wird.
Hier findet sich gleich noch eine Anwendung der ebenfalls wenig benutzten AES-Funktion form_error. Diese Funktion bekommt einen PC-DOS-Fehlercode ĂŒbergeben und gibt daraufhin eine (allerdings nicht immer ganz passende) Alert-Box aus. Mehr Informationen zu form_error finden Sie in [4] und [2],
Es erweist sich manchmal als sehr praktisch, wenn man auch bei programmeigenen Fehlern mit GEMDOS-Fehlercodes arbeitet und die Fehlercodes von GEMDOS-Aufrufen (insbesondere Dateioperationen) âaufhebtâ, um sie spĂ€ter an eine Routine wie alrt_tos weiterzugeben. alrt_tos rechnet die GEMDOS-Fehlercodes in PC-DOS-Codes um und ruft damit form_error auf. Somit spart man sich so manche eigene Alert-Box.
Anregungen
Hier noch einige Anregungen fĂŒr Sie, falls Sie Lust haben, selbst ein wenig mit shel_get und shel_put herumzuspielen. Das Programm kann z.B. dahingehend verĂ€ndert werden, daĂ bei jedem Anklicken anal_dskinf aufgerufen wird. Dies ist besonders bei Programmen praktisch, die den Bildschirm invertieren oder die Farbpalette umschalten und âvergessenâ, dies rĂŒckgĂ€ngig zu machen.
Eine andere Anwendung von shel_get könnte darin bestehen, sich Informationen ĂŒber die auf dem Desktop angemeldeten Laufwerke zu verschaffen. Gerade fĂŒr Programme mit eigenen Laufwerkssymbolen bestĂŒnde somit die Möglichkeit, deren Position und Beschriftung aus dem DESKTOP.INF zu ĂŒbernehmen.
Auch wĂ€re ein Programm denkbar, das zwischen verschiedenen Grundeinstellungen des Desktops auswĂ€hlen lĂ€Ăt. Oder wie wĂ€re es mit einem Programm, das Laufwerkssymbole selbsttĂ€tig anmelden kann? Ihrer Phantasie sind kaum Grenzen gesetzt.
Literatur:
[1] O.T.Dietz: âDem Desktop auf der Spurâ, ST-Computer 10/86
[2] Jankowski/Reschke/Rabich: âATARI ST Profibuchâ, 5.Auflage, Sybex 1988
[3] Abraham/Englisch/GĂŒnther/Szczepanowski: âATARI ST GEMâ, Data Becker 1987
[4] A.Esser: âAuf der Schwelle zum Lichtâ, ST-Computer 2/88
/* Ăbernahme d.i.DESKTOP.INF gespeich. Parameter fĂŒr RS232-Schnittstelle, Drucker und "Kontrollfeld"
23.8.1987, 28.2.1989
(c) A. Esser
entwickelt mit MEGAMAX C/LASER C
direkt lauffÀhig unter LASER C und TURBO C
*/
#ifdef __TURBOC__
#include <tos.h> /* fĂŒr TURBO C */
#include <aes.h>
#define appl_init() gl_apid=appl_init()
int gl_apid;
int rd_hex(char *p); /* Prototypen */
void set_rs232(char *p);
void set_prt(char *p);
void set_cntrl(char *p);
char *get_dskinf(void);
int anal_dskinf(void);
int do_work(char *p);
void alrt_tos(int err);
#else
#include <osbind.h> /* fĂŒr LASER C */
#include <gemdefs.h>
extern int gl_apid;
#endif
#define NIL 0L
#define TRUE 1
#define FALSE 0
#define E_OK 0 /* GEMDOS-RĂŒckgabewert f.OK */
#define ENSMEM -39 /* GEMDOS-Fehler: kein Speicher mehr */
#define conterm ((char *)0x484) /*Systemvariable 'conterm' */
#define MAXINF 1024 /* maximal erlaubte LĂ€nge des DESKTOP.INF */
#define CTRL_Z 26 /* Endekennung */
#define ACCNAME " DESKTOP.INF" /* Menu-Eintrag */
/* 2-stelliges Hex-ASCII nach int konvertieren */
int rd_hex(p)
register char *p; /* Zeiger auf 2 Hex-ASCII-Ziffern */
{ register int num;
register int dig;
if ((dig = *p++ - '0') > 9)
dig -= 7;
num = dig << 4;
if ((dig = *p++ - '0') > 9)
dig -= 7;
return (num | dig);
}
/* RS232-Parameter n.DESKTOP.INF-Einst.setzen */
void set_rs232(p)
register char *p; /* Zeiger in DESKTOP.INF */
{ int baud,ctrl,ucr;
/* fĂŒr Baud-Raten 9600,4800,1200,300,19200,3600,2400,2000,
1800,600,200,150,134,110,75,50*/
static int brate[] = { 1,2,7,9,0,3,4,5,6,8,10,11,12,13,14,15 };
/* f.ParitÀt: keine, ungerade, gerade,(keine)*/
static int parity[] = { 0,4,6,0 };
ucr = (int)((unsigned long) Rsconf(-1,-1,-1,-1,-1,-1) >> 24) & 0x99;
p++; /* Voll-/Halb-Duplex ignorieren*/
baud = brate[*p++ & 15]; /* Baud-Rate */
ucr |= parity[*p++ & 3]; /* Parity */
ucr |= (*p++ & 3) << 5; /* Data-Bits */
ctrl = *p++ & 3; /* Handshake */
/* Bit8-An/Aus ignorieren */
Rsconf(baud,Ctrl,ucr,-1,-1,-1); /*alles setzen*/
}
/* Drucker-Konfig. n. DESKTOP.INF-Einst.setzen */
void set_prt(p)
char *p; /* Zeiger in DESKTOP.INF */
{ register int i;
register int konf;
for (konf=0, i=0; i<6; i++) /*Konfig.-Bits */
konf |= (*p++ & 1) << i; /*zusammenrechnen*/
Setprt(konf); /* Konfiguration setzen */
}
/* Kontrollfeld-Parameter nach DESKTOP.INF-Einstellung setzen */
void set_cntrl(p)
register char *p; /* Zeiger in DESKTOP.INF */
{ register int no,i;
int col[16]; /* Farbpalette */
void *ssp; /* Zwischenspeicher fĂŒr Supervisor Stack Pointer */
int res,ix;
register int c;
static char col_ix[2][16]
= { {0,15,1,2,4,6,3,5,7,8,9,10,12,14,11,13}, /* fĂŒr niedrige Auflösung */
{0,3,1,2,4,5,6,7,8,9,10,11,12,13,14,15}}; /* fĂŒr mittlere Auflösung */
res = Getrez(); /* Bildschirm-Auflösung */
for (no=0; no<16; no++) /* Farben der Farbpalette holen */
{ for (c=0, i=2; i>=0; i--) /* RGB-Anteile zusammenrechnen */
c |= (int)(*p++ & 7) << (i * 4);
ix = (res == 0 || res == 1)?col_ix[res][no]: no;
col[ix] = c;
}
Setpalette(col); /* Farbpalette setzen */
evnt_dclick(*p++ & 7, TRUE); /* Maus-Klick-Speed setzen */
ssp = (void *)Super(NIL); /*Supervisor-Mode*/
/* Tastatur-Klick und Glock an-/ausschalten*/
*conterm = (*conterm & ~5) | (*p++ & 1) | ((*p++& 1) << 2);
Super(ssp); /* zurĂŒck in den User-Mode */
Kbrate(rd_hex(p),rd_hex(p+2)); /* Tastatur-Repeat */
Vsync(); /* warten bis Farbpalette gesetzt*/
}
/* Kopie des DESKTOP.INF holen */
char *get_dskinf()
{ char *p;
if ((p = (char *)Malloc((long)MAXINF)) != NIL)
shel_get(p,MAXINF); /* DESKTOP.INF vom AES abholen */
return p;
}
/* DESKTOP.INF nach '#'-EintrÀgen durchsuchen */
int anal_dskinf()
{ char *infb; /* Puffer fĂŒr DESKTOP.INF */
register char *p;
if ((p = infb = get_dskinf()) == NIL)
return ENSMEM; /* kein Speicher mehr */
shel_get(p,MAXINF); /* DESKTOP.INF vom AES abholen */
p[MAXINF-1] = 0; /* sicherheitshalber... */
while (*p && *p != CTRL_Z)
{ if (*p++ == '#') /* Eintrag gefunden */
switch (*p++) /* Typ untersuchen */
{ case 'a':
set_rs232(p); /* RS232-Konfiguration */
break;
case 'b':
set_prt(p); /* Drucker-Konfiguration */
break;
case 'c':
set_cntrl(p); /* Kontroll-Feld */
break;
}
}
Mfree(infb); /* Puffer freigeben */
return E_OK; /* alles ok */
}
/* Alert-Box fĂŒr GEMDOS-Fehler 'err' ausgeben */
void alrt_tos(err)
int err;
{ if (err < -32)
form_error(-31-err); /* auf PC-DOS-Fehlercode umrechnen */
}
/* Aktion bei Aufruf des Accessories */
int do_work(dskinf)
char *dskinf;
{
if (dskinf != NIL)
shel_put(dskinf,MAXINF); /* Original-Info zurĂŒckholen */
return anal_dskinf(); /*Parameter ĂŒbernehmen*/
}
/* Haupt-Programm */
void main()
{ int err; /* GEMDOS-Fehlermeldung */
int msg[8]; /* Puffer fĂŒr AES message */
int menu_id; /* Menu-Kennung */
char *org_inf; /* Original-DESKTOP . INF */
appl_init(); /* beim AES anmelden */
menu_id = menu_register(gl_apid,ACCNAME); /* ins Menu eintragen */
if ((org_inf = get_dskinf()) == NIL) /* Original-DESKTOP.INF merken */
err = ENSMEM; /*nicht genug Speicher*/
else
err = anal_dskinf(); /* Parameter ĂŒbernehmen */
while(1)
{ if (err != E_OK)
{ alrt_tos(err); /* Fehler als GEM-Alert ausgeben */
err = E_OK;
}
evnt_mesag(msg); /* warten bis Accessory angeklickt */
if (msg[0] == AC_OPEN) /* nur AC_OPEN berĂŒcksichtigen */
if (msg[4] == menu_id) /* fĂŒr eigenes Accessory */
err = do_work(org_inf);
}
}
DSKINF-Programm