home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / gchsrc31.lzh / HELP.CC < prev    next >
C/C++ Source or Header  |  1992-04-27  |  2KB  |  97 lines

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  This file is part of the Atari graphical interface for GNU Chess,
  4. //  and is Copyright 1992 by Warwick W. Allison.
  5. //
  6. //  You are free to copy and modify these sources, provided you acknowledge
  7. //  the origin by retaining this notice, and adhere to the conditions
  8. //  of the CHESS General Public License described in the main chess file
  9. //  gnuchess.cc.
  10. //
  11. //////////////////////////////////////////////////////////////////////////////
  12.  
  13. #include <DoubleBuffer.h>
  14. #include <bool.h>
  15. #include <osbind.h>
  16. #include <vt52.h>
  17.  
  18. char* const DefaultText="";
  19. const int HelpX=128;
  20. const int HelpY=192;
  21. const int HelpW=192;
  22. const int HelpH=8;
  23.  
  24. class HelpBox
  25. {
  26. public:
  27.     HelpBox(class HelpBox *Next,int x,int y, int w, int h, char* const HelpText);
  28.     char* const At(int x,int y);
  29.  
  30. private:
  31.     int X,Y,W,H;
  32.     char* const Text;
  33.     class HelpBox *Next;
  34. };
  35.  
  36. HelpBox::HelpBox(class HelpBox *next,int x,int y, int w, int h, char* const HelpText) :
  37.         Next(next),X(x),Y(y),W(w),H(h),Text(HelpText)
  38. { }
  39.  
  40. char* const HelpBox::At(int x,int y)
  41. {
  42.     if (x>=X && y>=Y && x<X+W && y<Y+H) return Text;
  43.     if (!Next) return DefaultText;
  44.     return Next->At(x,y);
  45. }
  46.  
  47. static HelpBox* HelpBoxes=0;
  48.  
  49. void AddHelp(int x,int y, int w, int h, char* Help)
  50. {
  51.     HelpBoxes=new HelpBox(HelpBoxes,x,y,w,h,Help);
  52. }
  53.  
  54. static char *OldText=0;
  55. static bool HelpShown[2];
  56.  
  57. void ShowContextHelp(int x, int y)
  58. {
  59.     char* const Text=HelpBoxes->At(x,y);
  60.  
  61.     if (Text!=OldText) {
  62.         OldText=Text;
  63.  
  64.         HelpShown[0]=FALSE;
  65.         HelpShown[1]=FALSE;
  66.     }
  67.  
  68.     if (!HelpShown[Pages->Pulse]) {
  69.         HelpShown[Pages->Pulse]=TRUE;
  70.         Cconws(HOME);
  71.         Cconws(DEL_EOL);
  72.         Cconws(Text);
  73.         long *From=(long*)Logbase();
  74.         long *To=(long*)Pages->Location()+HelpX/16*2+HelpY*40;
  75.  
  76.         for (int sy=0; sy<HelpH; sy++) {
  77.             for (int sx=0; sx<HelpW/16*2; sx++)
  78.                 To[sx]=From[sx];
  79.             To+=40;
  80.             From+=40;
  81.         }
  82.     }
  83. }
  84.  
  85. void NoteHelpChanged(char* const Help)
  86. {
  87.     if (Help==OldText) {
  88.         HelpShown[0]=FALSE;
  89.         HelpShown[1]=FALSE;
  90.     }
  91. }
  92.  
  93. void NoHelp()
  94. {
  95.     ShowContextHelp(-1,-1);
  96. }
  97.