<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://dsibrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Endres</id>
	<title>DSiBrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://dsibrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Endres"/>
	<link rel="alternate" type="text/html" href="https://dsibrew.org/wiki/Special:Contributions/Endres"/>
	<updated>2026-04-30T12:45:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://dsibrew.org/w/index.php?title=User_talk:Neimod&amp;diff=2744</id>
		<title>User talk:Neimod</title>
		<link rel="alternate" type="text/html" href="https://dsibrew.org/w/index.php?title=User_talk:Neimod&amp;diff=2744"/>
		<updated>2010-02-21T20:05:10Z</updated>

		<summary type="html">&lt;p&gt;Endres: New page: Yes, that was my question. ;-) So there is no method to make own jpegs. But are you also skilled in Hatena Flipnote? xD --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Yes, that was my question. ;-) So there is no method to make own jpegs. But are you also skilled in Hatena Flipnote? xD --[[User:Endres|Endres]] 21:05, 21 February 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Endres</name></author>
	</entry>
	<entry>
		<id>https://dsibrew.org/w/index.php?title=User_talk:Steven&amp;diff=2738</id>
		<title>User talk:Steven</title>
		<link rel="alternate" type="text/html" href="https://dsibrew.org/w/index.php?title=User_talk:Steven&amp;diff=2738"/>
		<updated>2010-02-20T12:20:39Z</updated>

		<summary type="html">&lt;p&gt;Endres: New page: Yes but it isn&amp;#039;t only the pit.bin - or am I wrong? --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Yes but it isn&#039;t only the pit.bin - or am I wrong? --[[User:Endres|Endres]] 13:20, 20 February 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Endres</name></author>
	</entry>
	<entry>
		<id>https://dsibrew.org/w/index.php?title=User:Steven/flip_frame_decode.c&amp;diff=2718</id>
		<title>User:Steven/flip frame decode.c</title>
		<link rel="alternate" type="text/html" href="https://dsibrew.org/w/index.php?title=User:Steven/flip_frame_decode.c&amp;diff=2718"/>
		<updated>2010-02-15T18:18:31Z</updated>

		<summary type="html">&lt;p&gt;Endres: GCC gave me errors which were caused by &amp;quot;wise&amp;quot; M$ thinking that typecast isn&amp;#039;t neccessary :(&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please note that there is very little comments and this application just outputs to the text console at the moment, but the code used here can be expanded to produce any other image file formats you wanted.  I&#039;m still working on the sound format and as such there is no functions for the sound yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;memory.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Disable MS VC&#039;s &amp;quot;unsecure / depricated&amp;quot; code warning&lt;br /&gt;
