home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / acc / utility / dfree21 / dfree21.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-22  |  4.5 KB  |  143 lines

  1. /************************************************************************/
  2. /**                                                                    **/
  3. /**  : DFREE21.C                               Last Updated: Dec.22/90 **/
  4. /**  : By Chris Herborth                                               **/
  5. /**                                                                    **/
  6. /**  : A desk accessory that tells you how much free disk space is on  **/
  7. /**    the selected drive...                                           **/
  8. /**    As of v2.1, you also get the amount of free RAM on the system.  **/
  9. /**                                                                    **/
  10. /************************************************************************/
  11. #include <osbind.h>
  12. #include <gemdefs.h>
  13. #include <obdefs.h>
  14. #include <dfree21.h>
  15.  
  16. /************************************************************************/
  17. /**  : RSC file pulled form RSCTOC.TTP...  Modified slightly so it'll  **/
  18. /**    compile properly...                                             **/
  19. /************************************************************************/
  20. #include <dfree21r.c>
  21.  
  22. extern int gl_apid;
  23. OBJECT *dfree_dial;
  24.  
  25. main()
  26. {
  27.     int menu_id, msg[8], loop, butt, disk, dum;
  28.  
  29.     /* Tell GEM that we're awake...                                     */
  30.     appl_init();
  31.     /* See if GEM wants to sleep in...                                  */
  32.     if( gl_apid == -1 )
  33.         Pterm0();
  34.  
  35.     /* We want a menu spot!                                             */
  36.     menu_id = menu_register( gl_apid, "  Disk Free 2.1 " );
  37.     /* If there's no room at the inn, we leave...                       */
  38.     if( menu_id == -1 )
  39.     {
  40.         Cconws( "\33pDFree 2.1\33q:  Unable to initialize!\n\r" );
  41.         appl_exit();
  42.         Pterm0();
  43.     }
  44.  
  45.     fix_objects();
  46.  
  47.     dfree_dial = &(rs_object[0]);
  48.  
  49.     /* Do this forever...                                               */
  50.     for( ;; )
  51.     {
  52.         /* Are there any messages for us?                               */
  53.         evnt_mesag( msg );
  54.  
  55.         if( msg[0] == AC_OPEN && msg[4] == menu_id ) 
  56.             if( msg[4] == menu_id )
  57.                 do_dfree();
  58.     }
  59.  
  60.     /* I don't have to clean anything up, 'cause this never ends!!!!     */
  61. }
  62.  
  63. do_dfree()
  64. {
  65.     long vld_drv, disk_bytes, disk_k, total_bytes, total_k, mem_free;
  66.     int  loop, x, y, w, h, butt;
  67.     char *kfree, *bfree, *memfree, *drv;
  68.     TEDINFO *tmp;
  69.  
  70.     disk_info free;
  71.  
  72.     tmp     = (TEDINFO *)dfree_dial[KFREE].ob_spec;
  73.     kfree   = tmp->te_ptext;
  74.     tmp     = (TEDINFO *)dfree_dial[BFREE].ob_spec;
  75.     bfree   = tmp->te_ptext;
  76.     tmp     = (TEDINFO *)dfree_dial[RAMTEXT].ob_spec;
  77.     memfree = tmp->te_ptext;
  78.     drv     = dfree_dial[DRIVETXT].ob_spec;
  79.  
  80.     fill_blank( kfree, 7 );
  81.     fill_blank( bfree, 10 );
  82.     fill_blank( memfree, 5 );
  83.     fill_blank( drv, 2 );
  84.     kfree[0] = '0';
  85.     bfree[0] = '0';
  86.     drv[0]   = 'A';
  87.     drv[1]   = ':';
  88.  
  89.     mem_free = Malloc( -1L );
  90.     ltoa( (mem_free >> 10), memfree );
  91.     for( loop = 0; memfree[loop] != 0x00; loop++ )
  92.         ;
  93.     memfree[loop] = 'k';
  94.  
  95.     vld_drv = Drvmap();
  96.     butt = 1;
  97.     for( loop = 0; loop < 16; loop++ )
  98.     {
  99.         if( vld_drv & butt )
  100.         {
  101.             dfree_dial[DRV_A + loop].ob_state &= (!DISABLED | SHADOWED);
  102.             dfree_dial[DRV_A + loop].ob_flags |= (SELECTABLE | TOUCHEXIT);
  103.         }
  104.         else
  105.         {
  106.             dfree_dial[DRV_A + loop].ob_state |= (DISABLED | SHADOWED);
  107.             dfree_dial[DRV_A + loop].ob_flags &= !SELECTABLE;
  108.         }
  109.         butt *= 2;
  110.     }
  111.  
  112.     form_center( dfree_dial, &x,&y,&w,&h );
  113.     x -= 5; y -= 5; w += 10; h += 10;
  114.  
  115.     form_dial( FMD_START, 0,0,0,0, x,y,w,h );
  116.  
  117.     butt = DRV_A;
  118.     while( butt != DONEBUTT )
  119.     {
  120.         objc_draw( dfree_dial, ROOT, MAX_DEPTH, x,y,w,h );
  121.         butt = form_do( dfree_dial, 0 );
  122.         if( butt != DONEBUTT )
  123.         {
  124.             graf_mouse( 2, 0L );
  125.             Dfree( &free, butt - DRV_A + 1 );
  126.             drv[0] = butt - DRV_A + 'A';
  127.             graf_mouse( 0, 0L );
  128.  
  129.             disk_bytes  = free.b_clsiz * free.b_secsiz * free.b_free;
  130.             total_bytes = free.b_clsiz * free.b_secsiz * free.b_total;
  131.             disk_k      = disk_bytes >> 10;
  132.             total_k     = total_bytes >> 10;
  133.  
  134.             ltoa( disk_k, kfree );
  135.             ltoa( disk_bytes, bfree );
  136.         }
  137.         dfree_dial[butt].ob_state ^= SELECTED;
  138.     }
  139.  
  140.     form_dial( FMD_FINISH, 0,0,0,0, x,y,w,h );
  141. }
  142.  
  143.