#include <stdio.h>
#include <string.h>

#define MAX_ELEMENTS	10
#define EMPTY_ELEMVAL	0

#define ARR_ISEMPTY(arr)	( (arr)[0] == EMPTY_ELEMVAL )
#define ARR_ISFULL(arr, len)	( (arr)[(len)-1] != EMPTY_ELEMVAL )

typedef enum { FALSE=0, TRUE } Bool;

// -------------------------------------------------------------------------------------
void arr_print( int arr[], int maxelems )
{
	register int i;

	for (i=0; i < maxelems; i++)
		printf("%d ", arr[i]);
	putchar('\n');

	return;
}
// -------------------------------------------------------------------------------------
int arr_append( int arr[], int maxelems, int val)
{
	if ( ARR_ISFULL(arr, maxelems) )
		return -1;

	if ( ARR_ISEMPTY(arr) ) {
		arr[0] = val;
		return 0;
	}
	register int i;
	for (i=maxelems-1; arr[i] == EMPTY_ELEMVAL; i--)
		;
	arr[++i] = val;
	return i;
}
// -------------------------------------------------------------------------------------
Bool arr_prepend( int arr[], int maxelems, int val)
{
	if ( ARR_ISFULL(arr, maxelems) )
		return FALSE;

	memmove( &arr[1], &arr[0], (maxelems-1) * sizeof(int) );
	arr[0] = val;

	return TRUE;
}
// --------------------------------------------------------------------------------------
int arr_elemindex( int arr[], int maxelems, int val )
{
	register int i;
	for (i=0; i < maxelems && arr[i] != val; i++)
		;
	return i == maxelems ? -1 : i;
}
// -------------------------------------------------------------------------------------
Bool arr_delete( int arr[], int maxelems, int val)
{
	register int i;
	register int elem = arr_elemindex( arr, maxelems, val);
	if ( elem == -1 )
		return FALSE;

	for (i=elem; arr[i+1] != EMPTY_ELEMVAL && i < maxelems-1; i++)
		arr[i] = arr[i+1];
	arr[i] = EMPTY_ELEMVAL;

	return TRUE;
}
// -------------------------------------------------------------------------------------
int main( void )
{
	int arr[ MAX_ELEMENTS ] = {10, 20, 30, 40, 50, 60, 70, 80, 0, 0};

						// μηδενισμός όλων των στοιχείων του arr
//	memset(arr, 0, MAX_ELEMENTS * sizeof(int) );

	arr_print( arr, MAX_ELEMENTS );

	return 0;
}

