Example #1
0
int
code_to_int(char *s) {
  char a, b, c, d;

  if (isdigit(*s))
    return atoi(s);

  if (!isalpha(*s))
    return 0;

  switch (strlen(s)) {
  case 3:
    if (isalpha(*(s + 1)) && isdigit(*(s + 2))) {       /* CCN */
      a = tolower(*s) - 'a';
      b = tolower(*(s + 1)) - 'a';
      c = *(s + 2) - '0';

      return a * 260 + b * 10 + c + 50000;
    }

    if (isdigit(*(s + 1)) && isdigit(*(s + 2))) {       /* CNN */
      a = letter_val(tolower(*s), letters2);
      b = *(s + 1) - '0';
      c = *(s + 2) - '0';

      return a * 100 + b * 10 + c + 56760;
    }

    return 0;

  case 4:                      /* CCNN */
    if (isalpha(*(s + 1)) && isdigit(*(s + 2)) && isdigit(*(s + 3))) {
      a = letter_val(tolower(*s), letters2);
      b = letter_val(tolower(*(s + 1)), letters2);
      c = *(s + 2) - '0';
      d = *(s + 3) - '0';


      return a * 2000 + b * 100 + c * 10 + d + 10000;
    }

    if (isdigit(*(s + 1)) && isdigit(*(s + 2)) && isdigit(*(s + 3))) {
      a = letter_val(tolower(*s), letters2);
      b = *(s + 1) - '0';
      c = *(s + 2) - '0';
      d = *(s + 3) - '0';


      return a * 1000 + b * 100 + c * 10 + d + 59000;
    }
    return 0;

  default:
    return 0;
  }
}
Example #2
0
static int xlsx_cell_get_coordinates (const char *s, 
				      int *row, 
				      int *col)
{
    char colref[8];
    int i, k, v;
    int err = 0;

    for (i=0; i<7; i++) {
	if (isalpha(s[i])) {
	    colref[i] = s[i];
	} else {
	    break;
	}
    }

    colref[i] = '\0';

    *row = atoi(s + i--);
    *col = 0;

    k = 1;
    while (i >= 0 && !err) {
	v = letter_val(colref[i]);
	if (v == 0) {
	    err = E_DATA;
	} else {
	    *col += k * v;
	    k *= 26;
	}
	i--;
    }
	
    return err;
}