home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / comm / net / amitcp_pop / source / pop.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-21  |  10.8 KB  |  425 lines

  1. #include "pop.h"
  2.  
  3. struct Screen         *Scr = NULL;
  4. UBYTE                 *PubScreenName = NULL;
  5. APTR                   VisualInfo = NULL;
  6. struct Window         *Project0Wnd = NULL;
  7. struct Gadget         *Project0GList = NULL;
  8. struct Menu           *Project0Menus = NULL;
  9. struct IntuiMessage    Project0Msg;
  10. struct Gadget         *Project0Gadgets[9];
  11. UWORD                  Project0Left = 119;
  12. UWORD                  Project0Top = 147;
  13. UWORD                  Project0Width = 418;
  14. UWORD                  Project0Height = 69;
  15. UBYTE                 *Project0Wdt = (UBYTE *)"AmiPOP Client";
  16. struct TextAttr       *Font, Attr;
  17. UWORD                  FontX, FontY;
  18. UWORD                  OffX, OffY;
  19.  
  20. ULONG __saveds __asm hidepass( register __a0 struct Hook*, register __a2 struct SGWork* ,register __a1 ULONG* );
  21.  
  22. struct Hook hookentry =
  23. {
  24.     {0},
  25.     hidepass,
  26.     0,
  27.     0,
  28. };
  29.  
  30. struct NewMenu Project0NewMenu[] = {
  31.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  32.     NM_ITEM, (STRPTR)"Hide", (STRPTR)"H", 0, 0L, (APTR)Project0MENU_HIDE,
  33.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  34.     NM_ITEM, (STRPTR)"About...", NULL, 0, 0L, (APTR)Project0MENU_ABOUT,
  35.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)Project0MENU_QUIT,
  36.     NM_END, NULL, NULL, 0, 0L, NULL };
  37.  
  38. static UWORD ComputeX( UWORD value )
  39. {
  40.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  41. }
  42.  
  43. static UWORD ComputeY( UWORD value )
  44. {
  45.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  46. }
  47.  
  48. static void ComputeFont( UWORD width, UWORD height )
  49. {
  50.     Font = &Attr;
  51.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  52.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  53.     FontX = Scr->RastPort.Font->tf_XSize;
  54.  
  55.     OffX = Scr->WBorLeft;
  56.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  57.  
  58.     if ( width && height ) {
  59.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  60.             goto UseTopaz;
  61.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  62.             goto UseTopaz;
  63.     }
  64.     return;
  65.  
  66. UseTopaz:
  67.     Font->ta_Name = (STRPTR)"topaz.font";
  68.     FontX = FontY = Font->ta_YSize = 8;
  69. }
  70.  
  71. int SetupScreen( void )
  72. {
  73.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  74.         return( 1L );
  75.  
  76.     ComputeFont( 0, 0 );
  77.  
  78.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  79.         return( 2L );
  80.  
  81.     return( 0L );
  82. }
  83.  
  84. void CloseDownScreen( void )
  85. {
  86.     if ( VisualInfo ) {
  87.         FreeVisualInfo( VisualInfo );
  88.         VisualInfo = NULL;
  89.     }
  90.  
  91.     if ( Scr        ) {
  92.         UnlockPubScreen( NULL, Scr );
  93.         Scr = NULL;
  94.     }
  95. }
  96.  
  97. void Project0Render( void )
  98. {
  99.     ComputeFont( Project0Width, Project0Height );
  100.  
  101.     DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 0 ),
  102.                     OffY + ComputeY( 50 ),
  103.                     ComputeX( 417 ),
  104.                     ComputeY( 18 ),
  105.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  106. }
  107.  
  108. int HandleProject0IDCMP( void )
  109. {
  110.     struct IntuiMessage    *m;
  111.     struct MenuItem        *n;
  112.     int            (*func)( void );
  113.     BOOL            running = TRUE;
  114.  
  115.     while( (Project0Wnd) && (m = GT_GetIMsg( Project0Wnd->UserPort ) ) ) {
  116.  
  117.         CopyMem(( char * )m, ( char * )&Project0Msg, (long)sizeof( struct IntuiMessage ));
  118.  
  119.         GT_ReplyIMsg( m );
  120.  
  121.         switch ( Project0Msg.Class ) {
  122.  
  123.             case    IDCMP_REFRESHWINDOW:
  124.                 GT_BeginRefresh( Project0Wnd );
  125.                 Project0Render();
  126.                 GT_EndRefresh( Project0Wnd, TRUE );
  127.                 break;
  128.  
  129.             case    IDCMP_CLOSEWINDOW:
  130.                 running = Project0CloseWindow();
  131.                 break;
  132.  
  133.             case    IDCMP_VANILLAKEY:
  134.                 Project0VanillaKey();
  135.                 break;
  136.  
  137.             case    IDCMP_CHANGEWINDOW:
  138.                 Project0ChangeWindow();
  139.                 break;
  140.  
  141.             case    IDCMP_GADGETUP:
  142.                 func = ( int (*) (void ) )(( struct Gadget * )Project0Msg.IAddress )->UserData;
  143.                 func();
  144.                 break;
  145.  
  146.             case    IDCMP_MENUPICK:
  147.                 while ( (Project0Msg.Code != MENUNULL) && (Project0Wnd) )
  148.                 {
  149.                     n = ItemAddress( Project0Menus, Project0Msg.Code );
  150.                     func = (int (*) (void) )(GTMENUITEM_USERDATA(n));
  151.                     running= func();
  152.                     Project0Msg.Code = n->NextSelect;
  153.                 }
  154.                 break;
  155.         }
  156.     }
  157.     return( running );
  158. }
  159.  
  160. int OpenProject0Window( void )
  161. {
  162.     struct NewGadget    ng;
  163.     struct Gadget    *g;
  164.     UWORD        wleft = Project0Left, wtop = Project0Top, ww, wh;
  165.  
  166.     WORD zipsize[]={0,0,200,90};
  167.  
  168.     hookentry.h_SubEntry = (ULONG (*)() )password; /* Attempt to get hook working again */
  169.     memset(passfake,PASSCHAR,strlen(password)); /* Show initial string gadget condition */
  170.     passfake[strlen(password)]='\0';
  171.  
  172.     ComputeFont( Project0Width, Project0Height );
  173.  
  174.     ww = ComputeX( Project0Width );
  175.     wh = ComputeY( Project0Height );
  176.  
  177.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  178.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  179.  
  180.     zipsize[2]=(WORD)(ww + Scr->WBorRight);
  181.     zipsize[3]=(WORD)(Scr->WBorTop + (Scr->Font->ta_YSize +1));
  182.  
  183.     if ( ! ( g = CreateContext( &Project0GList )))
  184.         return( 1L );
  185.  
  186. /* */
  187.  
  188.     ng.ng_VisualInfo = VisualInfo;
  189.     ng.ng_TextAttr   = Font;
  190.     ng.ng_LeftEdge    = OffX + ComputeX( 85 );
  191.     ng.ng_TopEdge    = OffY + ComputeY( 17 );
  192.     ng.ng_Width        = ComputeX( 114 );
  193.     ng.ng_Height    = ComputeY( 12 );
  194.     ng.ng_GadgetID    = GD_MYGAD_USER;
  195.     ng.ng_GadgetText= "_Username";
  196.     ng.ng_Flags        = PLACETEXT_LEFT;
  197.     ng.ng_UserData    = (APTR)MYGAD_USERClicked;
  198.  
  199.     Project0Gadgets[GD_MYGAD_USER]=g=    CreateGadget(STRING_KIND,g,&ng,
  200.                                         GTST_String,    username,
  201.                                         GTST_MaxChars,    SMALLSTRING-1,
  202.                                         GT_Underscore,    '_',
  203.                                         TAG_DONE);
  204. /* */
  205.  
  206.     ng.ng_LeftEdge    = OffX + ComputeX( 85 );
  207.     ng.ng_TopEdge    = OffY + ComputeY( 32 );
  208.     ng.ng_Width        = ComputeX( 114 );
  209.     ng.ng_Height    = ComputeY( 12 );
  210.     ng.ng_GadgetID    = GD_MYGAD_PASSWORD;
  211.     ng.ng_GadgetText= "Pass_word";
  212.     ng.ng_Flags        = PLACETEXT_LEFT;
  213.     ng.ng_UserData    = (APTR)MYGAD_PASSWORDClicked;
  214.  
  215.     Project0Gadgets[GD_MYGAD_PASSWORD]=g=    CreateGadget(STRING_KIND,g,&ng,
  216.                                         GTST_String,    passfake,
  217.                                         GTST_EditHook,    &hookentry,
  218.                                         GTST_MaxChars,    SMALLSTRING-1,
  219.                                         GT_Underscore,    '_',
  220.                                         TAG_DONE);
  221.  
  222. /* */
  223.  
  224.     ng.ng_LeftEdge    = OffX + ComputeX( 384 );
  225.     ng.ng_TopEdge    = OffY + ComputeY( 32 );
  226.     ng.ng_Width        = ComputeX( 26 );
  227.     ng.ng_Height    = ComputeY( 11 );
  228.     ng.ng_GadgetID    = GD_MYGAD_DELETE;
  229.     ng.ng_GadgetText= "_Delete Messages?";
  230.     ng.ng_Flags        = PLACETEXT_LEFT;
  231.     ng.ng_UserData    = (APTR)MYGAD_DELETEClicked;
  232.  
  233.     Project0Gadgets[GD_MYGAD_DELETE]=g=    CreateGadget(CHECKBOX_KIND,g,&ng,
  234.                                         GTCB_Checked,    delmail,
  235.                                         GT_Underscore,    '_',
  236.                                         TAG_END);
  237.  
  238. /* */
  239.  
  240.     ng.ng_LeftEdge    = OffX + ComputeX( 300 );
  241.     ng.ng_TopEdge    = OffY + ComputeY( 2 );
  242.     ng.ng_Width        = ComputeX( 114 );
  243.     ng.ng_Height    = ComputeY( 12 );
  244.     ng.ng_GadgetID    = GD_MYGAD_MAILDIR;
  245.     ng.ng_GadgetText= "Mail _Box";
  246.     ng.ng_Flags        = PLACETEXT_LEFT;
  247.     ng.ng_UserData    = (APTR)MYGAD_MAILDIRClicked;
  248.  
  249.     Project0Gadgets[GD_MYGAD_MAILDIR]=g=    CreateGadget(STRING_KIND,g,&ng,
  250.                                         GTST_String,    maildir,
  251.                                         GTST_MaxChars,    BIGSTRING-1,
  252.                                         GT_Underscore,    '_',
  253.                                         TAG_DONE);
  254.  
  255. /* */
  256.  
  257.     ng.ng_LeftEdge    = OffX + ComputeX( 329 );
  258.     ng.ng_TopEdge    = OffY + ComputeY( 53 );
  259.     ng.ng_Width        = ComputeX( 83 );
  260.     ng.ng_Height    = ComputeY( 11 );
  261.     ng.ng_GadgetID    = GD_MYGAD_BUTTON;
  262.     ng.ng_GadgetText= "Check _Now";
  263.     ng.ng_Flags        = PLACETEXT_IN;
  264.     ng.ng_UserData    = (APTR)MYGAD_BUTTONClicked;
  265.  
  266.     Project0Gadgets[GD_MYGAD_BUTTON]=g=    CreateGadget(BUTTON_KIND,g,&ng,
  267.                                         GT_Underscore,    '_',
  268.                                         TAG_DONE);
  269.  
  270. /* */
  271.  
  272.     ng.ng_LeftEdge    = OffX + ComputeX( 85 );
  273.     ng.ng_TopEdge    = OffY + ComputeY( 2 );
  274.     ng.ng_Width        = ComputeX( 114 );
  275.     ng.ng_Height    = ComputeY( 12 );
  276.     ng.ng_GadgetID    = GD_MYGAD_HOST;
  277.     ng.ng_GadgetText= "_POP Host";
  278.     ng.ng_Flags        = PLACETEXT_LEFT;
  279.     ng.ng_UserData    = (APTR)MYGAD_HOSTClicked;
  280.  
  281.     Project0Gadgets[GD_MYGAD_HOST]=g=    CreateGadget(STRING_KIND,g,&ng,
  282.                                         GTST_String,    pophost,
  283.                                         GTST_MaxChars,    BIGSTRING-1,
  284.                                         GT_Underscore,    '_',
  285.                                         TAG_DONE);
  286.  
  287. /* */
  288.  
  289.     ng.ng_LeftEdge    = OffX + ComputeX( 202 );
  290.     ng.ng_TopEdge    = OffY + ComputeY( 53 );
  291.     ng.ng_Width        = ComputeX( 39 );
  292.     ng.ng_Height    = ComputeY( 12 );
  293.     ng.ng_GadgetID    = GD_MYGAD_TIME;
  294.     ng.ng_GadgetText= "How _Often";
  295.     ng.ng_Flags        = PLACETEXT_RIGHT;
  296.     ng.ng_UserData    = (APTR)MYGAD_TIMEClicked;
  297.  
  298.     Project0Gadgets[GD_MYGAD_TIME]=g=    CreateGadget(INTEGER_KIND,g,&ng,
  299.                                         GTIN_Number,    timecheck,
  300.                                         GTIN_MaxChars,    3,
  301.                                         GT_Underscore,    '_',
  302.                                         GA_Disabled,    !checkper,
  303.                                         TAG_DONE);
  304.  
  305. /* */
  306.  
  307.     ng.ng_LeftEdge    = OffX + ComputeX( 11 );
  308.     ng.ng_TopEdge    = OffY + ComputeY( 54 );
  309.     ng.ng_Width        = ComputeX( 26 );
  310.     ng.ng_Height    = ComputeY( 11 );
  311.     ng.ng_GadgetID    = GD_MYGAD_CRONCHECK;
  312.     ng.ng_GadgetText= "_Check Periodically";
  313.     ng.ng_Flags        = PLACETEXT_RIGHT;
  314.     ng.ng_UserData    = (APTR)MYGAD_CRONCHECKClicked;
  315.  
  316.     Project0Gadgets[GD_MYGAD_CRONCHECK]=g=    CreateGadget(CHECKBOX_KIND,g,&ng,
  317.                                         GTCB_Checked,    checkper,
  318.                                         GT_Underscore,    '_',
  319.                                         TAG_DONE);
  320.  
  321. /* */
  322.  
  323.     ng.ng_LeftEdge    = OffX + ComputeX( 384 );
  324.     ng.ng_TopEdge    = OffY + ComputeY( 17 );
  325.     ng.ng_Width        = ComputeX( 26 );
  326.     ng.ng_Height    = ComputeY( 11 );
  327.     ng.ng_GadgetID    = GD_MYGAD_APPEND;
  328.     ng.ng_GadgetText= "_Append to MailBox?";
  329.     ng.ng_Flags        = PLACETEXT_LEFT;
  330.     ng.ng_UserData    = (APTR)MYGAD_APPENDClicked;
  331.  
  332.     Project0Gadgets[GD_MYGAD_APPEND]=g=    CreateGadget(CHECKBOX_KIND,g,&ng,
  333.                                         GT_Underscore,    '_',
  334.                                         GTCB_Checked,    appfile,
  335.                                         TAG_DONE);
  336.  
  337.     if ( ! ( Project0Menus = CreateMenus( Project0NewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  338.         return( 3L );
  339.  
  340.     LayoutMenus( Project0Menus, VisualInfo, TAG_DONE );
  341.  
  342.     if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  343.                 WA_Left,    wleft,
  344.                 WA_Top,        wtop,
  345.                 WA_Width,    ww + OffX + Scr->WBorRight,
  346.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  347.                 WA_IDCMP,    STRINGIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|INTEGERIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_CHANGEWINDOW|IDCMP_REFRESHWINDOW,
  348.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
  349.                 WA_Gadgets,    Project0GList,
  350.                 WA_Title,    Project0Wdt,
  351.                 WA_PubScreen,    Scr,
  352.                 WA_AutoAdjust,    TRUE,
  353.             //    WA_NewLookMenus,TRUE,
  354.                 WA_Activate,    TRUE,
  355.                 WA_Zoom,    zipsize,
  356.                 TAG_DONE )))
  357.     return( 4L );
  358.  
  359.     SetMenuStrip( Project0Wnd, Project0Menus );
  360.     GT_RefreshWindow( Project0Wnd, NULL );
  361.  
  362.     Project0Render();
  363.  
  364.     return( 0L );
  365. }
  366.  
  367. void CloseProject0Window( void )
  368. {
  369.     if ( Project0Menus      ) {
  370.         ClearMenuStrip( Project0Wnd );
  371.         FreeMenus( Project0Menus );
  372.         Project0Menus = NULL;    }
  373.  
  374.     if ( Project0Wnd        ) {
  375.         CloseWindow( Project0Wnd );
  376.         Project0Wnd = NULL;
  377.     }
  378.  
  379.     if ( Project0GList      ) {
  380.         FreeGadgets( Project0GList );
  381.         Project0GList = NULL;
  382.     }
  383. }
  384.  
  385. /* Hook goodies */
  386.  
  387. ULONG __saveds __asm hidepass(register __a0 struct Hook *hook, register __a2 struct SGWork *sgw, register __a1 ULONG *msg)
  388. {
  389.     UBYTE *pass_ptr;
  390.  
  391.     pass_ptr = (STRPTR)hook->h_SubEntry;
  392.  
  393.     sgw->BufferPos = sgw->NumChars;
  394.  
  395.     if(*msg == SGH_KEY)
  396.     {
  397.         switch (sgw->EditOp)
  398.         {
  399.             case EO_INSERTCHAR:
  400.                 pass_ptr[sgw->BufferPos - 1] = sgw->WorkBuffer[sgw->BufferPos - 1];
  401.                 pass_ptr[sgw->BufferPos] = '\0';
  402.                 sgw->WorkBuffer[sgw->BufferPos - 1] = (UBYTE)PASSCHAR;
  403.                 break;
  404.  
  405.             case EO_DELBACKWARD:
  406.                 pass_ptr[sgw->BufferPos] = '\0';
  407.                 break;
  408.  
  409.             default:
  410.                 sgw->Actions &= ~SGA_USE;
  411.                 break;
  412.         }
  413.  
  414.         return (~0L);
  415.     }
  416.     if(*msg == SGH_CLICK)
  417.     {
  418.         sgw->BufferPos = sgw->NumChars;
  419.         return (~0L);
  420.     }
  421.  
  422.     return (0L);
  423. }
  424.  
  425.