phED/phed.c

159 lines
3.3 KiB
C
Raw Blame History

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/window.h>
#include <proto/layout.h>
#include <proto/texteditor.h>
#include <proto/requester.h>
#include <reaction/reaction_macros.h>
#include <classes/window.h>
#include <classes/requester.h>
#include <gadgets/texteditor.h>
#include "phed-init.h"
#include "phed-file.h"
#include "phed-req.h"
static const char *version = "$VER: phED Version 0.2";
enum
{
GID_TEXTEDITOR = 0,
GID_LAST
};
int main(int argc, char *argv[])
{
struct Window *window;
struct Gadget *gadgets[GID_LAST];
Object *Win_Object, *beenden_object;
ULONG signal, result;
ULONG done = FALSE;
char *buf, *titel;
if(argc > 1)
{
titel = (char *) malloc(strlen(argv[1]));
strcpy(titel, argv[1]);
titel[strlen(argv[1])] = '\0';
buf = loadText(argv[1]);
}
else
{
titel = (char *) malloc(strlen("phED"));
strcpy(titel, "phED");
titel[strlen("phED")] = '\0';
buf = (char *) malloc(0);
}
if(openLibraries())
{
beenden_object = requesterNew("Beenden");
Win_Object = WindowObject,
WA_ScreenTitle, "Projekt Hirnfrei",
WA_Title, titel,
WA_SizeGadget, TRUE,
WA_DepthGadget, TRUE,
WA_DragBar, TRUE,
WA_CloseGadget, TRUE,
WA_Activate, TRUE,
WA_Width, 400,
WA_Height, 400,
WINDOW_ParentGroup, HGroupObject,
StartVGroup,
StartMember, gadgets[GID_TEXTEDITOR] = TextEditorObject,
GA_ID, GID_TEXTEDITOR,
GA_RelVerify, TRUE,
GA_TEXTEDITOR_Contents, (APTR) buf,
EndMember,
End,
EndMember,
EndWindow;
if(Win_Object)
{
if(window = (struct Window *) RA_OpenWindow(Win_Object))
{
ULONG wait, changed, ret;
UBYTE *buffer;
GetAttr(WINDOW_SigMask, Win_Object, &signal);
while(!done)
{
wait = Wait(signal|SIGBREAKF_CTRL_C);
if(wait & SIGBREAKF_CTRL_C) done = TRUE;
else
{
while((result = RA_HandleInput(Win_Object, NULL)) != WMHI_LASTMSG)
{
switch(result & WMHI_CLASSMASK)
{
case WMHI_CLOSEWINDOW:
GetAttr(GA_TEXTEDITOR_HasChanged, gadgets[GID_TEXTEDITOR], &changed);
if(changed)
{
ret = beendenReq("\033cDer Text wurde ver<65>ndert!\n\nSoll der Text gespeichert werden?", beenden_object, window);
if(ret == 1)
{
buffer = (UBYTE *) DoGadgetMethod(gadgets[GID_TEXTEDITOR], window, NULL, GM_TEXTEDITOR_ExportText, NULL);
if(!argv[1]) saveText("unbenannt.txt", buffer);
else saveText(argv[1], buffer);
done = TRUE;
}
if(ret == 2)
{
done = TRUE;
}
if(ret == 0)
{
done = FALSE;
}
}
else done = TRUE;
break;
case WMHI_GADGETUP:
{
switch(result & WMHI_GADGETMASK)
{
case GID_TEXTEDITOR:
GetAttr(GA_TEXTEDITOR_HasChanged, gadgets[GID_TEXTEDITOR], &changed);
if(changed == 1) printf("Ge<EFBFBD>ndert\n");
if(changed == 0) printf("Nicht ge<67>ndert\n");
break;
}
}
}
}
}
}
}
DisposeObject(beenden_object);
DisposeObject(Win_Object);
}
}
closeLibraries();
if(titel) free(titel);
if(buf) free(buf);
}