/* GSoC12: Tobenna Peter, Igwe */ Rat parseRat(char* srat, const char* info, int j) { char snum[MAXSTR], sden[MAXSTR]; mp num, den; atoaa(srat, snum, sden); atomp(snum, num); if (sden[0]=='\0') itomp(1, den); else { atomp(sden, den); if (negative(den) || zero(den)) { char str[MAXSTR]; mptoa(den, str); fprintf(stderr, "Warning: Denominator "); fprintf(stderr, "%s of %s[%d] set to 1 since not positive\n", str, info, j+1); itomp(1, den); } } Rat r = mptorat(num, den); return r; }
long readrat ( lrs_mp Na, lrs_mp Da ) /* read a rational or integer and convert to lrs_mp with base BASE */ /* returns true if denominator is not one */ /* returns 999 if premature end of file */ { char in[MAXINPUT], num[MAXINPUT], den[MAXINPUT]; if ( fscanf ( lrs_ifp, "%s", in ) == EOF ) { fprintf ( lrs_ofp, "\nInvalid rational input" ); exit ( 1 ); } if ( !strcmp ( in, "end" ) ) { /*premature end of input file */ return ( 999L ); } atoaa ( in, num, den ); /*convert rational to num/dem strings */ atomp ( num, Na ); if ( den[0] == '\0' ) { itomp ( 1L, Da ); return ( FALSE ); } atomp ( den, Da ); return ( TRUE ); }
/* returns 999 if premature end of file */ long plrs_readrat (lrs_mp Na, lrs_mp Da, const char* rat) { char in[MAXINPUT], num[MAXINPUT], den[MAXINPUT]; strcpy(in, rat); atoaa (in, num, den); /*convert rational to num/dem strings */ atomp (num, Na); if (den[0] == '\0') { itomp (1L, Da); return (FALSE); } atomp (den, Da); return (TRUE); }