home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / comms / network / grn1asrc.lha / requesters.c < prev    next >
C/C++ Source or Header  |  1992-05-20  |  17KB  |  611 lines

  1. #include    "defs.h"
  2.  
  3. static TATTR    topaz80 = { "topaz.font", 8, 0,0 };
  4. static VINFO    *vi;
  5.  
  6. // The 1x1 null requester that is used to disable the gadtools gadgets,
  7. // as per the flamewars on usenet:
  8. static struct Requester    req = {
  9.     0,
  10.     0,0,
  11.     1,1,
  12.     0,0,
  13.     0,
  14.     0,
  15.     0,
  16.     0,
  17.     0,
  18.     0,
  19.     0,
  20.     0,
  21. };
  22.  
  23. BOOL    GuageRequest(percent,titleText, reqText, buttonText)
  24. UWORD    percent;
  25. char    *titleText, *reqText, *buttonText;
  26. {
  27.     short        titleLen = TextLength(topazRP, titleText, strlen(titleText));
  28.     short        reqLen = TextLength(topazRP, reqText, strlen(reqText));
  29.     short        buttonLen = TextLength(topazRP, buttonText, strlen(buttonText));
  30.     static WINDOW    *reqWindow = 0;
  31.     WINDOW        *win = mainWindow;
  32.     short        width = titleLen;
  33.     short        height = topazRP->TxHeight*6 + screen->BarHeight;
  34.     static GADGET    *gList = 0, *gadget;
  35.     NEWGAD        ng;
  36.     static RPORT    *reqrp;
  37.     IMSG        *m, msg;
  38.     static UWORD    guageX,guageY,guageW,guageH;
  39.     UWORD        ww;
  40.     static BOOL    activeFlag;
  41.  
  42.     vi = GetVisualInfo(screen, TAG_DONE);
  43.     if (reqLen > width) width = reqLen;
  44.     if (buttonLen > width) width = buttonLen;
  45.     width += 10;
  46.  
  47.     if (!reqWindow) {
  48.         if (percent >= 100) return 0;
  49.         gadget = CreateContext(&gList);
  50.         if (!gadget) return 0;
  51.         
  52.         ng.ng_GadgetID = 0;
  53.         ng.ng_TextAttr = &topaz80;
  54.         ng.ng_VisualInfo = vi;
  55.         ng.ng_LeftEdge = (width-buttonLen)/2;
  56.         ng.ng_TopEdge = height-topazRP->TxHeight-6-INTERHEIGHT;
  57.         ng.ng_Width = buttonLen+6;
  58.         ng.ng_Height = topazRP->TxHeight+6;
  59.         ng.ng_GadgetText = buttonText;
  60.         ng.ng_Flags = NG_HIGHLABEL;
  61.         gadget = CreateGadget(BUTTON_KIND, gadget, &ng, GT_Underscore, ' ', TAG_DONE);
  62.         if (!gadget) {
  63.             FreeGadgets(gList);
  64.             gList = 0;
  65.             return 0;
  66.         }
  67.  
  68.         Request(&req, win);
  69.         reqWindow = OpenWindowTags(NULL, 
  70.             WA_Left,win->LeftEdge+(win->Width - width)/2,
  71.             WA_Top,win->TopEdge+(win->Height - height)/2,
  72.             WA_Width,width,
  73.             WA_Height,height,
  74.             WA_DetailPen,3,
  75.             WA_BlockPen,1,
  76.             WA_IDCMP,BUTTONIDCMP|INACTIVEWINDOW,
  77.             WA_Gadgets,gList,
  78.             WA_Title,titleText,
  79.             WA_CustomScreen,screen,
  80.             WA_SuperBitMap,0,
  81.             WA_MinWidth,30,
  82.             WA_MinHeight,30,
  83.             WA_MaxWidth,-1,
  84.             WA_MaxHeight,-1,
  85.             WA_SizeGadget,FALSE,
  86.             WA_DragBar,FALSE,
  87.             WA_DepthGadget,FALSE,
  88.             WA_CloseGadget,FALSE,
  89.             WA_Backdrop,FALSE,
  90.             WA_ReportMouse,FALSE,
  91.             WA_Borderless,FALSE,
  92.             WA_Activate,TRUE,
  93.             WA_RMBTrap,TRUE,
  94.             WA_SimpleRefresh,TRUE,
  95.             TAG_DONE
  96.         );
  97.         if (!reqWindow) {
  98.             FreeGadgets(gList);
  99.             gList = 0;
  100.             EndRequest(&req, win);
  101.             return !0;
  102.         }
  103.         activeFlag = !0;
  104.         GT_RefreshWindow(reqWindow, NULL);
  105.  
  106.         reqrp = reqWindow->RPort;
  107.         SetFont(reqrp, topaz80Font);
  108.  
  109.         SetAPen(reqrp, 2);
  110.         Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  111.         Text(reqrp, reqText, strlen(reqText));
  112.         guageH = 12;
  113.         guageW = width-16;
  114.         guageX = (width-guageW)/2;
  115.         guageY = screen->BarHeight+2+reqrp->TxHeight + 2;
  116.         DrawBevelBox(reqrp, guageX,guageY,guageW,guageH, GTBB_Recessed,TRUE, GT_VisualInfo, vi, TAG_DONE);
  117.         guageW -=4; guageH -= 3;
  118.     }
  119.     if (percent >= 100) {
  120.         CloseWindow(reqWindow);
  121.         reqWindow = 0;
  122.         FreeGadgets(gList);
  123.         gList = 0;
  124.         EndRequest(&req, win);
  125.         return 0;
  126.     }
  127.     ww = percent*guageW/100;
  128.     SetAPen(reqrp, 2);
  129.     Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  130.     Text(reqrp, reqText, strlen(reqText));
  131.     guageH = 12;
  132.     guageW = width-16;
  133.     guageX = (width-guageW)/2;
  134.     guageY = screen->BarHeight+2+reqrp->TxHeight + 2;
  135.     DrawBevelBox(reqrp, guageX,guageY,guageW,guageH, GTBB_Recessed,TRUE, GT_VisualInfo, vi, TAG_DONE);
  136.     guageW -=4; guageH -= 3;
  137.     ww = percent*guageW/100;
  138.     if (ww) {
  139.         SetAPen(reqrp,3);
  140.         RectFill(reqrp, guageX+2,guageY+1,guageX+ww+2,guageY+1+guageH);
  141.     }
  142.     while (m = GT_GetIMsg(reqWindow->UserPort)) {
  143.         msg = *m;
  144.         GT_ReplyIMsg(m);
  145.         if (msg.Class == IDCMP_GADGETUP || msg.Class == IDCMP_GADGETDOWN) {
  146.             CloseWindow(reqWindow);
  147.             reqWindow = 0;
  148.             FreeGadgets(gList);
  149.             gList = 0;
  150.             EndRequest(&req, win);
  151.             return !0;
  152.         }
  153.         else if (msg.Class == IDCMP_REFRESHWINDOW) {    
  154.             GT_BeginRefresh(reqWindow);
  155.             GT_EndRefresh(reqWindow, TRUE);
  156.         }
  157.         else if (msg.Class == IDCMP_INACTIVEWINDOW) {
  158.             activeFlag = 0;
  159.         }
  160.     }
  161.     if (!activeFlag && IntuitionBase->ActiveWindow == win) {
  162.         MoveWindowInFrontOf(reqWindow, win);
  163.         ActivateWindow(reqWindow);
  164.         activeFlag = !0;
  165.     }
  166.     return 0;
  167. }
  168.  
  169. BOOL    OneGadgetRequest(titleText, reqText, buttonText)
  170. char    *titleText, *reqText, *buttonText;
  171. {
  172.     short    titleLen = TextLength(topazRP, titleText, strlen(titleText));
  173.     short    reqLen = TextLength(topazRP, reqText, strlen(reqText));
  174.     short    buttonLen = TextLength(topazRP, buttonText, strlen(buttonText));
  175.     WINDOW    *reqWindow = 0, *win = mainWindow;
  176.     short    width = titleLen;
  177.     short    height = topazRP->TxHeight*4 + screen->BarHeight;
  178.     GADGET    *gList = 0, *gadget;
  179.     NEWGAD    ng;
  180.     RPORT    *reqrp;
  181.     IMSG    *m, msg;
  182.     BOOL    activeFlag = 0;
  183.  
  184.     vi = GetVisualInfo(screen, TAG_DONE);
  185.     if (reqLen > width) width = reqLen;
  186.     if (buttonLen > width) width = buttonLen;
  187.     width += 10;
  188.  
  189.     gadget = CreateContext(&gList);
  190.     if (!gadget) return 0;
  191.  
  192.     ng.ng_GadgetID = 0;
  193.     ng.ng_TextAttr = &topaz80;
  194.     ng.ng_VisualInfo = vi;
  195.     ng.ng_LeftEdge = (width-buttonLen)/2;
  196.     ng.ng_TopEdge = height-topazRP->TxHeight-6-INTERHEIGHT;
  197.     ng.ng_Width = buttonLen+6;
  198.     ng.ng_Height = topazRP->TxHeight+6;
  199.     ng.ng_GadgetText = buttonText;
  200.     ng.ng_Flags = NG_HIGHLABEL;
  201.     gadget = CreateGadget(BUTTON_KIND, gadget, &ng, GT_Underscore, '_', TAG_DONE);
  202.     if (!gadget) {
  203.         FreeGadgets(gList);
  204.         return 0;
  205.     }
  206.  
  207.     Request(&req, win);
  208.     reqWindow = OpenWindowTags(NULL, 
  209.         WA_Left,win->LeftEdge+(win->Width - width)/2,
  210.         WA_Top,win->TopEdge+(win->Height - height)/2,
  211.         WA_Width,width,
  212.         WA_Height,height,
  213.         WA_DetailPen,3,
  214.         WA_BlockPen,1,
  215.         WA_IDCMP,BUTTONIDCMP|INACTIVEWINDOW|IDCMP_RAWKEY,
  216.         WA_Gadgets,gList,
  217.         WA_Title,titleText,
  218.         WA_CustomScreen,screen,
  219.         WA_SuperBitMap,0,
  220.         WA_MinWidth,30,
  221.         WA_MinHeight,30,
  222.         WA_MaxWidth,-1,
  223.         WA_MaxHeight,-1,
  224.         WA_SizeGadget,FALSE,
  225.         WA_DragBar,FALSE,
  226.         WA_DepthGadget,FALSE,
  227.         WA_CloseGadget,FALSE,
  228.         WA_Backdrop,FALSE,
  229.         WA_ReportMouse,FALSE,
  230.         WA_Borderless,FALSE,
  231.         WA_Activate,TRUE,
  232.         WA_RMBTrap,TRUE,
  233.         WA_SimpleRefresh,TRUE,
  234.         TAG_DONE
  235.     );
  236.     if (!reqWindow) {
  237.         FreeGadgets(gList);
  238.         EndRequest(&req, win);
  239.         return 0;
  240.     }
  241.     GT_RefreshWindow(reqWindow, NULL);
  242.     activeFlag = !0;
  243.  
  244.     reqrp = reqWindow->RPort;
  245.     SetFont(reqrp, topaz80Font);
  246.  
  247.     SetAPen(reqrp, 2);
  248.     Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  249.     Text(reqrp, reqText, strlen(reqText));
  250.     MoveWindowInFrontOf(reqWindow, win);
  251.  
  252.     while (1) {
  253.         Delay(25);
  254.         while (m = GT_GetIMsg(reqWindow->UserPort)) {
  255.             msg = *m;
  256.             GT_ReplyIMsg(m);
  257.             if (msg.Class == IDCMP_GADGETUP || msg.Class == IDCMP_GADGETDOWN) {
  258.                 CloseWindow(reqWindow);
  259.                 FreeGadgets(gList);
  260.                 EndRequest(&req, win);
  261.                 return !0;
  262.             }
  263.             else if (msg.Class == IDCMP_REFRESHWINDOW) {    
  264.                 GT_BeginRefresh(reqWindow);
  265.                 SetAPen(reqrp, 2);
  266.                 Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  267.                 Text(reqrp, reqText, strlen(reqText));
  268.                 GT_EndRefresh(reqWindow, TRUE);
  269.             }
  270.             else if (msg.Class == IDCMP_RAWKEY && msg.Code == 0x45) {
  271.                 CloseWindow(reqWindow);
  272.                 FreeGadgets(gList);
  273.                 EndRequest(&req, win);
  274.                 return !0;
  275.             }
  276.             else if (msg.Class == IDCMP_INACTIVEWINDOW) {
  277.                 activeFlag = 0;
  278.             }
  279.         }
  280.         if (!activeFlag && IntuitionBase->ActiveWindow == win) {
  281.             MoveWindowInFrontOf(reqWindow, win);
  282.             ActivateWindow(reqWindow);
  283.             activeFlag = !0;
  284.             SetAPen(reqrp, 2);
  285.             Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  286.             Text(reqrp, reqText, strlen(reqText));
  287.         }
  288.     }
  289. }
  290.  
  291. BOOL    TwoGadgetRequest(titleText, reqText, leftText, rightText)
  292. char    *titleText, *reqText, *leftText, *rightText;
  293. {
  294.     short    titleLen = TextLength(topazRP, titleText, strlen(titleText));
  295.     short    reqLen = TextLength(topazRP, reqText, strlen(reqText));
  296.     short    leftLen = TextLength(topazRP, leftText, strlen(leftText));
  297.     short    rightLen = TextLength(topazRP, rightText, strlen(rightText));
  298.     WINDOW    *reqWindow = 0, *win = mainWindow;
  299.     short    width = titleLen;
  300.     short    height = topazRP->TxHeight*4 + screen->BarHeight;
  301.     GADGET    *gList = 0, *gadget;
  302.     NEWGAD    ng;
  303.     RPORT    *reqrp;
  304.     IMSG    *m, msg;
  305.     BOOL    activeFlag = 0;
  306.  
  307.     vi = GetVisualInfo(screen, TAG_DONE);
  308.     if (leftLen > rightLen) rightLen = leftLen;
  309.     if (rightLen > leftLen) leftLen = rightLen;
  310.     if (reqLen > width) width = reqLen;
  311.     if (leftLen + rightLen + 20 > width) width = leftLen + rightLen + 32;
  312.     width += 10;
  313.  
  314.     gadget = CreateContext(&gList);
  315.     if (!gadget) return 0;
  316.  
  317.     ng.ng_GadgetID = 0;
  318.     ng.ng_TextAttr = &topaz80;
  319.     ng.ng_VisualInfo = vi;
  320.     ng.ng_LeftEdge = 6;
  321.     ng.ng_TopEdge = height-topazRP->TxHeight-6-INTERHEIGHT;
  322.     ng.ng_Width = leftLen+6;
  323.     ng.ng_Height = topazRP->TxHeight+6;
  324.     ng.ng_GadgetText = leftText;
  325.     ng.ng_Flags = NG_HIGHLABEL;
  326.     gadget = CreateGadget(BUTTON_KIND, gadget, &ng, GT_Underscore, '_', TAG_DONE);
  327.     if (!gadget) {
  328.         FreeGadgets(gList);
  329.         return 0;
  330.     }
  331.     ng.ng_GadgetID = 1;
  332.     ng.ng_TextAttr = &topaz80;
  333.     ng.ng_VisualInfo = vi;
  334.     ng.ng_LeftEdge = width-rightLen-12;
  335.     ng.ng_TopEdge = height-topazRP->TxHeight-6-INTERHEIGHT;
  336.     ng.ng_Width = rightLen+6;
  337.     ng.ng_Height = topazRP->TxHeight+6;
  338.     ng.ng_GadgetText = rightText;
  339.     ng.ng_Flags = NG_HIGHLABEL;
  340.     gadget = CreateGadget(BUTTON_KIND, gadget, &ng, GT_Underscore, '_', TAG_DONE);
  341.     if (!gadget) {
  342.         FreeGadgets(gList);
  343.         return 0;
  344.     }
  345.  
  346.     Request(&req, win);
  347.     reqWindow = OpenWindowTags(NULL, 
  348.         WA_Left,win->LeftEdge+(win->Width - width)/2,
  349.         WA_Top,win->TopEdge+(win->Height - height)/2,
  350.         WA_Width,width,
  351.         WA_Height,height,
  352.         WA_DetailPen,3,
  353.         WA_BlockPen,1,
  354.         WA_IDCMP,BUTTONIDCMP|INACTIVEWINDOW|VANILLAKEY,
  355.         WA_Gadgets,gList,
  356.         WA_Title,titleText,
  357.         WA_CustomScreen,screen,
  358.         WA_SuperBitMap,0,
  359.         WA_MinWidth,30,
  360.         WA_MinHeight,30,
  361.         WA_MaxWidth,-1,
  362.         WA_MaxHeight,-1,
  363.         WA_SizeGadget,FALSE,
  364.         WA_DragBar,FALSE,
  365.         WA_DepthGadget,FALSE,
  366.         WA_CloseGadget,FALSE,
  367.         WA_Backdrop,FALSE,
  368.         WA_ReportMouse,FALSE,
  369.         WA_Borderless,FALSE,
  370.         WA_Activate,TRUE,
  371.         WA_RMBTrap,TRUE,
  372.         WA_SimpleRefresh,TRUE,
  373.         TAG_DONE
  374.     );
  375.     if (!reqWindow) {
  376.         FreeGadgets(gList);
  377.         EndRequest(&req, win);
  378.         return 0;
  379.     }
  380.     GT_RefreshWindow(reqWindow, NULL);
  381.     activeFlag = !0;
  382.     reqrp = reqWindow->RPort;
  383.     SetFont(reqrp, topaz80Font);
  384.  
  385.     SetAPen(reqrp, 2);
  386.     Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  387.     Text(reqrp, reqText, strlen(reqText));
  388.  
  389.     MoveWindowInFrontOf(reqWindow, win);
  390.     while (1) {
  391.         Delay(25);
  392.         while (m = GT_GetIMsg(reqWindow->UserPort)) {
  393.             msg = *m;
  394.             GT_ReplyIMsg(m);
  395.             if (msg.Class == IDCMP_GADGETUP || msg.Class == IDCMP_GADGETDOWN) {
  396.                 gadget = (GADGET *)msg.IAddress;
  397.                 CloseWindow(reqWindow);
  398.                 FreeGadgets(gList);
  399.                 EndRequest(&req, win);
  400.                 if (gadget->GadgetID) return 0; else return !0;
  401.             }
  402.             else if (msg.Class == IDCMP_REFRESHWINDOW) {    
  403.                 GT_BeginRefresh(reqWindow);
  404.                 SetAPen(reqrp, 2);
  405.                 Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  406.                 Text(reqrp, reqText, strlen(reqText));
  407.                 GT_EndRefresh(reqWindow, TRUE);
  408.             }
  409.             else if (msg.Class == IDCMP_INACTIVEWINDOW) {
  410.                 activeFlag = 0;
  411.             }
  412.             else if (msg.Class == IDCMP_VANILLAKEY) {
  413.                 if (msg.Code == 'y' || msg.Code == 'Y') {
  414.                     CloseWindow(reqWindow);
  415.                     FreeGadgets(gList);
  416.                     EndRequest(&req, win);
  417.                     return !0;
  418.                 }
  419.                 if (msg.Code == 'n' || msg.Code == 'N' || msg.Code == 0x1b) {
  420.                     CloseWindow(reqWindow);
  421.                     FreeGadgets(gList);
  422.                     EndRequest(&req, win);
  423.                     return 0;
  424.                 }
  425.             }
  426.         }
  427.         if (!activeFlag && IntuitionBase->ActiveWindow == win) {
  428.             MoveWindowInFrontOf(reqWindow, win);
  429.             ActivateWindow(reqWindow);
  430.             activeFlag = !0;
  431.             SetAPen(reqrp, 2);
  432.             Move(reqrp, (width-reqLen)/2,screen->BarHeight+2+reqrp->TxBaseline);
  433.             Text(reqrp, reqText, strlen(reqText));
  434.         }
  435.     }
  436. }
  437.  
  438. static char    *postText[] = {
  439.     "You are about to post news.  This will cause a zillion Unix machines",
  440.     "to spread your article all over the explored universe at a cost of",
  441.     "several trillion dollars.  And to top it off, you can expect other",
  442.     "lunatics in NetLand to follow up to your article and do likewise.",
  443.     "If you are lucky, you won't get flamed to a crisp.",
  444.     " ",
  445.     "          Are you really sure you want to proceed?       ",
  446.     0,
  447. };
  448.  
  449. BOOL    SendItRequest() {
  450.     char    *titleText = "GRN - Read Carefully before answering...";
  451.     char    *leftText = "_YES, I have guts";
  452.     char    *rightText = "_NO, I am a gutless worm";
  453.     short    titleLen = TextLength(topazRP, titleText, strlen(titleText));
  454.     short    reqLen = TextLength(topazRP, postText[0], strlen(postText[0]));
  455.     short    leftLen = TextLength(topazRP, leftText, strlen(leftText))+INTERWIDTH;
  456.     short    rightLen = TextLength(topazRP, rightText, strlen(rightText))+INTERWIDTH;
  457.     WINDOW    *reqWindow = 0, *win = mainWindow;
  458.     short    width = titleLen;
  459.     short    height = topazRP->TxHeight*10 + screen->BarHeight;
  460.     GADGET    *gList = 0, *gadget;
  461.     NEWGAD    ng;
  462.     RPORT    *reqrp;
  463.     IMSG    *m, msg;
  464.     BOOL    activeFlag = 0;
  465.     short    i, y;
  466.  
  467.     vi = GetVisualInfo(screen, TAG_DONE);
  468.     if (leftLen > rightLen) rightLen = leftLen;
  469.     if (rightLen > leftLen) leftLen = rightLen;
  470.     if (reqLen > width) width = reqLen;
  471.     if (leftLen + rightLen + 20 > width) width = leftLen + rightLen + 32;
  472.     width += 10;
  473.  
  474.     gadget = CreateContext(&gList);
  475.     if (!gadget) return 0;
  476.  
  477.     ng.ng_GadgetID = 0;
  478.     ng.ng_TextAttr = &topaz80;
  479.     ng.ng_VisualInfo = vi;
  480.     ng.ng_LeftEdge = 6;
  481.     ng.ng_TopEdge = height-topazRP->TxHeight-6-INTERHEIGHT;
  482.     ng.ng_Width = leftLen+6;
  483.     ng.ng_Height = topazRP->TxHeight+6;
  484.     ng.ng_GadgetText = leftText;
  485.     ng.ng_Flags = NG_HIGHLABEL;
  486.     gadget = CreateGadget(BUTTON_KIND, gadget, &ng, GT_Underscore, '_', TAG_DONE);
  487.     if (!gadget) {
  488.         FreeGadgets(gList);
  489.         return 0;
  490.     }
  491.     ng.ng_GadgetID = 1;
  492.     ng.ng_TextAttr = &topaz80;
  493.     ng.ng_VisualInfo = vi;
  494.     ng.ng_LeftEdge = width-rightLen-12;
  495.     ng.ng_TopEdge = height-topazRP->TxHeight-6-INTERHEIGHT;
  496.     ng.ng_Width = rightLen+6;
  497.     ng.ng_Height = topazRP->TxHeight+6;
  498.     ng.ng_GadgetText = rightText;
  499.     ng.ng_Flags = NG_HIGHLABEL;
  500.     gadget = CreateGadget(BUTTON_KIND, gadget, &ng, GT_Underscore, '_', TAG_DONE);
  501.     if (!gadget) {
  502.         FreeGadgets(gList);
  503.         return 0;
  504.     }
  505.  
  506.     Request(&req, win);
  507.     reqWindow = OpenWindowTags(NULL, 
  508.         WA_Left,win->LeftEdge+(win->Width - width)/2,
  509.         WA_Top,win->TopEdge+(win->Height - height)/2,
  510.         WA_Width,width,
  511.         WA_Height,height,
  512.         WA_DetailPen,3,
  513.         WA_BlockPen,1,
  514.         WA_IDCMP,BUTTONIDCMP|INACTIVEWINDOW|VANILLAKEY,
  515.         WA_Gadgets,gList,
  516.         WA_Title,titleText,
  517.         WA_CustomScreen,screen,
  518.         WA_SuperBitMap,0,
  519.         WA_MinWidth,30,
  520.         WA_MinHeight,30,
  521.         WA_MaxWidth,-1,
  522.         WA_MaxHeight,-1,
  523.         WA_SizeGadget,FALSE,
  524.         WA_DragBar,FALSE,
  525.         WA_DepthGadget,FALSE,
  526.         WA_CloseGadget,FALSE,
  527.         WA_Backdrop,FALSE,
  528.         WA_ReportMouse,FALSE,
  529.         WA_Borderless,FALSE,
  530.         WA_Activate,TRUE,
  531.         WA_RMBTrap,TRUE,
  532.         WA_SimpleRefresh,TRUE,
  533.         TAG_DONE
  534.     );
  535.     if (!reqWindow) {
  536.         FreeGadgets(gList);
  537.         EndRequest(&req, win);
  538.         return 0;
  539.     }
  540.     GT_RefreshWindow(reqWindow, NULL);
  541.     activeFlag = !0;
  542.     reqrp = reqWindow->RPort;
  543.     SetFont(reqrp, topaz80Font);
  544.  
  545.     y = screen->BarHeight+2+reqrp->TxBaseline;
  546.     for (i=0; postText[i]; i++) {
  547.         SetAPen(reqrp, 1);
  548.         Move(reqrp, (width-reqLen)/2, y);
  549.         Text(reqrp, postText[i], strlen(postText[i]));
  550.         y += reqrp->TxHeight;
  551.     }
  552.  
  553.     MoveWindowInFrontOf(reqWindow, win);
  554.     while (1) {
  555.         Delay(25);
  556.         while (m = GT_GetIMsg(reqWindow->UserPort)) {
  557.             msg = *m;
  558.             GT_ReplyIMsg(m);
  559.             if (msg.Class == IDCMP_GADGETUP || msg.Class == IDCMP_GADGETDOWN) {
  560.                 gadget = (GADGET *)msg.IAddress;
  561.                 CloseWindow(reqWindow);
  562.                 FreeGadgets(gList);
  563.                 EndRequest(&req, win);
  564.                 if (gadget->GadgetID) return 0; else return !0;
  565.             }
  566.             else if (msg.Class == IDCMP_REFRESHWINDOW) {    
  567.                 GT_BeginRefresh(reqWindow);
  568.                 SetAPen(reqrp, 2);
  569.                 y = screen->BarHeight+2+reqrp->TxBaseline;
  570.                 for (i=0; postText[i]; i++) {
  571.                     SetAPen(reqrp, 1);
  572.                     Move(reqrp, (width-reqLen)/2, y);
  573.                     Text(reqrp, postText[i], strlen(postText[i]));
  574.                     y += reqrp->TxHeight;
  575.                 }
  576.                 GT_EndRefresh(reqWindow, TRUE);
  577.             }
  578.             else if (msg.Class == IDCMP_INACTIVEWINDOW) {
  579.                 activeFlag = 0;
  580.             }
  581.             else if (msg.Class == IDCMP_VANILLAKEY) {
  582.                 if (msg.Code == 'y' || msg.Code == 'Y') {
  583.                     CloseWindow(reqWindow);
  584.                     FreeGadgets(gList);
  585.                     EndRequest(&req, win);
  586.                     return !0;
  587.                 }
  588.                 if (msg.Code == 'n' || msg.Code == 'N' || msg.Code == 0x1b) {
  589.                     CloseWindow(reqWindow);
  590.                     FreeGadgets(gList);
  591.                     EndRequest(&req, win);
  592.                     return 0;
  593.                 }
  594.             }
  595.         }
  596.         if (!activeFlag && IntuitionBase->ActiveWindow == win) {
  597.             MoveWindowInFrontOf(reqWindow, win);
  598.             ActivateWindow(reqWindow);
  599.             activeFlag = !0;
  600.             y = screen->BarHeight+2+reqrp->TxBaseline;
  601.             for (i=0; postText[i]; i++) {
  602.                 SetAPen(reqrp, 1);
  603.                 Move(reqrp, (width-reqLen)/2, y);
  604.                 Text(reqrp, postText[i], strlen(postText[i]));
  605.                 y += reqrp->TxHeight;
  606.             }
  607.         }
  608.     }
  609. }
  610.  
  611.