コード例 #1
0
int main()
{
    void *i =
#define CALL i = 0, func(&i)
        create_macro();
#undef CALL

    void *j =
#define CALL j = 0, func(&j)
        create_macro(&i);
#undef CALL
    
    void *k =
#define CALL k = 0, func(&k)
        create_macro() + 0x42;

    void *l = (l = 0, func(&l), l) + 0x42;

    //string _var(tmp)(new(string));
    //string _var(tmp)();
    ///////////////////////////////
    //string _var(tmp) + new(string);
    //string _var(tmp);
    
}
コード例 #2
0
ファイル: state.c プロジェクト: UraKn0x/gbdk
int add_macros( pmtoken current_token, pmmacro first_macro )
{
   pmmacro current_macro, scan_macro;

	current_macro = first_macro;

      while (current_token) {
            if (current_token->state == SLABEL_OR_MACRO) {
               if (current_token->next->state == SMACRO) {
                  /* We have a new macro ! */
						if (strcmp(current_token->next->text, "MACRO")) {
								record_error("malformed macro line");
						}
						else { 
							/* Add current_token to macro list */
							current_macro = create_macro( current_token, current_macro );
						}
               }
            }
         current_token = current_token->next;
      }
}
コード例 #3
0
ファイル: macros.c プロジェクト: Lopo/Lotos
/* Get user's macros */
void get_macros(UR_OBJECT user)
{
	FILE *fp;
	int l_len=(MC_NAME_LEN+MC_COM_LEN+2);
	MC_OBJECT mc;
	char fname[FNAME_LEN], line[ARR_SIZE*2];

	set_crash();
#ifdef NETLINKS
	if (user->type==REMOTE_TYPE) return;
#endif
	sprintf(fname,"%s/%s.MAC",USERMACROS,user->name);

	if ((fp=fopen(fname, "r"))==NULL) return;
	fgets(line, l_len, fp);
	
	while (!feof(fp)) {
		line[strlen(line)-1]='\0';
		if ((mc=create_macro())==NULL) {
			fclose(fp);
			return;
			}
		if (user->first_macro==NULL) {
			user->first_macro=mc;
			mc->prev=NULL;
			}
		else {
			user->last_macro->next=mc;
			mc->prev=user->last_macro;
			}
		mc->next=NULL;
		user->last_macro=mc;

		sscanf(line, "%s ", mc->name);
		strcpy(mc->comstr, remove_first(line));
		fgets(line, l_len, fp);
		}
	fclose(fp);
}
コード例 #4
0
ファイル: MACRO.C プロジェクト: AnimatorPro/Animator-Pro
void qrealtime_macro(void)
{
	create_macro(macro_name,TRUE);
}
コード例 #5
0
ファイル: MACRO.C プロジェクト: AnimatorPro/Animator-Pro
void qstart_macro(void)
{
	create_macro(macro_name,FALSE);
}
コード例 #6
0
ファイル: macros.c プロジェクト: Lopo/Lotos
/*** Manipulacia s makrami ***/
void macros(UR_OBJECT user, char *inpstr)
{
	MC_OBJECT mc;
	char *p, *n, *c;
	int i;

	set_crash();
#ifdef NETLINKS
	if (user->type==REMOTE_TYPE) {
		write_user(user,"Due to software limitations, remote users cannot have macros.\n");
		return;
		}
#endif
	if (word_count<2) {
		show_macros(user);
		return;
		}

	p=inpstr;
	i=0;
	while (*p!='=' && *p) {
		if (!isalpha(*p)) {
			if (i!=0 || (i==0 && *p!='.')) {
				vwrite_user(user, "V nazve mozes mat len pismena ! - %c\n", *p);
				return;
				}
			}
		p++;
		i++;
		}
	if (*p!='=') {
		write_user(user, "Pozri si radsej najprv help ...\n");
		return;
		}
	c=(p+1);
	if (strlen(c)>MC_COM_LEN) {
		write_user(user, "Pridlhe rozvinutie makra\n");
		return;
		}
	if (i>MC_NAME_LEN) {
		write_user(user, "Pridlhy nazov makra\n");
		return;
		}
	if (c[0]=='\0') {
		for (mc=user->first_macro; mc!=NULL; mc=mc->next) {
			if (!strncmp(mc->name, word[1], i)) {
				delete_macro(user, mc);
				write_user(user, "Makro bolo vymazane\n");
				save_macros(user);
				return;
				}
			}
		write_user(user, "Nezadane rozvinutie makra !\n");
		return;
		}
	if ((n=(char *)malloc(MC_NAME_LEN+1))==NULL) {
		write_syslog(ERRLOG, 1, "chyba alokacie pamate v macros()\n");
		write_user(user, "~FRSYSTEM: chyba alokacie pamate\n");
		return;
		}

	strncpy(n, word[1], i);
	n[i]='\0';
	for (mc=user->first_macro; mc!=NULL; mc=mc->next) {
		if (!strcmp(mc->name, n)) break;
		}
	if (mc!=NULL) {
		strcpy(mc->comstr, c);
		write_user(user, "Makro bolo zmenene\n");
		save_macros(user);
		free(n);
		return;
		}
	if ((mc=create_macro())==NULL) {
		write_syslog(ERRLOG, 1, "chyba alokacie pamate v macros()\n");
		write_user(user, "~FRSYSTEM: ~RSchyba alokacie pamate\n");
		free(n);
		return;
		}
	strcpy(mc->name, n);
	strcpy(mc->comstr, c);
	if (user->first_macro==NULL) {
		user->first_macro=mc;
		mc->prev=NULL;
		}
	else {
		user->last_macro->next=mc;
		mc->prev=user->last_macro;
		}
	mc->next=NULL;
	user->last_macro=mc;
	save_macros(user);
	write_user(user, "Makro bolo pridane\n");
	free(n);
}