static lisp_cell_t *make_diff_inner(lisp_t * l, diff * d, char *x[], char *y[], size_t i, size_t j, lisp_cell_t * pp, lisp_cell_t * mm) { /*lol*/ if (i > 0 && j > 0 && !strcmp(x[i - 1], y[j - 1])) { return cons(l, cons(l, mk_str(l, lisp_strdup(l, x[i - 1])), gsym_nil()), make_diff_inner(l, d, x, y, i - 1, j - 1, pp, mm)); } else if (j > 0 && (i == 0 || d->c[(i * (d->n)) + (j - 1)] >= d->c[((i - 1) * (d->n)) + j])) { return cons(l, cons(l, pp, cons(l, mk_str(l, lisp_strdup(l, y[j - 1])), gsym_nil())), make_diff_inner(l, d, x, y, i, j - 1, pp, mm)); } else if (i > 0 && (j == 0 || d->c[(i * (d->n)) + (j - 1)] < d->c[((i - 1) * (d->n)) + j])) { return cons(l, cons(l, mm, cons(l, mk_str(l, lisp_strdup(l, x[i - 1])), gsym_nil())), make_diff_inner(l, d, x, y, i - 1, j, pp, mm)); } return gsym_nil(); }
/* ** put_track_title - Put track artist & title in freedb format into ** main_data for specified track number. ** NOTE: A track artist can be specified */ void put_track_title (char *src, _main_data * main_data, int tno) { struct _track *tk_p = &(main_data->track[tno]); char *sp = src, *cp, *ep; int c; /* Strip leading blanks */ while (isspace (*sp)) ++sp; /* Split off track artist if specified */ if ((cp = rindex (sp, '/'))) { for (ep = cp - 1; ep > sp && isspace (*ep); --ep) ; c = *(++ep); *ep = 0; mk_str (&(tk_p->artist), sp); *ep = c; for (sp = cp + 1; isspace (*sp); ++sp) ; } else { mk_buf (&(tk_p->artist), 0); } /* Strip trailing spaces */ for (ep = sp + strlen (sp) - 1; isspace (*ep); --ep) ; memcpy (tk_p->title, sp, ep - sp + 1); tk_p->title[ep - sp + 1] = 0; }
int main() { ast* a = mk_int(123); ast* b = mk_str("ha"); ast_list* lst = conslist(2, a, b); ast* node = mk_node(body_node, lst); print_ast_list(lst); print_ast(node); return 0; }
char * get_str(int fd) { size_t strsize = get_data(fd); while (strsize > STRMAXSZ) { strsize = strsize/2; } // XXX v v v this is for experiment only; remove. strsize = STRMAXSZ; char *s = mk_str(strsize); if (s == NULL) { return (NULL); } int i = 0; while (i < (strsize - 1)) { retry:; s[i] = get_data_8b(fd); if (s[i] == 0 || s[i] > 126 || s[i] < 33) { goto retry; } i++; } return (s); }
/* Create a new string node with position information */ node * mk_pos_str(char *string, unsigned int start, unsigned int stop) { node *result = mk_str(string); return result; }
int main() { putchar('0' + fct(mk_str(1,2), mk_str(3,4))); putchar(10); return 0; }