home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d8xx
/
d812
/
ppmc.lha
/
PPMC
/
Source
/
PPMC1.2b_source.lha
/
ppmc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-27
|
13KB
|
413 lines
/*
----------------------
ppmc.c
© 1992,1993 REELSOFT
----------------------
*/
#include <proto/intuition.h>
#include <proto/gadtools.h>
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/utility.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <graphics/gfxbase.h>
#include <graphics/gfxmacros.h>
#include <utility/hooks.h>
#include <string.h>
#include "protos.h"
#include "macros.h"
#include "debug.h"
#include "ppmc.h"
#include "locale.h"
struct Screen *Scr = NULL ;
APTR VisualInfo = NULL ;
struct Window *Wnd = NULL ;
struct Gadget *GList = NULL ;
struct Menu *Menus = NULL ;
struct Gadget *Gadgets[GAD_CNT] ;
extern Class *initGet (VOID) ;
struct IClass *getClass = NULL ;
struct _Object *getImage = NULL ;
struct TextAttr Fnt = { (STRPTR)"PPMC.font",8,0x00,0x20 } ;
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
UBYTE SetupScreen (VOID)
{
if ( NOT (Scr = LockPubScreen (sup.pubscreen))
&& NOT (Scr = LockPubScreen ("Workbench")) )
return (1) ;
VisualInfo = GetVisualInfo (Scr,TAG_DONE) ;
if (NOT VisualInfo)
return (2) ;
getClass = initGet() ;
if (NOT getClass)
return (3) ;
getImage = NewObject (getClass,NULL,GT_VisualInfo,VisualInfo,TAG_DONE) ;
if (NOT getImage)
return (4) ;
return (0) ;
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
VOID CloseDownScreen (VOID)
{
if (getImage)
DisposeObject (getImage) ;
if (getClass)
FreeClass (getClass) ;
if (VisualInfo)
FreeVisualInfo (VisualInfo) ;
if (Scr)
UnlockPubScreen (NULL,Scr) ;
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
// Menus & Gadgets initialization :
UBYTE *Efficiency[6], *SUBuffer[4], *DecEffect[6] ;
ULONG GTags[] = { (GTTX_Text), NULL, // Status
(GTTX_Border), TRUE, (TAG_DONE),
(TAG_DONE), // Load
(GTTX_Border), TRUE, (TAG_DONE), // FileName
(GTNM_Border), TRUE, (TAG_DONE), // Size
(GT_Underscore), '_', // Encrypt
(GTCB_Checked), NULL, (TAG_DONE),
(GTNM_Border), TRUE, (TAG_DONE), // Gained
(GTNM_Border), TRUE, (TAG_DONE), // Packed
(GTCY_Labels), NULL, // CrunEff
(GTCY_Active), NULL, (TAG_DONE),
(GTCY_Labels), NULL, // SUBuffer
(GTCY_Active), NULL, (TAG_DONE),
(GTCY_Labels), NULL, // DecrEff
(GTCY_Active), NULL, (TAG_DONE),
(TAG_DONE), // About
(GT_Underscore), '_',
(GA_Disabled), TRUE, (TAG_DONE), // Save
(GT_Underscore), '_',
(GA_Disabled), TRUE, (TAG_DONE), // Pack
(GT_Underscore), '_',
(GA_Disabled), TRUE, (TAG_DONE), // UnPack
(GA_Disabled), TRUE, (TAG_DONE) // Abort
} ;
UWORD GTypes[] = { TEXT_KIND, // Status
GENERIC_KIND, // Load
TEXT_KIND, // FileName
NUMBER_KIND, // Size
CHECKBOX_KIND, // Encrypt
NUMBER_KIND, // Gained
NUMBER_KIND, // Packed
CYCLE_KIND, // CrunEff
CYCLE_KIND, // SUBuffer
CYCLE_KIND, // DecrEff
BUTTON_KIND, // About
BUTTON_KIND, // Save
BUTTON_KIND, // Pack
BUTTON_KIND, // UnPack
BUTTON_KIND // Abort
} ;
struct NewGadget NGad[] = {
21, 9,301,14,NULL,NULL,GD_Status, 0, NULL,NULL,
21,27, 20,14,NULL,NULL,GD_Load, 0, NULL,NULL,
46,27,150,14,NULL,NULL,GD_FileName,PLACETEXT_LEFT, NULL,NULL,
261,27, 61,14,NULL,NULL,GD_Size, PLACETEXT_LEFT, NULL,NULL,
21, 48, 26,11,NULL,NULL,GD_Encrypt, PLACETEXT_RIGHT
|NG_HIGHLABEL, NULL,NULL,
261,45, 41,14,NULL,NULL,GD_Gained, PLACETEXT_LEFT, NULL,NULL,
261,72, 41,14,"%", NULL,GD_Packed, PLACETEXT_RIGHT,NULL,NULL,
356,16,101,15,NULL,NULL,GD_CrunEff, PLACETEXT_LEFT, NULL,NULL,
356,43,101,15,NULL,NULL,GD_SUBuffer,PLACETEXT_LEFT, NULL,NULL,
356,70,101,15,NULL,NULL,GD_DecrEff, PLACETEXT_LEFT, NULL,NULL,
11,94, 66,15,NULL,NULL,GD_About, PLACETEXT_IN, NULL,NULL,
96,94, 66,15,NULL,NULL,GD_Save, PLACETEXT_IN, NULL,NULL,
181,94, 66,15,NULL,NULL,GD_Pack, PLACETEXT_IN, NULL,NULL,
266,94, 66,15,NULL,NULL,GD_UnPack, PLACETEXT_IN, NULL,NULL,
346,94,121,15,NULL,NULL,GD_Abort, PLACETEXT_IN, NULL,NULL
} ;
struct NewMenu NewMenu[] = {
NM_TITLE, 0, 0, 0, 0L, 0,
NM_ITEM, 0, 0, 0, 0L, 0,
NM_ITEM, (STRPTR)NM_BARLABEL, 0, 0, 0L, 0,
NM_ITEM, 0, 0, 0, 0L, 0,
NM_ITEM, 0, 0, NM_ITEMDISABLED, 0L, 0,
NM_ITEM, 0, 0, NM_ITEMDISABLED, 0L, 0,
NM_ITEM, (STRPTR)NM_BARLABEL, 0, 0, 0L, 0,
NM_ITEM, 0, 0, 0, 0L, 0,
NM_TITLE, 0, 0, 0, 0L, 0,
NM_ITEM, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_ITEM, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_ITEM, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_SUB, 0, 0, 0, 0L, 0,
NM_ITEM, 0, 0, 0, 0L, 0,
NM_TITLE, 0, 0, 0, 0L, 0,
NM_ITEM, 0, 0, NM_ITEMDISABLED, 0L, 0,
NM_ITEM, 0, 0, NM_ITEMDISABLED, 0L, 0,
NM_END, 0, 0, 0, 0L, 0
} ;
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
VOID InitGadNames (VOID)
{
REGISTER UBYTE n ;
// Gadget names definition (Cycle gadget names are made upper case) :
for (n=0 ; n<5 ; n++) {
Efficiency[n] = strdup (LOC(MSG_EFFICIENCY0_GAD+n)) ;
strupr (Efficiency[n]) ;
if (n<3) {
SUBuffer[n] = strdup (LOC(MSG_SUBUFFER0_GAD+n)) ;
strupr (SUBuffer[n]) ;
}
DecEffect[n] = strdup (LOC(MSG_DECEFFECT0_GAD+n)) ;
strupr (DecEffect[n]) ;
}
Efficiency[5] = SUBuffer[3] = DecEffect[5] = NULL ;
// Note: I should find another way to change theese tags...
GTags[1] = (ULONG)LOC (MSG_STATUS_BEGIN) ;
GTags[24] = (ULONG)&Efficiency[0] ;
GTags[29] = (ULONG)&SUBuffer[0] ;
GTags[34] = (ULONG)&DecEffect[0] ;
GTags[15] = pac.pass ;
GTags[26] = pac.eff ;
GTags[31] = pac.buf ;
GTags[36] = pac.dec ;
NGLAB (GD_Size) = LOC (MSG_SIZE_GAD) ;
NGLAB (GD_Encrypt) = LOC (MSG_ENCRYPT_GAD) ;
NGLAB (GD_Gained) = LOC (MSG_GAIN_GAD) ;
NGLAB (GD_About) = LOC (MSG_ABOUT_GAD) ;
NGLAB (GD_Save) = LOC (MSG_SAVE_GAD) ;
NGLAB (GD_Pack) = LOC (MSG_PACK_GAD) ;
NGLAB (GD_UnPack) = LOC (MSG_UNPACK_GAD) ;
NGLAB (GD_Abort) = LOC (MSG_ABORT_GAD) ;
// Menu names definition :
NMLAB (NM_Project_Menu) = LOC (MSG_PROJECT_MENU) ;
NMLAB (NM_Project_About) = LOC (MSG_PROJECT_ABOUT) ;
NMLAB (NM_Project_Load) = LOC (MSG_PROJECT_LOAD) ;
NMLAB (NM_Project_Save) = LOC (MSG_PROJECT_SAVE) ;
NMLAB (NM_Project_SaveAs) = LOC (MSG_PROJECT_SAVEAS) ;
NMLAB (NM_Project_Quit) = LOC (MSG_PROJECT_QUIT) ;
NMLAB (NM_Parameters_Menu) = LOC (MSG_PARAMETERS_MENU) ;
NMLAB (NM_Parameters_Efficiency) = LOC (MSG_PARAMETERS_EFFICIENCY) ;
NMLAB (NM_Efficiency0) = LOC (MSG_EFFICIENCY0_GAD) ;
NMLAB (NM_Efficiency1) = LOC (MSG_EFFICIENCY1_GAD) ;
NMLAB (NM_Efficiency2) = LOC (MSG_EFFICIENCY2_GAD) ;
NMLAB (NM_Efficiency3) = LOC (MSG_EFFICIENCY3_GAD) ;
NMLAB (NM_Efficiency4) = LOC (MSG_EFFICIENCY4_GAD) ;
NMLAB (NM_Parameters_SUBuffer) = LOC (MSG_PARAMETERS_SUBUFFER) ;
NMLAB (NM_SUBuffer0) = LOC (MSG_SUBUFFER0_GAD) ;
NMLAB (NM_SUBuffer1) = LOC (MSG_SUBUFFER1_GAD) ;
NMLAB (NM_SUBuffer2) = LOC (MSG_SUBUFFER2_GAD) ;
NMLAB (NM_Parameters_DecEffect) = LOC (MSG_PARAMETERS_DECEFFECT) ;
NMLAB (NM_DecEffect0) = LOC (MSG_DECEFFECT0_GAD) ;
NMLAB (NM_DecEffect1) = LOC (MSG_DECEFFECT1_GAD) ;
NMLAB (NM_DecEffect2) = LOC (MSG_DECEFFECT2_GAD) ;
NMLAB (NM_DecEffect3) = LOC (MSG_DECEFFECT3_GAD) ;
NMLAB (NM_DecEffect4) = LOC (MSG_DECEFFECT4_GAD) ;
NMLAB (NM_Parameters_Encrypt) = LOC (MSG_PARAMETERS_ENCRYPT) ;
NMLAB (NM_Crunching_Menu) = LOC (MSG_CRUNCHING_MENU) ;
NMLAB (NM_Crunching_Pack) = LOC (MSG_CRUNCHING_PACK) ;
NMLAB (NM_Crunching_UnPack) = LOC (MSG_CRUNCHING_UNPACK) ;
NMCKEY (NM_Project_About) = LOC (MSG_PROJECT_ABOUT_CKEY) ;
NMCKEY (NM_Project_Load) = LOC (MSG_PROJECT_LOAD_CKEY) ;
NMCKEY (NM_Project_Save) = LOC (MSG_PROJECT_SAVE_CKEY) ;
NMCKEY (NM_Project_SaveAs) = LOC (MSG_PROJECT_SAVEAS_CKEY) ;
NMCKEY (NM_Project_Quit) = LOC (MSG_PROJECT_QUIT_CKEY) ;
NMCKEY (NM_Parameters_Encrypt) = LOC (MSG_PARAMETERS_ENCRYPT_CKEY) ;
NMCKEY (NM_Crunching_Pack) = LOC (MSG_CRUNCHING_PACK_CKEY) ;
NMCKEY (NM_Crunching_UnPack) = LOC (MSG_CRUNCHING_UNPACK_CKEY) ;
NMFLAG (NM_Parameters_Encrypt) = CHECKIT|MENUTOGGLE|(pac.pass?CHECKED:0) ;
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
struct IntuiText IText[] = { 2,0,JAM1,0, 8,&Fnt,0,&IText[1],
2,0,JAM1,0,35,&Fnt,0,&IText[2],
2,0,JAM1,0,62,&Fnt,0,NULL } ;
UWORD pattern[] = { 0x5555,0xAAAA } ;
VOID Render (VOID)
{
if (sup.fill) {
SetAPen (WRP,sup.apen) ;
SetBPen (WRP,0) ;
SetAfPt (WRP,pattern,1) ;
RectFill (WRP, 4,WBT,481,WBT+112) ;
SetAfPt (WRP,NULL,0) ;
RectFill (WRP, 17,WBT+ 5,333,WBT+62) ;
RectFill (WRP, 17,WBT+69,333,WBT+88) ;
RectFill (WRP,352,WBT+ 5,468,WBT+88) ;
SetAPen (WRP,0) ; // Cleaning-up the overlapped gadgets..
RectFill (WRP, 27,WBT+10,323,WBT+21) ; // status gadget
RectFill (WRP, 52,WBT+28,197,WBT+39) ; // file name gadget
RectFill (WRP,267,WBT+28,323,WBT+39) ; // size gadget
RectFill (WRP,267,WBT+46,303,WBT+57) ; // % gain gadget
RectFill (WRP, 27,WBT+72,243,WBT+85) ; // gauge
RectFill (WRP,267,WBT+73,303,WBT+84) ; // % packed gadget
RefreshGList (GList,Wnd,NULL,-1) ;
SetAfPt (WRP,pattern,1) ;
}
DrawBevelBox (WRP, 15,WBT +4,321,60,GT_VisualInfo,VI,GTBB_Recessed,TRUE,TAG_DONE) ;
DrawBevelBox (WRP, 15,WBT+68,321,22,GT_VisualInfo,VI,GTBB_Recessed,TRUE,TAG_DONE) ;
DrawBevelBox (WRP,350,WBT +4,121,86,GT_VisualInfo,VI,GTBB_Recessed,TRUE,TAG_DONE) ;
DrawBevelBox (WRP, 25,WBT+71,221,16,GT_VisualInfo,VI,GTBB_Recessed,TRUE,TAG_DONE) ;
PrintIText (WRP,IText,0,WBT) ;
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#define WND_WIDTH 486
#define WND_HEIGHT 115
UBYTE SetupWindow (VOID)
{
struct IntuiText tmpIText ;
struct NewGadget ng ;
struct Gadget *g ;
REGISTER UWORD lc, tc, zoom[4] ;
InitGadNames() ;
IText[0].IText = LOC(MSG_EFFICIENCY_ITEXT) ;
IText[1].IText = LOC(MSG_SUBUFFER_ITEXT) ;
IText[2].IText = LOC(MSG_DECEFFECT_ITEXT) ;
// calculating the position of the cycle gadgets title..
tmpIText.ITextFont = &Fnt ;
for (tc=0 ; tc<3 ; tc++) {
tmpIText.IText = IText[tc].IText ;
IText[tc].LeftEdge = (117-IntuiTextLength(&tmpIText))/2+352 ;
}
g = CreateContext (&GList) ;
if (NOT g)
return (1) ;
for (lc=0,tc=0 ; lc<GAD_CNT ; lc++) {
CopyMem ((char *)&NGad[lc],(char *)&ng,(LONG)sizeof(struct NewGadget)) ;
ng.ng_VisualInfo = VisualInfo ;
ng.ng_TextAttr = &Fnt ;
ng.ng_LeftEdge += OFFX ;
ng.ng_TopEdge += OFFY ;
Gadgets[lc] = g = CreateGadgetA ((ULONG)GTypes[lc],g,&ng,(struct TagItem *)>ags[tc]) ;
if (GTypes[lc] == GENERIC_KIND) {
g->Flags |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE ;
g->Activation |= GACT_RELVERIFY ;
g->GadgetRender = (APTR)getImage ;
g->SelectRender = (APTR)getImage ;
}
while (GTags[tc])
tc += 2 ;
tc++ ;
if (NOT g)
return (2) ;
}
Menus = CreateMenus (NewMenu,GTMN_FrontPen,0L,TAG_DONE) ;
if (Menus == NULL)
return (3) ;
LayoutMenus (Menus,VisualInfo,TAG_END) ;
zoom[0] = 0 ;
zoom[1] = zoom[3] = OFFY ;
zoom[2] = TextLength (&Scr->RastPort,(UBYTE *)"PPMC",5)+80 ;
Wnd = OpenWindowTags ( NULL,
WA_Left, (Scr->Width-WND_WIDTH)/2,
WA_Top, (Scr->Height-WND_HEIGHT)/2,
WA_Width, WND_WIDTH,
WA_Height, WND_HEIGHT+OFFY,
WA_IDCMP, IDCMP_REFRESHWINDOW
|IDCMP_GADGETUP
|IDCMP_MENUPICK
|IDCMP_CLOSEWINDOW
|IDCMP_VANILLAKEY,
WA_Flags, WFLG_DRAGBAR
|WFLG_DEPTHGADGET
|WFLG_CLOSEGADGET
|WFLG_SMART_REFRESH
|WFLG_ACTIVATE,
WA_Gadgets, GList,
WA_Title, (UBYTE *)"PPMC",
WA_ScreenTitle, (UBYTE *)SCREEN,
WA_PubScreen, Scr,
WA_Zoom, zoom,
TAG_DONE ) ;
if (NOT Wnd)
return (4) ;
SetMenuStrip (Wnd,Menus) ;
Render() ;
GT_RefreshWindow (Wnd,NULL) ;
return (0) ;
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
VOID CloseDownWindow (VOID)
{
ClearMenus() ;
if (Wnd)
CloseWindow (Wnd) ;
if (GList)
FreeGadgets (GList) ;
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
VOID SetupMenus (VOID)
{
Menus = CreateMenus (NewMenu,GTMN_FrontPen,0L,TAG_DONE) ;
if (Menus) {
LayoutMenus (Menus,VisualInfo,TAG_END) ;
SetMenuStrip (Wnd,Menus) ;
}
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
VOID ClearMenus (VOID)
{
if (Menus) {
ClearMenuStrip (Wnd) ;
FreeMenus (Menus) ;
}
}
//""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
UBYTE ShCutKey (UBYTE appstrid,UBYTE defkey)
{
UBYTE p[2] ;
strncpy (p,strchr(LOC(appstrid),0x5F),2) ;
return ((UBYTE)(p[1]?p[1]:defkey)) ;
}
// ...