
/* ST2.c  custom message window, OS2.0 only */

#include <exec/memory.h>
#include <intuition/intuition.h>
#include <libraries/gadtools.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>

extern struct TextAttr Style;
extern APTR My_VisualInfo;

struct Requester *BlockInput();
void UnBlockInput();

struct IntuiText
ST2Text2 = {  1, 0, JAM2, 0, 32, &Style, NULL, NULL  },
ST2Text  = {  1, 0, JAM2, 0, 22, &Style, NULL, &ST2Text2  };

#define ST2_OK 61

struct NewGadget ST2_OKNG =
{  46, 52, 108, 12, NULL, &Style, ST2_OK, 0, NULL, NULL  };

void ShowText2(window, text, text2, buttontext)
struct Window *window;
UBYTE *text, *text2, *buttontext;
{
   struct IntuiMessage *imsg;
   struct Requester *BI;
   struct Window *STWindow;
   struct Gadget *gad, *glist;
   ULONG MW;
   int i;

   BI = BlockInput(window);

   if (buttontext) ST2_OKNG.ng_GadgetText = buttontext;
   else ST2_OKNG.ng_GadgetText = "  OK  ";
   ST2Text.IText = text;
   ST2Text2.IText = text2;

   for (i = 0; ST2_OKNG.ng_GadgetText[i] != 0; i++);
   MW = 8*i;
   ST2_OKNG.ng_Width = (UWORD) MW+12;
   if (IntuiTextLength(&ST2Text2) > MW) MW = IntuiTextLength(&ST2Text2);
   if (IntuiTextLength(&ST2Text) > MW) MW = IntuiTextLength(&ST2Text);
   MW += 32;
   ST2Text.LeftEdge = (UWORD) (MW - IntuiTextLength(&ST2Text)) / 2;
   ST2Text2.LeftEdge = (UWORD) (MW - IntuiTextLength(&ST2Text2)) / 2;

   ST2_OKNG.ng_VisualInfo = My_VisualInfo;
   ST2_OKNG.ng_LeftEdge = (UWORD) (MW - ST2_OKNG.ng_Width) / 2;
   gad = CreateContext(&glist);
   gad = CreateGadget(BUTTON_KIND, gad, &ST2_OKNG, TAG_END);

   STWindow = OpenWindowTags(NULL, WA_Title,     "Message",
      WA_Gadgets,   glist,      WA_AutoAdjust,    TRUE,
      WA_Top,          40,      WA_Left,           180,
      WA_Width,        MW,      WA_InnerHeight,     60,
      WA_DragBar,    TRUE,      WA_DepthGadget,   TRUE,
      WA_Activate,   TRUE,
      WA_IDCMP, BUTTONIDCMP,    TAG_END);

   PrintIText(STWindow->RPort, &ST2Text, 0L, 0L);

   if (!(imsg = GT_GetIMsg(STWindow->UserPort)))
   {
      Wait(1L << STWindow->UserPort->mp_SigBit);
   }
   GT_ReplyIMsg(imsg);
   CloseWindow(STWindow);
   FreeGadgets(glist);

   UnBlockInput(BI, window);
}
