#include <imp_perms.h>

// FILEOFEXTERNALSFOLLOWEDBYAMAINPROGRAM.

typedef struct RF {
  int I;
  float R;
  int IRF;
} RF;
// ARERECORDFORMATVARSINASUB-SCOPE?ORISITJUSTTHATFORMATSAREINADIFFERENTNAMESPACE?

// OWNSANDEXTERNALSARESIMPLERDECLARATIONS

extern int XI1;

extern int *XIN1;

extern float XR1;

extern int XI2;
extern int XI3;
extern float XCR1 = 3.1415;

extern float XRA1[(9) - (0) + 1]

    ;

extern float **XRAN1;

extern double XCLR1 = 3.1415;

extern double XLRA1[(9) - (0) + 1]

    ;

extern double **XLRAN1;

// externalintegernamearrayXINA1(0:9)

// externalintegernamearraynameXINAN1

extern _imp_string XS1;

extern _imp_string *XSN1;

extern _imp_string XSA1[(7) - (4) + 1]

    ;

extern _imp_string **XSAN1;

// externalstring(82)namearrayXSNA1(4:7)

// externalstring(82)namearraynameXSNAN1

/*pending name*/

extern recfm XREC1;

/*pending name*/

extern recfm *XRECN1;

/*pending name*/

extern recfm XRECA1[(3) - (2) + 1]

    ;

/*pending name*/

extern recfm **XRECAN1;

// externalrecord(RF)namearrayXRECNA1(2:3)

// externalrecord(RF)namearraynameXRECNAN1

int IFN1(void) {
  return XI1;

  /* End of Rt/Fn/Map/begin depth=0 */
};

int *IMAP1(void) {
  return XI1;

  /* End of Rt/Fn/Map/begin depth=0 */
};

void RT1(void) {
  int I1;

  void RT1(void){

      /* End of Rt/Fn/Map/begin depth=1 */

  };

  /* End of Rt/Fn/Map/begin depth=0 */
};

// externalpredicateTEST1

// true

// end

