int shell_comp(char *s1, char *s2)
{
  if (*s1 == 0 || *s2 == 0) {
    if ((*s2 == 0 || *s2 == '*') && *s1 == 0) {
      return 1;
    }
    return 0;
  }
  if (*s2 == '*' ) {
    if (*(s2+1) != *s1) {
      return shell_comp(s1+1, s2);
    }
    if (shell_comp(s1, s2+1)){
      return 1;
    } else {
      return shell_comp(s1+1, s2);
    }
  }
  if (*s1 != *s2) 
    return 0;
  return shell_comp(s1+1, s2+1);
}
int main(void)
{
   int r;

  r = shell_comp("main.c", "*.c");
  printf("%d\n", r);
  r = shell_comp("main.c", "m*a*i*n*.*c*");
  printf("%d\n", r);
  r = shell_comp("main.c", "main.c");
  printf("%d\n", r);
  r = shell_comp("main.c", "m*c");
  printf("%d\n", r);
  r = shell_comp("main.c", "ma********************************c");
  printf("%d\n", r);
  r = shell_comp("main.c", "*");
  printf("%d\n", r);
  r = shell_comp("main.c", "***");
  printf("%d\n", r);
  r = shell_comp("main.c", "m.*c");
  printf("%d\n", r);
  r = shell_comp("main.c", "**.*c");
  printf("%d\n", r);
  r = shell_comp("main-main.c", "ma*in.c");
  printf("%d\n", r);
  r = shell_comp("main", "main*d");
  printf("%d\n", r);
  r = shell_comp("abc", "*b");
  printf("%d\n", r);
  r = shell_comp("", "");
  printf("%d\n", r);
  return (0);
}
int main(void)
{
  int r;

  r = shell_comp("main.c", "*.c");
  printf("%d\n", r);
  r = shell_comp("main.c", "m*a*i*n*.*c*");
  printf("%d\n", r);
  r = shell_comp("main.c", "main.c");
  printf("%d\n", r);
  r = shell_comp("main.c", "m*c");
  printf("%d\n", r);
  r = shell_comp("main.c", "ma********************************c");
  printf("%d\n", r);
  r = shell_comp("main.c", "*");
  printf("%d\n", r);
  r = shell_comp("main.c", "***");
  printf("%d\n", r);
  r = shell_comp("main.c", "m.*c");
  printf("%d\n", r);
  r = shell_comp("main.c", "**.*c");
  printf("%d\n", r);
  r = shell_comp("main-main.c", "ma*in.c");
  printf("%d\n", r);
  r = shell_comp("main", "main*d");
  printf("%d\n", r);
  r = shell_comp("iudfhisudfh", "**\0**\0");
  printf("%d\n", r);
  return (0);
}
int main(void)
{
  int r;
  r = shell_comp("a", "a");
  printf("a, a\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("aa", "a");
  printf("aa, a\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("aaa", "a");
  printf("aaa, a\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("a", "aa");
  printf("a, aa\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("ab", "ab");
  printf("ab, ab\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("abc", "*");
  printf("abc, *\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("abc", "****");
  printf("abc, ****\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("ab", "a*");
  printf("ab, a*\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("ab", "*a");
  printf("ab, *a\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("ab", "*c");
  printf("ab, *c\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("ab", "*b");
  printf("ab, *b\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("xyza", "*a");
  printf("xyza, *a\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("main.c", "*m*a*i*n*.*c*");
  printf("main.c, *m*a*i*n*.*c*\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("mainmain", "ma*");
  printf("mainmain, ma*\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("inn", "*n");
  printf("inn, *n\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("ma-main.c", "ma*in.c");
  printf("ma-main.c, ma*in.c\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("imain.c", "ma*in.c");
  printf("imain.c, ma*in.c\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("imain.c", "*in.c");
  printf("imain.c, *in.c\n");
  printf("Result: %d\n", r);
  printf("Expected: 1\n");
  r = shell_comp("b", "a*");
  printf("b, a*\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("n.c", "*in.c");
  printf("n.c, *in.c\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("b", "");
  printf("b, ''\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("bb", "*ab");
  printf("bb, *ab\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("ab", "*a");
  printf("ab, *a\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("abb", "*ab");
  printf("abb, *ab\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("main", "main*d");
  printf("main, main*d\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  r = shell_comp("abc", "*b");
  printf("abc, *b\n");
  printf("Result: %d\n", r);
  printf("Expected: 0\n");
  printf("---------------------------\n");
  r = shell_comp("main.c", "*.c");
  printf("%d\n", r);
  r = shell_comp("main.c", "m*a*i*n*.*c*");
  printf("%d\n", r);
  r = shell_comp("main.c", "main.c");
  printf("%d\n", r);
  r = shell_comp("main.c", "m*c");
  printf("%d\n", r);
  r = shell_comp("main.c", "ma********************************c");
  printf("%d\n", r);
  r = shell_comp("main.c", "*");
  printf("%d\n", r);
  r = shell_comp("main.c", "***");
  printf("%d\n", r);
  r = shell_comp("main.c", "m.*c");
  printf("%d\n", r);
  r = shell_comp("main.c", "**.*c");
  printf("%d\n", r);
  r = shell_comp("main-main.c", "ma*in.c");
  printf("%d\n", r);
  return (0);
}