int cmd_put(fs_file fp, const union cmd *cmd) { if (!fp || !cmd) return 0; assert(cmd->type > CMD_NONE && cmd->type < CMD_MAX); fs_putc(cmd->type, fp); switch (cmd->type) { PUT_CASE(CMD_END_OF_UPDATE); PUT_CASE(CMD_MAKE_BALL); PUT_CASE(CMD_MAKE_ITEM); PUT_CASE(CMD_PICK_ITEM); PUT_CASE(CMD_TILT_ANGLES); PUT_CASE(CMD_SOUND); PUT_CASE(CMD_TIMER); PUT_CASE(CMD_STATUS); PUT_CASE(CMD_COINS); PUT_CASE(CMD_JUMP_ENTER); PUT_CASE(CMD_JUMP_EXIT); PUT_CASE(CMD_BODY_PATH); PUT_CASE(CMD_BODY_TIME); PUT_CASE(CMD_GOAL_OPEN); PUT_CASE(CMD_SWCH_ENTER); PUT_CASE(CMD_SWCH_TOGGLE); PUT_CASE(CMD_SWCH_EXIT); PUT_CASE(CMD_UPDATES_PER_SECOND); PUT_CASE(CMD_BALL_RADIUS); PUT_CASE(CMD_CLEAR_ITEMS); PUT_CASE(CMD_CLEAR_BALLS); PUT_CASE(CMD_BALL_POSITION); PUT_CASE(CMD_BALL_BASIS); PUT_CASE(CMD_BALL_PEND_BASIS); PUT_CASE(CMD_VIEW_POSITION); PUT_CASE(CMD_VIEW_CENTER); PUT_CASE(CMD_VIEW_BASIS); PUT_CASE(CMD_CURRENT_BALL); PUT_CASE(CMD_PATH_FLAG); PUT_CASE(CMD_STEP_SIMULATION); PUT_CASE(CMD_MAP); PUT_CASE(CMD_TILT_AXES); PUT_CASE(CMD_MOVE_PATH); PUT_CASE(CMD_MOVE_TIME); case CMD_NONE: case CMD_MAX: break; } return !fs_eof(fp); }
char *fs_gets(char *dst, int count, fs_file fh) { char *s = dst; int c; assert(dst); assert(count > 0); if (fs_eof(fh)) return NULL; while (count > 1) if ((c = fs_getc(fh)) >= 0) { count--; *s = c; /* Keep a newline and break. */ if (*s == '\n') { s++; break; } /* Ignore carriage returns. */ if (*s == '\r') { count++; s--; } s++; } else if (s == dst) return NULL; else break; *s = '\0'; return dst; }
static const char *getFSF (lua_State *L, void *ud, size_t *size) { LoadFSF *lf = (LoadFSF *)ud; (void)L; if (L == NULL && size == NULL) // Direct mode check return NULL; if (lf->extraline) { lf->extraline = 0; *size = 1; return "\n"; } if (fs_eof(lf->f)) return NULL; *size = fs_read(lf->f, lf->buff, sizeof(lf->buff)); return (*size > 0) ? lf->buff : NULL; }
/* ================= eflac_decoder_eof ================= */ static FLAC__bool eflac_decoder_eof (GNUC_UNUSED const FLAC__StreamDecoder *decoder, void *client_data) { snd_stream_t *s = client_data; return fs_eof(s->file); }
int cmd_get(fs_file fp, union cmd *cmd) { int type; short size; if (!fp || !cmd) return 0; if ((type = fs_getc(fp)) >= 0) { get_short(fp, &size); /* Discard unrecognised commands. */ if (type >= CMD_MAX) { fs_seek(fp, size, SEEK_CUR); type = CMD_NONE; } cmd->type = type; switch (cmd->type) { GET_CASE(CMD_END_OF_UPDATE); GET_CASE(CMD_MAKE_BALL); GET_CASE(CMD_MAKE_ITEM); GET_CASE(CMD_PICK_ITEM); GET_CASE(CMD_TILT_ANGLES); GET_CASE(CMD_SOUND); GET_CASE(CMD_TIMER); GET_CASE(CMD_STATUS); GET_CASE(CMD_COINS); GET_CASE(CMD_JUMP_ENTER); GET_CASE(CMD_JUMP_EXIT); GET_CASE(CMD_BODY_PATH); GET_CASE(CMD_BODY_TIME); GET_CASE(CMD_GOAL_OPEN); GET_CASE(CMD_SWCH_ENTER); GET_CASE(CMD_SWCH_TOGGLE); GET_CASE(CMD_SWCH_EXIT); GET_CASE(CMD_UPDATES_PER_SECOND); GET_CASE(CMD_BALL_RADIUS); GET_CASE(CMD_CLEAR_ITEMS); GET_CASE(CMD_CLEAR_BALLS); GET_CASE(CMD_BALL_POSITION); GET_CASE(CMD_BALL_BASIS); GET_CASE(CMD_BALL_PEND_BASIS); GET_CASE(CMD_VIEW_POSITION); GET_CASE(CMD_VIEW_CENTER); GET_CASE(CMD_VIEW_BASIS); GET_CASE(CMD_CURRENT_BALL); GET_CASE(CMD_PATH_FLAG); GET_CASE(CMD_STEP_SIMULATION); GET_CASE(CMD_MAP); GET_CASE(CMD_TILT_AXES); GET_CASE(CMD_MOVE_PATH); GET_CASE(CMD_MOVE_TIME); case CMD_NONE: case CMD_MAX: break; } return !fs_eof(fp); } return 0; }