Skip to content

Commit

Permalink
Issue #1 refactor variables, add variables: $NOCOLOR $MILLISECOND $TI…
Browse files Browse the repository at this point in the history
…MESTAMP
  • Loading branch information
nerevar committed Jul 29, 2012
1 parent 8a61479 commit 54cd56d
Show file tree
Hide file tree
Showing 3 changed files with 221 additions and 100 deletions.
21 changes: 21 additions & 0 deletions sources/ttcoreex/Tintin.h
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,20 @@ void nope_command(char *arg);
void abort_timer_command(char*arg);
void autoreconnect_command(char*arg);

// VARIABLES:
void variable_value_input(char *arg);
void variable_value_date(char *arg);
void variable_value_year(char *arg);
void variable_value_month(char *arg);
void variable_value_day(char *arg);
void variable_value_time(char *arg);
void variable_value_hour(char *arg);
void variable_value_minute(char *arg);
void variable_value_second(char *arg);
void variable_value_millisecond(char *arg);
void variable_value_timestamp(char *arg);
void variable_value_color_default(char *arg);

BOOL show_actions(char* left = NULL, CGROUP* pGroup = NULL);
int do_one_antisub(char *line);
extern int SocketFlags;
Expand Down Expand Up @@ -456,6 +470,13 @@ typedef struct jmc_cmd
//*/en


const JMC_SPECIAL_VARIABLES_NUM = 12;
typedef struct jmc_special_variable_struct {
char *name;
void (*jmcfn)(char*);
} jmc_special_variable;


//vls-begin// bugfix
//#include "cmds.h"
#endif
Expand Down
281 changes: 181 additions & 100 deletions sources/ttcoreex/Variable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@
/*********************************************************************/
#include "stdafx.h"
#include "tintin.h"
#include "variables.h"

extern char *get_arg_in_braces();
extern struct listnode *search_node_with_wild();
extern struct listnode *searchnode_list();

bool is_allowed_symbol(char arg);

/*************************/
/* the #variable command */
/*************************/
Expand Down Expand Up @@ -111,107 +114,76 @@ void unvar_command(char *arg)
/*************************************************************************/
void substitute_myvars(char *arg, char *result)
{
char varname[20];
int nest=0,counter,varlen;

while(*arg) {

if(*arg=='$') { /* substitute variable */
counter=0;
while (*(arg+counter)=='$')
counter++;
varlen=0;
// !!!! ATTENTION I AM NOT SURE ITS RIGHT CHANGE while(isalpha(*(arg+varlen+counter)))
while(isalpha(*(arg+varlen+counter)) || isdigit(*(arg+varlen+counter)))
varlen++;
if (varlen>0)
strncpy(varname,arg+counter,varlen);
*(varname+varlen)='\0';
if (counter==nest+1 && !isdigit(*(arg+counter+1))) {
// check for date/time variable here !
//vls-begin// vars
DWORD dw = 0;
if ( varname[0] == 'D' && !strcmp(varname, "DATE" ) ) dw = 1;
if ( varname[0] == 'Y' && !strcmp(varname, "YEAR" ) ) dw = 2;
if ( varname[0] == 'M' && !strcmp(varname, "MONTH" ) ) dw = 3;
if ( varname[0] == 'D' && !strcmp(varname, "DAY" ) ) dw = 4;
if ( varname[0] == 'T' && !strcmp(varname, "TIME" ) ) dw = 5;
if ( varname[0] == 'H' && !strcmp(varname, "HOUR" ) ) dw = 6;
if ( varname[0] == 'M' && !strcmp(varname, "MINUTE") ) dw = 7;
if ( varname[0] == 'S' && !strcmp(varname, "SECOND") ) dw = 8;
//* en
if ( varname[0] == 'I' && !strcmp(varname, "INPUT" ) ) dw = 9;
//*/en
if (dw > 0)
{
if(dw < 9)
{
SYSTEMTIME st;
char DateString[64];
GetLocalTime(&st);
switch (dw) {
case 1: sprintf(DateString, "%02d-%02d-%d", st.wDay, st.wMonth, st.wYear); break;
case 2: sprintf(DateString, "%d", st.wYear); break;
case 3: sprintf(DateString, "%02d", st.wMonth); break;
case 4: sprintf(DateString, "%02d", st.wDay); break;
case 5: sprintf(DateString, "%02d:%02d:%02d", st.wHour, st.wMinute, st.wSecond); break;
case 6: sprintf(DateString, "%02d", st.wHour); break;
case 7: sprintf(DateString, "%02d", st.wMinute); break;
case 8: sprintf(DateString, "%02d", st.wSecond); break;
//case 9: strcpy(DateString, editStr);break;
default: break;
char varname[20];
int nest=0,counter,varlen;

while(*arg) {

if(*arg=='$') { /* substitute variable */
counter=0;
while (*(arg+counter)=='$')
counter++;
varlen=0;
while (is_allowed_symbol(*(arg+varlen+counter)))
varlen++;
if (varlen>0)
strncpy(varname,arg+counter,varlen);
*(varname+varlen)='\0';
if (counter==nest+1 && !isdigit(*(arg+counter+1))) {
// check for date/time variable here !
char specialVariableValue[BUFFER_SIZE];
specialVariableValue[0] = '\0';
// find special variables
for(int i=0;i<JMC_SPECIAL_VARIABLES_NUM;i++)
if (!strcmp(varname, jmc_vars[i].name)) {
(*(jmc_vars[i].jmcfn))(specialVariableValue);
break;
}

if (strlen(specialVariableValue) > 0) {
// add value of special variable to "result"
strcpy(result, specialVariableValue);
result += strlen(specialVariableValue);

arg+=counter+varlen;
} else {
VAR_INDEX ind = VarList.find(varname);
if( ind != VarList.end() ) {
VAR* pvar = ind->second;
strcpy(result, (char*)pvar->m_strVal.data());
result+=pvar->m_strVal.length();
arg+=counter+varlen;
} else {
strncpy(result,arg,counter+varlen);
result+=varlen+counter;
arg+=varlen+counter;
}
}

strcpy(result, DateString);
result+=strlen(DateString);
}
else
if(dw==9)
{
strcpy(result, editStr);
result+=strlen(editStr);
}
arg+=counter+varlen;

//vls-end//

} else {
VAR_INDEX ind = VarList.find(varname);
if( ind != VarList.end() ) {
VAR* pvar = ind->second;
strcpy(result, (char*)pvar->m_strVal.data());
result+=pvar->m_strVal.length();
arg+=counter+varlen;
} else {
strncpy(result,arg,counter+varlen);
result+=varlen+counter;
arg+=varlen+counter;
}
}
}
else {
strncpy(result,arg,counter+varlen);
result+=varlen+counter;
arg+=varlen+counter;
}
}
else if (*arg==DEFAULT_OPEN) {
nest++;
*result++= *arg++;
}
else if (*arg==DEFAULT_CLOSE) {
nest--;
*result++= *arg++;
}
else if (*arg=='\\' && *(arg+1)=='$' && nest==0) {
arg++;
*result++= *arg++;
}

else
*result++= *arg++;
}
*result='\0';
} else {
strncpy(result,arg,counter+varlen);
result+=varlen+counter;
arg+=varlen+counter;
}
} else if (*arg==DEFAULT_OPEN) {
nest++;
*result++= *arg++;
} else if (*arg==DEFAULT_CLOSE) {
nest--;
*result++= *arg++;
} else if (*arg=='\\' && *(arg+1)=='$' && nest==0) {
arg++;
*result++= *arg++;
} else {
*result++= *arg++;
}
}

*result='\0';
}

/*************************/
Expand Down Expand Up @@ -269,3 +241,112 @@ void toupper_command(char *arg)
}
}
}

