Esempio n. 1
0
int main(int argc, char **argv){
	if(argc == 1){
		int i;
		array = malloc(sizeof(double)*X*Y);
		if(array == NULL){
			printf("failed : malloc() -- exit.\n");
			exit(0);
		}
		*array = malloc(sizeof(double *)*Y);
		if(*array == NULL){
			printf("failed : malloc() -- exit.\n");
			exit(0);
		}
		for(i=0;i<Y;i++){
			array[i] = *array+i*X;
		}
		array[3][9] = 9;
		//printf("%d\n",array[3][9]);
		read_to_array_from_stdin();
	}else if(argc == 2){	//for test
		print_def();
		exit(0);
	}else if(argc == 3){
		sscanf(argv[1],"%d",&wid);
		sscanf(argv[2],"%d",&hei);
		print_head(wid*init_x_scale, hei*init_y_scale);
		print_def();
		print_offset(init_x_scale,init_y_scale,-1,0);
		print_next_from_stdin();
		print_tail();
		exit(0);
	}
}
Esempio n. 2
0
/* my_tail: program that outputs last n lines 
	of input */
int main(int argc, char *argv[])
{

	int i, c, nb, nc;
	int end_lines = 0; /* number of lines to print from end of input */
	int read_start;

	char *arg_str;
	char *lineptr[MAXLINES];

	end_lines = DEFAULT;

	while (--argc > 0 && ((c = (*++argv)[0]) == '-'))
		switch(c) {
			case '-': /* col_start */
				arg_str = ++argv[0];
					
				end_lines = atoi(arg_str);
				break;
			default:
				printf("tail: illegal option %c\n", c);
				argc = ERROR;
				break;
		}

		if (end_lines >= MAXLINES) {
			printf("ERROR: REQUESTED TAIL TOO LARGE\n");
			return -1;
		}
		else {
			read_start = get_input(lineptr, end_lines);
			print_tail(lineptr, read_start, end_lines);	
		}
		return 0;
}
Esempio n. 3
0
int main(int argc, char **argv){
	if(argc == 3){
		sscanf(argv[1],"%d",&wid);
		sscanf(argv[2],"%d",&hei);
		print_head(wid*init_x_scale, hei*init_y_scale);
		print_def();
		print_offset(init_x_scale,init_y_scale,-1,hei-1);
		print_next_from_stdin();
		print_tail();
		exit(0);
	}
	return(0);
}
Esempio n. 4
0
int main(int argc, char **argv)
{
  print_head();
  print_constant_int("UM_KERN_PAGE_SIZE", PAGE_SIZE);
  print_constant_str("UM_KERN_EMERG", KERN_EMERG);
  print_constant_str("UM_KERN_ALERT", KERN_ALERT);
  print_constant_str("UM_KERN_CRIT", KERN_CRIT);
  print_constant_str("UM_KERN_ERR", KERN_ERR);
  print_constant_str("UM_KERN_WARNING", KERN_WARNING);
  print_constant_str("UM_KERN_NOTICE", KERN_NOTICE);
  print_constant_str("UM_KERN_INFO", KERN_INFO);
  print_constant_str("UM_KERN_DEBUG", KERN_DEBUG);
  print_tail();
  return(0);
}
Esempio n. 5
0
static void cdash_show_pass(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) {
    double exectime;
    CDashMemo *memo;
    const char *name = get_current_from_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb);
    (void)message;
    (void)arguments;
    memo = (CDashMemo *)reporter->memo;

    memo->testfinished = cdash_current_time(NULL);
    exectime = cdash_elapsed_time(memo->teststarted, memo->testfinished);

    print_test_header(memo, "passed", name, file, line);
    print_results_header(memo, name, exectime);
    print_measurement(memo, "");
    print_tail(memo);
}
Esempio n. 6
0
static void show_incomplete(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) {
    const char *name;
    char buffer[1000];
    float exectime;
    CDashMemo *memo;

    memo = (CDashMemo *)reporter->memo;

    memo->testfinished = cdash_current_time(NULL);

    exectime = (float)cdash_elapsed_time(memo->teststarted, memo->testfinished);

    name = get_current_from_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb);

    print_test_header(memo, "incomplete", name, file, line);
    print_results_header(memo, name, exectime);
   
    vsprintf(buffer, (message == NULL ? "Problem" : message), arguments);
    print_measurement(memo, buffer);

    print_tail(memo);
}
Esempio n. 7
0
/*
 * print mode, print data from tsar.data
 */
