mirror of
https://github.com/zydeco/minivmac4ios.git
synced 2024-11-29 05:49:21 +00:00
122 lines
2.0 KiB
C
122 lines
2.0 KiB
C
|
/*
|
||
|
PBUFSTDC.h
|
||
|
|
||
|
Copyright (C) 2018 Paul C. Pratt
|
||
|
|
||
|
You can redistribute this file and/or modify it under the terms
|
||
|
of version 2 of the GNU General Public License as published by
|
||
|
the Free Software Foundation. You should have received a copy
|
||
|
of the license along with this file; see the file COPYING.
|
||
|
|
||
|
This file is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
license for more details.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
Parameter BUFfers implemented with STanDard C library
|
||
|
*/
|
||
|
|
||
|
|
||
|
#if IncludePbufs
|
||
|
LOCALVAR void *PbufDat[NumPbufs];
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
LOCALFUNC tMacErr PbufNewFromPtr(void *p, ui5b count, tPbuf *r)
|
||
|
{
|
||
|
tPbuf i;
|
||
|
tMacErr err;
|
||
|
|
||
|
if (! FirstFreePbuf(&i)) {
|
||
|
free(p);
|
||
|
err = mnvm_miscErr;
|
||
|
} else {
|
||
|
*r = i;
|
||
|
PbufDat[i] = p;
|
||
|
PbufNewNotify(i, count);
|
||
|
err = mnvm_noErr;
|
||
|
}
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
LOCALPROC PbufKillToPtr(void **p, ui5r *count, tPbuf r)
|
||
|
{
|
||
|
*p = PbufDat[r];
|
||
|
*count = PbufSize[r];
|
||
|
|
||
|
PbufDisposeNotify(r);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
GLOBALOSGLUFUNC tMacErr PbufNew(ui5b count, tPbuf *r)
|
||
|
{
|
||
|
tMacErr err = mnvm_miscErr;
|
||
|
|
||
|
void *p = calloc(1, count);
|
||
|
if (NULL != p) {
|
||
|
err = PbufNewFromPtr(p, count, r);
|
||
|
}
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
GLOBALOSGLUPROC PbufDispose(tPbuf i)
|
||
|
{
|
||
|
void *p;
|
||
|
ui5r count;
|
||
|
|
||
|
PbufKillToPtr(&p, &count, i);
|
||
|
|
||
|
free(p);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
LOCALPROC UnInitPbufs(void)
|
||
|
{
|
||
|
tPbuf i;
|
||
|
|
||
|
for (i = 0; i < NumPbufs; ++i) {
|
||
|
if (PbufIsAllocated(i)) {
|
||
|
PbufDispose(i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
#define PbufHaveLock 1
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
LOCALFUNC ui3p PbufLock(tPbuf i)
|
||
|
{
|
||
|
return (ui3p)PbufDat[i];
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
#define PbufUnlock(i)
|
||
|
#endif
|
||
|
|
||
|
#if IncludePbufs
|
||
|
GLOBALOSGLUPROC PbufTransfer(ui3p Buffer,
|
||
|
tPbuf i, ui5r offset, ui5r count, blnr IsWrite)
|
||
|
{
|
||
|
void *p = ((ui3p)PbufDat[i]) + offset;
|
||
|
if (IsWrite) {
|
||
|
(void) memcpy(p, Buffer, count);
|
||
|
} else {
|
||
|
(void) memcpy(Buffer, p, count);
|
||
|
}
|
||
|
}
|
||
|
#endif
|