예제 #1
0
static gchar *
create_serial_barcode (const gchar *serial)
{
  gchar *savefile;
  const gchar *cache_dir;
  struct zint_symbol *barcode;

  cache_dir = g_get_user_cache_dir ();

  /* Create the directory if it's missing */
  g_mkdir_with_parents (cache_dir, 0755);

  savefile = g_build_filename (cache_dir, "product_serial.png", NULL);

  barcode = ZBarcode_Create();
  strncpy ((char *) barcode->outfile, savefile, 4096);
  if (ZBarcode_Encode_and_Print (barcode, (guchar *) serial, 0, 0)) {
    g_warning ("Error while generating barcode: %s", barcode->errtxt);
  }
  ZBarcode_Delete (barcode);

  return savefile;
}
예제 #2
0
파일: main.c 프로젝트: nitin-nizhawan/zint
int batch_process(struct zint_symbol *symbol, char *filename)
{
	FILE *file;
	unsigned char buffer[7100];
	unsigned char character;
	int posn = 0, error_number = 0, line_count = 1;
	char output_file[127];
	char number[12], reverse_number[12];
	int inpos, local_line_count;
	char format_string[127], reversed_string[127], format_char;
	int format_len, i;
	char adjusted[2];
	
	memset(buffer, 0, sizeof(unsigned char) * 7100);
	if(symbol->outfile[0] == '\0') {
		strcpy(format_string, "~~~~~.png");
	} else {
		if(strlen(format_string) < 127) {
			strcpy(format_string, symbol->outfile);
		} else {
			strcpy(symbol->errtxt, "Format string too long");
			return ZERROR_INVALID_DATA;
		}
	}
	memset(adjusted, 0, sizeof(char) * 2);
	
	if(!strcmp(filename, "-")) {
		file = stdin;
	} else {
		file = fopen(filename, "rb");
		if (!file) {
			strcpy(symbol->errtxt, "Unable to read input file");
			return ZERROR_INVALID_DATA;
		}
	}
	
	do {
		character = fgetc(file);
		if(character == '\n') {
			if(buffer[posn - 1] == '\r') {
				/* CR+LF - assume Windows formatting and remove CR */
				posn--;
				buffer[posn] = '\0';
			}
			inpos = 0;
			local_line_count = line_count;
			memset(number, 0, sizeof(char) * 12);
			memset(reverse_number, 0, sizeof(char) * 12);
			memset(reversed_string, 0, sizeof(char) * 127);
			memset(output_file, 0, sizeof(char) * 127);
			do {
				number[inpos] = itoc(local_line_count % 10);
				local_line_count /= 10;
				inpos++;
			} while (local_line_count > 0);
			number[inpos] = '\0';
			
			for(i = 0; i < inpos; i++) {
				reverse_number[i] = number[inpos - i - 1];
			}
			
			format_len = strlen(format_string);
			for(i = format_len; i > 0; i--) {
				format_char = format_string[i - 1];
				
				switch(format_char) {
					case '#':
						if (inpos > 0) {
							adjusted[0] = reverse_number[inpos - 1];
							inpos--;
						} else {
							adjusted[0] = ' ';
						}
						break;
					case '~':
						if (inpos > 0) {
							adjusted[0] = reverse_number[inpos - 1];
							inpos--;
						} else {
							adjusted[0] = '0';
						}
						break;
					case '@':
						if (inpos > 0) {
							adjusted[0] = reverse_number[inpos - 1];
							inpos--;
						} else {
							adjusted[0] = '*';
						}
						break;
					default:
						adjusted[0] = format_string[i - 1];
						break;
				}
				concat(reversed_string, adjusted);
			}
			
			for(i = 0; i < format_len; i++) {
				output_file[i] = reversed_string[format_len - i - 1];
			}
			
			strcpy(symbol->outfile, output_file);
			error_number = ZBarcode_Encode_and_Print(symbol, buffer, posn, 0);
			if(error_number != 0) {
				fprintf(stderr, "On line %d: %s\n", line_count, symbol->errtxt);
			}
			ZBarcode_Clear(symbol);
			memset(buffer, 0, sizeof(unsigned char) * 7100);
			posn = 0;
			line_count++;
		} else {
			buffer[posn] = character;
			posn++;
		}
		if(posn > 7090) {
			fprintf(stderr, "On line %d: Input data too long\n", line_count);
			do {
				character = fgetc(file);
			} while((!feof(file)) && (character != '\n'));
		}
	} while ((!feof(file)) && (line_count < 2000000000));
	
	if(character != '\n') {
		fprintf(stderr, "Warning: No newline at end of file\n");
	}
	
	fclose(file);
	return error_number;
}