/
FLYDIAL.H
executable file
·478 lines (349 loc) · 13.1 KB
/
FLYDIAL.H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
/*
@(#)FlyDial/flydial.h
@(#)Julian F. Reschke, 30. M„rz 1991
bitte aufmerksam den GEN-File durchlesen!
*/
#ifndef __FLYDIAL__
#define __FLYDIAL__
#if MSDOS
# include "vdi.h"
# include "aes.h"
#else
# include <vdi.h>
# include <aes.h>
# include <tos.h>
#endif
#include <stddef.h>
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
#define ALCENTER "\001"
#define ALRIGHT "\002"
extern int DialWk; /* wird von allen meinen Routinen benutzt */
typedef void *(*DIALMALLOC) (size_t);
typedef void (*DIALFREE) (void *);
extern DIALMALLOC dialmalloc;
extern DIALFREE dialfree;
/*
FlyDial Raster Manager
*/
typedef struct RDB
{
int saved;
char filename[14];
int handle;
int fullSlices;
int lastSliceHeight;
int sliceHeight;
int scanlineSize;
int planes;
}
RDB;
/* DOS-only: Initialize the raster manager and set the tempdir.*/
int RastInit(char *tempdir);
/* DOS-only: Terminate the raster manager */
void RastTerm(void);
/* DOS-only: write a part of the screen to disk */
int RastDiskSave(RDB *rdb, int x, int y, int w, int h);
/* DOS-only: retrieve a part of the screen from disk */
int RastDiskRestore(RDB *rdb, int x, int y, int w, int h);
/* GrӇe eines Bildschirmausschnitts in Bytes */
unsigned long RastSize (int w, int h, MFDB *TheBuf);
/* Bildschirmausschnitt in Buffer speichern */
void RastSave (int x, int y, int w, int h, int dx, int dy,
MFDB *TheBuf);
/* Bildschirmausschnitt aus Buffer zurckholen */
void RastRestore (int x, int y, int w, int h, int sx, int sy, MFDB *TheBuf);
void RastBufCopy (int sx, int sy, int w, int h, int dx, int dy, MFDB *TheBuf );
/* Setze udsty auf eine so gepunktete Linie, daž bei einem grauen
Desktophintergrund eine schwarze Linie erscheint (xy[]: Anfangs-
und Endpunkt der Linie */
void RastSetDotStyle (int ha, int *xy);
/* Malt gepunktetes Rechteck */
void RastDotRect (int ha, int x, int y, int w, int h);
void RastDrawRect (int ha, int x, int y, int w, int h);
void RastTrans (void *saddr, int swb, int h, int handle);
void RastGetQSB(void **qsbAddr, int *qsbSize);
/*
ersetzt form_alert (locker)
Image: Pointer auf Bitimage
String: Text, UNFORMATIERT. Senkrechter Strich fr 'harten'
Umbruch erlaubt.
Default: Nummer des Default-Buttons (zero-based)
Buttons: Button-Namen, getrennt durch '|', Shortcuts durch
vorangestelltes '[' gekennzeichnet.
*/
int DialAlert (BITBLK *Image, const char *String, int Default,
const char *Buttons);
/*
Unterschied zu DialAlert: Icon ist animiert
Image: Zeiger auf Liste von BITBLKS, NULL-terminiert
Durations: Zeiger auf Liste von Warteintervallen (ms)
*/
int DialAnimAlert (BITBLK **Image, int *Durations, char *String,
int Default, const char *Buttons);
typedef struct
{
OBJECT *Tree;
MFDB Buffer;
int x, y, w, h;
int offset;
RDB rdb;
} DIALINFO;
/*
Zum Anfang des Dialogs aufrufen
Return: 0: Hintergrund konnte NICHT gebuffert werden!
Hinweis: nach DialStart darf man NICHT mehr mit form_- oder
DialCenter die Position ver„ndern!!!!!
*/
int DialStart (OBJECT *TheTree, DIALINFO *D);
int DialExStart (OBJECT *TheTree, DIALINFO *D, int use_qsb);
/*
Bildschirmplatz wieder freigeben
*/
void DialEnd (DIALINFO *D);
/* Dialogbox ber den Bildschirm bewegen */
int DialMove (DIALINFO *D, int sx, int sy, int sw, int sh);
/*
Žquivalent zu form_do
aktiviert die Move-Routine bei Anklicken eines Objekt mit
extended object type 17 und TOUCHEXIT-Status
liefert in StartOb auch das AKTUELLE Edit-Obj ZURšCK!!!
*/
int DialDo (DIALINFO *D, int *StartOb);
void DialDraw (DIALINFO *D);
void DialCenter (OBJECT *D);
/*
Initialisiert bzw. deinitialisiert die Dial-Routinen
malloc() und free() sind jetzt konfigurierbar, zB
DialInit (malloc, free);
*/
int DialInit (void *, void *);
void DialExit (void);
/*
Ersetzen jeweils die gleichnamigen
*/
int FormButton (OBJECT *tree, int obj, int clicks, int *nextobj);
int FormKeybd (OBJECT *tree, int edit_obj, int next_obj, int kr,
int ks, int *onext_obj, int *okr);
int FormXDo (OBJECT *tree, int *startfld);
int FormDo (OBJECT *tree, int startfld);
/*
Installiert einen neuen Keyboard-Handler in FormDo
*/
typedef int (*FORMKEYFUNC) (OBJECT *, int, int, int, int, int *, int *);
void FormSetFormKeybd (FORMKEYFUNC fun);
FORMKEYFUNC FormGetFormKeybd (void);
typedef int (*VALFUN)(OBJECT *tree, int ob, int *chr, int *shift,
int idx);
void FormSetValidator (char *valchars, VALFUN *funs);
extern int HandStdWorkIn[];
extern int HandAES, HandXSize, HandYSize, HandBXSize, HandBYSize;
int HandFast (void);
int HandYText (void);
void HandScreenSize (int *x, int *y, int *w, int *h);
void HandInit (void);
void HandClip (int x, int y, int w, int h, int flag);
#define G_ANIMIMAGE 42
typedef struct
{
BITBLK **Images; /* Liste der Bitblocks, durch Nullpointer
abgeschlossen */
int *Durations;
int Current;
} ANIMBITBLK;
/*
Alle Routinen sollten call-kompatibel zu den Vorbildern sein
Wichtigster Unterschied:
Extended object type 18: spezielle Buttons
- durch vorangestelltes '[' wird Shortcut gekennzeichnet.
Beispiel: "[Abbruch" ergibt Text "Abbruch" und kann auch
mit ALT-A aktiviert werden
- handelt es sich bei dem Button um einen Exit-Button, dann
wird die H”he um 2 Pixel vergr”žert, um Platz fr die
Unterstreichung zu lassen
- bei anderen Button-Typen wird der Text NEBEN einen kleinen
Knopf gesetzt, der -- je nach 'Radio Button' oder nicht --
verschieden aussieht
Extended object type 17: Dialog-Mover
Fr ein 'Eselsohr' wie in den Alertboxen bitte folgendes
Objekt benutzen:
- I-BOX, Extended type 17, TOUCHEXIT, OUTLINE, CROSSED
Extended object type 19: UNDERLINE
Das Objekt wird mit einer horizontalen Linie unterstrichen
(10.6.1989)
Extended object type 20: TITLELINE
Speziell fr beschriftete Rahmen. Man nehme einen normalen
Button (mit Outline). Bei TITLELINE-Objekten wird der
Text dann nicht in der Mitte zentriert, sondern direkt
(type-over) ber dem oberen Rand ausgegeben. Im Beispiel-RSC
ansehen!
Extended object type 21: HELP-Taste
Objekt kann auch durch Drcken der HELP-Taste bet„tigt
werden. Zum Design: m”glichst wie in SCSI-Tool, also:
Text, Outlined, Shadowed, Font klein, zentriert, 'HELP'
*/
#if __MSDOS__
VOID ObjcMyButton(VOID);
VOID ObjcAnimImage(VOID);
#else
int cdecl ObjcMyButton (PARMBLK *p);
int cdecl ObjcAnimImage (PARMBLK *p);
#endif
int ObjcChange (OBJECT *tree, int obj, int resvd, int cx, int cy,
int cw, int ch, int newstate, int redraw);
void ObjcXywh (OBJECT *tree, int obj, GRECT *p);
void ObjcToggle (OBJECT *tree, int obj);
int ObjcGParent (OBJECT *tree, int obj);
void ObjcDsel (OBJECT *tree, int obj);
void ObjcSel (OBJECT *tree, int obj);
int ObjcDraw (OBJECT *tree, int startob, int depth, int xclip,
int yclip, int wclip, int hclip);
int ObjcTreeInit (OBJECT *tree);
int ObjcRemoveTree (OBJECT *tree);
int ObjcOffset (OBJECT *tree, int oby, int *x, int *y);
OBSPEC *ObjcGetObspec (OBJECT *tree, int index);
/*
Dier vertikalen Koordinaten der Objekte im Baum werden mit
a/b multipliziert. 1.5-zeiliger Zeilenabstand also mittels
a=3, b=2. Ansehen!
*/
void ObjcVStretch (OBJECT *tree, int ob, int a, int b);
#define FLYDIALMAGIC 'FLYD'
typedef struct
{
long me_magic; /* == FLYDIALMAGIC */
OBJECT *me_sub;
int me_obnum;
char *me_title;
USERBLK me_ublk;
} MENUSPEC;
void PoppInit (void); /* tut das Offensichtliche */
void PoppExit (void); /* ebenso */
void PoppResult (OBJECT **Tree, int *obj);
void PoppChain (OBJECT *ParentTree, int ParentOb,
OBJECT *SubTree, int ChildOb, MENUSPEC *TMe);
/* entweder muž ein Zeiger (auf eine zu fuellende
MENUSPEC-Struktur bergeben werden, oder NULL
(dann wird der benoetigte Speicher gemalloct */
void PoppUp (OBJECT *Tree, int x, int y, OBJECT **ResTree, int *resob);
/* ersetzt gestrichelte Linie in Mens durch durchgezogene */
void MenuSet2ThinLine (OBJECT *tree, int ob);
/* macht die Mens im Menbaum ein Zeichen schmaler (wg. Kuma-Resource)
(wenn tune != FALSE.) und „ndert die gestrichelten Linien mit
MenuSet2ThinLine; patcht Breite der Menleiste */
void MenuTune (OBJECT *tree, int tune);
/* Gr”že eines Bildschirmausschnitts in Bytes */
unsigned long RastSize (int w, int h, MFDB *TheBuf);
/* Bildschirmausschnitt in Buffer speichern */
void RastSave (int x, int y, int w, int h, int dx, int dy,
MFDB *TheBuf);
/* Bildschirmausschnitt aus Buffer zurckholen */
void RastRestore (int x, int y, int w, int h, int sx, int sy, MFDB *TheBuf);
void RastBufCopy (int sx, int sy, int w, int h, int dx, int dy, MFDB *TheBuf );
/* Setze udsty auf eine so gepunktete Linie, daž bei einem grauen
Desktophintergrund eine schwarze Linie erscheint (xy[]: Anfangs-
und Endpunkt der Linie */
void RastSetDotStyle (int ha, int *xy);
/* Malt gepunktetes Rechteck */
void RastDotRect (int ha, int x, int y, int w, int h);
void RastDrawRect (int ha, int x, int y, int w, int h);
void RastTrans (void *saddr, int swb, int h, int handle);
void RectAES2VDI (int x, int y, int w, int h, int *xy);
void RectGRECT2VDI (GRECT *g, int *xy);
int RectInter (int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2,
int *x3,int *y3,int *w3,int *h3);
int RectOnScreen (int x, int y, int w, int h);
int RectInside (int x, int y, int w, int h, int x2, int y2);
int RectGInter (GRECT *a, GRECT *b, GRECT *c);
void RectClipWithScreen (GRECT *g);
extern BITBLK *ImQuestionMark (void), *ImHand (void), *ImInfo (void);
extern BITBLK *ImFinger (void), *ImBomb (void);
extern BITBLK *ImPrinter (void), *ImDisk (void), *ImDrive (void);
extern BITBLK *ImExclamation (void), *ImSignQuestion (void);
extern BITBLK *ImSignStop (void), *ImSqExclamation (void);
extern BITBLK *ImSqQuestionMark (void);
void WindUpdate (int mode);
void WindRestoreControl (void);
void GrafMouse (int num, MFORM *form);
void GrafGetForm (int *num, MFORM *form);
/*
rel: 1: relativ zur Mausposition
cob: Objekt, das unter der Maus erscheinen soll (oder -1)
mustbuffer: 1: bei Speichermangel abbrechen
wenn mustbuffer gesetzt ist und der Speicher nicht reicht,
erh„lt man in resob -2 zurck
*/
void JazzUp (OBJECT *Tree, int x, int y, int rel, int cob,
int mustbuffer, OBJECT **ResTree, int *resob);
/*
Die Idee ist folgende: man hat einen Button, den Cycle-Button und das
Poppup-Men. Das Men enth„lt mehrere Eintr„ge vom gleichen Typ wie
der Button. Der ob_spec im Button -- also die aktuelle Einstellung --
ist IDENTISCH mit einem der ob_specs im Men. Beim Aufruf gibt man
einen Zeiger auf den ob_spec des Buttons mit. JazzSelect sucht den
Eintrag im Men, setzt einen Haken davor (also zwei Zeichen Leerraum
davor) und zentriert das Men entsprechend. NACH JazzSelect zeigt der
Zeiger auf den ob_spec des zuletzt im Men selektierten Objekts. Dieser
ob_spec wird nun in den Button eingetragen un der Button wieder
neu gemalt. docycle gibt an, ob ein PoppUp erscheinen soll (0) oder
nur `weitergebl„ttert' werden soll (-2). Dieser Modus wird auch
benutzt, wenn das Poppup-Men nicht aufgerufen werden konnte (Speicher-
platz).
*/
/*
Box, ob: Tree und Objekt des betr. Knopfes
Poppup: Tree mit dem Popup-Men
docheck: 1: aktuellen Wert mit Haken versehen
docycle: 0: Popup, -1: einen Wert zurck, 1: einen Wert vor
-2: cyclen
obs: neuer obspec
returns: sel. Objekt bzw. -1
*/
int JazzSelect (OBJECT *Box, int ob, OBJECT *Poppup, int docheck,
int docycle, long *obs);
typedef struct
{
int id;
struct {
unsigned isprop : 1;
unsigned isfsm : 1;
} flags;
char name[33];
} FONTINFO;
typedef struct
{
int handle; /* vdi-handle auf dem gearbeitet wird */
int loaded; /* Fonts wurden geladen */
int sysfonts; /* Anzahl der Systemfonts */
int addfonts; /* Anzahl der Fonts, die geladen wurden */
FONTINFO *list; /* Liste von FONTINFO-Strukturen */
} FONTWORK;
/* Bei FontLoad muž das handle gesetzt werden und beim ersten
* Aufruf muž loaded FALSE(0) sein. Weiterhin muž in sysfonts die
* Anzahl der Fonts stehen, die man beim ™ffnen der Workstation
* in work_out bekommen hat.
*/
void FontLoad (FONTWORK *fwork);
/*
* Baut die Liste list in fwork auf, falls noch nicht besetzt.
* Bei Rckgabe von FALSE hat das Ganze nicht geklappt.
*/
int FontGetList (FONTWORK *fwork, int test_prop, int test_fsm);
/* Liste ist readonly */
/* Deinstalliert die Fonts auf der Workstation handle und gibt,
* falls list != NULL ist die Liste wieder frei
*/
void FontUnLoad (FONTWORK *fwork);
/* Fontgr”že unter Bercksichtigung von FSMGDOS setzen */
int FontSetPoint (FONTWORK *F, int handle, int id, int point,
int *cw, int *ch, int *lw, int *lh);
/* Feststellen, ob FSM-Font */
int FontIsFSM (FONTWORK *F, int id);
int vst_arbpt (int handle, int point, int *char_width,
int *char_height, int *cell_width, int *cell_height);
void vqt_devinfo (int handle, int devnum, int *devexists, char *devstr);
#endif