home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************
- * *
- * Filename : Farben.c *
- * *
- ****************************************************************
- * *
- * Comment : Dieses File beinhaltet alle nötigen Routinen *
- * für das Handling der Farben. *
- * eigene Fehlerbehandlung. *
- * *
- * Folgende Routinen sind enthalten: *
- * *
- * - SetzeFarben() *
- * - HoleFarben() *
- * - LadeFarben() *
- * - FarbenLaden() *
- * - FarbenSichern() *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.07.89 *
- * *
- * Bugs : keine bekanneten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.07.89 *
- * *
- ****************************************************************/
-
- /****************************************************************
- * *
- * allgemeine Includedateien *
- * *
- ****************************************************************/
-
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <fcntl.h>
- #include <exec/alerts.h>
- #include <exec/types.h>
- #include <exec/io.h>
- #include <intuition/intuition.h>
- #include <intuition/intuitionbase.h>
- #include <libraries/dos.h>
- #include <exec/libraries.h>
- #include <libraries/dosextens.h>
- #include <libraries/reqbase.h>
- #include <proto/reqproto.h>
-
- /****************************************************************
- * *
- * programmspezifische Includedateien *
- * *
- ****************************************************************/
-
- #include "Definitions.h" /* allgemeine Definitionen */
- #include "Farben.h" /* def. FarbenFilestruktur */
-
- /****************************************************************
- * *
- * globale Definitionen *
- * *
- ****************************************************************/
-
- /****************************************************************
- * Definition der Standartfarben inkl. Fileheader *
- * Die Struktur ist kompatibel zum IFF Format von EA *
- * Diese Definition kann kopiert und direkt *
- * gespeichert werden sowie als Vergleichsobjekt *
- * dienen. *
- ****************************************************************/
-
- struct FarbenFile /* Strukturtyp */
- deffarben = /* Variablenname */
- {
- FORM, /* IFF Header */
- (long)sizeof(struct FarbenFile),
- /* Grösse der Datei */
- ID_ILBM, /* IFF ID */
- ID_CMAP, /* IFF Kennzeichnung */
- ( long )FARBENANZAHL<<2, /* Anzahl Farbregister * 4 */
- 0x0,0x0,0x0, /* Farbregister 0 Schwarz */
- 0xD,0xD,0xD, /* Farbregister 1 Weiss */
- #if BITPLANE > 1
- 0x0,0x7,0xD, /* Farbregister 2 Orange */
- 0xF,0x8,0x3, /* Farbregister 3 Hellblau */
- #if BITPLANE > 2
- 0xF,0x0,0x0, /* Farbregister 4 Rot */
- 0x0,0xF,0x0, /* Farbregister 5 Grün */
- 0x0,0x0,0xF, /* Farbregister 6 Blau */
- 0x8,0x8,0x8 /* Farbregister 7 Grau */
- #endif
- #endif
- };
-
- /****************************************************************
- * *
- * externe Definitionen *
- * *
- ****************************************************************/
-
- extern struct ReqBase *ReqBase;
- extern struct FileRequester mfr;
- extern struct ViewPort *Vp; /* " */
- extern char filename[]; /* in Main.c */
- extern char laden[];
- extern char sichern[];
-
- /****************************************************************
- * *
- * Funktion : SetzeFarben() *
- * *
- ****************************************************************
- * *
- * Input : Pointer auf FarbenFile *
- * *
- * Output : None *
- * *
- ****************************************************************
- * *
- * Comment : Diese Routine setzt die Farben die in dem *
- * Farbenfile angegeben sind. Die Routine sorgt für *
- * ihre eigene Fehlerbehandlung. *
- * Die globale Variable Vp ( ViewPort ) muss *
- * initialisiert sein. *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.07.89 *
- * *
- * Bugs : keine bekanneten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.07.89 *
- * *
- ****************************************************************/
-
- void SetzeFarben (file)
- struct FarbenFile *file; /* Inputpointer Farbenfile */
- {
- int i; /* globaler Zähler */
- for (i=0;i<FARBENANZAHL;i++) /* Setze alle Farbregister */
- SetRGB4(Vp,i,file->colorregister[i].red,
- file->colorregister[i].green,
- file->colorregister[i].blue);
- }
-
- /****************************************************************
- * *
- * Funktion : HoleFarben() *
- * *
- ****************************************************************
- * *
- * Input : None *
- * *
- * Output : None *
- * *
- ****************************************************************
- * *
- * Comment : Diese Routine holt die aktuellen Farben, *
- * speichert sie in der deffarben Struktur. Diese *
- * Routine hat eine eigene Fehlerbehandlung. *
- * Die globale Variable Vp ( ViewPort ) muss *
- * initialisiert sein. *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.07.89 *
- * *
- * Bugs : keine bekanneten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.07.89 *
- * *
- ****************************************************************/
-
- void HoleFarben()
- {
- int i, /* globaler Zähler */
- rgb; /* Speicher für RGB */
- for (i=0;i<FARBENANZAHL;i++) /* hole alle Farbregister */
- {
- rgb=GetRGB4(Vp->ColorMap,i);
- /* zwischenspeichern des */
- /* Registerwertes */
- /* Aufbau : 0x0RGB */
- /* setzen der Werte in die */
- /* IFF-strukturierte */
- /* defaultvariablen */
- deffarben.colorregister[i].red = ROT(rgb);
- deffarben.colorregister[i].green = GRUEN(rgb);
- deffarben.colorregister[i].blue = BLAU(rgb);
- }
- }
-
- /****************************************************************
- * *
- * Funktion : LadeFarben() *
- * *
- ****************************************************************
- * *
- * Input : Adresse auf Filenamen *
- * *
- * Output : Integer für laden *
- * *
- ****************************************************************
- * *
- * Comment : Diese Routine lädt ein IFF ColorMap in den *
- * Speicher. *
- * Der Integerwert gibt den erfolg des ladens an. *
- * Wenn Return = NULL dann war das laden *
- * erfolgreich. *
- * Sonst wird ein Wert >0 zurückgegeben. Der *
- * Rückgabewert sagt nichts über den Fehler aus. *
- * Wenn es ein ColorMap File ist, werden die *
- * geladenen Farben auf dem Screen gesetzt. *
- * Diese Routine hat keine eigene Fehlerbehandlung. *
- * Mögliche auftrettende Fehler : *
- * -> Speicherallozierung *
- * -> öffnen der Datei *
- * -> lesen der Datei *
- * -> schliessen der Datei *
- * -> keine IFF-Datei *
- * -> Speicherdeallozierung *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.07.89 *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.07.89 *
- * *
- ****************************************************************/
-
- int LadeFarben(filename)
- char *filename; /* Input Filename */
- {
- struct FarbenFile *file;
- int fnr, /* Filenummer */
- erfolg, /* allgemeiner Rückgabewert */
- count, /* Bytezähler Rückgabewert */
- error = NULL; /* Fehlerzähler */
-
- file = (struct FarbenFile *)malloc(sizeof(struct FarbenFile));
- if (file)
- {
- fnr=open(filename,O_RDONLY);
- if (fnr == -1)
- error ++;
- else
- {
- count = read(fnr,file,sizeof(struct FarbenFile));
- if (count != sizeof(struct FarbenFile))
- error ++;
- erfolg = close (fnr); /* schliessen der Datei */
- if (erfolg) /* Fehler beim schliessen */
- error ++; /* Ja, Error setzen */
- if ((file->kopf != FORM)||
- (file->id != ID_ILBM)||
- (file->colormapheader != ID_CMAP))
- error ++; /* kein IFF Error setzen */
- if (file->anzahl>>2 < FARBENANZAHL)
- error ++; /* Nicht genug Farben */
- if (!error) /* wenn alles ohne Fehler */
- SetzeFarben(file); /* setzen der Farben */
- }
- free(file); /* Erfolgreich : erfolg=0 */
- }
- else /* kein Speicher bekommen */
- error ++; /* Fehler setzen! */
- return (error); /* Return mit Summe aller */
- } /* Fehler. */
-
- /****************************************************************
- * *
- * Funktion : FarbenLaden() *
- * *
- ****************************************************************
- * *
- * Input : None *
- * *
- * Output : None *
- * *
- ****************************************************************
- * *
- * Comment : Es wird nach einem Dateinamen gefragt. *
- * Diese Datei wird in den Speicher geladen. *
- * Danach wird die Datei auf IFF ( Interchange File *
- * Format ) untersucht und entsprechend dem *
- * positiven Resultat geladen. *
- * Diese Routine hat eine eigene Fehlerbehandlung. *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files *
- * 26.06.89 *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 26.06.89 *
- * *
- ****************************************************************/
-
- void FarbenLaden()
- {
- int erfolg;
-
- mfr.Title = "Laden";
- erfolg = FileRequester(&mfr);
- if (erfolg)
- {
- erfolg = LadeFarben(filename);
- if (erfolg) SimpleRequest(laden);
- }
- }
-
-
- /****************************************************************
- * *
- * Funktion : FarbenSichern() *
- * *
- ****************************************************************
- * *
- * Input : None *
- * *
- * Output : None *
- * *
- ****************************************************************
- * *
- * Comment : Die eingestelleten Farben in ColorMap werden als *
- * IFF ( Interchange File Format ) gesichert. Die *
- * auftrettenden Fehler werden addiert, und erst am *
- * Schluss ausgewertet. *
- * Diese Routine hat eine eigene Fehlerbehandlung. *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 26.06.89 *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 26.06.89 *
- * *
- ****************************************************************/
-
- void FarbenSichern()
- {
- int erfolg,
- fnr,
- count,
- error = NULL;
-
- mfr.Title = "Sichern unter ..";
- erfolg = FileRequester(&mfr);
- if (erfolg)
- {
- HoleFarben();
- fnr = open(filename,O_WRONLY+O_CREAT);
- if (fnr == -1)
- error ++;
- else
- {
- count = write(fnr,&deffarben,sizeof(struct FarbenFile));
- if (count != sizeof(struct FarbenFile))
- error ++;
- erfolg = close(fnr);
- if (erfolg)
- error ++;
- }
- if (error) SimpleRequest(sichern);
- }
- }
-