home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************
- * *
- * Filename : Help.c *
- * *
- *****************************************************************
- * *
- * Comment : Diese File beinhaltet alle Funtionen für die *
- * Darstellung des Helptextes. *
- * *
- * Die Helpfunktion hat ein eigenes Window welches *
- * zuerst geöffnet wird. *
- * Danach wird die Umgebungsvariable Fplot.Hlp *
- * abgefragt, nach dem Standort des Helpfiles. *
- * Dieser wird dann geladen und die ersten Zeilen *
- * werden dargestellt. *
- * Über die verschiedenen Schalter kann man die *
- * nächsten Zeilen darstellen. *
- * *
- * Der Helptext muss eine ASCII-Datei sein mit *
- * einer max. Zeilenlänge von 75 Charaktern. Wenn *
- * die Zeile grösser ist, wird der Rest auf die *
- * nächste Zeile geschrieben. *
- * Es werden max. 1500 Zeilen des Helptextes *
- * geladen. *
- * *
- * Rev : V1.1 *
- * *
- * History : V1.0 erstellen dieses Files 01.09.89 *
- * V1.1 korr. eines Fehlers in OpenHelp() 01.09.89 *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.09.89 *
- * *
- ****************************************************************/
-
- /****************************************************************
- * *
- * allgemeine Includedateien *
- * *
- ****************************************************************/
-
- #include <ctype.h>
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <intuition/intuitionbase.h>
- #include <mylib/mylib.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <dos.h>
- #include <graphics/gfxbase.h>
- #include <libraries/reqbase.h>
- #include <proto/reqproto.h>
-
- /****************************************************************
- * *
- * programmspezifische Includedateien *
- * *
- ****************************************************************/
-
- #include "Definitions.h" /* allgemeine Definitionen */
- #include "Help.h" /* Help Definitionen */
- #include "Function.h"
-
- /****************************************************************
- * *
- * externe Definitionen *
- * *
- ****************************************************************/
-
- extern struct ReqBase *ReqBase;
- extern struct Screen *Sc; /* Screenpointer */
- extern struct Window *Mw; /* MainWindowpointer */
- extern struct NewWindow helpwindow; /* Referenz in Window.h */
- extern USHORT chip sprite1[]; /* Referenz in Pointer.h */
- extern int SCREENHOEHE; /* Screenhoehe */
-
- extern char helpload[]; /* Referenz in texte.h */
- extern char abbruch[]; /* " */
- extern char windowtext[]; /* " */
- extern char speicher[]; /* " */
-
- /****************************************************************
- * *
- * globale Definitionen *
- * *
- ****************************************************************/
-
- static struct Window *Hw; /* Windowpointer */
- static struct RastPort *HRp; /* Rasport Helpwindow */
- static char *textarray[MAXLINE]; /* Pointerarray of char */
- static int screenzeilen; /* Anzahl Zeilen pro screen */
-
- /****************************************************************
- * *
- * Funktion : OpenHelp() *
- * *
- *****************************************************************
- * *
- * Input : None *
- * *
- * Output : int Zeilen *
- * Zeilen ist die Anzahl geladener Zeilen vom *
- * Datenfile. *
- * Wenn Zeilen == NULL dann ist ein Fehler *
- * beim laden aufgetretten. *
- * *
- *****************************************************************
- * *
- * Comment : Diese Routine öffnet den Helpfile. Der Name *
- * wird in der Umgebungsvariable Fplot.Hlp *
- * definiert. *
- * Wenn fopen erfolgreich, werden alle Zeilen *
- * geladen, bis MAXLINE oder EOF erreicht. *
- * Danach wird Fplot.Hlp wieder geschlossen und *
- * mit den gelesenen Zeilen in die aufrufende *
- * Routine zurück verzweigt. *
- * *
- * Rev : V1.1 *
- * *
- * History : V1.0 erstellen dieses Files 01.09.89 *
- * V1.1 korr. beim einlesen von Fplot.help *
- * bis und mit MAXLINE überschreiben *
- * des Speichers 01.09.89 *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.09.89 *
- * *
- ****************************************************************/
-
- int OpenHelp()
- {
- char *helpfile, /* Pointer auf FileNamen */
- *buffer, /* Pointer auf Strings */
- line[LINESIZE]; /* Inputzeile vom File */
- FILE *help; /* Filepointer */
-
- int erfolg, /* genereller Rückgabewert */
- zeilen=FALSE, /* Funktionrückgabewert */
- laenge; /* Länge vom Inputstring */
-
- helpfile = getenv(helpname); /* Hole FileNamen */
- if (helpfile) /* Ist Namen vorhanden ? */
- { /* Ja */
- help = fopen(helpfile,"r"); /* File öffnen zum lesen */
- if (help)
- {
- while((fgets(line,LINESIZE,help)!= NULL)&&(zeilen < MAXLINE))
- {
- laenge = strlen(line);
- buffer = malloc (laenge);
- textarray[zeilen++]=buffer;
- erfolg = stccpy(buffer,line,laenge);
- }
- fclose(help);
- }
- }
- return (zeilen); /* return mit Zeilen */
- }
-
- /****************************************************************
- * *
- * Funktion : CloseHelp() *
- * *
- *****************************************************************
- * *
- * Input : int zeilen *
- * line ist die Anzahl eingelesener Zeilen *
- * *
- * Output : Boolean *
- * TRUE -> keine Fehler *
- * FALSE -> Fehler bei Speicherfreigabe *
- * *
- *****************************************************************
- * *
- * Comment : Diese Routine gibt den Speicher für den Helptext *
- * wieder an das System zurück. *
- * Die auftrettenden Fehler bei der Speicher- *
- * rückgabe werden aufaddiert und am Schluss *
- * ausgewertet. *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.09.89 *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.09.89 *
- * *
- ****************************************************************/
-
- void CloseHelp(zeilen)
- int zeilen; /* Anzahl gelesener Zeilen */
- {
- int i; /* Schleifenzähler */
-
- for (i=0;i<zeilen;i++) /* Für alle Felder */
- free(textarray[i]); /* Speicher freigeben und */
- }
-
- /****************************************************************
- * *
- * Funktion : PrintPage() *
- * *
- *****************************************************************
- * *
- * Input : int zeile Startfeld ab dem geschrieben *
- * werden soll. *
- * *
- * Output : None *
- * *
- *****************************************************************
- * *
- * Comment : Diese Routine schreibt eine Bildschirmseite ab *
- * der Position von [zeile]. *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.09.89 *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.09.89 *
- * *
- ****************************************************************/
-
- void PrintPage(zeile)
- int zeile; /* Startwert vom textarray */
- {
- int i, /* Schleifenzähler */
- y=SOT+TEXTSIZE/2; /* Konstante */
-
- Rechteck( HRp, /* Rechteck Rastport */
- 2, /* Farbe */
- TEXTSIZE, /* linke Begrenzung */
- SOT, /* obere Begrenzung */
- SCREENBREITE-TEXTSIZE,
- /* untere Begrenzung */
- (screenzeilen+1)*TEXTSIZE+SOT);
- /* rechte Begrenzung */
- for ( i=0;i<screenzeilen;i++) /* alle Zeilen des Screens */
- PrintText(HRp,textarray[i+zeile],
- (SHORT)(2*TEXTSIZE),(SHORT)(i*TEXTSIZE+y),1);
- }
-
- /****************************************************************
- * *
- * Funktion : Help *
- * *
- *****************************************************************
- * *
- * Input : None *
- * *
- * Output : Boolean *
- * Boolean für Fehler die nicht selber abgefangen *
- * sind. *
- * TRUE -> kein Fehler *
- * FALSE -> Fehler *
- * *
- *****************************************************************
- * *
- * Comment : Eine Datei wird geladen und angezeigt. *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.09.89 *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.09.89 *
- * *
- ****************************************************************/
-
- int Help()
- {
- struct IntuiMessage *message;
- struct Gadget *gadmess; /* Gadget Message */
-
- int loop = TRUE,
- i = 0,
- zeilen;
-
- helpwindow.Screen = Sc; /* Init. MainWindowstruktur */
- helpwindow.Height = SCREENHOEHE;
-
- Hw = (struct Window *)OpenWindow (&helpwindow);
- if (Hw == NULL)
- {
- SimpleRequest(windowtext);
- return (TRUE);
- }
-
- HRp = Hw->RPort; /* Rastport initialisieren */
- zeilen = OpenHelp();
- screenzeilen = (SCREENHOEHE-SOT-TEXTSIZE)/TEXTSIZE;
- if (zeilen == FALSE)
- {
- SimpleRequest(helpload);
- CloseWindow ( Hw );
- return ( TRUE );
- }
- PrintPage(i);
- while (loop)
- {
- message = (struct IntuiMessage *)GetMsg(Hw->UserPort);
- if (message==NULL)
- {
- ClearPointer(Hw);
- Wait(1L << Hw->UserPort->mp_SigBit);
- continue;
- }
- gadmess = (struct Gadget *)message->IAddress;
- ReplyMsg(message);
- SetPointer(Hw,sprite1,POINTERHOEHE,POINTERBREITE,
- POINTERSPOT,POINTERSPOT);
- switch (gadmess->GadgetID)
- {
- case NEXTPAGE:
- i = i+screenzeilen;
- i = min(i,zeilen-screenzeilen-1);
- PrintPage(i);
- break;
- case CANCEL:
- loop = FALSE;
- ClearPointer(Hw);
- break;
- case PREVPAGE:
- i=i-screenzeilen;
- i=max(i,0);
- PrintPage(i);
- break;
- }
- }
- CloseHelp(zeilen);
- CloseWindow (Hw);
- return(TRUE);
- }
-