Esempio n. 1
0
TBool ELFFile::Init(const TText * const aFileName)
//
// Read the ELF file into memory
//
 	{

 	delete [] iFileName;	
	iFileName = new TText[strlen((const char *)aFileName)+1];
	strcpy ((char *)iFileName, (const char *)aFileName);

	TInt error = HFile::Open(iFileName, &iFileHandle);
	if (error!=0)
		return EFalse;

	TInt flength = HFile::GetLength(iFileHandle);

	iElfFile = (Elf32_Ehdr *)HMem::Alloc(0,flength);
	if (!iElfFile)
		{
		Print(EPeError,"Failed to allocate memory to read in file.\n");
		Close();
		return EFalse;
		}

	if (!HFile::Read(iFileHandle,iElfFile,flength))
		{
		Print(EPeError,"Unable to read file %s.\n",iFileName);
		Close();
		return EFalse;
		}

        Close();

	if (!IsValidFileHeader(iElfFile))
		{
		Print(EPeError,"Invalid file header.\n");
		return EFalse;
		}
	// we only support this....for the moment
	iCpu = ECpuArmV4;

	if (!InitHeaders()) return EFalse;
	
	if (!InitDllData()) return EFalse;

	iEntryPoint = iElfFile->e_entry;

	iCodeSize = GetCodeSize();
	iDataSize = GetDataSize();
	iBssSize = GetBssSize();

	iStackReservedSize = 0x2000;
	iStackCommittedSize = 0x2000;

 	iLinkedBase = iCodeSegmentHdr->p_vaddr;
	
	iImageIsDll = iDllData->ImageIsDll();

	return ETrue;
	}