int _imp_mainep(int _imp_argc, char **_imp_argv) {
  static int *IMAP1(void);               //  <---------- auto
  int I1;

  int *IN1;

  short int SI1;

  short int *SIN1;

  char BI1;

  char *BIN1;

  float R1;

  // realslong

  float QR1;

  // realsnormal

  const float CR1 = 3.1415;

  double LR1;

  const double CLR1 = 3.1415;

  int IFN1(void) {
    return I1;

    /* End of Rt/Fn/Map/begin depth=1 */
  };

  int *IMAP1(void) {                  //  <-----------  auto
    return I1;

    /* End of Rt/Fn/Map/begin depth=1 */
  };

  void RT1(void) {
    int I1;

    int LOCAL1;

    void RT1(void) {          //  <--------  auto
      int LOCAL1;

      LOCAL1 = 1;
      I1 = 1;

      /* End of Rt/Fn/Map/begin depth=2 */
    };

    LOCAL1 = 2;
    I1 = 2;

    /* End of Rt/Fn/Map/begin depth=1 */
  };

  // predicateTEST1

  // false

  // end

  float RA1[(9) - (0) + 1]

      ;
  float RA1B[(9) - (0) + 1]

      /*H imp80-switch.h:2330*/

      ;
  float RA2[(19) - (10) + 1]

      ;
  float RA2B[(19) - (10) + 1]

      /*H imp80-switch.h:2330*/

      ;

  float **RAN1;
  float **RAN2;

  double LRA1[(9) - (0) + 1]

      ;
  double LRA1B[(9) - (0) + 1]

      /*H imp80-switch.h:2330*/

      ;
  double LRA2[(19) - (10) + 1]

      ;
  double LRA2B[(19) - (10) + 1]

      /*H imp80-switch.h:2330*/

      ;

  double **LRAN1;
  double **LRAN2;

  // integernamearrayINA1,INA1B(0:9),INA2,INA2B(10:19)

  // integernamearraynameINAN1,INAN2

  _imp_string S1;
  _imp_string S2;

  _imp_string *SN1;
  _imp_string *SN2;

  _imp_string SA1[(7) - (4) + 1]

      ;
  _imp_string SA1B[(7) - (4) + 1]

      /*H imp80-switch.h:2330*/

      ;
  _imp_string SA2[(10) - (9) + 1]

      ;
  _imp_string SA2B[(10) - (9) + 1]

      /*H imp80-switch.h:2330*/

      ;
  _imp_string SA3[(100) - (1) + 1]

      ;

  _imp_string **SAN1;
  _imp_string **SAN2;
  _imp_string **SAN3;

  // string(82)namearraySNA1,SNA2(4:7),SNA3(1:2)

  // string(82)namearraynameSNAN1,SNAN2

  /*pending name*/
  /*pending name*/

  recfm REC1;
  recfm REC2;

  /*pending name*/
  /*pending name*/

  recfm *RECN1;
  recfm *RECN2;

  /*pending name*/

  recfm RECA1[(3) - (2) + 1]

      ;
  /*pending name*/

  recfm RECA2[(3) - (2) + 1]

      /*H imp80-switch.h:2330*/

      ;
  /*pending name*/

  recfm RECA3[(5) - (4) + 1]

      ;

  /*pending name*/
  /*pending name*/

  recfm **RECAN1;
  recfm **RECAN2;

  // record(RF)namearrayRECNA1,RECNA2(2:3),RECNA3(1:2)

  // record(RF)namearraynameRECNAN1,RECNAN2

  // OWNSANDEXTERNALSARESIMPLERDECLARATIONS

  static int OI1;

  static int *OIN1;

  static float OR1;

  static double OLR1;

  static int OI2;
  static int OI3;
  static float OCR1 = 3.1415;

  static double OCLR1 = 3.1415;

  static float ORA1[(9) - (0) + 1]

      ;

  static float **ORAN1;

  static double OLRA1[(9) - (0) + 1]

      ;

  static double **OLRAN1;

  // ownintegernamearrayOINA1(0:9)

  // ownintegernamearraynameOINAN1

  static _imp_string OS1;

  static _imp_string *OSN1;

  static _imp_string OSA1[(7) - (4) + 1]

      ;

  static _imp_string **OSAN1;

  // ownstring(82)namearrayOSNA1(4:7)

  // ownstring(82)namearraynameOSNAN1

  /*pending name*/

  static recfm OREC1;

  /*pending name*/

  static recfm *ORECN1;

  /*pending name*/

  static recfm ORECA1[(3) - (2) + 1]

      ;

  /*pending name*/

  static recfm **ORECAN1;

  // ownrecord(RF)namearrayORECNA1(2:3)

  // ownrecord(RF)namearraynameORECNAN1

  declare_switch(SW1, 2, 3);  // <--- wrong
  declare_switch(SW2, 2, 3);

  int IA3[(10) - (1) + 1]

      ;
  int IA4[(10) - (1) + 1]

      /*H imp80-switch.h:2330*/

      ;
  int IA5[(11) - (2) + 1][(1) - (0) + 1][(2) - (0) + 1]

      ;

  // integernamearrayIN3A1(2:11,0:1,0:2)

  I1 = 1;

  //!!!!!!!!!!!!!!!!!!

  XI1 = 1;
  XIN1 = XI1;
  XIN1 = 1;
  XR1 = 3.1;
  XI2 = XI3;
  XCR1 = 3.1415;
  XRA1[(5) - (0)] = XCR1;
  XRAN1 = XRA1;
  XCLR1 = 3.1415;
  XLRA1[(2) - (0)] = 3.1;
  XLRAN1 = XLRA1;
  XLRAN1 = 3.2;
  ;                 //  xina1(9) == xi1  <--- missing
  ;                 //  xinan1 == xina1  <--- missing

  exit(0);
  /* End of program */
}
