#include <exec/types.h>
#include <intuition/intuition.h>
#include <stdio.h>

struct IntuiMessage *GetMsg();
struct Window	    *OpenWindow();

char* HelpFile = "cdshelp";

#define  BUFLEN  75

#define  DISP_X  600
#define  DISP_Y  240
#define  DISPGW  72

static SHORT  NextPagePairs[] = { 0,0,DISPGW+1,0,DISPGW+1,9,0,9,0,0 };

static struct Border    NextPageBorder = {-1,-1,1,0,JAM2,5,NextPagePairs,0L};

static struct IntuiText NextPageStr = { 1,0,JAM2,0,0,0L,(UBYTE*)" Beenden ",0L};

static struct Gadget    NextPageGadget = { 0L,(DISP_X-DISPGW-2)/2,DISP_Y-16,
                                   DISPGW,8,
                                   GADGHCOMP,
                                   GADGIMMEDIATE|RELVERIFY,BOOLGADGET,
                                   (APTR)&NextPageBorder,0L,
                                   &NextPageStr,0L,0L,1,0L};

static struct NewWindow DispW= {20,11,
                         DISP_X,DISP_Y,5,1,
                         REFRESHWINDOW|GADGETUP|GADGETDOWN|ACTIVEWINDOW,
                         ACTIVATE,&NextPageGadget,0L,
                         0L,
                         0L,0L,
                         0,0,0,0,
                         CUSTOMSCREEN};

static struct IntuiMessage *IntuiMsg;

void DoHelp(S)

struct Screen *S;

{
  FILE *f;
  ULONG          Class;
  USHORT         Code;
  BOOL           Ende;
  struct Window *W;
  int            numlines,first,len;
  char		 Buffer[BUFLEN];
  
  DispW.Screen = S;
    
  if (!(f = fopen(HelpFile,"r")))
     {
      return();
     }

  if (!(W = OpenWindow(&DispW)))
     {
      return();
     }
  
  numlines       = 0;
  first		 = 0;
 
  SetPensAndMask(W,0x0f,1,0);
  SetDrMd(W->RPort,(ULONG)JAM1);
  
  do {
   fgets(Buffer,BUFLEN,f);
   Move(W->RPort,4L,(LONG)(10 * (numlines-first) + 13));
   len = strlen(Buffer);
   if (len > 0)
      len--;
   Text(W->RPort,Buffer,(LONG)(len));
   numlines ++;
  } while (((numlines-first) < 24) && (!feof(f)));
  
  first = numlines;
  
  Ende = FALSE;
  
  while (!Ende)
  {
   IntuiMsg = (struct IntuiMessage*)GetMsg(W->UserPort);
         if (IntuiMsg != 0L)
            {
            Class = IntuiMsg->Class;
            Code  = IntuiMsg->Code;
            ReplyMsg(IntuiMsg);
            switch (Class) {
               case GADGETUP:
               case CLOSEWINDOW  : Ende  = TRUE;
               		           break;
               }
          }
 } 
  
  CloseWindow(W);
  fclose(f);
}