Esempio n. 2
0
///////////////////////////////////////////////////////////////////////////////
//ピクセルデータをBitmapファイルへ書き込む
int WriteBitmap(const char* filename, GLubyte* data, int width, int height){
	FILE *fp;
	BitmapHeader header;
	BitmapInfoHeader info;
	int i=0;
	int j=0;
	int x;
	int y;
	// ファイルオープン
	if( ( fp = fopen(filename, "wb") )==NULL){
		return -1;
	}
	//ヘッダ構造体の初期化
	InitHeaders(&header, &info);
	//Bitmapサイズ
	info.width = width;
	info.height = height;
	//ファイル容量
	header.filesize = 
		width*height*3*sizeof(GLubyte)		//ビット情報量
		+ 14								//BitmapHeader構造体サイズ
		+ 40;								//BitmapInfoHeader構造体サイズ
	//ヘッダ書き込み
	WriteHeader(&header,fp);
	WriteInfoHeader(&info,fp);
	// イメージデータ書き込み
	for( y=0 ; y < height ; y++ ){
		for( x=0 ; x < width ; x++ ){
			j=fwrite((data+x*3+3*y*width+2),sizeof(GLubyte),1,fp);
			j=fwrite((data+x*3+3*y*width+1),sizeof(GLubyte),1,fp);
			j=fwrite((data+x*3+3*y*width),sizeof(GLubyte),1,fp);
		}
	}
	// ファイルクローズ
	fclose(fp);
	return 0;
}
Esempio n. 3
0
///////////////////////////////////////////////////////////////////////////////
//ピクセルデータをBitmapファイルへ書き込む
int WriteBitmap(const char* filename,int width, int height){
	GLubyte *pixel_data;
	FILE *fp;
	BitmapHeader header;
	BitmapInfoHeader info;
	int alignmentParam;
	int i=0;
	int j=0;
	int x;
	int y;
	unsigned char zero=0;
	
	///////////////////////////////////////////////////////////////////////////
	// チェック用の処理
	// データ格納のサイズを設定
	//glPixelStorei(GL_PACK_ALIGNMENT ,2);

	// データ格納の横幅に収まる幅のバイトの倍数を取得
	glGetIntegerv( GL_PACK_ALIGNMENT,&alignmentParam);
	
	// 1画素3バイトとするとひとつの行は3*widthバイト+アルファ
	int glByteWidth;	// 実際の横幅のバイト数
	
	// データの幅のバイト数がalignmentParamの倍数であるかをチェック
	if( width*3%alignmentParam == 0)
		glByteWidth = width*3;
	else
		// そうでなければ,alignmentParamの倍数にあわせた幅のバイトサイズにする
		glByteWidth = width*3 + alignmentParam - (width*3)%alignmentParam;

	///////////////////////////////////////////////////////////////////////////
	// 読み込み
	// メモリ確保
	pixel_data = (GLubyte*)malloc((glByteWidth)*(height)*(sizeof(GLubyte)));
	// OpenGLによるピクセルデータの読み出し
	glReadPixels(
		0,0,
		width,height,
	    GL_RGB,
		GL_UNSIGNED_BYTE,
		pixel_data);

	///////////////////////////////////////////////////////////////////////////
	// ファイルオープン
	if( ( fp = fopen(filename, "wb") )==NULL){
		return -1;
	}
	//ヘッダ構造体の初期化
	InitHeaders(&header, &info);
	//Bitmapサイズ
	info.width = width;
	info.height = height;
	int writeWidth;
	
	///////////////////////////////////////////////////////////////////////////
	// BITMAP用の横幅の処理
	// データの幅のバイト数が4の倍数であるかをチェック
	if( width*3%4 == 0)
		writeWidth = width*3;
	else
		// そうでなければ,4の倍数にあわせた幅のバイトサイズにする
		writeWidth = width*3 + 4 - (width*3)%4;
	
	///////////////////////////////////////////////////////////////////////////
	//ファイル容量
	header.filesize =
		writeWidth*height		//ビット情報量
		+ 14					//BitmapHeader構造体サイズ
		+ 40;					//BitmapInfoHeader構造体サイズ
	//ヘッダ書き込み
	WriteHeader(&header,fp);
	WriteInfoHeader(&info,fp);

	///////////////////////////////////////////////////////////////////////////
	// イメージデータ書き込み
	for( y=0 ; y < height ; y++ ){
		// データをBGRの順で書き込み
		for( x=0 ; x < width ; x++ ){
			j=fwrite((pixel_data+x*3+glByteWidth*y+2),sizeof(GLubyte),1,fp);
			j=fwrite((pixel_data+x*3+glByteWidth*y+1),sizeof(GLubyte),1,fp);
			j=fwrite((pixel_data+x*3+glByteWidth*y),sizeof(GLubyte),1,fp);
		}
		// 幅のバイト数が4の倍数でないときは0で埋める
		if( width*3%4 != 0)
			for( int j=0;j<4-(width*3)%4;j++)
				fwrite(&zero,sizeof(GLubyte),1,fp);
	}

	///////////////////////////////////////////////////////////////////////////
	// メモリ開放
	free(pixel_data);
	// ファイルクローズ
	fclose(fp);
	return 0;
}
Esempio n. 4
0
int JackWinMMEDriver::Open(bool capturing,
         bool playing,
         int inchannels,
         int outchannels,
         bool monitor,
         const char* capture_driver_name,
         const char* playback_driver_name,
         jack_nframes_t capture_latency,
         jack_nframes_t playback_latency)
{

    jack_log("JackWinMMEDriver::Open");

    fRealCaptureChannels = midiInGetNumDevs();
	fRealPlaybackChannels = midiOutGetNumDevs();

    // Generic JackMidiDriver Open
    if (JackMidiDriver::Open(capturing, playing, fRealCaptureChannels, fRealPlaybackChannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency) != 0)
        return -1;

    fMidiDestination = new MidiSlot[fRealCaptureChannels];
    assert(fMidiDestination);

    // Real input
    int devindex = 0;
    for (int i = 0; i < fRealCaptureChannels; i++)  {

        HMIDIIN handle;
        fMidiDestination[devindex].fIndex = i;
        MMRESULT ret = midiInOpen(&handle, fMidiDestination[devindex].fIndex, (DWORD)MidiInProc, (DWORD)fRingBuffer[devindex], CALLBACK_FUNCTION);

        if (ret == MMSYSERR_NOERROR) {
            fMidiDestination[devindex].fHandle = handle;
            if (!InitHeaders(&fMidiDestination[devindex])) {
                jack_error("memory allocation failed");
                midiInClose(handle);
                continue;
            }
            ret = midiInPrepareHeader(handle, fMidiDestination[devindex].fHeader, sizeof(MIDIHDR));

            if (ret == MMSYSERR_NOERROR) {
                fMidiDestination[devindex].fHeader->dwUser = 1;
                ret = midiInAddBuffer(handle, fMidiDestination[devindex].fHeader, sizeof(MIDIHDR));
                if (ret == MMSYSERR_NOERROR) {
                    ret = midiInStart(handle);
                    if (ret != MMSYSERR_NOERROR) {
                        jack_error("midiInStart error");
                        CloseInput(&fMidiDestination[devindex]);
                        continue;
                    }
                } else {
                    jack_error ("midiInAddBuffer error");
                    CloseInput(&fMidiDestination[devindex]);
                    continue;
                }
            } else {
                jack_error("midiInPrepareHeader error");
                midiInClose(handle);
                continue;
            }
        } else {
            jack_error ("midiInOpen error");
            continue;
        }
        devindex += 1;
    }
    fRealCaptureChannels = devindex;
    fCaptureChannels = devindex;

    fMidiSource = new MidiSlot[fRealPlaybackChannels];
    assert(fMidiSource);

    // Real output
    devindex = 0;
    for (int i = 0; i < fRealPlaybackChannels; i++)  {
        MMRESULT res;
        HMIDIOUT handle;
        fMidiSource[devindex].fIndex = i;
        UINT ret = midiOutOpen(&handle, fMidiSource[devindex].fIndex, 0L, 0L, CALLBACK_NULL);
        if (ret == MMSYSERR_NOERROR) {
            fMidiSource[devindex].fHandle = handle;
            if (!InitHeaders(&fMidiSource[devindex])) {
                jack_error("memory allocation failed");
                midiOutClose(handle);
                continue;
            }
            res = midiOutPrepareHeader(handle, fMidiSource[devindex].fHeader, sizeof(MIDIHDR));
            if (res != MMSYSERR_NOERROR) {
                jack_error("midiOutPrepareHeader error %d %d %d", i, handle, res);
                continue;
            } else {
                fMidiSource[devindex].fHeader->dwUser = 1;
            }
        } else {
            jack_error("midiOutOpen error");
            continue;
        }
        devindex += 1;
    }
    fRealPlaybackChannels = devindex;
    fPlaybackChannels = devindex;
    return 0;
}