1 line
4.5 KiB
C
Executable File
1 line
4.5 KiB
C
Executable File
//============================================================
|
|
//============================================================
|
|
//== ==
|
|
//== Dump Pict Routines ==
|
|
//== ==
|
|
//============================================================
|
|
//============================================================
|
|
|
|
|
|
#include "UnivUtilities.h"
|
|
|
|
|
|
//extern GrafPtr offWorkPtr;
|
|
//extern BitMap offWorkBits;
|
|
//extern CGrafPort offCWorkPort;
|
|
//extern CGrafPtr offCWorkPtr;
|
|
//extern Rect replayRect;
|
|
|
|
|
|
//-------------------------------------------------------- Type Definitions
|
|
|
|
typedef struct
|
|
{
|
|
PicHandle pHand;
|
|
short gRef;
|
|
Boolean fileOK;
|
|
} GDataRec;
|
|
|
|
typedef struct
|
|
{
|
|
CGrafPort TRUEPort;
|
|
GDataRec GDStuff;
|
|
} GportPlus, *GPPtr;
|
|
|
|
//-------------------------------------------------------- Prototypes
|
|
|
|
void DeathKiss (short, short, StringPtr);
|
|
pascal void PutPICTData (Ptr, short);
|
|
|
|
//-------------------------------------------------------- PutPICTData
|
|
|
|
pascal void PutPICTData (Ptr dataPtr, short byteCount)
|
|
|
|
{
|
|
long longCount;
|
|
GPPtr myPortPlus;
|
|
|
|
GetPort((GrafPtr *)&myPortPlus);
|
|
longCount = byteCount;
|
|
|
|
if (myPortPlus->GDStuff.fileOK)
|
|
{
|
|
if (FSWrite(myPortPlus->GDStuff.gRef, &longCount, dataPtr) != noErr)
|
|
myPortPlus->GDStuff.fileOK = FALSE;
|
|
|
|
if (myPortPlus->GDStuff.pHand != kNilPointer)
|
|
(**(myPortPlus->GDStuff.pHand)).picSize += longCount;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------- DeathKiss
|
|
|
|
void DeathKiss (short globalRef, short vrefnum, StringPtr nameStr)
|
|
|
|
{
|
|
OSErr theErr;
|
|
|
|
if (globalRef != 0)
|
|
theErr = FSClose(globalRef);
|
|
|
|
theErr = FSDelete(nameStr, vrefnum);
|
|
SysBeep(1);
|
|
}
|
|
|
|
//-------------------------------------------------------- PICTOut
|
|
|
|
void PICTOut (void)
|
|
|
|
{
|
|
OSErr err;
|
|
short i, vrefnum, globalRef;
|
|
long longCount, longZero, bytesAvail;
|
|
CQDProcs myProcs;
|
|
QDProcs myOldProcs;
|
|
Picture savePictSizeFrame;
|
|
Str255 nameStr;
|
|
GrafPtr oldPort;
|
|
GportPlus wPortPlus;
|
|
GPPtr wPortPlusPtr;
|
|
PicHandle pictHand;
|
|
SysEnvRec theWorld;
|
|
BitMapPtr bitPtr;
|
|
GDHandle myDev;
|
|
|
|
err = SysEnvirons(1, &theWorld);
|
|
|
|
wPortPlusPtr = &wPortPlus;
|
|
globalRef = 0;
|
|
if (GetVInfo(0, (StringPtr)nameStr, &vrefnum, &bytesAvail) != noErr)
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
|
|
PasStringCopy("\pScreen 0", nameStr);
|
|
|
|
do
|
|
{
|
|
err = Create(nameStr, vrefnum, 'GAO.', 'PICT');
|
|
if (err != noErr)
|
|
{
|
|
if (err == dupFNErr)
|
|
{
|
|
nameStr[8]++;
|
|
}
|
|
else
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
while (err != noErr);
|
|
|
|
if (FSOpen(nameStr, vrefnum, &globalRef) != 0)
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
|
|
longZero = 0L;
|
|
longCount = 4L;
|
|
|
|
for (i = 0; i < (532 / 4); i++)
|
|
{
|
|
err = FSWrite(globalRef, &longCount, &longZero);
|
|
if (err != noErr)
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (SetFPos(globalRef, fsFromStart, 522) != noErr)
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
|
|
GetPort(&oldPort);
|
|
|
|
wPortPlus.GDStuff.gRef = globalRef;
|
|
wPortPlus.GDStuff.pHand = kNilPointer;
|
|
wPortPlus.GDStuff.fileOK = TRUE;
|
|
|
|
if (theWorld.hasColorQD)
|
|
{
|
|
OpenCPort((CGrafPtr)wPortPlusPtr);
|
|
SetStdCProcs(&myProcs);
|
|
((GrafPtr)wPortPlusPtr)->grafProcs = (QDProcs *)&myProcs;
|
|
myProcs.putPicProc = (QDPtr)PutPICTData;
|
|
myDev = GetMainDevice();
|
|
bitPtr = (BitMapPtr)*(**myDev).gdPMap;
|
|
}
|
|
else
|
|
{
|
|
OpenPort((GrafPtr)wPortPlusPtr);
|
|
SetStdProcs(&myOldProcs);
|
|
((GrafPtr)wPortPlusPtr)->grafProcs = &myOldProcs;
|
|
myOldProcs.putPicProc = (QDPtr)PutPICTData;
|
|
bitPtr = (BitMapPtr)&wPortPlusPtr->TRUEPort.portPixMap;
|
|
}
|
|
|
|
ClipRect(&bitPtr->bounds);
|
|
pictHand = OpenPicture(&bitPtr->bounds);
|
|
|
|
if (pictHand != kNilPointer)
|
|
{
|
|
wPortPlus.GDStuff.pHand = pictHand;
|
|
CopyBits(bitPtr, bitPtr, &bitPtr->bounds, &bitPtr->bounds, srcCopy, kNilPointer);
|
|
ClosePicture();
|
|
KillPicture(pictHand);
|
|
}
|
|
else
|
|
wPortPlus.GDStuff.fileOK = FALSE;
|
|
|
|
((GrafPtr)wPortPlusPtr)->grafProcs = kNilPointer;
|
|
|
|
SetPort(oldPort);
|
|
|
|
if (theWorld.hasColorQD)
|
|
CloseCPort((CGrafPtr)wPortPlusPtr);
|
|
else
|
|
ClosePort((GrafPtr)wPortPlusPtr);
|
|
|
|
if (!(wPortPlus.GDStuff.fileOK))
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
|
|
if (SetFPos(globalRef, fsFromStart, 512) != noErr)
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
|
|
longCount = sizeof(Picture);
|
|
|
|
if (FSWrite(globalRef, &longCount, &savePictSizeFrame) != noErr)
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
|
|
if (FSClose(globalRef) != noErr)
|
|
{
|
|
DeathKiss(globalRef, vrefnum, nameStr);
|
|
return;
|
|
}
|
|
}
|