ENTRYPOINT void init_pinion (ModeInfo *mi) { pinion_configuration *pp; int wire = MI_IS_WIREFRAME(mi); if (!pps) { pps = (pinion_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (pinion_configuration)); if (!pps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } pp = &pps[MI_SCREEN(mi)]; } pp = &pps[MI_SCREEN(mi)]; pp->glx_context = init_GL(mi); load_fonts (mi); reshape_pinion (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); pp->title_list = glGenLists (1); pp->ngears = 0; pp->gears_size = 0; pp->gears = 0; pp->plane_displacement = gear_size * 0.1; if (!wire) { GLfloat pos[4] = {-3.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = { 0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = { 1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = { 1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } pp->trackball = gltrackball_init (); ffwd (mi); }
int main(){ ex_mem_addr_t i = 0; char result; stack_t data; stack_t flow; stack_init(&data); stack_init(&flow); do{ //get the next word, return the index i = get_word(get_ch, buffer, WORD_LENGTH, i); //if statement handling if( strncmp(buffer, "if{", WORD_LENGTH) == 0 ){ //push the conditional to the flow stack stack_push(&flow, stack_pop(&data)); //if the data at the top of the stack is false if( !stack_peek(&flow) ){ //fast-forward to the matching else or curly brace i = ffwd(i); } //else statement handling } else if( strncmp(buffer, "}else{", WORD_LENGTH) == 0 ){ //if the data at the top of the stack is true if( stack_peek(&flow) ){ //fast forward to the matching curly brace i = ffwd(i); } //end curly brace handling } else if( strncmp(buffer, "}", WORD_LENGTH) == 0 ){ //burn the top element of the flow stack stack_pop(&flow); } else if( strncmp(buffer, "do{", WORD_LENGTH) == 0 ){ stack_push(&flow, i); } else if( strncmp(buffer, "}while", WORD_LENGTH) == 0 ){ //if the top of the stack is true, loop and don't pop if( stack_pop(&data) ){ i = stack_peek(&flow); //otherwise, pop and don't loop } else { stack_pop(&flow); } } else { //printf("Executing \"%s\"... ", buffer); result = exec(buffer, &data); //printf("\n"); } } while( (i != 0) && (data.error == STACK_GOOD) && (flow.error == STACK_GOOD) && (result == EXEC_GOOD) ); if( data.error == STACK_OVERFLOW ){ printf("STACK OVERFLOW AT %d\n", i); } if( data.error == STACK_UNDERFLOW ){ printf("STACK UNDERFLOW AT %d\n", i); } if( flow.error == STACK_OVERFLOW ){ printf("FLOW STACK OVERFLOW AT %d\n", i); } if( flow.error == STACK_UNDERFLOW ){ printf("FLOW STACK UNDERFLOW AT %d\n", i); } if( result == EXEC_WORD_NOT_FOUND ){ printf("UNKNOWN WORD \"%s\" AT %d\n", buffer, i); } printf("\nHALTED"); printf(" flow: "); stack_print(&flow); printf(" data: "); stack_print(&data); printf("\n"); return 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; }