home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser-CD 2001 January / LCD_01_2001.iso / develop / dhst / c / dhst.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-03  |  2.9 KB  |  133 lines

  1. #include    <mgx_dos.h>
  2. #include    <string.h>
  3. #include    <mt_aes.h>
  4. #include <cookies.h>
  5. #include    <portab.h>
  6.  
  7. #ifndef NULL
  8. #define NULL        ((void *)0L)
  9. #endif
  10.  
  11. #ifndef    DHST_ADD
  12. #define    DHST_ADD            0xdadd
  13. #endif
  14.  
  15. #if !defined (DHST_ACK)
  16. #define    DHST_ACK            0xdade
  17. #endif
  18.  
  19. #ifndef    DHSTINFO
  20. typedef struct
  21. {
  22.     char        *appname,
  23.                 *apppath,
  24.                 *docname,
  25.                 *docpath;
  26. } DHSTINFO;
  27. #endif
  28.  
  29. /* Definitions */
  30.  
  31. ULONG DHST_ServerId( VOID );
  32.  
  33.  
  34. ULONG    DHST_write( ULONG ap_id, ULONG count, UBYTE *appname, UBYTE *apppath,
  35.                                             UBYTE *docname, UBYTE *docpath);
  36.  
  37. ULONG    DHST_init( ULONG ap_id );
  38.  
  39. ULONG DHST_exit( ULONG ap_id, ULONG count );
  40.  
  41. ULONG DHST_evnt_ack( ULONG ap_id, ULONG count, ULONG msg0, ULONG msg3, ULONG msg4 );
  42.  
  43.  
  44.  
  45. ULONG DHST_ServerId( VOID )
  46. {
  47.     ULONG cookievalue;
  48.     ULONG noerror;
  49.     
  50.     noerror = Cookie_GetCookie( 'DHST', &cookievalue );
  51.     
  52.     if( noerror )
  53.         return( cookievalue );
  54.     else 
  55.         return( 0L );
  56. }
  57.  
  58. ULONG    DHST_write( ULONG ap_id, ULONG count, UBYTE *appname, UBYTE *apppath,
  59.                                             UBYTE *docname, UBYTE *docpath)
  60. {
  61.     UWORD    msg[8];
  62.     UWORD    server;
  63.     DHSTINFO    *datablock;
  64.     
  65.     if( server = (UWORD)DHST_ServerId() )
  66.     {    
  67.         datablock = Mxalloc( sizeof( DHSTINFO ), 3 + 0x20 ); 
  68.         datablock->appname = Mxalloc( sizeof( UBYTE ) * ( strlen( appname ) + 1 ), 3 + 0x20 );
  69.         datablock->apppath = Mxalloc( sizeof( UBYTE ) * ( strlen( apppath ) + 1 ), 3 + 0x20 );
  70.         datablock->docname = Mxalloc( sizeof( UBYTE ) * ( strlen( docname ) + 1 ), 3 + 0x20 );
  71.         datablock->docpath = Mxalloc( sizeof( UBYTE ) * ( strlen( docpath ) + 1 ), 3 + 0x20 );
  72.  
  73.         strcpy( datablock->appname, appname );
  74.         strcpy( datablock->apppath, apppath );
  75.         strcpy( datablock->docname, docname );
  76.         strcpy( datablock->docpath, docpath );
  77.  
  78.         msg[0] = DHST_ADD;
  79.         msg[1] = (UWORD)ap_id;
  80.         msg[2] = 0;
  81.         msg[3] = (UWORD)( ( (ULONG)datablock >> 16 ) & 0x0000ffffL );
  82.         msg[4] = (UWORD)( (ULONG)datablock & 0x0000ffffL );
  83.         msg[5] = 0;
  84.         msg[6] = 0;
  85.         msg[7] = 0;
  86.         appl_write( server, 16, msg );  /* Envoi du message */
  87.         count++;
  88.     }
  89.     
  90.     return( count );
  91. }
  92.  
  93.  
  94. ULONG    DHST_init( ULONG ap_id )
  95. {
  96.     
  97.     if( DHST_ServerId() )
  98.         return( 0 );
  99.     else
  100.         return( 1 );
  101. }
  102.  
  103. ULONG DHST_exit( ULONG ap_id, ULONG count )
  104. {
  105.     UWORD    msg[8];
  106.     
  107.     if( DHST_ServerId() )
  108.     {
  109.         while( count != 0 )
  110.         {
  111.             evnt_mesag( (WORD *)msg );
  112.             count = DHST_evnt_ack( ap_id, count, msg[0], msg[3], msg[4] );
  113.         }
  114.     }
  115.     return( 0 );
  116. }
  117.  
  118. ULONG DHST_evnt_ack( ULONG ap_id, ULONG count, ULONG msg0, ULONG msg3, ULONG msg4 )
  119. {
  120.     DHSTINFO    *datablock;
  121.  
  122.     if( ( msg0 == DHST_ACK ) )
  123.     {
  124.             datablock = (DHSTINFO *)( ( ( msg3 & 0xffffL ) << 16 ) + ( msg4 & 0xffffL ) );
  125.             Mfree( datablock->appname );
  126.             Mfree( datablock->apppath );
  127.             Mfree( datablock->docname );
  128.             Mfree( datablock->docpath );
  129.             Mfree( datablock );    
  130.             count--;        
  131.     }
  132.     return( count );
  133. }