home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / util / gblanker-38.8.lha / GBlanker / GSource / main.c < prev    next >
C/C++ Source or Header  |  1994-12-02  |  5KB  |  202 lines

  1. /*
  2.  *  Copyright (c) 1994 Michael D. Bayne.
  3.  *  All rights reserved.
  4.  *
  5.  *  Please see the documentation accompanying the distribution for distribution
  6.  *  and disclaimer information.
  7.  */
  8.  
  9. #include <exec/memory.h>
  10. #include <dos/dos.h>
  11. #include <devices/timer.h>
  12. #include <string.h>
  13.  
  14. #include "includes.h"
  15. #include "libraries.h"
  16. #include "protos/protos.h"
  17.  
  18. __far extern LONG RangeSeed;
  19. STATIC const UBYTE VersTag[] = VERSTAG;
  20.  
  21. LONG Blanking = FALSE, BlankAfterInit = FALSE;
  22. struct MsgPort *ServerPort, *TimerPort;
  23. struct timerequest *TimeOutIO;
  24. struct List *BlankerEntries;
  25. struct Task *ServerTask, *PingTask = 0L;
  26. BlankerPrefs *Prefs;
  27. BYTE ProgName[108];
  28. LONG RetVal;
  29.  
  30. int main( void )
  31. {
  32.     LONG Sigs;
  33.  
  34.     RangeSeed = ( LONG )( ServerTask = FindTask( 0L ));
  35.     
  36.     if( RetVal = AllocResources())
  37.     {
  38.         FreeResources( RetVal );
  39.         return RETURN_FAIL;
  40.     }
  41.  
  42.     Prefs = LoadDefaultPrefs();
  43.     BlankerEntries = LoadBlankerEntries( Prefs->bp_Dir );
  44.     if(!( Prefs->bp_Flags & BF_REPLACE )||
  45.        Stricmp( Prefs->bp_Blanker, "Random" ))
  46.         LoadModule( Prefs->bp_Dir, Prefs->bp_Blanker );
  47.  
  48.     if( SetupCX() == QUIT )
  49.     {
  50.         FreeResources( 0 );
  51.         return RETURN_WARN;
  52.     }
  53.  
  54.     if( Prefs->bp_PopUp )
  55.         RetVal = OpenInterface();
  56.  
  57.     do
  58.     {
  59.         Sigs = Wait( SIG_CX | ISigs() | SIG_SERVPORT | SIGBREAKF_CTRL_C | 
  60.                     SIGBREAKF_CTRL_D );
  61.         
  62.         if( Sigs & SIG_SERVPORT )
  63.             RetVal = HandleServerMsg();
  64.  
  65.         if( Sigs & SIG_CX )
  66.             RetVal = HandleCxMess();
  67.  
  68.         if( Sigs & SIGBREAKF_CTRL_C )
  69.             RetVal = 0L;
  70.  
  71.         if( Sigs & SIGBREAKF_CTRL_D )
  72.             RetVal = HandleMouseCheck();
  73.                         
  74.         if( Sigs & ISigs())
  75.             RetVal = HandleInterface();
  76.  
  77.         switch( RetVal )
  78.         {
  79.         case CLOSEWIN:
  80.             CloseInterface();
  81.             break;
  82.         case RESTART:
  83.             CloseInterface();
  84.             ShutdownCX();
  85.             FreeBlankerEntries( BlankerEntries );
  86.             Prefs = LoadDefaultPrefs();
  87.             BlankerEntries = LoadBlankerEntries( Prefs->bp_Dir );
  88.             if(( RetVal = SetupCX()) == OK )
  89.                 RetVal = OpenInterface();
  90.             break;
  91.         }
  92.     }
  93.     while( RetVal );
  94.  
  95.     FreeResources( 0 );
  96.  
  97.     return RETURN_OK;
  98. }
  99.  
  100. VOID SafeKill( STRPTR PortName )
  101. {
  102.     ULONG Sigs;
  103.  
  104.     if( !FindPort( PortName ))
  105.         return;
  106.  
  107.     MessageModule( PortName, BM_DOQUIT );
  108.  
  109.     if( !CheckIO(( struct IORequest * )TimeOutIO ))
  110.     {
  111.         AbortIO(( struct IORequest * )TimeOutIO );
  112.         WaitIO(( struct IORequest * )TimeOutIO );
  113.         SetSignal( 0L, SIG_TIMER );
  114.     }
  115.  
  116.     TimeOutIO->tr_node.io_Command = TR_ADDREQUEST;
  117.     TimeOutIO->tr_time.tv_secs = 2;
  118.     TimeOutIO->tr_time.tv_micro = 0;
  119.     SendIO(( struct IORequest * )TimeOutIO );
  120.  
  121.     Sigs = Wait( SIG_SERVPORT | SIG_TIMER );
  122.  
  123.     if( Sigs & SIG_SERVPORT )
  124.     {
  125.         AbortIO(( struct IORequest * )TimeOutIO );
  126.         HandleServerMsg();
  127.     }
  128.  
  129.     WaitIO(( struct IORequest * )TimeOutIO );
  130.     SetSignal( 0L, SIG_TIMER );
  131. }
  132.  
  133. VOID FreeResources( LONG Level )
  134. {
  135.     switch( Level )
  136.     {
  137.     case 0:
  138.         if( PingTask )
  139.         {
  140.             Signal( PingTask, SIGBREAKF_CTRL_C );
  141.             SetTaskPri( PingTask, 1 );
  142.             PingTask = 0L;
  143.         }
  144.         SafeKill( "GarshneClient" );
  145.         SafeKill( "GarshnePrefs" );
  146.     case 1:
  147.         CloseInterface();
  148.     case 2:
  149.         FreeBlankerEntries( BlankerEntries );
  150.     case 3:
  151.         if( TimeOutIO )
  152.         {
  153.             if( TimeOutIO->tr_node.io_Device )
  154.                 CloseDevice(( struct IORequest * )TimeOutIO );
  155.             DeleteExtIO(( struct IORequest * )TimeOutIO );
  156.         }
  157.     case 4:
  158.         if( TimerPort )
  159.             DeletePort( TimerPort );
  160.         if( ServerPort )
  161.             DeletePort( ServerPort );
  162.     case 5:
  163.         ShutdownCX();
  164.     case 6:
  165.         CloseLibraries();
  166.     }
  167. }
  168.  
  169. LONG AllocResources( VOID )
  170. {
  171.     struct Process *Proc;
  172.  
  173.     Proc = ( struct Process * )ServerTask;
  174.     
  175.     if( !Proc->pr_CLI )
  176.         strcpy( ProgName, WBenchMsg->sm_ArgList->wa_Name );
  177.     else
  178.         strcpy( ProgName, "PROGDIR:Garshneblanker" );
  179.  
  180.     if( OpenLibraries() == 1L )
  181.         return 6L;
  182.  
  183.     if( CheckCX() == QUIT )
  184.         return 6L;
  185.  
  186.     ServerPort = CreatePort( "GarshneServer", 0 );
  187.     TimerPort = CreatePort( 0L, 0 );
  188.     if( !ServerPort || !TimerPort )
  189.         return 5L;
  190.  
  191.     TimeOutIO = ( struct timerequest * )
  192.         CreateExtIO( TimerPort, sizeof( struct timerequest ));
  193.     if( !TimeOutIO )
  194.         return 4L;
  195.  
  196.     if( OpenDevice( "timer.device", UNIT_VBLANK,
  197.                    ( struct IORequest * )TimeOutIO, 0L ))
  198.         return 3L;
  199.  
  200.     return 0L;
  201. }
  202.