示例#1
0
static void AddFontResources( WResID * name, ResMemFlags flags,
                              char * filename )
/**************************************************************/
{
    FontInfo            info;
    char *              devicename;
    char *              facename;
    int                 handle;
    int                 error;
    int                 err_code;
    ReadStrErrInfo      readstr_err;

    if (name->IsName) {
        RcError( ERR_FONT_NAME );
        return;
    }

    handle = RcIoOpenInput( filename, O_RDONLY | O_BINARY );
    if (handle == -1) goto FILE_OPEN_ERROR;

    error = readFontInfo( handle, &info, &err_code );
    if( error != RS_OK) goto READ_HEADER_ERROR;

    error = copyFont( &info, handle, name, flags, &err_code );
    if( error != RS_OK ) goto COPY_FONT_ERROR;

    devicename = readString( handle, info.dfDevice, &readstr_err );
    if( devicename == NULL ) {
        error = readstr_err.status;
        err_code = readstr_err.err_code;
        goto READ_HEADER_ERROR;
    }

    facename = readString( handle, info.dfFace, &readstr_err );
    if (facename == NULL) {
        error = readstr_err.status;
        err_code = readstr_err.err_code;
        RcMemFree( devicename );
        goto READ_HEADER_ERROR;
    }

    AddFontToDir( &info, devicename, facename, name );

    RcMemFree( devicename );
    RcMemFree( facename );

    RcClose( handle );

    return;


FILE_OPEN_ERROR:
    RcError( ERR_CANT_OPEN_FILE, filename, strerror( errno ) );
    ErrorHasOccured = TRUE;
    RcMemFree( name );
    return;

READ_HEADER_ERROR:
    ReportCopyError( error, ERR_READING_FONT, filename, err_code );
    ErrorHasOccured = TRUE;
    RcMemFree( name );
    RcClose( handle );
    return;

COPY_FONT_ERROR:
    ReportCopyError( error, ERR_READING_FONT, filename, err_code );
    ErrorHasOccured = TRUE;
    RcClose( handle );
    return;
}
示例#2
0
static void AddFontResources( WResID * name, ResMemFlags flags,
                              const char * filename )
