Mercurial > sdl-ios-xcode
annotate src/timer/os2/SDL_systimer.c @ 3844:332a59e39ce1 SDL-ryan-multiple-audio-device
I really don't want to update these last two audio backends...I added an
error that says if no one complains, the backends will be removed eventually.
So if anyone ever wants them and they care enough to speak up, we'll know to
do something about it. If no one does, that's less code to maintain. :)
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Tue, 17 Oct 2006 06:45:17 +0000 |
parents | 45e566003276 |
children | 866052b01ee5 |
rev | line source |
---|---|
1190 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
1190 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
1190 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
1190 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
13 Lesser General Public License for more details. |
1190 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1190
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
1190 | 18 |
19 Sam Lantinga | |
20 slouken@libsdl.org | |
21 */ | |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 #include "SDL_config.h" |
1190 | 23 |
1635
92947e3a18db
Make sure code is only compiled if the appropriate subsystem is enabled
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
24 #ifdef SDL_TIMER_OS2 |
92947e3a18db
Make sure code is only compiled if the appropriate subsystem is enabled
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
25 |
1190 | 26 #define INCL_DOSMISC |
27 #define INCL_DOSERRORS | |
28 #define INCL_DOSSEMAPHORES | |
29 #define INCL_DOSDATETIME | |
30 #define INCL_DOSPROCESS | |
31 #define INCL_DOSPROFILE | |
32 #define INCL_DOSEXCEPTIONS | |
33 #include <os2.h> | |
34 | |
35 #include "SDL_thread.h" | |
36 #include "SDL_timer.h" | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
37 #include "../SDL_timer_c.h" |
1190 | 38 |
39 | |
40 #define TIME_WRAP_VALUE (~(DWORD)0) | |
41 | |
42 /* The first high-resolution ticks value of the application */ | |
43 static long long hires_start_ticks; | |
44 /* The number of ticks per second of the high-resolution performance counter */ | |
45 static ULONG hires_ticks_per_second; | |
46 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
47 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
48 SDL_StartTicks(void) |
1190 | 49 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
50 DosTmrQueryFreq(&hires_ticks_per_second); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
51 DosTmrQueryTime((PQWORD) & hires_start_ticks); |
1190 | 52 } |
53 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
54 DECLSPEC Uint32 SDLCALL |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
55 SDL_GetTicks(void) |
1190 | 56 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
57 long long hires_now; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
58 ULONG ticks = ticks; |
1190 | 59 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
60 DosTmrQueryTime((PQWORD) & hires_now); |
1190 | 61 /* |
62 hires_now -= hires_start_ticks; | |
63 hires_now *= 1000; | |
64 hires_now /= hires_ticks_per_second; | |
65 */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
66 /* inline asm to avoid runtime inclusion */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
67 _asm { |
3838
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
68 push edx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
69 push eax |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
70 mov eax, dword ptr hires_now |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
71 mov edx, dword ptr hires_now + 4 |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
72 sub eax, dword ptr hires_start_ticks |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
73 sbb edx, dword ptr hires_start_ticks + 4 |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
74 mov ebx, 1000 |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
75 mov ecx, edx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
76 mul ebx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
77 push eax |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
78 push edx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
79 mov eax, ecx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
80 mul ebx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
81 pop eax |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
82 add edx, eax |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
83 pop eax |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
84 mov ebx, dword ptr hires_ticks_per_second |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
85 div ebx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
86 mov dword ptr ticks, eax |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
87 pop edx |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
88 pop eax |
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
89 } |
1190 | 90 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
91 return ticks; |
1190 | 92 |
93 } | |
94 | |
95 /* High resolution sleep, originally made by Ilya Zakharevich */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
96 DECLSPEC void SDLCALL |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
97 SDL_Delay(Uint32 ms) |
1190 | 98 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
99 /* This is similar to DosSleep(), but has 8ms granularity in time-critical |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
100 threads even on Warp3. */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
101 HEV hevEvent1 = 0; /* Event semaphore handle */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
102 HTIMER htimerEvent1 = 0; /* Timer handle */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
103 APIRET rc = NO_ERROR; /* Return code */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
104 int ret = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
105 ULONG priority = 0, nesting; /* Shut down the warnings */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
106 PPIB pib; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
107 PTIB tib; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
108 char *e = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
109 APIRET badrc; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
110 int switch_priority = 50; |
1190 | 111 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
112 DosCreateEventSem(NULL, /* Unnamed */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
113 &hevEvent1, /* Handle of semaphore returned */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
114 DC_SEM_SHARED, /* Shared needed for DosAsyncTimer */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
115 FALSE); /* Semaphore is in RESET state */ |
1190 | 116 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
117 if (ms >= switch_priority) |
1190 | 118 switch_priority = 0; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
119 if (switch_priority) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
120 if (DosGetInfoBlocks(&tib, &pib) != NO_ERROR) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
121 switch_priority = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
122 else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
123 /* In Warp3, to switch scheduling to 8ms step, one needs to do |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
124 DosAsyncTimer() in time-critical thread. On laters versions, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
125 more and more cases of wait-for-something are covered. |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
126 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
127 It turns out that on Warp3fp42 it is the priority at the time |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
128 of DosAsyncTimer() which matters. Let's hope that this works |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
129 with later versions too... XXXX |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
130 */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
131 priority = (tib->tib_ptib2->tib2_ulpri); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
132 if ((priority & 0xFF00) == 0x0300) /* already time-critical */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
133 switch_priority = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
134 /* Make us time-critical. Just modifying TIB is not enough... */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
135 /* tib->tib_ptib2->tib2_ulpri = 0x0300; */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
136 /* We do not want to run at high priority if a signal causes us |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
137 to longjmp() out of this section... */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
138 if (DosEnterMustComplete(&nesting)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
139 switch_priority = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
140 else |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
141 DosSetPriority(PRTYS_THREAD, PRTYC_TIMECRITICAL, 0, 0); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
142 } |
1190 | 143 } |
144 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
145 if ((badrc = DosAsyncTimer(ms, (HSEM) hevEvent1, /* Semaphore to post */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
146 &htimerEvent1))) /* Timer handler (returned) */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
147 e = "DosAsyncTimer"; |
1190 | 148 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
149 if (switch_priority && tib->tib_ptib2->tib2_ulpri == 0x0300) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
150 /* Nobody switched priority while we slept... Ignore errors... */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
151 /* tib->tib_ptib2->tib2_ulpri = priority; *//* Get back... */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
152 if (! |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
153 (rc = DosSetPriority(PRTYS_THREAD, (priority >> 8) & 0xFF, 0, 0))) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
154 rc = DosSetPriority(PRTYS_THREAD, 0, priority & 0xFF, 0); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
155 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
156 if (switch_priority) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
157 rc = DosExitMustComplete(&nesting); /* Ignore errors */ |
1190 | 158 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
159 /* The actual blocking call is made with "normal" priority. This way we |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
160 should not bother with DosSleep(0) etc. to compensate for us interrupting |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
161 higher-priority threads. The goal is to prohibit the system spending too |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
162 much time halt()ing, not to run us "no matter what". */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
163 if (!e) /* Wait for AsyncTimer event */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
164 badrc = DosWaitEventSem(hevEvent1, SEM_INDEFINITE_WAIT); |
1190 | 165 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
166 if (e); /* Do nothing */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
167 else if (badrc == ERROR_INTERRUPT) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
168 ret = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
169 else if (badrc) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
170 e = "DosWaitEventSem"; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
171 if ((rc = DosCloseEventSem(hevEvent1)) && !e) { /* Get rid of semaphore */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
172 e = "DosCloseEventSem"; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
173 badrc = rc; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
174 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
175 if (e) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
176 SDL_SetError("[SDL_Delay] : Had error in %s(), rc is 0x%x\n", e, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
177 badrc); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
178 } |
1190 | 179 } |
180 | |
181 /* Data to handle a single periodic alarm */ | |
182 static int timer_alive = 0; | |
183 static SDL_Thread *timer = NULL; | |
184 | |
3838
45e566003276
This file probably got corrupted by a pretty printer at some point...
Ryan C. Gordon <icculus@icculus.org>
parents:
1895
diff
changeset
|
185 static int SDLCALL |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
186 RunTimer(void *unused) |
1190 | 187 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
188 DosSetPriority(PRTYS_THREAD, PRTYC_TIMECRITICAL, 0, 0); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
189 while (timer_alive) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
190 if (SDL_timer_running) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
191 SDL_ThreadedTimerCheck(); |
1190 | 192 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
193 SDL_Delay(10); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
194 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
195 return (0); |
1190 | 196 } |
197 | |
198 /* This is only called if the event thread is not running */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
199 int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
200 SDL_SYS_TimerInit(void) |
1190 | 201 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
202 timer_alive = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
203 timer = SDL_CreateThread(RunTimer, NULL); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
204 if (timer == NULL) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
205 return (-1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
206 return (SDL_SetTimerThreaded(1)); |
1190 | 207 } |
208 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
209 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
210 SDL_SYS_TimerQuit(void) |
1190 | 211 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
212 timer_alive = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
213 if (timer) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
214 SDL_WaitThread(timer, NULL); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
215 timer = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
216 } |
1190 | 217 } |
218 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
219 int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
220 SDL_SYS_StartTimer(void) |
1190 | 221 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
222 SDL_SetError("Internal logic error: OS/2 uses threaded timer"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
223 return (-1); |
1190 | 224 } |
225 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
226 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
227 SDL_SYS_StopTimer(void) |
1190 | 228 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
229 return; |
1190 | 230 } |
231 | |
1635
92947e3a18db
Make sure code is only compiled if the appropriate subsystem is enabled
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
232 #endif /* SDL_TIMER_OS2 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1850
diff
changeset
|
233 /* vi: set ts=4 sw=4 expandtab: */ |