/******************************************************************* * * Dieses Beispielprogramm demonstriert den Gebrauch scrollender * Eingabefelder in MagiC 3. * *******************************************************************/ #include <aes.h> #include <tos.h> #include <string.h> #include <magx.h> #include "magxlib.h" #include "edscroll.h" #define TLEN 30 int do_dialog (OBJECT *dialog); void main() { OBJECT *adr_dialog; ULONG crdate; int is_scroll; XTED xted; char tmplt[TLEN+1],txt[TLEN+1]; /* Feststellen, ob das System Scrolledit kann */ /* ------------------------------------------ */ is_scroll = ((0 < get_MagiC_ver(&crdate)) && (crdate >= 0x19950829L)); /* Applikation beim AES anmelden */ /* ----------------------------- */ if (appl_init() < 0) Pterm(1); /* Resourcedatei laden */ /* ------------------- */ if (!rsrc_load("edscroll.rsc")) { form_alert(1, "[3][Kann \"EDSCROLL.RSC\"|nicht finden][Abbruch]"); goto err; } rsrc_gaddr(0, EDIT, &adr_dialog); /* Scroll-TEDINFO initialisieren */ /* ----------------------------- */ init_scrlted(adr_dialog+EDITTXT, is_scroll, &xted, txt, tmplt, TLEN); strcpy(txt, "Beispiel"); /* Dialog */ /* ------ */ wind_update(BEG_MCTRL); graf_mouse(ARROW, 0L); do_dialog(adr_dialog); wind_update(END_MCTRL); rsrc_free(); err: appl_exit(); Pterm0(); } /**************************************************************** * * do_dialog * ****************************************************************/ int do_dialog(OBJECT *dialog) { int cx, cy, cw, ch; int exitbutton; form_center(dialog, &cx, &cy, &cw, &ch); form_dial(FMD_START, 0,0,0,0, cx, cy, cw, ch); objc_draw(dialog, ROOT, MAX_DEPTH, cx, cy, cw, ch); exitbutton = 0x7f & form_do(dialog, 0); form_dial(FMD_FINISH, 0,0,0,0,cx, cy, cw, ch); return(exitbutton); } /******************************************************************* * * MagiC-Version ermitteln. * ======================== * * Falls <crdate> != NULL ist, wird das Erstelldatum in der * Form jjjjmmdd geliefert. Durch "<" und ">" kann dann * direkt ermittelt werden, ob eine bestimmte Funktion * bei der vorliegenden MagiC- Version verfügbar ist. * * Rückgabe: 0 kein MagiC installiert * -1 bin noch im AUTO-Ordner * 0x0a0b Version a.b * *******************************************************************/ WORD get_MagiC_ver(ULONG *crdate) { ULONG *cookie; AESVARS *av; cookie = get_cookie('MagX'); if (!cookie) return(0); else { av = ((MAGX_COOKIE *) (*cookie))->aesvars; if (!av) return(-1); else if (crdate) { *crdate = av->date << 16L; /* jjjj0000 */ *crdate |= av->date >> 24L; /* jjjj00tt */ *crdate |= (av->date >> 8L) & 0xff00L; /* jjjjmmtt */ return(av->version); } } } /**************************************************************** * * Macht ein F(BOX)TEXT-Objekt scrollbar, wenn MagiC läuft. * * Wenn <is_scroll> FALSE ist, wird nur das Textfeld auf eine * Benutzerzeichenkette umgesetzt. * * Im RCS sollte das Textfeld leer gelassen werden, die Schablone * und die Valid-Zeichenkette müssen jedoch eingegeben werden, * weil sonst das RCS streikt. * Für scrollende Felder muß eine neue Schablone angelegt werden, * die in der .RSC-Datei angemeldete kann nicht verwendet werden, * weil sie zu kurz ist. Die hier angelegte Schablone besteht * nur aus '_'-Zeichen, weil dies 99.9% aller Anwendungsfälle * für scrollende !{"Objekte" ignore} abdeckt. Die Länge der * Valid-Zeichenkette ist egal, d.h. muß mindestens 1 sein, weil * das AES das letzte Zeichen der Valid-Zeichenkette * automatisch vervielfacht, bis die Länge des Textfeld erreicht * ist. * * Die maximale Länge für die Eingabezeichenkette ist in jedem * Fall (TEDINFO.te_txtlen - 1). * ****************************************************************/ void init_scrlted(OBJECT *o, WORD is_scroll, XTED *xted, char *txt, char *tmplt, WORD len) { TEDINFO *t; t = o->ob_spec.tedinfo; t->te_just = TE_LEFT; /* wichtig! */ t->te_ptext = txt; if (is_scroll) { memset(tmplt, '_', len); /* neue Schablone */ tmplt[len] = '\0'; xted->xte_ptmplt = tmplt; xted->xte_pvalid = t->te_pvalid; xted->xte_vislen = t->te_tmplen - 1; xted->xte_scroll = 0; t->te_tmplen = len+1; t->te_ptmplt = NULL; t->te_pvalid = (void *) xted; } t->te_txtlen = t->te_tmplen; }
Querverweis: AES Eingabefelder in MagiC GEM TEDINFO