Exemplo n.º 1
0
int
main()
{
	int	value;
	Trans	*transaction;

	/*
	** Establish the point at which we want to resume execution
	** after a call to longjmp.
	*/
	value = setjmp( restart );

	/*
	** Figure out what to do after a return from setjmp.
	*/
	switch( value ){
	default:
		/*
		** longjmp was called -- fatal error
		*/
		fputs( "Fatal error.\n", stderr );
		break;

	case 1:
		/*
		** longjmp was called -- minor error
		*/
		fputs( "Invalid transaction.\n", stderr );
		/* FALL THROUGH and continue processing */

	case 0:
		/*
		** Original return from setjmp: perform normal
		** processing.
		*/
		while( (transaction = get_trans()) != NULL )
			process_trans( transaction );

	}

	/*
	** Save data and exit the program
	*/
	write_data_to_file();

	return value == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
int main()
{
  int value;
  Trans *transaction;
  value = setjmp(restart);
   
  switch(setjmp(restart)){
    default:
      fputs("fatal error.\n", stderr);
      break;
    case 1:
    fputs("Invalid transaction.\n", stderr);
    
    case 0:
      while((transaction = geet_trans()) != NULL ){
        process_trans(transaction);
      }
  }
  
  write_data_to_file();
  return value ==0 ? EXIT_SUCCESS:EXIT_FAILURE;
}
Exemplo n.º 3
0
void
read_qif (char *filename)
{
	FILE *f;
	char buf[1000];
	char *p;
	int month, mday, year;
	struct trans *trans;
	char obuf[1000];

	if ((f = fopen (filename, "r")) == NULL)
		fatal ("can't open %s\n", filename);

	if (fgets (buf, sizeof buf, f) == NULL)
		fatal ("unexpected EOF\n");
	trim (buf);

	if (sscanf (buf, "!Type:%s", acct_id) != 1)
		fatal ("%d: invalid QIF: %s\n", linenum, buf);

	linenum = 0;
	trans = NULL;

	trans_list = NULL;
	trans_list_tailp = &trans_list;

	while (1) {
		if (fgets (buf, sizeof buf, f) == NULL)
			break;
		linenum++;

		if (trans == NULL) {
			trans = make_trans ();
			trans->input_seq = ntrans;
		}

		p = trim (buf);
		switch (*p) {
		case 0:
			break;

		case '^':
			*trans_list_tailp = trans;
			trans_list_tailp = &trans->next;
			ntrans++;
			trans = NULL;
			break;
		case 'D':
			if (sscanf (buf, "D%d/%d/%d",
				    &month, &mday, &year) != 3) {
				fatal ("%d: invalid date: %s\n", linenum, buf);
			}

			if (year < 1900)
				fatal ("%d: invalid year %s\n", linenum, buf);
			
			sprintf (obuf, "%04d-%02d-%02d 12:00:00",
				 year, month, mday);
			trans->posted = xstrdup (obuf);
			break;
		case 'T':
			trans->amount = parse_number (buf + 1);
			break;
		case 'N': // check number
			trans->ref = xstrdup (buf + 1);
			break;
		case 'P': // payee
			trans->name = xstrdup (buf + 1);
			break;
		case 'M': // memo
			trans->memo = xstrdup (buf + 1);
			break;
		default:
			fatal ("%d: unknown opcode: %s\n", linenum, buf);
			break;
		}
	}

	process_trans ();
}