void get_pargs(int *argc,char *argv[],int nparg,t_pargs pa[],bool bKeepArgs) { int i,j,k,match; bool *bKeep; char buf[32]; char *ptr; snew(bKeep,*argc+1); bKeep[0] = TRUE; bKeep[*argc] = TRUE; for(i=1; (i<*argc); i++) { bKeep[i] = TRUE; for(j=0; (j<nparg); j++) { if (pa[j].type == etBOOL) { sprintf(buf,"-no%s",pa[j].option+1); if (strcmp(pa[j].option,argv[i])== 0) { *pa[j].u.b = TRUE; pa[j].bSet = TRUE; bKeep[i] = FALSE; } else if (strcmp(buf,argv[i])== 0) { *pa[j].u.b = FALSE; pa[j].bSet = TRUE; bKeep[i] = FALSE; } } else if (strcmp(pa[j].option,argv[i])== 0) { if (pa[j].bSet) fprintf(stderr,"Setting option %s more than once!\n",pa[j].option); pa[j].bSet = TRUE; bKeep[i] = FALSE; switch(pa[j].type) { case etINT: *pa[j].u.i = iscan(*argc,argv,&i); break; case etTIME: case etREAL: *pa[j].u.r = dscan(*argc,argv,&i); break; case etSTR: *(pa[j].u.c) = sscan(*argc,argv,&i); break; case etENUM: match=NOTSET; ptr = sscan(*argc,argv,&i); for(k=1; (pa[j].u.c[k] != NULL); k++) /* only check ptr against beginning of pa[j].u.c[k] */ if (strncasecmp(ptr,pa[j].u.c[k],strlen(ptr)) == 0) if ( ( match == NOTSET ) || ( strlen(pa[j].u.c[k]) < strlen(pa[j].u.c[match]) ) ) match = k; if (match!=NOTSET) pa[j].u.c[0] = pa[j].u.c[match]; else gmx_fatal(FARGS,"Invalid argument %s for option %s", ptr,pa[j].option); break; case etRVEC: (*pa[j].u.rv)[0] = dscan(*argc,argv,&i); if ( (i+1 == *argc) || ( (argv[i+1][0]=='-') && !isdigit(argv[i+1][1]) ) ) (*pa[j].u.rv)[1] = (*pa[j].u.rv)[2] = (*pa[j].u.rv)[0]; else { bKeep[i] = FALSE; (*pa[j].u.rv)[1] = dscan(*argc,argv,&i); if ( (i+1 == *argc) || ( (argv[i+1][0]=='-') && !isdigit(argv[i+1][1]) ) ) gmx_fatal(FARGS,"%s: vector must have 1 or 3 real parameters", pa[j].option); bKeep[i] = FALSE; (*pa[j].u.rv)[2] = dscan(*argc,argv,&i); } break; default: gmx_fatal(FARGS,"Invalid type %d in pargs",pa[j].type); } /* i may be incremented, so set it to not keep */ bKeep[i] = FALSE; } } } if (!bKeepArgs) { /* Remove used entries */ for(i=j=0; (i<=*argc); i++) { if (bKeep[i]) argv[j++]=argv[i]; } (*argc)=j-1; } sfree(bKeep); }
void main() { badge_setup(); simpleterm_close(); ir_start(); ee_wipe(); // Connection to host routine (FORCE CONNECTION TO HOST) port = fdserial_open(31, 30, 0, 115200); char_size(SMALL); cursor(2, 4); display("Connecting..."); while(1) { dprint(port, "Propeller\n"); pause(1000); // We need this pause, since the host needs time to respond. 5 x 1 second = 10 second timeout if (fdserial_rxCount(port) == 0) { continue; } else if (fdserial_rxCount(port) < 5) { fdserial_rxFlush(port); continue; } else dscan(port, "%s", handshake); // Attempt handshake and listen to response if (strcmp(handshake, "H0st") == 0) { break; } } clear(); while(1) { rgb(L, OFF); rgb(R, OFF); char_size(BIG); cursor(0, 0); display("HOTSPOT!"); char_size(SMALL); cursor(4, 5); display("Start an"); cursor(1, 6); display("interaction to"); cursor(0, 7); display("upload your data"); memset(&their, 0, sizeof(info)); int t = CNT; int dt = CLKFREQ * 2; if (check_inbox() == 1) { clear(); message_get(&their); ir_send(&my); char_size(SMALL); cursor(2, 2); display("Receiving..."); while(1) { if (CNT - t > dt) { clear(); char_size(SMALL); cursor(5, 2); display("ERROR!"); cursor(0, 5); display("Please try again"); dprint(port, "txBegin\n"); dprint(port, "Timeout\n"); ee_wipe(); clear_inbox(); pause(2000); clear(); break; } if (check_inbox() == 1) { t = CNT; message_get(&their); if(!strcmp(their.name, "txDone")) { char_size(SMALL); cursor(0, 5); display("Upload complete"); dprint(port, "txBegin\n"); ee_uploadContacts(port); ee_wipe(); clear_inbox(); pause(1000); clear(); break; } ee_save(&their); dprint(port, "Name: %s\n", their.name); dprint(port, "Email: %s\n", their.email); } } } } }
void main() { badge_setup(); simpleterm_close(); contacts_clearAll(); preserve_header(); CLKLIMIT = CLKFREQ * 2; // Connection to host routine (FORCE CONNECTION TO HOST) port = fdserial_open(31, 30, 0, 115200); text_size(SMALL); cursor(2, 4); oledprint("Connecting..."); spkr = talk_run(9, 10); // Start talk process while(1) { dprint(port, "Propeller\n"); pause(1000); // We need this pause, since the host needs time to respond. 5 x 1 second = 10 second timeout if (fdserial_rxCount(port) == 0) { continue; } else if (fdserial_rxCount(port) < 5) { fdserial_rxFlush(port); continue; } else dscan(port, "%s", handshake); // Attempt handshake and listen to response if (strcmp(handshake, "H0st") == 0) { break; } } clear(); talk_say(spkr, "heloa"); while(1) { rgb(L, OFF); rgb(R, OFF); text_size(LARGE); cursor(0, 0); oledprint("HOTSPOT!"); text_size(SMALL); cursor(4, 5); oledprint("Start an"); cursor(1, 6); oledprint("interaction to"); cursor(0, 7); oledprint("upload your data"); char their_id[7]; memset(&their_id, 0, 7); int t = CNT; char i_type[5]; irscan("%s%s", their_id, i_type); if (strlen(their_id) > 0) { clear(); eeprint("%s,%u,%s\n", their_id, 0, "INFO"); irprint("%s\n%s\n", "htspt1", "DUMP"); text_size(SMALL); cursor(2, 2); oledprint("Receiving..."); while(1) { char b[128]; memset(&b, 0, 128); irscan("%s", b); if (CNT - t > CLKLIMIT) { clear(); text_size(LARGE); cursor(0, 0); oledprint(" ERROR"); text_size(SMALL); cursor(0, 6); oledprint("Please try again"); dprint(port, "txBegin\n"); dprint(port, "Timeout\n"); contacts_clearAll(); preserve_header(); talk_say(spkr, "oops;/trae,-ugen"); pause(2000); clear(); break; } if (strlen(b) > 0) { t = CNT; if(!strcmp(b, "irDone")) { clear(); text_size(LARGE); cursor(0, 0); oledprint("SUCCESS"); text_size(SMALL); cursor(0, 6); oledprint("Upload complete"); talk_say(spkr, "oakay;</aem,dun"); dprint(port, "txBegin\n"); upload_contacts(port); contacts_clearAll(); preserve_header(); pause(1000); clear(); break; } save_contact(b); } } } } }