示例#1
0
文件: nano.c 项目: jigsaw121/nanofic
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;
}
示例#2
0
文件: nano.c 项目: jigsaw121/nanofic
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;
}
示例#3
0
文件: nano.c 项目: jigsaw121/nanofic
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;
}
示例#4
0
文件: nano.c 项目: jigsaw121/nanofic
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);
}
示例#5
0
文件: nano.c 项目: jigsaw121/nanofic
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(">");
}
示例#6
0
文件: nano.c 项目: jigsaw121/nanofic
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;
}
示例#7
0
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;
}