1 Palmpilot und Handspring Anwendungsprogrammierung Am Beispiel „Schiffeversenken“ Andreas Scholz.

Slides:



Advertisements
Ähnliche Präsentationen
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
Advertisements

5. Sortier-Algorithmen Vorbemerkungen:
Seminar Internetdienste Web 2.0 und Rich Internet Applications (RIA) JavaFX Rainer Scholz.
Ultris Version 8: Erzeugen der Formen und Anzeigen der Vorschau
Objektorientierung mit VBA
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Objektorientierung
Palm OS Project Martin Ochs Palm OS Project Inhalt Hardware Schnittstellen Die serielle Schnittstelle Entwicklungsumgebung Test-Programm Hardware-Test.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
V03 Laden und Speichern von Spielfeldern und der Spielfeldeditor.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Zusammenfassung Vorwoche
Einführung in Visual C++
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Error Handling unter Visual FoxPro. © 1999 TMN-Systemberatung GmbH ON ERROR n ON ERROR DO ERRHAND WITH error(), sys(16), message(), lineno(1) – Globales.
3D Programmierung Version 12 - Highscores. Die vom Spieler erzielte Punktzahl wird mit 5 vorgegebenen Punktzahlen verglichen und, falls nötig, in die.
Java programmieren mit JavaKara
MS Excel, Open-/LibreOffice Calc Die Menüs I Office-Logo (Excel2007) bzw. Datei (andere): die Standard-Datei- und Druckoperationen; bei MS Excel hier auch.
Delphi II - OOP IFB Fortbildung
Ich möchte gerne mehrere Bilder auf ein Folie
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Was ist ein Frame? Frames teilen Browser-Fenster in rechteckige Bereiche. Mehrere Web-Seiten können gleichzeitig angezeigt werden unabhängig voneinander.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Systeme 1 Kapitel 4 Prozesse WS 2009/10.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Texteingabe am Cursor 3. Grundlagen der Textverarbeitung.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Tutorium zur LV Online Research Ein Computerprogramm tut, was Du schreibst, nicht was Du willst.
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Dynamische Datentypen
Ganzheitliches Projekt-, Ressourcen- und Qualitätsmanagement 1 Reports und AddOns Auf den folgenden Seiten wird Ihnen die Funktionsweise der Reports und.
Installation Download Blatt 1 v.6 Datei speichern Download wählen Homepage aufrufen
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Grundkonzepte des Programmierens (mit ActionScript)
Arduino Kurs Abend 2.
Softwareentwicklung für Palm OS Vortrag zu PUM 2008 Übersicht über verfügbare Programmiersprachen Weitere Tools, Testen und Debuggen Emulator, Simulator,
EPROG Tutorium #3 Philipp Effenberger
Einführung in PHP.
BMEVIEEA100 Grundlagen der Programmierung
Der Windows-Desktop Beispiel für den Windows-Desktop.
Vortrag: Frames & Javascript.
1 Proseminar TUM Informatik PalmPilot und Handspring: Technik, Programmierung, Anwendung Hacks Daniel Schweighart
Proseminar TUM Informatik
Formulare in HTML.
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Dreamweaver MX Rechenzentrum Universität Hohenheim Hani Sahyoun.
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
 Präsentation transkript:

1 Palmpilot und Handspring Anwendungsprogrammierung Am Beispiel „Schiffeversenken“ Andreas Scholz

2 Übersicht IDE Anwendungsstart Benutzerschnittstelle Nachrichtenbehandlung Speicher- und Ressourcenmanagement Stringmanipulation Zusammenfassung

3 IDE – Vor- und Nachteile IDE: PRC-Tools, PilRC, SDK 3.5, Visual C++ Vorteil –Kostenlos (bis auf Visual C++) –Unterstützung von Linux und Windows Nachteile –Installation –Probleme mit PilRCEdit teilweise Bugs bei Icons, IDs, Bitmaps löscht ungefragt aus Ressourcendateien –Kein direktes Starten des Emulators –pdf-Hilfe umständlich

