diff options
Diffstat (limited to 'src/osd/osdmini/miniwork.c')
-rw-r--r-- | src/osd/osdmini/miniwork.c | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/src/osd/osdmini/miniwork.c b/src/osd/osdmini/miniwork.c index 6acd1ba31e8..a0a971c71b1 100644 --- a/src/osd/osdmini/miniwork.c +++ b/src/osd/osdmini/miniwork.c @@ -2,8 +2,40 @@ // // miniwork.c - Minimal core work item functions // -// Copyright Nicola Salmoria and the MAME Team. -// Visit http://mamedev.org for licensing and usage restrictions. +//============================================================ +// +// Copyright Aaron Giles +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or +// without modification, are permitted provided that the +// following conditions are met: +// +// * Redistributions of source code must retain the above +// copyright notice, this list of conditions and the +// following disclaimer. +// * Redistributions in binary form must reproduce the +// above copyright notice, this list of conditions and +// the following disclaimer in the documentation and/or +// other materials provided with the distribution. +// * Neither the name 'MAME' nor the names of its +// contributors may be used to endorse or promote +// products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGE (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // //============================================================ @@ -69,17 +101,32 @@ void osd_work_queue_free(osd_work_queue *queue) // osd_work_item_queue //============================================================ -osd_work_item *osd_work_item_queue(osd_work_queue *queue, osd_work_callback callback, void *param, UINT32 flags) +osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_callback callback, INT32 numitems, void *parambase, INT32 paramstep, UINT32 flags) { osd_work_item *item; + int itemnum; // allocate memory to hold the result item = malloc(sizeof(*item)); if (item == NULL) return NULL; - // execute the call directly - item->result = (*callback)(param, 0); + // loop over all requested items + for (itemnum = 0; itemnum < numitems; itemnum++) + { + // execute the call directly + item->result = (*callback)(parambase, 0); + + // advance the param + parambase = (UINT8 *)parambase + paramstep; + } + + // free the item if requested + if (flags & WORK_ITEM_FLAG_AUTO_RELEASE) + { + free(item); + item = NULL; + } return item; } |