TheT Posted April 12, 2015 Posted April 12, 2015 Ladies and Gents, This is for working with TARGET for "Warthog Thrustmaster HOTAS" I am trying to use a string as a variable for condition detection: Code: if (my_condition == 'red') do_something(); I've looked at "strcmp" function, but I keep getting a "Runtime Error: Bad alias" error in code: alias test3 = 'test'; alias test4 = 'test'; int myfunction() { if ( strcmp(test3, test3) ) { printf("OK 12 \xa"); } } What variable type do I need/can use to achieve this feat? And in this manner, would I be able to pass this variable into a function? Code: ??? my_string_var = 'blue'; my_function(my_string_var); // snip int my_function (??? my_local_var = 'some default value') {} I've been trying to use Alias, but it does not comply well. I went as far as trying to use structs and char-array compare functions, but have not gotten that to work either. And, while done with that, can I output the variable contents somehow? Code: printf(" and the var is " + my_string_var + "!\xa"); // or I will take even printf(my_string_var); I understand printf wants a "parameter" for printing, but %s doesn't work =( printf("OK 2 %s \xa", 'test3'); I figure I can use int conditions, but they would be a number and not a string. I would also love to know if I can actually build C-style Class functionality in tmc files, but I am not holding my breath on possibility of this. =) Thanks much. ~T
Achiral Posted April 13, 2015 Posted April 13, 2015 (edited) A few things... String literals need to be in double quotes, not single. A later reference to an alias needs to be preceded by &. strcmp() returns a 0 if the values are equal, and >0 or <0 if one value is higher. So... alias test3 = "test"; alias test4 = "test"; // ~/~ int myfunction() { if ( strcmp(&test3, &test4) == 0 ) { printf("OK 12 \xa"); } }You can also pass an alias to a function... alias my_string_var = "blue"; // ~/~ my_function(&my_string_var); // snip int my_function (alias my_local_var) { // don't think you can set default parameters in TARGET // remember to refer to &my_local_var with the & }For printf, %s works, but you need that & again (and no quotes)... printf("OK 2 %s \xa", &test3);As an alternative to using an alias, you can also use define, which then does not make use of & when referring to it. Swapping it for alias in your first example... define test3 "test" define test4 "test" // ~/~ int myfunction() { if ( strcmp(test3, test4) == 0 ) { printf("OK 12 \xa"); } } Edited April 14, 2015 by Achiral Corrected incorrect define format
TheT Posted April 13, 2015 Author Posted April 13, 2015 Achiral, Thanks for the help. It is very much appreciated. I was not aware the Double-Quotes were required. Good to know. I have not tried out your suggestions yet, but just to double-check: Alias is passed by reference, with the use of & sign? Just want to confirm that's the case. All of the other variable seem to be by-value. I can see the use for alias for items like Joystick and Thruster box inputs (aka you send your commands to a physical location, which is kind of clever). I was thinking about defines, but wanted to make sure I have the string base down first without using defines as scapegoats. Thanks.
TheT Posted April 14, 2015 Author Posted April 14, 2015 Had a chance to test out some code. Unfortunately, getting a bad-alias error: "Runtime Error: Bad alias" Code: alias test3 = 'test'; alias test4 = 'test'; int my_function( ) { if ( strcmp(&test3, &test3) == 0 ) { printf("OK 12 \xa"); } }
TheT Posted April 14, 2015 Author Posted April 14, 2015 I take that back, still had the single-quotes. Got it to work. Thank you very much, good sir.
Achiral Posted April 14, 2015 Posted April 14, 2015 Correct, alias is always passed by reference with a prepended &. Well, almost always. One case where it wouldn't be is if you assign the alias to a constant via define. Once done though, you would need to access both by reference... alias xxx = "test"; someFunction(&xxx); define yyy xxx // yyy is now the same as xxx - i.e., an alias someFunction(&yyy);Note also that I messed up my define examples in the last post (it was late). A define does not use =, nor is the line terminated with ;. Hopefully, I can edit that still. The above format is correct. To be clear on the quotes - double quotes for string literals, single quotes for characters. So if you wanted to define a constant for gear toggle as keyboard g, you would use... define gear_toggle 'g'But for a string, you would use... define my_color "red"
Recommended Posts