/*
 *  Source machine generated by GadToolsBox V2.0
 *  which is © Copyright 1991-1993 Jaba Development
 *
 *  GUI Designed by : Sascha Volkenandt
 *  Version 3.5
 *  Collecter © 1992 Sascha Volkenandt
 */

#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <clib/dos_protos.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>

#include <pragmas/exec_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/gadtools_pragmas.h>
#include <pragmas/graphics_pragmas.h>
#include <pragmas/utility_pragmas.h>
#include <pragmas/dos_pragmas.h>

#include "Sparschwein-GUI.h"

#define WriteOut(x,y) Write(x,y,strlen(y))

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = NULL;
APTR                   VisualInfo = NULL;
struct Window         *Project0Wnd = NULL;
struct Gadget         *Project0GList = NULL;
struct IntuiMessage    Project0Msg;
struct Gadget         *Project0Gadgets[17];
UWORD                  Project0Left = 0;
UWORD                  Project0Top = 2;
UWORD                  Project0Width = 716;
UWORD                  Project0Height = 253;
UBYTE                 *Project0Wdt = NULL;
BOOL                   INSERT = TRUE;
float                  CurrentMoney = 0;
float                  InsertedMoney = 0;
float                  EjectedMoney = 0;
struct IntuitionBase  *IntuitionBase;
struct Library        *GadtoolsBase;
struct GfxBase        *GfxBase;
struct Library        *UtilityBase;
struct DOSBase        *DOSBase;
struct RastPort       *rp;
BPTR                   Fenster;
FILE                  *Datei;
FILE                  *Passwd;
char                   Passwort[12];
char                   Entered[12];

UBYTE *Gadget000Labels[] = {
	(UBYTE *)"Insert",
	(UBYTE *)"Eject",
	NULL };

struct TextAttr topaz8 = {
	( STRPTR )"topaz.font", 8, 0x00, 0x01 };

struct IntuiText Project0IText[] = {
	1, 0, JAM1,31, 12, &topaz8, (UBYTE *)"-- Insert Coins here!", &Project0IText[1],
	1, 0, JAM1,28, 12, &topaz8, (UBYTE *)"<-", &Project0IText[2],
	1, 0, JAM1,205, 188, &topaz8, (UBYTE *)"G e t   y o u r   C o i n s   h e r e !", &Project0IText[3],
	1, 0, JAM1,196, 188, &topaz8, (UBYTE *)"|", &Project0IText[4],
	1, 0, JAM1,516, 188, &topaz8, (UBYTE *)"|", &Project0IText[5],
	1, 0, JAM1,196, 190, &topaz8, (UBYTE *)"v", &Project0IText[6],
	1, 0, JAM1,516, 190, &topaz8, (UBYTE *)"v", NULL };

UWORD Project0GTypes[] = {
	MX_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
        TEXT_KIND,
        TEXT_KIND
};

struct NewGadget Project0NGad[] = {
	687, 1, 17, 9, NULL, NULL, GD_Gadget00, PLACETEXT_LEFT, NULL, (APTR)Gadget00Clicked,
	515, 1, 105, 12, (UBYTE *)"Money collected:", NULL, GD_Gadget10, PLACETEXT_LEFT, NULL, NULL,
	10, 37, 46, 11, (UBYTE *)"1 ç", NULL, GD_Gadget20, PLACETEXT_IN, NULL, (APTR)Gadget20Clicked,
	10, 48, 46, 11, (UBYTE *)"2 ç", NULL, GD_Gadget30, PLACETEXT_IN, NULL, (APTR)Gadget30Clicked,
	10, 59, 46, 11, (UBYTE *)"5 ç", NULL, GD_Gadget40, PLACETEXT_IN, NULL, (APTR)Gadget40Clicked,
	10, 70, 46, 11, (UBYTE *)"10 ç", NULL, GD_Gadget50, PLACETEXT_IN, NULL, (APTR)Gadget50Clicked,
	10, 81, 46, 11, (UBYTE *)"50 ç", NULL, GD_Gadget60, PLACETEXT_IN, NULL, (APTR)Gadget60Clicked,
	56, 37, 46, 11, (UBYTE *)"$ _1", NULL, GD_Gadget70, PLACETEXT_IN, NULL, (APTR)Gadget70Clicked,
	56, 48, 46, 11, (UBYTE *)"$ _2", NULL, GD_Gadget80, PLACETEXT_IN, NULL, (APTR)Gadget80Clicked,
	56, 59, 46, 11, (UBYTE *)"$ _5", NULL, GD_Gadget90, PLACETEXT_IN, NULL, (APTR)Gadget90Clicked,
	56, 70, 46, 11, (UBYTE *)"$ 10", NULL, GD_Gadget100, PLACETEXT_IN, NULL, (APTR)Gadget100Clicked,
	56, 81, 46, 11, (UBYTE *)"$ 20", NULL, GD_Gadget110, PLACETEXT_IN, NULL, (APTR)Gadget110Clicked,
	102, 37, 52, 11, (UBYTE *)"$ 50", NULL, GD_Gadget120, PLACETEXT_IN, NULL, (APTR)Gadget120Clicked,
	102, 48, 52, 11, (UBYTE *)"$ 100", NULL, GD_Gadget130, PLACETEXT_IN, NULL, (APTR)Gadget130Clicked,
	684, 53, 20, 13, (UBYTE *)"_Exit", NULL, GD_Gadget140, PLACETEXT_LEFT, NULL, (APTR)Gadget140Clicked,
        515, 20, 110, 11, (UBYTE *)"Money inserted:", NULL, GD_Gadget150, PLACETEXT_LEFT, NULL, NULL,
        515, 30, 113, 11, (UBYTE *)"Money ejected:", NULL, GD_Gadget160, PLACETEXT_LEFT, NULL, NULL
};

