File: methods.h

package info (click to toggle)
twin 0.4.0-4
  • links: PTS
  • area: main
  • in suites: woody
  • size: 3,804 kB
  • ctags: 23,904
  • sloc: ansic: 61,860; cpp: 1,023; makefile: 777; sh: 552; lex: 302; yacc: 231
file content (83 lines) | stat: -rw-r--r-- 2,798 bytes parent folder | download | duplicates (2)
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
#ifndef _TWIN_METHODS_H
#define _TWIN_METHODS_H

byte FindInfo(menu Menu, dat i);
window FakeOpenTerm(CONST byte *arg0, byte * CONST * argv);
widget FakeKbdFocus(widget W);
void FakeWriteAscii(window Window, ldat Len, CONST byte *Ascii);
void FakeWriteString(window Window, ldat Len, CONST byte *String);
void FakeWriteHWFont(window Window, ldat Len, CONST hwfont *HWFont);
void FakeWriteHWAttr(window Window, dat x, dat y, ldat Len, CONST hwattr *Attr);
byte FakeFindBorderWindow(window W, dat u, dat v, byte Border, hwfont *PtrChar, hwcol *PtrColor);

extern fn Fn;
#define FnObj		(Fn.f_obj)
#define FnGroup		(Fn.f_group)
#define	FnWidget	(Fn.f_widget)
#define	FnGadget	(Fn.f_gadget)
#define FnWindow	(Fn.f_window)
#define	FnScreen	(Fn.f_screen)
#define	FnRow		(Fn.f_row)
#define	FnMenuItem	(Fn.f_menuitem)
#define	FnMenu		(Fn.f_menu)
#define	FnMsgPort	(Fn.f_msgport)
#define	FnMutex		(Fn.f_mutex)
#define	FnMsg		(Fn.f_msg)
#define	FnModule	(Fn.f_module)
#define	FnDisplayHW	(Fn.f_display_hw)

#define Do(Command, ObjName)	(Fn##ObjName->Command)

#define Act(Command, Obj)	((Obj)->Fn->Command)

#define Delete(Obj)		Act(Delete, Obj)(Obj)

#define DeleteList(First)	while (First) Delete(First)

#define InsertOnly(ObjName, Obj, Parent) \
	Act(Insert, (Obj))((Obj), (Parent), NULL, NULL)

#define InsertFirst(ObjName, Obj, Parent) \
	Act(Insert, (Obj))((Obj), (Parent), NULL, (Parent)->First##ObjName)

#define InsertMiddle(ObjName, Obj, Parent, ObjPrev, ObjNext) \
	Act(Insert, (Obj))((Obj), (Parent), (ObjPrev), (ObjNext))

#define InsertLast(ObjName, Obj, Parent) \
	Act(Insert, (Obj))((Obj), (Parent), (Parent)->Last##ObjName, NULL)

#define Remove(Obj) \
	Act(Remove, (Obj))(Obj)

#define MoveFirst(ObjName, Parent, Obj) \
	(Remove(Obj), InsertFirst(ObjName, (Obj), (Parent)))

#define MoveLast(ObjName, Parent, Obj) \
	(Remove(Obj), InsertLast(ObjName, (Obj), (Parent)))

#define SendMsg(MsgPort, WhichMsg) \
	(InsertLast(Msg, (WhichMsg), (MsgPort)))

#define Info4Menu(Menu, Flags, Len, Text, ColText) \
	Act(SetInfo,(Menu))((Menu), (Flags), (Len), (Text), (ColText))

#define Win4Menu(Menu) \
	Do(Create4Menu,Window)(FnWindow, (Menu))

#define Row4Menu(Window, Code, Flags, Len, Name) \
	(row)Do(Create4Menu,MenuItem)(FnMenuItem, (obj)(Window), (window)0, (Code), (Flags), (Len), (Name))

#define Item4Menu(Menu, Window, Flags, Len, Name) \
	Do(Create4Menu,MenuItem)(FnMenuItem, (obj)(Menu), (Window), (udat)0, (Flags), (Len), (Name))

#define Item4MenuCommon(Menu) \
	Do(Create4MenuCommon,MenuItem)(FnMenuItem, (Menu))

void *OverrideMth(void **where, void *OldMethod, void *NewMethod);

#define OverrideMethod(ObjName, Command, ExpectedMethod, NewMethod) \
          OverrideMth((void **)&(Fn##ObjName->Command), (void *)ExpectedMethod, (void *)NewMethod)


#endif /* _TWIN_METHODS_H */