home *** CD-ROM | disk | FTP | other *** search
- // Statistics.c
- // 19 Aug 1996 20:31:27
-
- #ifndef BACKUP_INCLUDE
- #include "IncludeAll.c"
- #endif
- #include "Backup.h"
- #include "Statistics.h"
- #include "Backup_Proto.h"
- #include "BackupStrings.h"
-
-
- #define GW 70 // Gadget-Breite
- #define GH 15 // Gadget-Höhe
- #define BGCOLOR 0
- #define FGCOLOR 1
-
-
- static UWORD ComputeX( UWORD value );
- static UWORD ComputeY( UWORD value );
- static int StatWindowIDCMPHandler(void);
- static void __interrupt HandleStatWindowGadgetCallback(struct Hook *hook, struct Gadget *Gad, ULONG *Code);
- static void HandleStatGadgetHelp(const struct Gadget *gad, USHORT code);
-
-
- // aus Backup.c
- extern struct Window *aktWindow;
- extern unsigned char disknr; // laufende Nummer der Diskette
- extern struct TextFont *ScreenFont;
-
- // aus FileSelect.c
- extern struct Window *activeWindow; // das gerade aktive Backup-Window
-
- // aus Backup_Window.c
- extern struct Screen *WBScreen;
-
-
- static char TextFilesSaved[45];
- static char TextTotalBytes[45];
- static char TextBackupDuration[45];
- static char TextDataRate[45];
- static char TextDataRate2[45];
-
-
- static ULONG StatWindowGadgetTags[] =
- {
- (GTTX_Text), (ULONG) TextFilesSaved,
- GTTX_Justification, GTJ_CENTER,
- GTTX_Clipped, TRUE,
- (TAG_END),
- (GTTX_Text), (ULONG) TextTotalBytes,
- GTTX_Justification, GTJ_CENTER,
- GTTX_Clipped, TRUE,
- (TAG_END),
- (GTTX_Text), (ULONG) TextBackupDuration,
- GTTX_Justification, GTJ_CENTER,
- GTTX_Clipped, TRUE,
- (TAG_END),
- (GTTX_Text), (ULONG) TextDataRate,
- GTTX_Justification, GTJ_CENTER,
- GTTX_Clipped, TRUE,
- (TAG_END),
- (GTTX_Text), (ULONG) TextDataRate2,
- GTTX_Justification, GTJ_CENTER,
- GTTX_Clipped, TRUE,
- (TAG_END),
- (GT_Underscore), '_',
- (TAG_DONE)
- };
-
- static UWORD StatWindowGadgetTypes[] =
- {
- TEXT_KIND,
- TEXT_KIND,
- TEXT_KIND,
- TEXT_KIND,
- TEXT_KIND,
- BUTTON_KIND,
- };
-
- static struct NewGadget StatWindowNGad[] =
- {
- 9, 4, 325, 15, NULL, NULL, StatWindowLine1, 1, NULL, NULL,
- 9, 23, 325, 15, NULL, NULL, StatWindowLine2, 1, NULL, NULL,
- 9, 42, 325, 15, NULL, NULL, StatWindowLine3, 1, NULL, NULL,
- 9, 61, 325, 15, NULL, NULL, StatWindowLine4, 1, NULL, NULL,
- 9, 80, 325, 15, NULL, NULL, StatWindowLine5, 1, NULL, NULL,
- 137, 105, 75, 19, (STRPTR) MSG_OK_GAD, NULL, StatWindowOkButton, 16, NULL, NULL,
- };
-
- static struct Hook StatWindowGadgetShortHook =
- {
- { NULL },
- HookEntry,
- (ULONG (*)()) HandleStatWindowGadgetCallback,
- NULL, // wird (struct BackupOptions *)
- };
-
- static struct Gadget *StatWindowGList = NULL;
- static struct Gadget *StatWindowGadgets[STATWINDOW_NGAD];
-
- static struct GadgetShort *StatWindowGadgetShort; // Tabelle für Tasten-Kürzel
-
- static MINLIST(StatResourceList);
-
- static struct Window *StatWindow;
-
- static ULONG FontX, FontY;
- static UWORD OffX, OffY;
-
- static struct BInputHandler *StatInput = NULL;
-
-
- static UWORD ComputeX( UWORD value )
- {
- return ((UWORD) ((value * FontX) / 65535));
- }
-
-
- static UWORD ComputeY( UWORD value )
- {
- return ((UWORD) ((value * FontY) / 65535));
- }
-
-
- void CleanupStat(void)
- {
- RemBInputHandler(&StatInput);
-
- if (StatWindow)
- {
- if (aktWindow)
- WindowBusy(aktWindow, FALSE);
-
- SafeCloseWindow(&StatWindow);
- }
-
- if (StatWindowGList)
- {
- FreeGadgets(StatWindowGList);
- StatWindowGList = NULL;
- }
- FreeBResources(&StatResourceList);
- DestroyGadgetShort(&StatWindowGadgetShort);
- }
-
-
- void printstat(long FileZahl, long ByteZahl, long startzeit, long endzeit, BOOL toTape)
- {
- char TempText[45];
- const char *DiskName;
- struct NewWindow NewStatWindow;
- struct Gadget *g;
- long zeitdiff;
- long datenrate;
-
- ASSERT_VALID(aktWindow);
-
- zeitdiff = (endzeit - startzeit)/100L;
- if (zeitdiff < 0L)
- zeitdiff += 24L*60L*60L;
-
- datenrate = zeitdiff != 0 ? ((ByteZahl/zeitdiff)*100L)/1024L : 0;
-
- if (toTape)
- DiskName = GetString(disknr > 1 ? MSG_TAPE2 : MSG_TAPE1);
- else
- DiskName = GetString(disknr > 1 ? MSG_DISK2 : MSG_DISK1);
-
- KMBytes(TempText, ByteZahl);
-
- myFormatString(TextFilesSaved, GetString(MSG_N_FILESSAVED), FileZahl, (long) disknr, DiskName);
- sprintf(TextTotalBytes, GetString(MSG_TOTAL_BYTES), TempText);
- sprintf(TextBackupDuration, GetString(MSG_BACKUP_DURATION), zeitdiff/60, zeitdiff % 60);
- sprintf(TextDataRate, GetString(MSG_DATA_RATE), datenrate/100, (datenrate % 100)/10);
-
- datenrate = (60*datenrate)/1000L;
- sprintf(TextDataRate2, GetString(MSG_DATA_RATE2), datenrate/100, datenrate % 100);
-
- CalcGadgetScale(WBScreen, ScreenFont, &FontX, &FontY, &OffX, &OffY, 8, 11);
-
- CreateGadgetShort(&StatWindowGadgetShort);
-
- g = CreateGadgetList(&StatWindowGList, STATWINDOW_NGAD,
- WBScreen->Font,
- StatWindowGadgetTypes,
- StatWindowNGad,
- StatWindowGadgets,
- StatWindowGadgetTags,
- StatWindowGadgetShort,
- &StatResourceList,
- FontX, FontY,
- OffX, OffY
- );
-
- if (NULL == g)
- {
- alarm(GetString(MSG_CREATEGAD_FAILED), __FUNC__);
- return;
- }
-
- WindowBusy(aktWindow, TRUE);
-
- NewStatWindow.Width = ComputeX(341) + WBScreen->WBorLeft + WBScreen->WBorRight;
- NewStatWindow.Height = ComputeY(135) + WBScreen->WBorBottom + WBScreen->BarHeight;
-
- CenterWindow(aktWindow, &NewStatWindow);
-
- StatWindow = OpenWindowTags(NULL,
- WA_Left, NewStatWindow.LeftEdge,
- WA_Top, NewStatWindow.TopEdge,
- WA_Width, NewStatWindow.Width,
- WA_Height, NewStatWindow.Height,
- WA_AutoAdjust, TRUE,
- WA_Flags, WFLG_SMART_REFRESH | WFLG_NOCAREREFRESH
- | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_ACTIVATE,
- WA_IDCMP, IDCMP_GADGETUP | IDCMP_RAWKEY | IDCMP_VANILLAKEY | BUTTONIDCMP,
- WA_Title, GetString(MSG_STATWINDOW_TITLE),
- WA_PubScreen, aktWindow->WScreen,
- WA_NewLookMenus, TRUE,
- WA_Gadgets, StatWindowGList,
- TAG_END);
-
- if (NULL == StatWindow)
- {
- alarm(GetString(MSG_CANNOT_OPEN_WINDOW), __FUNC__, "StatWindow");
- return;
- }
-
- GT_RefreshWindow(StatWindow, NULL );
-
- StatInput = AddBInputHandler(1 << StatWindow->UserPort->mp_SigBit, StatWindowIDCMPHandler);
-
- do {
- eingabe(0l);
- } while (StatWindow);
-
- CleanupStat();
- }
-
-
- static int StatWindowIDCMPHandler(void)
- {
- struct IntuiMessage *msg;
- int Result = 0;
-
- while (StatWindow && (msg = GT_GetIMsg(StatWindow->UserPort)) )
- {
- ULONG class;
- USHORT code;
- APTR Address;
-
- class = msg->Class;
- code = msg->Code;
- Address = msg->IAddress;
-
- GT_ReplyIMsg(msg);
-
- switch (class)
- {
- case IDCMP_GADGETHELP:
- if (NULL == Address)
- {
- // Nicht über unserem Window
- }
- else if (Address == (APTR) StatWindow)
- {
- // über unserem Window
- CallHelp(HELPID_STATWINDOW, TRUE); // im StatWindow
- }
- else
- HandleStatGadgetHelp((struct Gadget *) Address, code);
- break;
-
- case IDCMP_MENUHELP:
- break;
-
- case IDCMP_GADGETUP:
- Result = ((struct Gadget *) Address)->GadgetID;
- SafeCloseWindow(&StatWindow);
- break;
-
- case IDCMP_MENUPICK:
- break;
-
- case IDCMP_VANILLAKEY:
- Result = HandleGadgetShort(StatWindowGadgetShort, StatWindow, code, &StatWindowGadgetShortHook);
- break;
-
- case IDCMP_RAWKEY:
- if (GADCODE_HELP == code)
- ToggleHelp();
- break;
-
- case IDCMP_REFRESHWINDOW:
- // This handling is REQUIRED with GadTools.
- GT_BeginRefresh(StatWindow);
- GT_EndRefresh(StatWindow, TRUE);
- break;
- }
- }
- return Result;
- }
-
-
- static void __interrupt HandleStatWindowGadgetCallback(struct Hook *hook, struct Gadget *Gad, ULONG *Code)
- {
- SafeCloseWindow(&StatWindow);
- }
-
-
- static void HandleStatGadgetHelp(const struct Gadget *gad, USHORT code)
- {
- ASSERT_VALID(gad);
- if (!(gad->GadgetType & GTYP_SYSGADGET))
- CallHelp(gad->GadgetID, TRUE);
- }
-