Software > Coding
GEM Library
m0n0:
Hallo,
ich habe mal ein Grundgerüst eines Programmes das mit Powergem läuft ausführlichst kommentiert, vielleicht ist das ja Sinnvoll ;) 8)
--- Code: ---#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <tos.h>
#include <aes.h>
#include <vdi.h>
#include <types.h>
#include <powergem.h>
#include <scancodes.h>
/* Macro das einen Piepston ausgibt, nützlich beim Testen: */
#define BEEP() Cconout('\007')
/* Deklaration von Globalen Variablen folgt ---> */
/* Powergem Handle (innerhalb Powergemlib deklariert) */
/* innerhalb dieses Moduls (main.c) bekannt machen, erst */
/* dadurch wird zugriff auf diese Variable ermöglicht, */
/* Ansonsten wäre die Variable unbekannt. */
extern struct A_CNTRL app_cntrl;
/* VDI Handle, wird für Zeichenfunktionen benötigt: */
int h_vdi;
/* Powergem Fenster: */
struct WINDOW * pgwin;
/* Desktop Größe wird hierin gespeichert: */
GRECT deskarea;
/* <--- Ende der Globalen Variablen */
/* Funktion für Menu Punkt "Exit" */
void on_exit_click(void)
{
exit_powergem();
}
/* Funktion für Menüpunkt im Accessory Menü ("About") */
void on_about_click( void )
{
char * alrt;
/* Adresse des Strings laden: */
rsrc_gaddr( 5, ALRT_ABOUT,(void*)&alrt );
/* und in Message Box anzeigen: */
form_alert(0, (char*)alrt);
}
/* Funktion für das "WM_DRAW" Ereignis */
/* Das Ereignis tritt auf wenn Fenster geöffnet wird */
/* oder ein verdeckter Bereich sichtbar wird */
void on_draw ( struct WINDOW * win )
{
int pxy[4];
GRECT workarea;
GRECT slider;
if( win == NULL)
return;
/* Slider Positionen auslesen (Powergem Funktionen) */
slider.g_y = get_y_slider( win );
slider.g_x = get_x_slider( win );
/* Fenster Arbeitsbereich auslesen (Powergem Funktion)*/
get_workarea(win, &workarea);
/* AES Koordinaten in VDI Koordinaten umwandeln */
pxy[0] = workarea.g_x;
pxy[1] = workarea.g_y;
pxy[2] = workarea.g_x + workarea.g_w-1;
pxy[3] = workarea.g_y + workarea.g_h;
/* Grafikausgaben auf den Arbeitsbereich des Fensters beschränken: */
vs_clip ( app_cntrl.vdi_handle, 1,(int*)&pxy );
/* Hier fehlt noch der aufruf zu wind_update(ANFANG) */
/* Hier fehlt noch eine while Schleife die alle Sichtbaren */
/* Bereiche abfragt ( wind_get(WF_FIRST/WF_NEXT), */
/* Hier fehlt noch der code der diesen Fensterbereich neu zeichnet */
/* Hier fehlt noch der aufruf zu wind_update(ENDE)*/
/* Grafikbeschränkung aufheben: */
vs_clip ( app_cntrl.vdi_handle, 0, (int*)&pxy );
}
/* Diese Funktion erstellt das Hauptfenster, bzw. öffnet es falls schon erstellt */
void show_file_window( void )
{
GRECT winpos = {0,0, 400, 200};
winpos.g_y = deskarea.g_y;
winpos.g_w = deskarea.g_w;
winpos.g_h = deskarea.g_h;
/* Wenn Fenster noch nicht erstellt wurde: neu erzeugen */
if(pgwin == NULL)
{
/* Powergem Aufruf: */
pgwin = create_window(&deskarea, &winpos, 200, 200,
NAME|INFO|CLOSER|MOVER|SIZER|FULLER|UPARROW|
DNARROW|RTARROW|LFARROW|VSLIDE|HSLIDE,
DATA_WINDOW,
on_draw, 0,0,0);
}
if( pgwin )
{
/* Powergem Funktion */
/* Slider neu konfigurieren, anzahl der Spalten und Zeilen innerhalb des */
/* Fensters neu setzen, ebenso die Weite und Höhe der Zeilen/Spalten (app_cntrl.gl_) */
init_slider( pgwin,
10 /* Anzahl Spalten */,
20 /* Anzahl Zeilen */,
app_cntrl.gl_wchar+1,
app_cntrl.gl_hchar+1
);
/* Powergem, Fenster auf dem Bildschrim anzeigen: */
open_window( pgwin, "File", "Info");
}
}
/* Funktion für Menüpunkt "Datei Öffnen" */
/* Dateiauswahl anzeigen & Datei laden */
void on_load_click( void )
{
int result;
char * path;
char * file;
char * pf,*tmp;
/* Speicher für Pfade anfordern: */
path = malloc(255);
file = malloc(255);
pf = malloc(255+255);
memset( path, 0, 255);
memset( file, 0, 255);
/* Dateiauswahl Dialog anzeigen: */
fsel_input( path, file, &result );
if( result > 0) {
/* Benutzer hat OK ausgewählt, Datei laden... */
strcpy(pf, path);
tmp = strchr ( pf, (int)'*' );
if(tmp != NULL)
*tmp=0;
strcat(pf, file);
/* jetzt irgendwas sinnvolles mit dem Pfad in pf machen - z.b. Datei einlesen */
show_file( );
}
free( pf );
free(file);
free(path);
}
/* Funktion für Timer-Ereignis */
void on_timer(void)
{
/* Hier z.b. den Cursor animieren */
/* Oder etwas wichtiges machen ;) */
}
void appexit(void)
{
/* Hier kann z.B. Speicher Freigegeben werden der */
/* mit malloc angefordert wurde und noch nicht mit free() */
/* Freigegeben wurde */
return;
}
int main()
{
/* Demo.rsc laden und sagen welche Resourcen Strang das Menü enthält: */
/* Diese Powergem Funktion meldet die Applikation auch beim AES an */
/* Und initialisiert interne Datenstrukturen */
init_powergem("DEMO.RSC", MENU_MAIN);
/* VDI Handle merken */
h_vdi = app_cntrl.vdi_handle;
/* Größe des Desktops auslesen (Auflösung - Menüleiste) */
/* Fenster handle 0 == Desktop */
wind_get(0, WF_WORKXYWH, &deskarea.g_x, &deskarea.g_y,
&deskarea.g_w, &deskarea.g_h);
/* Hier werden Die Menü-Einträge und Tastenkombinationen mit Funktionen */
/* verbunden: */
/* Rsc Tree, Element, Keycode, Funktion */
menu_action( M_PROGRAM, M_ABOUT, CNTRL_A, on_about_click);
menu_action( M_FILE, M_LOAD, CNTRL_L, on_load_click);
menu_action( M_FILE, M_QUIT, CNTRL_Q, on_exit_click);
/* Hier wird Powergem mitgeteilt auf welche Ereignisse es achten soll */
/* und noch irgendwas anderes ;) */
watch_events(MU_MESAG|MU_BUTTON|MU_KEYBD, 2,1,1);
/* Ausserdem soll auch eine Funktion in 100ms Abständen regelmäßig aufgerufen werden: */
watch_timer(100, 0, on_timer);
/* Eine Funktione registrieren die beim Beenden ausgeführt wird - die Funktion */
/* atexit ist bestandteil der C-Library */
atexit(appexit);
/* Normalen Cursor einschalten: */
graf_mouse( ARROW, NULL );
/* Jetzt kann Powergem loslegen! ( bis exit_powergem Aufgerufen wird, siehe on_exit_click )*/
/* Es werden alle Ereignisse ausgewärtet und wenn Wir dafür einen Callback registriert haben */
/* wird diese Funktion ausgeführt! */
/* Diese Funktion ist eine endlosschleife und kann nur durch exit_powergem() beendet werden */
multi();
/* Wenn wir hier angelangt sind, dann wurde exit_powergem() ausgeführt... */
return(0);
/* hier kommen wir nie an, aber appexit() wird nach obigem return(0) aufgerufen */
}
--- Ende Code ---
Arne:
--- Zitat von: m0n0 am Fr 05.11.2010, 23:16:03 ---Hallo,
ich habe mal ein Grundgerüst eines Programmes das mit Powergem läuft ausführlichst kommentiert, vielleicht ist das ja Sinnvoll ;) 8)
--- Ende Zitat ---
Nicht, wenn man sich mühevoll selbst durchbeißen will ;D
Hast Du einen Downloadlink zu PowerGEM?
Gruß, Arne
m0n0:
Hier:
http://nic-nac-project.org/~monokrom/monochrom.net/atari/dl/POWERGEM.zip
Im Ordner Original ist das Original Paket enthalten, inkl. Demos und Beispielen...
m0n0:
Hallo,
diese gibts auch noch, ist bestimmt umfangreicher als PowerGEM und etwas moderner, aber ich meine immer noch kompakt:
(eGEM - PureC, GNU C,.... ):
ftp://ftp.datavase.info/st_essential/DEVEL/eGem_210.zip
m0n0:
Hallo,
ich muss mich korrigieren, im Windom paket: "windom-2.0.0-rc2" ist eine purec windom.lib enthalten.
Ich habe diese bisher noch nicht getestet und die aktuellste windom version ist windom-2.0.1 - aber ich denke das sollte keinen sehr großen Unterschied machen! Nur kann man dieses 2.0.0 Paket glaube ich nicht auf der Offiziellen Seite downloaden. Aber ich habe es auf jeden Fall . ;D
Bei Gelegenheit werde ich es mal testen ob es wirklich eine lib für purec ist 8) - und wenn interesse besteht, eine kleine Formular Anwendung mit Windom und PureC als Tutorial vorstellen.
Gruß,
mono
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln