home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 06 / praxis / diskfree.c < prev    next >
Text File  |  1991-02-28  |  7KB  |  226 lines

  1. /*----------------------------------------------------------
  2.  -                   Windows DISKFREE.C                    -
  3.  -          (c)  1991  toolbox  &  U.Schmitz               -  
  4.  ---------------------------------------------------------*/
  5.  
  6.  #include <windows.h>
  7.  #include <dos.h>
  8.  #include <string.h>
  9.  #include <stdlib.h>
  10.  
  11.  #define BLOCK 100
  12.  
  13. /*------------------------------------------------
  14.   Prototyp der Fensterfunktion
  15.  --------------------------------------------------*/
  16.  
  17.  long FAR PASCAL Fenster (HWND, WORD, WORD, LONG);
  18.  HDC hdc;
  19.  static char szAppName[] = "Diskfree";
  20.  HANDLE hInst;
  21.  
  22.  
  23. /*------------------------------------------------
  24.   Unterprogramme
  25.   -------------------------------------------------*/
  26.   
  27.  void diskfree()
  28.   {
  29.    struct diskfree_t lwinfo;
  30.    
  31.    unsigned yfrei=0, yganz=0, lw, lw_new, partitions, 
  32.             x_start, abstand, i;
  33.    
  34.    long faktor, free_sectors=0, max_sectors=0, 
  35.         highest_sectors=0;
  36.    
  37.    char text[30], copyright[50];
  38.    
  39.    i = 0;
  40.    partitions = 0;
  41.    lw = 3;                           /* 3=C, 4=D usw.     */
  42.    lw_new = lw;
  43.    
  44.    while(lw == lw_new)
  45.         {
  46.          partitions++;
  47.          _dos_setdrive(++lw, &i);
  48.          _dos_getdrive(&lw_new);
  49.         }
  50.   
  51.    abstand = 635 - (partitions * BLOCK); /* Fensterbreite */
  52.    x_start = abstand/(partitions + 1);   /* anpassen      */
  53.    abstand = x_start;
  54.  
  55. /*****  Maximale Plattengröße ermitteln!!!!  **************/
  56.  
  57.    for( i=3; i < (partitions+3); i++)
  58.       {
  59.         _dos_getdiskfree(i, &lwinfo);
  60.         
  61.         max_sectors  = ((long)lwinfo.total_clusters *
  62.                          lwinfo.sectors_per_cluster *
  63.                          lwinfo.bytes_per_sector );  
  64.  
  65.         if (max_sectors > highest_sectors)
  66.             highest_sectors = max_sectors;     
  67.       }
  68.    faktor = highest_sectors/320;
  69.    
  70. /**********************************************************/  
  71.    for( i=3; i < (partitions+3); i++)
  72.       {
  73.         _dos_getdiskfree(i, &lwinfo);
  74.         
  75.         max_sectors  = ((long)lwinfo.total_clusters *
  76.                          lwinfo.sectors_per_cluster *
  77.                          lwinfo.bytes_per_sector );  
  78.  
  79.         free_sectors = ((long)lwinfo.avail_clusters *
  80.                          lwinfo.sectors_per_cluster *
  81.                          lwinfo.bytes_per_sector );  
  82.  
  83.         wsprintf(text, " Laufwerk %c:                 ", 
  84.                  'A'+i-1);
  85.         
  86.         TextOut(hdc, x_start-20, 350, text, 27);
  87.         wsprintf(text, " %08ld Bytes frei ", free_sectors);
  88.         TextOut(hdc, x_start-20, 365, text, 21);
  89.  
  90.         yganz  = (unsigned)(max_sectors /faktor);
  91.         yfrei  = (unsigned)(free_sectors/faktor);
  92.  
  93.         SelectObject(hdc,GetStockObject(WHITE_BRUSH));
  94.         Rectangle (hdc, x_start,350, x_start+BLOCK, 
  95.                    350-yganz);
  96.          
  97.         SelectObject(hdc,GetStockObject(GRAY_BRUSH));  
  98.         Rectangle (hdc, x_start,350, x_start+BLOCK, 
  99.                    350-(yganz-yfrei));
  100.         
  101.         x_start+=(abstand+BLOCK);
  102.        }
  103.         SelectObject(hdc,GetStockObject(GRAY_BRUSH));  
  104.         Rectangle (hdc, 15, 415, 620, 445); 
  105.         
  106.         SelectObject(hdc,GetStockObject(WHITE_BRUSH));
  107.         Rectangle (hdc, 20, 420, 615, 440);
  108.         wsprintf(copyright, 
  109.         "DISKFREE 1.0   (C) 1991 Ulrich Schmitz & toolbox");
  110.         TextOut(hdc, 150, 421, copyright, 48);
  111.    }
  112.  
  113.  
  114. /*------------------------------------------------
  115.   Hier ist der Eintrittspunkt des Programms
  116.  --------------------------------------------------*/
  117.  
  118.  int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  119.                          LPSTR lpszCmdParam, int nCmdShow)
  120.  {
  121.    HWND         hwnd;
  122.    MSG          msg;
  123.    WNDCLASS     wndclass;
  124.    HANDLE       handle;
  125.  
  126.    if (!hPrevInstance)
  127.    {
  128.  
  129. /*------------------------------------------------
  130.   Hier wird die Fensterklasse definiert
  131.  --------------------------------------------------*/
  132.  wndclass.style            = CS_HREDRAW | CS_VREDRAW ;
  133.  wndclass.lpfnWndProc      = Fenster;
  134.  wndclass.cbClsExtra       = 0;
  135.  wndclass.cbWndExtra       = 0;
  136.  wndclass.hInstance        = hInstance;
  137.  wndclass.hIcon            = LoadIcon(hInstance, szAppName);
  138.  wndclass.hCursor          = LoadCursor(NULL, IDC_ARROW);
  139.  wndclass.hbrBackground    = GetStockObject(LTGRAY_BRUSH);
  140.  wndclass.lpszMenuName     = NULL;
  141.  wndclass.lpszClassName    = szAppName ;
  142.  
  143. /*------------------------------------------------
  144.   Hier wird die Fensterklasse registriert
  145.  --------------------------------------------------*/
  146.  
  147.     RegisterClass (&wndclass);
  148.    }
  149.  
  150.    hInst = hInstance;
  151.  
  152.    hwnd = CreateWindow (szAppName,
  153.                     "Diskfree",
  154.                     WS_OVERLAPPEDWINDOW,
  155.                     CW_USEDEFAULT,
  156.                     CW_USEDEFAULT,
  157.                     CW_USEDEFAULT,
  158.                     CW_USEDEFAULT,
  159.                     NULL,
  160.                     NULL,
  161.                     hInstance,
  162.                     NULL);
  163.  
  164. /*------------------------------------------------
  165.   Darstellen des Fensters und des Client-Bereichs
  166.  --------------------------------------------------*/
  167.  
  168.    ShowWindow(hwnd, nCmdShow) ;
  169.    UpdateWindow (hwnd);
  170.  
  171. /*------------------------------------------------
  172.   Warten auf eine Nachricht
  173.  --------------------------------------------------*/
  174.  
  175.    while (GetMessage (&msg, NULL, 0, 0))
  176.           {
  177.            TranslateMessage (&msg);
  178.            DispatchMessage (&msg);
  179.           }
  180.           return msg.wParam;
  181.    }
  182.  
  183. /*------------------------------------------------
  184.   Definition der Fensterfunktion
  185.  --------------------------------------------------*/
  186.  
  187.  long FAR PASCAL Fenster (HWND hwnd, WORD message, 
  188.                           WORD wParam, LONG lParam)
  189.  {
  190.   static HICON hIcon;
  191.   PAINTSTRUCT   ps;
  192.   RECT          rect;
  193.  
  194. /*------------------------------------------------
  195.   Hier werden eintreffende Nachrichten verarbeitet
  196.  --------------------------------------------------*/
  197.  
  198.   switch(message)
  199.   {
  200.    case WM_CREATE :
  201.           return 0;
  202.  
  203.    case WM_PAINT :
  204.           hIcon = LoadIcon (hInst, szAppName);
  205.           hdc = BeginPaint (hwnd, &ps);
  206.           GetClientRect (hwnd, &rect) ;
  207.  
  208. /** Eigentliche Zeichen- und Arbeitsroutine ***************/
  209.  
  210.    diskfree();
  211.  
  212. /**********************************************************/
  213.  
  214.    EndPaint (hwnd, &ps);
  215.    return 0;
  216.  
  217.    case WM_DESTROY :
  218.           PostQuitMessage (0);
  219.           return 0;
  220.    }
  221.  
  222.    return DefWindowProc (hwnd, message, wParam, lParam);
  223. }
  224. /*----------------------------------------------------------
  225. -                   Ende von DISKFREE.C                   */
  226.