int main(int argc, char* argv[]) { get_scenes(data); if (argc>1) { FILE* fr = fopen(SAVEFILE, "r"); if (!fr) { printf("Can't open %s for loading savestate", SAVEFILE); return 1; } printf("emulating\n"); int i=0; char l[20]; save = malloc(sizeof(int)*80); while(fgets(l, 20, fr) != NULL) { sscanf(l, "%d", &save[i]); i++; } save[i]=0; /*i=0; printf("scanned: "); while (save[i]) { printf("%d", save[i]); i++; } printf("\n");*/ fclose(fr); emulate(); } rew(data); read(data); freeall(*data); return 0; }
scene* txtlabel(scene* labeler) { scene* search2 = labeler; scene** search = &search2; rew(search); while (strcmp(labeler->choice, (*search)->label)) { if ((*search)->next == 0) { printf("scenario %s not written yet\n", labeler->choice); end(*search, 1); } *search = (*search)->next; } return *search; }
scene* txtlabelchar(char* label) { scene* search2 = *data; scene** search = &search2; rew(search); while (strcmp(label, (*search)->label)) { if ((*search)->next == 0) { printf("scenario %s not written yet\n", label); end(*search, 1); } *search = (*search)->next; } return *search; }
void freeall(scene* start) { scene* uf = start; scene** unfree = &uf; rew(unfree); while ((*unfree)->next) { *unfree = (*unfree)->next; free0((*unfree)->prev->txt); free0((*unfree)->prev->nxt); free0((*unfree)->prev); } free0((*unfree)->txt); free0((*unfree)->nxt); free0(*unfree); }
void p_dischoice(choiceparser* p) { scene** choice = &p->choice; rew(choice); printf("Choose: \n"); int cn = 1; while (1) { printf(" %d:%s\n", cn, (*choice)->txt); (*choice)->index = cn; if (!((*choice)->next)) { break; } *choice = (*choice)->next; cn++; } printf(">"); }
int emulchoose(choiceparser* p, int choice) { scene** c = &p->choice; rew(c); while (1) { if ((*c)->index==choice) { //p->gotonext = &p_gotochoice; strcpy(p->now->choice, p->choice->nxt); printf("\n"); return 0; } if (!(*c)->next) { break; } *c = (*c)->next; } return 1; }
int parse_msg(PControlMsg msg, struct AUDIO_HEADER *header, int cnt) { switch(msg->type) { case MSG_BUFFER: /* fprintf(stderr, "MSG_BUFFER %d\n", msg->data); */ break; case MSG_BUFAHEAD: /* fprintf(stderr, "MSG_PLAYAHEAD %d\n", msg->data); */ break; case MSG_SEEK: break; case MSG_RELEASE: break; case MSG_PRIORITY: break; case MSG_QUERY: /* fprintf(stderr,"MSG_QUERY\n"); */ { TControlMsg rmsg; rmsg.type = MSG_RESPONSE; switch(msg->data) { case QUERY_PLAYING: rmsg.data = GUI_PLAYING; /* No need to synch. */ /* fprintf(stderr, "Reply to query playing\n"); */ send_msg(&rmsg, TRUE); break; case QUERY_PAUSED: /* fprintf(stderr, "Reply to QUERY_PAUSED\n"); */ rmsg.data = GUI_PAUSE; send_msg(&rmsg, TRUE); break; } } break; case MSG_CTRL: switch(msg->data) { case PLAY_PAUSE: /* fprintf(stderr, "MSG_CTRL - PLAY_PAUSE\n"); */ if(GUI_PAUSE) GUI_PAUSE= FALSE; else { GUI_PAUSE=TRUE ; /* if (GUI_PLAYING) audioBufferFlush(); */ } break; case PLAY_STOP: /* fprintf(stderr, "MSG_CTRL - PLAY_STOP\n"); */ GUI_STOP = TRUE; if (GUI_PLAYING) audioBufferFlush(); break; case FORWARD_BEGIN: /* fprintf(stderr, "FORWARD_BEGIN\n"); */ /* forward(8); */ { TControlMsg rmsg; rmsg.type = MSG_RESPONSE; rmsg.data = FORWARD_BEGIN; send_msg(&rmsg, TRUE); } break; case FORWARD_STEP: { /* fprintf(stderr, "FORWARD_STEP\n"); */ if(ffwd(header, 10)==10) cnt+=10; { TControlMsg rmsg; rmsg.type = MSG_RESPONSE; rmsg.data = FORWARD_STEP; send_msg(&rmsg, TRUE); } if (GUI_PLAYING) audioBufferFlush(); } break; case FORWARD_END: /* fprintf(stderr, "FORWARD_END\n"); */ break; case REWIND_BEGIN: /* fprintf(stderr, "REWIND_BEGIN\n"); */ { TControlMsg rmsg; rmsg.type = MSG_RESPONSE; rmsg.data = REWIND_BEGIN; send_msg(&rmsg, TRUE); } break; case REWIND_STEP: { int result; /* fprintf(stderr, "REWIND_STEP\n"); */ if (cnt>10){ if ((result = rew(header, 10))!= -1) { cnt-=result; } } { TControlMsg rmsg; rmsg.type = MSG_RESPONSE; rmsg.data = REWIND_STEP; send_msg(&rmsg, TRUE); } if (GUI_PLAYING) audioBufferFlush(); } break; case REWIND_END: /* fprintf(stderr, "REWIND_END\n"); */ break; } break; case MSG_QUIT: fprintf(stderr, "MSG_QUIT\n"); if (GUI_PLAYING) audioBufferFlush(); break; case MSG_SONG: #if 0 { int fd; struct msghdr hdr; struct m_cmsghdr fdhdr; struct iovec iov[1]; char data[2]; iov[0].iov_base = data; iov[0].iov_len = 2; /* fprintf(stderr, "MSG_SONG\n"); */ hdr.msg_iov = iov; hdr.msg_iovlen = 1; hdr.msg_name = NULL; hdr.msg_namelen = 0; fdhdr.cmsg_len = sizeof(struct m_cmsghdr); fdhdr.cmsg_level = SOL_SOCKET; fdhdr.cmsg_type = SCM_RIGHTS; fdhdr.fd = 0; hdr.msg_control = &fdhdr; hdr.msg_controllen = sizeof(struct m_cmsghdr); if(recvmsg(receive_fd, &hdr, 0) < 0) perror("recvmsg"); fd = fdhdr.fd; /* fprintf(stderr, "FILEFD READ=%d\n", fd); */ GUI_FD_TO_PLAY = fd; if (GUI_PLAYING) audioBufferFlush(); } #endif break; } return cnt; }