void
running_print()
{
    int    print_num = 1, re_p_hdr = 0;
    char   line[LEN_10240] = {0};
    char   filename[LEN_128] = {0};
    long   n_record = 0, s_time;
    FILE  *fp;

    fp = init_running_print();//初始化,找到数据在哪个文件的什么部位。打印头部信息等。

    /* skip first record */
    if (collect_record_stat() == 0) {
        do_debug(LOG_INFO, "collect_record_stat warn\n");
    }
    while (1) {
        if (!fgets(line, LEN_10240, fp)) {
            if (conf.print_file_number <= 0) {
                break;

            } else {//得读取下一个文件了。
                conf.print_file_number = conf.print_file_number - 1;
                memset(filename, 0, sizeof(filename));
                if (conf.print_file_number == 0) {
                    sprintf(filename, "%s", conf.output_file_path);

                } else {
                    sprintf(filename, "%s.%d", conf.output_file_path, conf.print_file_number);
                }
                if (fclose(fp) < 0) {
                    do_debug(LOG_FATAL, "fclose error:%s", strerror(errno));
                }
                fp = fopen(filename, "r");
                if (!fp) {
                    do_debug(LOG_FATAL, "unable to open the log file %s.\n", filename);
                }
                continue;
            }
        }

        int    k = check_time(line);
        if (k == 1) {
            continue;
        }
        if (k == 3) {
            break;
        }

        /* collect data then set mod->summary */
        read_line_to_module_record(line);

        if (!(print_num % DEFAULT_PRINT_NUM) || re_p_hdr) {
            /* get the header will print every DEFAULT_PRINT_NUM */
            print_header();
            re_p_hdr = 0;
            print_num = 1;
        }

        /* exclued the two record have same time */
        if (!(s_time = set_record_time(line))) {
            continue;
        }

        /* reprint header because of n_item's modifing */
        if (!collect_record_stat()) {
            re_p_hdr = 1;
            continue;
        }

        print_record_time(s_time);
        print_record();
        n_record++;
        print_num++;
        memset(line, 0, sizeof(line));
    }

    if (n_record) {
        printf("\n");
        print_tail(TAIL_MAX);
        print_tail(TAIL_MEAN);
        print_tail(TAIL_MIN);
    }

    if (fclose(fp) < 0) {
        do_debug(LOG_FATAL, "fclose error:%s", strerror(errno));
    }
    fp = NULL;
}
Esempio n. 8
0
/* Print the top of the C file */
void print_head ()
{
  fprintf (bfout, "#include <stdio.h>\n");
  fprintf (bfout, "#include <stdlib.h>\n");
  fprintf (bfout, "#include <string.h>\n");
  if (dump_core)
    fprintf (bfout, "#include <signal.h>\n");
  if (bfbignum)
    fprintf (bfout, "#include <gmp.h>\n");
  if (bfthreads)
    fprintf (bfout, "#include <pthread.h>\n");
  fprintf (bfout, "\n");

  /* Type define */
  fprintf (bfout, "#define BFTYPE %s\n\n", bfstr_type);

  /* Thread struct */
  if (bfthreads)
    {
      fprintf (bfout, "typedef struct BFTYPE {\n");
      fprintf (bfout, "  %s val;\n", bfstr_htype);
      fprintf (bfout, "  pthread_mutex_t lock;\n");
      fprintf (bfout, "} BFTYPE;\n\n");
      fprintf (bfout, "BFTYPE *hptr[%d]; /* Thread pointers */\n\n",
	       bfthreads);
    }

  /* resize prototype */
  if (dynamic_mem)
    fprintf (bfout, "void bf_buffinc (BFTYPE **ptr);\n\n");

  /* Main memory */
  char *bfinit = " = { 0 }";
  if (bfbignum)
    bfinit = "";
  if (dynamic_mem)
    fprintf (bfout, "BFTYPE *%s;\n\n", bfstr_buffer);
  else
    fprintf (bfout, "BFTYPE %s[%d]%s;\n\n", bfstr_buffer, mem_size, bfinit);
  if (bfthreads && dynamic_mem)
    fprintf (bfout, "pthread_mutex_t mem_lock;\n\n");

  /* Track buffer size */
  if (dynamic_mem || check_bounds || dump_core)
    fprintf (bfout, "int %s = %d; /* Buffer size */\n\n",
	     bfstr_bsize, mem_size);

  /* bignum init */
  if (bfbignum)
    {
      char *thread_str;
      if (bfthreads)
	thread_str = ".val";
      else
	thread_str = "";
      fprintf (bfout, "/* Initialize bignum values */\n");
      fprintf (bfout, "void bignum_init (BFTYPE *buff, int n) {\n");
      fprintf (bfout, "  int i;\n");
      fprintf (bfout, "  for (i = 0; i < n; i++)\n");
      fprintf (bfout, "    mpz_init (buff[i]%s);\n", thread_str);
      fprintf (bfout, "}\n\n");
    }

  /* mutex */
  if (bfthreads)
    {
      /* init */
      fprintf (bfout, "/* Initialize mutex locks */\n");
      fprintf (bfout, "void mutex_init (BFTYPE *buff, int n) {\n");
      fprintf (bfout, "  int i;\n");
      fprintf (bfout, "  for (i = 0; i < n; i++) {\n");
      fprintf (bfout, "    pthread_mutex_init (&buff[i].lock, NULL);\n");
      if (bfbignum)
	fprintf (bfout, "    mpz_init (buff[i].val);\n");
      else
	fprintf (bfout, "    buff[i].val = 0;\n");
      fprintf (bfout, "  }\n");
      fprintf (bfout, "}\n\n");

      /* inc */
      fprintf (bfout, "void cell_inc (int i, int n) {\n");
      if (dynamic_mem)
	{
	  fprintf (bfout, "  pthread_mutex_lock (&mem_lock);\n");
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	}
      else
	{
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	  fprintf (bfout, "  pthread_mutex_lock (&ptr->lock);\n");
	}
      if (bfbignum)
	{
	  fprintf (bfout, "  mpz_add_ui (ptr->val, ptr->val, n);\n");
	}
      else
	{
	  fprintf (bfout, "  ptr->val += n;\n");
	}
      if (dynamic_mem)
	fprintf (bfout, "  pthread_mutex_unlock (&mem_lock);\n");
      else
	fprintf (bfout, "  pthread_mutex_unlock (&ptr->lock);\n");
      fprintf (bfout, "}\n\n");

      /* dec */
      fprintf (bfout, "void cell_dec (int i, int n) {\n");
      if (dynamic_mem)
	{
	  fprintf (bfout, "  pthread_mutex_lock (&mem_lock);\n");
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	}
      else
	{
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	  fprintf (bfout, "  pthread_mutex_lock (&ptr->lock);\n");
	}
      if (bfbignum)
	{
	  fprintf (bfout, "  mpz_sub_ui (ptr->val, ptr->val, n);\n");
	}
      else
	{
	  fprintf (bfout, "  ptr->val -= n;\n");
	}
      if (dynamic_mem)
	fprintf (bfout, "  pthread_mutex_unlock (&mem_lock);\n");
      else
	fprintf (bfout, "  pthread_mutex_unlock (&ptr->lock);\n");
      fprintf (bfout, "}\n\n");

      /* get conditional */
      fprintf (bfout, "int cell_cond (int i) {\n");
      if (dynamic_mem)
	{
	  fprintf (bfout, "  pthread_mutex_lock (&mem_lock);\n");
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	}
      else
	{
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	  fprintf (bfout, "  pthread_mutex_lock (&ptr->lock);\n");
	}
      if (bfbignum)
	{
	  fprintf (bfout, "  int out = !mpz_fits_sint_p (ptr->val) ||"
		   " mpz_get_ui (ptr->val) != 0;\n");
	}
      else
	{
	  fprintf (bfout, "  int out = ptr->val;\n");
	}
      if (dynamic_mem)
	fprintf (bfout, "  pthread_mutex_unlock (&mem_lock);\n");
      else
	fprintf (bfout, "  pthread_mutex_unlock (&ptr->lock);\n");
      fprintf (bfout, "  return out;\n");
      fprintf (bfout, "}\n\n");

      /* get */
      fprintf (bfout, "char cell_get (int i) {\n");
      if (dynamic_mem)
	{
	  fprintf (bfout, "  pthread_mutex_lock (&mem_lock);\n");
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	}
      else
	{
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	  fprintf (bfout, "  pthread_mutex_lock (&ptr->lock);\n");
	}
      if (bfbignum)
	fprintf (bfout, "  char out = (char) mpz_get_ui (ptr->val);\n");
      else
	fprintf (bfout, "  char out = (char) ptr->val;\n");
      if (dynamic_mem)
	fprintf (bfout, "  pthread_mutex_unlock (&mem_lock);\n");
      else
	fprintf (bfout, "  pthread_mutex_unlock (&ptr->lock);\n");
      fprintf (bfout, "  return out;\n");
      fprintf (bfout, "}\n\n");

      /* set */
      fprintf (bfout, "void cell_set (int i, char in) {\n");
      if (dynamic_mem)
	{
	  fprintf (bfout, "  pthread_mutex_lock (&mem_lock);\n");
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	}
      else
	{
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	  fprintf (bfout, "  pthread_mutex_lock (&ptr->lock);\n");
	}
      if (bfbignum)
	fprintf (bfout, "  mpz_set_ui "
		 "(ptr->val, (unsigned long int) in);\n");
      else
	fprintf (bfout, "  ptr->val = in;\n");
      if (dynamic_mem)
	fprintf (bfout, "  pthread_mutex_unlock (&mem_lock);\n");
      else
	fprintf (bfout, "  pthread_mutex_unlock (&ptr->lock);\n");
      fprintf (bfout, "}\n\n");

      /* move */
      fprintf (bfout, "void cell_move (int i, int m) {\n");
      if (dynamic_mem)
	{
	  fprintf (bfout, "  pthread_mutex_lock (&mem_lock);\n");
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	}
      else
	{
	  fprintf (bfout, "  BFTYPE *ptr = hptr[i];\n");
	  fprintf (bfout, "  pthread_mutex_lock (&ptr->lock);\n");
	}
      fprintf (bfout, "  hptr[i] += m;\n");
      fprintf (bfout, "  int oob = hptr[i] - %s >= %s;\n",
	       bfstr_buffer, bfstr_bsize);
      if (dynamic_mem)
	fprintf (bfout, "  pthread_mutex_unlock (&mem_lock);\n");
      else
	fprintf (bfout, "  pthread_mutex_unlock (&ptr->lock);\n");
      fprintf (bfout, "  if (oob)\n");
      fprintf (bfout, "    bf_buffinc (&%s);\n", bfstr_ptr);
      fprintf (bfout, "}\n\n");

    }

  /* Thread function prototypes */
  if (bfthreads)
    {
      fprintf (bfout, "/* Thread functions */\n");
      int i;
      for (i = 0; i < bfthreads; i++)
	fprintf (bfout, "void *bf%d (void *);\n", i);
      fprintf (bfout, "\n");
    }

  /* core dumps */
  if (dump_core)
    {
      char *thread_str;
      if (bfthreads)
	thread_str = ".val";
      else
	thread_str = "";

      fprintf (bfout, "/* Dump the memory core */\n");
      fprintf (bfout, "void dump_core (BFTYPE *buff, int n) {\n");
      fprintf (bfout, "  FILE *fp = fopen (\"bf-core\", \"w\");\n");
      fprintf (bfout, "  if (fp == NULL)\n");
      fprintf (bfout, "    return;\n\n");
      fprintf (bfout, "  int i;\n");
      if (bfbignum)
	{
	  fprintf (bfout, "  char *numstr;\n");
	  fprintf (bfout, "  for (i = 0; i < n; i++) {\n");
	  fprintf (bfout, "    numstr = mpz_get_str(NULL, 10, buff[i]%s);\n",
		   thread_str);
	  fprintf (bfout, "    fprintf (fp, \"%%s\\n\", numstr);\n");
	  fprintf (bfout, "    free (numstr);\n");
	  fprintf (bfout, "  }\n");
	}
      else
	{
	  fprintf (bfout, "  for (i = 0; i < n; i++)\n");
	  fprintf (bfout,
		   "    fprintf (fp, \"%%d\\n\", (int) buff[i]%s);\n\n",
		   thread_str);
	}
      fprintf (bfout, "  fclose (fp);");
      fprintf (bfout, "}\n\n");

      /* Signal handler */
      fprintf (bfout, "void int_handle (int sig) {\n");
      fprintf (bfout, "  dump_core (%s, %s);\n", bfstr_buffer, bfstr_bsize);
      fprintf (bfout, "  exit (EXIT_SUCCESS);");
      fprintf (bfout, "}\n\n");
    }

  if (dynamic_mem)
    {
      /* Print memory resize function */
      fprintf (bfout, "/* Resize memory */\n");
      fprintf (bfout, "void bf_buffinc (BFTYPE **ptr) {\n");
      if (bfthreads)
	{
	  fprintf (bfout, "  pthread_mutex_lock (&mem_lock);\n");
	  fprintf (bfout, "  int offsets[%d];\n", bfthreads);
	  int i;
	  for (i = 0; i < bfthreads; i++)
	    fprintf (bfout, "  offsets[%d] = hptr[%d] - %s;\n",
		     i, i, bfstr_buffer);
	}
      fprintf (bfout, "  int offset = *ptr - %s;\n\n", bfstr_buffer);
      fprintf (bfout, "  int old_bsize = %s;\n", bfstr_bsize);
      fprintf (bfout, "  %s *= %d;\n", bfstr_bsize, mem_grow_rate);
      fprintf (bfout, "  if (offset > %s)\n", bfstr_bsize);
      fprintf (bfout, "    %s = offset;\n\n", bfstr_bsize);

      fprintf (bfout, "  %s = (BFTYPE *) realloc ((void *) %s, "
	       "%s * sizeof (BFTYPE));\n",
	       bfstr_buffer, bfstr_buffer, bfstr_bsize);
      fprintf (bfout, "  if (!%s) {\n", bfstr_buffer);
      fprintf (bfout, "    fprintf (stderr, \"%s:%d:%s\\n\");\n",
	       bfstr_name, lineno, bfstr_memerr);
      fprintf (bfout, "    abort ();\n  }\n\n");

      /* clear */
      if (bfbignum && !bfthreads)
	{
	  fprintf (bfout, "  bignum_init ((%s + old_bsize), "
		   "%s - old_bsize);\n", bfstr_buffer, bfstr_bsize);
	  fprintf (bfout, "  *ptr = %s + offset;\n", bfstr_buffer);
	}
      else if (bfthreads)
	{
	  fprintf (bfout, "  mutex_init ((%s + old_bsize), "
		   "%s - old_bsize);\n", bfstr_buffer, bfstr_bsize);
	  int i;
	  for (i = 0; i < bfthreads; i++)
	    fprintf (bfout, "  hptr[%d] = %s + offsets[%d];\n",
		     i, bfstr_buffer, i);
	  fprintf (bfout, "  pthread_mutex_unlock (&mem_lock);\n");
	}
      else
	{
	  fprintf (bfout, "  memset ((%s + old_bsize), 0, "
		   "(%s - old_bsize) * sizeof (BFTYPE));\n",
		   bfstr_buffer, bfstr_bsize);
	  fprintf (bfout, "  *ptr = %s + offset;\n", bfstr_buffer);
	}
      fprintf (bfout, "}\n\n");

      /* main */
      fprintf (bfout, "int main () {\n");
      fprintf (bfout, "  %s = calloc (%s * sizeof (BFTYPE), 1);\n\n",
	       bfstr_buffer, bfstr_bsize);
      if (!bfthreads)
	fprintf (bfout, "  BFTYPE *%s = %s;\n\n", bfstr_ptr, bfstr_buffer);
    }
  else
    {
      /* main */
      fprintf (bfout, "int main () {\n");
      if (!bfthreads)
	fprintf (bfout, "  BFTYPE *%s = %s;\n\n", bfstr_ptr, bfstr_buffer);
    }

  if (bfbignum && !bfthreads)
    {
      fprintf (bfout, "  bignum_init (%s, %d);\n\n", bfstr_buffer, mem_size);
    }

  if (dump_core)
    fprintf (bfout, "  signal (SIGINT, int_handle);\n\n");

  /* Spawn threads. */
  if (bfthreads)
    {
      if (dynamic_mem)
	fprintf (bfout, "  pthread_mutex_init (&mem_lock, NULL);\n");
      else
	fprintf (bfout, "  mutex_init (%s, %d);\n\n", bfstr_buffer, mem_size);

      /* Initialize pointers */
      int i;
      for (i = 0; i < bfthreads; i++)
	fprintf (bfout, "  hptr[%d] = %s;\n", i, bfstr_buffer);
      fprintf (bfout, "\n");


      /* Create */
      fprintf (bfout, "  pthread_t bfthread[%d];\n", bfthreads);
      for (i = 0; i < bfthreads; i++)
	fprintf (bfout, "  pthread_create "
		 "(&bfthread[%d], NULL, bf%d, NULL);\n", i, i);
      fprintf (bfout, "\n");

      /* Join */
      for (i = 0; i < bfthreads; i++)
	fprintf (bfout, "  pthread_join " "(bfthread[%d], NULL);\n", i);
      fprintf (bfout, "\n");

      print_tail ();
      fprintf (bfout, "\n");
    }
}
Esempio n. 9
0
void pay(struct set_t *store, struct sales_promotion *promotions, struct set_t *shopping)
{
	struct set_t *pomo_set;  //购物车中的促销商品
	struct set_t* double_pomo_set;  //购物车中同时享受两种优惠的商品
	struct set_t *temp1, *temp2;  //临时变量
	struct set_t *pure_goods;  //购物车中不享受优惠的商品
	struct promotion_one_info *pomo_info; //促销活动
	enum promotion_category pomo_priority; //如果商品享受两种优惠,应该优先使用哪种
	float cost_save;  //优惠节约金额
	float expenditure; //消费总计
	struct free_one_list *free_list; //赠送的商品

	cost_save = expenditure = 0; 
	pomo_info = promotions->promotion_all_info;//指向优惠活动的头指针
	pomo_priority = promotions->priority;
	free_list = NULL;
	
	double_pomo_set = shopping;
	pure_goods = shopping;
	while(pomo_info) {  //循环遍历每种活动
		//先计算享受两种优惠的商品
		temp1 = double_pomo_set; 
		double_pomo_set	= set_inter(double_pomo_set, pomo_info->sales_set);
		
		if (temp1 != shopping) {
			set_free(&temp1);
		}/*释放set_inter生成的临时的set*/

		//计算没有优惠的商品
		temp2 = pure_goods;
		pure_goods = set_minus(pure_goods, pomo_info->sales_set);
		if(temp2 != shopping) {
			set_free(&temp2);
		}/*释放set_minus生成的临时的set*/

		pomo_info = pomo_info->next_promotion;
	}/*while*/
	
	//打印小票头信息
	print_title();
	//计算没有优惠
	settle_product(store, pure_goods, &cost_save, &expenditure);
	//计算二重优惠
	settle_double_promotion(store, pomo_priority, double_pomo_set, &cost_save, &expenditure);

	//计算一种优惠的商品,并结算
	for (pomo_info = promotions->promotion_all_info;\
		pomo_info; pomo_info = pomo_info->next_promotion){
		           
			switch (pomo_info->type) {
					
			case DISCOUNT: //95折扣
				temp1 = set_inter(pomo_info->sales_set,shopping);
				settle_discount(store, temp1, double_pomo_set, &cost_save, &expenditure);
				if(temp1)
					set_free(&temp1);
				 break;

			case FREE_ONE: //买二送一
                                temp1 = set_inter(pomo_info->sales_set,shopping);
				settle_free_one(store, temp1, double_pomo_set, &cost_save, &expenditure);
				if(temp1)
					set_free(&temp1);
				break;
			default:
				assert(!"no this promotion\n");
				break;
			}/*switch*/
	}/*for*/
	
	//赠送商品列表打印
	free_list = put_free_one_list(NULL, 0);
	free_one_print(free_list);
	//小票末尾信息打印
	print_tail(cost_save, expenditure);

}