#include <perms.h>
void OLDPS(_imp_string S) {
  _imp_enter();
  extern _imp_string DATE(void);
  int I;
  int J;
  int K;
  int SS;
  int NBIP;
  _imp_string ST49;
  _imp_string ST50;
  _imp_string ST51;
  extern void DEFINE(_imp_string S);
  int CLETT[1000 - 0 + 1];
  int SYMBOL[3000 - 1300 + 1];
  int CC[300 - 0 + 1];
  int CNEXT;
  int DNEXT;
  int CNUM;
  int DNUM;
  int ALT;
  int DEF;
  int ASL;
  int NIDFLAG;
  int KK[1200 - 1001 + 1], DWORD[1200 - 1001 + 1];
  int DLETT[1000 - 0 + 1];
  int CWORD[200 - 1 + 1];
  auto void READSTRING(int TERMINATOR);
  auto void RECORD(int *WORD, int *LETT, int *NUM, int *NEXT);
  auto void LOOKUP(int *WORD, int *LETT, int FIRST, int LAST, int INSERT);
  auto void PDDICT(void);
  auto void PRINTSTR(int *CC, int PTR);
  auto void PCDICT(void);
  if (!_imp_cond_resolve(S, ST49, _imp_str_literal(","), ST50,
                         _imp_str_literal(","),
                         ST51)) { /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
    ;
  } /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
      /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  ;
  ASL = 1300;
  CNEXT = 0;
  DNEXT = 0;
  CNUM = 0;
  NIDFLAG = 0;
  DNUM = 1000;
  READ(NBIP);
NEXTS:;
  /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
  if (I == 'D') {
    /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
    READSTRING(')');
    RECORD(DWORD, DLETT, DNUM, DNEXT);
    goto NEXTS;
  }
  if (I == 'P') goto PHRS;
  if (I == 'E') goto EEND;
  goto NEXTS;
PHRS:;
  NEWLINES(2); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  ; /*ERROR: name_sym_idx is -1!*/            /*C_NAME*/
  ; /*ERROR: name_sym_idx is -1!*/            /*C_NAME*/
  ;
  READSTRING(')');
  PRINTSTR(CC, 0); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  ;
  LOOKUP(DWORD, DLETT, 1001 + NBIP, DNUM, 0);
  KK[I] = ASL;
  DEF = ASL;
  ALT = ASL + 1;
  ASL = ASL + 2;
NEXTP:;
  /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
      /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  ;
  if (I == '(') goto BIPORPHR;
  if (I == '\'') goto LIT;
  if (I == ',') {
    SYMBOL[ALT] = ASL;
    ALT = ASL;
    ASL = ASL + 1;
    goto NEXTP;
  }
  if (I == ';') {
    SYMBOL[ALT] = ASL;
    SYMBOL[DEF] = ASL;
    goto NEXTS;
  }
  if (I == '0') {
    SYMBOL[ASL] = 1000;
    ASL = ASL + 1;
    goto NEXTP;
  }
  if (I == '*') {
    SYMBOL[ASL] = 999;
    ASL = ASL + 1;
    goto NEXTP;
  }
  goto NEXTP;
BIPORPHR:;
  READSTRING(')');
  PRINTSTR(CC, 0); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  ;
  LOOKUP(DWORD, DLETT, 1001, DNUM, 0);
  SYMBOL[ASL] = I;
  ASL = ASL + 1;
  goto NEXTP;
LIT:;
  READSTRING('\'');
  PRINTSTR(CC, 0); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  ;
  LOOKUP(CWORD, CLETT, 1, CNUM, 1);
  SYMBOL[ASL] = I;
  ASL = ASL + 1;
  goto NEXTP;
EEND:;
  PCDICT();
  PDDICT();
  for (I = 1300; I != ASL - 1 + 1; I += 1) {
    if (1 <= SYMBOL[I] && SYMBOL[I] <= CNUM) SYMBOL[I] = CWORD[SYMBOL[I]];
    if (1001 + NBIP <= SYMBOL[I] && SYMBOL[I] <= DNUM)
      SYMBOL[I] = KK[SYMBOL[I]];
  }
  SS = KK[DNUM];
  NEWLINE();
  for (K = 1; K != 2 + 1; K += 1) {
    if (K == 2) /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      ; /*ERROR: name_sym_idx is -1!*/         /*C_NAME*/
    ; /*ERROR: name_sym_idx is -1!*/           /*C_NAME*/
    ; /*ERROR: name_sym_idx is -1!*/           /*C_NAME*/
    ; /*ERROR: name_sym_idx is -1!*/           /*C_NAME*/
    ;
    for (I = 0; I != CNEXT - 1 + 1; I += 1) {
      /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
      J = ',';
      if (I == CNEXT - 1) J = ';'; /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      ;
      if (I - (I / 14) * 14 == 0) NEWLINE();
    }
    NEWLINES(2);
    NEWLINES(2); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
    ; /*ERROR: name_sym_idx is -1!*/            /*C_NAME*/
    ; /*ERROR: name_sym_idx is -1!*/            /*C_NAME*/
    ;
    for (I = 1300; I != ASL - 1 + 1; I += 1) {
      /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
      J = ',';
      if (I == ASL - 1) J = ';'; /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      ;
      if ((I - 1299) - ((I - 1299) / 10) * 10 == 1) NEWLINE();
    }
    NEWLINES(2); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
    ; /*ERROR: name_sym_idx is -1!*/            /*C_NAME*/
    ;
    NEWLINES(2);
    if (NIDFLAG != 0) {
      _imp_leave();
      return;
    }
  }
  /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
      /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  ;
  {
    _imp_leave();
    return;
  }
  auto void READSTRING(int TERMINATOR) {
    _imp_enter();
    int UNDER;
    UNDER = 0;
    J = 0;
  NEXTS:;
    /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
    if (I == '%') {
      UNDER = 128;
      goto NEXTS;
    }
    if ('A' <= I && I <= 'Z')
      I = I + UNDER;
    else
      UNDER = 0;
    if (I == 32) goto NEXTS;
    if (I == TERMINATOR) {
      CC[0] = J;
      {
        _imp_leave();
        return;
      }
    }
    J = J + 1;
    CC[J] = I;
    goto NEXTS;
    _imp_leave();
  }
  auto void RECORD(int *WORD, int *LETT, int *NUM, int *NEXT) {
    _imp_enter();
    *NUM = NUM + 1;
    *WORD(/*index missing*/) = NEXT;
    for (I = 0; I != CC[0] + 1; I += 1) {
      *LETT(/*index missing*/) = CC[I];
    }
    *NEXT = NEXT + CC[0] + 1;
    _imp_leave();
  }
  auto void LOOKUP(int *WORD, int *LETT, int FIRST, int LAST, int INSERT) {
    _imp_enter();
    I = FIRST;
    while (I <= LAST) {
      J = WORD;
      for (K = 0; K != LETT + 1; K += 1) {
        if (LETT != CC[K]) goto NXT;
      }
      {
        _imp_leave();
        return;
      }
    NXT:;
      I = I + 1;
    }
    if (INSERT == 0) {
      /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
      PRINTSTR(CC, 0);
      NIDFLAG = NIDFLAG + 1;
      {
        _imp_leave();
        return;
      }
    }
    RECORD(WORD, LETT, CNUM, CNEXT);
    I = CNUM;
    _imp_leave();
  }
  auto void PCDICT(void) {
    _imp_enter();
    int J;
    int K;
    int L;
    NEWPAGE(); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
    ;
    for (J = 1; J != CNUM + 1; J += 1) {
      K = CWORD[J]; /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      ;
      SPACES(2);
      PRINTSTR(CLETT, K);
      SPACES(17 - SS);
      if ((J & 3) == 0) NEWLINE();
    }

    _imp_leave();
  }
  auto void PRINTSTR(int *CC, int PTR) {
    _imp_enter();
    int I;
    int J;
    int K;
    int DEL;
    SS = CC[PTR];
    K = SS;
    DEL = 0;
    for (I = 1; I != K + 1; I += 1) {
      J = CC[PTR + I];
      if (DEL == 0 && J > 128) {
        SS = SS + 1;
        DEL = 1; /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
        ;
      } /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/;
    }

    _imp_leave();
  }
  auto void PDDICT(void) {
    _imp_enter();
    int J;
    NEWLINES(4); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
    ;
    for (J = 1001; J != DNUM + 1; J += 1) {
      if (J <= 1000 + NBIP) /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
        ;
      else /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
        ;
      SPACES(2);
      PRINTSTR(DLETT, DWORD[J]);
      SPACES(17 - SS);
      if (((J - 1000) & 3) == 0) NEWLINE();
    }

    _imp_leave();
  }

  _imp_leave();
}
