summaryrefslogblamecommitdiffstats
path: root/twit.c
blob: 4c7c0088a6887e77cfd983f25f3e63881d3fa305 (plain) (tree)











































                                                           
                                                 










                                                                   
                                                                                           







                                                            
                                      



















                                                                                    
                                                               























                                                                 
                                            


                                   
                                                                 



















































                                                             
#include "twit.h"

#ifdef CONFIG_TWIT

int bbs_twit( term_screen *ts, char *fn )
{
	int ret = 0;
	char *fname = CONFIG_TWIT_DEFAULT_FILE;
	int menu_input = 0;
	char menu_cmd;
	int row;
	int quit_loop = 0;

	if ( fn != NULL )
		fname = fn;

	List *twit_list = llist_new();
	f_file *file = f_file_open( fname, F_FILE_READ );
	if ( file != NULL )
	{
		const int l_s = 128;
		int r_v;
		{
		cycle0:;
			char *l = malloc( l_s );
			r_v = f_file_readl( file, l_s, l );
			if ( r_v < 0 ) goto exit_cycle0;
			l[r_v] = '\0';
			llist_push( twit_list, l );
			goto cycle0;
		exit_cycle0:;
			if ( l != NULL ) free( l );
		}

	}
	f_file_close( file );

	//log that someone use twit
	bbs_log( NULL, "visited TWIT" );

	while( (quit_loop == 0) )
	{
		term_clr_scr( ts );
		term_cur_set_c( ts, 0 );
		term_printf( ts, "(A)dd,(Q)uit");

		//dispaly todo list
		row = term_get_maxrow( ts );
		term_cur_set_c( ts, 0 );
		{
			struct ListNode *iter=twit_list->first;
			int cnt = 1;
			while ( (iter != NULL) || ( cnt > row - 2))
			{
				term_cur_set_c( ts, 0 );
				term_cur_set_r( ts, 1+cnt );
				term_printf( ts, "[%02d] -> %s\n", cnt, (char *)iter->val);
				cnt += 1;
				iter = iter->next;
			}
		}


		term_cur_set_c( ts, 0 );
		term_cur_set_r( ts, term_get_maxrow( ts ) );
		term_printf( ts, ":");

		menu_input = term_getc( ts );
		//if something whent wrong dont know why, need to get some test case
		if ( menu_input == -1 )
			continue;
		menu_cmd = (char)menu_input;

		switch( menu_cmd )
		{
			case 'q':
			case 'Q':
				quit_loop = 1;
				break;

			case 'a':
			case 'A':
				bbs_twit_add( ts, twit_list, fname );
				break;

			default:
				term_printf( ts, "Try more\n");
		}
	}

	llist_free( twit_list );

	return ret;
}

int bbs_twit_add( term_screen *ts, List *twit, const char *fname)
{
	int ret = -1;
	int fret = -1;
	const int buf_size = 64;
	char buf[buf_size];

	if ( ts == NULL )
		return -1;

	if ( fname == NULL )
		return -1;

	term_clr_scr( ts );
	term_cur_set_c( ts, 0 );
	term_cur_set_r( ts, 0 );
	term_printf( ts, "Put new twit:\n");

	memset( buf, 0, buf_size );
	term_cur_set_c( ts, 0 );
	fret = term_readline( ts, buf, buf_size, READLINE_TEXT );
	if ( fret > 0 )
	{
		char *l = malloc( fret+1 );
		memcpy( l, buf, fret );
		l[fret]='\0';
		llist_push( twit, l );
		bbs_twit_save( fname, twit );
		ret = 0;
	} else
	{
		return -1;
	}

	if ( ret == 0 )
		if ( llist_length(twit) > TWIT_MAX_MESSAGES )
		{
			char *ptr = llist_popf( twit );
			if ( ptr != NULL )
				free( ptr );
		}

	return ret;
}

int bbs_twit_save( const char *fname, List *twit )
{
	int ret=-1;

	f_file *f=NULL;
	struct ListNode *iter=twit->first;

	f = f_file_open( fname, F_FILE_WRITE );

	while ( iter != NULL )
	{
		size_t str_size=strlen( iter->val )+2;
		char *str = malloc( str_size );
		memcpy( str, iter->val, str_size-2);
		str[str_size-1] = '\0';
		str[str_size-2] = '\n';
		f_file_write( f, strlen(str), str );
		printf( "%s\n", str ); fflush( stdout );
		free( str );
		iter = iter->next;
	}
	f_file_close( f );

	return ret;
}


#endif