#pragma warning( disable : 4996 )&lt;br /&gt;
&lt;br /&gt;
// setup some file types for set sizes&lt;br /&gt;
typedef signed char		s8;&lt;br /&gt;
typedef signed short	s16;&lt;br /&gt;
typedef signed long		s32;&lt;br /&gt;
typedef unsigned char	u8;&lt;br /&gt;
typedef unsigned short	u16;&lt;br /&gt;
typedef unsigned long	u32;&lt;br /&gt;
&lt;br /&gt;
typedef struct PPM_HEADER&lt;br /&gt;
{&lt;br /&gt;
    u8  magic[4];&lt;br /&gt;
    u32 fileSize;&lt;br /&gt;
    u32 audioOffset;&lt;br /&gt;
    u16 numberOfFrames;&lt;br /&gt;
    u16 unk0;&lt;br /&gt;
    u16 flags;&lt;br /&gt;
    u16 previewFrameNumber;&lt;br /&gt;
    u16 originalAuthorName[11];&lt;br /&gt;
    u16 authorName[11];&lt;br /&gt;
    u16 userName[11];&lt;br /&gt;
    u8  originalAuthorID[8];&lt;br /&gt;
    u8  editAuthorID[8];&lt;br /&gt;
    u8  originalFileName[18];&lt;br /&gt;
    u8  fileName[18];&lt;br /&gt;
    u8  authorID[8];&lt;br /&gt;
    u8  unk1[8];&lt;br /&gt;
    u8  unk2[6];&lt;br /&gt;
    u8  previewBitmap[1536];&lt;br /&gt;
} ppmHeader;&lt;br /&gt;
&lt;br /&gt;
int flength(FILE *f)&lt;br /&gt;
{&lt;br /&gt;
  int pos,end;&lt;br /&gt;
  pos = ftell (f);&lt;br /&gt;
  fseek (f, 0, SEEK_END);&lt;br /&gt;
  end = ftell (f);&lt;br /&gt;
  fseek (f, pos, SEEK_SET);&lt;br /&gt;
  return end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char *idFromStr( u8 is[8] )&lt;br /&gt;
{&lt;br /&gt;
    static char retVal[32];&lt;br /&gt;
    int i;&lt;br /&gt;
    &lt;br /&gt;
    memset( retVal, 0, 32 );&lt;br /&gt;
    &lt;br /&gt;
    for( i = 7; i &amp;gt;= 0; i -- )&lt;br /&gt;
         sprintf( retVal, &amp;quot;%s%02X&amp;quot;, retVal, ( is[ i ] &amp;amp; 0xFF ) );&lt;br /&gt;
    &lt;br /&gt;
    return retVal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char *filenameFromStr( u8 fn[18] )&lt;br /&gt;
{&lt;br /&gt;
    static char retVal[64];&lt;br /&gt;
    int i;&lt;br /&gt;
    &lt;br /&gt;
    memset( retVal, 0, 32 );&lt;br /&gt;
    &lt;br /&gt;
    for( i = 0; i &amp;lt; 3; i ++ )&lt;br /&gt;
         sprintf( retVal, &amp;quot;%s%02X&amp;quot;, retVal, ( fn[ i ] &amp;amp; 0xFF ) );&lt;br /&gt;
         &lt;br /&gt;
    strcat( retVal, &amp;quot;_&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    for( i = 3; i &amp;lt; 16; i ++ )&lt;br /&gt;
         sprintf( retVal, &amp;quot;%s%c&amp;quot;, retVal, ( fn[ i ] &amp;amp; 0xFF ) );&lt;br /&gt;
    &lt;br /&gt;
    sprintf( retVal, &amp;quot;%s_%03d&amp;quot;, retVal, ( fn[ 16 ] &amp;amp; 0xFF ) + ( ( fn[ 17 ] &amp;amp; 0xFF ) &amp;lt;&amp;lt; 8 ) );&lt;br /&gt;
    &lt;br /&gt;
    return retVal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char *hexFromStr( u8 is[8], int len )&lt;br /&gt;
{&lt;br /&gt;
    static char retVal[256];&lt;br /&gt;
    int i;&lt;br /&gt;
    &lt;br /&gt;
    memset( retVal, 0, 256 );&lt;br /&gt;
    &lt;br /&gt;
    for( i = 0; i &amp;lt; len; i ++ )&lt;br /&gt;
         sprintf( retVal, &amp;quot;%s%02X &amp;quot;, retVal, ( is[ i ] &amp;amp; 0xFF ) );&lt;br /&gt;
    &lt;br /&gt;
    return retVal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void printHeaderInfo( ppmHeader *ptr )&lt;br /&gt;
{&lt;br /&gt;
    printf( &amp;quot;Magic Number    : %c%c%c%c\n&amp;quot;, ptr-&amp;gt;magic[0], ptr-&amp;gt;magic[1], ptr-&amp;gt;magic[2], ptr-&amp;gt;magic[3] );&lt;br /&gt;
    printf( &amp;quot;File Size       : %d (%08X)\n&amp;quot;, (int)ptr-&amp;gt;fileSize, (unsigned int)ptr-&amp;gt;fileSize );&lt;br /&gt;
    printf( &amp;quot;Audio offset    : %d (%08X)\n&amp;quot;, (int)ptr-&amp;gt;audioOffset, (unsigned int)ptr-&amp;gt;audioOffset );&lt;br /&gt;
    printf( &amp;quot;# Frames        : %d\n&amp;quot;, ptr-&amp;gt;numberOfFrames );&lt;br /&gt;
    printf( &amp;quot;Unknown         : 0x%04X\n&amp;quot;, ptr-&amp;gt;unk0 );&lt;br /&gt;
    printf( &amp;quot;Flags?          : 0x%04X - 0 = open, 1 = locked\n&amp;quot;, ptr-&amp;gt;flags );&lt;br /&gt;
    printf( &amp;quot;Preview Frame # : %d\n&amp;quot;, ptr-&amp;gt;previewFrameNumber );&lt;br /&gt;
    printf( &amp;quot;Orig Author     : UCS-2 string \n&amp;quot; );&lt;br /&gt;
    printf( &amp;quot;Author          : UCS-2 string \n&amp;quot; );&lt;br /&gt;
    printf( &amp;quot;Edit Author     : UCS-2 string \n&amp;quot; );&lt;br /&gt;
    printf( &amp;quot;Orig Author ID  : %s\n&amp;quot;, idFromStr( ptr-&amp;gt;originalAuthorID ) );&lt;br /&gt;
    printf( &amp;quot;Edit Author ID  : %s\n&amp;quot;, idFromStr( ptr-&amp;gt;editAuthorID ) );&lt;br /&gt;
    printf( &amp;quot;Orig Filename   : %s\n&amp;quot;, filenameFromStr( ptr-&amp;gt;originalFileName ) );&lt;br /&gt;
    printf( &amp;quot;Curr Filename   : %s\n&amp;quot;, filenameFromStr( ptr-&amp;gt;fileName ) );&lt;br /&gt;
    printf( &amp;quot;Author ID       : %s\n&amp;quot;, idFromStr( ptr-&amp;gt;authorID ) );&lt;br /&gt;
    printf( &amp;quot;Unknown 8 bytes : %s\n&amp;quot;, hexFromStr( ptr-&amp;gt;unk1, 8 ) ) ;&lt;br /&gt;
    printf( &amp;quot;Unknown 6 bytes : %s\n&amp;quot;, hexFromStr( ptr-&amp;gt;unk2, 6 ) ) ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static char outPreviewG[] = { &#039; &#039;, 176, 219, 178, &#039;r&#039;, &#039;R&#039;, &#039;p&#039;, &#039;X&#039;, &#039;B&#039;, &#039;P&#039;, &#039;b&#039;, &#039;x&#039;, &#039;M&#039;, &#039;.&#039;, &#039;.&#039;, &#039;.&#039; };&lt;br /&gt;
&lt;br /&gt;
static char outFrameG0[] = {  32, 219, 176, 178 };&lt;br /&gt;
static char outFrameG1[] = { 219,  32, 176, 178 };&lt;br /&gt;
&lt;br /&gt;
void displayPreviewImage( u8 img[1536] )&lt;br /&gt;
{&lt;br /&gt;
    int x, y, cellOffset;&lt;br /&gt;
    int xp, xc;&lt;br /&gt;
    u8 c;&lt;br /&gt;
    &lt;br /&gt;
    for( y = 0; y &amp;lt; 48; y ++ )&lt;br /&gt;
    {&lt;br /&gt;
        cellOffset = ( ( y &amp;gt;&amp;gt; 3 ) * 256 ) + ( ( y &amp;amp; 0x7 ) &amp;lt;&amp;lt; 2 );&lt;br /&gt;
        for( x = 0; x &amp;lt; 64; x ++ )&lt;br /&gt;
        {&lt;br /&gt;
            xp = ( x &amp;amp; 7 ) &amp;gt;&amp;gt; 1;&lt;br /&gt;
            xc = ( ( x &amp;gt;&amp;gt; 3 ) &amp;lt;&amp;lt; 5 );&lt;br /&gt;
            c = img[ cellOffset + xp + xc ];&lt;br /&gt;
            printf( &amp;quot;%c&amp;quot;, outPreviewG[ ( x &amp;amp; 1 ? c  &amp;gt;&amp;gt; 4 : c ) &amp;amp; 0xF ] );&lt;br /&gt;
        }&lt;br /&gt;
        printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
u32 getu32( u8 *buf )&lt;br /&gt;
{&lt;br /&gt;
	u32 retVal = 0;&lt;br /&gt;
&lt;br /&gt;
	retVal = retVal | ( buf[ 0 ] &amp;lt;&amp;lt;  0 );&lt;br /&gt;
	retVal = retVal | ( buf[ 1 ] &amp;lt;&amp;lt;  8 );&lt;br /&gt;
	retVal = retVal | ( buf[ 2 ] &amp;lt;&amp;lt; 16 );&lt;br /&gt;
	retVal = retVal | ( buf[ 3 ] &amp;lt;&amp;lt; 24 );&lt;br /&gt;
&lt;br /&gt;
	return retVal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
u32 getu32inv( u8 *buf )&lt;br /&gt;
{&lt;br /&gt;
	u32 retVal = 0;&lt;br /&gt;
&lt;br /&gt;
	retVal = retVal | ( buf[ 3 ] &amp;lt;&amp;lt;  0 );&lt;br /&gt;
	retVal = retVal | ( buf[ 2 ] &amp;lt;&amp;lt;  8 );&lt;br /&gt;
	retVal = retVal | ( buf[ 1 ] &amp;lt;&amp;lt; 16 );&lt;br /&gt;
	retVal = retVal | ( buf[ 0 ] &amp;lt;&amp;lt; 24 );&lt;br /&gt;
&lt;br /&gt;
	return retVal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
u32 getFrameOffset( u8 *buf, u16 frm )&lt;br /&gt;
{&lt;br /&gt;
	u32 numBytes;&lt;br /&gt;
&lt;br /&gt;
	numBytes = getu32( buf );&lt;br /&gt;
&lt;br /&gt;
	if( frm &amp;gt; ( numBytes &amp;gt;&amp;gt; 2 ) )&lt;br /&gt;
		return 0;&lt;br /&gt;
	&lt;br /&gt;
	return ( getu32( &amp;amp;buf[ 4 + ( frm &amp;lt;&amp;lt; 2 ) ] ) + 8 + numBytes );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
u32 decodeLine( u8 *outB, u8 *inB, u32 useByte, u8 paper, u8 pen, u8 invflag )&lt;br /&gt;
{&lt;br /&gt;
	u32 offset = 0;&lt;br /&gt;
	u16 x = 0, i;&lt;br /&gt;
	u8 data;&lt;br /&gt;
&lt;br /&gt;
	if( useByte == 0 ) // Set the full line to the current paper colour&lt;br /&gt;
		memset( outB, paper, 256 );&lt;br /&gt;
	else // Bytes in this line, read and deal with them&lt;br /&gt;
	{&lt;br /&gt;
		while( useByte != 0 )&lt;br /&gt;
		{&lt;br /&gt;
			if( ( useByte &amp;amp; 0x80000000 ) == 0x80000000 )&lt;br /&gt;
			{&lt;br /&gt;
				// This byte exists...&lt;br /&gt;
				data = inB[ offset++ ];&lt;br /&gt;
&lt;br /&gt;
				for( i = 0; i &amp;lt; 8; i ++ )&lt;br /&gt;
				{&lt;br /&gt;
					if( ( data &amp;amp; 0x01 ) == 0x01 )&lt;br /&gt;
						outB[ x ] = invflag == 0 ? pen : paper;&lt;br /&gt;
					else&lt;br /&gt;
						outB[ x ] = invflag == 0 ? paper : pen;&lt;br /&gt;
&lt;br /&gt;
					x ++;&lt;br /&gt;
&lt;br /&gt;
					data &amp;gt;&amp;gt;= 1;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				memset( &amp;amp;outB[ x ], paper, 8 );&lt;br /&gt;
				x += 8;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			useByte &amp;lt;&amp;lt;= 1;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( x &amp;lt; 256 )&lt;br /&gt;
			memset( &amp;amp;outB[ x ], paper, 256 - x );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return offset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayFrame( u8 *frmBuf, u16 frmNum )&lt;br /&gt;
{&lt;br /&gt;
	u8 colPaper, colLayer1, colLayer2;&lt;br /&gt;
	u32 frmOffset;&lt;br /&gt;
	u8 lEnc[192];&lt;br /&gt;
	u8 *buf;&lt;br /&gt;
	u8 lnePos, lneCount;&lt;br /&gt;
	u8 *outFrameG;&lt;br /&gt;
	u16 x, y;&lt;br /&gt;
	u32 byteUse;&lt;br /&gt;
&lt;br /&gt;
	buf = (u8*) malloc( 256 * 192 );&lt;br /&gt;
	if( buf == NULL )&lt;br /&gt;
	{&lt;br /&gt;
		printf( &amp;quot;Error unable to allocate buffer for frame %d\n&amp;quot;, (int)frmBuf );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	frmOffset = getFrameOffset( frmBuf, 1 );&lt;br /&gt;
&lt;br /&gt;
	printf( &amp;quot;Frame #%d offset %08X\n&amp;quot;, frmNum, (unsigned int)frmOffset );&lt;br /&gt;
&lt;br /&gt;
	colPaper  = frmBuf[ frmOffset ] &amp;amp; 0x01;&lt;br /&gt;
	colLayer1 = ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 1 ) &amp;amp; 0x03;&lt;br /&gt;
	colLayer2 = ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 3 ) &amp;amp; 0x03;&lt;br /&gt;
&lt;br /&gt;
	printf( &amp;quot;Paper colour:   %s\n&amp;quot;, ( colPaper == 0 ? &amp;quot;Black&amp;quot; : &amp;quot;White&amp;quot; ) );&lt;br /&gt;
	printf( &amp;quot;Layer 1 colour: %d\n&amp;quot;, colLayer1 );&lt;br /&gt;
	printf( &amp;quot;Layer 2 colour: %d\n&amp;quot;, colLayer2 );&lt;br /&gt;
&lt;br /&gt;
	if( colPaper == 0 )&lt;br /&gt;
		outFrameG = outFrameG0;&lt;br /&gt;
	else&lt;br /&gt;
		outFrameG = outFrameG1;&lt;br /&gt;
&lt;br /&gt;
	memset( buf, outFrameG[0], 192 &amp;lt;&amp;lt; 8 );&lt;br /&gt;
&lt;br /&gt;
	lnePos = 0;&lt;br /&gt;
	frmOffset ++;&lt;br /&gt;
&lt;br /&gt;
	// Read layer 1 line information into lower nibble&lt;br /&gt;
	for( lneCount = 0; lneCount &amp;lt; 48; lneCount ++ )&lt;br /&gt;
	{&lt;br /&gt;
		lEnc[ lnePos++ ] = ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 0 ) &amp;amp; 0x03;&lt;br /&gt;
		lEnc[ lnePos++ ] = ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 2 ) &amp;amp; 0x03;&lt;br /&gt;
		lEnc[ lnePos++ ] = ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 4 ) &amp;amp; 0x03;&lt;br /&gt;
		lEnc[ lnePos++ ] = ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 6 ) &amp;amp; 0x03;&lt;br /&gt;
		frmOffset ++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	lnePos = 0;&lt;br /&gt;
	// Read layer 2 line information into upper nibble&lt;br /&gt;
	for( lneCount = 0; lneCount &amp;lt; 48; lneCount ++ )&lt;br /&gt;
	{&lt;br /&gt;
		lEnc[ lnePos++ ] |= ( frmBuf[ frmOffset ] &amp;lt;&amp;lt; 4 ) &amp;amp; 0x30;&lt;br /&gt;
		lEnc[ lnePos++ ] |= ( frmBuf[ frmOffset ] &amp;lt;&amp;lt; 2 ) &amp;amp; 0x30;&lt;br /&gt;
		lEnc[ lnePos++ ] |= ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 0 ) &amp;amp; 0x30;&lt;br /&gt;
		lEnc[ lnePos++ ] |= ( frmBuf[ frmOffset ] &amp;gt;&amp;gt; 2 ) &amp;amp; 0x30;&lt;br /&gt;
		frmOffset ++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//read frame here...&lt;br /&gt;
	// First read layer 1.&lt;br /&gt;
	lnePos = 0;&lt;br /&gt;
&lt;br /&gt;
	while( lnePos &amp;lt; 192 )&lt;br /&gt;
	{&lt;br /&gt;
		switch( lEnc[ lnePos ] &amp;amp; 0x03 )&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // Skip this line&lt;br /&gt;
				byteUse = 0;&lt;br /&gt;
				printf( &amp;quot;Line %3d(%04X), Layer 1, Skip Frame [%08X]\toffset %08X\n&amp;quot;, lnePos, lnePos, (unsigned int)byteUse, (unsigned int)frmOffset + 0x6a0 );&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // Coded&lt;br /&gt;
				byteUse = getu32inv( &amp;amp;frmBuf[ frmOffset ] );&lt;br /&gt;
				printf( &amp;quot;Line %3d(%04X), Layer 1, Coded      [%08X]\toffset %08X\n&amp;quot;, lnePos, lnePos, (unsigned int)byteUse, (unsigned int)frmOffset + 0x6a0 );&lt;br /&gt;
				frmOffset += 4;&lt;br /&gt;
				frmOffset += decodeLine( &amp;amp;buf[ lnePos &amp;lt;&amp;lt; 8 ], &amp;amp;frmBuf[ frmOffset ], byteUse, outFrameG[ 0 ], outFrameG[ colLayer1 ], 0 );&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // Inv Coded&lt;br /&gt;
				byteUse = getu32inv( &amp;amp;frmBuf[ frmOffset ] );&lt;br /&gt;
				printf( &amp;quot;Line %3d(%04X), Layer 1, Inv Coded  [%08X]\toffset %08X\n&amp;quot;, lnePos, lnePos, (unsigned int)byteUse, (unsigned int)frmOffset + 0x6a0 );&lt;br /&gt;
				frmOffset += 4;&lt;br /&gt;
				frmOffset += decodeLine( &amp;amp;buf[ lnePos &amp;lt;&amp;lt; 8 ], &amp;amp;frmBuf[ frmOffset ], byteUse, outFrameG[ colLayer1 ], outFrameG[ 0 ], 1 );&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // Full Line&lt;br /&gt;
				byteUse = 0xFFFFFFFF;&lt;br /&gt;
				printf( &amp;quot;Line %3d(%04X), Layer 1, Full Frame [%08X]\toffset %08X\n&amp;quot;, lnePos, lnePos, (unsigned int)byteUse, (unsigned int)frmOffset + 0x6a0 );&lt;br /&gt;
				frmOffset += decodeLine( &amp;amp;buf[ lnePos &amp;lt;&amp;lt; 8 ], &amp;amp;frmBuf[ frmOffset ], byteUse, outFrameG[ 0 ], outFrameG[ colLayer1 ], 0 );&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		lnePos ++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//output frame here...&lt;br /&gt;
	for( y = 0; y &amp;lt; 192; y ++ )&lt;br /&gt;
	{&lt;br /&gt;
		for( x = 0; x &amp;lt; 256; x ++ )&lt;br /&gt;
		{&lt;br /&gt;
			printf( &amp;quot;%c&amp;quot;, buf[ x + ( y &amp;lt;&amp;lt; 8 ) ] );&lt;br /&gt;
		}&lt;br /&gt;
		printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void hexOut( char *buf, int len )&lt;br /&gt;
{&lt;br /&gt;
    int i;&lt;br /&gt;
    &lt;br /&gt;
    for( i = 0 ; i &amp;lt; len ; i ++ )&lt;br /&gt;
    {&lt;br /&gt;
        printf( &amp;quot;%02X &amp;quot;, buf[i] &amp;amp; 0xFF );&lt;br /&gt;
        &lt;br /&gt;
        if( ( i &amp;amp; 0xF ) == 0xF )&lt;br /&gt;
            printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
  ppmHeader *pHead;&lt;br /&gt;
  FILE *fp;&lt;br /&gt;
  int f_len;&lt;br /&gt;
  char *f_buf;&lt;br /&gt;
  &lt;br /&gt;
  if(argc != 2)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;usage: %s &amp;lt;anim.ppm&amp;gt;\n&amp;quot;, argv[0]);&lt;br /&gt;
    exit(0);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  fp = fopen(argv[1],&amp;quot;rb&amp;quot;);&lt;br /&gt;
  if(fp == NULL)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;input file not found\n&amp;quot;);&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  f_len = flength(fp);&lt;br /&gt;
  f_buf = malloc(f_len);&lt;br /&gt;
  if(f_buf == NULL)&lt;br /&gt;
  {&lt;br /&gt;
    fprintf(stderr, &amp;quot;not enough memory\n&amp;quot;);&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  if(fread(f_buf, f_len, 1, fp) != 1)&lt;br /&gt;
  {&lt;br /&gt;
    fprintf(stderr, &amp;quot;file read failure\n&amp;quot;);&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  pHead = (ppmHeader *) f_buf;&lt;br /&gt;
&lt;br /&gt;
  printHeaderInfo( pHead );&lt;br /&gt;
  &lt;br /&gt;
  displayPreviewImage( pHead-&amp;gt;previewBitmap );&lt;br /&gt;
  &lt;br /&gt;
  printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  displayFrame( &amp;amp;f_buf[ 0x6a0 ], 1 );&lt;br /&gt;
&lt;br /&gt;
  printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  hexOut( &amp;amp;f_buf[ 0x6a0 ], 256 );&lt;br /&gt;
  &lt;br /&gt;
  printf( &amp;quot;\n&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  hexOut( &amp;amp;f_buf[ f_len - 256 ], 256 );&lt;br /&gt;
  &lt;br /&gt;
  printf(&amp;quot;finished..\n&amp;quot;);&lt;br /&gt;
  free( f_buf);&lt;br /&gt;
  fclose(fp);&lt;br /&gt;
 &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Endres</name></author>
	</entry>
	<entry>
		<id>https://dsibrew.org/w/index.php?title=User:Endres&amp;diff=2717</id>
		<title>User:Endres</title>
		<link rel="alternate" type="text/html" href="https://dsibrew.org/w/index.php?title=User:Endres&amp;diff=2717"/>
		<updated>2010-02-15T17:37:23Z</updated>

		<summary type="html">&lt;p&gt;Endres: New page: My DSi isn&amp;#039;t broken and there was never any modded firmware on it. Unlike my other electronic devices (S*ny P*P / GBA / iP*d / ... ) which all had some kind of manipulation. BUT I would li...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My DSi isn&#039;t broken and there was never any modded firmware on it. Unlike my other electronic devices (S*ny P*P / GBA / iP*d / ... ) which all had some kind of manipulation. BUT I would like to mod it officially - i.e. with SD-Card. I would like to...&lt;br /&gt;
* move pics from PC to DSi&lt;br /&gt;
* edit [[Flipnote_Files/PPM|PPM]] files ;-)&lt;br /&gt;
* maybe some bin-files with good nintendo checksum or something else what could write a moving Hello World on your screen :P&lt;/div&gt;</summary>
		<author><name>Endres</name></author>
	</entry>
	<entry>
		<id>https://dsibrew.org/w/index.php?title=Talk:Flipnote_Files/PPM&amp;diff=2716</id>
		<title>Talk:Flipnote Files/PPM</title>
		<link rel="alternate" type="text/html" href="https://dsibrew.org/w/index.php?title=Talk:Flipnote_Files/PPM&amp;diff=2716"/>
		<updated>2010-02-15T17:29:50Z</updated>

		<summary type="html">&lt;p&gt;Endres: /* Modifying the file? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Could you guys post a example for decoding the preview image? i cant figure out the 8x8 tile thing. i will give credit to you:).Preview of what i have: [[Image:FlipnoteImageDecodedByPBSDS.png]]--[[User:Pbsds|pbsds]] 09:29, 24 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
See [[User:Remark/Icon2ppm.c]]. -- [[User:Remark|Remark]] 09:45, 24 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Thanks:)--[[User:Pbsds|pbsds]] 09:55, 24 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
It doesn&#039;t work! Here is the code im using(i had to transelate it):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;&amp;quot;&amp;gt;Dim $ImageOutput[4072]&lt;br /&gt;
for $x=0 to 46 step 1&lt;br /&gt;
	for $y=0 to 7 step 1&lt;br /&gt;
		for $z=0 To 7 Step 1&lt;br /&gt;
			ImageOutput[($x*64)+(16*$y)+(4*$z)]   = RawImage[($x*64)+(32*$z)+(4*$y)]&lt;br /&gt;
			ImageOutput[($x*64)+(16*$y)+(4*$z)+1] = RawImage[($x*64)+(32*$z)+(4*$y)+1]&lt;br /&gt;
			ImageOutput[($x*64)+(16*$y)+(4*$z)+2] = RawImage[($x*64)+(32*$z)+(4*$y)+2]&lt;br /&gt;
			ImageOutput[($x*64)+(16*$y)+(4*$z)+3] = RawImage[($x*64)+(32*$z)+(4*$y)+3]&lt;br /&gt;
		Next&lt;br /&gt;
	Next&lt;br /&gt;
Next&amp;lt;/source&amp;gt;&lt;br /&gt;
Output: [[Image:Test2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
You made a typo here:&lt;br /&gt;
 for x=0 to 46 step &lt;br /&gt;
-[[User:Remark|Remark]] 18:42, 24 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Made no difference...--[[User:Pbsds|pbsds]] 21:08, 24 December 2009 (UTC)&lt;br /&gt;
----&lt;br /&gt;
If you would&#039;ve used a sane language, you would&#039;ve gotten a segfault. :-)&lt;br /&gt;
&lt;br /&gt;
Please do some research on the tiling, my code is written for the 32x32 icons you see in the DSiMenu.&lt;br /&gt;
&lt;br /&gt;
- [[User:Remark|Remark]] 21:52, 24 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I had to set the RawImage and the ImageOutput arrays to 1000 more pixels than needed to avoid the segfault.&lt;br /&gt;
&lt;br /&gt;
I think i&#039;ll try again tomorrow. but now im off to bed:)--[[User:Pbsds|pbsds]] 00:39, 25 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
WooHoo! im really close now!: [[Image:Test3.png]]--[[User:Pbsds|pbsds]] 14:43, 25 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Finaly got it!: [[Image:Test4.png]]--[[User:Pbsds|pbsds]] 21:26, 27 December 2009 (UTC)&lt;br /&gt;
== Pallete ==&lt;br /&gt;
i don&#039;t think my RGB pallete is perfect... Could someone post a RGB version of the pallete? My pallete have too sharp colors :( --[[User:Pbsds|pbsds]] 01:03, 4 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Maybe i should post my pallete so you guys can check if its wrong:&lt;br /&gt;
&lt;br /&gt;
0 = FFFFFF&lt;br /&gt;
&lt;br /&gt;
1 = 525252&lt;br /&gt;
&lt;br /&gt;
2 = FFFFFF&lt;br /&gt;
&lt;br /&gt;
3 = A4A4A4&lt;br /&gt;
&lt;br /&gt;
4 = FF0000&lt;br /&gt;
&lt;br /&gt;
5 = 7B0000&lt;br /&gt;
&lt;br /&gt;
6 = FF7B7B&lt;br /&gt;
&lt;br /&gt;
7 = 00FF00&lt;br /&gt;
&lt;br /&gt;
8 = 0000FF&lt;br /&gt;
&lt;br /&gt;
9 = 00007B&lt;br /&gt;
&lt;br /&gt;
A = 7B7BFF&lt;br /&gt;
&lt;br /&gt;
B = 00FF00&lt;br /&gt;
&lt;br /&gt;
C = FF00FF&lt;br /&gt;
&lt;br /&gt;
D = 00FF00&lt;br /&gt;
&lt;br /&gt;
E = 00FF00&lt;br /&gt;
&lt;br /&gt;
F = 00FF00&lt;br /&gt;
&lt;br /&gt;
--[[User:Pbsds|pbsds]] 10:52, 4 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Use the following formula:&lt;br /&gt;
(x / 32) * 256&lt;br /&gt;
To convert between the scales 0-31 and 0-255.&lt;br /&gt;
&lt;br /&gt;
Thanks!--[[User:Pbsds|pbsds]] 15:15, 5 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Modifying the file? ==&lt;br /&gt;
&lt;br /&gt;
Has anyone managed to get a modified PPM file running on the DSi? If so, can you update the wiki with your findings.&lt;br /&gt;
[[User:Chronic667|Chronic667]] 20:40, 13 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I don&#039;t know much about that but i think there is a hash in there.--[[User:Pbsds|pbsds]] 14:19, 10 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The last 144 bytes of the file are a hash / encypted block that changes for every minor change in the file.  When I was originally working on this with someone else (forgot his nick on here) we said that it could possibly be an AES cypher key or data block, I don&#039;t know if anything else was worked out behond this as I&#039;ve not looked at the files since I worked out the basic file structure.  If your thinking of using FlipNote as an entry into the DSi for homebrew then the files do not seem to have any way to break them due to the lack of strings in the file.&lt;br /&gt;
:Actually the last 144 bytes are split into 128 bytes of hash and 16 bytes of 0x00.&lt;br /&gt;
:[[User:Steven|Steven]] 06:26, 11 February 2010 (UTC)&lt;br /&gt;
::Has someone any idea what this checksum is? ;-) --[[User:Endres|Endres]] 18:29, 15 February 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Endres</name></author>
	</entry>
</feed>