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

  1. /* AmiPOP By Scott Ellis */
  2.  
  3. #include "pop.h"
  4.  
  5. static const char VersionID[]="\0$VER:AmiPOP 1.6 (17.10.93) By Scott Ellis";
  6.  
  7. /* Variables in pop.h */
  8.  
  9. char *pophost=NULL;
  10. char *username=NULL;
  11. char *password=NULL;
  12. char *passfake=NULL;
  13. char *maildir=NULL;
  14. char *cxname=NULL;
  15. char *cxdesc=NULL;
  16. char *hotkey=NULL;
  17. char *title=NULL;
  18. char *temp=NULL;
  19. char *buf=NULL;
  20.  
  21. char bum[]="Ok";
  22.  
  23. BOOL delmail=FALSE;
  24. BOOL checkper=FALSE;
  25. BOOL appfile=TRUE;
  26. BOOL winop=TRUE;
  27. BOOL notify=FALSE;
  28.  
  29. int timecheck=10;
  30. int port=110;
  31.  
  32. struct MsgPort *amipop_mp=NULL;
  33. struct MsgPort *timer_mp=NULL;
  34. struct timerequest *timerio=NULL;
  35. CxObj *broker=NULL;
  36. struct Library *TimerBase=NULL;
  37.  
  38. struct NewBroker newbroker = {
  39.     NB_VERSION,   /* nb_Version - Version of the NewBroker structure */
  40.     "Not Active", /* nb_Name */
  41.     "Amiga POP © 1993 Scott Ellis",     /* nb_Title - Title of commodity that appears in CXExchange */
  42.     "Not Active", /* nb_Descr */
  43.     NBU_UNIQUE | NBU_NOTIFY ,            /* nb_Unique - Tells CX not to launch another commodity with same name */
  44.     COF_SHOW_HIDE,            /* nb_Flags - Tells CX if this commodity has a window */
  45.     0,            /* nb_Pri - This commodity's priority */
  46.     0,            /* nb_Port - MsgPort CX talks to */
  47.     0             /* nb_ReservedChannel - reserved for later use */
  48. };
  49.  
  50. struct EasyStruct ereq =
  51.     {
  52.     sizeof(struct EasyStruct),
  53.     0,
  54.     "AmiPOP Notice",
  55.     "%s",
  56.     "%s",
  57.     };
  58.  
  59. UWORD __chip waitPointer[] =
  60.     {
  61.     0x0000, 0x0000,     /* reserved, must be NULL */
  62.  
  63.     0x0400, 0x07C0,
  64.     0x0000, 0x07C0,
  65.     0x0100, 0x0380,
  66.     0x0000, 0x07E0,
  67.     0x07C0, 0x1FF8,
  68.     0x1FF0, 0x3FEC,
  69.     0x3FF8, 0x7FDE,
  70.     0x3FF8, 0x7FBE,
  71.     0x7FFC, 0xFF7F,
  72.     0x7EFC, 0xFFFF,
  73.     0x7FFC, 0xFFFF,
  74.     0x3FF8, 0x7FFE,
  75.     0x3FF8, 0x7FFE,
  76.     0x1FF0, 0x3FFC,
  77.     0x07C0, 0x1FF8,
  78.     0x0000, 0x07E0,
  79.  
  80.     0x0000, 0x0000,     /* reserved, must be NULL */
  81.     };
  82.  
  83. enum args
  84.     {
  85.     USERNAME,
  86.     PASSWORD,
  87.     POPHOST,
  88.     MAILDIR,
  89.     CHECKPER,
  90.     TIME,
  91.     DELETE,
  92.     APPEND,
  93.     NOWINDOW,
  94.     PORT,
  95.     NOTIFY,
  96.     CX_POPKEY
  97.     };
  98.  
  99. /* Configure SAS Specific routines */
  100.  
  101. void __regargs __chkabort(void) {}
  102. int __oslibversion=37;
  103. long __stack = 20000;
  104.  
  105. /* End SAS */
  106.  
  107. ULONG            sigmask=NULL;
  108. ULONG            cxsigflag=NULL;
  109. ULONG            timesigflag=NULL;
  110.  
  111. struct Library *IconBase;
  112.  
  113. int main(int argc, char **argv )
  114. {
  115.     int foo=0;
  116.     ULONG    mysig;
  117.  
  118.     if (makevars())
  119.     {
  120.         freevars();
  121.         return(20);
  122.     }
  123.  
  124.     if ( parse( argc, argv) )
  125.     {
  126.         if ( setuptime() )
  127.         {
  128.             timesigflag = 1L << timer_mp->mp_SigBit;
  129.             timereq();
  130.             foo=1;
  131.  
  132.             if ( setupcx() )
  133.             {
  134.                 if (winop)
  135.                 {
  136.                     openup();
  137.                 }
  138.             }
  139.             else
  140.             {
  141.                 foo=0;
  142.             }
  143.         }
  144.     }
  145.     else
  146.     {
  147.         foo=0;
  148.     }
  149.  
  150.         while (foo)
  151.     {
  152.                 if (winop)
  153.         {
  154.             sigmask= 1 << Project0Wnd->UserPort->mp_SigBit ;
  155.         }
  156.         else
  157.         {
  158.             sigmask= NULL;
  159.         }
  160.  
  161.         mysig=Wait ( sigmask | cxsigflag | timesigflag | SIGBREAKF_CTRL_C );
  162.  
  163.         if ( mysig & cxsigflag )
  164.         {
  165.             foo=docx();
  166.         }
  167.                if ( mysig & sigmask )
  168.         {
  169.             foo=HandleProject0IDCMP();
  170.         }
  171.         if ( mysig & timesigflag )
  172.         {
  173.             if (checkper)
  174.             {
  175.                 MYGAD_BUTTONClicked();
  176.             }
  177.             timereq();
  178.         }
  179.         if (mysig & SIGBREAKF_CTRL_C )
  180.         {
  181.                     foo=0;
  182.         }
  183.     }
  184.  
  185.         closedown();
  186.  
  187.     closetime();
  188.  
  189.     closecx();
  190.  
  191.     freevars();
  192.  
  193.     return(0);
  194. }
  195.  
  196. void openup(void)
  197. {
  198.     SetupScreen();
  199.     OpenProject0Window();
  200.  
  201.     winop=TRUE;
  202. }
  203.  
  204. void closedown(void)
  205. {
  206.     CloseProject0Window();
  207.     CloseDownScreen();
  208.  
  209.     winop=FALSE;
  210. }
  211.  
  212. int parse(int argc, char *argv[])
  213. {
  214.     struct RDArgs    *RDA;
  215.     LONG         ArgumentArray[13] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
  216.     char        **ToolArrayIndex,
  217.                 *ToolStringIndex,
  218.                 *Template;
  219.     struct DiskObject    *DiskObject;
  220.     char none[]="None Given";
  221.  
  222.     if (IconBase = OpenLibrary("icon.library", 36L ) )
  223.         {
  224.  
  225.         RDA = AllocDosObjectTags(DOS_RDARGS, TAG_DONE);
  226.         RDA->RDA_ExtHelp = NULL;
  227.  
  228.         if (_WBenchMsg)
  229.         {
  230.             CurrentDir(_WBenchMsg->sm_ArgList->wa_Lock);
  231.             if ( DiskObject = GetDiskObject(_WBenchMsg->sm_ArgList->wa_Name) )
  232.             {
  233.                 for (ToolArrayIndex = DiskObject->do_ToolTypes; *ToolArrayIndex; ToolArrayIndex++ )
  234.                 {
  235.                     RDA->RDA_Source.CS_Length += (strlen(*ToolArrayIndex)+1);
  236.                 }
  237.                 RDA->RDA_Source.CS_Buffer = AllocVec(RDA->RDA_Source.CS_Length+1,MEMF_CLEAR);
  238.                 ToolStringIndex = RDA->RDA_Source.CS_Buffer;
  239.                 for (ToolArrayIndex = DiskObject->do_ToolTypes; *ToolArrayIndex; ToolArrayIndex++ )
  240.                 {
  241.                         ToolStringIndex = stpcpy(stpcpy(ToolStringIndex, *ToolArrayIndex)," ");
  242.                 }
  243.                 *(ToolStringIndex-1) = '\n';
  244.                 FreeDiskObject(DiskObject);
  245.             }
  246.  
  247.             Template = "Username/K,Password/K,POPHost/K,MailDir/K,CheckPer/S,Time/K/N,Delete/S,Append/S,NoWindow/S,Port/K/N,Notify/S,Cx_Popkey/K,ThrowAway/M";
  248.         }
  249.         else
  250.         {
  251.             Template = "Username/K,Password/K,POPHost/K,MailDir/K,CheckPer/S,Time/K/N,Delete/S,Append/S,NoWindow/S,Port/K/N,Notify/S,Cx_Popkey/K";
  252.         }
  253.  
  254.         if (RDA = ReadArgs(Template, ArgumentArray, RDA) )
  255.         {
  256.             if (ArgumentArray[USERNAME])
  257.             {
  258.                 strcpy(username,(char *)ArgumentArray[USERNAME]);
  259.             }
  260.             else
  261.             {
  262.                 strcpy(username,none);
  263.             }
  264.  
  265.             if (ArgumentArray[PASSWORD])
  266.             {
  267.                 strcpy(password,(char *)ArgumentArray[PASSWORD]);
  268.             }
  269.             else
  270.             {
  271.                 strcpy(password,"");
  272.             }
  273.  
  274.             if (ArgumentArray[POPHOST])
  275.             {
  276.                 strcpy(pophost,(char *)ArgumentArray[POPHOST]);
  277.             }
  278.             else
  279.             {
  280.                 strcpy(pophost,none);
  281.             }
  282.  
  283.             if (ArgumentArray[MAILDIR])
  284.             {
  285.                 strcpy(maildir,(char *)ArgumentArray[MAILDIR]);
  286.             }
  287.             else
  288.             {
  289.                 strcpy(maildir,none);
  290.             }
  291.  
  292.             checkper=(BOOL)ArgumentArray[CHECKPER];
  293.  
  294.             if (ArgumentArray[TIME])
  295.             {
  296.                 timecheck=*(int *)ArgumentArray[TIME];
  297.             }
  298.  
  299.             delmail=(BOOL)ArgumentArray[DELETE];
  300.             appfile=(BOOL)ArgumentArray[APPEND];
  301.                         winop=!( (BOOL)ArgumentArray[NOWINDOW] );
  302.  
  303.             if (ArgumentArray[PORT])
  304.             {
  305.                 port = *(int *)ArgumentArray[PORT];
  306.             }
  307.  
  308.             notify=(BOOL)ArgumentArray[NOTIFY];
  309.  
  310.             if (ArgumentArray[CX_POPKEY])
  311.             {
  312.                 strcpy(hotkey,(char *)ArgumentArray[CX_POPKEY]);
  313.             }
  314.  
  315.             if (RDA->RDA_Source.CS_Buffer)
  316.             {
  317.                 FreeVec(RDA->RDA_Source.CS_Buffer);
  318.             }
  319.  
  320.         }
  321.         else
  322.         {
  323.             if (argc==0)
  324.             {
  325.                 doreq("Arguments Incorrect",bum);
  326.             }
  327.             else
  328.             {
  329.                 PrintFault(IoErr(), NULL);
  330.             }
  331.  
  332.             return(0);
  333.         }
  334.  
  335.         FreeArgs(RDA);
  336.         FreeDosObject(DOS_RDARGS,RDA);
  337.             CloseLibrary(IconBase);
  338.     }
  339.     else
  340.     {
  341.         doreq("Can't open icon.library",bum);
  342.         return(0);
  343.     }
  344.     return(1);
  345. }
  346.  
  347. int doreq(char *mes, char *but)
  348. {
  349.     LONG answer;
  350.  
  351.     answer= EasyRequest(NULL, &ereq, NULL, mes, but);
  352.  
  353.     if (Project0Wnd)
  354.     {
  355.         SetWindowTitles(Project0Wnd,Project0Wdt, (UBYTE *) ~0);
  356.     }
  357.  
  358.     return(answer);
  359. }
  360.  
  361. BOOL makevars(void)
  362. {
  363.     if ( pophost=AllocVec((7*BIGSTRING)+(3*SMALLSTRING)+(2*BUFSIZE)+(256),MEMF_CLEAR) )
  364.     {
  365.         username=pophost+BIGSTRING;
  366.         password=username+SMALLSTRING;
  367.         passfake=password+SMALLSTRING;
  368.         maildir=passfake+SMALLSTRING;
  369.         cxname=maildir+BIGSTRING;
  370.         cxdesc=cxname+BIGSTRING;
  371.         hotkey=cxdesc+(3*BIGSTRING);
  372.         title=hotkey+BIGSTRING;
  373.         temp=title+256;
  374.         buf=temp+BUFSIZE;
  375.         return(FALSE);
  376.     }
  377.     return(TRUE);
  378. }
  379.  
  380. void freevars(void)
  381. {
  382.     if (pophost) FreeVec(pophost);
  383. }