/************************************************************************/ /** **/ /** : DFREE21.C Last Updated: Dec.22/90 **/ /** : By Chris Herborth **/ /** **/ /** : A desk accessory that tells you how much free disk space is on **/ /** the selected drive... **/ /** As of v2.1, you also get the amount of free RAM on the system. **/ /** **/ /************************************************************************/ #include #include #include #include /************************************************************************/ /** : RSC file pulled form RSCTOC.TTP... Modified slightly so it'll **/ /** compile properly... **/ /************************************************************************/ #include extern int gl_apid; OBJECT *dfree_dial; main() { int menu_id, msg[8], loop, butt, disk, dum; /* Tell GEM that we're awake... */ appl_init(); /* See if GEM wants to sleep in... */ if( gl_apid == -1 ) Pterm0(); /* We want a menu spot! */ menu_id = menu_register( gl_apid, " Disk Free 2.1 " ); /* If there's no room at the inn, we leave... */ if( menu_id == -1 ) { Cconws( "\33pDFree 2.1\33q: Unable to initialize!\n\r" ); appl_exit(); Pterm0(); } fix_objects(); dfree_dial = &(rs_object[0]); /* Do this forever... */ for( ;; ) { /* Are there any messages for us? */ evnt_mesag( msg ); if( msg[0] == AC_OPEN && msg[4] == menu_id ) if( msg[4] == menu_id ) do_dfree(); } /* I don't have to clean anything up, 'cause this never ends!!!! */ } do_dfree() { long vld_drv, disk_bytes, disk_k, total_bytes, total_k, mem_free; int loop, x, y, w, h, butt; char *kfree, *bfree, *memfree, *drv; TEDINFO *tmp; disk_info free; tmp = (TEDINFO *)dfree_dial[KFREE].ob_spec; kfree = tmp->te_ptext; tmp = (TEDINFO *)dfree_dial[BFREE].ob_spec; bfree = tmp->te_ptext; tmp = (TEDINFO *)dfree_dial[RAMTEXT].ob_spec; memfree = tmp->te_ptext; drv = dfree_dial[DRIVETXT].ob_spec; fill_blank( kfree, 7 ); fill_blank( bfree, 10 ); fill_blank( memfree, 5 ); fill_blank( drv, 2 ); kfree[0] = '0'; bfree[0] = '0'; drv[0] = 'A'; drv[1] = ':'; mem_free = Malloc( -1L ); ltoa( (mem_free >> 10), memfree ); for( loop = 0; memfree[loop] != 0x00; loop++ ) ; memfree[loop] = 'k'; vld_drv = Drvmap(); butt = 1; for( loop = 0; loop < 16; loop++ ) { if( vld_drv & butt ) { dfree_dial[DRV_A + loop].ob_state &= (!DISABLED | SHADOWED); dfree_dial[DRV_A + loop].ob_flags |= (SELECTABLE | TOUCHEXIT); } else { dfree_dial[DRV_A + loop].ob_state |= (DISABLED | SHADOWED); dfree_dial[DRV_A + loop].ob_flags &= !SELECTABLE; } butt *= 2; } form_center( dfree_dial, &x,&y,&w,&h ); x -= 5; y -= 5; w += 10; h += 10; form_dial( FMD_START, 0,0,0,0, x,y,w,h ); butt = DRV_A; while( butt != DONEBUTT ) { objc_draw( dfree_dial, ROOT, MAX_DEPTH, x,y,w,h ); butt = form_do( dfree_dial, 0 ); if( butt != DONEBUTT ) { graf_mouse( 2, 0L ); Dfree( &free, butt - DRV_A + 1 ); drv[0] = butt - DRV_A + 'A'; graf_mouse( 0, 0L ); disk_bytes = free.b_clsiz * free.b_secsiz * free.b_free; total_bytes = free.b_clsiz * free.b_secsiz * free.b_total; disk_k = disk_bytes >> 10; total_k = total_bytes >> 10; ltoa( disk_k, kfree ); ltoa( disk_bytes, bfree ); } dfree_dial[butt].ob_state ^= SELECTED; } form_dial( FMD_FINISH, 0,0,0,0, x,y,w,h ); }