sexp sexp_read_u8 (sexp ctx, sexp self, sexp in) { int c; sexp_assert_type(ctx, sexp_iportp, SEXP_IPORT, in); if (!sexp_port_binaryp(in)) return sexp_xtype_exception(ctx, self, "not a binary port", in); #if SEXP_USE_GREEN_THREADS errno = 0; #endif c = sexp_read_char(ctx, in); #if SEXP_USE_GREEN_THREADS if ((c == EOF) && (errno == EAGAIN)) { if (sexp_port_stream(in)) clearerr(sexp_port_stream(in)); if (sexp_applicablep(sexp_global(ctx, SEXP_G_THREADS_BLOCKER))) sexp_apply1(ctx, sexp_global(ctx, SEXP_G_THREADS_BLOCKER), in); return sexp_global(ctx, SEXP_G_IO_BLOCK_ERROR); } #endif if (c == '\n') sexp_port_line(in)++; return (c==EOF) ? SEXP_EOF : sexp_make_fixnum(c); }
static sexp sexp_set_port_line (sexp ctx, sexp self, sexp_sint_t n, sexp p, sexp i) { sexp_assert_type(ctx, sexp_portp, SEXP_IPORT, p); sexp_assert_type(ctx, sexp_fixnump, SEXP_FIXNUM, i); sexp_port_line(p) = sexp_unbox_fixnum(i); return SEXP_VOID; }
static sexp sexp_get_port_line (sexp ctx, sexp self, sexp_sint_t n, sexp p) { sexp_assert_type(ctx, sexp_portp, SEXP_IPORT, p); return sexp_make_fixnum(sexp_port_line(p)); }