john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

Win CE char buffer List v2

An improved version of a linked list 64 characters

/* 2010-05 john pfeiffer 
buffer linked list for file data */

#define  CHARBUFFERMAX 64

typedef struct charbuffer* charbufferptr;

struct charbuffer
{   int id;
    char data[ CHARBUFFERMAX ];
    charbufferptr prev;
    charbufferptr next ;
};

charbufferptr charbufferAlloc( VOID ) 
{  
    return( (charbufferptr)malloc(  sizeof( struct charbuffer ) )  );
}/* end   charbufferAlloc(  )  */

charbufferptr initializecharbuffer( VOID  )
{  
    charbufferptr temp;
    temp = charbufferAlloc( );
    if( temp == NULL )
   {    printf( "error allocating memory");
        exit( 1 );
    }
    temp -> id = 0;
    memset( temp ->data , 0 , sizeof( temp ->data ) );
    temp ->prev = NULL ;
    temp ->next = NULL ;

    return temp ;   
}/* end   initializecharbuffer(  )  */

charbufferptr appendcharbufferList( charbufferptr listend , charbufferptr newobject )
{  
    listend -> next = newobject ;
    newobject ->id = ( listend ->id ) +1;   
    newobject ->prev = listend ;

    return newobject ;   
}/* end   appendcharbufferList(  )  */

/* cannot rely on stop char as this is raw */
void displaycharbufferConsole( charbufferptr temp )
{    int i=0;
    if( temp != NULL) 
    {    
        for( i =0 ; i< CHARBUFFERMAX; i++)
       {    
           printf("%c",  temp->data[ i ] );  
        }
 }
}/* end   displaycharbufferConsole(  )  */

void displaycharbufferDebug( charbufferptr temp )
{   if( temp != NULL) 
    {  
        printf("id=%d\n", temp->id );
        printf("data=%s\n", temp->data );
        printf("next=%d\n", (int) temp->next );
        printf("prev=%d\n", (int) temp->prev );
     }
}/* end   displaycharbufferDebug() */

void displaycharbufferListConsole( charbufferptr temp )
{
    printf(" \n---CHARBUFFER-LIST---\n");         
    while( temp != NULL) 
    {  
        displaycharbufferConsole( temp );
        temp = temp-> next ; 
    }
}/* end  displaycharbufferListConsole(  )  */


charbufferptr removecharbufferListEnd( charbufferptr t )
{  
    charbufferptr temp; 
    if(t != NULL)
    { 
        temp = t;  
        t = t->prev;
        t->next = NULL;
        free( temp );
        return t;   
    }   
    return( NULL );
}/* end   removecharbufferListEnd(  )  */


/* deletes down the list next */
charbufferptr deletecharbufferList( charbufferptr t )
{ 
    charbufferptr temp;

    printf("\n---CHARBUFFER-LIST-DELETE--- \n ");

    while( t != NULL) 
    {  
        printf( "%d " , t->id );
        temp = t;  
        t = t->next;
        free( temp );     
     }
 printf( "\n"  );
}/* end function  deletecharbufferList(  )  */

int charbufferGetData ( charbufferptr temp , FILE* fp )
{
    int i = 0 ;
    memset(  temp -> data , 0 , sizeof(temp-> data) );

    while( (i < CHARBUFFERMAX ) && !feof(fp) )
    {              
          temp -> data[ i ] =  fgetc(fp); 
          i++;     
    }

/* EOF condition stored in data, remove? */
    if( feof(fp) && i>0)
    {    temp -> data[ i-1 ] = 0;    }

    return i;
}/* end charbufferGetData */

  • « blackberry administration service unable to retrieve specific device attributes
  • redirect mydocs u redirect »

Published

May 5, 2010

Category

c

~266 words

Tags

  • convert-to-win32 13
  • linked list 2
  • win-ce 40