home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / util / memminister-1.1.lha / MemMinister / Source / MemMinister.c < prev    next >
C/C++ Source or Header  |  1994-08-28  |  11KB  |  317 lines

  1. /*
  2. **  MemMinister is copyright by Marcus Ohlström 1994. All rights reserved
  3. */
  4.  
  5. #include "memminister.h"
  6. #include "memminister_rev.h"
  7. /*#include <stdio.h>*/
  8.  
  9. UBYTE *ver = VERSTAG ;
  10.  
  11. LONG __oslibversion = 37 ;
  12.  
  13. void __regargs __chkabort(void);
  14. void __regargs __chkabort(void){}  /* Oskadliggör hanteringen av CTRL-C */
  15.  
  16. struct TextAttr textattr ;  /* initieras av layoutAll() */
  17.  
  18. UWORD snap_borData[2][6]  = { {0,0,0,0,0,0},{0,0,0,0,0,0} } ;
  19. UWORD flush_borData[2][6] = { {0,0,0,0,0,0},{0,0,0,0,0,0} } ;
  20.  
  21. struct Border snap_bor[] = 
  22. {
  23.     { 0, 0, 2, 0, JAM1, 3, snap_borData[0], &snap_bor[1] },
  24.     { 0, 0, 1, 0, JAM1, 3, snap_borData[1], NULL }
  25. } ;
  26.  
  27. struct Border flush_bor[] = 
  28. {
  29.     { 0, 0, 2, 0, JAM1, 3, flush_borData[0], &flush_bor[1] },
  30.     { 0, 0, 1, 0, JAM1, 3, flush_borData[1], NULL }
  31. } ;
  32.  
  33. struct IntuiText snap_gadText[] = 
  34. {
  35.     { 1, 0, JAM2, 10, 2, &textattr, "Free",     &snap_gadText[1] },
  36.     { 1, 0, JAM2, 45, 2, &textattr, "Snapped",  &snap_gadText[2] },
  37.     { 1, 0, JAM2, 90, 2, &textattr, "Used",     NULL },
  38. } ;
  39.  
  40. struct IntuiText flush_gadText =
  41.     { 1, 0, JAM2, 4,  2, &textattr, "Flush",    NULL } ;
  42.  
  43. struct Gadget snap_gad =  { NULL,     54, 12, 100, 12, GFLG_GADGHCOMP, GACT_RELVERIFY, GTYP_BOOLGADGET,  &snap_bor, NULL,   snap_gadText, NULL, NULL,  SNAP_GAD, NULL } ;
  44. struct Gadget flush_gad = { &snap_gad, 4, 12,  28, 12, GFLG_GADGHCOMP, GACT_RELVERIFY, GTYP_BOOLGADGET, &flush_bor, NULL, &flush_gadText, NULL, NULL, FLUSH_GAD, NULL } ;
  45.  
  46. struct Image image = { 0, 0, 0, 0, 0, NULL, 0, 0, NULL } ;
  47.  
  48. ULONG chip_snapped = 0, fast_snapped = 0 ;
  49. ULONG old_chip_free = 0, old_fast_free = 0 ;
  50.  
  51. /*  nedanstående initieras i layouotAll()  */
  52. ULONG chip_XPos, fast_XPos, total_XPos ;
  53. ULONG win_Width ;
  54. ULONG chip_YPos, fast_YPos, total_YPos ;
  55. ULONG text_RightX, free_RightX, snapped_RightX, used_RightX ;
  56. LONG number_length ;
  57.  
  58. UBYTE *chip_text = "Chip" , *fast_text = "Fast", *total_text = "Total" ;
  59.  
  60. UBYTE str[11] ; /* <-  11 istället för STRLEN gör att fönstret ser        */
  61.                 /* konstigt ut om STRLEN är för litet, men programmet     */
  62.                 /* krashar inte!! (Vilket det gör om det står STRLEN här) */
  63.  
  64. struct IntuiText iText = { 1, 0, JAM2, 0, 0, &textattr, str, NULL } ;
  65.  
  66. WORD zoomsize[] = { ~0, ~0, 20 + 10 + (STRLEN-1)*8 + 10 + 26 + 26, 11 } ;
  67.  
  68. struct Window *win ;
  69. struct Screen *scr ;
  70.  
  71. STRPTR wintitle = "MemMinister  1.1" ;
  72.  
  73. VOID main( VOID )
  74. {
  75.     LONG lng;
  76.     BOOL done = FALSE ;
  77.     struct IntuiMessage *iMsg ;
  78.     ULONG class ;
  79.     struct Gadget *gad ;
  80.     
  81.     if( scr = LockPubScreen( NULL ) )
  82.     {
  83.         /* layoutAll() initierar bla textattr => använd EJ textattr innan */
  84.         layoutAll() ;
  85.         if( win = OpenWindowTags( NULL,
  86. /*
  87.             WA_Left,            100,
  88.             WA_Top,             20,
  89. */
  90.             WA_Width,           win_Width,
  91.             WA_InnerHeight,     scr->RastPort.Font->tf_YSize * 4 + 3 + 1,
  92.             WA_Title,           wintitle,
  93.             WA_ScreenTitle,     "MemMinister 1.1  © Marcus Ohlström",
  94.             WA_Gadgets,         &flush_gad,
  95.             WA_Zoom,            zoomsize,
  96.             WA_AutoAdjust,      TRUE,
  97.             WA_Flags,   WFLG_CLOSEGADGET | WFLG_DEPTHGADGET | WFLG_DRAGBAR,
  98.             WA_IDCMP,   IDCMP_CLOSEWINDOW | IDCMP_GADGETUP | IDCMP_NEWSIZE,
  99.             TAG_END ) )
  100.         {
  101.             writeInit() ;
  102.             writeSnapped( AvailMem(MEMF_CHIP), AvailMem(MEMF_FAST) ) ;
  103.             while( !done )
  104.             {
  105.                 if( !(win->Flags & WFLG_ZOOMED) )
  106.                     writeFree( AvailMem(MEMF_CHIP), AvailMem(MEMF_FAST) ) ;
  107.                 else {
  108.                     lng = AvailMem(MEMF_ANY) ;
  109.                     RawDoFmt("%ld", &lng, (void (*))"\x16\xc0\x4e\x75", str);
  110.                     SetWindowTitles( win, str, (UBYTE *)~0 ) ;
  111.                 }
  112.                 Delay( UPDATEDELAY ) ;
  113.                 
  114.                 /*   denna sats bör ligga här för att programmet inte   */
  115.                 /*   ska vänta ytterligare UPDATEDELAY*1/50 sec efter   */
  116.                 /*   IDCMP-meddelanden                                  */
  117.                 /*                                                      */
  118.                 while( iMsg = (struct IntuiMessage *)GetMsg( win->UserPort ) )
  119.                 {
  120.                     class = iMsg->Class ;
  121.                     gad   = (struct Gadget *)iMsg->IAddress ;
  122.                     /*  använd INTE gad om class != IDCMP_GADGETUP  */
  123.                     ReplyMsg( (struct Message *)iMsg ) ;
  124.  
  125.                     switch( class )
  126.                     {
  127.                         case IDCMP_GADGETUP:
  128.                                 switch( gad->GadgetID )
  129.                                 {
  130.                                     case FLUSH_GAD:
  131.                                         AllocMem( 0, 0 ) ;
  132.                                         break;
  133.                                     case SNAP_GAD:
  134.                                         writeSnapped( AvailMem(MEMF_CHIP), AvailMem(MEMF_FAST) ) ;
  135.                                         writeUsed( 0, 0 ) ;
  136.                                 }
  137.                                 break ;
  138.                         case IDCMP_NEWSIZE:
  139.                                 if( !(win->Flags & WFLG_ZOOMED) )
  140.                                 {
  141.                                     SetWindowTitles( win, wintitle, (UBYTE *)~0 ) ;
  142.                                     writeInit() ;
  143.                                     writeSnapped( chip_snapped, fast_snapped ) ;
  144.                                     old_chip_free = old_fast_free = 0 ;
  145.                                     /* ^ för att free-fälten ska ritas om */
  146.                                 }
  147.                                 break;
  148.                         case IDCMP_CLOSEWINDOW:
  149.                                 done = TRUE ;
  150.                     }
  151.                 }
  152.             }
  153.             CloseWindow( win ) ;
  154.         }
  155.         UnlockPubScreen( NULL, scr ) ;
  156.     }
  157. }
  158.  
  159. VOID layoutAll( VOID )
  160. {
  161.     LONG chip_length, fast_length, total_length, max_length, flush_length ;
  162.     struct TextFont *Font = scr->RastPort.Font ;
  163.     
  164.     number_length = digit_maxlength() ;
  165.     
  166.     textattr.ta_Name  = Font->tf_Message.mn_Node.ln_Name ;
  167.     textattr.ta_YSize = Font->tf_YSize ;
  168.     textattr.ta_Style = Font->tf_Style ;
  169.     textattr.ta_Flags = Font->tf_Flags ;
  170.     
  171.     zoomsize[2] = 20 + number_length + 6 + 26 + 26 ;
  172.     zoomsize[3] = 3 + textattr.ta_YSize ;
  173.     
  174.     iText.IText = chip_text ;   chip_length  = IntuiTextLength( &iText ) ;
  175.     iText.IText = fast_text ;   fast_length  = IntuiTextLength( &iText ) ;
  176.     iText.IText = total_text ;  total_length = IntuiTextLength( &iText ) ;
  177.                                 flush_length = IntuiTextLength( &flush_gadText ) ;
  178.     
  179.     max_length = MAX( MAX(chip_length, fast_length), MAX(total_length, flush_length) ) ;
  180.     
  181.     total_YPos = textattr.ta_YSize +
  182.         (fast_YPos = textattr.ta_YSize +
  183.         (chip_YPos = scr->WBorTop + 1 + 2*textattr.ta_YSize + 3 + 1)) ;
  184.     
  185.     win_Width = scr->WBorRight + 4 +
  186.         (used_RightX = number_length +
  187.         (snapped_RightX = number_length +
  188.         (free_RightX = number_length +
  189.         (text_RightX = scr->WBorLeft + 2 + max_length)))) ;
  190.     
  191.     flush_gad.LeftEdge = scr->WBorRight ;
  192.     flush_gad.TopEdge  = textattr.ta_YSize + 3 ;
  193.     flush_gad.Width    = 2 + max_length + 5 ;
  194.     flush_gad.Height   = textattr.ta_YSize + 3 ;
  195.     
  196.     snap_gad.LeftEdge = scr->WBorRight + flush_gad.Width ;
  197.     snap_gad.TopEdge  = flush_gad.TopEdge ;
  198.     snap_gad.Width    = win_Width-8-flush_gad.Width ;
  199.     snap_gad.Height   = flush_gad.Height ;
  200.     
  201.     buildBoolBorder( &flush_gad ) ;
  202.     buildBoolBorder(  &snap_gad ) ;
  203.     
  204.     snap_gadText[0].LeftEdge = text_RightX    - flush_gad.Width + (number_length - IntuiTextLength(&snap_gadText[0]))/2 ;
  205.     snap_gadText[1].LeftEdge = free_RightX    - flush_gad.Width + (number_length - IntuiTextLength(&snap_gadText[1]))/2 ;
  206.     snap_gadText[2].LeftEdge = snapped_RightX - flush_gad.Width + (number_length - IntuiTextLength(&snap_gadText[2]))/2 ;
  207.     
  208.     image.Height = textattr.ta_YSize ;
  209.     
  210.     chip_XPos  = text_RightX - chip_length  ;
  211.     fast_XPos  = text_RightX - fa