int factor() { int value = 0; switch (token) { case lparen: gettok(); value = expression(); if (token != rparen) puts("missing ')'"); else gettok(); break; case number: --pos; value = getnumber(); gettok(); break; default: puts("error: expecting number or '('"); break; } return value; }
//setup the Servo PWM void bpServo(void) { unsigned int PWM_period, PWM_dutycycle; unsigned char entryloop=0; float PWM_pd; // Clear timers T2CON = 0; // clear settings T4CON = 0; OC5CON = 0; if(AUXmode == AUX_PWM){ //PWM is on, stop it if(cmdbuf[((cmdstart + 1)& CMDLENMSK)] == 0x00){//no extra data, stop servo AUXPIN_RPOUT = 0; //remove output from AUX pin BPMSG1028; AUXmode = AUX_IO; return; // return if no arguments to function } } cmdstart=(cmdstart+1)&CMDLENMSK; // Get servo position from command line or prompt for value consumewhitechars(); PWM_pd = getint(); if (cmderror || (PWM_pd > 180)) { cmderror = 0; BPMSG1254; PWM_pd = getnumber(90, 0, 180, 0); entryloop=1; } // Setup multiplier for 50 Hz servoset: T2CONbits.TCKPS1 = 1; T2CONbits.TCKPS0 = 1; PWM_period = 1250;; PWM_pd /= 3500; PWM_dutycycle = (PWM_period * PWM_pd) + 62; //assign pin with PPS AUXPIN_RPOUT = OC5_IO; OC5R = PWM_dutycycle; OC5RS = PWM_dutycycle; OC5CON = 0x6; PR2 = PWM_period; T2CONbits.TON = 1; BPMSG1255; AUXmode=AUX_PWM; if(entryloop==1){ PWM_pd = getnumber(-1, 0, 180, 1); if(PWM_pd<0){ bpWBR; return; } goto servoset; } }
//align LinkList AlignList(LinkList L, long long n) { Node *p, *q; long long i; p = L->next; q = p->next; while (p->next) { if (n) { for (i = 0; i < n; i++) //p->data[5 - 1 - n + i] = p->data[i]; p->data[9 - 1 - 1 - i] = p->data[n - 1 - i]; for (i = 0; i < 9 - 1 - n; i++) p->data[i] = q->data[n + i]; } p->num = getnumber(p->data); p = p->next; q = q->next; } if (n) { for (i = n; i < 9 - 1; i++) p->data[i] = '\0'; } p->num = getnumber(p->data); return L; }
/* * Read filter information data. The format is an ascii string: * filter-data filter-format * vlan 1 * vlan-mac 2 * vlan--group 3 * vlan-mac-group 4 */ static bool getfid(struct vdpnl_vsi *p, char *value, long idx) { char *delim2 = 0, *delim = strchr(value, '-'); unsigned int vlan, gpid = 0; int fif, i, have_mac = 1, have_gpid = 1; unsigned char x[ETH_ALEN]; memset(x, 0, sizeof(x)); if (!delim) /* No dash --> no mac, no group */ have_gpid = have_mac = 0; else { *delim = '\0'; delim2 = strchr(delim + 1, '-'); if (!delim2) /* No 2nd dash --> have mac but no group */ have_gpid = 0; else { /* 2 dashes --> check for mac */ *delim2 = '\0'; if (delim + 1 == delim2) /* -- means vlan and group without mac */ have_mac = 0; } } if (!getnumber(value, 0, 0xffff, &vlan)) return false; fif = VDP22_FFMT_VID; if (have_mac) { i = sscanf(delim + 1, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", &x[0], &x[1], &x[2], &x[3], &x[4], &x[5]); if (i != ETH_ALEN) return false; fif = VDP22_FFMT_MACVID; } /* Check for optional group identifier */ if (have_gpid && *(delim2 + 1)) { if (!getnumber(delim2 + 1, 1, ~0U, &gpid)) return false; fif += 2; } /* We already have filter information data, filter format must match */ if (p->filter_fmt && p->filter_fmt != fif) return false; p->filter_fmt = fif; /* Check if this mac is already in our list */ for (i = 0; have_mac && i < p->macsz; ++i) { if (!memcmp(x, p->maclist[i].mac, sizeof(p->maclist[i].mac))) return false; } /* Append to end of list */ p->maclist[idx].vlan = vdp22_get_vlanid(vlan); p->maclist[idx].qos = vdp22_get_qos(vlan); p->maclist[idx].gpid = gpid; memcpy(p->maclist[idx].mac, x, sizeof(p->maclist[0].mac)); return true; }
void picinit(void) { int mode, delay; int interactive; consumewhitechars(); mode=getint(); consumewhitechars(); delay=getint(); interactive=0; if(!((mode>0)&&(mode<=2))) { interactive=1; } if((delay>0)&&(delay<=2)) { piccmddelay=delay; } else { interactive=1; } if(interactive) { cmderror=0; //bpWline("Commandmode"); //bpWline("1. 6b/14b"); //bpWline("2. 4b/16b"); BPMSG1072; mode=getnumber(1,1,2,0); //bpWline("Delay"); BPMSG1073; delay=getnumber(1,1,2,0); } switch(mode) { case 1: picmode=PICMODE6; break; case 2: picmode=PICMODE4; break; default: break; } piccmddelay=delay; if(!interactive) { //bpWstring("PIC(mod dly)=("); BPMSG1074; bpWdec(picmode); bpSP; bpWdec(piccmddelay); bpWline(")"); } modeConfig.HiZ=1; // to allow different Vcc modeConfig.int16=1; bbL(MOSI|CLK, PICSPEED); // pull both pins to 0 before applying Vcc and Vpp }
static void fm_init(lua_State *lstate, GEN *gen) { GEN_FM *data; gen->data = (void *)malloc(sizeof(GEN_FM)); data = (GEN_FM *)gen->data; getnumber(lstate, "freq", &(data->freq)); getnumber(lstate, "mod", &(data->modf)); getnumber(lstate, "beta", &(data->beta)); data->step = data->freq / jack_sr * TWO_PI; data->modstep = data->modf / jack_sr * TWO_PI; data->modphase = 0.0; gen->phase = 0.0; }
int onImport_Tiles() { int ret=getnumber("Import Start Page",0); if(cancelgetnum) { return D_O_K; } bound(ret,0,TILE_PAGES-1); if(!getname("Import Tiles (.til)","til",NULL,datapath,false)) return D_O_K; saved=false; // usetiles=true; if(!load_tiles(temppath, ret*TILES_PER_PAGE)) { char buf[80],name[13]; extract_name(temppath,name,FILENAME8_3); sprintf(buf,"Unable to load %s",name); jwin_alert("Error",buf,NULL,NULL,"O&K",NULL,'k',0,lfont); } refresh(rALL); return D_O_K; }
int onImport_Combos() { int ret=getnumber("Import Start Page",0); if(cancelgetnum) { return D_O_K; } bound(ret,0,COMBO_PAGES-1); if(!getname("Import Combo Table (.cmb)","cmb",NULL,datapath,false)) return D_O_K; if(!load_combos(temppath, ret*COMBOS_PER_PAGE)) { // if(!load_combos(temppath)) { char buf[80],name[13]; extract_name(temppath,name,FILENAME8_3); sprintf(buf,"Unable to load %s",name); jwin_alert("Error",buf,NULL,NULL,"O&K",NULL,'k',0,lfont); } else saved=false; refresh(rALL); return D_O_K; }
unsigned long getarg(void) { int state = rand() % 5; static char b[128]; switch(state) { /* userland addr */ case 0: return 0x0804fd00; break; /* unmapped addr */ case 1: return 0x0000a000; break; /* kernel addr, this is a guess ... should actually get a real one ... */ case 2: return 0xc01fa0b6; break; /* some number */ case 3: return getnumber(); break; case 4: getrand(b); return &b; break; } }
void main() { char *a; a = malloc(7*sizeof(char)); printf("enter the file name : \n"); scanf("%s",a); FILE *p; p = fopen(a,"r+"); if(p == NULL) { printf("invalid file name\n"); exit(1); } int sm = getnumber(p); printf("%d\n",sm); char **zo; zo = read(p); int n = **zo; printf("%d\n",n); *zo++; // selection_sort(zo,n,sm); char *ans; ans = malloc(10*sizeof(char)); ans = randomized(zo,0,n-1,sm); printf("%s\n",ans); }
int main() { while(scanf("%d", &n) == 1 && n) { char op[10]; scanf("%s", op); if(op[0] == 'S') { scanf("%s", tmp); memset(a, '.', sizeof(a)); for(int i = 0; i < n; i++) getans(tmp[i] - '0', i*2); for(int i = 1; i <= 3; i++) { for(int j = 0; j < 2*n; j++) { printf("%c", a[i][j]); if((j&1) && j != 2*n-1) putchar(' '); } puts(""); } } else if(op[0] == 'B') { for(int i = 1; i <= 3; i++) for(int j = 0; j < 2 * n; j++) { scanf(" %c", &a[i][j]); } for(int j = 0; j < n; j++) printf("%d", getnumber(j*2)); puts(""); } } return 0; }
void rxgetnumber(struct RexxMsg *mess) { int minvarde, maxvarde, defaultvarde, returvarde; char retstr[15]; char *pek1 = NULL, *pek2 = NULL, *pek3 = NULL; pek1=hittaefter(mess->rm_Args[0]); if(pek1) pek2=hittaefter(pek1); if(pek2) pek3=hittaefter(pek2); if(pek1[0] && !pek2[0]) { defaultvarde = atoi(pek1); returvarde = getnumber(0, 0, &defaultvarde); } else if(pek1[0] && pek2[0]) { minvarde = atoi(pek1); maxvarde = atoi(pek2); if(pek3[0]) { defaultvarde = atoi(pek3); returvarde = getnumber(&minvarde, &maxvarde, &defaultvarde); } else { returvarde = getnumber(&minvarde, &maxvarde, 0); } } else { returvarde = getnumber(0, 0, 0); } sprintf(retstr,"%d",returvarde); if(mess->rm_Action & 1L<<RXFB_RESULT) { if(!(mess->rm_Result2=(long)CreateArgstring(retstr,strlen(retstr)))) puttekn("\r\n\nKunde inte allokera en Argstring!\r\n\n",-1); } mess->rm_Result1=0; }
static void sine_init(lua_State *lstate, GEN *gen) { GEN_SINE *data; gen->data = (void *)malloc(sizeof(GEN_SINE)); data = (GEN_SINE *)gen->data; getnumber(lstate, "freq", &(data->freq)); data->step = data->freq / jack_sr * TWO_PI; gen->phase = 0.0; return; }
double GDosoptions::getthreshold()const{ double value=getnumber(thresholdedit->text())/100.0; if (value<0){ value=0.0; } if (value>1.0){ value=1.0; } return value; //return not in percent but as fraction }
SHELL void line_last(uint i) { if (i==0) { msgout("メッセージを読み直します。何ライン前から読み直しますか?"); i=getnumber(); } msgout(" ▼伝言板▽"); disp_last(ed.fpe,i); clearerr(ed.fpe); }
static int new_obj(lua_State *lstate) { GEN *gen; lua_Number duration, gain; char gentype[64]; duration = -1.0; gain = 1.0; strcpy(gentype, lua_tostring(lstate, -2)); lua_remove(lstate, -2); getnumber(lstate, "duration", &duration); getnumber(lstate, "gain", &gain); gen = (GEN *)malloc(sizeof(GEN)); gen->data = NULL; gen->init = NULL; gen->generate = NULL; gen->phase = 0.0; if (strcmp(gentype, "fm") == 0) { fm_init(lstate, gen); gen->generate = fm_generate; } else if (strcmp(gentype, "sine") == 0) { sine_init(lstate, gen); gen->generate = sine_generate; } else if (strcmp(gentype, "white") == 0) { gen->generate = white_generate; } lua_pop(lstate, 1); lua_newtable(lstate); init_fader(&(gen->unit.fader), gain); gen->running = 0; lua_pushstring(lstate, "intern"); lua_pushlightuserdata(lstate, (void *)gen); lua_settable(lstate, -3); add_method(lstate, "play", gen_play); add_fader_methods(lstate); add_method(lstate, "stop", gen_stop); gen->final_frame = duration * jack_sr; gen->pos = 0; return 1; }
int main(int argc, char **argv) { int i, fork_result; char *client_number = NULL; int total_cleints; int file_id, dimension; umask (0); if (argc<2) my_error ("You should enter a number of clients!\n\0"); total_cleints = getnumber (argv[1]); file_check(); if ((file_id=open (TMPFILE,O_RDONLY))<0) my_error ("Error when open file!\n\0"); if (read(file_id,&dimension,sizeof(int))!=sizeof(int)) my_error ("error when reading from file!\n\0"); if ( total_cleints > dimension * dimension ) total_cleints = dimension * dimension; if (close(file_id) < 0) my_error ("Error when closing file!\n\0"); printf (" total %i clients \n",total_cleints); for (i=0; i<total_cleints; ++i) { fork_result=fork(); if (fork_result < 0) my_error ("Can not run fork!\n\0"); else if (fork_result == 0) { client_number = (char*) malloc (sizeof(char)*(get_number_symbols (i+1) + 1)); snprintf (client_number, get_number_symbols (i+1)+1, "%i", i + 1); execl ("./client.out","./client.out" , client_number , NULL); my_error ("Can not run client application!\n\0"); } } free_all_pointers(); execl ("./server.out","./server.out", argv [1], NULL); my_error ("Can not run server!\n\0"); return -1; }
void term(){ if(look == '*'){ match("*"); term(); emitln("xor ebx, ebx"); settype(reduceptr(current_type)); STRSWITCH(current_type) STRCASE("short") emitln("mov bx, word [eax]"); STRCASE("char") emitln("mov bl, byte [eax]"); STRDEFAULT emitln("mov ebx, dword [eax]"); STRSWITCHEND emitln("xchg eax, ebx"); } else if(look == '('){ match("("); emitln("push eax"); expression(); match(")"); } else if(look == '"'){ emitln("mov eax, %s", add_string(getstring('"'))); current_type = "char*"; } else if(look == '\''){ match("'"); emitln("mov eax, %d", look); getcharacter(); match("'"); current_type = "char"; } else if(is_in(dynstring("%c", look), "+", "-", NULL)){ emitln("push dword 0"); operator(); } else if(isalpha(look)){ identifier(); } else if(isdigit(look)){ emitln("mov eax, %s", getnumber()); } else expected("Number or variable"); }
int POL::gettok (TOKEN *tok) { int c, toktype; int inum; double fnum; int toksiz = MAXTOK; /* maximum length of token string */ while ((c = inchar()) == BLANK || c == TAB) ; ungetch (c); c = lookchar(); toktype = type(c); fnum = 0.0; inum = 0; if (c == BLANK || c == TAB) { /* skip white space */ getblank(tok->tokstr, toksiz); toktype = TT_BLANK; } else if (toktype == LETTER) { toktype = getalpha (tok->tokstr, toksiz); } else if (c == meta.str) { /* quoted string */ getquote (tok->tokstr, toksiz); toktype = TT_STRING; } else if (type(c) == DIGIT || c == PLUS || c == HYPHEN || c == PERIOD) { toktype = getnumber (tok->tokstr, toksiz, &fnum, &inum); } else if (c == EOF) { tok->tokstr[0] = EOS; toktype = TT_EOF; } else { c = inchar(); tok->tokstr[0] = c; tok->tokstr[1] = EOS; toktype = TT_SPECLCHAR; } tok->type = toktype; tok->ready = true; if (tok->type == TT_REAL || tok->type == TT_INT) { tok->fnum = fnum; tok->inum = inum; } else { tok->fnum = 0.0; tok->inum = 0; } return (toktype); }
void history(char command[100]) { int num,i,j,k; if(strstr(command,"hist")!=NULL && strlen(command)==4) { for(i=0;i<histlen-1;i++) printf("%d %s\n",i+1,hist[i]); } else if(strstr(command,"!")==NULL) { num=getnumber(command); k=histlen-num-1; if(k < 0) k=0; else if(num > histlen) k=0; for(i=k;i<histlen-1;i++) printf("%d %s\n",i-(k-1),hist[i]); } else { histlen--; num=getnumber(command); char com[100]; if(num > histlen) num=histlen; strcpy(com,hist[num-1]); strcpy(hst,com); } }
BOOL getword_switch(){ static char ch = ' '; if(EOF == ch){ return FALSE; } getblank(&ch); if(getnumber(&ch)){ return TRUE; } if(getidentify(&ch)){ return TRUE; } getdouble_or_single_token(&ch); return TRUE; }
// Parse a float in 'token'. // Report an error if it's an integer or not a string of digits or empty float getfloat(int linenr, int pos, char * token, char * wholeline) { int intval = 0; float fltval = 0.0; int ntype; ntype = getnumber(token, &intval, &fltval); if(ntype == -2) { // Found rubbish tokenerr("Float", linenr, pos, token, 1, wholeline); } else if (ntype == -1) { // Found nothing tokenerr("Float", linenr, pos, "nothing", 0, wholeline); } else if (ntype == 1) { // Found integer tokenerr("Float", linenr, pos, "integer", 0, wholeline); } return fltval; }
void getevents(){ int file; TString name; for(int dataset=0;dataset<3;dataset++){ int totevent=0; if(dataset==0){ file = 221; name = "pPbReReco";} else if(dataset==1){ file = 556; name = "pPb";} else{ file = 703; name = "Pbp";} for(int i=0;i<file;i++){ TFile *f = TFile::Open(Form("/lio/lfs/cms/store/user/qixu/flow/PACorrHM/skim/PFcandi/pbs/M300260/FlowHM%s/pPbskimAnaTree_%d.root",name.Data(),i)); TTree *tr = (TTree*)f->Get("demo/PFTree"); int nevent=tr->GetEntries(); totevent+=nevent; f->Close(); delete f; } TFile *fskim = TFile::Open(Form("/cms/store/user/qixu/flow/PACorrHM/skim/tracknormcpt03to6/multiM300260/FlowLYZHM%s/mergedTree.root",name.Data())); TTree *tree = (TTree*)fskim->Get("demo/TrackTree"); int neventfromtrack = tree->GetEntries(); fskim->Close(); int totevent1=0; for(int i=0;i<getnumber(Form("/home/xuq7/HI/flow/LYZ/v2/PFcandpt01to10/M300260/filelistcrab%s.dat",name.Data()));i++){ string crabfilename = readline(Form("/home/xuq7/HI/flow/LYZ/v2/PFcandpt01to10/M300260/filelistcrab%s.dat",name.Data()),i); TFile *fcrab = TFile::Open(crabfilename.c_str()); TTree *tr1 = (TTree*)fcrab->Get("demo/PFTree"); int nevent1 = tr1->GetEntries(); totevent1+=nevent1; fcrab->Close(); delete fcrab; } cout<<"Pbs result for "<<name<<" = "<<totevent<<";Crab result = "<<totevent1<<"; track result = "<<neventfromtrack<<endl; } TFile *ftot = TFile::Open("/home/xuq7/HI/flow/LYZ/v2/tracknormcpt03to6/M300260/mergedV_Sum.root"); TVectorD* Nevent = (TVectorD*)ftot->Get("Nevent"); cout<<"totevent = "<<(*Nevent)[0]<<endl; ftot->Close(); }
uint8 DreamGenContext::printslow(const uint8 *string, uint16 x, uint16 y, uint8 maxWidth, bool centered) { data.byte(kPointerframe) = 1; data.byte(kPointermode) = 3; const Frame* charSet = (const Frame *)segRef(data.word(kCharset1)).ptr(0, 0); do { uint16 offset = x; uint16 charCount = getnumber(charSet, string, maxWidth, centered, &offset); do { uint8 c0 = string[0]; uint8 c1 = string[1]; uint8 c2 = string[2]; c0 = engine->modifyChar(c0); printboth(charSet, &offset, y, c0, c1); if ((c1 == 0) || (c1 == ':')) { return 0; } if (charCount != 1) { c1 = engine->modifyChar(c1); data.word(kCharshift) = 91; uint16 offset2 = offset; printboth(charSet, &offset2, y, c1, c2); data.word(kCharshift) = 0; for (int i=0; i<2; ++i) { uint16 mouseState = waitframes(); if (mouseState == 0) continue; if (mouseState != data.word(kOldbutton)) { return 1; } } } ++string; --charCount; } while (charCount); y += 10; } while (true); }
void DreamGenContext::printdirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered) { data.word(kLastxpos) = x; const Frame *charSet = (const Frame *)segRef(data.word(kCurrentset)).ptr(0, 0); while (true) { uint16 offset = x; uint8 charCount = getnumber(charSet, *string, maxWidth, centered, &offset); uint16 i = offset; do { uint8 c = (*string)[0]; uint8 nextChar = (*string)[1]; ++(*string); if ((c == 0) || (c == ':')) { return; } c = engine->modifyChar(c); uint8 width, height; printchar(charSet, &i, *y, c, nextChar, &width, &height); data.word(kLastxpos) = i; --charCount; } while(charCount); *y += data.word(kLinespacing); } }
void main() { char *a; a = malloc(7*sizeof(char)); printf("enter the file name : \n"); scanf("%s",a); FILE *p; p = fopen(a,"r+"); if(p == NULL) { printf("invalid file name\n"); exit(1); } int n = getnumber(p); char **zo; zo = read(p,n); clock_t start = clock(); selection_sort(zo,n); clock_t end = clock(); double time = (end-start)/CLOCKS_PER_SEC; print(zo,n); printf("running time is: %f",time); }
int main() { while(scanf("%s",number)!=EOF){ int i,num; t=1; len=strlen(number); for(i=0;i<len;i++){ int xx; if(number[i]<='9') xx=number[i]-'0'; else if(number[i]>='a') xx=number[i]-'a'+36; else xx=number[i]-'A'+10; if(t<xx)t=xx; } num=getnumber(); for(i=t+1;i<=62;i++){ if(!(num%(i-1)))break; } printf("%d\n",i); } return 0; }
Interval getbounds(int *cnt, size_t hasuform, char *uform, Miscellaneous *miscell, int *tl_yychar) { char cc; Interval time; /* remove spaces */ do { cc = tl_Getchar(cnt, hasuform, uform); } while (cc == ' '); if (cc!='[' && cc!='(') { tl_UnGetchar(cnt); tl_yyerror("expected '(' or '[' after _", cnt, uform, tl_yychar, miscell); tl_exit(0); } /* is interval closed? */ if (cc=='[') time.l_closed = 1; else time.l_closed = 0; /* remove spaces */ do { cc = tl_Getchar(cnt, hasuform, uform); } while (cc == ' '); /* get lower bound */ /* Peer reviewed on 2013.11.08 by Dokhanchi, Adel */ miscell->TimeCon.l_par=0; miscell->TimeCon.u_par=0; miscell->lbd = true; time.lbd = getnumber(cc, cnt, hasuform, uform, tl_yychar, miscell); /* Peer reviewed on 2013.11.08 by Dokhanchi, Adel */ time.l_par = miscell->TimeCon.l_par; /*time.u_par = miscell->TimeCon.u_par;*/ if (e_le(time.lbd,miscell->zero,&(miscell->dp_taliro_param))) { tl_UnGetchar(cnt); tl_yyerror("past time operators are not allowed - only future time intervals.", cnt, uform, tl_yychar, miscell); tl_exit(0); } /* remove spaces */ do { cc = tl_Getchar(cnt, hasuform, uform); } while (cc == ' '); if (cc!=',') { tl_UnGetchar(cnt); tl_yyerror("timing constraints must have the format <num1,num2>.", cnt, uform, tl_yychar, miscell); tl_exit(0); } /* remove spaces */ do { cc = tl_Getchar(cnt, hasuform, uform); } while (cc == ' '); /* get upper bound */ miscell->lbd = false; time.ubd = getnumber(cc, cnt, hasuform, uform, tl_yychar, miscell); /* Peer reviewed on 2013.11.08 by Dokhanchi, Adel time.l_par = miscell->TimeCon.l_par;*/ time.u_par = miscell->TimeCon.u_par; if (e_ge(time.lbd,time.ubd,&(miscell->dp_taliro_param))) { tl_UnGetchar(cnt); tl_yyerror("timing constraints must have the format <num1,num2> with num1 <= num2.", cnt, uform, tl_yychar, miscell); tl_exit(0); } /* remove spaces */ do { cc = tl_Getchar(cnt, hasuform, uform); } while (cc == ' '); if (cc!=']' && cc!=')') { tl_UnGetchar(cnt); tl_yyerror("timing constraints must have the format <num1,num2>, where > is from the set {),]}", cnt, uform, tl_yychar, miscell); tl_exit(0); } /* is interval closed? */ if (cc==']') time.u_closed = 1; else time.u_closed = 0; return(time); }
INT32 GisLexAwkt::GetToken() { // Save start position of the previous symbol m_cprev = m_cc; // Save previous token m_lastToken = m_token; // Get next not blank character m_ch = find_nonblank(); // Stream is over if (m_ch == '\0') { m_token = GisToken_End; m_prevToken = m_token; return m_token; } // Is it keyword ? if (iswalpha(m_ch)) { wchar_t word[maxCharLength]; // Get keyword getword(word, sizeof(word)/sizeof(wchar_t)); // Is it a valid keyword for this grammar? INT32 tktmp; if ((tktmp = FindKeyWord(word, g_aAwktWords, AWKTKEYWORDCOUNT)) != GisToken_Undefined) { m_token = tktmp; } else { m_token = GisToken_Undefined; } } // Is it a numeric constant? else if (iswdigit(m_ch)) { // m_token is real or integer number getnumber(false); } // negative values else if (m_ch == '-') { m_ch = if_getch(); m_ch = find_nonblank(); getnumber(true); } // comma else if (m_ch == ',') { m_token = GisToken_Comma; m_ch = if_getch(); } // left parenthesis else if (m_ch == '(') { m_token = GisToken_LeftParenthesis; m_ch = if_getch(); } // right parenthesis else if (m_ch == ')') { m_token = GisToken_RightParenthesis; m_ch = if_getch(); } // something bad else { m_token = GisToken_Error; m_ch = if_getch(); } m_prevToken = m_token; return m_token; }
int main() { FILE* fp=fopen("input.txt", "rb"); if(!fp) { fprintf(stderr, "[ERROR] Can not open file 'input.txt' for reading (%d).\n", __LINE__); return 1; } FILE* fp2=fopen("output2.txt", "wb"); if(!fp2) { fprintf(stderr, "[ERROR] Can not open file 'output.txt' for writing (%d).\n", __LINE__); return 2; } char buf[5];//2 digits, \r\n, \0 int res=0; int size=1; int number=0; while(size>0) { res=getnumber(buf, 5, ' ', fp); assert(buf[0]>='0'); assert(buf[0]<='9'); int size=(buf[0]-'0'); if(buf[1]>='0'&&buf[1]<='9') { size*=10; size+=(buf[1]-'0'); } memset(buf, '\0', 5); printf("[INFO] size=%d\n", size); if(size==0) { fprintf(stderr, "[INFO] end of file (%d).\n", __LINE__); break; } char* tableau=(char*)calloc(size, sizeof(char)); int index=0; for(int i=0;i<size;++i) { res=getnumber(buf, 5, ' ', fp); number=(buf[0]-'0'); if(res==2) { number*=10; number+=(buf[1]-'0'); } memset(buf, '\0', 5); assert( res==1 || res==2 ); tableau[index]=number; ++index; } //tableau read int sum=0; for(int i=0;i<size;++i) { sum+=tableau[i]; } printf("[INFO] sum=%d\n", sum); if(sum/size*size==sum) { printf("[INFO] équilibrage possible.\n"); int avg=sum/size; printf("[INFO] valeur moyenne: %d\n", avg); res=0; for(int i=0;i<size;++i) { if(tableau[i]!=avg) res=1; } /*équilibrage start*/ if(res==0) { printf("tableau déjà équilibré.\n"); } int iter=0; fprintf(fp2, "%d : ", iter); show(fp2, tableau, size); while(res!=0) { res=0; for(int i=0;i<size;++i) { if(tableau[i]!=avg) res=1; } if(res==0) break; /*équilibrage start*/ for(int i=0;i<size-1;++i) { if( tableau[i]>avg && tableau[i+1]<=avg ) { --tableau[i]; ++tableau[i+1]; } /*else if( tableau[i]<avg && tableau[i+1]>=avg ) { ++tableau[i]; --tableau[i+1]; }//*/ else if( tableau[i]>avg && tableau[i+1]>=avg && tableau[i]>(tableau[i+1]+1) ) { --tableau[i]; ++tableau[i+1]; } /*else if( tableau[i]<avg && tableau[i+1]<=avg && tableau[i]<(tableau[i+1]-1) ) { ++tableau[i]; --tableau[i+1]; }//*/ else if( i>0) { if( tableau[i]>avg && tableau[i-1]<=avg ) { --tableau[i]; ++tableau[i-1]; } /*else if( tableau[i]<avg && tableau[i-1]>=avg ) { ++tableau[i]; --tableau[i-1]; }//*/ else if( tableau[i]>avg && tableau[i-1]>=avg && tableau[i]>(tableau[i-1]+1) ) { --tableau[i]; ++tableau[i-1]; } /*else if( tableau[i]<avg && tableau[i-1]<=avg && tableau[i]<(tableau[i-1]-1) ) { ++tableau[i]; --tableau[i-1]; }//*/ } } { int i=size-1; //repeat start if( tableau[i]>avg && tableau[i-1]<=avg ) { --tableau[i]; ++tableau[i-1]; } /*else if( tableau[i]<avg && tableau[i-1]>=avg ) { ++tableau[i]; --tableau[i-1]; }//*/ else if( tableau[i]>avg && tableau[i-1]>=avg && tableau[i]>(tableau[i-1]+1) ) { --tableau[i]; ++tableau[i-1]; } /*else if( tableau[i]<avg && tableau[i-1]<=avg && tableau[i]<(tableau[i-1]-1) ) { ++tableau[i]; --tableau[i-1]; }//*/ } //repeat stop ++iter; fprintf(fp2, "%d : ", iter); show(fp2, tableau, size); if(iter==15000) { printf("[INFO] probably error\n"); break; } } /*équilibrage stop*/ } else { printf("[INFO] équilibrage PAS possible.\n"); fprintf(fp2, "-1\n"); } res=getnumber(buf, 5, ' ', fp); assert(res==0);//empty line assert(buf[0]=='\0'||buf[0]=='\r'||buf[0]=='\n'); } fclose(fp2); fp2=fopen("output2.txt", "rb"); FILE* fp3=fopen("output.txt", "wb"); long pos=0;//début iter long pos2=0;//fin iter long pos3=0;//temp char* buffer=(char*)calloc(6400, sizeof(char)); number=-1; int number2=-2; int number3=-2; number=0; pos=ftell(fp2); while(!feof(fp2)) { memset(buffer, '\0', 6400); if(fgets(buffer, 6400, fp2)==NULL) {//lire ligne if(feof(fp2)) { /*printf("(%d) ", __LINE__); printf("End-Of-File.\n");//*/ } } sscanf(buffer, "%d ", &number);//récupérer numéro iter if(number==-2) break; if(number>number2) { number2=number; pos3=ftell(fp2);//position dernière iter (après) } else {//plus petit = new tableau pos2=pos3;//set fin iter fprintf(fp3, "%d\n", number2);//dernière iter fseek(fp2, pos, SEEK_SET);//go début iter while(ftell(fp2)<pos2) { if(fgets(buffer, 6400, fp2)==NULL) {//lire ligne if(feof(fp2)) { /*printf("(%d) ", __LINE__); printf("End-Of-File.\n");//*/ } break; } fprintf(fp3, "%s", buffer); } fprintf(fp3, "\n"); pos=pos2; number=-1; number2=-2; number3=-2; } if(strcmp(buffer, "-1")==0||strcmp(buffer, "-1\r")==0||strcmp(buffer, "-1\n")==0||strcmp(buffer, "-1\r\n")==0||strcmp(buffer, "-1\n\r")==0) { fprintf(fp3, "-1\n\n"); res=getnumber(buf, 5, ' ', fp); assert(res==0); if(feof(fp2)) break; res=getnumber(buf, 5, ' ', fp); assert(res==0); if(feof(fp2)) break; number=-1; number2=-2; number3=-2; pos=ftell(fp2); pos2=pos; pos3=pos; continue; } } free(tableau); fclose(fp3); fclose(fp2); fclose(fp); return 0; }