ULONG Project0GTags[] = {
	(GTMX_Labels), (ULONG)&Gadget000Labels[ 0 ], (TAG_DONE),
	(TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
        (TAG_DONE),
        (TAG_DONE)
};

int SetupScreen( void )
{
	if ( ! ( Scr = LockPubScreen( PubScreenName )))
		return( 1L );

	if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
		return( 2L );

	return( 0L );
}

void CloseDownScreen( void )
{
	if ( VisualInfo ) {
		FreeVisualInfo( VisualInfo );
		VisualInfo = NULL;
	}

	if ( Scr        ) {
		UnlockPubScreen( NULL, Scr );
		Scr = NULL;
	}
}

void Project0Render( void )
{
	UWORD		offx, offy;

	offx = Project0Wnd->BorderLeft;
	offy = Project0Wnd->BorderTop;


	DrawBevelBox( Project0Wnd->RPort, offx + 8, offy + 2, 17, 29, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Project0Wnd->RPort, offx + 12, offy + 4, 9, 25, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	DrawBevelBox( Project0Wnd->RPort, offx + 3, offy + 198, 701, 43, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Project0Wnd->RPort, offx + 7, offy + 200, 693, 39, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	PrintIText( Project0Wnd->RPort, Project0IText, offx, offy );
}

int HandleProject0IDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

	while( m = GT_GetIMsg( Project0Wnd->UserPort )) {

		CopyMem(( char * )m, ( char * )&Project0Msg, (long)sizeof( struct IntuiMessage ));

		GT_ReplyIMsg( m );

		switch ( Project0Msg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( Project0Wnd );
				Project0Render();
				GT_EndRefresh( Project0Wnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = 325;
				break;

			case	IDCMP_GADGETUP:
			case	IDCMP_GADGETDOWN:
				func = ( void * )(( struct Gadget * )Project0Msg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenProject0Window( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

	if ( ! ( g = CreateContext( &Project0GList )))
		return( 1L );

	for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {

		CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &topaz8;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );

		while( Project0GTags[ tc ] ) tc += 2;
		tc++;

		if ( NOT g )
			return( 2L );
	}

	if ( ! ( Project0Wnd = OpenWindowTags( NULL,
				WA_Left,	Project0Left,
				WA_Top,		Project0Top,
				WA_Width,	Project0Width,
				WA_Height,	Project0Height + offy,
				WA_IDCMP,	MXIDCMP|NUMBERIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_SMART_REFRESH,
				WA_Gadgets,	Project0GList,
				WA_Title,	Project0Wdt,
				WA_ScreenTitle,	"Money Collecter V2.0 © 1993",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Project0Wnd, NULL );

	Project0Render();

	return( 0L );
}

void RefreshProject0Window( void )
{
        char Number[100], Number2[100], Number3[100];
#ifdef DEBUG
        printf("%f\n",CurrentMoney);
#endif
        sprintf(Number,"%5.2f",CurrentMoney);
        sprintf(Number2,"%5.2f",InsertedMoney);
        sprintf(Number3,"%5.2f",EjectedMoney);
        GT_SetGadgetAttrs(Project0Gadgets[1],Project0Wnd,NULL,GTTX_Text,Number,TAG_DONE);
        GT_SetGadgetAttrs(Project0Gadgets[15],Project0Wnd,NULL,GTTX_Text,Number2,TAG_DONE);
        GT_SetGadgetAttrs(Project0Gadgets[16],Project0Wnd,NULL,GTTX_Text,Number3,TAG_DONE);
        GT_RefreshWindow(Project0Wnd,NULL);
}

void CloseProject0Window( void )
{
	if ( Project0Wnd        ) {
		CloseWindow( Project0Wnd );
		Project0Wnd = NULL;
	}

	if ( Project0GList      ) {
		FreeGadgets( Project0GList );
		Project0GList = NULL;
	}
}

int Gadget00Clicked( void )
{
	if (INSERT == TRUE) {
                INSERT = FALSE;
        } else {
                INSERT = TRUE;
        }
        return(0);
}

int Gadget20Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 0.01;
                InsertedMoney += 0.01;
        }
        else {
                CurrentMoney -= 0.01;
                EjectedMoney += 0.01;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget30Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 0.02;
                InsertedMoney += 0.02;
        }
        else {
                CurrentMoney -= 0.02;
                EjectedMoney += 0.02;
        }
        RefreshProject0Window();
        return(0); 
}

int Gadget40Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 0.05;
                InsertedMoney += 0.05;
        }
        else {
                CurrentMoney -= 0.05;
                EjectedMoney += 0.05;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget50Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 0.1;
                InsertedMoney += 0.1;
        }
        else {
                CurrentMoney -= 0.1;
                EjectedMoney += 0.1;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget60Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 0.5;
                InsertedMoney += 0.5;
        }
        else {
                CurrentMoney -= 0.5;
                EjectedMoney += 0.5;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget70Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 1;
                InsertedMoney += 1;
        }
        else {
                CurrentMoney -= 1;
                EjectedMoney += 1;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget80Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 2;
                InsertedMoney += 2;
        }
        else {
                CurrentMoney -= 2;
                EjectedMoney += 2;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget90Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 5;
                InsertedMoney += 5;
        }
        else {
                CurrentMoney -= 5;
                EjectedMoney += 5;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget100Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 10;
                InsertedMoney += 10;
        }
        else {
                CurrentMoney -= 10;
                EjectedMoney += 10;
        }
        RefreshProject0Window();
        return(0);
}        

int Gadget110Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 20;
                InsertedMoney += 20;
        }
        else {
                CurrentMoney -= 20;
                EjectedMoney += 20;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget120Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 50;
                InsertedMoney += 50;
        }
        else {
                CurrentMoney -= 50;
                EjectedMoney += 50;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget130Clicked( void )
{
        if (INSERT == TRUE) {
                CurrentMoney += 100;
                InsertedMoney += 100;
        }
        else {
                CurrentMoney -= 100;
                EjectedMoney += 100;
        }
        RefreshProject0Window();
        return(0);
}

int Gadget140Clicked( void )
{
	return(325);
}

void main(void) {
        IntuitionBase = (struct IntuitionBase*)OpenLibrary("intuition.library",0L);
        if (IntuitionBase == NULL) {
                exit(0);
        }
        GadtoolsBase = (struct Library*)OpenLibrary("gadtools.library",0L);
        if (GadtoolsBase == NULL) {
                CloseLibrary((struct Library*)IntuitionBase);
                exit(0);
        }
        GfxBase = (struct GfxBase*)OpenLibrary("graphics.library",0L);
        if (GfxBase == NULL) {
                CloseLibrary((struct Library*)GadtoolsBase);
                CloseLibrary((struct Library*)IntuitionBase);
                exit(0);
        }
        UtilityBase = (struct Library*)OpenLibrary("utility.library",0L);
        if (UtilityBase == NULL) {
                CloseLibrary((struct Library*)GfxBase);
                CloseLibrary((struct Library*)GadtoolsBase);
                CloseLibrary((struct Library*)IntuitionBase);
                exit(0);
        }
        DOSBase = (struct DOSBase*)OpenLibrary("dos.library",37L);
        if (DOSBase == NULL) {
                CloseLibrary((struct Library*)UtilityBase);
                CloseLibrary((struct Library*)GfxBase);
                CloseLibrary((struct Library*)GadtoolsBase);
                CloseLibrary((struct Library*)IntuitionBase);
                exit(0);
        }
        Fenster = Open("raw:80/0/550/130/Passwort",MODE_NEWFILE);
        if (Fenster == NULL) {
                CloseLibrary((struct Library*)DOSBase);
                CloseLibrary((struct Library*)UtilityBase);
                CloseLibrary((struct Library*)GfxBase);
                CloseLibrary((struct Library*)GadtoolsBase);
                CloseLibrary((struct Library*)IntuitionBase);
                exit(0);
        }       
        Passwd = fopen("devs:passwd","r");
        if (Passwd == NULL) {
                char readchar[5];
                WriteOut(Fenster,"Sie arbeiten ohne Passwort! Um ein Passwort anzulegen,\n");
                WriteOut(Fenster,"legen sie bitte mit `ed devs:passwd` eine Passwort-Datei\n");
                WriteOut(Fenster,"an, und geben ein Passwort von 10-Zeichen-Länge ein.\n");
                WriteOut(Fenster,"Es müssen UNBEDINGT 10 Zeichen ohne Leertaste sein!!!\n");
                WriteOut(Fenster,"Dann speichern sie mit `ESC` und anschließend `x`.\n");
                WriteOut(Fenster,"Wenn das Passwort `NOP` ist, gibt`s keine Abfrage!\n\n"); 
                WriteOut(Fenster,"You are working without password! To create a password,\n");
                WriteOut(Fenster,"you must create with `ed devs:passwd` a password-file, and\n");
                WriteOut(Fenster,"enter a 10-character-long password. It MUST be 10 characters\n");
                WriteOut(Fenster,"and without spaces!!! Then save it with `ESC` and `x`.\n");
                WriteOut(Fenster,"When the Password is `NOP`, there`ll be no requester!\n\n");
                WriteOut(Fenster,"<<Bitte eine Taste drücken!>> <<Please press any key!>>");
                Read(Fenster,(APTR)readchar[1],1);
        } else {
                int i;
                fscanf(Passwd,"%s",&Passwort[0]);
                if (!((toupper(Passwort[0]) == 'N') && (toupper(Passwort[1]) == 'O') 
                   && (toupper(Passwort[2]) == 'P'))) {
                         
                        WriteOut(Fenster,"Passwort: ");
                        for (i = 0 ; i < 10 ; i++) {        
                                Read(Fenster,(APTR)&Entered[i],1);
                                WriteOut(Fenster,"*");
                                if (Entered[i] != Passwort[i]) {
                                        Close(Fenster);
                                        CloseLibrary((struct Library*)DOSBase);
                                        CloseLibrary((struct Library*)UtilityBase);
                                        CloseLibrary((struct Library*)GfxBase);
                                        CloseLibrary((struct Library*)GadtoolsBase);
                                        CloseLibrary((struct Library*)IntuitionBase);
                                        exit(0);
                                }
                        }
                }
        }
        fclose(Passwd); 
        Close(Fenster);
        if (SetupScreen() != NULL) {
                CloseLibrary((struct Library*)DOSBase);
                CloseLibrary((struct Library*)UtilityBase);
                CloseLibrary((struct Library*)GfxBase);
                CloseLibrary((struct Library*)GadtoolsBase);
                CloseLibrary((struct Library*)IntuitionBase);
                exit(0);
        }
        if (OpenProject0Window() != NULL) {
                CloseDownScreen();
                CloseLibrary((struct Library*)DOSBase);
                CloseLibrary((struct Library*)UtilityBase);
                CloseLibrary((struct Library*)GfxBase);
                CloseLibrary((struct Library*)GadtoolsBase);
                CloseLibrary((struct Library*)IntuitionBase);
                exit(0);
        }
        Datei = fopen("sys:Geldmenge","r");
        if (Datei == NULL) {
                Datei = fopen("sys:Geldmenge","w");
                if (Datei == NULL) {
                        exit(0);
                }
                fprintf(Datei,"%f\n",CurrentMoney);
                fprintf(Datei,"%f\n",InsertedMoney);
                fprintf(Datei,"%f",EjectedMoney);
                fclose(Datei);
                Datei = fopen("sys:Geldmenge","r");
        }
        fscanf(Datei,"%f",&CurrentMoney);
        fscanf(Datei,"%f",&InsertedMoney);
        fscanf(Datei,"%f",&EjectedMoney);
        fclose(Datei); 
        RefreshProject0Window();
        for(;;) {
                if (HandleProject0IDCMP() == 325) {
                        CloseProject0Window();
                        CloseDownScreen();
                        CloseLibrary((struct Library*)DOSBase);
                        CloseLibrary((struct Library*)UtilityBase);
                        CloseLibrary((struct Library*)GfxBase);
                        CloseLibrary((struct Library*)GadtoolsBase);
                        CloseLibrary((struct Library*)IntuitionBase);
                        Datei = fopen("sys:Geldmenge","w");
                        fprintf(Datei,"%f\n",CurrentMoney);
                        fprintf(Datei,"%f\n",InsertedMoney);
                        fprintf(Datei,"%f",EjectedMoney);
                        fclose(Datei);
                        exit(0);
                }
        }
}
                
                 
