set the lock the task is waiting on, and re-add spinning tasks when a lock is released
[AROS.git] / workbench / classes / datatypes / text / main.c
blob2258427555de4d419d881d49651c29e33f0759a3
1 /**********************************************************************
2 text.datatype - (c) 2000 by Sebastian Bauer
4 This module is for testing the text.datatype engine
5 ***********************************************************************/
6 #include <datatypes/textclass.h>
8 #include <proto/exec.h>
9 #include <proto/intuition.h>
11 #include "textclass.h"
13 struct Screen *scr;
14 struct Window *wnd;
15 APTR text;
17 int handle_wnd()
19 int retval = 0;
20 struct IntuiMessage *imsg;
21 while ((imsg = (struct IntuiMessage *) GetMsg(wnd->UserPort)))
23 ULONG cl;
24 LONG mx, my;
25 UWORD code;
26 ULONG secs, mics;
28 cl = imsg->Class;
29 code = imsg->Code;
30 mx = imsg->MouseX;
31 my = imsg->MouseY;
32 secs = imsg->Seconds;
33 mics = imsg->Micros;
35 ReplyMsg((struct Message *) imsg);
37 switch (cl)
39 case IDCMP_CLOSEWINDOW:
40 retval = 1;
41 break;
43 case IDCMP_VANILLAKEY:
44 switch (code)
46 case 'p':
47 Text_Print(text);
48 break;
50 break;
52 case IDCMP_RAWKEY:
53 switch (code)
55 case CURSORDOWN:
56 Text_SetVisibleTop(text, Text_VisibleTop(text) + 1);
57 break;
59 case CURSORUP:
60 Text_SetVisibleTop(text, Text_VisibleTop(text) - 1);
61 break;
63 case CURSORRIGHT:
64 Text_SetVisibleLeft(text, Text_VisibleHoriz(text) + 1);
65 break;
67 case CURSORLEFT:
68 Text_SetVisibleLeft(text, Text_VisibleHoriz(text) - 1);
69 break;
71 break;
73 case IDCMP_MOUSEBUTTONS:
74 if (code == SELECTDOWN)
75 Text_HandleMouse(text, mx, my, SELECTDOWN, secs, mics);
76 else
77 Text_HandleMouse(text, mx, my, SELECTUP, 0, 0);
78 break;
80 case IDCMP_MOUSEMOVE:
81 Text_HandleMouse(text, mx, my, 0, 0, 0);
82 break;
85 return retval;
88 void loop(void)
90 ULONG wnd_mask = 1L << wnd->UserPort->mp_SigBit;
91 int ready = FALSE;
93 while ((ready == FALSE))
95 ULONG sigs = Wait(wnd_mask | 4096);
96 if (sigs & 4096)
97 ready = TRUE;
98 if (sigs & wnd_mask)
99 ready = handle_wnd();
103 void main()
105 if ((scr = LockPubScreen("Workbench")))
107 wnd = OpenWindowTags(NULL,
108 WA_Title, "Textview",
109 WA_CloseGadget, TRUE,
110 WA_DragBar, TRUE,
111 WA_DepthGadget, TRUE,
112 WA_Activate, TRUE,
113 WA_InnerHeight, 400,
114 WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_VANILLAKEY,
115 WA_SizeGadget, TRUE,
116 WA_MinWidth, 100,
117 WA_MinHeight, 100,
118 WA_MaxWidth, -1,
119 WA_MaxHeight, -1,
120 WA_ReportMouse, TRUE,
121 TAG_DONE);
123 if (wnd)
125 if ((text = Text_Create()))
127 Text_SetFrameBox(text, scr, wnd->RPort, (LONG) wnd->BorderLeft, (LONG) wnd->BorderTop, wnd->Width - wnd->BorderLeft - wnd->BorderRight - 1, wnd->Height - wnd->BorderTop - wnd->BorderBottom - 1);
128 Text_Load(text, "DH0:");
129 Text_Redraw(text);
130 loop();
131 Text_Free(text);
133 CloseWindow(wnd);
135 UnlockPubScreen(NULL, scr);