Ejemplo n.º 1
0
Archivo: keyf.c Proyecto: smorimura/ne
static	void	km_set(int region,keydef_t *def,int k1,int k2)
{
	kmlist_t	*list,*next;
	int 		n;

	km.mode=KM_none;

	if (def!=(void *)-1)
		{
		 if (def==NULL|| def->kdm!=KDM_macro)
		 	{
		 	 inkey_wait("キーボードマクロエラー km_set");
		 	 return;
		 	}

		 list=km_seek(def->funcNo);
		 if (list==NULL)
		 	{
		 	 inkey_wait("キーボードマクロエラー km_set NULL");
		 	 return;
		 	}
		 free(list->buf);
		 list->buf=mem_alloc(km.x*sizeof(int));
		 list->n=km.x;
		 memcpy(list->buf,km.buf,km.x*sizeof(int));
		 system_msg("KeyMacro をセットしました。");
		 return;
		}

	list=mem_alloc(sizeof(kmlist_t));
	list->buf=mem_alloc(km.x*sizeof(int));
	list->n=km.x;
	memcpy(list->buf,km.buf,km.x*sizeof(int));
	list->next=NULL;

	system_msg("KeyMacroをセットしました。");

	n=0;
	if (km.list==NULL)
		km.list=list; else
		{
		 next=km.list;
		 while(next->next!=NULL)
		 	{
		 	 ++n;
		 	 next=next->next;
		 	}
		 next->next=list;
		}
	keydef_set(region,KDM_macro,n,k1,k2);
}
Ejemplo n.º 2
0
void system_msg( const char *title, const char *msg, ... )
{
  va_list arguments;
  va_start( arguments, msg );
  system_msg( title, msg, arguments );
  va_end( arguments );
}
Ejemplo n.º 3
0
//Funkcja dodaje waidomoϾ do kolejki
//Zwraca: 0 jeœli powodzenie. 1 jeœli nie przepe³nienie
uint8_t system_msgPut(uint8_t msg)
{
	uint8_t in = (system_msg.indexIn + 1) % ELEMS(system_msg.quene);
	if(in != system_msg.indexOut)
	{
		system_msg.quene[system_msg.indexIn] = msg;
		system_msg.indexIn = in;
		return 0;
	}
	return 1;
	
//Funkcja pobiera wiadomoϾ z kolejki.
//Zwraca: 0 jeœli brak danych, lub kod wiadomoœci
uint8_t system_msgGet(void)
{
	if(system_msg.indexIn == system_msg.indexOut)
		return 0;
	uint8_t msg = system_msg.quene[system_msg.indexOut];
	system_msg.indexOut = (system_msg.indexOut + 1) %
		ELEMS(system_msg.quene);
		
	return msg;
}

uint8_t system_msgWaitFor(void)
{
	uint8_t msg;
	while(0 == (msg = system_msg())) {};
	
	return msg;
}
Ejemplo n.º 4
0
Archivo: keyf.c Proyecto: smorimura/ne
void	inkey_wait(const char *buffer)
{
	term_bell();
	if (buffer!=NULL)
		system_msg(buffer);

	term_inkey();
}
Ejemplo n.º 5
0
Archivo: keyf.c Proyecto: smorimura/ne
int 	keysel(const char *s,const char *t)
{
	int 	c;

	system_msg(s);

	do	{
		 c = term_inkey();
		} while (strchr(t,c)==NULL);

	return tolower(c);
}
Ejemplo n.º 6
0
static void main_shutdown_handler( void )
{
  if (*halt_message)
    system_msg( "Fatal Error", halt_message );
}
Ejemplo n.º 7
0
void system_err( const char *title, const char *error, va_list arguments )
{
  system_msg( title, error, arguments );
}
Ejemplo n.º 8
0
Archivo: keyf.c Proyecto: smorimura/ne
int 	get_keyf(int region)
{
	int 	key1,key2;
	keydef_t	*def;

	if (region>=MAX_region)
		return -1;

	if (km.mode==KM_set)
		system_msg("KeyMacro設定中");
	if (km.mode==KM_do)
		system_msg("KeyMacro起動中");

	key1=km_getkey();
	if (key1!=-1)
		{
		 term_csr_flush();
		 return key1;
		}

	if (region==0)
		CursorMove();
	key1=term_inkey();
	key2=-1;

	def=keydef_get(region, key1, key2);

//fprintf(stderr,"%08p: %04x %08x\n",def, key1, key2);

	if (def!=(void *)-1)
		{
		 if (def==NULL)
		 	{
		 	 if (key1>0x100 || (iscntrl(key1) && key1!='\t' && key1<0x80))
		 	 	def=(void *)-1; else
		 	 	key1|=KF_normalcode;
		 	}
		} else
		{
		 putDoubleKey(key1);
		 if (region==0)
		 	CursorMove();
		 key2=term_inkey();
		 delDoubleKey();
		 def=keydef_get(region, key1, key2);
		}

/* 通常の有効なキー */
	if (def!=NULL&& def!=(void *)-1&& def->kdm==KDM_func)
		{
		 key1=def->funcNo;
		 keydef_args=def->args;

		 def=NULL;
		}
	if (def==NULL)
		{
		 km_addkey(key1);
		 return key1;
		}

/* マクロ登録中 */
	if (km.mode==KM_set)
		{
		 km_set(region,def,key1,key2);
		 return -1;
		}

/* 無効なキー */
	if (def==(void *)-1)
		return -1;

/* マクロ起動 */
	km_macro(def);
	return -1;
}