/********************************************/
/* check symbol in variable name is allowed */
/********************************************/
bool is_allowed_symbol(char arg)
{
return isalpha(arg) || isdigit(arg);
}


// current user input
void variable_value_input(char *arg)
{
strcpy(arg, editStr);
}

// DATE AND TIME:
void variable_value_date(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%02d-%02d-%d", st.wDay, st.wMonth, st.wYear);
}

void variable_value_year(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%d", st.wYear);
}

void variable_value_month(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%02d", st.wMonth);
}

void variable_value_day(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%02d", st.wDay);
}

void variable_value_time(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%02d:%02d:%02d", st.wHour, st.wMinute, st.wSecond);
}

void variable_value_hour(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%02d", st.wHour);
}

void variable_value_minute(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%02d", st.wMinute);
}

void variable_value_second(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%02d", st.wSecond);
}

void variable_value_millisecond(char *arg)
{
SYSTEMTIME st;
GetLocalTime(&st);

sprintf(arg, "%03d", st.wMilliseconds);
}

void variable_value_timestamp(char *arg)
{
SYSTEMTIME st;
FILETIME ft;
ULARGE_INTEGER ularge;

GetSystemTime(&st);
SystemTimeToFileTime(&st,&ft);

ularge.LowPart = ft.dwLowDateTime;
ularge.HighPart = ft.dwHighDateTime;

// convert filetime to unix timestamp
sprintf(arg, "%I64d", ularge.QuadPart / 10000000 - 11644473600);
}

void variable_value_color_default(char *arg)
{
sprintf(arg, "%s", DEFAULT_END_COLOR);
}
19 changes: 19 additions & 0 deletions sources/ttcoreex/variables.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#ifndef _VARIABLES_H_
#define _VARIABLES_H_
jmc_special_variable jmc_vars[JMC_SPECIAL_VARIABLES_NUM]={
{"DATE",&variable_value_date},
{"YEAR",&variable_value_year},
{"MONTH",&variable_value_month},
{"DAY",&variable_value_day},
{"TIME",&variable_value_time},
{"HOUR",&variable_value_hour},
{"MINUTE",&variable_value_minute},
{"SECOND",&variable_value_second},
{"MILLISECOND",&variable_value_millisecond},
{"TIMESTAMP",&variable_value_timestamp},

{"INPUT",&variable_value_input},

{"NOCOLOR", &variable_value_color_default}
};
#endif

0 comments on commit 54cd56d

Please sign in to comment.