home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 030.lha / Ogre / Help.c < prev    next >
C/C++ Source or Header  |  1986-11-10  |  3KB  |  142 lines

  1. #include <exec/types.h>
  2. #include <exec/io.h>
  3. #include <exec/exec.h>
  4. #include <libraries/dos.h>
  5. #include <libraries/dosextens.h>
  6. #include <devices/console.h>
  7. #include <devices/keymap.h>
  8. #include <intuition/intuition.h>
  9. #include <lattice/stdio.h>
  10.  
  11.  
  12. struct NewWindow hw =
  13. {
  14.             0, 0, 640, 200, 3, 1, NULL, ACTIVATE,
  15.             0, NULL,"Ogre Help",  NULL, NULL, 100, 45,
  16.             640, 200, CUSTOMSCREEN
  17. };
  18.  
  19. #define FULLPAGE  21
  20. #define NUMCHAR   100
  21.  
  22. extern struct Screen *scrn;
  23. struct IOStdReq *HelpMsg, *MoreMsg;
  24. struct MsgPort *HelpPort, *MorePort;
  25. struct Window *helpwin;
  26.  
  27. char fname[] = "Ogre:Instructions";
  28.  
  29. char buf[NUMCHAR];
  30. UBYTE response;
  31.  
  32.  
  33. /* Open a window and a console for printing game instructions, and
  34.  * open the instructions file.  Note that the game volume name MUST
  35.  * be "Ogre" for this to work.
  36.  */
  37.  
  38. get_help()
  39. {
  40.    FILE *fp, *fopen();
  41.    int error;
  42.  
  43.    /* read, write ports for the help window */
  44.       /* Can't open it. Complain. */
  45.  
  46.  
  47.    HelpPort = CreatePort("con2.write",0);
  48.    if (HelpPort == NULL)
  49.       return(-1);
  50.  
  51.    HelpMsg = CreateStdIO(HelpPort);
  52.    if (HelpMsg == NULL)
  53.       return(-1);
  54.  
  55.    MorePort = CreatePort("con2.read",0);
  56.    if (MorePort == NULL)
  57.       return(-2);
  58.  
  59.    MoreMsg = CreateStdIO(MorePort);
  60.    if (MoreMsg == NULL)
  61.       return(-2);
  62.  
  63.    hw.Screen = scrn;
  64.  
  65.    helpwin = (struct Window *) OpenWindow(&hw);
  66.    if (helpwin == NULL)
  67.       return(-1);
  68.  
  69.    error = OpenConsole(HelpMsg, MoreMsg, helpwin);
  70.    if (error != 0)
  71.    {
  72.       end_help();
  73.       return(-3);
  74.    }
  75.  
  76.    QueueRead(MoreMsg, &response);
  77.  
  78.    /* open the instructions file */
  79.     if (Lock(fname, ACCESS_READ) == NULL)
  80.     {
  81.          ConPutStr(HelpMsg,
  82.            "\nCan't open Ogre:Instructions. Check your volume name.\n");
  83.          Delay(250);
  84.          error = end_help();
  85.          return(-4);
  86.     }
  87.  
  88.    fp = fopen(fname,"r");
  89.    if (fp == NULL)
  90.    {
  91.       return(-4);
  92.    }
  93.  
  94.    put_help(fp);
  95.    error = end_help();
  96.    close(fp);
  97.    return(error);
  98. }
  99.  
  100.  
  101. /* cleanup and exit
  102.  */
  103.  
  104. int end_help()
  105. {
  106.    int error;
  107.  
  108.    DeletePort(HelpPort);
  109.    DeleteStdIO(HelpMsg);
  110.    DeletePort(MorePort);
  111.    DeleteStdIO(MoreMsg);
  112.    error = CloseWindow(helpwin);
  113.    return(error);
  114. }
  115.  
  116. /* write help file to window and read for more */
  117.  
  118.  
  119. put_help(fp)
  120. FILE *fp;
  121. {
  122.    int nomore = 0, numlines = 0;
  123.  
  124.    while ((nomore = fgets(&buf[0], NUMCHAR, fp)) != NULL)
  125.    {
  126.       ConPutStr(HelpMsg, buf);
  127.       numlines += 1;
  128.  
  129.       /* when a full page has been written, pause for a keystroke */
  130.  
  131.       if (numlines == FULLPAGE)
  132.       {
  133.          response = ConGetChar(MorePort, MoreMsg, &response);
  134.          numlines = 0;
  135.       }
  136.    }
  137.    /* get one last key to clear the remaining text from the screen */
  138.  
  139.    response = ConGetChar(MorePort, MoreMsg, &response);
  140. }
  141.  
  142.