home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <graphics/gfx.h>
- #include <iff2.h>
- #include <libraries/dos.h>
- #include <exec/memory.h>
- #include "LabelDef.h"
-
- extern LONG PicWidth, PicHeight, PicLeftEdge, PicTopEdge, PicOn;
- extern UWORD MyColorMap[16];
- extern struct LabelText *FirstText;
- extern struct RastPort *prp;
-
- BYTE DecomBuffer[128];
- UWORD WorkMap[32];
-
- /*----------------------------------------------------------------------*
- * unpacker.c Convert data from "cmpByteRun1" run compression. 11/15/85
- *
- * By Jerry Morrison and Steve Shaw, Electronic Arts.
- * This software is in the public domain.
- *
- * control bytes:
- * [0..127] : followed by n+1 bytes of data.
- * [-1..-127] : followed by byte to be repeated (-n)+1 times.
- * -128 : NOOP.
- *
- * This version for the Commodore-Amiga computer.
- *----------------------------------------------------------------------*/
-
- /*----------- UnPackRow ------------------------------------------------*/
-
- #define UGetByte() (*source++)
- #define UPutByte(c) (*dest++ = (c))
-
- /* Given POINTERS to POINTER variables, unpacks one row, updating the source
- * and destination pointers until it produces dstBytes bytes. */
- BOOL UnPackRow(pSource, pDest, srcBytes0, dstBytes0)
- BYTE **pSource, **pDest; WORD srcBytes0, dstBytes0; {
- register BYTE *source = *pSource;
- register BYTE *dest = *pDest;
- register WORD n;
- register BYTE c;
- register WORD srcBytes = srcBytes0, dstBytes = dstBytes0;
- BOOL error = TRUE; /* assume error until we make it through the loop */
- WORD minus128 = -128; /* get the compiler to generate a CMP.W */
-
- while( dstBytes > 0 ) {
- if ( (srcBytes -= 1) < 0 ) goto ErrorExit;
- n = UGetByte();
-
- if (n >= 0) {
- n += 1;
- if ( (srcBytes -= n) < 0 ) goto ErrorExit;
- if ( (dstBytes -= n) < 0 ) goto ErrorExit;
- do { UPutByte(UGetByte()); } while (--n > 0);
- }
-
- else if (n != minus128) {
- n = -n + 1;
- if ( (srcBytes -= 1) < 0 ) goto ErrorExit;
- if ( (dstBytes -= n) < 0 ) goto ErrorExit;
- c = UGetByte();
- do { UPutByte(c); } while (--n > 0);
- }
- }
- error = FALSE; /* success! */
-
- ErrorExit:
- *pSource = source; *pDest = dest;
- return(error);
- }
-
- /*----------------------------------------------------------------------*
- * packer.c Convert data to "cmpByteRun1" run compression. 11/15/85
- *
- * By Jerry Morrison and Steve Shaw, Electronic Arts.
- * This software is in the public domain.
- *
- * control bytes:
- * [0..127] : followed by n+1 bytes of data.
- * [-1..-127] : followed by byte to be repeated (-n)+1 times.
- * -128 : NOOP.
- *
- * This version for the Commodore-Amiga computer.
- *----------------------------------------------------------------------*/
-
- #define DUMP 0
- #define RUN 1
-
- #define MinRun 3
- #define MaxRun 128
- #define MaxDat 128
-
- LONG putSize;
- #define GetByte() (*source++)
- #define PutByte(c) { *dest++ = (c); ++putSize; }
-
- char buf[256]; /* [TBD] should be 128? on stack?*/
-
- BYTE *PutDump(dest, nn) BYTE *dest; int nn; {
- int i;
-
- PutByte(nn-1);
- for(i = 0; i < nn; i++) PutByte(buf[i]);
- return(dest);
- }
-
- BYTE *PutRun(dest, nn, cc) BYTE *dest; int nn, cc; {
- PutByte(-(nn-1));
- PutByte(cc);
- return(dest);
- }
-
- #define OutDump(nn) dest = PutDump(dest, nn)
- #define OutRun(nn,cc) dest = PutRun(dest, nn, cc)
-
- /*----------- PackRow --------------------------------------------------*/
- /* Given POINTERS TO POINTERS, packs one row, updating the source and
- destination pointers. RETURNs count of packed bytes.*/
- LONG PackRow(pSource, pDest, rowSize)
- BYTE **pSource, **pDest; LONG rowSize; {
- BYTE *source, *dest;
- char c,lastc = '\0';
- BOOL mode = DUMP;
- short nbuf = 0; /* number of chars in buffer */
- short rstart = 0; /* buffer index current run starts */
-
- source = *pSource;
- dest = *pDest;
- putSize = 0;
- buf[0] = lastc = c = GetByte(); /* so have valid lastc */
- nbuf = 1; rowSize--; /* since one byte eaten.*/
-
-
- for (; rowSize; --rowSize) {
- buf[nbuf++] = c = GetByte();
- switch (mode) {
- case DUMP:
- /* If the buffer is full, write the length byte,
- then the data */
- if (nbuf>MaxDat) {
- OutDump(nbuf-1);
- buf[0] = c;
- nbuf = 1; rstart = 0;
- break;
- }
-
- if (c == lastc) {
- if (nbuf-rstart >= MinRun) {
- if (rstart > 0) OutDump(rstart);
- mode = RUN;
- }
- else if (rstart == 0)
- mode = RUN; /* no dump in progress,
- so can't lose by making these 2 a run.*/
- }
- else rstart = nbuf-1; /* first of run */
- break;
-
- case RUN: if ( (c != lastc)|| ( nbuf-rstart > MaxRun)) {
- /* output run */
- OutRun(nbuf-1-rstart,lastc);
- buf[0] = c;
- nbuf = 1; rstart = 0;
- mode = DUMP;
- }
- break;
- }
-
- lastc = c;
- }
-
- switch (mode) {
- case DUMP: OutDump(nbuf); break;
- case RUN: OutRun(nbuf-rstart,lastc); break;
- }
- *pSource = source;
- *pDest = dest;
- return(putSize);
- }
-
- /*-------------------------------------------------------------------*/
-
-
-
- CheckChunkName( ChunkName)
- LONG ChunkName;
- {
- int a, b, ok;
- a = 0;
- ok = 1;
- while (( a < 4)&&(ok == 1))
- {
- b = (ChunkName >> (a*8)) & 255;
- ok = 0;
- if (((b > 64)&&(b < 91)) || ((b > 47)&&(b < 58)))
- {
- ok = 1;
- }
- a++;
- }
- return( ok);
- }
-
-
-
- LoadCMAP( fh, The_Map, Length)
- struct FileHandle *fh;
- UWORD *The_Map;
- LONG Length;
- {
- int i;
- UBYTE ColBuf;
-
- for (i=0; i < Length; i++)
- {
- The_Map[i] = 0;
- Read( fh, &ColBuf, 1L);
- The_Map[i] = ColBuf << 4;
- Read( fh, &ColBuf, 1L);
- The_Map[i] = The_Map[i] | ColBuf;
- Read( fh, &ColBuf, 1L);
- The_Map[i] = The_Map[i] | (ColBuf >> 4);
- }
- }
-
-
-
- gatherchunks( DataFile, BitMapHeader,
- CodedData, DataLength,
- CodedColor, ColorLength)
-
- struct FileHandle *DataFile;
- struct BMHDchunk *BitMapHeader;
- BYTE **CodedData;
- LONG *DataLength;
- UWORD *CodedColor;
- LONG *ColorLength;
- {
- ULONG ChunkLen = 0, accomplish = 0;
- ULONG Buffer;
- UWORD BufferWord;
- UBYTE ColBuf, IDBuffer[5];
- int fehler, i;
- int a, b;
-
- fehler =0;
- IDBuffer[4] =0;
- while ((accomplish !=0xffff)&&(fehler < 10))
- {
- Read( DataFile, &Buffer, 4L);
- Read( DataFile, &ChunkLen, 4L);
- switch(Buffer)
- {
- case FORM: Read( DataFile, &Buffer, 4L);
- if (Buffer != ILBM)
- {
- accomplish = 0xffff;
- fehler = 12;
- }
- else
- {
- accomplish = accomplish | 0xf;
- }
- break;
- case BMHD: Read( DataFile, BitMapHeader, ChunkLen);
- accomplish = accomplish | 0xf0;
- break;
- case CAMG: Read( DataFile, &Buffer, 4L);
- break;
- case CMAP: *ColorLength = ChunkLen/3;
- LoadCMAP( DataFile, CodedColor, *ColorLength);
- accomplish = accomplish | 0xf00;
- break;
- case BODY: accomplish = accomplish | 0xf000;
- *DataLength = ChunkLen;
- if ((*CodedData = AllocMem( ChunkLen, MEMF_PUBLIC))== NULL)
- {
- accomplish = 0xffff;
- fehler = 13;
- }
- else
- {
- Read( DataFile, *CodedData, ChunkLen);
- }
- break;
- case GRAB: for (i=0; i < ChunkLen; i++)
- {
- Read( DataFile, &ColBuf, 1L);
- }
- break;
- case CCRT: for (i=0; i < ChunkLen; i++)
- {
- Read( DataFile, &ColBuf, 1L);
- }
- break;
- default: strncpy( IDBuffer, &Buffer, 4);
- if ( CheckChunkName( Buffer) == 1)
- {
- for (i=0; i < ChunkLen; i++)
- {
- Read( DataFile, &ColBuf, 1L);
- }
- fehler++;
- if (fehler == 10) accomplish = 0xffff;
- }
- else
- {
- accomplish = 0xffff;
- fehler = 14;
- }
- break;
- }
- }
- if (fehler < 10 )
- {
- fehler = 0;
- }
- return( fehler);
- }
-
-
-
- DecodeILBM( OnRP, BitMapHeader, CodedMap, MapLength)
- struct RastPort *OnRP;
- struct BMHDchunk *BitMapHeader;
- BYTE *CodedMap;
- LONG MapLength;
- {
- struct BitMap *MyBitMap;
- BYTE *DecomHelp, *InCodeNOW, *BitMapPos;
- PLANEPTR ActualPlanes[8]; /* 8 Planes forever ? */
- LONG i, Zeile, Lage, RectHeight, RectWidth;
- WORD ScreenWIP, ImageWIP;
- WORD ScreenWIB, ImageWIB;
- WORD ScreenHIL, ImageHIL;
- WORD ScreenDIP, ImageDIP;
- WORD DisplayWIB, DisplayHIL, MissTries;
- WORD Still2Go;
-
- MyBitMap = OnRP->BitMap;
- ScreenWIB = MyBitMap->BytesPerRow;
- ScreenHIL = MyBitMap->Rows;
- ScreenDIP = MyBitMap->Depth;
- ScreenWIP = ScreenWIB * 8;
- ImageHIL = BitMapHeader->Height;
- ImageDIP = BitMapHeader->Depth;
- ImageWIP = BitMapHeader->Width;
- ImageWIB = ImageWIP/16;
- if ( (ImageWIB*16) < ImageWIP ) ImageWIB++;
- ImageWIB *=2;
- RectWidth = ( ImageWIP > ScreenWIP)? ScreenWIP: ImageWIP;
- DisplayHIL = ( ImageHIL > ScreenHIL)? ScreenHIL: ImageHIL;
- DisplayWIB = ( ImageWIB > ScreenWIB)? ScreenWIB: ImageWIB;
- RectHeight = DisplayHIL;
- SetAPen( OnRP, 0L);
- RectFill( OnRP, 0L, 0L, RectWidth -1, RectHeight -1);
- if ((BitMapHeader->Masking) == 1) ImageDIP++; /* A Mask ! */
- PicWidth = RectWidth;
- PicHeight = RectHeight;
- InCodeNOW = CodedMap;
- MissTries = 0;
- Still2Go = 32000; /* Sorry, EA made me do it ( the WORD param) */
- for (i=0; i < ScreenDIP; i++)
- {
- ActualPlanes[i] = MyBitMap->Planes[i];
- }
- for (Zeile=0; Zeile < DisplayHIL; Zeile++)
- {
- for (Lage=0; Lage < ImageDIP; Lage++)
- {
- if (((*BitMapHeader).Compression) == 1)
- {
- DecomHelp = DecomBuffer;
- if ( UnPackRow(&InCodeNOW, &DecomHelp, Still2Go, ImageWIB) == TRUE)
- {
- MissTries++;
- }
- }
- else
- {
- CopyMem( InCodeNOW, &DecomBuffer[0],(LONG)ImageWIB);
- InCodeNOW += ImageWIB;
- Still2Go -= ImageWIB;
- }
- if (Lage < ScreenDIP)
- {
- BitMapPos = ActualPlanes[Lage] + Zeile*ScreenWIB;
- CopyMem( &DecomBuffer[0], BitMapPos,(LONG)DisplayWIB);
- }
- }
- }
- return (MissTries);
- }
-
-
-
- LoadILBM( ImageFile, WhichRP)
- struct FileHandle *ImageFile;
- struct RastPort *WhichRP;
- {
- struct BMHDchunk MyBMHD;
- BYTE *ImageMemory;
- int bruch, back;
- LONG Colors, CodeLen;
- LONG The_Colors;
-
- ImageMemory = NULL;
- back = 1;
- The_Colors = 1;
- if ((bruch = gatherchunks( ImageFile, &MyBMHD, &ImageMemory, &CodeLen,
- &WorkMap[0], &The_Colors))==0)
- {
- bruch = DecodeILBM( WhichRP, &MyBMHD, ImageMemory, CodeLen);
- if ( bruch == 0)
- {
- PicOn = 1;
- if ( The_Colors > 16) The_Colors = 16;
- CopyMem( &WorkMap[0], &MyColorMap[0], The_Colors * 2);
- back = 0;
- }
- else
- {
- LMMessage("Picture not corretly saved.");
- PicOn = 0;
- }
- }
- else
- {
- LMMessage("Not a correct IFF-ILBM file.");
- }
- if (ImageMemory != NULL) FreeMem( ImageMemory, CodeLen);
- return( back);
- }
-
-
-
- int
- LoadPicture( WhichRP, FileToActOn)
- struct RastPort *WhichRP;
- char *FileToActOn;
- {
- struct FileHandle *ImageFile;
- int bruch;
-
- ImageFile = NULL;
- if (ImageFile = (struct FileHandle *) Open( FileToActOn, MODE_OLDFILE))
- {
- PointerState( 2);
- bruch = LoadILBM( ImageFile, WhichRP);
- Close( ImageFile);
- PointerState( 0);
- }
- else
- {
- LMMessage("Unable to open that file.");
- bruch = 1;
- }
- return( bruch);
- }
-
-
-
- struct LabelText
- *LoadLabel( LabelName)
- BYTE *LabelName;
- {
- struct FileHandle *fh;
- struct LabelText *Back, *Help;
- int ok, t;
- LONG LongBuffer;
- BYTE IDBuffer[5];
- LONG NumOfTexts, fault, Colors;
-
- Back = NULL;
- fh = NULL;
- fault = 1;
- if (fh = (struct FileHandle *) Open( LabelName, MODE_OLDFILE))
- {
- if ((ok = Read( fh, IDBuffer, 4L)) == 4)
- {
- if (strncmp( IDBuffer, "FORM", 4) == 0)
- {
- if ((ok = Read( fh, &LongBuffer, 4L)) == 4)
- {
- if ((ok = Read( fh, IDBuffer, 4L)) == 4)
- {
- if (strncmp( IDBuffer, "LABL", 4) == 0)
- {
- if ((ok = Read( fh, IDBuffer, 4L)) == 4)
- {
- if (strncmp( IDBuffer, "LBLH", 4) == 0)
- {
- ok = Read( fh, &LongBuffer, 4L);
- ok = Read( fh, &PicOn, 4L);
- ok = Read( fh, &PicLeftEdge, 4L);
- ok = Read( fh, &PicTopEdge, 4L);
- ok = Read( fh, &NumOfTexts, 4L);
- if ( ok == 4)
- {
- DeleteAllTexts( FindStart( FirstText));
- FirstText = NULL;
- if ( PicOn == 1)
- {
- ok = LoadILBM( fh, prp);
- }
- else
- {
- ok = Read( fh, IDBuffer, 4L);
- ok = Read( fh, &LongBuffer, 4L);
- Colors = LongBuffer /3;
- if (strncmp( IDBuffer, "CMAP",4) ==0)
- {
- LoadCMAP( fh, WorkMap, Colors);
- CopyMem( WorkMap, MyColorMap, Colors *2);
- }
- }
- t =0;
- fault =0;
- while (( t < NumOfTexts)&&(fault == 0))
- {
- Back = LoadText( fh);
- if ( Back != NULL)
- {
- Back->AttrNumber = FindAttrNo(
- Back->FontName,
- Back->FontSize);
- if (FirstText == NULL)
- {
- FirstText = Back;
- }
- else
- {
- if ( Back != FirstText)
- {
- Help = AddText( FirstText, Back);
- if ( Help == NULL) fault =1;
- }
- }
- }
- else
- {
- fault = 1;
- }
- t++;
- }
- if ((Back == NULL)&&(FirstText != NULL))
- {
- DeleteAllTexts( FindStart( FirstText));
- FirstText = NULL;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- if (fault != 0) LMMessage("Read Error on that file.");
- Close( fh);
- }
- else
- {
- LMMessage("Unable to open that file.");
- }
- return( Back);
- }
-
-
-
- int
- SaveCMAP( fh, The_Map, Length, WrState)
- struct FileHandle *fh;
- UWORD *The_Map;
- LONG Length;
- int WrState;
- {
- LONG LongBuffer;
- BYTE ByteBuffer;
- int a;
-
- LongBuffer = CMAP;
- WrState = LMWrite( fh, &LongBuffer, 4L, WrState);
- LongBuffer = 3* Length;
- WrState = LMWrite( fh, &LongBuffer, 4L, WrState);
- for (a=0; a < Length; a++)
- {
- ByteBuffer = (UBYTE) ((The_Map[a] >> 4)& 0xf0);
- WrState = LMWrite( fh, &ByteBuffer, 1L, WrState);
- ByteBuffer = (UBYTE) (The_Map[a] & 0xf0);
- WrState = LMWrite( fh, &ByteBuffer, 1L, WrState);
- ByteBuffer = (UBYTE) ((The_Map[a] << 4)& 0xf0);
- WrState = LMWrite( fh, &ByteBuffer, 1L, WrState);
- }
- return( WrState);
- }
-
-
-
- int
- SaveLabel( LabelName)
- char *LabelName;
- {
- struct FileHandle *OutFile;
- struct BitMap *MyMap;
- ULONG LongBuffer, VBuffer, CompactLength;
- USHORT WordBuffer;
- BYTE ByteBuffer;
- BYTE *RawRaster, *DecomHelp;
- PLANEPTR mpl[8]; /* I said it before */
- int t, a, b;
- WORD ImageDIP, ImageWIB, ImageWIP, ImageHIL;
- WORD ScreenWIB, ScreenDIP, ScreenHIL, ScreenWIP;
- WORD Xaspect, Yaspect;
- LONG Ebene, Zeile, nColors, ItsAPad, WrSt;
- LONG PictureLength, FileLength;
- LONG NumberOfTexts;
- struct LabelText *Curr, *Back;
- BYTE IDBuffer[5];
-
- PointerState( 2);
- MyMap = prp->BitMap;
- nColors = 1 << (MyMap->Depth);
- if ( PicOn == 1)
- {
- ScreenWIB = MyMap->BytesPerRow;
- ScreenHIL = MyMap->Rows;
- ScreenDIP = MyMap->Depth;
- ScreenWIP = ScreenWIB * 8;
- ImageHIL = PicHeight;
- ImageWIP = PicWidth;
- ImageDIP = MyMap->Depth;
- ImageWIB = (( ImageWIP % 16 ) == 0)? ImageWIP / 16: (ImageWIP/16) +1;
- ImageWIB *= 2;
- for(a = 0; a < ImageDIP; a++)
- mpl[a] = MyMap->Planes[a];
- CompactLength = 0;
- for (Zeile = 0; Zeile < ImageHIL; Zeile++)
- for (Ebene = 0; Ebene < ImageDIP; Ebene++)
- {
- RawRaster = mpl[Ebene]+ScreenWIB*Zeile;
- DecomHelp = DecomBuffer;
- CompactLength += PackRow( &RawRaster, &DecomHelp, ImageWIB);
- }
- if ((CompactLength & 1) != 0)
- {
- CompactLength++;
- ItsAPad = 1;
- }
- else
- {
- ItsAPad = 0;
- }
- PictureLength = 8 + 4 +28 +(8+ 3*nColors) +8 +CompactLength;
- }
- else
- {
- PictureLength = 8 + 3*nColors;
- }
- Curr = FindStart( FirstText);
- NumberOfTexts =0;
- while ( Curr != NULL)
- {
- Curr = Curr->NextText;
- NumberOfTexts++;
- }
- FileLength = 4 +8 +16 +PictureLength +
- NumberOfTexts*(sizeof( struct LabelText) -4);
- if (OutFile = (struct FileHandle *) Open( LabelName, MODE_NEWFILE))
- {
- strcpy( IDBuffer, "FORM");
- WrSt = LMWrite( OutFile, &IDBuffer, 4, 1);
- LongBuffer = FileLength;
- WrSt = LMWrite( OutFile, &LongBuffer, 4, WrSt);
- strcpy( IDBuffer, "LABL");
- WrSt = LMWrite( OutFile, &IDBuffer, 4, WrSt);
- strcpy( IDBuffer, "LBLH");
- WrSt = LMWrite( OutFile, &IDBuffer, 4, WrSt);
- LongBuffer = 16;
- WrSt = LMWrite( OutFile, &LongBuffer, 4, WrSt);
- LongBuffer = (PicOn == 1) ? 1: 0;
- WrSt = LMWrite( OutFile, &LongBuffer, 4, WrSt);
- LongBuffer = PicLeftEdge;
- WrSt = LMWrite( OutFile, &LongBuffer, 4, WrSt);
- LongBuffer = PicTopEdge;
- WrSt = LMWrite( OutFile, &LongBuffer, 4, WrSt);
- LongBuffer = NumberOfTexts;
- WrSt = LMWrite( OutFile, &LongBuffer, 4, WrSt);
- if ( PicOn == 1)
- {
- LongBuffer = FORM;
- WrSt = LMWrite( OutFile, &LongBuffer, 4L, WrSt);
- LongBuffer = 4 +28 +(8+ 3*nColors) +8 +CompactLength;
- WrSt = LMWrite( OutFile, &LongBuffer, 4L, WrSt);
- LongBuffer = ILBM;
- WrSt = LMWrite( OutFile, &LongBuffer, 4L, WrSt);
- LongBuffer = BMHD;
- WrSt = LMWrite( OutFile, &LongBuffer, 4L, WrSt);
- LongBuffer = 20;
- WrSt = LMWrite( OutFile, &LongBuffer, 4L, WrSt);
- WrSt = LMWrite( OutFile, &ImageWIP, 2L, WrSt);
- WrSt = LMWrite( OutFile, &ImageHIL, 2L, WrSt);
- LongBuffer = 0;
- WrSt = LMWrite( OutFile, &LongBuffer, 4L, WrSt);
- ByteBuffer = (UBYTE) ImageDIP;
- WrSt = LMWrite( OutFile, &ByteBuffer, 1L, WrSt);
- ByteBuffer = 2;
- WrSt = LMWrite( OutFile, &ByteBuffer, 1L, WrSt);
- ByteBuffer = 1;
- WrSt = LMWrite( OutFile, &ByteBuffer, 1L, WrSt);
- ByteBuffer = 0;
- WrSt = LMWrite( OutFile, &ByteBuffer, 1L, WrSt);
- WrSt = LMWrite( OutFile, &LongBuffer, 2L, WrSt);
- Xaspect = 10;
- Yaspect = 22;
- WordBuffer = (Xaspect << 8) | Yaspect;;
- WrSt = LMWrite( OutFile, &WordBuffer, 2L, WrSt);
- WordBuffer = ScreenWIP;
- WrSt = LMWrite( OutFile, &WordBuffer, 2L, WrSt);
- WordBuffer = ScreenHIL;
- WrSt = LMWrite( OutFile, &WordBuffer, 2L, WrSt);
- WrSt = SaveCMAP( OutFile, MyColorMap, nColors, WrSt);
- LongBuffer = BODY;
- WrSt = LMWrite( OutFile, &LongBuffer, 4L, WrSt);
- WrSt = LMWrite( OutFile, &CompactLength, 4L, WrSt);
- for (Zeile = 0; Zeile < ImageHIL; Zeile++)
- for (Ebene = 0; Ebene < ImageDIP; Ebene++)
- {
- RawRaster = mpl[Ebene]+ScreenWIB*Zeile;
- DecomHelp = DecomBuffer;
- CompactLength = PackRow( &RawRaster, &DecomHelp, ImageWIB);
- WrSt = LMWrite( OutFile, DecomBuffer, CompactLength, WrSt);
- }
- if (ItsAPad == 1)
- {
- ByteBuffer = -128;
- WrSt = LMWrite( OutFile, &ByteBuffer, 1L, WrSt);
- }
- }
- else
- {
- WrSt = SaveCMAP( OutFile, MyColorMap, nColors, WrSt);
- }
- Curr = FindStart( FirstText);
- t =0;
- while( Curr != NULL)
- {
- t++;
- WrSt = SaveText( OutFile, Curr);
- Curr = Curr->NextText;
- }
- if (WrSt == -1) LMMessage("Write error on that file");
- Close( OutFile);
- }
- else
- {
- LMMessage("Unable to open that file");
- }
- PointerState( 0);
- return( WrSt);
- }
-
-
-
- int
- LMWrite( The_File, The_Data, The_Length, FormerState)
- struct FileHandle *The_File;
- BYTE *The_Data;
- ULONG The_Length;
- int FormerState;
- {
- if (FormerState != -1)
- {
- FormerState = Write( The_File, The_Data, The_Length);
- }
- return( FormerState);
- }
-
-
-
-
-