minivmac4ios/Mini vMac/mnvm_core/PBUFSTDC.h
2019-05-03 21:21:30 +02:00

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