示例#1
0
文件: prefs.c 项目: hagenkaye/ne
int load_prefs(buffer *const b, const char *const name)
{
    if (!b || !name)
    {
        return ERROR;
    }

    assert_buffer(b);

    b->exec_only_options = 1;

    int error = OK;
    char_stream *const cs = load_stream(NULL, name, false, false);
    if (cs)
    {
        error = play_macro(b, cs);
        free_char_stream(cs);
    }
    else
    {
        error = ERROR;
    }

    b->exec_only_options = 0;

    return error;
}
void EditBoxCollection::Dispatcher(KeyInfo& k, int iMode)
{
    lock();
    track_beg();

    if((k.skey & 0x00FF) == kbEnter && !(k.skey & (shAlt | shCtrl | shShift)))
            k.skey &= ~shIsCtrl;

    keydef_pair* pre_key  = (iMode) ? keys.GetDef("kbBeforeKey"):0;
    keydef_pair* post_key = (iMode) ? keys.GetDef("kbAfterKey"):0;

    if(pre_key)
    {
    	pre_key = keydef_pair::copy(pre_key);	//create a copy of the def
        play_macro(pre_key->prog);
        track_recording(pre_key, 0);
    }

    if(k.skey & shIsCtrl)
    {
        keydef_pair* prog = keys.GetDef(k.KeyName);

        if(prog)
        {
        	prog = keydef_pair::copy(prog);	//create a copy of the def
            play_macro(prog->prog);
            track_recording(prog, 0);
		}
    }
    else
    {
        track_recording(0, (char)k.key);
        usual_key(k);
        doFlashBracket(*this, 0);
    }

    if(post_key)
    {
    	post_key = keydef_pair::copy(post_key);	//create a copy of the def
        play_macro(post_key->prog);
        track_recording(post_key, 0);
    }

    track_end();
    unlock();
}
示例#3
0
void qrepeat_macro(void)
{
SHORT reps;

	if((icb.macro_mode|MACRO_OK) == USE_MACRO)
		return;
	reps = flix.hdr.frame_count-1;
	if(!soft_qreq_number(&reps,1,100,"macro_repeat"))
		return;
	softerr(play_macro(reps),"macro_use");
}
示例#4
0
int8 master_macro_aws(int16 step){

   int16 addr;
   
   int8  macro_cmd[2];
   int16 macro_arg[2];
   int8  macro_end;
   
   --step;
   addr = macro_address[0] + (step*6);
   
   init_ext_eeprom();
   
   // port
   macro_cmd[0] = read_ext_eeprom(addr);
   ++addr;
   macro_arg[0] = read16_ext_eeprom(addr);
   ++addr;
   ++addr;
   // macro
   macro_cmd[1] = read_ext_eeprom(addr);
   ++addr;
   macro_arg[1] = read16_ext_eeprom(addr);
   ++addr;
   ++addr;
   
   macro_end = read_ext_eeprom(addr);
   
   // check basic structure
   if (macro_cmd[0] == 'P' && macro_cmd[1] == 'M') {
      
      RTC_read();
      RTC_display();
      fprintf(COM_A, "%c%Lu,%c%Lu\r\n",
         macro_cmd[0], macro_arg[0],            // port
         macro_cmd[1], macro_arg[1]);           // macro

      if (macro_arg[1] > 0 && macro_arg[1] < 17) {
         play_macro(macro_arg[1], macro_arg[0]);   // [1] casts to int8 / [0] = port
      }
   }
   else {
      cmd_err();
      macro_end = 59;
   }
   
   return (macro_end);
}
示例#5
0
void quse_macro(void)
{
	if((icb.macro_mode|MACRO_OK) == USE_MACRO)
		return;
	softerr(play_macro(1),"macro_use");
}
示例#6
0
Errcode get_macro_input(void)
/* read and process macro into input stream */
{
int readsize;
Errcode err;
USHORT oflags;

	if((err = poll_macro_abort()) < Success)
		goto error;

	if(Mcb.macbuf == NULL) /* no input record in buffer read one in */
	{
		if(Mcb.sizeleft <= 0) /* end of macro file stream */
		{
			if(--Mcb.repeats > 0)
			{
				if((err = play_macro(Mcb.repeats)) < Success)
					goto error;
			}
			else
			{
				err = Err_abort;
				goto error;
			}
		}

		if(Mcb.next.b[0] & MACRO_REC) /* not an input record */
			goto reuse_last;

		/* retrieve record head and calculate record size to read */

		Mcb.ioflags = Mcb.next.flags;
		readsize = sizeof(USHORT); /* short for prefetch of next record head */

		if(Mcb.ioflags & HAS_CCOUNT) /* get previous io state and count */
		{
			if((err = ffread(Mcb.fp,&oflags,sizeof(USHORT))) < Success)
				goto error;

			Mcb.sizeleft -= sizeof(USHORT);

			if(oflags & CCOUNT_SHORT)
				readsize += sizeof(USHORT);
			else if(oflags & CCOUNT_LONG)
				readsize += sizeof(ULONG);
			else
				readsize += sizeof(UBYTE);

			if(oflags & HAS_MOUSEX)
				readsize += sizeof(SHORT); 
			if(oflags & HAS_MOUSEY)
				readsize += sizeof(SHORT); 
			if(oflags & HAS_HISTATE)
				readsize += sizeof(USHORT);
		}

		if(Mcb.ioflags & KEYHIT)
			readsize += sizeof(USHORT);
		if(Mcb.ioflags & HAS_PRESSURE)
			readsize += sizeof(UBYTE); 
		if(Mcb.ioflags & HAS_MOUSEX)
			readsize += sizeof(SHORT); 
		if(Mcb.ioflags & HAS_MOUSEY)
			readsize += sizeof(SHORT); 
		if(Mcb.ioflags & HAS_HISTATE)
			readsize += sizeof(USHORT);

		if((Mcb.sizeleft -= readsize) < 0)
			readsize -= sizeof(USHORT);	/* end of file, NO next record */

		if( readsize != 0 
			&& (err = ffread(Mcb.fp,Mcb.mbuf,readsize)) < Success)
		{
			goto error;
		}

		/* get last short in buffer, this is head of next rec or garbage if
		 * end of file (previous short before buffer) */

		Mcb.next.flags = *(USHORT *)&(Mcb.mbuf[readsize-sizeof(USHORT)]);

		Mcb.macbuf = Mcb.mbuf; /* flag record present, at start of buffer */

		if(Mcb.ioflags & HAS_CCOUNT)
		{
			/* add count to possibly decremented value and get count of
			 * polls left to do before using this record */

			if(oflags & CCOUNT_SHORT)
			{
				Mcb.iocount += VGETVAL(Mcb.macbuf,USHORT);
			}
			else if(oflags & CCOUNT_LONG)
			{
				Mcb.iocount += VGETVAL(Mcb.macbuf,ULONG);
			}
			else
			{
				Mcb.iocount += VGETVAL(Mcb.macbuf,UBYTE);
			}

			if((LONG)Mcb.iocount < 0) 
				/* oops, file corrupt or program outta sync */
			{
				err = Err_macrosync;
				goto error;
			}

			/* item with poll count has to provide previous input state
			 * to re-create recorded conditions in _poll_input() */

			icb.state = oflags & MACSTATE;

			if(oflags & HAS_MOUSEX)
			{
				icb.sx = VGETVAL(Mcb.macbuf,SHORT);
			}
			if(oflags & HAS_MOUSEY)
			{
				icb.sy = VGETVAL(Mcb.macbuf,SHORT);
			}
			if(oflags & HAS_HISTATE)
			{
				HISTATE_WORD(icb.state) |= VGETVAL(Mcb.macbuf,USHORT);
			}

			if(Mcb.iocount == 0) /* if count is zero we must put this
								  * iostate into the previous state 
								  * otherwise next poll will do this 
								  * in poll input */
			{
				SET_BUPBITS(icb.state);
				icb.ostate = icb.state & ALL_BSTATES;
				get_menucursorxy(); /* recalc previous values as current */
				ICB_COPYTO_LAST();  /* put them in last buffer */
			}
		}
	}

	if(Mcb.iocount > 0) /* we have record, but keep polling */
		goto reuse_last;

	/* count satisfied, let user have recorded input */

	icb.state = Mcb.ioflags & MACSTATE;

	if(icb.state & KEYHIT)
	{
		icb.inkey = VGETVAL(Mcb.macbuf,USHORT);
	}
	else
		icb.inkey = 0;

	if(Mcb.ioflags & HAS_PRESSURE)
	{
		icb.pressure = VGETVAL(Mcb.macbuf,UBYTE);
	}
	else
		icb.pressure = PRESSURE_MAX;

	if(Mcb.ioflags & HAS_MOUSEX)
	{
		Mcb.lastmouse.x = VGETVAL(Mcb.macbuf,SHORT);
	}
	if(Mcb.ioflags & HAS_MOUSEY)
	{
		Mcb.lastmouse.y = VGETVAL(Mcb.macbuf,SHORT);
	}
	*((Short_xy *)&icb.sx) = Mcb.lastmouse;
	if(Mcb.ioflags & HAS_HISTATE)
	{
		Mcb.last_histate = VGETVAL(Mcb.macbuf,USHORT);
	}
	HISTATE_WORD(icb.state) |= Mcb.last_histate; 

	Mcb.macbuf = NULL; /* flag macro consumed no longer present */
	return(Success);

reuse_last:

	--Mcb.iocount;			  /* decrement input poll counter */
	icb.state &= ALL_BSTATES; /* clear changed _poll_input() unique flags */
	return(Success);

error:
	return(macro_read_error(err));
}
示例#7
0
void handle_code_actuate(const uint8_t code, const uint8_t action, const uint8_t tapkey)
{
	const uint8_t modaction = (action & MOD_ACTION_MASK);
	
	if (modaction)
	{
		g_autokey_modifier = modaction;
	}
	
	switch(code)
	{
	case HID_KEYBOARD_SC_A:
	case HID_KEYBOARD_SC_B:
	case HID_KEYBOARD_SC_C:
	case HID_KEYBOARD_SC_D:
	case HID_KEYBOARD_SC_E:
	case HID_KEYBOARD_SC_F:
	case HID_KEYBOARD_SC_G:
	case HID_KEYBOARD_SC_H:
	case HID_KEYBOARD_SC_I:
	case HID_KEYBOARD_SC_J:
	case HID_KEYBOARD_SC_K:
	case HID_KEYBOARD_SC_L:
	case HID_KEYBOARD_SC_M:
	case HID_KEYBOARD_SC_N:
	case HID_KEYBOARD_SC_O:
	case HID_KEYBOARD_SC_P:
	case HID_KEYBOARD_SC_Q:
	case HID_KEYBOARD_SC_R:
	case HID_KEYBOARD_SC_S:
	case HID_KEYBOARD_SC_T:
	case HID_KEYBOARD_SC_U:
	case HID_KEYBOARD_SC_V:
	case HID_KEYBOARD_SC_W:
	case HID_KEYBOARD_SC_X:
	case HID_KEYBOARD_SC_Y:
	case HID_KEYBOARD_SC_Z:
	case HID_KEYBOARD_SC_1_AND_EXCLAMATION:
	case HID_KEYBOARD_SC_2_AND_AT:
	case HID_KEYBOARD_SC_3_AND_HASHMARK:
	case HID_KEYBOARD_SC_4_AND_DOLLAR:
	case HID_KEYBOARD_SC_5_AND_PERCENTAGE:
	case HID_KEYBOARD_SC_6_AND_CARET:
	case HID_KEYBOARD_SC_7_AND_AMPERSAND:
	case HID_KEYBOARD_SC_8_AND_ASTERISK:
	case HID_KEYBOARD_SC_9_AND_OPENING_PARENTHESIS:
	case HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS:
	case HID_KEYBOARD_SC_ENTER:
	case HID_KEYBOARD_SC_ESCAPE:
	case HID_KEYBOARD_SC_BACKSPACE:
	case HID_KEYBOARD_SC_TAB:
	case HID_KEYBOARD_SC_SPACE:
	case HID_KEYBOARD_SC_MINUS_AND_UNDERSCORE:
	case HID_KEYBOARD_SC_EQUAL_AND_PLUS:
	case HID_KEYBOARD_SC_OPENING_BRACKET_AND_OPENING_BRACE:
	case HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE:
	case HID_KEYBOARD_SC_BACKSLASH_AND_PIPE:
	case HID_KEYBOARD_SC_NON_US_HASHMARK_AND_TILDE:
	case HID_KEYBOARD_SC_SEMICOLON_AND_COLON:
	case HID_KEYBOARD_SC_APOSTROPHE_AND_QUOTE:
	case HID_KEYBOARD_SC_GRAVE_ACCENT_AND_TILDE:
	case HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN:
	case HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN:
	case HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK:
	case HID_KEYBOARD_SC_CAPS_LOCK:
	case HID_KEYBOARD_SC_F1:
	case HID_KEYBOARD_SC_F2:
	case HID_KEYBOARD_SC_F3:
	case HID_KEYBOARD_SC_F4:
	case HID_KEYBOARD_SC_F5:
	case HID_KEYBOARD_SC_F6:
	case HID_KEYBOARD_SC_F7:
	case HID_KEYBOARD_SC_F8:
	case HID_KEYBOARD_SC_F9:
	case HID_KEYBOARD_SC_F10:
	case HID_KEYBOARD_SC_F11:
	case HID_KEYBOARD_SC_F12:
	case HID_KEYBOARD_SC_PRINT_SCREEN:
	case HID_KEYBOARD_SC_SCROLL_LOCK:
	case HID_KEYBOARD_SC_PAUSE:
	case HID_KEYBOARD_SC_INSERT:
	case HID_KEYBOARD_SC_HOME:
	case HID_KEYBOARD_SC_PAGE_UP:
	case HID_KEYBOARD_SC_DELETE:
	case HID_KEYBOARD_SC_END:
	case HID_KEYBOARD_SC_PAGE_DOWN:
	case HID_KEYBOARD_SC_RIGHT_ARROW:
	case HID_KEYBOARD_SC_LEFT_ARROW:
	case HID_KEYBOARD_SC_DOWN_ARROW:
	case HID_KEYBOARD_SC_UP_ARROW:
	case HID_KEYBOARD_SC_NUM_LOCK:
	case HID_KEYBOARD_SC_KEYPAD_SLASH:
	case HID_KEYBOARD_SC_KEYPAD_ASTERISK:
	case HID_KEYBOARD_SC_KEYPAD_MINUS:
	case HID_KEYBOARD_SC_KEYPAD_PLUS:
	case HID_KEYBOARD_SC_KEYPAD_ENTER:
	case HID_KEYBOARD_SC_KEYPAD_1_AND_END:
	case HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN:
	case HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_5:
	case HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_7_AND_HOME:
	case HID_KEYBOARD_SC_KEYPAD_8_AND_UP_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP:
	case HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT:
	case HID_KEYBOARD_SC_KEYPAD_DOT_AND_DELETE:
	case HID_KEYBOARD_SC_NON_US_BACKSLASH_AND_PIPE:
	case HID_KEYBOARD_SC_APPLICATION:
	case HID_KEYBOARD_SC_POWER:
	case HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN:
	case HID_KEYBOARD_SC_F13:
	case HID_KEYBOARD_SC_F14:
	case HID_KEYBOARD_SC_F15:
	case HID_KEYBOARD_SC_F16:
	case HID_KEYBOARD_SC_F17:
	case HID_KEYBOARD_SC_F18:
	case HID_KEYBOARD_SC_F19:
	case HID_KEYBOARD_SC_F20:
	case HID_KEYBOARD_SC_F21:
	case HID_KEYBOARD_SC_F22:
	case HID_KEYBOARD_SC_F23:
	case HID_KEYBOARD_SC_F24:
#ifdef MACRO_RAM_SIZE
		if (g_recording_macro)
			record_stroke(code);
#endif /* MACRO_RAM_SIZE */
		alpha_down(code, action);
		break;
	case HID_KEYBOARD_SC_LOCKING_CAPS_LOCK:
		queue_autokeys(HID_KEYBOARD_SC_CAPS_LOCK, g_modifier_state);
		break;
	case HID_KEYBOARD_SC_LOCKING_NUM_LOCK:
		queue_autokeys(HID_KEYBOARD_SC_NUM_LOCK, g_modifier_state);
		break;
	case HID_KEYBOARD_SC_LOCKING_SCROLL_LOCK:
		queue_autokeys(HID_KEYBOARD_SC_SCROLL_LOCK, g_modifier_state);
		break;
#ifdef MAX_NUMBER_OF_BACKLIGHTS
	case SCANCODE_BL_DIMMER:
		backlight_dimmer();
		break;
	case SCANCODE_BL_MODE:
		backlight_mode();
		break;
	case SCANCODE_BL_ENABLE:
		backlight_enable();
		break;
#else
	case SCANCODE_BL_DIMMER:
		led_dimmer();
		break;
#endif /* MAX_NUMBER_OF_BACKLIGHTS */
#ifdef MACRO_RAM_SIZE
	case SCANCODE_PASSWORD1:
	case SCANCODE_PASSWORD2:
	case SCANCODE_PASSWORD3:
	case SCANCODE_PASSWORD4:
		if (!g_recording_macro)
			start_password_record(code);
		break;
#endif /* MACRO_RAM_SIZE */
	case SCANCODE_KEYLOCK:
		g_keylock_flag ^= 1;
		break;
	case SCANCODE_WINLOCK:
		g_winlock_flag ^= 1;
		if (g_winlock_flag == 0)
			led_host_off(LED_WIN_LOCK);
		else
			led_host_on(LED_WIN_LOCK);
		break;
	case SCANCODE_ESCGRAVE:
		break;
	case SCANCODE_BOOT:
		g_reset_requested = RESET_TO_BOOT;
		break;
	case SCANCODE_CONFIG:
		if (g_console_state == CONSOLE_IDLE)
			g_console_state = CONSOLE_MENU_MAIN;
		break;
	case SCANCODE_MUTE:
	case SCANCODE_VOL_INC:
	case SCANCODE_VOL_DEC:
	case SCANCODE_BASS_BOOST:
	case SCANCODE_NEXT_TRACK:
	case SCANCODE_PREV_TRACK:
	case SCANCODE_STOP:
	case SCANCODE_PLAY_PAUSE:
	case SCANCODE_BACK:
	case SCANCODE_FORWARD:
	case SCANCODE_MEDIA:
	case SCANCODE_MAIL:
	case SCANCODE_CALC:
	case SCANCODE_MYCOMP:
	case SCANCODE_SEARCH:
	case SCANCODE_BROWSER:
		set_media(code);
		break;
#ifdef ENABLE_MOUSE
	case SCANCODE_MOUSE1:
	case SCANCODE_MOUSE2:
	case SCANCODE_MOUSE3:
	case SCANCODE_MOUSE4:
	case SCANCODE_MOUSE5:
		set_mousebutton(code);
		break;
	case SCANCODE_MOUSEXR:
		g_mouse_req_X++;
		goto mousemove;
	case SCANCODE_MOUSEXL:
		g_mouse_req_X--;
		goto mousemove;
	case SCANCODE_MOUSEYU:
		g_mouse_req_Y--;
		goto mousemove;
	case SCANCODE_MOUSEYD:
		g_mouse_req_Y++;
	mousemove:
		if ((g_mouse_active == 0) || (g_mouse_multiply < g_double_tap_repeat))
			g_mouse_multiply = g_double_tap_repeat;
		break;
#endif /* ENABLE_MOUSE */
	case SCANCODE_M1:
	case SCANCODE_M2:
	case SCANCODE_M3:
	case SCANCODE_M4:
	case SCANCODE_M5:
	case SCANCODE_M6:
	case SCANCODE_M7:
	case SCANCODE_M8:
	case SCANCODE_M9:
	case SCANCODE_M10:
	case SCANCODE_M11:
	case SCANCODE_M12:
	case SCANCODE_M13:
	case SCANCODE_M14:
		play_macro(code);
		break;
#ifdef MACRO_RAM_SIZE
	case SCANCODE_MRAM_RECORD:
		toggle_macro_record();
		break;
	case SCANCODE_MRAM_PLAY:
		if (!g_recording_macro)
			queue_ram_macro(g_ram_macro, g_ram_macro_length);
		break;
#endif /* MACRO_RAM_SIZE */
	case HID_KEYBOARD_SC_LEFT_CONTROL:
	case HID_KEYBOARD_SC_LEFT_SHIFT:
	case HID_KEYBOARD_SC_LEFT_ALT:
	case HID_KEYBOARD_SC_LEFT_GUI:
	case HID_KEYBOARD_SC_RIGHT_CONTROL:
	case HID_KEYBOARD_SC_RIGHT_SHIFT:
	case HID_KEYBOARD_SC_RIGHT_ALT:
	case HID_KEYBOARD_SC_RIGHT_GUI:
		mod_down(code, action);
		break;
	case SCANCODE_FN:
	case SCANCODE_FN2:
	case SCANCODE_FN3:
	case SCANCODE_FN4:
	case SCANCODE_FN5:
	case SCANCODE_FN6:
	case SCANCODE_FN7:
	case SCANCODE_FN8:
	case SCANCODE_FN9:
		fn_down(code, action);
		break;
	default:
		report_event(EVENT_CODE_KEYMAP_INVALID_CODE, code, MODE_UPDATE);
		break;
	}
	
	g_last_keypress = code;
}