char* en_en::getVerbPastProgressive(int v,int f,int s,int st,char* midadverb){ char t = getVerbType(v,st); if (st<6 && t!='4') { int bl,il; bl=getVerbLength(1,f,s,st-2,&blank); char* preadd=getVerbPreAdd(v); il=strlen(preadd); char* gerund = NULL; char* buffer = NULL; if (question==0) { buffer = (char*)calloc(bl+il+5,sizeof(char)); gerund = buffer; } else if (question==1) { buffer = (char*) calloc(bl+1,sizeof(char)); QuestionVerb1 = (char*) calloc(il+5,sizeof(char)); gerund = QuestionVerb1; } strcat(buffer,getVerb(1,f,s,st-2,&blank)); strcat(gerund,midadverb); strcat(gerund,preadd); strcat(gerund,"ing "); return buffer; }else if(st<10 && t!='4'){ int bl,il; bl=getVerbLength(2,f,s,1,&blank); bl+=getVerbLength(1,0,s,3,midadverb); char* preadd=getVerbPreAdd(v); il=strlen(preadd); char* gerund = NULL; char* buffer = NULL; if (question==0) { buffer = (char*)calloc(bl+il+5,sizeof(char)); gerund = buffer; } else if (question==1) { buffer = (char*) calloc(bl+1,sizeof(char)); QuestionVerb1 = (char*) calloc(il+5,sizeof(char)); gerund = QuestionVerb1; } strcat(buffer,getVerb(2,f,s,1,&blank)); strcat(gerund,getVerbPast(1,0,s,3,midadverb)); strcat(gerund,preadd); strcat(gerund,"ing "); return buffer; }else if (t=='4'){ return getVerbPast(v,f,s,4,(char*)""); } else{ printf("OOPS"); } }
char* en_en::getVerbPreAdd(int v){ FILE* rFile=fopen(DICTIONARY EN_EN_FOLDER "verb_present","r"); gotoline(rFile,v); char* buffer=(char*)malloc(BUFFER_SIZE); fgets(buffer,BUFFER_SIZE-1,rFile); fclose(rFile); char t=buffer[0]; if (t=='1'){ //Look up second word form int u=0,i=0; while (u<2){ if (buffer[i]=='_') u++; else if (buffer[i]==0) break; else if (buffer[i]=='\n') break; i++; } u=0; while (buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n') buffer[u++]=buffer[i++]; buffer[u++]=0; }else if (t=='0'){ char* b=getVerb(v,10,0,1,&blank); int i=0; while (b[i]!=0) i++; //[(space)] [\0] //We are removing the space here, because it is added in getVerb because the function thinks we will just add it straight to the sentence. b[i-1]=0; return b; }else{ int i=0; while(buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n') i++; i++; int u=0; while (buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n') buffer[u++]=buffer[i++]; //Now follow all the english rules //http://www.oxforddictionaries.com/words/verb-tenses-adding-ed-and-ing //http://www.grammar.cl/Notes/Spelling_ING.htm if (buffer[u-1]=='e' && buffer[u-2]=='i'){ u-=2; buffer[u++]='y'; } else if (buffer[u-1]=='e' && (buffer[u-2]!='e' && buffer[u-2]!='y' && buffer[u-2]!='o')) u-=1; else if (buffer[u-1]=='c'){ buffer[u++]='k'; } else if (!isVowel(buffer[u-3])&&isVowel(buffer[u-2])&&!isVowel(buffer[u-1])&&buffer[u-1]!='x'&&buffer[u-1]!='y'&&buffer[u-1]!='z'&&buffer[u-1]!='w'){ buffer[u]=buffer[u-1]; u++; } buffer[u++]=0; } return buffer; }
char* en_en::getVerbFuturePastProgressive(int v, int f, int s, int st, char* midadverb){ char* verb; verb = getVerb(v,f,1,8,midadverb); char* buf = (char*)calloc(sizeof(verb) + sizeof(EN_EN_FUTURE) + 1,sizeof(char)); strcat(buf,EN_EN_FUTURE); strcat(buf,verb); return buf; }
char* en_en::getVerbPassivePresent(int v,int f,int s,int st, char* midadverb){ if (st > 25) f = 0; char* fv = getVerb(1,f,s,st - 16,&blank); char* sv = getVerbPast(v,f,s,true,midadverb); char* buf = (char*) calloc(sizeof(fv) + sizeof(sv) + 1,sizeof(char)); strcat(buf,fv); strcat(buf,sv); return buf; }
std::string de::createSentence(){ int a=0; char endchar = '.'; if (question == 1){ data|=0x01; endchar = '?'; } else if (question > 1) { buf[a++] = &de_question_words[question-2][0]; endchar = '?'; data |= 0x01; } if (punctuation == false) endchar = NULL; if(verb1>0){ parseVerb(0,verb1); verb1=0; } if (verb2>0){ parseVerb(1,verb2); verb2=0; } char debug='a'; hasEndVerb=false; verbs[0]=v1; verbs[1]=v2; verbs[2]=v3; bool verb=false; bool splural=(snum>0) | s[0].plural; if(v1!=0) verb=true; if(data&0x1){ if(verb) buf[a++]=getVerb(v1,-1,splural?8:s[0].id,st); verb = false; } /*if (prepos_prepos[2]>0){ buf[a++]=getPreposObject(prepos_prepos[2],prepos_object[2].id,prepos_object[2].num,prepos_object[2].plural,prepos_object[2].typ); if(verb) buf[a++]=getVerb(v1,-1,splural?8:s[0].id,st); verb = false; }*/ for(int sc=0;sc<16;sc++){ if (s[sc].id>0){ if (sc>0) buf[a++]=", "; if (sc == snum && snum>0 && sctype==0) buf[a++]=DE_UNDNOMEN; else if (sc == snum && snum>0) buf[a++]=DE_ODERNOMEN; buf[a++]=getNounString(&s[sc]); } } if(verb)buf[a++]=getVerb(v1,-1,splural?8:s[0].id,st); for (int objid=0;objid<8;objid++){ for (int oc=0;oc<16;oc++){ if (obj[objid][oc].id>0){ if (oc>0) buf[a++]=", "; if (oc == objnum[objid] && objnum[objid]>0 && octype[objid]==0) buf[a++]=DE_UNDNOMEN; else if (oc == objnum[objid] && objnum[objid]>0) buf[a++] = DE_ODERNOMEN; buf[a++]=getNounString(&obj[objid][oc]); } } } if (neg){ buf[a++]=de_nicht; } if (getPreVerb2(v1)==1) buf[a++]=de_zu; if (v2!=0) buf[a++]=getOtherVerb(v1,v2); if (hasEndVerb) buf[a++]=endVerb; if(subClause!=NULL && conjunction > 0) { buf[a++]=getSubClause(); } int sl=0; for (int i=0;i<NUM_BUF;i++){ if(buf[i]!=NULL) sl+=strlen(buf[i]); } char* buffer = (char*)calloc(sl+4,sizeof(char)); for (int i=0;i<NUM_BUF;i++){ if(buf[i]!=NULL) { strcat(buffer,buf[i]); } } if (clause==false){ char* buf2 = buffer; buffer = (char*) calloc(strlen(buf2)+2,sizeof(char)); int len = strlen(buf2); int i=1; int j=1; char c; c = buf2[0]; if (c >= 'a' && c <= 'z') buffer[0]=c-32; else buffer[0]=c; while (i<len){ if (buf2[i]!=' '){ buffer[j++]=buf2[i++]; }else if (buf2[i+1]==','){ buffer[j++]=','; i=i+2; }else if (buf2[i+1]==0){ buffer[j++]=endchar; i++; }else buffer[j++]=buf2[i++]; } } return std::string(buffer); }
std::string de::createSubClause(){ if(verb1>0){ parseVerb(0,verb1); verb1=0; } if (verb2>0){ parseVerb(1,verb2); verb2=0; } int a=0; hasEndVerb=false; verbs[0]=v1; verbs[1]=v2; verbs[2]=v3; bool splural=(snum>0) | s[0].plural; /* if (prepos_prepos[2]!=0){ buf[a++]=getPreposObject(prepos_prepos[2],prepos_object[2].id,prepos_object[2].num,prepos_object[2].plural,prepos_object[2].typ); }*/ for(int sc=0;sc<16;sc++){ if (s[sc].id>0){ if (sc>0) buf[a++]=", "; if (sc == snum && snum>0 && sctype==0) buf[a++]=DE_UNDNOMEN; else if (sc == snum && snum>0) buf[a++]=DE_ODERNOMEN; buf[a++]=getNounString(&s[sc]); } } for (int objid=0;objid<8;objid++){ for (int oc=0;oc<16;oc++){ if (obj[objid][oc].id>0){ if (oc>0) buf[a++]=", "; if (oc == objnum[objid] && objnum[objid]>0 && octype[objid]==0) buf[a++]=DE_UNDNOMEN; else if (oc == objnum[objid] && objnum[objid]>0) buf[a++] = DE_ODERNOMEN; buf[a++]=getNounString(&obj[objid][oc]); } } } if (neg){ buf[a++]=de_nicht; } if (getPreVerb2(v1)==1) buf[a++]=de_zu; if (v2!=0) buf[a++]=getOtherVerb(v1,v2); //Get hasEndVerb getVerb(v1,-1,splural?8:s[0].id,st); if (hasEndVerb) buf[a++]=endVerb; //Verb goes at the end buf[a++]=getVerb(v1,-1,splural?8:s[0].id,st); if(subClause!=NULL && conjunction > 0) { buf[a++]=getSubClause(); } int sl=0; for (int i=0;i<NUM_BUF;i++){ if(buf[i]!=NULL) sl+=strlen(buf[i]); } char* buffer = (char*)calloc(sl+4,sizeof(char)); for (int i=0;i<NUM_BUF;i++){ if(buf[i]!=NULL) strcat(buffer,buf[i]); } return buffer; }
// command line argument(s) should be verbosity (optional) and input file int main(int argv, char * argc[]) { int verbose = 0; // 0 = non-verbose, 1 = verbose, 2 = show-rand FILE * fp = 0; int numArgs = argv; // get file pointer and verbosity argument if(numArgs == 2){ fp = fopen(argc[1], "r"); } else if(numArgs == 3){ verbose = getVerb(argc[1]); fp = fopen(argc[2], "r"); } // check for invalid file if(fp == NULL){ printf("FATAL ERROR: invalid file given\n"); exit(1); } char nextChar = ' '; int NUMOFPROCS = 0; while(NUMOFPROCS == 0){ nextChar = fgetc(fp); if(isdigit(nextChar)){ NUMOFPROCS = nextChar - '0'; // subtracts the ascii value for 0 from int value } } int i = 0; struct process procs[NUMOFPROCS]; while(i < NUMOFPROCS){ procs[i].a = getNextInt(fp); procs[i].b = getNextInt(fp); procs[i].c = getNextInt(fp); procs[i].io = getNextInt(fp); i++; } fclose(fp); // sort processes by order of start time struct process sortedprocs[NUMOFPROCS]; int sortflags[NUMOFPROCS]; // array to flag which processes have been sorted by time for(i = 0; i < NUMOFPROCS; i++){ sortflags[i] = 0; // set all to zero } int sortcount; int j; for(sortcount = 0; sortcount < NUMOFPROCS; sortcount++){ int minind; int mintime = INT_MAX; for(j = 0; j < NUMOFPROCS; j++){ // cycle through, checking each start against min if(procs[j].a < mintime && sortflags[j] == 0){ minind = j; mintime = procs[j].a; } } // add it to the appropriate place in the sortedprocs array sortedprocs[sortcount] = procs[minind]; sortflags[minind] = 1; } // ****** DO NOT EDIT PROCS OR SORTEDPROCS ****** // actual scheduling here //runUni(verbose, NUMOFPROCS, &procs, &sortedprocs); //runfcfs(verbose, NUMOFPROCS, &procs, &sortedprocs); runsjf(verbose, NUMOFPROCS, &procs, &sortedprocs); //runrr(verbose, NUMOFPROCS, &procs, &sortedprocs); }
char* en_en::getVerbPresent(int v,int f,int s,int st,char* midadverb){ if (f==-1){ int t=getNounType(s); f=getVerbFormFromSubjectType(t,s); } if (st==1){ FILE* rFile = fopen(DICTIONARY EN_EN_FOLDER "verb_present","r"); gotoline(rFile,v); char* buffer = (char*)malloc(BUFFER_SIZE); fgets(buffer,BUFFER_SIZE-1,rFile); fclose(rFile); char vt=buffer[0]; char of=f; if (vt!='0') f=0; int u=0; int i=0; while (u<=f){ char c=buffer[i]; if (c=='_') u++; else if (c=='\n'){ printf("Warning:\nThe form %d doesn't exist for verb %d!\nUsing form 0\n",f,v); return getVerb(v,0,s,1,midadverb); } i++; } //i should be at the start of form we want //copy form to start of buffer u=0; while (buffer[i]!='_' && buffer[i]!='\n' && buffer[i]!=0){ buffer[u++]=buffer[i++]; } //Now if SIMPLE tense on a regular verb, add conjugation if (vt!='0' && vt!='3' ){ if (of>2 && of<6){ if (buffer[u-1]=='o' || (buffer[u-1]=='s' && buffer[u-2]=='s') || (buffer[u-1]=='h' && buffer[u-2]=='s') || (buffer[u-1]=='h' && buffer[u-2]=='c') || (buffer[u-1]=='z' && buffer[u-2]=='z') || buffer[u-1]=='x') buffer[u++]='e'; buffer[u++]='s'; } } buffer[u++]=' '; buffer[u++]=0; if (neg && (vt=='3' || vt=='0')){ strcat(buffer,negativestmt); } char* ret=(char*)calloc(BUFFER_SIZE,sizeof(char)); strcat(ret,midadverb); if (neg && vt!='3' && vt!='0'){ if (of>2 && of<6) strcat(ret,EN_EN_DOESNOT); else strcat(ret,donot); } strcat(ret,buffer); return ret; } else if (st==0){ char t=getVerbType(v,st); if (t=='4'||t=='3'){ // printf("Can not create progressive tense with type %c verbs!\nUsing simple tense instead.\n",t); return getVerb(v,f,s,1,midadverb); } int bl,il; bl=getVerbLength(1,f,s,1,&blank); char* preadd=getVerbPreAdd(v); il=strlen(preadd); char* gerund=NULL; char* buffer = NULL; if (question==0) { buffer = (char*)calloc(bl+il+5,sizeof(char)); gerund = buffer; } else if (question>0) { buffer = (char*) calloc(bl+1,sizeof(char)); QuestionVerb1 = (char*) calloc(il+5,sizeof(char)); gerund = QuestionVerb1; } strcat(buffer,getVerb(1,f,s,1,&blank)); strcat(buffer,midadverb); strcat(gerund,preadd); strcat(gerund,"ing "); return buffer; } }
int en_en::getVerbLength(int v,int f,int s,int st,char* midadverb){ char* buffer=getVerb(v,f,s,st,midadverb); int l=strlen(buffer); return l; }
char* en_en::getVerbPast(int v,int f, int s,bool dr,char* midadverb) { FILE* rFile = fopen(DICTIONARY EN_EN_FOLDER "verb_past","r"); gotoline(rFile,v); char* buffer=(char*)malloc(BUFFER_SIZE); fgets(buffer,BUFFER_SIZE-1,rFile); fclose(rFile); char vt=buffer[0]; //just return preadd + (vt=='2' ? 'd' : 'ed' ) if (vt=='2' || vt=='3') { int el=vt-'1'; char* preadd=getVerbPreAdd(v); int il=strlen(preadd); char* buffer2=(char*)calloc(il+el,sizeof(char)); strcat(buffer2,midadverb); strcat(buffer2,preadd); if (vt=='3') strcat(buffer2,"e"); strcat(buffer2,"d "); // free(buffer); return buffer2; } else if (vt=='1') { int i=1; int f=dr?2:1; int u=0; while (u<f) { if (buffer[i]=='_') u++; if (buffer[i]=='\n') break; i++; } char* buffer2=(char*)calloc(BUFFER_SIZE,sizeof(char)); strcat(buffer2,midadverb); u=strlen(buffer2); while(1){ buffer2[u]=buffer[i]; i++; u++; if(buffer[i]=='\n' || buffer[i]=='_') break; } buffer2[u++]=' '; buffer2[u++]=0; return buffer2; } else if (vt=='0' || vt=='4'){ if (f==-1){ int t=getNounType(s); f=getVerbFormFromSubjectType(t,s); } char of=f; if (dr) f = 0; int u=0; int i=0; while (u<=f){ char c=buffer[i]; if (c=='_') u++; else if (c=='\n'){ printf("Warning:\nThe form %d doesn't exist for verb %d!\nUsing form 0\n",f,v); return getVerb(v,0,s,1,&blank); } i++; } //i should be at the start of form we want //copy form to start of buffer char* buffer2=(char*)calloc(BUFFER_SIZE,sizeof(char)); strcat(buffer2,midadverb); u=strlen(buffer2); while (buffer[i]!='_' && buffer[i]!='\n' && buffer[i]!=0){ buffer2[u++]=buffer[i++]; } buffer2[u++]=' '; buffer2[u++]=0; return buffer2; } else{ printf("ERROR:\n"); } return (char*)"failure in en_en::getVerbPast() "; }