Version 2.10 (Žnderungen gegenber V2.00): - neue Beispiel-Programme zur Demonstration der Fenster-Routinen (u.a. Resource-Previewer, Clipboard-Viewer, XClipboard, Datei-Viewer) - Light-Version der Library durch Definition des Makros 'SMALL_EGEM' - Definition des View-Protokolls integriert - neue Funktionen: void SetDragDrop(int any_extension,char *exts) -> gewnschte/bevorzugte Dateierweiterungen fr das Drag&Drop- Protokoll festlegen (s. Anleitung) int SendDragDrop(int msx,int msy,int kstate,char *name, char *ext,long size,char *data) -> Daten per Drag&Drop-Protokoll an die Applikation senden, der das Fenster unter dem Mauszeiger geh”rt (s. Anleitung) void ob_setstate(OBJECT *tree,int object,int state); void ob_setflags(OBJECT *tree,int object,int flags); -> Objektflags/-status eines Objekts setzen void ob_select(DIAINFO *info,OBJECT *tree,int obj,int sel,int draw) -> Objekt 'obj' im Baum 'tree' in Abh„ngigkeit vom Parameter 'select' (de-) selektieren und evtl. neuzeichnen (draw!=0). void ob_disable(DIAINFO *info,OBJECT *tree,int obj,int dis,int draw) -> Objekt 'obj' im Baum 'tree' in Abh„ngigkeit vom Parameter 'dis' dis-/enablen und evtl. neuzeichnen (draw!=0). int ob_draw(DIAINFO *info,int object) -> Objekt 'object' des Dialogs 'info' darstellen (verkrzter Aufruf von ob_draw_chg(info,object,NULL,FAIL,FALSE)) void ob_clear_edit(OBJECT *tree) -> Text in allen Eingabefeldern des Baums 'tree' l”schen void menu_item_enable(int object,int enable) -> Men-Eintrag 'object' aktivieren (enable!=0) oder deaktivieren (enable==0) void menu_select(int title,int select) -> Men-Titel 'title' normal (select==0) oder invers (select!=0) darstellen void close_all_dialogs(void) -> alle ge”ffneten Dialoge schliežen void close_all_windows(void) -> Alle ge”ffneten Fenster schliežen. Sind vorher noch Dialoge ge”ffnet, so werden diese ebenfalls geschlossen. WIN *get_top_window(void) -> WIN-Struktur zum obersten Fenster ermitteln void window_name(WIN *win,char *title,char *icon_title) -> Titel des Fensters 'win' setzen -> title: Zeiger auf Fenstertitel oder NULL icon_title: Zeiger auf Fenstertitel im ikonifizierten Zu- stand oder NULL void window_info(WIN *win,char *info) -> Info-Zeile des Fensters 'win' auf 'info' setzen int window_first(WIN *win,GRECT *rect); int window_next(WIN *win,GRECT *rect); -> Verkrzte Aufrufe von wind_xget(handle,WF_FIRSTXYWH,...) bzw. wind_xget(handle,WF_NEXTXYWH,...) void window_top(WIN *win) -> Fenster 'win' nach oben bringen void window_bottom(WIN *win) -> Fenster 'win' nach unten legen WIN *window_find(int x,int y) -> WIN-Struktur des Fensters an den Koordinaten (x,y) ermitteln void window_slider(WIN *win,int vh,int pos,int size) -> Position (pos) und Gr”že (size) des vertikalen (vh==VERT_SLIDER) oder horizontalen (vh==HOR_SLIDER) Sliders des Fensters 'win' setzen void window_size(WIN *win,GRECT *size) -> Ausmaže des Fensters 'win' auf 'size' setzen void window_calc(int wctype,int kind,GRECT *in,GRECT *out) -> Entspricht von der Funktionalit„t der AES-Funktion wind_calc(), nur daž anstatt einzelner Parameter Zeiger auf GRECT-Strukturen erwartet werden void window_border(int kind,int x,int y,int w,int h,GRECT *out) -> Koordinaten des Randbereichs (WC_BORDER) aus der linken, oberen Ecke (x,y) des Fensters und der Breite/H”he des Arbeitsbereiches (w,h) berechnen void scroll_window(WIN *win,int mode,GRECT *area) -> Bereich 'area' des Fensters 'win' in Abh„ngigkeit vom Para- meter 'mode' (LINE_START,LINE_END,WIN_START,WIN_END, WIN_SCROLL,PAGE_LEFT,PAGE_UP,PAGE_RIGHT,PAGE_DOWN,LINE_LEFT, LINE_UP,LINE_RIGHT,LINE_DOWN) scrollen void window_reinit(WIN *win,char *title,char *icon_title, char *info,int home) -> Fenster 'win' reinitialisieren und neuzeichnen. U.a. wird gegebenenfalls die SCROLL-Struktur auf gltige Werte gesetzt und die Gr”že des Fensters an die maximalen bzw. minimalen Ausmaže angepažt. -> Parameter: (s.a. open_window()) home: Scroll-Position in linke obere Ecke (home!=0) void window_set_mouse(WIN *win,int in,int out, MFORM *in_form,MFORM *out_form) -> Form des Mauszeigers innerhalb und aužerhalb des Arbeits- bereiches des Fensters 'win' festlegen und setzen. void window_mouse(WIN *win) -> Mauszeiger des Fensters 'win' entsprechend den durch window_set_mouse() getroffenen Einstellungen setzen int rc_sc_save(GRECT *area,RC_RECT *rc) -> Bildschirmbereich 'area' in Rechteck-Struktur 'rc' sichern (RC_RECT-Struktur und Rckgabewerte s. Anleitung) int rc_sc_freshen(int sx,int sy,RC_RECT *rc) -> Rechteck-Struktur 'rc' erneuern, d.h. Bildschirmbereich an den Koordinaten (sx,sy) in Puffer kopieren (s. Anleitung) int rc_sc_restore(int dx,int dy,RC_RECT *rc,int mode) -> Rechteck-Struktur 'rc' freigeben und/oder an Position (dx,dy) zurckkopieren (s. Anleitung) int rc_sc_scroll(GRECT *in_out,int dist_x,int dist_y,GRECT *out2) -> Rechteck 'in_out' um Distanz (dist_x,dist_y) verschieben und neuzuzeichnende Rechtecke in 'in_out' und 'out2' zurckgeben. -> Rckgabewert: Anzahl der neuzuzeichnenden Rechtecke int scrp_path(char *path,char *file) -> vollst„ndigen Zugriffspfad der Clipboard-Datei 'file' (sofern file!=NULL) ermitteln (s. Anleitung) char LowerChar(char ch) char UpperChar(char ch) -> Zeichen 'ch' in Klein-/Grožbuchstaben umwandeln, wobei auch Umlaute beachtet werden void *GetMsgBuffer(long size) -> globalen Speicher (u.a. fr XAcc-2/AV-Kommunikation) der Gr”že 'size' anfordern void drive_changed(int drive) -> Inhalt des Laufwerks 'drive' (0=A,1=B,2=C,...,-1=alle Lauf- werke) wurde ver„ndert (SH_WDRAW-Nachricht wird an alle Applikationen gesendet) char *GetFilename(char *path) -> Zeiger auf Dateiname des Pfades 'path' ermitteln. Enth„lt der Pfad keinen Dateinamen, so zeigt der Rckgabewert auf das Ende (Nullbyte) des Pfades char *GetExtension(char *path) -> Zeiger auf Erweiterungs des Dateinamens des Pfades 'path' ermitteln. Enth„lt der Pfad keinen Dateinamen oder keine Erweiterung, so zeigt der Rckgabewert auf das Ende (Nullbyte) des Pfades char *GetPath(char *path) -> Dateiname des Pfades 'path' wird entfernt und ein Zeiger auf das Ende des Pfades (Nullbyte) zurckgegeben int GetDrive(char *path) -> Laufwerk des Pfades 'path' ermitteln (0=A,1=B,2=C,...) void MakeFullpath(char *dest,char *path,char *file) -> kompletten Pfadnamen aus Pfad 'path' (sofern path!=NULL, wobei der Pfad keinen abschlieženden Backslash enthalten muž) und Datei 'file' erstellen und im String 'dest' zurck- geben. Wird fr den Pfad 'path' NULL bergeben, so muž sich der Pfad bereits in 'dest' befinden! int FileSelect(char *title,char *path,char *fname,char *sel, int no_insel) -> Dateiselector aufrufen, wobei diese Funktion automatisch erkennt, ob ein erweiterter Fileselector vorliegt (Para- meter und Rckgabewerte s. Anleitung) void MouseOn(void); void MouseOff(void); -> Mauszeiger an/-ausschalten. Diese Funktionen merken sich intern, ob der Mauszeiger bereits an- oder ausgeschaltet ist void MouseArrow(void); void MouseCursor(void); void MouseBee(void); void MouseHourGlass(void); void MousePointHand(void); void MouseFlatHand(void); void MouseThinCross(void); void MouseThickCross(void); void MouseOutlineCross(void); -> Mausform einstellen int sl_key(int scan,int ascii) -> Aus Scan-Code 'scan' und ASCII-Code 'ascii' Tastencode fr SLKEY-Struktur berechnen - neue Parameter: int get_dialog_info(int *,int *,int *wins,DIAINFO **) -> Anzahl der offenen Fenster, sofern wins!=NULL int xdialog(OBJECT *,char *,char *icon_title,OBJECT *icon,...) boolean open_dialog(OBJECT *,DIAINFO *,char *, char *icon_title,OBJECT *icon,...) WIN *open_window(char *,char *icon_title,char *,char *info, OBJECT *icon,int,int,int min_w,int min_h, GRECT *max,GRECT *curr,SCROLL *scroll, void (*redraw)(WIN *,GRECT *)) -> icon_title: Fenstername im ikonifizierten Zustand oder NULL info: Zeiger auf Infozeile oder NULL icon: Zeiger auf Objektbaum, der fr die ikonifizierte Darstellung benutzt wird, oder NULL min_w: minimale Fensterbreite min_h: minimale Fensterh”he max: maximale Fensterausmaže curr: Fensterausmaže scroll: Zeiger auf initialisierte SCROLL-Struktur fr automatisches Scrolling oder NULL redraw: Routine, die den Fenster-Redraw bernimmt oder NULL void redraw_window(WIN *win,GRECT *area) -> L”st einen Redraw ber das Rechteck 'area' des Fensters 'win' aus int xalert(int,int,int,BITBLK *,int modal,...) -> System-/Applikations-modale Alert-Box void dial_colors(int,int,int,int,int,int,int,int alert_icon) -> Farbe des Alert-Icons (0-15) void exit_gem(int status) void close_rsc(int status) -> beide Funktionen melden jetzt zus„tzlich die Menleiste ab und beenden das Programm mit dem Rckgabewert 'status' - ge„nderte Parameter: boolean menu_dropped(void) void menu_enable(boolean enable,boolean show) -> Zeiger auf Menleiste muž nicht mehr bergeben werden void menu_enable(boolean enable); -> Menleiste wird jetzt immer nach der Žnderung neuge- zeichnet int scrp_find(char *extensions,char *); -> Scrap-Directory (Clipboard) nach Scrap-Datei mit einer der durch Komma, Punkt oder Leerzeichen getrennten Erweiterungen 'extensions' (z.B. "img.txt.asc.ps") durchsuchen -> Rckgabewerte s. Anleitung - neue globale Variablen: int search: appl_search()-Funktion vorhanden int colors_available; Anzahl der Farbabstufungen - neue Fensterdialog-Elemente (mssen von der Anwendung gesetzt und ausgewertet werden) (Parameter 'mode' bei open_dialog() usw.): #define WD_HSLIDER 256 /* hor. Slider, Pfeile links/rechts */ #define WD_VSLIDER 512 /* vert. Slider, Pfeile hoch/runter */ #define WD_SIZER 1024 /* Sizer */ #define WD_FULLER 2048 /* Fuller */ #define WD_INFO 4096 /* Info-Zeile */ /* Gr”že bei WM_FULLED/WM_SIZED automatisch anpassen und Nachricht OBJC_SIZED (s. Anleitung) versenden (ansonsten darf die Dialog- gr”že nicht ge„ndert werden!) */ #define WD_SET_SIZE 8182 - Untersttzung der verschiedenen Drag&Drop-Varianten (neue Struktur DRAG_DROP und neue Nachricht OBJC_DRAGGED) - Funktion scrp_changed() (an offizielle Version des Clipboard-Proto- kolls angepažt) verschickt jetzt zus„tzlich zur SC_CHANGED- eine AV_PATH_UPDATE-Nachricht an den AV-Server - scrp_clear() verschickt keine SC_CHANGED-Nachricht mehr - bis zu 16 Zeilen Text in Alertboxen und Text optional mit Attributen - DEFAULT-Button kann jetzt auch Help- oder Undo-Button sein - XAcc-Struktur erweitert (av_msgs,va_msgs, s. Anleitung) - Fenster-Struktur 'WIN' stark erweitert sowie neue Struktur 'SCROLL' fr automatisches Scrolling (s. Anleitung) - Fenstername, -info und -slider werden nach dem ICFS-Deikonifizieren auf ihre vorherigen Werte gesetzt - vollautomatische Verwaltung von Fenstern im ikonifizierten Zustand -> Funktion 'redraw_iconified' entfernt - Fenster k”nnen mit Ctrl-Space ikonifiziert werden, wobei durch eine zus„tzlich gedrckte Shift-Taste alle Fenster ikonifiziert werden - Fenster-Fuller kann durch Ctrl-'*' (Ziffernblock) angew„hlt werden - ICFS-kompatible Ikonifizierung, falls weder ICFS noch MTOS-Iconify vorhanden sind (dank Dirk Haun @ WI2) - evtl. noch ge”ffnete Fenster werden am Programmende geschlossen - Ist das oberste Fenster ein Dialog und besitzt dieser ein Eingabefeld, so werden per ACC_TEXT-empfangene Texte in diesem Eingabefeld ein- gefgt - TriState-Checkboxen (Checkboxen mit TOUCHEXIT-Flag) - beliebige GDOS-Fonts/-Gr”žen sowie VDI-Schreibmodi bei Attribut-Text - nicht-proportionale GDOS-Fonts in Eingabefeldern, sofern dies vom AES untersttzt wird - alle Eingabefelder eines Dialogs durch Shift-Esc l”schen - Enth„lt die Eingabemaske eines der Zeichen ',.;:\/' und wird dieses Zeichen eingegeben, wenn der Cursor VOR diesem Zeichen steht, so wird das Eingabefeld bis zu diesem Zeichen mit Leerzeichen gefllt und der Cursor hinter dieses Zeichen gesetzt - Event-Handling (Timer,Messsages) und Echtzeitschieber "geringfgig" optimiert sowie Pufferung von Fensternachrichten bei ge”ffneten systemmodalen Dialogen oder Popups, 4 Timer-Events (MU_TIMER1-4) - globale Variablen 'menu' (Menleisten mssen jetzt immer mit menu_install() an-/abgemeldet werden) und 'redraw' entfernt - beim Schliežen von Fenster wurden sich vergr”žernde anstatt sich ver- kleinernde Rechtecke gezeichnet - Rckgabewert von init_gem() bzw. open_rsc() war u.a. fehlerhaft, wenn keine Xacc/AV-Programmnamen bergeben wurden - bei der Terminierung des Programms (exit_gem() bzw. close_rsc()) wird jetzt beachtet, ob das Programm als Accessory geladen wurde und ob vorher eine erfolgreiche Initialisierung stattgefunden hat - teilweise Redraw-Fehler bei Text-Eingabe in Hintergrundfenstern - unter MultiTasking wird jetzt beachtet, welcher Applikation die Menleiste geh”rt, um eine unn”tige Prozežumschaltung zu verhindern - Makro-Definition der wichtigsten Scan-Codes in Header-File integriert - Nachricht WIN_SCROLLED wird an Applikation geschickt, wenn die Scrollposition eines Fensters ver„ndert wurde - AP_TERM wurde im Beispielprogramm nicht korrekt ausgewertet - die Funktion XaccBroadCast nutzt jetzt eine evtl. vorhandene AES-Broadcast-Funktion (shel_write(7,...) - EGEM-Programme laufen jetzt immer in der MiNT-Domain (vorher nur bei Verwendung der MiNT-Library) - Anleitung korrigiert und erweitert - wurde bei rsrc_calc() bzw. rsrc_init() die Entwurfsfontgr”že angegeben, so hatte die Menleiste u.a. bei anderen Systemfonts als 16x8 eine zu kleine H”he - die Pure-C-Rechteck-Assemblerroutinen funktionierten nicht bei neg. Koordinaten - kleinere Probleme mit GNU-C/Lattice-C von Markus Kilbinger beseitigt (u.a. Implementation der appl_search()-Funktion) - kleinere Fehler in den Xacc2/AV-Protokollen sowie der Ereignis- auswertung behoben - Fenster von applikationsmodalen Alertboxen werden nicht mehr beim AV-Server angemeldet - Wurde mit einem Button-Event auf das Drcken und mit dem anderen Button-Event auf das Loslassen einer Maustaste gewartet, so gab es eine Endlosschleife - Nachricht OBJC_CHANGED wurde bei Slidern und Radiobuttons nicht ver- schickt - Funktion 'scrp_init' entfernt (wird nur noch intern ausgefhrt) - Variable 'colors' enthielt Anzahl der Farbabstufungen der Farb- palette und nicht die Anzahl der darstellbaren Farben - Variablen 'max_w' sowie 'max_h' enthielten um einen Pixel zu kleine Bildschirmbreite/-h”he