Mercurial > sdl-ios-xcode
comparison src/thread/amigaos/SDL_syssem.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | d910939febfa |
children | 4da1ee79c9af |
comparison
equal
deleted
inserted
replaced
1661:281d3f4870e5 | 1662:782fd950bd46 |
---|---|
27 #include "SDL_systhread_c.h" | 27 #include "SDL_systhread_c.h" |
28 | 28 |
29 | 29 |
30 struct SDL_semaphore | 30 struct SDL_semaphore |
31 { | 31 { |
32 struct SignalSemaphore Sem; | 32 struct SignalSemaphore Sem; |
33 }; | 33 }; |
34 | 34 |
35 #undef D | 35 #undef D |
36 | 36 |
37 #define D(x) | 37 #define D(x) |
38 | 38 |
39 SDL_sem *SDL_CreateSemaphore(Uint32 initial_value) | 39 SDL_sem * |
40 SDL_CreateSemaphore (Uint32 initial_value) | |
40 { | 41 { |
41 SDL_sem *sem; | 42 SDL_sem *sem; |
42 | 43 |
43 sem = (SDL_sem *)SDL_malloc(sizeof(*sem)); | 44 sem = (SDL_sem *) SDL_malloc (sizeof (*sem)); |
44 | 45 |
45 if ( ! sem ) { | 46 if (!sem) { |
46 SDL_OutOfMemory(); | 47 SDL_OutOfMemory (); |
47 return(0); | 48 return (0); |
48 } | 49 } |
49 | 50 |
50 D(bug("Creating semaphore %lx...\n",sem)); | 51 D (bug ("Creating semaphore %lx...\n", sem)); |
51 | 52 |
52 SDL_memset(sem,0,sizeof(*sem)); | 53 SDL_memset (sem, 0, sizeof (*sem)); |
53 | 54 |
54 InitSemaphore(&sem->Sem); | 55 InitSemaphore (&sem->Sem); |
55 | 56 |
56 return(sem); | 57 return (sem); |
57 } | 58 } |
58 | 59 |
59 void SDL_DestroySemaphore(SDL_sem *sem) | 60 void |
61 SDL_DestroySemaphore (SDL_sem * sem) | |
60 { | 62 { |
61 D(bug("Destroying semaphore %lx...\n",sem)); | 63 D (bug ("Destroying semaphore %lx...\n", sem)); |
62 | 64 |
63 if ( sem ) { | 65 if (sem) { |
64 // Condizioni per liberare i task in attesa? | 66 // Condizioni per liberare i task in attesa? |
65 SDL_free(sem); | 67 SDL_free (sem); |
66 } | 68 } |
67 } | 69 } |
68 | 70 |
69 int SDL_SemTryWait(SDL_sem *sem) | 71 int |
72 SDL_SemTryWait (SDL_sem * sem) | |
70 { | 73 { |
71 if ( ! sem ) { | 74 if (!sem) { |
72 SDL_SetError("Passed a NULL semaphore"); | 75 SDL_SetError ("Passed a NULL semaphore"); |
73 return -1; | 76 return -1; |
74 } | 77 } |
75 | 78 |
76 D(bug("TryWait semaphore...%lx\n",sem)); | 79 D (bug ("TryWait semaphore...%lx\n", sem)); |
77 | 80 |
78 ObtainSemaphore(&sem->Sem); | 81 ObtainSemaphore (&sem->Sem); |
79 // ReleaseSemaphore(&sem->Sem); | 82 // ReleaseSemaphore(&sem->Sem); |
80 | 83 |
81 return 1; | 84 return 1; |
82 } | 85 } |
83 | 86 |
84 int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout) | 87 int |
88 SDL_SemWaitTimeout (SDL_sem * sem, Uint32 timeout) | |
85 { | 89 { |
86 int retval; | 90 int retval; |
87 | 91 |
88 | 92 |
89 if ( ! sem ) { | 93 if (!sem) { |
90 SDL_SetError("Passed a NULL semaphore"); | 94 SDL_SetError ("Passed a NULL semaphore"); |
91 return -1; | 95 return -1; |
92 } | 96 } |
93 | 97 |
94 D(bug("WaitTimeout (%ld) semaphore...%lx\n",timeout,sem)); | 98 D (bug ("WaitTimeout (%ld) semaphore...%lx\n", timeout, sem)); |
95 | 99 |
96 /* A timeout of 0 is an easy case */ | 100 /* A timeout of 0 is an easy case */ |
97 if ( timeout == 0 ) { | 101 if (timeout == 0) { |
98 ObtainSemaphore(&sem->Sem); | 102 ObtainSemaphore (&sem->Sem); |
99 return 1; | 103 return 1; |
100 } | 104 } |
101 if(!(retval=AttemptSemaphore(&sem->Sem))) | 105 if (!(retval = AttemptSemaphore (&sem->Sem))) { |
102 { | 106 SDL_Delay (timeout); |
103 SDL_Delay(timeout); | 107 retval = AttemptSemaphore (&sem->Sem); |
104 retval=AttemptSemaphore(&sem->Sem); | 108 } |
105 } | |
106 | 109 |
107 if(retval==TRUE) | 110 if (retval == TRUE) { |
108 { | 111 // ReleaseSemaphore(&sem->Sem); |
109 // ReleaseSemaphore(&sem->Sem); | 112 retval = 1; |
110 retval=1; | 113 } |
111 } | |
112 | 114 |
113 return retval; | 115 return retval; |
114 } | 116 } |
115 | 117 |
116 int SDL_SemWait(SDL_sem *sem) | 118 int |
119 SDL_SemWait (SDL_sem * sem) | |
117 { | 120 { |
118 ObtainSemaphore(&sem->Sem); | 121 ObtainSemaphore (&sem->Sem); |
119 return 0; | 122 return 0; |
120 } | 123 } |
121 | 124 |
122 Uint32 SDL_SemValue(SDL_sem *sem) | 125 Uint32 |
126 SDL_SemValue (SDL_sem * sem) | |
123 { | 127 { |
124 Uint32 value; | 128 Uint32 value; |
125 | 129 |
126 value = 0; | 130 value = 0; |
127 if ( sem ) { | 131 if (sem) { |
128 #ifdef STORMC4_WOS | 132 #ifdef STORMC4_WOS |
129 value = sem->Sem.ssppc_SS.ss_NestCount; | 133 value = sem->Sem.ssppc_SS.ss_NestCount; |
130 #else | 134 #else |
131 value = sem->Sem.ss_NestCount; | 135 value = sem->Sem.ss_NestCount; |
132 #endif | 136 #endif |
133 } | 137 } |
134 return value; | 138 return value; |
135 } | 139 } |
136 | 140 |
137 int SDL_SemPost(SDL_sem *sem) | 141 int |
142 SDL_SemPost (SDL_sem * sem) | |
138 { | 143 { |
139 if ( ! sem ) { | 144 if (!sem) { |
140 SDL_SetError("Passed a NULL semaphore"); | 145 SDL_SetError ("Passed a NULL semaphore"); |
141 return -1; | 146 return -1; |
142 } | 147 } |
143 D(bug("SemPost semaphore...%lx\n",sem)); | 148 D (bug ("SemPost semaphore...%lx\n", sem)); |
144 | 149 |
145 ReleaseSemaphore(&sem->Sem); | 150 ReleaseSemaphore (&sem->Sem); |
146 return 0; | 151 return 0; |
147 } | 152 } |
148 | 153 |
154 /* vi: set ts=4 sw=4 expandtab: */ |