4 Übersicht IDE Anwendungsstart Benutzerschnittstelle Nachrichtenbehandlung Speicher- und Ressourcenmanagement Stringmanipulation Zusammenfassung

5 Anwendungsstart - Übersicht Uint32 PilotMain (Uint16 cmd, Ptr cmdPBP, Uint16 launchFlags) {... if (cmd == sysAppLaunchCmdNormalLaunch) { error = StartApplication();// Initialisierung... EventLoop();//Nachrichtenschleife StopApplication ();// Aufräumen }... } StartkommandoParameterFlags

6 Anwendungsstart - PilotMain() Startkommando -sysAppLaunchCmdNormalLaunch (normaler Start) -sysAppLaunchCmdFind (Textsuche) -sysAppLaunchCmdSyncNotify (HotSync fertig) -sysAppLaunchCmdAddRecord (Eintrag in Datenbank einfügen) Parameter -Zeiger auf einen Record mit Parametern z.B. für sysAppLaunchCmdAddRecord Flags -sysAppLaunchFlagNewGlobals (neue globale Variablen) -sysAppLaunchFlagSubCall (rekursiver Aufruf des Programms)

7 Übersicht IDE Anwendungsstart Benutzerschnittstelle -Forms -Controls -Alerts -Menüs Nachrichtenbehandlung Speicher- und Ressourcenmanagement Stringmanipulation Zusammenfassung

8 Forms - Übersicht Äquivalent zu Fenstern unter anderen OS Größe beim Kompilieren fest eingestellt Keine geschützten Bereiche wie Titel-, Fußleiste Keine Menüleiste (Einblenden auf Knopfdruck) Eingeschränkte Tiefenstaffelung von Fenstern Wechsel zu neuem Fenster void FrmGotoForm (UInt16 formId) (wird als Programmierrichtlinie von Palm empfohlen damit Speicher gespart wird) Fenster über aktuellem Fenster einblenden void FrmPopupForm (UInt16 formId) void FrmReturnToForm (UInt16 formId)

9 Forms - Ressource Ressourcenskript: #include "Schiffe.h"... FORM ID Startform AT ( ) NOFRAME BEGIN TITLE “Schiffeversenken 1.0“... END ID: Integer Variable, kann durch #define bestimmt sein AT: Position X, Position Y, Größe X, Größe Y... #define Startform NOFRAME: kein Rahmen TITLE: Titel Controls

10 Controls - Übersicht Standard Controls bei Palm vorhanden Wenig Platz für Beschriftungen, meist nur ein Wort Keine Tab-Stopps Layout durch Pixelgenaues hinschieben, nicht durch Lineale, etc Zugriff über Index innerhalb des aktuellen Fensters

11 Controls – Ressource ID AT FONT : LABEL, BUTTON, FIELD,... : Titel in Anführungszeichen Ausnahme SCROLLBAR : Integer evtl. in Header definiert AUTOID für keine : Position (zentriert mit CENTER) Größe (automatisch mit AUTO) : Auswahl des Fonts (0,...,7) 0: normal1: bold 2: large7: large bold : je nach Control (z.B. MAXCHARS 15 für FIELD) (z.B. VALUE, MIN, MAX für SCROLLBAR)

12 Controls – Code Zugriff auf Controls FormPtr ft; FieldType* fieldname; UInt16 ind; Char* name; ft=FrmGetFormPtr(Startform); ind=FrmGetObjectIndex(ft,StartformName); fieldname=(FieldType*)FrmGetObjectPtr(ft,ind); name=FldGetTextPtr(fieldname); Zeiger auf Form holen Index des Control Elements in der angegebenen Form holen Zeiger auf Control holen Typecast nötig Zeiger auf Inhalt holen

13 Alerts - Übersicht Äquivalent zu Nachrichtenboxen unter anderen Betriebssystemen 4 Typen: -Information (I-Icon)- Confirmation (Fragezeichen) -Warning(Warndreieck)- Error (X-Icon) Beliebige Anzahl von Buttons, aber kein Zeilenumbruch Buttons können frei beschriftet werden Höhe variiert automatisch je nach Inhalt Nachricht kann Platzhalter enthalten (^1,^2,^3)

14 Alerts - Ressource Ressourcenskript: ALERT ID AlertWin INFORMATION BEGIN TITLE "Ende" MESSAGE "^1 ^2\nSie haben ^3!" BUTTONS "Ende" END MESSAGE: Nachrichtentext, bis zu 9 Zeilen, Zeilenumbruch mit "\n" TITLE: Titel, eine Zeile, zentriert Typ: INFORMATION, CONFIRMATION, WARNING, oder ERROR BUTTONS: Beschriftung der Buttons, getrennt durch Leerzeichen ^1, ^2, ^3 Platzhalter maximal 3

15 Alerts - Code Rückgabewert ist der Index des Buttons der gedrückt wurde, von links mit 0 beginnend Anzeigen des Alarms FrmAlert(UInt16 alertId); Alarm mit Platzhaltern anzeigen FrmCustomAlert(UInt16 alertId, const char *s1, const char *s2, const char *s3); Bsp.: FrmCustomAlert(AlertWin,"Schade",name,"verloren");

16 Menüs Große Ähnlichkeit zu anderen OS Normalerweise erst auf Knopfdruck sichtbar Pulldown Menüs nur einfach verschachtelt Shortcuts für die einzelnen Befehle Trennstriche möglich MENU ID MenueGame BEGIN PULLDOWN "Datei" BEGIN MENUITEM "Beenden" ID MenueGameQuit "Q“ END Name, ID, Shortcut

17 Übersicht IDE Anwendungsstart Benutzerschnittstelle Nachrichtenbehandlung –Nachrichtenschleife –Behandlung von Nachrichten Speicher- und Ressourcenmanagement Stringmanipulation Zusammenfassung

18 Nachrichtenschleife - Übersicht Aktive Anwendung erhält alle Nachrichten Fertige Handler für Menü- und Systemnachrich- ten müssen von der Anwendung aufgerufen werden Registrierung von Nachrichtenbehandlungsrou- tinen für Forms möglich Bei Verwendung von blockierendem Warten wird die CPU automatisch in doze mode versetzt Zum Beenden wird appStopEvent an die Anwendung geschickt

19 Nachrichtenschleife – Standardhandler Boolean SysHandleEvent (EventPtr eventP); Behandelt Nachrichten die Soft- und Hardkeys betreffen Sollte immer als erste Funktion aufgerufen werden Boolean MenuHandleEvent (MenuBarType *menuP, EventType *event, Uint16 *error) Behandelt Nachrichten die im Menübereich auftreten Schickt menuEvent an die Anwendung wenn ein Befehl ausgewählt wurde Boolean FrmDispatchEvent (EventType *eventP) Leitet Nachrichten an die Fensternachrichtenbehandlung weiter

20 Nachrichtenschleife – Code EventType event; do { EvtGetEvent(&event, evtWaitForever); if (SysHandleEvent(&event)) continue; if (MenuHandleEvent((void *)0, &event, &err)) continue; if(event.eType == frmLoadEvent) { … FrmSetEventHandler( form, (FormEventHandlerPtr) frmMainEventH); … } FrmDispatchEvent(&event); } while(event.eType != appStopEvent); Nachricht holen, blockierendes warten Standardhandler aufrufen Neues Fenster geladen? Nachrichtenbehandlungs- routine setzen Nachrichten an die Fenster weiterleiten

21 Nachrichten - Datenstruktur typedef struct { eventsEnum eType; Boolean penDown; UInt8 tapCount Int16 screenX Int16 screenY Union{... } data; }EventType; eType: Nachrichtenart z.B. appStopEvent, penDownEvent, menuEvent, keyDownEvent true: Stift gedrückt false: Stift oben Anzahl derTips mit dem Stift Position (X,Y) des Stiftes als das Ereignis ausgelöst wurde Nachrichtenspezifische Daten z.B. ID des Menüpunktes, ID des Control Elementes, etc

22 Nachrichten – Code Boolean frmMainEventH(EventPtr event) {... switch (event->eType) { case frmOpenEvent:... break; case ctlSelectEvent: if (event->data.ctlEnter.controlID == Startformok )... break; case nilEvent: break; } Wird geschickt wenn timeout Bei EvtGetEvent() abgelaufen ist z.B. zur Animationssteuerung Welcher Nachrichtentyp ? Form wird neu geöffnet Aufruf von Zeichenfunktion, etc Control wurde aktiviert Control: data.ctlEnter ID: data.ctlEnter.controlID

23 Übersicht IDE Anwendungsstart Benutzerschnittstelle Nachrichtenbehandlung Speicher- und Ressourcenmanagement -Dynamischer Speicher, Memory Manager -Statischer Speicher, Streams Stringmanipulation Zusammenfassung

24 Dynamischer Speicher - Übersicht Moveable Chunks –Speicherzugriff nur über Handles –Handles müssen locked und unlocked werden (Maximal 14 locks gleichzeitig) –Höherer Aufwand bei Programmierung Non-moveable Chunks –Direkter Zugriff –Reduzieren verfügbaren Speicher evtl. erheblich –Schnellere Programmierung

25 Dynamischer Speicher - Code UInt8 AllocMemory() { UInt8* s; memhandleSpielfeld=MemHandleNew(100); s=(UInt8*)MemHandleLock(memhandleSpielfeld); for(i=0;i<10;i++) for(j=0;j<10;j++) s[i*10+j]=0; MemHandleUnlock(memhandleSpielfeld); } UInt8 FreeMemory() { MemHandleFree(memhandleSpielfeld); } Größe des Speicherblocks in Bytes Zeiger gültig zwischen Lock und Unlock Speicherfeigabe

26 Statischer Speicher, Streams Keine Verzeichnisstruktur Stream Funktion ähnlich zu c Öffnen FileHand fh=FileOpen(0,"schiffe",0,0,fileModeReadWrite,NULL); Schreiben count=FileWrite(fh,&g_NrMoves,1,1,NULL); Schliessen FileClose(fh); Kartennummer, Name, type, creator, openmode, error Handle, Buffer, Elementgröße, Anzahl Elemente, error

27 Übersicht IDE Anwendungsstart Benutzerschnittstelle Nachrichtenbehandlung Speicher- und Ressourcenmanagement Stringmanipulation Zusammenfassung

28 Stringmanipulation gcc-Compiler unterstützt nur theoretisch alle c string Funktionen Probleme treten bei allen Funktionen auf die Speicher mittels "malloc" etc belegen wollen Programm wird durch einbinden von Methoden aus „string.h“ unnötig groß Lösung: Stringroutinen werden direkt vom Betriebssystem zur Verfügung gestellt Funktionsnamen der API-Funktionen sind nahezu identisch mit denen der c-Funktionen (meist bis auf Groß-, Kleinschreibung)

29 Übersicht IDE Anwendungsstart Benutzerschnittstelle Nachrichtenbehandlung Speicher- und Ressourcenmanagement Stringmanipulation Zusammenfassung

30 Zusammenfassung - 1 Sehr beschränkte Möglichkeiten bzgl. Grafik und Schriftausgabe (geringe Auflösung, Farbtiefe) Sorgfältiges GUI-Design nötig Speicher- / Ressourcenzugriff ungewohnt Umständliche Memhandles verleiten zur Verwendung von non-moveable chunks Nur sehr wenig statischer und dynamischer Speicher, Datenstrukturen müssen möglichst effizient gewählt werden

31 Zusammenfassung - 2 API leicht verständlich, besonders mit Hintergrundwissen Leichter Einstieg, da die meisten Funktionen identisch zu Standard c Funktionen sind (I/O, Strings,…)

32 Quellen IDE Installationsanleitung -win.html Palm OS Reference (3.5) Palm OS Companion (3.5)

33 Vielen Dank für die Aufmerksamkeit