Esempio n. 1
0
File: fmt.c Progetto: xyuan/Path64
int
ne_d (unit *ftnunit, char *s, char **p)
{
   int             n, x, sign = 0;

   switch (*s) {
   default:
      return (0);
   case ':':
      (void) op_gen (ftnunit, COLON, 0, 0, 0);
      break;
   case '$':
      if (ftnunit->uwrt & WR_OP)
          (void) op_gen (ftnunit, NONL, 0, 0, 0);
      break;
   case 'B':
   case 'b':
      if (*++s == 'z' || *s == 'Z')
	 (void) op_gen (ftnunit, BZ, 0, 0, 0);
#ifdef I90
      else if (*s == 'n' || *s == 'N')
	 (void) op_gen (ftnunit, BN, 0, 0, 0);
      else {
	 s--;	/* get back to the initial 'B' */
	 return(0);
      }
#else
      else
	 (void) op_gen (ftnunit, BN, 0, 0, 0);
#endif
      break;
   case 'S':
   case 's':
      if (*(s + 1) == 's' || *(s + 1) == 'S') {
	 x = SS;
	 s++;
      } else if (*(s + 1) == 'p' || *(s + 1) == 'P') {
	 x = SP;
	 s++;
      } else
	 x = S;
      (void) op_gen (ftnunit, x, 0, 0, 0);
      break;
   case '/':
#ifdef I90
      (void) op_gen (ftnunit, SLASH, 1, 0, 0);
#else
      (void) op_gen (ftnunit, SLASH, 0, 0, 0);
#endif
      break;
   case '-':
      sign = 1;			/* OUTRAGEOUS CODING TRICK */
   case '+':
      s++;			/* OUTRAGEOUS CODING TRICK */
   case '0':
   case '1':
   case '2':
   case '3':
   case '4':
   case '5':
   case '6':
   case '7':
   case '8':
   case '9':
   case MYESC:
      s = gt_num (ftnunit, s, &n);
      switch (*s) {
      default:
	 return (0);
      case 'P':
      case 'p':
	 if (sign) n = -n;
	 (void) op_gen (ftnunit, P, n, 0, 0);
	 break;
      case 'X':
      case 'x':
	 if (sign) return (0);
	 (void) op_gen (ftnunit, X, n, 0, 0);
	 break;
      case 'H':
      case 'h':
	 if (sign) return (0);
	 (void) op_gen (ftnunit, H, n, (long) (s + 1), 0);
	 s += n;
	 break;
#ifdef I90
      case '/':
	 if (sign) return (0);
	 (void) op_gen (ftnunit, SLASH, n, 0, 0);
	 break;
#endif
      }
      break;
   case MYQUOTE:
   case MYHOLL:
   case '"':
   case '\'':
      (void) op_gen (ftnunit, APOS, (long) s, 0, 0);
      if ((*p = ap_end (ftnunit, s)) == NULL)
	 return (0);
      return (1);
   case 'T':
   case 't':
      if (*(s + 1) == 'l' || *(s + 1) == 'L') {
	 x = TL;
	 s++;
      } else if (*(s + 1) == 'r' || *(s + 1) == 'R') {
	 x = TR;
	 s++;
      } else
	 x = T;
      s = gt_num (ftnunit, s + 1, &n);
      s--;
      (void) op_gen (ftnunit, x, n, 0, 0);
      break;
   case 'X':
   case 'x':
      (void) op_gen (ftnunit, X, 1, 0, 0);
      break;
   case 'P':
   case 'p':
      (void) op_gen (ftnunit, P, 1, 0, 0);
      break;
   }
Esempio n. 2
0
ne_d(char *s, char **p)
#endif
{  int n,x,sign=0;
  struct syl *sp;
  switch(*s)
  {
  default:
         return(0);
  case ':': (void) op_gen(COLON,0,0,0); break;
  case '$':
         (void) op_gen(NONL, 0, 0, 0); break;
  case 'B':
  case 'b':
         if(*++s=='z' || *s == 'Z') (void) op_gen(BZ,0,0,0);
         else (void) op_gen(BN,0,0,0);
         break;
  case 'S':
  case 's':
         if(*(s+1)=='s' || *(s+1) == 'S')
         {       x=SS;
                s++;
         }
         else if(*(s+1)=='p' || *(s+1) == 'P')
         {       x=SP;
                s++;
         }
         else x=S;
         (void) op_gen(x,0,0,0);
         break;
  case '/': (void) op_gen(SLASH,0,0,0); break;
  case '-': sign=1;
  case '+':       s++;       /*OUTRAGEOUS CODING TRICK*/
  case '0': case '1': case '2': case '3': case '4':
  case '5': case '6': case '7': case '8': case '9':
         if (!(s=gt_num(s,&n,0))) {
 bad:                *p = 0;
                return 1;
                }
         switch(*s)
         {
         default:
                return(0);
         case 'P':
         case 'p': if(sign) n= -n; (void) op_gen(P,n,0,0); break;
         case 'X':
         case 'x': (void) op_gen(X,n,0,0); break;
         case 'H':
         case 'h':
                sp = &f__syl[op_gen(H,n,0,0)];
                sp->p2.s = s + 1;
                s+=n;
                break;
         }
         break;
  case GLITCH:
  case '"':
  case '\'':
         sp = &f__syl[op_gen(APOS,0,0,0)];
         sp->p2.s = s;
         if((*p = ap_end(s)) == NULL)
                return(0);
         return(1);
  case 'T':
  case 't':
         if(*(s+1)=='l' || *(s+1) == 'L')
         {       x=TL;
                s++;
         }
         else if(*(s+1)=='r'|| *(s+1) == 'R')
         {       x=TR;
                s++;
         }
         else x=T;
         if (!(s=gt_num(s+1,&n,0)))
                goto bad;
         s--;
         (void) op_gen(x,n,0,0);
         break;
  case 'X':
  case 'x': (void) op_gen(X,1,0,0); break;
  case 'P':
  case 'p': (void) op_gen(P,1,0,0); break;
  }
  s++;
  *p=s;
  return(1);
}
Esempio n. 3
0
File: fmt.c Progetto: troore/scale
int
ne_d(const char *s, const char **p)
{
  int n;
  int x;
  int sign = 0;
  struct syl *sp;

  switch (*s) {
  default:  return 0;
  case ':': (void) op_gen(COLON, 0, 0, 0); break;
  case '$': (void) op_gen(NONL, 0, 0, 0); break;
  case 'B':
  case 'b':
    if ((*++s=='z') || (*s == 'Z'))
      (void) op_gen(BZ, 0, 0, 0);
    else
      (void) op_gen(BN, 0, 0, 0);
    break;
  case 'S':
  case 's':
    if ((*(s + 1) == 's') || (*(s + 1) == 'S')) {
      x = SS;
      s++;
    } else if ((*(s + 1) == 'p') || (*(s + 1) == 'P')) {
      x = SP;
      s++;
    } else
      x = S;
    (void) op_gen(x, 0, 0, 0);
    break;
  case '/': (void) op_gen(SLASH, 0, 0, 0); break;
  case '-': sign = 1;
  case '+': s++;	/*OUTRAGEOUS CODING TRICK*/
  case '0': case '1': case '2': case '3': case '4':
  case '5': case '6': case '7': case '8': case '9':
    s = gt_num(s, &n);
    switch (*s) {
    default:  return 0;
    case 'P':
    case 'p': if (sign) n= -n; (void) op_gen(P, n, 0, 0); break;
    case 'X':
    case 'x': (void) op_gen(X, n, 0, 0); break;
    case 'H':
    case 'h':
      sp = &f__syl[op_gen(H, n, 0, 0)];
      *(const char **)&sp->p2 = s + 1;
      s += n;
      break;
    }
    break;
  case GLITCH:
  case '"':
  case '\'':
    sp = &f__syl[op_gen(APOS, 0, 0, 0)];
    *(const char **)&sp->p2 = s;
    if ((*p = ap_end(s)) == NULL)
      return 0;
    return 1;
  case 'T':
  case 't':
    if ((*(s + 1) == 'l') || (*(s + 1) == 'L')) {
      x=TL;
      s++;
    } else if ((*(s + 1) == 'r') || (*(s + 1) == 'R')) {
      x=TR;
      s++;
    } else
      x = T;
    s=gt_num(s + 1, &n);
    s--;
    (void) op_gen(x, n, 0, 0);
    break;
  case 'X':
  case 'x': (void) op_gen(X, 1, 0, 0); break;
  case 'P':
  case 'p': (void) op_gen(P, 1, 0, 0); break;
  }

  s++;
  *p = s;

  return 1;
}