#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_string Lameoftype(int T) {
    int X;
    _imp_string S;
    static int Sw_sw;
    static void *Sw[32 /*0:31*/] = {
        &&Sw_0,       &&Sw_1,       &&Sw_2,       &&Sw_3,       &&Sw_4,
        &&Sw_5,       &&Sw_6,       &&Sw_7,       &&Sw_8,       &&Sw_9,
        &&Sw_10,      &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
        &&Sw_15,      &&Sw_16,      &&Sw_17,      &&Sw_18,      &&Sw_19,
        &&Sw_20,      &&Sw_21,      &&Sw_22,      &&Sw_23,      &&Sw_24,
        &&Sw_25,      &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
        &&Sw_default, &&Sw_default,
    };
    S = _imp_str_literal("");
    X = T & 31;
    if (X != T) X = 31;
    goto *Sw[Sw_sw = X];
  Sw_0:
    S = _imp_str_literal("unknown");
    goto Esac;
  Sw_1:
    S = _imp_str_literal("integer");
    goto Esac;
  Sw_2:
    S = _imp_str_literal("real");
    goto Esac;
  Sw_3:
    S = _imp_str_literal("string");
    goto Esac;
  Sw_4:
    S = _imp_str_literal("record");
    goto Esac;
  Sw_5:
    S = _imp_str_literal("byte");
    goto Esac;
  Sw_6:
    S = _imp_str_literal("shortinteger");
    goto Esac;
  Sw_7:
    S = _imp_str_literal("longinteger");
    goto Esac;
  Sw_8:
    S = _imp_str_literal("longreal");
    goto Esac;
  Sw_9:
    S = _imp_str_literal("array");
    goto Esac;
  Sw_10:
    S = _imp_str_literal("label");
    goto Esac;
  Sw_15:
    S = _imp_str_literal("name");
    goto Esac;
  Sw_16:
    S = _imp_str_literal("integer array");
    goto Esac;
  Sw_17:
    S = _imp_str_literal("real array");
    goto Esac;
  Sw_18:
    S = _imp_str_literal("string array");
    goto Esac;
  Sw_19:
    S = _imp_str_literal("record array");
    goto Esac;
  Sw_20:
    S = _imp_str_literal("byte array");
    goto Esac;
  Sw_21:
    S = _imp_str_literal("shortinteger array");
    goto Esac;
  Sw_22:
    S = _imp_str_literal("longinteger array");
    goto Esac;
  Sw_23:
    S = _imp_str_literal("longreal array");
    goto Esac;
  Sw_24:
    S = _imp_str_literal("array array");
    goto Esac;
  Sw_25:
    S = _imp_str_literal("label array");
    goto Esac;
  Sw_default:
    S = _imp_str_literal("unknown type");
    goto Esac;
  Esac:;
    return (S);
  }
  void Showresults(_imp_string S, int T) {
    _imp_string Ts;
    Ts = _imp_str_literal("");
    Ts = Nameoftype;
    Printstring(S);
    Printstring(_imp_str_literal(" (="));
    Write(T, 2);
    Printstring(_imp_str_literal(")= '"));
    Printstring(Nameoftype);
    Printstring(_imp_str_literal("'"));
    Spaces(1 + *Length(_imp_str_literal("longreal array")) - *Length(Ts));
    Printstring(S);
    Printstring(_imp_str_literal(" (="));
    Write(T, 2);
    Printstring(_imp_str_literal(")"));
    Printstring(_imp_str_literal("= '"));
    Printstring(Ts);
    Printstring(_imp_str_literal("'"));
    Newline();
  }
  int To;
  int V1 = 123;
  _imp_string V2 = _imp_str_literal("ABCD");
  unsigned char V3 = 123;
  double V4 = 1.2345;
  float V5;
  typedef struct X {
    short F1;
    float F2;
    double F3;
    unsigned char F4[6 /*0:5*/];
  } X;
  X V6;
  V6.F1 = 234;
  V6.F2 = 2.3456;
  V6.F3 = 3.4567890123456789;
  V6.F4 = 255;
  double V7[4 /*0:3*/][4 /*1:4*/];
  V7[1][3] = 1.2345;
  unsigned char V8[4 /*0:3*/][4 /*1:4*/][6 /*2:7*/];
  V8[0][1][7] = 1;
  X V9[5 /*0:4*/];
  V9[0].F1 = 5;
  short *V10;
  To = Typeof(V1);
  Printstring(_imp_str_literal("typeof(v1)              [integer] (="));
  Write(To, 2);
  Printstring(_imp_str_literal(")= '"));
  Printstring(Nameoftype);
  Printstring(_imp_str_literal("'"));
  Newline();
  To = Typeof(V5);
  Printstring(_imp_str_literal("typeof(v5)                 [real] (="));
  Write(To, 2);
  Printstring(_imp_str_literal(")= '"));
  Printstring(Nameoftype);
  Printstring(_imp_str_literal("'"));
  Newline();
  To = Typeof(V2);
  Printstring(_imp_str_literal("typeof(v2)               [string] (="));
  Write(To, 2);
  Printstring(_imp_str_literal(")= '"));
  Printstring(Nameoftype);
  Printstring(_imp_str_literal("'"));
  Newline();
  To = Typeof(V6);
  Printstring(_imp_str_literal("typeof(v6)               [record] (="));
  Write(To, 2);
  Printstring(_imp_str_literal(")= '"));
  Printstring(Nameoftype);
  Printstring(_imp_str_literal("'"));
  Newline();
  To = Typeof(V3);
  Printstring(_imp_str_literal("typeof(v3)                 [byte] (="));
  Write(To, 2);
  Printstring(_imp_str_literal(")= '"));
  Printstring(Nameoftype);
  Printstring(_imp_str_literal("'"));
  Newline();
  To = Typeof(V4);
  Printstring(_imp_str_literal("typeof(v4)             [longreal] (="));
  Write(To, 2);
  Printstring(_imp_str_literal(")= '"));
  Printstring(Nameoftype);
  Printstring(_imp_str_literal("'"));
  Newline();
  Newline();
  Showresults(_imp_str_literal("typeof(v6_f1)      [shortinteger]"),
              Typeof(V6.F1));
  Showresults(_imp_str_literal("typeof(v6_f2)              [real]"),
              Typeof(V6.F2));
  Showresults(_imp_str_literal("typeof(v6_f3)          [longreal]"),
              Typeof(V6.F3));
  Showresults(_imp_str_literal("typeof(v6_f4 (0))          [byte]"),
              Typeof(V6.F4));
  Showresults(_imp_str_literal("typeof(v7  (1,3))      [longreal]"),
              Typeof(V7[1][3]));
  Showresults(_imp_str_literal("typeof(v8(0,1,7))          [byte]"),
              Typeof(V8[0][1][7]));
  Showresults(_imp_str_literal("typeof(v7)        [longrealarray]"),
              Typeof(V7));
  Showresults(_imp_str_literal("typeof(v8)            [bytearray]"),
              Typeof(V8));
  Showresults(_imp_str_literal("typeof(v9)          [recordarray]"),
              Typeof(V9));
  Showresults(_imp_str_literal("typeof(v6_f4)         [bytearray]"),
              Typeof(V6.F4));
  Showresults(_imp_str_literal("typeof(v10)                [name]"),
              Typeof(*V10));
  V10 = &V6.F1;
  Showresults(_imp_str_literal("typeof(v10==v6_f1)         [name]"), 15);
  Newline();
  exit(0);
  return (1);
}