/**************************************************************/
{
    FontInfo            info;
    char *              devicename;
    char *              facename;
    WResFileID          handle;
    RcStatus            ret;
    int                 err_code;
    ReadStrErrInfo      readstr_err;

    if( name->IsName ) {
        RcError( ERR_FONT_NAME );
        return;
    }

    handle = RcIoOpenInput( filename, O_RDONLY | O_BINARY );
    if( handle == NIL_HANDLE)
        goto FILE_OPEN_ERROR;

    ret = readFontInfo( handle, &info, &err_code );
    if( ret != RS_OK)
        goto READ_HEADER_ERROR;

    ret = copyFont( &info, handle, name, flags, &err_code );
    if( ret != RS_OK )
        goto COPY_FONT_ERROR;

    devicename = readString( handle, info.dfDevice, &readstr_err );
    if( devicename == NULL ) {
        ret = readstr_err.status;
        err_code = readstr_err.err_code;
        goto READ_HEADER_ERROR;
    }

    facename = readString( handle, info.dfFace, &readstr_err );
    if( facename == NULL ) {
        ret = readstr_err.status;
        err_code = readstr_err.err_code;
        RCFREE( devicename );
        goto READ_HEADER_ERROR;
    }

    AddFontToDir( &info, devicename, facename, name );

    RCFREE( devicename );
    RCFREE( facename );

    RCCLOSE( handle );

    return;


FILE_OPEN_ERROR:
    RcError( ERR_CANT_OPEN_FILE, filename, strerror( errno ) );
    ErrorHasOccured = true;
    RCFREE( name );
    return;

READ_HEADER_ERROR:
    ReportCopyError( ret, ERR_READING_FONT, filename, err_code );
    ErrorHasOccured = true;
    RCFREE( name );
    RCCLOSE( handle );
    return;

COPY_FONT_ERROR:
    ReportCopyError( ret, ERR_READING_FONT, filename, err_code );
    ErrorHasOccured = true;
    RCCLOSE( handle );
    return;
}
示例#3
0
文件: readthread.c 项目: beru/flirt
int
readMovie(ddReader* r)
{
	ddRect bounds;
	ddMovieClip* p = r->playclip;
	int byte = readUInt8(r);
	
	if ( byte == 'C' )
	{
#ifdef HAVE_ZLIB
		// file is compressed

		unsigned char* buf = NULL;
		unsigned char* dest;
		unsigned long size;
		
		int len = 0;
		
		if ( readUInt8(r) != 'W' || readUInt8(r) != 'S' )
			return -1;

		r->version = readUInt8(r);
		size = readUInt32(r);

		dest = dd_malloc(size);

		// XXX - should do this in a streaming way

		while ( !ddReader_isEOF(r) )
		{
			if ( len % 1024 == 0 )
				buf = dd_realloc(buf, len + 1024);
			
			buf[len++] = readUInt8(r);
		}

		if ( uncompress(dest, &size, buf, len) != Z_OK )
			return -1;

		ddReader_setBuffer(r, (char*)dest, size);
		
		p->bytesTotal = size;
		p->bytesTotal = r->filesize = size;
#else
		return -1;
#endif
	}
	else
	{
		if ( byte != 'F' || readUInt8(r) != 'W' || readUInt8(r) != 'S' )
			return -1;

		r->version = readUInt8(r);
		p->bytesTotal = r->filesize = readUInt32(r);
	}

	p->bytesLoaded = p->bytesTotal; // XXX

	bounds = readRect(r);
	ddMovieClip_setWidth(p, ddRect_getWidth(bounds));
	ddMovieClip_setHeight(p, ddRect_getHeight(bounds));

	r->frameRate = readUInt8(r) / 256.0;
	r->frameRate += readUInt8(r);

	p->framesTotal = readUInt16(r);

	for ( ;; )
	{
		int offset = ddReader_getOffset(r);
		int nextoffset;
		
		int block = readUInt16(r);
		Blocktype type = block >> 6;

		int length = block & ((1 << 6) - 1);

		if ( length == 63 ) /* it's a long block. */
			length = readUInt32(r);
		
		nextoffset = ddReader_getOffset(r) + length;

		if ( type == 0 || ddReader_getOffset(r) >= r->filesize || length < 0 )
			return 0;

		switch ( type )
		{
			case DEFINESHAPE:
				readDefineShape(p, r, length);
				break;
				
			case DEFINESHAPE2:
				readDefineShape2(p, r, length);
				break;
				
			case DEFINESHAPE3:
				readDefineShape3(p, r, length);
				break;
				
			case DEFINEMORPHSHAPE:
				readDefineMorphShape(p, r, length);
				break;
				
			case PLACEOBJECT:
				readPlaceObject(p, r, length);
				break;
				
			case PLACEOBJECT2:
				readPlaceObject2(p, r, length);
				break;
				
			case REMOVEOBJECT:
				readRemoveObject(p, r, length);
				break;
				
			case REMOVEOBJECT2:
				readRemoveObject2(p, r, length);
				break;
				
			case SHOWFRAME:
				readShowFrame(p, r, length);
				break;
				
			case DEFINELOSSLESS:
				readDefineBitsLossless(p, r, length, 1);
				break;

			case DEFINELOSSLESS2:
				readDefineBitsLossless(p, r, length, 2);
				break;

			case JPEGTABLES:
				{
					int hoge = 0;
				}
#if HAVE_JPEGLIB
				readJpegTables(p, r, length);
#endif
				break;

			case DEFINEBITS:
				readDefineBitsJpeg(p, r, length);
				break;

			case DEFINEBITSJPEG2:
				readDefineBitsJpeg2(p, r, length);
				break;

			case DEFINEBITSJPEG3:
				readDefineBitsJpeg3(p, r, length);
				break;
			
			case DEFINETEXT:
				readDefineText(p, r, length);
				break;
				
			case DEFINETEXT2:
				readDefineText2(p, r, length);
				break;
				
			case DEFINEFONTINFO:
				readFontInfo(p, r, length);
				break;
				
			case DEFINEFONTINFO2:
				readFontInfo2(p, r, length);
				break;
				
			case DEFINEFONT:
				readDefineFont(p, r, length);
				break;
				
			case DEFINEFONT2:
				readDefineFont2(p, r, length);
				break;
				
			case DEFINESPRITE:
				readDefineSprite(p, r, length);
				break;
				
			case SETBACKGROUNDCOLOR:
				readBackgroundColor(p, r, length);
				break;
				
			case FRAMELABEL:
				readFrameLabel(p, r, length);
				break;
				
			case DOACTION:
				readClipAction(p, r, length);
				break;

			case INITCLIPACTION:
				readInitClipAction(p, r, length);
				break;
				
			case DEFINEBUTTON:
				readDefineButton(p, r, length);
				break;
				
			case DEFINEBUTTON2:
				readDefineButton2(p, r, length);
				break;
				
			case LIBRARYSYMBOL:
				readLibrarySymbol(p, r, length);
				break;
				
			case TEXTFIELD:
				readTextField(p, r, length);
				break;
				
			case DEFINESOUND:
				readDefineSound(p, r, length);
				break;

			case STARTSOUND:
				readStartSound(p, r, length);
				break;

			case DEFINEBUTTONSOUND:
				skipBytes(r, length);
				break;
				
			case SOUNDSTREAMHEAD:
			case SOUNDSTREAMHEAD2:
				readSoundStreamHead(p, r, length);
				break;
				
			case SOUNDSTREAMBLOCK:
				readSoundStreamBlock(p, r, length);
				break;

			case PROTECT:
			case PASSWORD:
				skipBytes(r, length);
				break;

			default:
				dd_warn("Unrecognized block at 0x%x: type %i, length %i\n", offset, type, length);
				skipBytes(r, length);
		}
		
		ddReader_setOffset(r, nextoffset);
	}

	return 0;
}