#include <perms.h>
const int Iso = 0;
const int Ebcdic = 1;
const int Vme = 0;
const int Emas = 1;
const int Emasa = 2;
const int Chcode = Iso;
const int Target = Emasa;
const unsigned char Nul = 0x00;
const unsigned char Soh = 0x01;
const unsigned char Stx = 0x02;
const unsigned char Etx = 0x03;
const unsigned char Eot = 0x04;
const unsigned char Enq = 0x05;
const unsigned char Ack = 0x06;
const unsigned char Bel = 0x07;
const unsigned char Bs = 0x08;
const unsigned char Ht = 0x09;
const unsigned char Vt = 0x0B;
const unsigned char Ff = 0x0C;
const unsigned char Cr = 0x0D;
const unsigned char So = 0x0E;
const unsigned char Si = 0x0F;
const unsigned char Dle = 0x10;
const unsigned char Dc1 = 0x11;
const unsigned char Dc2 = 0x12;
const unsigned char Dc3 = 0x13;
const unsigned char Dc4 = 0x14;
const unsigned char Nak = 0x15;
const unsigned char Syn = 0x16;
const unsigned char Etb = 0x17;
const unsigned char Can = 0x18;
const unsigned char Em = 0x19;
const unsigned char Xsub = 0x1A;
const unsigned char Esc = 0x1B;
const unsigned char Fs = 0x1C;
const unsigned char Gs = 0x1D;
const unsigned char Rs = 0x1E;
const unsigned char Us = 0x1F;
#if 0 /* Chcode==Ebcdic */
const unsigned char Itoetab[256 /*0:255*/] =  {
0,1,2,3,55,45,46,47,22,5,21,11,12,13,14,15,16,17,18,19,60,61,50,38,24,25,63,39,28,29,30,31,64,79,127,123,91,108,80,125,77,93,92,78,107,96,75,97,240,241,242,243,244,245,246,247,248,249,122,94,76,126,110,111,124,193,194,195,196,197,198,199,200,201,209,210,211,212,213,214,215,216,217,226,227,228,229,230,231,232,233,74,224,90,95,109,121,129,130,131,132,133,134,135,136,137,145,146,147,148,149,150,151,152,153,162,163,164,165,166,167,168,169,192,106,208,161,7,32,33,34,35,36,37,6,23,40,41,42,43,44,9,10,27,48,49,26,51,52,53,54,8,56,57,58,59,4,20,62,225,65,66,67,68,69,70,71,72,73,81,82,83,84,85,86,87,88,89,98,99,100,101,102,103,104,105,112,113,114,115,116,117,118,119,120,128,138,139,140,141,142,143,144,154,155,156,157,158,159,160,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,202,203,204,205,206,207,218,219,220,221,222,223,234,235,236,237,238,239,250,251,252,253,254,255
};
const unsigned char Etoitab[256 /*0:255*/] =  {
0,1,2,3,156,9,134,127,151,141,142,11,12,13,14,15,16,17,18,19,157,10,8,135,24,25,146,143,28,29,30,31,128,129,130,131,132,133,23,27,136,137,138,139,140,5,6,7,144,145,22,147,148,149,150,4,152,153,154,155,20,21,158,26,32,160,161,162,163,164,165,166,167,168,91,46,60,40,43,33,38,169,170,171,172,173,174,175,176,177,93,36,42,41,59,94,45,47,178,179,180,181,182,183,184,185,124,44,37,95,62,63,186,187,188,189,190,191,192,193,194,96,58,35,64,39,61,34,195,97,98,99,100,101,102,103,104,105,196,197,198,199,200,201,202,106,107,108,109,110,111,112,113,114,203,204,205,206,207,208,209,126,115,116,117,118,119,120,121,122,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,123,65,66,67,68,69,70,71,72,73,232,233,234,235,236,237,125,74,75,76,77,78,79,80,81,82,238,239,240,241,242,243,92,159,83,84,85,86,87,88,89,90,244,245,246,247,248,249,48,49,50,51,52,53,54,55,56,57,250,251,252,253,254,255
};

#endif
const long long int Randmpy = 1103515245;
const int Randadd = 12345;
const double Dz = 0;
const int Opread = 1;
const int Opwrite = 2;
const int Oprdwr = 3;
const int Stdin = 0;
const int Stdout = 1;
const int Stderr = 2;
const int Eof = -1;
const int Cprintf = 1;
const int Cfprintf = 2;
const int Cscanf = 3;
const int Cfscanf = 4;
const int Sfprintf = 5;
const int Sfscanf = 6;
const int Nobufftype = 0;
const int Linebufftype = 1;
const int Fullbufftype = 2;
const int Filesize = 4096;
const int Bufsize = 256;
const int Seekset = 0;
const int Seekcur = 1;
const int Seekend = 2;
#if 1 /* Target==Emas || Target==Emasa */
static int Icl9caerrno;
extern void Fill(int Len, int From, int Filler);
extern void Move(int Len, int From, int To);
void Bufftofile(int Chan, int Add, int Nchs);
int Rand(void);
extern int Currentpackeddt(void);
extern _imp_string255 Unpackdate(int D);
extern _imp_string255 Unpacktime(int T);
#endif

#if 1 /* Target==Emasa */
extern void Emas3string(_imp_string255 Vector, _imp_string255 Value);
extern void Destroy(_imp_string255 File, int Flag);
extern void Rename(_imp_string255 File, _imp_string255 Newfile, int Flag);
typedef struct Chdrform {
  int Conad;
  int Filetype;
  int Datastart;
  int Dataend;
} Chdrform;
extern void Connect(_imp_string255 File, int Mode, int Hole, int Prot,
                    Chdrform R, int Flag);
extern void Changefilesize(_imp_string255 File, int Newsize, int Flag);
extern void Disconnect(_imp_string255 File, int Flag);
extern int Dvalidate(int Adr, int Len, int Rw);
#endif

#if 0 /* Target==Emas */
extern void Destroy(_imp_string255 S);extern void Rename(_imp_string255 S);extern void Connect(_imp_string255 S, int Size, Ffm R, int Flag);extern void Changefilesize(_imp_string255 File, int Size, int Flag);extern void Disconnect(_imp_string255 File, int Flag);
#endif

#if 0 /* Target==Vme */
int Icl9caerrno;extern int Ccremove(_imp_string255 Filename);extern int Ccrename(_imp_string255 Oldname,_imp_string255 Newname);extern int Cctmpfile(int Channel);extern void Ccsetbuf(int Channel,int Bufferptr);extern int Ccsetvbuf(int Channel,int Bufferptr,int Type,int Buffersize);extern int Ccstrerror(_imp_string255 Usertext);extern int Execute(_imp_string255 Command);extern void Icl9caenvinit(int Anything);extern int Writetext(int Channel,int Startadd,int Len);extern int Readtext(int Channel,int Startadd,int Len);extern int Readdata(int Channel,int Startadd,int Len);extern int Writedata(int Channel,int Startadd,int Len);extern int Ccfopen(int Channel,int Flag, _imp_string255 Filename);extern int Ccfclose(int Channel);extern int Ccfflush(int Channel);extern int Ccfseek(int Channel,int Offset,int Ptrname);extern int Ccftell(int Channel);extern int Ccungetc(int Char,int Channel);extern double Timediff(double T2,double T1);extern long long int Readcpuclock(void);extern void Dateandtime(long long int Ctime, _imp_string255 Date,_imp_string255 Time);extern int Readjsvar(_imp_string255 Jsvarname, int Option, int Adres);
#endif
typedef struct Ffm {
  int Conad;
  int Filetype;
  int Datastart;
  int Dataend;
} Ffm;
extern void Outfile(_imp_string255 File, int Size, int Hole, int Prot,
                    int Conad, int Flag);
extern int *Comreg(int N);
void Opeh(int Errno, int A, int B, int C);
extern double Cputime(void);
extern void Phex(int N);
typedef struct Filerec {
  _imp_string255 Fnm;
  unsigned char Eofmark;
  unsigned char Errmark;
  unsigned char Lastop;
  unsigned char Flags;
  int Initcon;
  int Conad;
  int Fptr;
  int Filelength;
  int Bufadd;
  int Bufsize;
  int Bufptr;
  int Buftype;
  int Dataend;
  int Seekptr;
} Filerec;
typedef struct Allhead {
  unsigned short Mode;
  unsigned short Form;
  int H0;
  int Nextblock;
  int Back;
} Allhead;
static Filerec Ffinfo[81 /*0:80*/];
extern int Cctointeger(int Dataad, int Datalen, int Intlen, int Intptr,
                       int Mode);
extern int Cctoreal(int Dataad, int Datalen, int Intlen, int Intptr, int Declen,
                    int Decptr, int Explen, int Expptr, int Decs,
                    int Scalefactor, int Mode);
int Malloc(int Elsize);
int Free(int Ptr);
int Strlen(int Stradd);
int Strcat(int S1, int S2);
const int Spfree = 3;
const int Captured = 12;
const int Sizehead = 16;
const int Alloclimit = 500000;
const int Maxbuff = 512;
static int Startfreespace;
static int Allocspac;
static int Spallspace;
static int Startst;
static unsigned char Res[512 /*0:511*/];
static int Ares;
static int Inptr;
static int Ebadr;
static int Seed;
static int Strtoken;
static int Restr;
static int Resptr;
static int Modeio;
static int Chanio;
static int Ptrio;
static int Conadio;
static int Onexitcount;
const int Default = -21;
const int Set = 0;
const int Unset = 1;
static int Infield;
static int Field;
static int Strsize;
static int Spset;
static int Hashset;
static int Ljst;
static int Pluset;
static int Pad;
static int Messagestream;
static int Outchars;
static int Inchars;
static int Noassign;
static _imp_string255 Tempfilename;
static _imp_string255 Strnum;
static _imp_string255 Jsvarstr;
static int Sg[6 /*1:6*/];
static int Onex[32 /*1:32*/];
typedef struct Timestruct {
  int Sec;
  int Min;
  int Hour;
  int Mday;
  int Mon;
  int Year;
  int Wday;
  int Yday;
  int Isdst;
} Timestruct;
static Timestruct Tm;
static _imp_string255 Strtime;
const int Dayone[15 /*85:99*/] = {1, 2, 3, 4, 6, 0, 1, 2, 4, 5, 6, 7, 2, 3, 4};
const _imp_string255 Wdayname[7 /*0:6*/] = {
    _imp_str_literal("Sun"), _imp_str_literal("Mon"), _imp_str_literal("Tue"),
    _imp_str_literal("Wed"), _imp_str_literal("Thu"), _imp_str_literal("Fri"),
    _imp_str_literal("Sat")};
const _imp_string255 Monname[12 /*0:11*/] = {
    _imp_str_literal("Jan"), _imp_str_literal("Feb"), _imp_str_literal("Mar"),
    _imp_str_literal("Apr"), _imp_str_literal("May"), _imp_str_literal("Jun"),
    _imp_str_literal("Jul"), _imp_str_literal("Aug"), _imp_str_literal("Sep"),
    _imp_str_literal("Oct"), _imp_str_literal("Nov"), _imp_str_literal("Dec")};
const int Yday[12 /*0:11*/] = {0,   31,  59,  90,  120, 151,
                               181, 212, 243, 273, 304, 334};
static int Tracing;
static int Errno;
const int Roff = 20;
#if 1 /* Target==Emas || Target==Emasa */
const int Minimperror = 6;
const int Maximperror = 36;
const int Minioerror = 201;
const int Maxioerror = 229;
const int Mincliberror = 300;
const int Maxcliberror = 325;
const int Mincrterror = 401;
const int Maxcrterror = 402;
const _imp_string255 Imperrors[31 /*6:36*/] = {
    _imp_str_literal("ARRAY BOUNDS EXCEEDED"),
    _imp_str_literal("CAPACITY EXCEEDED"),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal("UNASSIGNED VARIABLE"),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal("ILLEGAL EXPONENTIATION"),
    _imp_str_literal("SWITCH LABEL NOT SET"),
    _imp_str_literal(""),
    _imp_str_literal("ILLEGAL CYCLE"),
    _imp_str_literal("INT PT TOO LARGE"),
    _imp_str_literal("ARRAY INSIDE OUT"),
    _imp_str_literal("NO RESULT"),
    _imp_str_literal("PARAM NOT DESTINATION"),
    _imp_str_literal("PROGRAM TOO LARGE"),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal("IOCP ERROR"),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal("RESOLUTION FAULT"),
    _imp_str_literal(""),
    _imp_str_literal("SYMBOL INSTEAD OF STRING"),
    _imp_str_literal("STRING INSIDE OUT"),
    _imp_str_literal("WRONG PARAMS PROVIDED")};
const _imp_string255 Ioerrors[29 /*201:229*/] = {
    _imp_str_literal("INTERNAL ERROR1"),
    _imp_str_literal("INTERNAL ERROR2"),
    _imp_str_literal("INTERNAL ERROR3"),
    _imp_str_literal("INTERNAL ERROR4"),
    _imp_str_literal("TOO MANY AREAS REQUIRED"),
    _imp_str_literal("FACILITY NOT IMPLEMENTED"),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal("CANNOT OPEN FILE"),
    _imp_str_literal("FILE IS NOT DEFINED"),
    _imp_str_literal("FILE IS NOT OPEN"),
    _imp_str_literal("FILE NOT AVAILABLE"),
    _imp_str_literal("FILE NOT POSITIONED"),
    _imp_str_literal("FILE DOES NOT EXIST"),
    _imp_str_literal("FILE ALREADY EXISTS"),
    _imp_str_literal("FILE ALREADY CLOSED"),
    _imp_str_literal("FILE FULL"),
    _imp_str_literal("INPUT ENDED"),
    _imp_str_literal("INVALID I/O OPERATION"),
    _imp_str_literal("NO WRITE PERMISSION"),
    _imp_str_literal("NO ACCESS PERMISSION"),
    _imp_str_literal("RECORD NUMBER OUT OF RANGE"),
    _imp_str_literal("RECORD LENGTH TOO LARGE"),
    _imp_str_literal("RECORD WRONG LENGTH"),
    _imp_str_literal("RECORD NUMBER WRONG LENGTH"),
    _imp_str_literal("INVALID POSITIONING REQUEST"),
    _imp_str_literal("INVALID TYPE"),
    _imp_str_literal("INVALID BUFFER SIZE"),
    _imp_str_literal("FILE ALREADY WRITTEN OR READ")};
const _imp_string255 Cliberrors[26 /*300:325*/] = {
    _imp_str_literal("INVALID STREAM POINTER"),
    _imp_str_literal("CHANNEL ALREADY OPEN"),
    _imp_str_literal("READ AFTER WRITE"),
    _imp_str_literal("WRITE AFTER READ"),
    _imp_str_literal("TOO MANY FILES OPENED"),
    _imp_str_literal("INCOMPATIBLE CONVERSION SPECIFIER"),
    _imp_str_literal("INVALID ADDRESS"),
    _imp_str_literal("SETBUF NOT ALLOWED AFTER I/O OP"),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal("BLOCK WAS NOT ALLOCATED"),
    _imp_str_literal("NO FREE SPACE AVAILABLE"),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal(""),
    _imp_str_literal("INVALID SIGNAL NUMBER"),
    _imp_str_literal("SIG_DFL SIGNAL SENT"),
    _imp_str_literal("ENVIRONMENT NAME TOO LONG"),
    _imp_str_literal("ONEXIT LIMIT EXCEEDED"),
    _imp_str_literal(""),
    _imp_str_literal("ABORT CALLED")};
const _imp_string255 Crterrors[2 /*401:402*/] = {
    _imp_str_literal("UNASSIGNED VARIABLE"),
    _imp_str_literal("ARRAY BOUNDS EXCEEDED")};

#endif

#if 0 /* Target==Vme */
void Fill(int Len,int From,int Filler)
{int I;if (Len<=0) return;I = 0x18000000|Len;asm("LDTB i");
asm("LDA from");
asm("LB filler");
asm("MVL  %L = %DR");
}
void Move(int Len,int From,int To)
{int I;if (Len<=0) return;I = 0x18000000|Len;asm("LSS from");
asm("LUH i");
asm("LDTB i");
asm("LDA to");
asm("MV  %L = %DR");
}

#endif
void Getrunc(void) {
  int Nargs;
  int Argptr;
  int I;
  int K;
  int L;
  int M;
  int Jsadd1;
  int Jsadd2;
  int D1;
  int D2;
  int Argform[129 /*0:128*/];
  int Argadr;
  _imp_string255 *Jsvarstr1;
  _imp_string255 *Jsvarstr2;
  Argptr = Malloc(1024);
  Jsvarstr1 = String(Argptr);
  Argadr = &Array(Argptr + 512, Argform);
  Jsadd1 = Addr(*Jsvarstr1);
  Argadr(0) = Jsadd1 + 1;
  Nargs = 1;
#if 0 /* Target==Vme */
K = Readjsvar(_imp_str_literal("ICL9CAENTRY"),2,Jsadd1);L =  *Length( *Jsvarstr1);if (K!=0) L = 0;if (Chcode==Ebcdic && L > 0) for (I = 1; I <= L; I++)Byteinteger(Jsadd1 + I) = Itoetab( *Byteinteger(Jsadd1 + I));Jsadd2 = Jsadd1 + L + 1;Jsvarstr2 = String(Jsadd2);K = Readjsvar(_imp_str_literal("ICL9CAARGS"),2,Jsadd2);L =  *Length( *Jsvarstr2);if (K!=0 || L==0) goto Return0;

#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= L; I++)Byteinteger(Jsadd2 + I) = Itoetab( *Byteinteger(Jsadd2 + I));
#endif
Argadr(1) = Jsadd2 + 1;I = 2;asm("LDB (Jsvarstr2)");
asm("INCA 1");
L1: asm("SWNE  %L = %DR,0,64");
asm("JCC 8,<L2>");
asm("STD d1");
Argadr(I) = D2 + 1;I = I + 1;asm("LD d1");
asm("MVL  %L =1,0,0");
goto L1;
L2: asm("STD d1");
Byteinteger(D2) = 0;Byteinteger(Jsadd2) = 0;Nargs = I;
#else
  Jsvarstr1 = _imp_join(_imp_str_literal("RUN"), Tostring(0));
  Jsadd2 = Jsadd1 + 5;
  Jsvarstr2 = String(Jsadd2);
  Jsvarstr2 = _imp_str_literal("");
#if 1 /* Target==Emasa */
  Emas3string(_imp_str_literal("Unix qualifier; any,verbatin,ornull;;"),
              *Jsvarstr2);
#endif
  L = *Length(*Jsvarstr2);
  Argadr(1) = Jsadd2 + 1;
  I = 2;
  for (K = 1; K <= L; K++)
    if (*Charno(*Jsvarstr2, K) == ' ') {
      Argadr(I) = Jsadd2 + K + 1;
      I = I + 1;
      Charno(*Jsvarstr2, K) = 0;
    }
  Byteinteger(Jsadd2 + 1 + L) = 0;
  Nargs = I;
#endif
Return0:;
  Argadr(Nargs) = 0;
#if 1 /* Target==Emasa */
  asm("l 1,40(10)");
  asm("ST 1,I");
  Integer(I + 64) = Nargs;
  Integer(I + 68) = Argptr + 512;
#else
  asm("STLN i");
  M = *Integer(I);
  Integer(M + Roff) = Nargs;
  Integer(M + Roff + 4) = Argptr + 512;
#endif
  return;
}
void Initsown(void) {
  int I;
  int M;
  Allocspac = 0;
  Startst = 0;
  Inptr = 0;
  for (I = 0; I <= 80; I++) {
    Ffinfo(I).Fnm = _imp_str_literal("");
    Ffinfo(I).Eofmark = 0;
    Ffinfo(I).Errmark = 0;
  }
  Ffinfo(0).Lastop = Opread;
  Ffinfo(1).Lastop = Opwrite;
  Ffinfo(2).Lastop = Opwrite;
  Seed = 1;
  for (I = 1; I <= 6; I++) Sg(I) = -2;
  Onexitcount = 0;
#if 0 /* Target==Vme */
Messagestream = 81;
#else
  Messagestream = 0;
#endif

#if 0 /* Target==Vme */
Icl9caenvinit( -1);
#endif
  if (*Comreg(45) == 0)
    Tracing = Unset;
  else
    Tracing = Set;
}
_imp_string255 Itos(int N) {
  _imp_string255 S;
  S = _imp_str_literal("");
  do {
    S = _imp_join(Tostring(N - (N / 10 * 10) + '0'), S);
    N = N / 10;
  } while (N == 0);
  return (S);
}
int Stoi(_imp_string255 Str) {
  int Value;
  int Sym;
  int X;
  int Len;
  Value = 0;
  Len = *Length(Str);
  for (X = 1; X <= Len; X++) {
    Sym = *Charno(Str, X);
    if ('0' > Sym || Sym > '9') return (-1);
    Value = 10 * Value + (Sym & 15);
  }
  return (Value);
}
_imp_string255 Htoi(_imp_string255 Str) {
  int Value;
  int Sym;
  int Val;
  int Len;
  int X;
  Value = 0;
  Len = *Length(Str);
  for (X = 1; X <= Len; X++) {
    Sym = *Charno(Str, X);
    if ('0' <= Sym && Sym <= '9')
      Val = Sym - '0';
    else if ('a' <= Sym && Sym <= 'f')
      Val = Sym - 'a' + 10;
    else
      Val = Sym - 'A' + 10;
    Value = Value + (Val * (IEXP(16, (Len - X))));
  }
  return (Itos(Value));
}
_imp_string255 Otoi(_imp_string255 Str) {
  int Value;
  int Sym;
  int Val;
  int Len;
  int X;
  Value = 0;
  Len = *Length(Str);
  for (X = 1; X <= Len; X++) {
    Sym = *Charno(Str, X);
    Val = Sym - '0';
    Value = Value + (Val * (IEXP(8, (Len - X))));
  }
  return (Itos(Value));
}
void Integerf(int Sgn) {
  int I;
  int Len;
  int Value;
  int Space;
  int Astr;
  int Nch;
  Ares = Addr(Res(0));
  Astr = Addr(Strnum) + 1;
  Len = *Length(Strnum);
  if (Strsize == Default)
    if (Field != Default && Field > Len) {
      Space = Field - Len;
      Inptr = Field;
      if (Ljst == Unset) {
        Fill(Space, Ares, Pad);
        Move(Len, Astr, Ares + Space);
        if (Sgn == Set && Pad == '0') {
          I = -1;
          do {
            I = I + 1;
            Nch = *Byteinteger(Ares + I);
          } while (Nch == '+' || Nch == '-');
          Byteinteger(Ares + I) = '0';
          Byteinteger(Ares) = Nch;
        }
      } else {
        Move(Len, Astr, Ares);
        Fill(Space, Ares + Len, Pad);
      }
    } else {
      Move(Len, Astr, Ares);
      Inptr = Len;
    }
  else if (Strsize > Len) {
    Space = Strsize - Len;
    if (Sgn == Unset)
      Pad = ' ';
    else
      Pad = '0';
    Fill(Space, Ares, Pad);
    Move(Len, Astr, Ares + Space);
    Inptr = Strsize;
  } else {
    Move(Len, Astr, Ares);
    Inptr = Len;
  }
}
int Flg(int Priv) {
  int I;
  int Flag;
  int C;
  I = 0;
  Flag = 0;
  C = *Byteinteger(Priv);
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  while (C != Nul) {
    if (I == 0)
      if (C == 'r')
        Flag = Flag | 0x00;
      else if (C == 'w')
        Flag = Flag | 0x01;
      else if (C == 'a')
        Flag = Flag | 0x02;
      else if (I == 1)
        if (C == 'b')
          Flag = Flag | 0x08;
        else if (C == '+')
          Flag = Flag | 0x04;
        else if (I == 2)
          if (C == 'b') Flag = Flag | 0x08;
    I = I + 1;
    C = *Byteinteger(Priv + I);
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  }
  return (Flag);
}
int Fopen(int File, int Priv) {
  Ffm R;
  _imp_string255 Filename;
  int Flag;
  int I;
  int J;
  int K;
  int Key;
  int Conad;
  int F;
  int Mode;
  Byteinteger(Addr(Filename)) = Strlen(File);
  for (I = 1; I <= Strlen(File); I++)
    Byteinteger(Addr(Filename) + I) = *Byteinteger(File + I - 1);
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= Strlen(File); I++)Byteinteger(Addr(Filename) + I) = Etoitab( *Byteinteger(Addr(Filename) + I));
#endif
  Flag = 0;
  Key = 81;
  for (I = 80; I >= 3; I--) {
    if (Filename == Ffinfo(I).Fnm) return (0);
    if (Ffinfo(I).Fnm == _imp_str_literal("")) Key = I;
  }
  if (Key == 81) {
    Icl9caerrno = 304;
    return (0);
  }
  Flag = Flg(Priv);
#if 0 /* Target==Vme */
K = Ccfopen(Key,Flag,Filename);if (K < 0) Flag = Flag|0x08;if (K > 0) { Icl9caerrno = K;return(0);
 }
#endif

#if 1 /* Target==Emas || Target==Emasa */
  if ((Flag & 0x01) != 0) {
    Outfile(Filename, Filesize, 0, 0, Conad, F);
    if (F != 0) return (0);
    Ffinfo(Key).Filelength = Filesize;
    if ((Flag & 0x08) == 0)
      Integer(Conad + 12) = 3;
    else
      Integer(Conad + 12) = 4;
  } else {
    if ((Flag & 0x07) == 0)
      Mode = 1;
    else
      Mode = 3;
    Connect(Filename, Mode, 0, 0, R, F);
    if (F != 0)
      if ((Flag & 0x07) != 0) {
        Outfile(Filename, Filesize, 0, 0, Conad, F);
        if (F != 0) return (0);
        Ffinfo(Key).Filelength = Filesize;
        if ((Flag & 0x08) == 0)
          Integer(Conad + 12) = 3;
        else
          Integer(Conad + 12) = 4;
      } else
        Opeh(335, 0, 11, 0);
    else {
      Conad = R.Conad;
      if ((Flag & 0x07) != 0) {
        J = *Integer(Conad) + 4096;
        Changefilesize(Filename, J, F);
        if (F != 0) Opeh(335, 0, 11, 0);
      }
      Ffinfo(Key).Filelength = *Integer(Conad + 8);
    }
  }
  Ffinfo(Key).Initcon = Conad;
  Ffinfo(Key).Conad = Conad + 32;
  Ffinfo(Key).Fptr = Conad + 32;
  if ((Flag & 0x08) != 0)
    Ffinfo(Key).Buftype = Fullbufftype;
  else
    Ffinfo(Key).Buftype = Linebufftype;
#if 0 /* Bufsize==0 */
Ffinfo(Key).Buftype = Nobufftype;
#endif
  Ffinfo(Key).Bufsize = Bufsize;
  Ffinfo(Key).Bufadd = Malloc(Bufsize);
  Ffinfo(Key).Bufptr = 0;
  Ffinfo(Key).Dataend = Bufsize;
  Ffinfo(Key).Seekptr = Conad + 32;
#endif
  Ffinfo(Key).Fnm = Filename;
  Ffinfo(Key).Flags = Flag;
  Ffinfo(Key).Eofmark = 0;
  Ffinfo(Key).Errmark = 0;
  Ffinfo(Key).Lastop = Oprdwr;
  return (Key);
}
int Fclose(int Chan) {
  int K;
  if ((3 > Chan || Chan > 80)) {
    Icl9caerrno = 300;
    return (300);
  }
  if (Ffinfo(Chan).Fnm == _imp_str_literal("")) return (0);

#if 0 /* Target==Vme */
K = Ccfclose(Chan);Ffinfo(Chan).Fnm = _imp_str_literal("");if (K!=0) { Icl9caerrno = K;return(K);
 } return(0);

#endif

#if 1 /* Target==Emas || Target==Emasa */
  if ((Ffinfo(Chan).Flags & 0x07) != 0)
    if (Ffinfo(Chan).Buftype != Nobufftype) {
      if (Ffinfo(Chan).Bufptr > 0)
        Bufftofile(Chan, Ffinfo(Chan).Bufadd, Ffinfo(Chan).Bufptr);
      K = Free(Ffinfo(Chan).Bufadd);
    }
  Disconnect(Ffinfo(Chan).Fnm, K);
  if (K != 0) {
    Icl9caerrno = 216;
    return (216);
  }
  Ffinfo(Chan).Fnm = _imp_str_literal("");
  return (0);

#endif
}
int Freopen(int File, int Priv, int Chan) {
  Ffm R;
  _imp_string255 Filename;
  int Flag;
  int I;
  int J;
  int K;
  int Conad;
  int F;
  int Mode;
  if ((3 > Chan || Chan > 80)) {
    Icl9caerrno = 300;
    return (0);
  }
  K = Fclose(Chan);
  Flag = Flg(Priv);
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= Strlen(File); I++)Byteinteger(Addr(Filename) + I) = Etoitab( *Byteinteger(Addr(Filename) + I));
#endif

#if 0 /* Target==Vme */
K = Ccfopen(Chan,Flag,Filename);if (K < 0) Flag = Flag|0x08;if (K > 0) { Icl9caerrno = K;return(0);
 }
#endif

#if 1 /* Target==Emas || Target==Emasa */
  if ((Flag & 0x01) != 0) {
    Outfile(Filename, Filesize, 0, 0, Conad, F);
    if (F != 0) return (0);
    Ffinfo(Chan).Filelength = Filesize;
    if ((Flag & 0x08) == 0)
      Integer(Conad + 12) = 3;
    else
      Integer(Conad + 12) = 4;
  } else {
    if ((Flag & 0x07) == 0)
      Mode = 1;
    else
      Mode = 3;
    Connect(Filename, Mode, 0, 0, R, F);
    if (F != 0)
      if ((Flag & 0x07) != 0) {
        Outfile(Filename, Filesize, 0, 0, Conad, F);
        if (F != 0) return (0);
        Ffinfo(Chan).Filelength = Filesize;
        if ((Flag & 0x08) == 0)
          Integer(Conad + 12) = 3;
        else
          Integer(Conad + 12) = 4;
      } else
        Opeh(335, 0, 11, 0);
    else {
      Conad = R.Conad;
      if ((Flag & 0x07) != 0) {
        J = *Integer(Conad) + 4096;
        Changefilesize(Filename, J, F);
        if (F != 0) Opeh(335, 0, 11, 0);
      }
      Ffinfo(Chan).Filelength = *Integer(Conad + 8);
    }
  }
  Ffinfo(Chan).Initcon = Conad;
  Ffinfo(Chan).Conad = Conad + 32;
  Ffinfo(Chan).Fptr = Conad + 32;
  if ((Flag & 0x08) != 0)
    Ffinfo(Chan).Buftype = Fullbufftype;
  else
    Ffinfo(Chan).Buftype = Linebufftype;
#if 0 /* Bufsize==0 */
Ffinfo(Chan).Buftype = Nobufftype;
#endif
  Ffinfo(Chan).Bufsize = Bufsize;
  Ffinfo(Chan).Bufadd = Malloc(Bufsize);
  Ffinfo(Chan).Bufptr = 0;
  Ffinfo(Chan).Dataend = Bufsize;
  Ffinfo(Chan).Seekptr = Conad + 32;
#endif
  Ffinfo(Chan).Fnm = Filename;
  Ffinfo(Chan).Flags = Flag;
  Ffinfo(Chan).Eofmark = 0;
  Ffinfo(Chan).Errmark = 0;
  Ffinfo(Chan).Lastop = Oprdwr;
  return (Chan);
}

#if 1 /* Target==Emas || Target==Emasa */
int Setvbuf(int Chan, int Buf, int Type, int Size) {
  int K;
  if ((3 > Chan || Chan > 80)) Opeh(300, 0, 11, 0);
  if (Ffinfo(Chan).Fnm == _imp_str_literal("")) Opeh(211, 0, 11, 0);
  if (Ffinfo(Chan).Lastop != Oprdwr) Opeh(334, 0, 11, 0);
  Ffinfo(Chan).Buftype = Type;
  if (Buf != 0) {
    Ffinfo(Chan).Bufsize = Size;
    K = Free(Ffinfo(Chan).Bufadd);
    Ffinfo(Chan).Bufadd = Buf;
  }
  return (0);
}
int Setbuf(int Chan, int Buf) {
  int K;
  if ((3 > Chan || Chan > 80)) Opeh(300, 0, 11, 0);
  if (Ffinfo(Chan).Fnm == _imp_str_literal("")) Opeh(211, 0, 11, 0);
  if (Buf == 0)
    K = Setvbuf(Chan, Buf, 0, 0);
  else
    K = Setvbuf(Chan, Buf, 2, Bufsize);
  return (0);
}
void Bufftofile(int Chan, int Add, int Nchs) {
  int Flag;
  int Newsize;
  int M;
  if (Ffinfo(Chan).Fptr + Nchs >
      Ffinfo(Chan).Initcon + Ffinfo(Chan).Filelength) {
    Newsize = Ffinfo(Chan).Filelength + 4096;
    Changefilesize(Ffinfo(Chan).Fnm, Newsize, Flag);
    if (Flag != 0) Opeh(335, 0, 11, 0);
    Ffinfo(Chan).Filelength = Newsize;
  }
  Move(Nchs, Add, Ffinfo(Chan).Fptr);
  Ffinfo(Chan).Fptr = Ffinfo(Chan).Fptr + Nchs;
  M = Ffinfo(Chan).Fptr - Ffinfo(Chan).Initcon;
  if (M > *Integer(Ffinfo(Chan).Initcon)) Integer(Ffinfo(Chan).Initcon) = M;
  Ffinfo(Chan).Bufptr = 0;
}
int Writetext(int Chan, int Add, int Nchs) {
  int Flag;
  int I;
  int J;
  int K;
  int L;
  int M;
  int N;
  int C;
  static int Btype_sw;
  static void *Btype[3 /*0:2*/] = {
      &&Btype_0,
      &&Btype_1,
      &&Btype_2,
  };
  if (Ffinfo(Chan).Lastop == Oprdwr) {
    if ((Ffinfo(Chan).Flags & 0x07) == 0) Opeh(220, 0, 11, 0);
    if ((Ffinfo(Chan).Flags & 0x02) != 0)
      Ffinfo(Chan).Fptr = Ffinfo(Chan).Initcon + *Integer(Ffinfo(Chan).Initcon);
    else
      Ffinfo(Chan).Fptr = Ffinfo(Chan).Seekptr;
  }
  Ffinfo(Chan).Lastop = Opwrite;
  goto *Btype[Btype_sw = Ffinfo(Chan).Buftype];
Btype_1:;
  I = 0;
  L = Ffinfo(Chan).Bufadd + Ffinfo(Chan).Bufsize;
  for (;;) {
    K = Ffinfo(Chan).Bufadd + Ffinfo(Chan).Bufptr;
    N = 0;
    M = 0;
    while (K < L && M == 0 && I < Nchs) {
      C = *Byteinteger(Add + I);
      Byteinteger(K) = C;
      N = N + 1;
      K = K + 1;
      I = I + 1;
      if (C == Nl || C == Ff) M = 1;
    }
    if (M == 1 || K == L)
      Bufftofile(Chan, Ffinfo(Chan).Bufadd, K - Ffinfo(Chan).Bufadd);
    else {
      Ffinfo(Chan).Bufptr = Ffinfo(Chan).Bufptr + N;
      return (Nchs);
    }
  }
Btype_0:;
  Bufftofile(Chan, Add, Nchs);
  return (Nchs);
Btype_2:;
  K = Nchs;
  I = 0;
  for (;;)
    if (K + Ffinfo(Chan).Bufptr <= Ffinfo(Chan).Bufsize) {
      Move(K, Add + I, Ffinfo(Chan).Bufadd + Ffinfo(Chan).Bufptr);
      Ffinfo(Chan).Bufptr = Ffinfo(Chan).Bufptr + K;
      return (Nchs);
    } else {
      M = Ffinfo(Chan).Bufsize - Ffinfo(Chan).Bufptr;
      Move(M, Add + I, Ffinfo(Chan).Bufadd + Ffinfo(Chan).Bufptr);
      I = I + M;
      Bufftofile(Chan, Ffinfo(Chan).Bufadd, Bufsize);
      Ffinfo(Chan).Bufptr = 0;
      K = K - M;
    }
}
int Readtext(int Chan, int Add, int Nchs) {
  int Flag;
  int C;
  int I;
  int J;
  int K;
  int L;
  int M;
  int N;
  int Filetobuff(int Chan, int Add, int Nchs) {
    int L;
    int M;
    L = Ffinfo(Chan).Initcon + *Integer(Ffinfo(Chan).Initcon);
    if (Ffinfo(Chan).Fptr + Nchs >= L) {
      M = L - Ffinfo(Chan).Fptr;
      Move(M, Ffinfo(Chan).Fptr, Add);
      Ffinfo(Chan).Fptr = L;
      return (M);
    } else {
      Move(Nchs, Ffinfo(Chan).Fptr, Add);
      Ffinfo(Chan).Fptr = Ffinfo(Chan).Fptr + Nchs;
      return (Nchs);
    }
  }
  if (Ffinfo(Chan).Eofmark == 1) return (0);
  if (Ffinfo(Chan).Lastop == Oprdwr) {
    if ((Ffinfo(Chan).Flags & 0x01) != 0) Opeh(330, 0, 11, 0);
    Ffinfo(Chan).Fptr = Ffinfo(Chan).Seekptr;
    Ffinfo(Chan).Bufptr = Ffinfo(Chan).Bufsize;
  }
  L = Ffinfo(Chan).Initcon + *Integer(Ffinfo(Chan).Initcon);
  if (Nchs + Ffinfo(Chan).Fptr <= L) {
    Move(Nchs, Ffinfo(Chan).Fptr, Add);
    Ffinfo(Chan).Fptr = Ffinfo(Chan).Fptr + Nchs;
    return (Nchs);
  } else {
    M = L - Ffinfo(Chan).Fptr;
    Move(M, Ffinfo(Chan).Fptr, Add);
    Ffinfo(Chan).Fptr = L;
    Ffinfo(Chan).Eofmark = 1;
    return (M);
  }
}

#endif
int Fflush(int Chan) {
  int K;
  if ((3 > Chan || Chan > 80)) {
    Icl9caerrno = 300;
    return (300);
  }
  if (Ffinfo(Chan).Fnm == _imp_str_literal("")) {
    Icl9caerrno = 211;
    return (211);
  }
#if 0 /* Target==Vme */
K = Ccfflush(Chan);if (K==0) return(0);
 else { Icl9caerrno = K;return(K);
 }
#endif

#if 1 /* Target==Emas || Target==Emasa */
  if (Ffinfo(Chan).Lastop != Opwrite) return (0);
  if (Ffinfo(Chan).Buftype != Nobufftype)
    if (Ffinfo(Chan).Bufptr > 0) {
      Bufftofile(Chan, Ffinfo(Chan).Bufadd, Ffinfo(Chan).Bufptr);
      Ffinfo(Chan).Bufptr = 0;
    }
  return (0);

#endif
}
int Checkchano(int Chan) {
  if (Chan != Stdout) {
    if ((3 > Chan || Chan > 80)) {
      Icl9caerrno = 300;
      return (300);
    }
    if (Ffinfo(Chan).Fnm == _imp_str_literal("")) {
      Icl9caerrno = 211;
      return (211);
    }
    if (Ffinfo(Chan).Lastop == Opread) {
      if (Ffinfo(Chan).Eofmark != 1) {
        Icl9caerrno = 303;
        return (303);
      }
      Ffinfo(Chan).Eofmark = 0;
    }
  }
  return (0);
}
int Checkchani(int Chan) {
  if (Chan != Stdin) {
    if ((3 > Chan || Chan > 80)) {
      Icl9caerrno = 300;
      return (300);
    }
    if (Ffinfo(Chan).Fnm == _imp_str_literal("")) {
      Icl9caerrno = 211;
      return (211);
    }
    if (Ffinfo(Chan).Lastop == Opwrite) {
      Icl9caerrno = 302;
      return (302);
    }
  }
  return (0);
}
int Fread(int Startadd, int Size, int Nelem, int Chan) {
  int I;
  int J;
  int K;
  int Length;
  K = Checkchani(Chan);
  if (K != 0) return (0);
  Length = Nelem * Size;
  if (Nelem == 0 || Size == 0) return (0);

#if 0 /* Target==Vme */
K = Readdata(Chan,Startadd,Length);
#else
  K = Readtext(Chan, Startadd, Length);
#endif
  if (K > 0) {
    Ffinfo(Chan).Lastop = Opread;
    return (K / Size);
  }
  if (K == 0) {
    Ffinfo(Chan).Eofmark = 1;
    return (0);
  } else {
    Icl9caerrno = -K;
    Ffinfo(Chan).Errmark = 1;
    return (0);
  }
}
int Fwrite(int Startadd, int Size, int Nelem, int Chan) {
  int I;
  int J;
  int K;
  int Length;
  K = Checkchano(Chan);
  if (K != 0) return (0);
  Length = Nelem * Size;
  if (Nelem == 0 || Size == 0) return (0);

#if 0 /* Target==Vme */
K = Writedata(Chan,Startadd,Length);
#else
  K = Writetext(Chan, Startadd, Length);
#endif
  if (K < 0) {
    Ffinfo(Chan).Errmark = 1;
    Icl9caerrno = -K;
    return (0);
  }
  Ffinfo(Chan).Lastop = Opwrite;
  return (K / Size);
}
int Fseek(int Chan, int Offset, int Ptrname) {
  int K;
  int Newsize;
  int Fp;
  int Flag;
  if ((3 > Chan || Chan > 80)) {
    Icl9caerrno = 300;
    return (300);
  }
  if (Ffinfo(Chan).Fnm == _imp_str_literal("")) {
    Icl9caerrno = 211;
    return (211);
  }
#if 0 /* Target==Vme */
K = Ccfseek(Chan,Offset,Ptrname);if (K!=0) { Icl9caerrno = K;return(K);
 } Ffinfo(Chan).Lastop = Oprdwr;return(0);

#endif

#if 1 /* Target==Emas || Target==Emasa */
  K = Fflush(Chan);
  if ((Ffinfo(Chan).Flags & 0x08) == 0)
    Fp = Ffinfo(Chan).Conad + Offset;
  else {
    if (Ptrname == Seekset) Fp = Ffinfo(Chan).Conad + Offset;
    if (Ptrname == Seekcur) Fp = Ffinfo(Chan).Fptr + Offset;
    if (Ptrname == Seekend)
      Fp = Ffinfo(Chan).Initcon + *Integer(Ffinfo(Chan).Initcon) + Offset;
  }
  if (Fp < 0) Opeh(226, 0, 11, 0);
  if (Fp > Ffinfo(Chan).Initcon + Ffinfo(Chan).Filelength) {
    Newsize = (Fp + 4095) & 0xFFFFF000;
    Changefilesize(Ffinfo(Chan).Fnm, Newsize, Flag);
    if (Flag != 0) Opeh(335, 0, 11, 0);
    Ffinfo(Chan).Filelength = Newsize;
  }
  Ffinfo(Chan).Seekptr = Fp;
  Ffinfo(Chan).Lastop = Oprdwr;
  return (0);

#endif
}
int Ftell(int Chan) {
  int K;
  if ((3 > Chan || Chan > 80)) Opeh(300, 0, 11, 0);
  if (Ffinfo(Chan).Fnm == _imp_str_literal("")) {
    Icl9caerrno = 211;
    Opeh(211, 0, 11, 0);
  }
#if 0 /* Target==Vme */
K = Ccftell(Chan);if (K < 0) { Icl9caerrno =  -K;Opeh( -K,0,11,0); } return(K);

#endif

#if 1 /* Target==Emas || Target==Emasa */
  K = Fflush(Chan);
  return (Ffinfo(Chan).Fptr - Ffinfo(Chan).Conad);

#endif
}
int Rewind(int Chan) {
  int K;
  if ((3 > Chan || Chan > 80)) Opeh(300, 0, 11, 0);
  if (Ffinfo(Chan).Fnm == _imp_str_literal("")) {
    Icl9caerrno = 211;
    Opeh(211, 0, 11, 0);
  }
  K = Fseek(Chan, 0, 0);
  if (K != 0) {
    Icl9caerrno = K;
    Opeh(K, 0, 11, 0);
  }
  Ffinfo(Chan).Eofmark = 0;
  Ffinfo(Chan).Errmark = 0;
  Ffinfo(Chan).Lastop = Oprdwr;
  return (0);
}
int Clearerr(int Chan) {
  if ((3 > Chan || Chan > 80)) Opeh(300, 0, 11, 0);
  if (Ffinfo(Chan).Fnm != _imp_str_literal("")) {
    Ffinfo(Chan).Eofmark = 0;
    Ffinfo(Chan).Errmark = 0;
  }
  return (0);
}
int Feof(int Chan) {
  if ((3 > Chan || Chan > 80)) Opeh(300, 0, 11, 0);
  return (Ffinfo(Chan).Eofmark);
}
int Ferror(int Chan) {
  if ((3 > Chan || Chan > 80)) Opeh(300, 0, 11, 0);
  return (Ffinfo(Chan).Errmark);
}

#if 0 /* Target==Vme */
int Perror(int S)
{extern int Iocp(int Ep,int Parm);_imp_string255 Text;int I;int Len;int K;if (S==Nul) Text = _imp_str_literal(""); else { Len = Strlen(S);Byteinteger(Addr(Text)) = Len;for (I = 1; I <= Len; I++)Byteinteger(Addr(Text) + I) = Etoitab( *Byteinteger(S + I - 1)); } K = Ccstrerror(Text);if (Text!=_imp_str_literal("")) { I = Iocp(18,0);Printstring( *String(K));I = Iocp(19,0);return(0);
 }  else { Len =  *Byteinteger(K);
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= Len; I++)Byteinteger(K + I) = Itoetab( *Byteinteger(K + I));
#endif
 } Byteinteger(K + Len + 1) = 0;return(K + 1);
}

#endif

#if 1 /* Target==Emas || Target==Emasa */
int Tmpnam(int Adstr) {
  _imp_string255 Tname;
  int C;
  int I;
  Tname = _imp_join(_imp_str_literal("T#CC"), Itos(Rand));
  Byteinteger(Addr(Tname) + *Length(Tname)) = Nul;
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= 25; I++)Byteinteger(Addr(Tname) + I) = Itoetab( *Byteinteger(Addr(Tname) + I));
#endif
  if (Adstr == Nul) {
    Tempfilename = Tname;
    return (Addr(Tempfilename) + 1);
  }
  I = 0;
  do {
    C = *Byteinteger(Addr(Tname) + I + 1);
    Byteinteger(Adstr + I) = C;
    I = I + 1;
  } while (C == Nul);
  return (Adstr);
}
int Remove(int Ptr) {
  int Adr;
  int I;
  int L;
  _imp_string255 Mid;
  L = Strlen(Ptr);
  Adr = Addr(Mid);
  for (I = 1; I <= L; I++) Byteinteger(Adr + I) = *Byteinteger(Ptr + I - 1);
  Byteinteger(Adr) = L;
#if 1 /* Target==Emasa */
  Destroy(Mid, I);
#else
  Destroy(Mid);
#endif
  return (0);
}
int Renam(int Old, int New) {
  int Adr;
  int Adr1;
  int Flag;
  _imp_string255 Mid;
  _imp_string255 Mida;
  _imp_string255 Comma;
  Comma = _imp_str_literal(",,");
  Byteinteger(Addr(Comma) + 2) = 0;
  Adr = Addr(Mid);
  Byteinteger(Adr) = 0;
  Adr1 = Adr + 1;
  Byteinteger(Adr1) = 0;
  Adr1 = Strcat(Adr1, Old);
  Adr1 = Strcat(Adr1, Addr(Comma) + 1);
  Adr1 = Strcat(Adr1, New);
  Byteinteger(Adr) = Strlen(Adr1);
#if 1 /* Target==Emasa */
  if (!_imp_cond_resolve(Mid, Mid, _imp_str_literal(","), Mida))
    _imp_signal(7, 0, 0);
  Rename(Mid, Mida, Flag);
#else
  Rename(Mid);
#endif
  return (0);
}
int Tmpfile(void) {
  _imp_string255 Fl;
  _imp_string255 Tmpstr;
  int Name;
  int Afl;
  Name = Addr(Tmpstr) + 1;
  Fl = _imp_str_literal("w+b");
  Afl = Addr(Fl) + 1;
  Byteinteger(Afl + 3) = 0;
  Name = Tmpnam(Name);
  Printstring(_imp_str_literal("tmpfile:"));
  Write(Name, 11);
  Write(Afl, 11);
  Newline();
  return (Fopen(Name, Afl));
}

#endif

#if 0 /* Target==Vme */
_imp_string255 Litos(long long int Cpuclock)
{_imp_string255 Result;asm("LD result");
asm("MVL  %L =1,0,19");
asm("STD  %TOS");
asm("LSD cpu clock");
asm("CDEC 0");
asm("DSH 12");
asm("MPSR X'24'");
asm("SUPK  %L =19");
asm("LD  %TOS");
asm("MVL  %L =19,31,32");
return(Result);
}
int Tmpnam(int Adstr)
{_imp_string255 Tname;int I;Tname = _imp_join(_imp_str_literal("ICL9CA"),Litos(Readcpuclock));Byteinteger(Addr(Tname) + 26) = Nul;
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= 25; I++)Byteinteger(Addr(Tname) + I) = Itoetab( *Byteinteger(Addr(Tname) + I));
#endif
if (Adstr==Nul) { Tempfilename = Tname;return(Addr(Tempfilename) + 1);
 } I = 0;do { Byteinteger(Adstr + I) =  *Byteinteger(Addr(Tname) + I + 1);I = I + 1; }  while (I==26);
return(Adstr);
}
int Remove(int File)
{_imp_string255 Filename;int Len;int I;int K;Len = Strlen(File);Byteinteger(Addr(Filename)) = Len;for (I = 1; I <= Len; I++)Byteinteger(Addr(Filename) + I) = Etoitab( *Byteinteger(File + I - 1));if (Filename==_imp_str_literal("")) return(0);
K = Ccremove(Filename);if (K!=0) { Icl9caerrno = K;return(K);
 } return(0);
}
int Rename(int Oldfile,int Newfile)
{_imp_string255 Old;_imp_string255 New;int Leno;int Lenn;int I;int K;Leno = Strlen(Oldfile);Lenn = Strlen(Newfile);Byteinteger(Addr(Old)) = Leno;for (I = 1; I <= Leno; I++)Byteinteger(Addr(Old) + I) = Etoitab( *Byteinteger(Oldfile + I - 1));Byteinteger(Addr(New)) = Lenn;for (I = 1; I <= Lenn; I++)Byteinteger(Addr(New) + I) = Etoitab( *Byteinteger(Newfile + I - 1));if (Old==_imp_str_literal("")) return(0);
K = Ccrename(Old,New);if (K!=0) { Icl9caerrno = K;return(K);
 } return(0);
}
int Tmpfile(void)
{int K;int Key;Key = 81;for (K = 80; K >= 3; K--)if (Ffinfo(K).Fnm==_imp_str_literal("")) Key = K;if (Key==81) { Icl9caerrno = 304;return(0);
 } K = Cctmpfile(Key);if (K!=0) { Icl9caerrno = K;return(0);
 } Ffinfo(Key).Fnm = _imp_join(_imp_str_literal("##TMP"),Itos(Key));Ffinfo(Key).Flags = 0x0C;Ffinfo(Key).Eofmark = 0;Ffinfo(Key).Errmark = 0;Ffinfo(Key).Lastop = Oprdwr;return(Key);
}
int System(int Str)
{_imp_string255 Command;int Len;int I;int K;Len = Strlen(Str);Byteinteger(Addr(Command)) = Len;for (I = 1; I <= Len; I++)Byteinteger(Addr(Command) + I) =  *Byteinteger(Str + I - 1);K = Execute(Command);return(K);
}
int Setbuf(int Chan,int Bufptr)
{if ((3 > Chan || Chan > 80)) Opeh(300,0,11,0);if (Ffinfo(Chan).Fnm==_imp_str_literal("")) { Icl9caerrno = 211;Opeh(211,0,11,0); } if (Ffinfo(Chan).Lastop!=Oprdwr) { Icl9caerrno = 229;Opeh(229,0,11,0); } Ccsetbuf(Chan,Bufptr);return(0);
}
int Setvbuf(int Chan,int Bufptr,int Type,int Size)
{int K;if ((3 > Chan || Chan > 80)) Opeh(300,0,11,0);if (Ffinfo(Chan).Fnm==_imp_str_literal("")) { Icl9caerrno = 211;return(211);
 } if (Ffinfo(Chan).Lastop!=Oprdwr) { Icl9caerrno = 229;return(229);
 } K = Ccsetvbuf(Chan,Bufptr,Type,Size);if (K!=0) { Icl9caerrno = K;return(K);
 } return(0);
}

#endif
void Writeout(int Chan, int Add, int Nchs);
void Outstring(void) {
  unsigned char Outside[501 /*0:500*/];
  int I;
  int J;
  int K;
  if (*Byteinteger(Conadio + Ptrio) == Nul) return;
  I = 0;
  if (Chanio != Stdout) {
    while (*Byteinteger(Conadio + Ptrio) != Nul) {
      if (*Byteinteger(Conadio + Ptrio) == '%')
        if (*Byteinteger(Conadio + Ptrio + 1) == '%')
          Ptrio = Ptrio + 1;
        else {
          Ptrio = Ptrio + 1;
          if (I != 0)
            goto Pushfile;
          else
            return;
        }
      Outside(I) = *Byteinteger(Conadio + Ptrio);
      I = I + 1;
      Ptrio = Ptrio + 1;
    }
  Pushfile:;
    Writeout(Chanio, Addr(Outside(0)), I);
  } else
    while (*Byteinteger(Conadio + Ptrio) != Nul) {
      if (*Byteinteger(Conadio + Ptrio) == '%')
        if (*Byteinteger(Conadio + Ptrio + 1) == '%')
          Ptrio = Ptrio + 1;
        else {
          Ptrio = Ptrio + 1;
          return;
        }
      Printch(*Byteinteger(Conadio + Ptrio));
      Ptrio = Ptrio + 1;
    }
}
_imp_string255 Getform(int D) {
  _imp_string255 Str;
  int Sb;
  static int Selprint_sw;
  static void *Selprint[256 /*0:255*/] = {
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_32,
      &&Selprint_default, &&Selprint_default, &&Selprint_35,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_43,      &&Selprint_default,
      &&Selprint_45,      &&Selprint_46,      &&Selprint_default,
      &&Selprint_48,      &&Selprint_49,      &&Selprint_50,
      &&Selprint_51,      &&Selprint_52,      &&Selprint_53,
      &&Selprint_54,      &&Selprint_55,      &&Selprint_56,
      &&Selprint_57,      &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_69,      &&Selprint_default, &&Selprint_71,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_76,      &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_88,      &&Selprint_default,
      &&Selprint_default, &&Selprint_91,      &&Selprint_default,
      &&Selprint_93,      &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_99,      &&Selprint_100,     &&Selprint_101,
      &&Selprint_102,     &&Selprint_103,     &&Selprint_104,
      &&Selprint_105,     &&Selprint_default, &&Selprint_default,
      &&Selprint_108,     &&Selprint_default, &&Selprint_110,
      &&Selprint_111,     &&Selprint_112,     &&Selprint_default,
      &&Selprint_default, &&Selprint_115,     &&Selprint_default,
      &&Selprint_117,     &&Selprint_default, &&Selprint_default,
      &&Selprint_120,     &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default, &&Selprint_default, &&Selprint_default,
      &&Selprint_default,
  };
  Str = _imp_str_literal("");
  Sb = 0;
  for (;;) {
    goto *Selprint[Selprint_sw = *Byteinteger(Conadio + Ptrio)];
  Selprint_93:
    Sb = 0;
    Str = _imp_join(Str, Tostring(']'));
  Selprint_100:;
  Selprint_105:;
  Selprint_111:;
  Selprint_117:;
  Selprint_120:;
  Selprint_88:;
  Selprint_102:;
  Selprint_101:;
  Selprint_69:;
  Selprint_103:;
  Selprint_71:;
  Selprint_99:;
  Selprint_115:;
  Selprint_112:;
  Selprint_110:;
    if (Sb == 0) {
      D = *Byteinteger(Conadio + Ptrio);
      Ptrio = Ptrio + 1;
      return (Str);
    } else
      goto *Selprint[Selprint_sw = '#'];
  Selprint_91:
    Sb = 1;
  Selprint_48:;
  Selprint_49:;
  Selprint_50:;
  Selprint_51:;
  Selprint_52:;
  Selprint_53:;
  Selprint_54:;
  Selprint_55:;
  Selprint_56:;
  Selprint_57:;
  Selprint_45:;
  Selprint_43:;
  Selprint_32:;
  Selprint_46:;
  Selprint_108:;
  Selprint_76:;
  Selprint_104:;
  Selprint_35:
    Str = _imp_join(Str, Tostring(*Byteinteger(Conadio + Ptrio)));
    Ptrio = Ptrio + 1;
    goto Endit;
  Selprint_default:
    if (Sb == 1) goto *Selprint[Selprint_sw = '#'];
    D = *Byteinteger(Conadio + Ptrio);
    if (D != Nul) Ptrio = Ptrio + 1;
    return (Str);
  Endit:;
  }
}
void Decodeformat(int Adstr) {
  static int Formatflag_sw;
  static void *Formatflag[256 /*0:255*/] = {
      &&Formatflag_0,       &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_32,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_35,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_43,      &&Formatflag_default,
      &&Formatflag_45,      &&Formatflag_46,      &&Formatflag_default,
      &&Formatflag_48,      &&Formatflag_49,      &&Formatflag_50,
      &&Formatflag_51,      &&Formatflag_52,      &&Formatflag_53,
      &&Formatflag_54,      &&Formatflag_55,      &&Formatflag_56,
      &&Formatflag_57,      &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_76,      &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_104,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_108,     &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default, &&Formatflag_default, &&Formatflag_default,
      &&Formatflag_default,
  };
  int Intflag;
  int Ptr;
  int Nch;
  int L;
  int Getnum(void) {
    int Nval;
    Nval = 0;
    while ('0' <= Nch && Nch <= '9') {
      Nval = 10 * Nval + (Nch & 15);
      Ptr = Ptr + 1;
      Nch = *Byteinteger(Adstr + Ptr);
    }
    return (Nval);
  }
  Pad = ' ';
  Ljst = Unset;
  Strsize = Default;
  Field = Default;
  Pluset = Unset;
  Spset = Unset;
  Hashset = Unset;
  Ptr = 1;
  Intflag = 0;
  while (Intflag == 0) {
    Nch = *Byteinteger(Adstr + Ptr);
    goto *Formatflag[Formatflag_sw = Nch];
  Formatflag_45:
    Ljst = Set;
    goto Incptr;
  Formatflag_43:
    Pluset = Set;
    goto Incptr;
  Formatflag_32:
    Spset = Set;
    goto Incptr;
  Formatflag_35:
    Hashset = Set;
    goto Incptr;
  Formatflag_108:;
  Formatflag_76:;
  Formatflag_104:;
  Incptr:
    Ptr = Ptr + 1;
    goto Endflag;
  Formatflag_48:
    Pad = '0';
  Formatflag_49:;
  Formatflag_50:;
  Formatflag_51:;
  Formatflag_52:;
  Formatflag_53:;
  Formatflag_54:;
  Formatflag_55:;
  Formatflag_56:;
  Formatflag_57:
    Intflag = 1;
    goto Endflag;
  Formatflag_0:
    Intflag = -1;
    goto Endflag;
  Formatflag_46:
    Intflag = 2;
    Ptr = Ptr + 1;
    Nch = *Byteinteger(Adstr + Ptr);
    goto Endflag;
  Formatflag_default:;
  Endflag:;
  }
  if (Intflag < 0) return;
  if (Intflag == 1) {
    L = Getnum;
    if (L > 0) Field = L;
    while (Nch == ' ') {
      Ptr = Ptr + 1;
      Nch = *Byteinteger(Adstr + Ptr);
    }
    if (Nch != '.') return;
    Ptr = Ptr + 1;
    Nch = *Byteinteger(Adstr + Ptr);
  }
  L = Getnum;
  if (L >= 0) Strsize = L;
  return;
}
void Writeout(int Chan, int Add, int Nchs) {
  int I;
  int K;
  if (Chan != Stdout)
    if (Modeio != Sfprintf) {
      K = Writetext(Chan, Add, Nchs);
      if (K < 0) Opeh(-K, 0, 11, 0);
    } else {
      Move(Nchs, Add, Restr + Resptr);
      Resptr = Resptr + Nchs;
    }
  else {
    Selectoutput(0);
    for (I = 0; I <= Nchs - 1; I++) Printch(*Byteinteger(Add + I));
  }
  Outchars = Outchars + Nchs;
}
void Printd(int Adstr, int Value) {
  int Len;
  int I;
  int K;
  int Nch;
  int Sgn;
  if (Value < 0)
    Strnum = Itos(-Value);
  else
    Strnum = Itos(Value);
  Len = *Length(Strnum);
  Decodeformat(Adstr);
  Sgn = Unset;
  if (Value < 0) {
    Strnum = _imp_join(_imp_str_literal("-"), Strnum);
    Sgn = Set;
  } else if (Pluset == Set) {
    Strnum = _imp_join(_imp_str_literal("+"), Strnum);
    Sgn = Set;
  } else if (Spset == Set)
    Strnum = _imp_join(_imp_str_literal(" "), Strnum);
  Integerf(Sgn);
  Writeout(Chanio, Ares, Inptr);
}
void Printi(int Adstr, int Value) { Printd(Adstr, Value); }
void Printo(int Adstr, int Value) {
  unsigned char B[12 /*0:11*/];
  int J;
  int K;
  for (J = 10; J >= 0; J--) B(11 - J) = (Value >> (3 * J) & 0x07) + '0';
  J = 1;
  while (B(J) == '0' && J < 11) J = J + 1;
  B(J - 1) = 12 - J;
  Strnum = *String(Addr(B(J - 1)));
  Decodeformat(Adstr);
  if (Hashset == Set) Strnum = _imp_join(_imp_str_literal("0"), Strnum);
  Integerf(Unset);
  Writeout(Chanio, Ares, Inptr);
}
void Printu(int Adstr, int Value) {
  long long int L;
  long long int M;
  int I;
  int Rem;
  int K;
  Integer(Addr(L)) = 0;
  Integer(Addr(L) + 4) = Value;
  M = L / 10;
  Rem = L - 10 * M;
  Strnum = _imp_join(Itos(M), Tostring(Rem + '0'));
  Decodeformat(Adstr);
  Pluset = Unset;
  Integerf(Unset);
  Writeout(Chanio, Ares, Inptr);
}
void Printx(int Adstr, int Value, int E) {
  unsigned char B[9 /*0:8*/];
  unsigned char X;
  unsigned char C;
  int I;
  int J;
  int K;
  if (E == 'X')
    C = 'A';
  else
    C = 'a';
  for (J = 7; J >= 0; J--) {
    X = (Value >> (4 * J) & 0x0F);
    if (X > 9)
      B(8 - J) = X + C - 10;
    else
      B(8 - J) = X + '0';
  }
  J = 1;
  while (B(J) == '0' && J < 8) J = J + 1;
  B(J - 1) = 9 - J;
  Strnum = *String(Addr(B(J - 1)));
  Decodeformat(Adstr);
  if (Hashset == Set)
    Strnum = _imp_join(_imp_str_literal("0"), _imp_join(Tostring(E), Strnum));
  Integerf(Unset);
  Writeout(Chanio, Ares, Inptr);
}
void Printf(int Adstr, double Value) {
  double Round;
  double Z;
  double X;
  double Y;
  int Stad;
  int Add;
  int I;
  int M;
  int N;
  int Sign;
  int L;
  int J;
  int Sgn;
  int Hold;
  int Len;
  int Nch;
  int K;
  unsigned char Tempbuff[64 /*0:63*/];
  Add = Addr(Tempbuff(1));
  Stad = Add;
  Decodeformat(Adstr);
  if (Strsize == Default) Strsize = 6;
  X = Value;
  X = X + Dz;
  M = Strsize;
  Sgn = Unset;
  Sign = 0;
  if (X < 0)
    Sign = '-';
  else if (Pluset == Set)
    Sign = '+';
  else if (Spset == Set)
    Sign = ' ';
  if (Sign != 0) Sgn = Set;
  Y = Mod(X);
  Round = 0.5 / REXP(0, M);
  I = 0;
  Z = 1;
  Y = Y + Round;
  do {
    I = I + 1;
    Z = 10 * Z;
  } while (Z > Y);
  if (Sign != 0) {
    Byteinteger(Add) = Sign;
    Add = Add + 1;
  }
  J = I - 1;
  Z = REXP(0, J);
  for (;;) {
    do {
      L = Intpt(Y / Z);
      Y = Y - L * Z;
      Z = Z / 10;
      Byteinteger(Add) = L + '0';
      Add = Add + 1;
      J = J - 1;
    } while (J < 0);
    if (M == 0) {
      Byteinteger(Add) = '.';
      Add = Add + 1;
      M = -1;
    }
    if (M == -1) {
      Tempbuff(0) = Add - Stad;
      Strnum = *String(Addr(Tempbuff(0)));
      Strsize = Default;
      Integerf(Sgn);
      Writeout(Chanio, Ares, Inptr);
      return;
    }
    Byteinteger(Add) = '.';
    Add = Add + 1;
    J = M - 1;
    Z = REXP(0, (J - 1));
    M = -1;
    Y = 10 * Y * Z;
  }
}
void Printe(int Adstr, double Value, int E) {
  double Round;
  double Factor;
  double Lb;
  double Ub;
  double X;
  double Y;
  int Stad;
  int Add;
  int Count;
  int Inc;
  int Sign;
  int L;
  int J;
  int Sgn;
  int Hold;
  int Len;
  int K;
  int I;
  unsigned char Tempbuff[64 /*0:63*/];
  Decodeformat(Adstr);
  if (Strsize == Default) Strsize = 6;
  Hold = Strsize;
  Add = Addr(Tempbuff(1));
  Stad = Add;
  Round = 0.5 / REXP(0, Hold);
  Lb = 1 - Round;
  Ub = 10 - Round;
  Sign = 0;
  X = Value + Dz;
  Y = X;
  Sgn = Unset;
  if (X == 0)
    Count = 0;
  else {
    if (X < 0) {
      Sgn = Set;
      X = -X;
      Sign = '-';
    } else if (Pluset == Set) {
      Sign = '+';
      Sgn = Set;
    } else if (Spset == Set)
      Sign = ' ';
    Inc = 1;
    Count = 0;
    Factor = 0;
    if (X <= 1) {
      Factor = 10;
      Inc = -1;
    }
    while (X < Lb || X >= Ub) {
      X = X * Factor;
      Count = Count + Inc;
    }
  }
  X = X + Round;
  if (Sign != 0) {
    Byteinteger(Add) = Sign;
    Add = Add + 1;
  }
  if (Hold < 0) goto Outexp;
  L = Intpt(X);
  Byteinteger(Add) = L + '0';
  Add = Add + 1;
  if (Hold > 0) {
    Byteinteger(Add) = '.';
    Add = Add + 1;
  }
  J = 1;
  while (J <= Hold) {
    X = (X - L) * 10;
    L = Intpt(X);
    Byteinteger(Add) = L + '0';
    Add = Add + 1;
    J = J + 1;
  }
Outexp:;
  Byteinteger(Add) = E;
  Add = Add + 1;
  if (Count >= 0)
    Sign = '+';
  else {
    Sign = '-';
    Count = -Count;
  }
  Byteinteger(Add) = Sign;
  J = Count / 10;
  Byteinteger(Add + 1) = J + '0';
  Byteinteger(Add + 2) = Count - 10 * J + '0';
  Tempbuff(0) = (Add + 3) - Stad;
  Strnum = *String(Addr(Tempbuff(0)));
  Strsize = Default;
  Integerf(Sgn);
  Writeout(Chanio, Ares, Inptr);
}
void Printg(int Adstr, double Value, int E) {
  Decodeformat(Adstr);
  if (Strsize == Default) Strsize = 6;
  if (Mod(Value) < 0.0001 || Mod(Value) > IEXP(10, Strsize))
    Printe(Adstr, Value, E);
  else
    Printf(Adstr, Value);
}
void Printc(int Adstr, int Value) {
  int New;
  int K;
  New = Value & 255;
#if 0 /* Chcode==Ebcdic */
New = Etoitab(Value);
#endif
  Writeout(Chanio, Addr(New) + 3, 1);
}
void Prints(int Adcon, int Adstr) {
  int I;
  int J;
  int K;
  int L;
  int M;
  int N;
  int B;
  int Len;
  int Cfield;
  int Cstrsize;
  int Cljst;
  Decodeformat(Adcon);
  Len = Strlen(Adstr);
  if (Strsize != Default && Strsize < Len) {
    Len = Strsize;
    Strsize = Default;
  }
  L = Len / 255;
  M = Len - 255 * L;
  Cfield = Field;
  Cstrsize = Strsize;
  Cljst = Ljst;
  for (N = 0; N <= L; N++) {
    if (N == L)
      B = M;
    else
      B = 255;
    Move(B, Adstr + 255 * N, Addr(Strnum) + 1);
    Byteinteger(Addr(Strnum)) = B;
    if (L == 0)
      Integerf(Unset);
    else {
      if (N == 0) {
        Ljst = Unset;
        if (Cfield != Default) Field = Cfield - Len + 255;
        Integerf(Unset);
      } else if (0 < N && N < L) {
        Ljst = Unset;
        Field = Default;
        Integerf(Unset);
      } else {
        Ljst = Cljst;
        if (Ljst == Set && Cfield != Default) Field = Cfield - Len + B;
        Integerf(Unset);
      }
    }
#if 0 /* Chcode==Ebcdic */
for (I = 0; I <= Inptr - 1; I++)Byteinteger(Ares + I) = Etoitab( *Byteinteger(Ares + I));
#endif
    Writeout(Chanio, Ares, Inptr);
  }
}
void Printp(int Adstr, int Value) { Printx(Adstr, Value, 'X'); }
void Printn(int Value) { Integer(Value) = Outchars; }
void Rc(int P) {
  int Add;
  int K;
  if (Chanio != -1) {
    if (Ffinfo(Chanio).Eofmark == 1) {
      P = -1;
      return;
    }
    if (Chanio != Stdin) {
      Add = Addr(P) + 3;
      P = 0;
      K = Readtext(Chanio, Add, 1);
      if (K < 0) Opeh(-K, 0, 11, 0);
      if (K == 0) {
        Ffinfo(Chanio).Eofmark = 1;
        P = -1;
      }
      Ffinfo(Chanio).Lastop = Opread;
      return;
    } else {
      Selectinput(0);
      Readch(P);
      if (P == Em) {
        Ffinfo(Stdin).Eofmark = 1;
        P = -1;
      }
    }
  } else {
    P = *Byteinteger(Restr + Resptr);
    if (P == Nul) {
      P = -1;
      return;
    }
#if 0 /* Chcode==Ebcdic */
P = Etoitab(P);
#endif
    Resptr = Resptr + 1;
  }
}
int Iswspace(int Z) {
  if (Z == ' ' || Z == Ht || Z == Nl || Z == -1)
    return (1);
  else
    return (0);
}
void Instring(void) {
  int P;
  int Q;
  P = *Byteinteger(Conadio + Ptrio);
  if (P == Nul) return;
  while (P != Nul) {
    if (P == '%') {
      Ptrio = Ptrio + 1;
      if (*Byteinteger(Conadio + Ptrio) != '%') return;
    }
    Rc(Q);
    if (Iswspace(Q) == 1)
      while (Iswspace(Q) != 0) Rc(Q);
    else if (P != Q) {
      Selectoutput(0);
      Printstring(_imp_str_literal("No matching "));
      Printch(P);
      Printstring(_imp_str_literal(" on input channel"));
      Write(Chanio, 4);
      Newline();
    }
    Ptrio = Ptrio + 1;
    P = *Byteinteger(Conadio + Ptrio);
  }
}
void Decodesformat(int Adstr) {
  static int Sflag_sw;
  static void *Sflag[256 /*0:255*/] = {
      &&Sflag_0,       &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_9,       &&Sflag_10,      &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_32,      &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_42,      &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_48,      &&Sflag_49,      &&Sflag_50,      &&Sflag_51,
      &&Sflag_52,      &&Sflag_53,      &&Sflag_54,      &&Sflag_55,
      &&Sflag_56,      &&Sflag_57,      &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
      &&Sflag_default, &&Sflag_default, &&Sflag_default, &&Sflag_default,
  };
  int Ptr;
  int Nch;
  int Flag;
  int Nval;
  Noassign = Unset;
  Infield = 255;
  Flag = 0;
  Ptr = 1;
  while (Flag == 0) {
    Nch = *Byteinteger(Adstr + Ptr);
    goto *Sflag[Sflag_sw = Nch];
  Sflag_32:;
  Sflag_9:;
  Sflag_10:
    goto Incptr;
  Sflag_42:
    Noassign = Set;
    goto Incptr;
  Sflag_0:
    Flag = -1;
    goto Endflag;
  Sflag_48:;
  Sflag_49:;
  Sflag_50:;
  Sflag_51:;
  Sflag_52:;
  Sflag_53:;
  Sflag_54:;
  Sflag_55:;
  Sflag_56:;
  Sflag_57:
    Flag = 1;
    goto Endflag;
  Sflag_default:;
  Incptr:
    Ptr = Ptr + 1;
  Endflag:;
  }
  if (Flag == 1) {
    Nval = 0;
    while ('0' <= Nch && Nch <= '9') {
      Nval = 10 * Nval + (Nch & 15);
      Ptr = Ptr + 1;
      Nch = *Byteinteger(Adstr + Ptr);
    }
    if (Nval > 0) Infield = Nval;
  }
  return;
}
void Scand(int Stradd, int Resadd) {
  int I;
  int Val;
  int Cnt;
  int P;
  unsigned char Dbuff[32 /*0:31*/];
  Decodesformat(Stradd);
  Cnt = 0;
  do
    Rc(P);
  while (Iswspace(P) == 0);
  if (P == '-' || P == '+') {
    Cnt = Cnt + 1;
    Dbuff(Cnt) = P;
    Rc(P);
  }
  while (Cnt < Infield && '0' <= P && P <= '9') {
    Cnt = Cnt + 1;
    Dbuff(Cnt) = P;
    if (Cnt != Infield) Rc(P);
  }
  Val = Cctointeger(Resadd, 4, Cnt, Addr(Dbuff(1)), 0);
  Inchars = Inchars + 1;
}
void Scani(int Stradd, int Resadd) {
  unsigned char Dbuff[16 /*0:15*/];
  int I;
  int P;
  int Val;
  int Cnt;
  _imp_string255 Strval;
  Decodesformat(Stradd);
  Cnt = 0;
  Strval = _imp_str_literal("");
  do
    Rc(P);
  while (Iswspace(P) == 0);
  if (P == '0') {
    Rc(P);
    Cnt = Cnt + 1;
    if (P == 'x' || P == 'X') {
      Rc(P);
      Cnt = Cnt + 1;
      while (Cnt < Infield &&
             (('0' <= P && P <= '9') || ('a' <= P && P <= 'f') ||
              ('A' <= P && P <= 'F'))) {
        Cnt = Cnt + 1;
        Strval = _imp_join(Strval, Tostring(P));
        if (Cnt != Infield) Rc(P);
      }
      Strval = Htoi(Strval);
    } else {
      while (Cnt < Infield && '0' <= P && P <= '7') {
        Cnt = Cnt + 1;
        Strval = _imp_join(Strval, Tostring(P));
        if (Cnt != Infield) Rc(P);
      }
      Strval = Otoi(Strval);
    }
  } else {
    if (P == '-' || P == '+') {
      Strval = _imp_join(Strval, Tostring(P));
      Rc(P);
      Cnt = Cnt + 1;
    }
    while (Cnt < Infield && ('0' <= P && P <= '9')) {
      Cnt = Cnt + 1;
      Strval = _imp_join(Strval, Tostring(P));
      if (Cnt != Infield) Rc(P);
    }
  }
  String(Addr(Dbuff(0))) = Strval;
  Val = Cctointeger(Resadd, 4, Dbuff(0), Addr(Dbuff(1)), 0);
  Inchars = Inchars + 1;
}
void Scano(int Stradd, int Resadd) {
  unsigned char Dbuff[16 /*0:15*/];
  int I;
  int P;
  int Val;
  int Cnt;
  _imp_string255 Strval;
  Decodesformat(Stradd);
  Cnt = 0;
  Strval = _imp_str_literal("");
  do
    Rc(P);
  while (Iswspace(P) == 0);
  while (Cnt < Infield && '0' <= P && P <= '7') {
    Strval = _imp_join(Strval, Tostring(P));
    Cnt = Cnt + 1;
    if (Cnt != Infield) Rc(P);
  }
  Strval = Otoi(Strval);
  String(Addr(Dbuff(0))) = Strval;
  Val = Cctointeger(Resadd, 4, Dbuff(0), Addr(Dbuff(1)), 0);
  Inchars = Inchars + 1;
}
void Scanx(int Stradd, int Resadd) {
  unsigned char Dbuff[16 /*0:15*/];
  _imp_string255 Strval;
  int Val;
  int I;
  int P;
  int Cnt;
  Decodesformat(Stradd);
  Cnt = 0;
  Strval = _imp_str_literal("");
  do
    Rc(P);
  while (Iswspace(P) == 0);
  while ((Cnt < Infield) && (('0' <= P && P <= '9') || ('a' <= P && P <= 'f') ||
                             ('A' <= P && P <= 'F'))) {
    Strval = _imp_join(Strval, Tostring(P));
    Cnt = Cnt + 1;
    if (Cnt != Infield) Rc(P);
  }
  Strval = Htoi(Strval);
  String(Addr(Dbuff(0))) = Strval;
  Val = Cctointeger(Resadd, 4, Dbuff(0), Addr(Dbuff(1)), 0);
  Inchars = Inchars + 1;
}
void Scanefg(int Stradd, int Resadd) {
  int Val;
  int Adbef;
  int Adaft;
  int Adexp;
  int I;
  int P;
  int Cnt;
  _imp_string255 Straft;
  _imp_string255 Strbef;
  _imp_string255 Strexp;
  unsigned char Befval[256 /*0:255*/];
  void Nextp(void) {
    Cnt = Cnt + 1;
    if (Cnt != Infield) Rc(P);
  }
  Decodesformat(Stradd);
  Cnt = 0;
  Straft = _imp_str_literal("");
  Strbef = _imp_str_literal("");
  Strexp = _imp_str_literal("");
  do
    Rc(P);
  while (Iswspace(P) == 0);
  if (P == '+' || P == '-') {
    Strbef = _imp_join(Tostring(P), Strbef);
    Nextp();
    while (Cnt < Infield && P == ' ') Nextp();
  }
  while (Cnt < Infield && ('0' <= P && P <= '9')) {
    Strbef = _imp_join(Strbef, Tostring(P));
    Nextp();
  }
  if (Strbef == _imp_str_literal("+") || Strbef == _imp_str_literal("-"))
    Strbef = _imp_join(Strbef, _imp_str_literal("0"));
  if (P == '.') {
    Nextp();
    while (Cnt < Infield && ('0' <= P && P <= '9')) {
      Straft = _imp_join(Straft, Tostring(P));
      Nextp();
    }
  }
  if (P == 'E' || P == 'e') {
    Nextp();
    while (Cnt < Infield && P == ' ') Nextp();
    if (P == '-' || P == '+') {
      Strexp = _imp_join(Strexp, Tostring(P));
      Nextp();
      while (Cnt < Infield && P == ' ') Nextp();
    }
    while (Cnt < Infield && ('0' <= P && P <= '9')) {
      Strexp = _imp_join(Strexp, Tostring(P));
      Nextp();
    }
    if (Strexp == _imp_str_literal("+") || Strexp == _imp_str_literal("-"))
      Strexp = _imp_join(Strexp, _imp_str_literal("0"));
  }
  String(Addr(Befval(0))) = Strbef;
  String(Addr(Aftval(0))) = Straft;
  String(Addr(Expval(0))) = Strexp;
  if (Befval(0) == 0)
    Adbef = 0;
  else
    Adbef = Addr(Befval(1));
  if (Aftval(0) == 0)
    Adaft = 0;
  else
    Adaft = Addr(Aftval(1));
  if (Expval(0) == 0)
    Adexp = 0;
  else
    Adexp = Addr(Expval(1));
  Val = Cctoreal(Resadd, 4, Befval(0), Adbef, Aftval(0), Adaft, Expval(0),
                 Adexp, 0, 0, 0);
  Inchars = Inchars + 1;
}
void Scans(int Stradd, int Resadd) {
  int Ptr;
  int I;
  int P;
  Decodesformat(Stradd);
  Ptr = 0;
  do
    Rc(P);
  while (Iswspace(P) == 0);
  while (Iswspace(P) == 0 && Ptr < Infield) {
    Byteinteger(Resadd + Ptr) = P;
    Ptr = Ptr + 1;
    if (Ptr != Infield) Rc(P);
  }
  Byteinteger(Resadd + Ptr) = Nul;
#if 0 /* Chcode==Ebcdic */
for (I = 0; I <= Ptr - 1; I++)Byteinteger(Resadd + I) = Itoetab( *Byteinteger(Resadd + I));
#endif
  Inchars = Inchars + 1;
}
void Scanc(int Adstr, int Resadd) {
  int K;
  int P;
  Rc(P);
#if 0 /* Chcode==Ebcdic */
P = Itoetab(P);
#endif
  Integer(Resadd) = P;
  Inchars = Inchars + 1;
}
void Scanp(int Adstr, int Value) { Scanx(Adstr, Value); }
void Scann(int Resadd) { Integer(Resadd) = Inchars; }
void Scanu(int Adstr, int Value) { Scand(Adstr, Value); }
void Scansb(int Adstr, int Resadd) {
  int I;
  int J;
  int P;
  int Endmark;
  I = 2;
  J = 0;
  P = *Byteinteger(Adstr + I);
  if (P == '^') {
    Endmark = 0;
    I = I + 1;
  } else
    Endmark = 1;
  do {
    P = *Byteinteger(Adstr + I);
    if (P == ']')
      if (Endmark == 1) {
        Byteinteger(Resadd + J) = P;
        J = J + 1;
      } else {
        Byteinteger(Resadd + J) = P;
        J = J + 1;
        I = I + 1;
      }
  } while (P == ']');
  Byteinteger(Resadd + J) = Nul;
#if 0 /* Chcode==Ebcdic */
for (I = 0; I <= J - 1; I++)Byteinteger(Resadd + I) = Itoetab( *Byteinteger(Resadd + I));
#endif
  Inchars = Inchars + 1;
}
void Givdoub(double Value) {
  static int Callprint_sw;
  static void *Callprint[256 /*0:255*/] = {
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_69,      &&Callprint_default, &&Callprint_71,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_100,     &&Callprint_101,
      &&Callprint_102,     &&Callprint_103,     &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default,
  };
  _imp_string255 Str;
  int D;
  int Ival;
  D = ' ';
  if (*Byteinteger(Conadio + Ptrio) == Nul) return;
  Str = Getform(D);
  Str = _imp_join(Str, Tostring(Nul));
  goto *Callprint[Callprint_sw = D];
Callprint_100:
  Ival = Int(Value);
  Printd(Addr(Str), Ival);
  Outstring();
  return;
Callprint_102:
  Printf(Addr(Str), Value);
  Outstring();
  return;
Callprint_101:
  Printe(Addr(Str), Value, 'e');
  Outstring();
  return;
Callprint_69:
  Printe(Addr(Str), Value, 'E');
  Outstring();
  return;
Callprint_103:
  Printg(Addr(Str), Value, 'e');
  Outstring();
  return;
Callprint_71:
  Printg(Addr(Str), Value, 'E');
  Outstring();
  return;
Callprint_default:
  Icl9caerrno = 305;
  Opeh(305, 0, 11, 0);
}
int Endio(void) {
  int I;
  int K;
#if 0 /* Chcode==Ebcdic */
I = Free(Ebadr);
#endif
  if (Modeio == Cscanf || Modeio == Cfscanf)
    K = Inchars;
  else if (Modeio == Cfprintf || Modeio == Cprintf || Modeio == Sfprintf)
    K = Outchars;
  else
    K = 0;
  if (Modeio == Sfprintf) {
#if 0 /* Chcode==Ebcdic */
for (I = 0; I <= Resptr - 1; I++)Byteinteger(Restr + I) = Itoetab( *Byteinteger(Restr + I));
#endif
    Byteinteger(Restr + Resptr) = Nul;
  }
  return (K);
}
void Givint(int Value) {
  static int Callprint_sw;
  static void *Callprint[256 /*0:255*/] = {
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_69,      &&Callprint_default, &&Callprint_71,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_88,      &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_99,      &&Callprint_100,     &&Callprint_101,
      &&Callprint_102,     &&Callprint_103,     &&Callprint_default,
      &&Callprint_105,     &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_110,
      &&Callprint_111,     &&Callprint_112,     &&Callprint_default,
      &&Callprint_default, &&Callprint_115,     &&Callprint_default,
      &&Callprint_117,     &&Callprint_default, &&Callprint_default,
      &&Callprint_120,     &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default, &&Callprint_default, &&Callprint_default,
      &&Callprint_default,
  };
  static int Callscan_sw;
  static void *Callscan[256 /*0:255*/] = {
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_69,      &&Callscan_default, &&Callscan_71,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_88,      &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_93,      &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_99,      &&Callscan_100,     &&Callscan_101,
      &&Callscan_102,     &&Callscan_103,     &&Callscan_default,
      &&Callscan_105,     &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_110,
      &&Callscan_111,     &&Callscan_112,     &&Callscan_default,
      &&Callscan_default, &&Callscan_115,     &&Callscan_default,
      &&Callscan_117,     &&Callscan_default, &&Callscan_default,
      &&Callscan_120,     &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default, &&Callscan_default, &&Callscan_default,
      &&Callscan_default,
  };
  _imp_string255 Str;
  int D;
  int J;
  int M;
  int L;
  int Rptr;
  Str = _imp_str_literal("");
  D = ' ';
  if (*Byteinteger(Conadio + Ptrio) == Nul) return;
  if (Modeio == Cprintf || Modeio == Cfprintf || Modeio == Sfprintf) {
    Rptr = Ptrio;
    Str = Getform(D);
    if (D == '*') {
      Str = Itos(Value);
      L = *Length(Str);
      if (L > 1) {
        J = Conadio + Strlen(Conadio);
        while (J >= Conadio + Ptrio) {
          Byteinteger(J + L - 1) = *Byteinteger(J);
          J = J - 1;
        }
      }
      M = Conadio + Ptrio - 2;
      for (J = 1; J <= L; J++) Byteinteger(M + J) = *Charno(Str, J);
      Ptrio = Rptr;
      return;
    }
    Str = _imp_join(Str, Tostring(Nul));
    goto *Callprint[Callprint_sw = D];
  Callprint_100:
    Printd(Addr(Str), Value);
    Outstring();
    return;
  Callprint_105:
    Printi(Addr(Str), Value);
    Outstring();
    return;
  Callprint_111:
    Printo(Addr(Str), Value);
    Outstring();
    return;
  Callprint_117:
    Printu(Addr(Str), Value);
    Outstring();
    return;
  Callprint_120:
    Printx(Addr(Str), Value, 'x');
    Outstring();
    return;
  Callprint_88:
    Printx(Addr(Str), Value, 'X');
    Outstring();
    return;
  Callprint_102:
    Printf(Addr(Str), Value);
    Outstring();
    return;
  Callprint_101:
    Printe(Addr(Str), Value, 'e');
    Outstring();
    return;
  Callprint_69:
    Printe(Addr(Str), Value, 'E');
    Outstring();
    return;
  Callprint_103:
    Printg(Addr(Str), Value, 'e');
    Outstring();
    return;
  Callprint_71:
    Printg(Addr(Str), Value, 'E');
    Outstring();
    return;
  Callprint_99:
    Printc(Addr(Str), Value);
    Outstring();
    return;
  Callprint_115:;
#if 1 /* Target==Emasa */
    if (Dvalidate(Value, 16, 0) == 0) goto Prstring;

#else
    asm("LDTB X'18000010'");
    asm("LDA value");
    asm("VAL (%LNB +1)");
    asm("JCC 12,<prstring>");

#endif
    Icl9caerrno = 306;
    Opeh(306, 0, 11, 0);
  Prstring:
    Prints(Addr(Str), Value);
    Outstring();
    return;
  Callprint_112:
    Printp(Addr(Str), Value);
    Outstring();
    return;
  Callprint_110:
    Printn(Value);
    Outstring();
    return;
  Callprint_default:
    return;
  } else {
    Str = Getform(D);
    Str = _imp_join(Str, Tostring(Nul));
    goto *Callscan[Callscan_sw = D];
  Callscan_69:;
  Callscan_71:;
  Callscan_101:;
  Callscan_102:;
  Callscan_103:
    Scanefg(Addr(Str), Value);
    Instring();
    return;
  Callscan_120:;
  Callscan_88:
    Scanx(Addr(Str), Value);
    Instring();
    return;
  Callscan_105:
    Scani(Addr(Str), Value);
    Instring();
    return;
  Callscan_100:
    Scand(Addr(Str), Value);
    Instring();
    return;
  Callscan_111:
    Scano(Addr(Str), Value);
    Instring();
    return;
  Callscan_115:
    Scans(Addr(Str), Value);
    Instring();
    return;
  Callscan_117:
    Scanu(Addr(Str), Value);
    Instring();
    return;
  Callscan_99:
    Scanc(Addr(Str), Value);
    Instring();
    return;
  Callscan_112:
    Scanp(Addr(Str), Value);
    Instring();
    return;
  Callscan_110:
    Scann(Value);
    Instring();
    return;
  Callscan_93:
    Scansb(Addr(Str), Value);
    Instring();
    return;
  Callscan_default:
    return;
  }
}
void Convertformatstring(int Str) {
  int I;
  int Len;
  int C;
  Len = Strlen(Str);
  Ebadr = Malloc(Len + 10);
  for (I = 0; I <= Len - 1; I++) {
    C = *Byteinteger(Str + I);
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
    Byteinteger(Ebadr + I) = C;
  }
  Byteinteger(Ebadr + Len) = Nul;
  Conadio = Ebadr;
}
void Printff(int Adstr) {
  Convertformatstring(Adstr);
  Modeio = Cprintf;
  Chanio = Stdout;
  Ptrio = 0;
  Outstring();
  Ffinfo(Chanio).Lastop = Opwrite;
  Outchars = 0;
}
void Fprintf(int Chan, int Adstr) {
  int K;
  Convertformatstring(Adstr);
  Modeio = Cfprintf;
  Chanio = Chan;
  K = Checkchano(Chanio);
  Ptrio = 0;
  Outstring();
  Ffinfo(Chanio).Lastop = Opwrite;
  Outchars = 0;
}
void Scanff(int Stradd) {
  Convertformatstring(Stradd);
  Modeio = Cscanf;
  Chanio = Stdin;
  Ptrio = 0;
  Instring();
  Ffinfo(Chanio).Lastop = Opread;
  Inchars = 0;
}
void Fscanf(int Chan, int Stradd) {
  int K;
  Convertformatstring(Stradd);
  Modeio = Cfscanf;
  Chanio = Chan;
  K = Checkchani(Chanio);
  Ptrio = 0;
  Instring();
  Ffinfo(Chanio).Lastop = Opread;
  Inchars = 0;
}
void Sprintf(int Resadd, int Stradd) {
  Convertformatstring(Stradd);
  Resptr = 0;
  Restr = Resadd;
  Modeio = Sfprintf;
  Ptrio = 0;
  Chanio = -1;
  Outstring();
  Outchars = 0;
}
void Sscanf(int Resadd, int Stradd) {
  Convertformatstring(Stradd);
  Resptr = 0;
  Restr = Resadd;
  Modeio = Sfscanf;
  Ptrio = 0;
  Chanio = -1;
  Inchars = 0;
}
int Fgetc(int Chan) {
  int I;
  int K;
  int C;
  Chanio = Chan;
  K = Checkchani(Chan);
  Rc(C);
  Ffinfo(Chan).Lastop = Opread;
#if 0 /* Chcode==Ebcdic */
if (C!= -1) C = Itoetab(C);
#endif
  return (C);
}
int Fgets(int Adstr, int N, int Chan) {
  int I;
  int Cc;
  int C;
  Chanio = Chan;
  I = Checkchani(Chan);
  if (I != 0) return (Nul);
  I = 0;
  do {
    Rc(C);
    if (C == -1)
      if (I == 0)
        return (Nul);
      else if (C == Nl) {
#if 0 /* Chcode==Ebcdic */
Cc = 21;
#else
        Cc = Nl;
#endif
        Byteinteger(Adstr + I) = Cc;
        I = I + 1;
      } else {
#if 0 /* Chcode==Ebcdic */
C = Itoetab(C);
#endif
        Byteinteger(Adstr + I) = C;
        I = I + 1;
      }
  } while (I == N - 1 || C == Nl || C == -1);
  Byteinteger(Adstr + I) = Nul;
  return (Adstr);
}
extern int Puts(int Adstr);
extern int Putchar(int C);
int Fputc(int C, int Chan) {
  unsigned char Z;
  int K;
  C = C & 255;
  if (Chan == Stdout) return (Putchar(C));
  K = Checkchano(Chan);
  if (K != 0) return (Eof);
  Z = C;
#if 0 /* Chcode==Ebcdic */
Z = Etoitab(Z);
#endif
  K = Writetext(Chan, Addr(Z), 1);
  if (K < 0) {
    Icl9caerrno = -K;
    Ffinfo(Chan).Errmark = 1;
    return (Eof);
  }
  Ffinfo(Chan).Lastop = Opwrite;
  return (Z);
}
int Fputs(int Adstr, int Chan) {
  unsigned char C;
  int I;
  int Len;
  int K;
  if (Chan == Stdout) return (Puts(Adstr));
  K = Checkchano(Chan);
  if (K != 0) return (K);
  Len = Strlen(Adstr);
  for (I = 0; I <= Len - 1; I++) {
    C = *Byteinteger(Adstr + I);
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
    K = Writetext(Chan, Addr(C), 1);
    if (K < 0) {
      Icl9caerrno = -K;
      return (-K);
    }
  }
  Ffinfo(Chan).Lastop = Opwrite;
  return (0);
}
int Getc(int Chan) { return (Fgetc(Chan)); }
int Getchar(void) {
  int I;
  Chanio = Stdin;
  Rc(I);
#if 0 /* Chcode==Ebcdic */
if (I!= -1) I = Itoetab(I);
#endif
  return (I);
}
int Gets(int Adstr) {
  int I;
  int J;
  int C;
  Chanio = Stdin;
  I = 0;
  do {
    Rc(C);
    if (C == -1 || C == Nl) {
      if (I == 0) return (Nul);
      Byteinteger(Adstr + I) = Nul;
    } else {
#if 0 /* Chcode==Ebcdic */
C = Itoetab(C);
#endif
      Byteinteger(Adstr + I) = C;
      I = I + 1;
    }
  } while (C == Nl || C == -1);
  return (Adstr);
}
int Putc(int C, int Chan) { return (Fputc(C, Chan)); }
int Putchar(int C) {
  int Z;
  Z = C & 255;
#if 0 /* Chcode==Ebcdic */
Z = Etoitab(Z);
#endif
  Selectoutput(0);
  Printch(Z);
  return (Z);
}
int Puts(int Adstr) {
  int I;
  int Len;
  int C;
  Len = Strlen(Adstr);
  Selectoutput(0);
  for (I = 0; I <= Len; I++) {
    C = *Byteinteger(Adstr + I);
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
    Printch(C);
  }
  return (0);
}
int Ungetc(int C, int Chan) {
  int Ch;
  if (Ffinfo(Chan).Lastop != Opread || C == Eof) return (Eof);

#if 0 /* Target==Vme */
Ch = Ccungetc(C,Chan);
#endif

#if 1 /* Target==Emas || Target==Emasa */
  if (Ffinfo(Chan).Fptr == Ffinfo(Chan).Conad) return (Eof);
  Ffinfo(Chan).Fptr = Ffinfo(Chan).Fptr - 1;
#endif
  return (Ch);
}
void Calcchecksum(Allhead Res) {
#if 1 /* Target==Emasa */
  asm("L 1,Res");
  asm("L 0,0(1)");
  asm("AL 0,4(1)");
  asm("AL 0,8(1)");
  asm("ST 0,12(1)");

#else
  asm("LXN Res+4");
  asm("LSS (%XNB )");
  asm("UAD (%XNB +1)");
  asm("UAD (%XNB +2)");
  asm("ST (%XNB +3)");

#endif
}
int Valcheck(Allhead Res) {
#if 1 /* Target==Emasa */
  asm("L 1,Res");
  asm("L 0,0(1)");
  asm("AL 0,4(1)");
  asm("AL 0,8(1)");
  asm("CL 0,12(1)");
  asm("basr 2,0");
  asm("using 2");
  asm("BC 7,<valfail>");
  asm("DROP 2");

#else
  asm("LXN Res+4");
  asm("LSS (%XNB )");
  asm("UAD (%XNB +1)");
  asm("UAD (%XNB +2)");
  asm("UCP (%XNB +3)");
  asm("JCC 7,<valfail>");

#endif
  return (Unset);
Valfail:
  return (Set);
}
int Free(int Ptr) {
  int L;
  int X;
  int Prevblock;
  Allhead *Res;
  Allhead *Prev;
  Allhead *Q;
  if (Tracing == Set) {
    Printstring(_imp_str_literal("FREE  :  Address is "));
    Phex(Ptr);
    Newline();
    Printstring(_imp_str_literal("         Dump of header : X"));
    Phex(*Integer(Ptr - 16));
    Spaces(2);
    Phex(*Integer(Ptr - 12));
    Spaces(2);
    Phex(*Integer(Ptr - 8));
    Newline();
  }
  if ((Spallspace > Ptr || Ptr > (Spallspace + Alloclimit))) return (0);
  L = Ptr - Sizehead;
  Res = Record(L);
  if (Res->Form == 0xFFFF && Res->Mode == Captured && Valcheck(*Res) == Unset) {
    Res->Mode = Spfree;
    Prevblock = Startfreespace;
    Prev = Record(Prevblock);
    X = Prev->Nextblock;
    while (X < L && X != Startfreespace) {
      Q = Record(X);
      Prevblock = X;
      X = Q->Nextblock;
    }
    Prev = Record(Prevblock);
    Q = Record(X);
    if (Prev->H0 + Sizehead + Prevblock == L && Prevblock > Startfreespace) {
      Prev->H0 = Prev->H0 + Res->H0 + Sizehead;
      Prev->Nextblock = X;
      Res = Prev;
      L = Prevblock;
    } else {
      Prev->Nextblock = L;
      Res->Nextblock = X;
    }
    if (Res->H0 + L + Sizehead == X) {
      Res->H0 = Res->H0 + Q->H0 + Sizehead;
      Res->Nextblock = Q->Nextblock;
    }
    Calcchecksum(*Res);
    Calcchecksum(*Prev);
    return (0);
  } else
    Opeh(310, 0, 11, 0);
}
int Malloc(int Elsize) {
  int Size;
  int Len;
  int X;
  int Y;
  int Nextblock;
  int Prevblock;
  int Conad;
  int Flag;
  Allhead *Res;
  Allhead *Prev;
  if (Allocspac != 131) {
    Outfile(_imp_str_literal("t#cstall"), Alloclimit, 0, 0, Conad, Flag);
    if (Flag != 0) Opeh(Flag, 0, 11, 0);
    Res = Record(Conad);
    Spallspace = Conad;
    Startfreespace = Conad;
    Res->Mode = Spfree;
    Res->Form = 0xFFFF;
    Res->H0 = 0;
    Res->Nextblock = Spallspace + Sizehead;
    Calcchecksum(*Res);
    Allocspac = 131;
    Res = Record(Conad + Sizehead);
    Res->Mode = Spfree;
    Res->Form = 0xFFFF;
    Res->H0 = Alloclimit - 2 * Sizehead;
    Res->Nextblock = Spallspace;
    Calcchecksum(*Res);
  }
  Len = (Elsize + 3) & 0xFFFFFFFC;
  Res = Record(Startfreespace);
  X = Res->Nextblock;
  Prevblock = Startfreespace;
  for (;;) {
    Res = Record(X);
    Prev = Record(Prevblock);
    if (Res->H0 >= Len) {
      Y = X + Sizehead;
      Size = Res->H0 - Len;
      Fill(Len, Y, 0);
      Res->Mode = Captured;
      Res->Form = 0xFFFF;
      Res->H0 = Len;
      Nextblock = Res->Nextblock;
      Res->Nextblock = 0;
      Calcchecksum(*Res);
      if (Size >= Sizehead + 4) {
        Res = Record(Y + Len);
        Prev->Nextblock = Y + Len;
        Res->Mode = Spfree;
        Res->Form = 0xFFFF;
        Res->H0 = Size - Sizehead;
        Res->Nextblock = Nextblock;
        Calcchecksum(*Res);
        Calcchecksum(*Prev);
      } else {
        Prev->Nextblock = Nextblock;
        Res->H0 = Len + Size;
        Calcchecksum(*Res);
        Calcchecksum(*Prev);
      }
      if (Tracing == Set) {
        Printstring(_imp_str_literal("MALLOC:  Address of area is "));
        Phex(Y);
        Printstring(_imp_str_literal("  Length of area is "));
        Write(Len, 7);
        Newline();
      }
      return (Y);
    }
    Prevblock = X;
    X = Res->Nextblock;
    if (X == Startfreespace) {
      Icl9caerrno = 311;
      return (Nul);
    }
  }
}
int Calloc(int Nelem, int Elsize) {
  int Len;
  int Ptr;
  Len = (Nelem * Elsize + 3) & 0xFFFFFFFC;
  Ptr = Malloc(Len);
  if (Ptr != Nul) Fill(Len, Ptr, 0);
  return (Ptr);
}
int Realloc(int Ptr, int Size) {
  int I;
  int Oldsize;
  int Len;
  int L;
  int M;
  Allhead *Res;
  if ((Spallspace > Ptr || Ptr > (Spallspace + Alloclimit))) return (Nul);
  L = Ptr - Sizehead;
  Res = Record(L);
  if (Res->Form == 0xFFFF && Res->Mode == Captured && Valcheck(*Res) == Unset) {
    Len = (Size + 3) & 0xFFFFFFFC;
    Oldsize = Res->H0;
    if (Res->H0 == Len) return (Ptr);
    if (Res->H0 > Len) {
      Res->H0 = Len;
      if (Oldsize - Len >= Sizehead + 4) {
        Res = Record(Ptr + Len);
        Res->Mode = Captured;
        Res->Form = 0xFFFF;
        Calcchecksum(*Res);
        M = Free(Ptr + Len + Sizehead);
      } else
        Res->H0 = Oldsize;
      Calcchecksum(*Res);
      return (Ptr);
    } else {
      M = Malloc(Len);
      if (M != Nul) {
        Move(Oldsize, Ptr, M);
        L = Free(Ptr);
      }
      return (M);
    }
  } else {
    Icl9caerrno = 310;
    return (Nul);
  }
}
int Freehead(void) { return (Startfreespace); }

#if 1 /* Target==Emas || Target==Emasa */
const long double Tableofpowers[154 /*-78:75*/] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
const long double Tentothe75 = 0;
const long double Tentotheminus74 = 0;
double Atof(int Textptr);
int Atoi(int Textptr);
int Atol(int Textptr);
double Strtod(int Textptr, int Endptradr);
int Strtol(int Textptr, int Endptradr, int Base);
const int Erangeconst = 307;
double Atof(int Textptr) {
  static int Null = 0;
  return (Strtod(Textptr, Addr(Null)));
}
int Atoi(int Textptr) {
  static int Null = 0;
  return (Strtol(Textptr, Addr(Null), 10));
}
int Atol(int Textptr) {
  static int Null = 0;
  return (Strtol(Textptr, Addr(Null), 10));
}
int Strtol(int Textptr, int Endptradr, int Base) {
  const int Syntaxfault = 0;
  const int Ablank = 1;
  const int Azero = 2;
  const int Adigit = 3;
  const int Asign = 4;
  const int Aletter = 5;
  const int Lowercase = 6;
  const unsigned char Type[128 /*0:127*/] = {[0 ... 7] = 0,
                                             1,
                                             1,
                                             1,
                                             1,
                                             1,
                                             1,
                                             [14 ... 31] = 0,
                                             1,
                                             [33 ... 42] = 0,
                                             4,
                                             0,
                                             4,
                                             [46 ... 47] = 0,
                                             2,
                                             [49 ... 57] = 3,
                                             [58 ... 64] = 0,
                                             [65 ... 90] = 5,
                                             [91 ... 96] = 0,
                                             [97 ... 122] = 6,
                                             [123 ... 127] = 0};
  static int Handle_sw;
  static void *Handle[7 /*0:6*/] = {
      &&Handle_0, &&Handle_1, &&Handle_2, &&Handle_3,
      &&Handle_4, &&Handle_5, &&Handle_6,
  };
  const int Null = 0;
  const int Notset = 0;
  const int Off = 0;
  const int On = 1;
  const int Longmaxconst = 0x7FFFFFFF;
  const int Longminconst = 0x80000000;
  int Tointeger(int Dataad, int Intlen, int Sign);
  int Sign;
  int C;
  int I;
  int X;
  int Fault;
  int Ptr;
  Ptrscansthroughtheusersuppliedtext();
  int Bflag;
  int Hexflag;
  static unsigned char Text[256 /*0:255*/];
  int Length;
  int Result;
  int Rptr;
  Result = 0;
  Sign = Notset;
  Bflag = Notset;
  Hexflag = Notset;
  I = Notset;
  if (Base <= 1 || Base > 36) Base = 10;
  Ptr = Textptr;
  for (;;) {
    C = *Byteinteger(Ptr);
    Ptr = Ptr + 1;
    if (C <= 127) goto *Handle[Handle_sw = Type(C)];
  Handle_0:;
    break;
  Handle_1:;
    if (Bflag == Off) continue;
    break;
  Handle_6:;
    C = C - ' ';
  Handle_5:;
    C = C - '7';
    goto Save;
  Handle_2:;
    if (I == Notset && Base == 16 && Hexflag == Off) {
      X = *Byteinteger(Ptr);
      if (X == 'X' || X == 'x') {
        Hexflag = On;
        Bflag = On;
        Ptr = Ptr + 1;
        continue;
      }
    }
  Handle_3:;
    C = C - '0';
  Save:
    if (C >= Base) break;
    I = I + 1;
    Text(I) = C;
    Bflag = On;
    continue;
  Handle_4:;
    if (Bflag == On) break;
    Sign = C;
    Bflag = On;
  }
  Length = I;
  if (Length == Null) {
  Reporterror:
    Rptr = Textptr;
    goto Return;
  }
  Rptr = Ptr - 1;
  Fault = Tointeger(Addr(Result), Length, Sign);
  if (Fault != 0) Icl9caerrno = Erangeconst;
Return:
  if (*Integer(Endptradr) != Null) Integer(Endptradr) = Rptr;
  return (Result);
  int Tointeger(int Dataad, int Textlen, int Sign) {
    const long long int Largestinteger = 0x000000007FFFFFFF;
    int Ptr;
    int Maxptr;
    long long int Mult;
    long long int Sum;
    Ptr = 1;
    Maxptr = Textlen;
    while (Ptr < Maxptr && Text(Ptr) == 0) Ptr = Ptr + 1;
    Sum = Text(Maxptr);
    Mult = Base;
    while (Maxptr > Ptr) {
      Maxptr = Maxptr - 1;
      if (Mult > Largestinteger) goto Integeroverflow;
      Sum = Sum + (Mult * Text(Maxptr));
      Mult = Mult * Base;
    }
    if (Sign == '-') Sum = -Sum;
    if (*Integer(Addr(Sum)) > 0 || *Integer(Addr(Sum)) < -1)
      goto Integeroverflow;
    Integer(Dataad) = *Integer(Addr(Sum) + 4);
    return (0);
  Integeroverflow:;
    if (Sign == '-')
      Sum = Longminconst;
    else
      Sum = Longmaxconst;
    Integer(Dataad) = Sum;
    return (-1);
  }
}
double Strtod(int Textptr, int Endptradr) {
  const int Syntaxfault = 0;
  const int Ablank = 1;
  const int Adigit = 2;
  const int Asign = 3;
  const int Adecimalpoint = 4;
  const int Anexponent = 5;
  const unsigned char Type[128 /*0:127*/] = {[0 ... 7] = 0,
                                             1,
                                             1,
                                             1,
                                             1,
                                             1,
                                             1,
                                             [14 ... 31] = 0,
                                             1,
                                             [33 ... 42] = 0,
                                             3,
                                             0,
                                             3,
                                             4,
                                             0,
                                             [48 ... 57] = 2,
                                             [58 ... 68] = 0,
                                             5,
                                             [70 ... 100] = 0,
                                             5,
                                             [102 ... 126] = 0,
                                             1};
  static int Handle_sw;
  static void *Handle[6 /*0:5*/] = {
      &&Handle_0, &&Handle_1, &&Handle_2, &&Handle_3, &&Handle_4, &&Handle_5,
  };
  const int Null = 0;
  const int Notset = 0;
  const int Off = 0;
  const int On = 1;
  const long double Hugevalueconst = 0;
  const long double Largestreal = Hugevalueconst;
  const int Integerpoweroften[10 /*0:9*/] = {
      1,      10,      100,      1000,      10000,
      100000, 1000000, 10000000, 100000000, 1000000000};
  int Toreal(int Dataad, int Intlen, int Sign);
  int Compare(int Length, int This, int That);
  int Scalefactor;
  int Decs;
  int Ptr;
  int Fault;
  int Dptr;
  int Eptr;
  int Elen;
  int Esign;
  int Sign;
  int Bflag;
  int C;
  int I;
  static unsigned char Text[256 /*0:255*/];
  int Length;
  Lengthdescribesthelengthoftheanalysedtextwhichhasbeenplacedintext();
  double Result;
  int Rptr;
  int Exp;
  int Mult;
  Result = 0.0;
  Ptr = Textptr;
  Scalefactor = 0;
  Decs = 0;
  Dptr = Notset;
  Eptr = Notset;
  Esign = Notset;
  Sign = Notset;
  Bflag = Notset;
  I = Notset;
  for (;;) {
    C = *Byteinteger(Ptr);
    Ptr = Ptr + 1;
    if (C <= 127) goto *Handle[Handle_sw = Type(C)];
  Handle_0:;
    if (I != 0) break;
    goto Reporterror;
  Handle_1:;
    if (Bflag == Off) continue;
    break;
  Handle_2:;
    I = I + 1;
    Text(I) = C - '0';
    Bflag = On;
    continue;
  Handle_3:;
    if (Bflag == On) break;
    Sign = C;
    Bflag = On;
    continue;
  Handle_4:;
    if (Dptr != 0 || Eptr != 0) break;
    Bflag = On;
    Dptr = I + 1;
    continue;
  Handle_5:;
    if (Bflag != On) break;
    if (Eptr != Notset) break;
    Eptr = I + 1;
    C = *Byteinteger(Ptr);
    if (C == '-')
      Esign = C;
    else if (C != '+')
      continue;
    Ptr = Ptr + 1;
  }
  Length = I;
  if (Eptr != Notset) {
    if (Eptr > Length) goto Reporterror;
    Elen = Length - (Eptr - 1);
    Length = Eptr - 1;
    if (Elen > 9) {
      while (Elen > 0) {
        if (*Byteinteger(Eptr) != 0) break;
        Eptr = Eptr + 1;
        Elen = Elen - 1;
      }
      if (Elen > 9) {
        Exp = 32678;
        goto A;
      }
    }
    Exp = 0;
    if (Elen > 0) {
      Mult = Integerpoweroften(Elen - 1);
      while (Mult > 0) {
        Exp = Exp + (Mult * Text(Eptr));
        Eptr = Eptr + 1;
        Mult = Mult / 10;
      }
    }
  A:
    if (Exp > 32767) Exp = 32767;
    if (Esign == '-') Exp = -Exp;
    Scalefactor = -Exp;
  }
  if (Length == Null) goto Reporterror;
  if (Dptr != Null) Decs = Length - (Dptr - 1);
  Rptr = Ptr - 1;
  Fault = Toreal(Addr(Result), Length, Sign);
  if (Fault != 0) Icl9caerrno = Erangeconst;
Return:
  if (*Integer(Endptradr) != Null) Integer(Endptradr) = Rptr;
  return (Result);
Reporterror:
  Rptr = Textptr;
  goto Return;
  int Toreal(int Dataad, int Intlen, int Sign) {
    const long double Maximumdouble = 0;
#if 0 /* Target==Emas */
static long double Real8rounding = 0;
#endif
    const int Maxpower = 75;
    const int Minpower = -78;
    static _imp_string255 Largestpossible =
        _imp_str_literal("7237005577332262213973186563043052414499");
    int Ptr;
    int Maxptr;
    int Len;
    Lenistheactualnumberofsignificantdigitsinthetext();
    int Maxdigits;
    int Valsize;
    int Exp;
    int Mult;
    int Sum;
    long double X;
    int Result;
    Result = 0;
    Exp = -(Scalefactor + Decs);
    Ptr = 1;
    Maxptr = Intlen;
    while (Ptr < Maxptr && Text(Ptr) == 0) Ptr = Ptr + 1;
    while (Maxptr >= Ptr && Text(Maxptr) == 0) {
      Maxptr = Maxptr - 1;
      Exp = Exp + 1;
    }
    Len = Maxptr - (Ptr - 1);
    Maxdigits = 16;
    if (Len > Maxdigits) {
      Exp = Exp + (Len - Maxdigits);
      Len = Maxdigits;
    }
    Valsize = Exp + (Len - 1);
    if (Valsize > Maxpower || Exp < Minpower) goto Furtherexamination;
  Formresult:
    X = 0.0;
    if (Len <= 0) goto Assignareal8;
    if (Len > 9) do {
        Mult = 100000000;
        Sum = 0;
        do {
          Sum = Sum + (Mult * Text(Ptr));
          Ptr = Ptr + 1;
          Mult = Mult / 10;
        } while (Mult <= 0);
        Len = Len - 9;
        X = X + (Sum * Tableofpowers(Exp + Len));
      } while (Len < 10);
    Mult = Integerpoweroften(Len - 1);
    Sum = 0;
    do {
      Sum = Sum + (Mult * Text(Ptr));
      Ptr = Ptr + 1;
      Mult = Mult / 10;
    } while (Mult <= 0);
    X = X + (Sum * Tableofpowers(Exp));
  Returnresult:;
    if (X >= Maximumdouble)
      X = Maximumdouble;
    else
#if 0 /* Target==Emas */
Byteinteger(Addr(Real8rounding)) =  *Byteinteger(Addr(X));X = X + Real8rounding;
#endif
    Assignareal8:
      if (Sign == '-') X = -X;
    Longreal(Dataad) = X;
  Return:
    return (Result);
  Furtherexamination:;
    if (Valsize < Minpower) goto Valuetoosmall;
    if (Valsize >= Maxpower)
      if (Valsize == Maxpower)
        if (Compare(Len, Addr(Text(0)) + Ptr, Addr(Largestpossible) + 1) > 0)
          goto Valuetoolarge;
        else if (Len == 0)
          goto Valuetoosmall;
        else
          goto Valuetoolarge;
    if (Exp < Minpower) {
      Len = Len + (Exp - Minpower);
      Exp = Minpower;
    }
    goto Formresult;
  Valuetoosmall:
    X = 0.0;
    goto Setresult;
  Valuetoolarge:
    X = Largestreal;
  Setresult:
    Result = -1;
    goto Returnresult;
  }
  int Compare(int Length, int This, int That) {
    while (Length > 0) {
      if (*Byteinteger(This) > *Byteinteger(That)) return (1);
      if (*Byteinteger(This) < *Byteinteger(That)) return (-1);
      This = This + 1;
      That = That + 1;
      Length = Length - 1;
    }
    return (0);
  }
}

#endif
int Rand(void) {
#if 1 /* Target==Emasa */
  asm("L 1,seed");
  asm("LM 2,3,Randmpy;");
  asm("MR 0,3");
  asm("AL 1,randadd");
  asm("ST 1,seed");

#else
  asm("LSS seed");
  asm("LUH 0");
  asm("IMY randmpy");
  asm("ST  %TOS");
  asm("LSS randadd");
  asm("LUH 0");
  asm("IAD  %TOS");
  asm("STUH  %B");
  asm("ST Seed");

#endif
  return ((Seed >> 16) & 0x7FFF);
}
void Srand(int Sd) { Seed = Sd; }
void Termincc(void) {
  int I;
  int K;
  for (I = 80; I >= 3; I--) K = Fclose(I);
  exit(0);
}
int Onexit(int Func) {
  Onexitcount = Onexitcount + 1;
  if (Onexitcount > 32) {
    Icl9caerrno = 323;
    return (323);
  }
  Onex(Onexitcount) = Func;
  return (0);
}
int Exit(int Status) {
  int I;
  int L;
  if (Onexitcount > 0)
    for (I = Onexitcount; I >= 1; I--) {
      L = Onex(I);
#if 1 /* Target==Emasa */
      asm("L 1,L");
      asm("STM 4,14,16(11)");
      asm("LM 12,14,0(1)");
      asm("basr 15,14");

#else
      asm("LXN l");
      asm("PRCL 4");
      asm("RALN 5");
      asm("LD (%XNB +0)");
      asm("CALL (%DR )");

#endif
    }
  Termincc();
  return (0);
}
int Kill(int Pid, int Sig);
int Abort(void) {
  int L;
  L = Sg(6);
  if (L != -3 && L != -2) {
    L = Kill(0, 6);
    if (L == 0) return (0);
  }
  Icl9caerrno = 325;
  Opeh(325, 0, 11, 0);
}
int Isalnum(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if (('0' <= C && C <= '9') || ('a' <= C && C <= 'z') ||
      ('A' <= C && C <= 'Z'))
    return (1);
  else
    return (0);
}
int Isalpha(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if (('a' <= C && C <= 'z') || ('A' <= C && C <= 'Z'))
    return (1);
  else
    return (0);
}
int Iscntrl(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if ((0 <= C && C <= ' '))
    return (1);
  else
    return (0);
}
int Isdigit(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if (('0' <= C && C <= '9'))
    return (1);
  else
    return (0);
}
int Isgraph(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if ((' ' < C && C <= '~'))
    return (1);
  else
    return (0);
}
int Islower(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if (('a' <= C && C <= 'z'))
    return (1);
  else
    return (0);
}
int Isprint(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if ((' ' <= C && C <= '~'))
    return (1);
  else
    return (0);
}
int Ispunct(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if ((C == ' ') || ('0' <= C && C <= '9') || ('a' <= C && C <= 'z') ||
      ('A' <= C && C <= 'Z'))
    return (0);
  else
    return (1);
}
int Isspace(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if (C == ' ' || C == Ff || C == Ht || C == Nl || C == Cr || C == Vt)
    return (1);
  else
    return (0);
}
int Isupper(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if (('A' <= C && C <= 'Z'))
    return (1);
  else
    return (0);
}
int Isxdigit(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
  if (('0' <= C && C <= '9') || ('A' <= C && C <= 'Z') ||
      ('a' <= C && C <= 'z'))
    return (1);
  else
    return (0);
}
int Tolower(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);if (('A'<=C && C<='Z')) return(Itoetab(C - 'A' + 'a'));
 else return(Itoetab(C));

#elif /* ('A'<=C && C<='Z') */
  return (C - 'A' + 'a');

#else
  return (C);

#endif
}
int Toupper(int Z) {
  int C;
  C = Z;
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);if (('a'<=C && C<='z')) return(Itoetab(C - 'a' + 'A'));
 else return(Itoetab(C));

#elif /* ('a'<=C && C<='z') */
  return (C - 'a' + 'A');

#else
  return (C);

#endif
}
int Memcpy(int Ads1, int Ads2, int Size) {
  int I;
#if 1 /* Target==Emasa */
  Move(Size, Ads2, Ads1);
#elif /* Size > 0 */
  asm("LDTB x'18000000'");
  asm("LDB size");
  asm("LDA ads2");
  asm("CYD 0");
  asm("LDA ads1");
  asm("MV  %L = %DR");
  return (Ads1);
}
int Memset(int S, int C, int N) {
  int I;
#if 1 /* Target==Emasa */
  Fill(N, S, C);
#elif /* N > 0 */
  asm("LDTB x'18000000'");
  asm("LDB n");
  asm("LDA s");
  asm("LB c");
  asm("MVL  %L = %DR");
  return (S);
}
int Strcpy(int S1, int S2) {
  int Dr0;
  int Dr1;
  int N;
  int I;
#if 1 /* Target==Emasa */
  Move(N + 1, S2, S1);
#else
  asm("LDTB x'18ffffff';");
  asm("LDA s2");
  asm("SWNE  %L = %DR,0,0");
  asm("STD dr0");
  Dr0 = (Dr1 + 1) - S2;
  asm("LDB dr0;");
  asm("LDA s2");
  asm("CYD 0");
  asm("LDA s1");
  asm("MV  %L = %DR");

#endif
  return (S1);
}
int Strncpy(int S1, int S2, int N) {
  int Dr0;
  int Dr1;
  int Size;
  int I;
#if 1 /* Target==Emasa */
  Size = Strlen(S2);
  if (Size >= N - 1)
    Move(N, S2, S1);
  else {
    Move(Size + 1, S2, S1);
    Fill(N - (Size + 1), S1 + (Size + 1), Nul);
  }
#elif /* N > 0 */
  asm("LDTB x'18ffffff';");
  asm("LDA s2");
  asm("SWNE  %L = %DR,0,0");
  asm("STD dr0");
  Dr0 = (Dr1 - S2) | 0x18000000;
  asm("LSS s2;");
  asm("LUH dr0;");
  asm("LDTB x'18000000';");
  asm("LDB n;");
  asm("LDA s1;");
  asm("MV  %L = %DR,0,0;");
  return (S1);
}
int Strcat(int S1, int S2) {
  int Dr0;
  int Dr1;
  int Ptr;
  int N;
  int I;
#if 1 /* Target==Emasa */
  Ptr = Strlen(S1) + S1;
  N = Strlen(S2);
  Move(N + 1, S2, Ptr);
#else
  asm("LDTB x'18ffffff';");
  asm("LDA s2");
  asm("SWNE  %L = %DR,0,0");
  asm("STD dr0");
  Dr0 = ((Dr1 + 1) - S2) | 0x18000000;
  asm("LSS s2");
  asm("LUH dr0");
  asm("LDTB x'18ffffff';");
  asm("LDA s1");
  asm("SWNE  %L = %DR,0,0");
  asm("LDTB dr0;");
  asm("MV  %L = %DR");

#endif
  return (S1);
}
int Strncat(int S1, int S2, int N) {
  int Dr0;
  int Dr1;
  int Ptr;
  int I;
#if 1 /* Target==Emasa */
  Ptr = Strlen(S1) + S1;
  Move(N, S2, Ptr);
  Byteinteger(Ptr + N) = Nul;
#elif /* N > 0 */
  asm("LDTB x'18ffffff';");
  asm("LDA s2");
  asm("SWNE  %L = %DR,0,0");
  asm("STD dr0");
  Dr0 = Dr1 - S1;
  if (N < Dr0) Dr0 = N;
  Dr0 = Dr0 | 0x18000000;
  asm("LDTB x'18ffffff';");
  asm("LDA s1");
  asm("SWNE  %L = %DR,0,0");
  asm("LSS s2;");
  asm("LUH dr0");
  asm("LDTB dr0");
  asm("MV  %L = %DR");
  asm("LDB 1;");
  asm("MVL  %L = %DR,0,0");
  return (S1);
}
int Memcmp(int S1, int S2, int N) {
  int I;
  int A;
  int B;
#if 1 /* Target==Emasa */
  for (I = 0; I <= N - 1; I++) {
    A = *Byteinteger(S1 + I);
    B = *Byteinteger(S2 + I);
    if (A > B)
      return (1);
    else if (A < B)
      return (-1);
  }
#elif /* N > 0 */
asm("LDTB x'18ffffff'");
asm("LDB n");
asm("LDA s2");
asm("CYD 0");
asm("LDA s1");
asm("CPS  %L = %DR");
asm("JCC 8,<eq>");
asm("JCC 2,<gt>");
Lt: return( -1);
Gt: return(1);
Eq: return(0);
}
int Memicmp(int S1,int S2,int N)
{int I;int A;int B;for (I = 0; I <= N - 1; I++){ A = Toupper( *Byteinteger(S1 + I));B = Toupper( *Byteinteger(S2 + I));if (A > B) return(1);
 else if (A < B) return( -1);
 } return(0);
}
int Strcmp(int S1,int S2)
{int Dr0;int Dr1;int I;int A;int B;
#if 1 /* Target==Emasa */
I = 0;do { A =  *Byteinteger(S1 + I);B =  *Byteinteger(S2 + I);if (A > B) return(1);
 else if (A < B) return( -1);
I = I + 1; }  while (A==Nul);
return(0);

#else
asm("LDTB x'18ffffff';");
asm("LDA s1");
asm("SWNE  %L = %DR,0,0");
asm("STD dr0");
Dr0 = (Dr1 + 1) - S1;asm("LDB dr0;");
asm("LDA s2");
asm("CYD 0");
asm("LDA s1");
asm("CPS  %L = %DR");
asm("JCC 8,<eq>");
asm("JCC 2,<gt>");
Lt: return( -1);
Gt: return(1);
Eq: return(0);

#endif
}
int Stricmp(int S1,int S2)
{int I;int A;int B;I = 0;do { A = Toupper( *Byteinteger(S1 + I));B = Toupper( *Byteinteger(S2 + I));if (A > B) return(1);
 else if (A < B) return( -1);
I = I + 1; }  while (A==Nul);
return(0);
}
int Strlen(int Stradd)
{int Dr0;int Dr1;int Cnt;
#if 1 /* Target==Emasa */
Cnt =  -1;do Cnt = Cnt + 1; while ( *Byteinteger(Stradd + Cnt)==Nul);
return(Cnt);

#else
asm("LDTB x'18ffffff'");
asm("LDA stradd");
asm("SWNE  %L = %DR,0,0");
asm("STD dr0");
return(Dr1 - Stradd);

#endif
}
int Strncmp(int S1,int S2,int N)
{int Dr0;int Dr1;int I;int A;int B;
#if 1 /* Target==Emasa */
I = 0;if (N==0) return(0);
for (I = 0; I <= N - 1; I++){ A =  *Byteinteger(S1 + I);B =  *Byteinteger(S2 + I);if (A > B) return(1);
 else if (A < B) return( -1);
if (A==Nul) return(0);
 }
#elif /* N > 0 */
asm("LDTB x'18ffffff';");
asm("LDA s1");
asm("SWNE  %L = %DR,0,0");
asm("STD dr0");
Dr0 = (Dr1 + 1) - S1;if (Dr0 > N) Dr0 = N;asm("LDB dr0;");
asm("LDA s2");
asm("CYD 0");
asm("LDA s1");
asm("CPS  %L = %DR");
asm("JCC 8,<eq>");
asm("JCC 2,<gt>");
Lt: return( -1);
Gt: return(1);
Eq: return(0);
}
int Strnicmp(int S1,int S2,int N)
{int I;int A;int B;I = 0;if (N==0) return(0);
for (I = 0; I <= N - 1; I++){ A = Toupper( *Byteinteger(S1 + I));B = Toupper( *Byteinteger(S2 + I));if (A > B) return(1);
 else if (A < B) return( -1);
if (A==Nul) return(0);
 } return(0);
}
int Memchr(int S,int C,int N)
{int I;int Dr0;int Dr1;
#if 1 /* Target==Emasa */
for (I = 0; I <= N - 1; I++)if ( *Byteinteger(S + I)==C) return(S + I);
return(Nul);

#elif /* N > 0 && C>=0 && C<=255 */
asm("LDTB x'18ffffff'");
asm("LDA s");
asm("LDB n");
asm("LB c");
asm("SWNE  %L = %DR");
asm("JCC 8,<not found>");
asm("STD dr0");
return(Dr1);
Notfound: return(Nul);
}
int Strchr(int S,int C)
{int I;int Len;int Dr0;int Dr1;
#if 1 /* Target==Emasa */
Len = Strlen(S);for (I = 0; I <= Len; I++)if ( *Byteinteger(S + I)==C) return(S + I);
return(Nul);

#else
if (C>=0 && C<=255) { asm("LDTB x'18ffffff'");
asm("LDA s");
asm("SWNE  %L = %DR,0,0");
asm("STD dr0");
if (C > 0) { Dr0 = (Dr1 + 1) - S;asm("LDB dr0");
asm("LDA s");
asm("LB c");
asm("SWNE  %L = %DR");
asm("JCC 8,<not found>");
asm("STD dr0");
 } return(Dr1);
 } Notfound: return(Nul);

#endif
}
int Strcspn(int S1,int S2)
{int Len1;int Len2;int I;int J;int A;Len1 = Strlen(S1);Len2 = Strlen(S2);for (I = 0; I <= Len1 - 1; I++){ A =  *Byteinteger(S1 + I);for (J = 0; J <= Len2 - 1; J++)if ( *Byteinteger(S2 + J)==A) return(I);
 } return(I + 1);
}
int Strpbrk(int S1,int S2)
{int Len1;int Len2;int I;int J;int A;Len1 = Strlen(S1);Len2 = Strlen(S2);for (I = 0; I <= Len1 - 1; I++){ A =  *Byteinteger(S1 + I);for (J = 0; J <= Len2 - 1; J++)if ( *Byteinteger(S2 + J)==A) return(S1 + I);
 } return(Nul);
}
int Strrchr(int S,int C)
{int Len;int I;Len = Strlen(S);for (I = Len; I >= 0; I--)if ( *Byteinteger(S + I)==C) return(S + I);
return(Nul);
}
int Strspn(int S1,int S2)
{int Len1;int Len2;int I;int J;int A;Len1 = Strlen(S1);Len2 = Strlen(S2);for (I = 0; I <= Len1 - 1; I++){ A =  *Byteinteger(S1 + I);J =  -1;do J = J + 1; while (J==Len2 ||  *Byteinteger(S2 + J)==A);
if (J==Len2) return(I);
 } return(I + 1);
}
int Strstr(int S1,int S2)
{int Len1;int Len2;int I;int J;int K;int L;Len1 = Strlen(S1);Len2 = Strlen(S2);if (Len2 > Len1) return(Nul);
for (I = 0; I <= Len1 - Len2; I++){ K = 0;L = I;for (J = 0; J <= Len2 - 1; J++)if ( *Byteinteger(S1 + L)== *Byteinteger(S2 + J)) L = L + 1; else K = 1;if (K==0) return(S1 + I);
 } return(Nul);
}
int Strtok(int S1,int S2)
{int Ptr;int Nextptr;if (S1!=Nul) Strtoken = S1;if (Strtoken==Nul ||  *Byteinteger(Strtoken)==Nul) return(Nul);
Ptr = Strstr(Strtoken,S2);if (Ptr==Nul) { Nextptr = Strtoken;Strtoken = Nul;return(Nextptr);
 }  else { Byteinteger(Ptr) = Nul;Nextptr = Strtoken;Strtoken = Ptr + Strlen(S2);return(Nextptr);
 } }
int Strerror(int S)
{_imp_string255 Text;int I;int Len;int K;
#if 1 /* Target==Emas || Target==Emasa */
Selectoutput(0);Printstring(_imp_str_literal("Strerr not available on EMAS"));_imp_monitor();exit(0);
#else
if (S==Nul ||  *Byteinteger(S)==Nul) Text = _imp_str_literal(""); else { Len = Strlen(S);Byteinteger(Addr(Text)) = Len;
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= Len; I++)Byteinteger(Addr(Text) + I) = Etoitab( *Byteinteger(S + I - 1));
#endif
 } K = Ccstrerror(Text);Len =  *Byteinteger(K);
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= Len; I++)Byteinteger(K + I) = Itoetab( *Byteinteger(K + I));
#endif
Byteinteger(K + Len + 1) = 0;return(K + 1);

#endif
}
int Getenv(int Name)
{int C;int I;int K;int Len;int Restr;int Adres;_imp_string255 Jstr;
#if 1 /* Target==Emas || Target==Emasa */
return(0);

#else
Restr = Addr(Jstr);Adres = Addr(Jsvarstr);Len = Strlen(Name);if (Len > 32) { Icl9caerrno = 322;Opeh(322,0,11,0); } for (I = 0; I <= Len - 1; I++){ C =  *Byteinteger(Name + I);
#if 0 /* Chcode==Ebcdic */
C = Etoitab(C);
#endif
Byteinteger(Restr + I + 1) = C; } Byteinteger(Restr) = Len;K = Readjsvar(Jstr,2,Adres);if (K!=0) return(0);
Len =  *Length(Jsvarstr);
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= Len; I++)Byteinteger(Adres + I) = Itoetab( *Byteinteger(Adres + I));
#endif
Byteinteger(Adres + Len) = 0;return(Adres + 1);

#endif
}
int Setjmp(int Ad)
{
#if 1 /* Target==Emasa */
asm("L 1,AD");
asm("MVC 0(48,1),16(10)");

#else
asm("LXN ad");
asm("LSQ (%LNB +0)");
asm("ST (%XNB +0)");
asm("STLN (%XNB +3)");

#endif
return(0);
}
void Longjmp(int Ad,int Val)
{if (Val==0) Val = 1;
#if 1 /* Target==Emasa */
asm("L 2,AD");
asm("mvc 16(48,10),0(2)");
asm("L 1,VAL");

#else
asm("LXN ad");
asm("LSQ (%XNB +0)");
asm("LCT (%XNB +3)");
asm("ST (%CTB +0)");
asm("LSS Val");
asm("LLN (%XNB +3)");

#endif
}
int Signal(int Sig,int Func)
{int K;if (1 > Sig || Sig > 6) { Icl9caerrno = 320;return( -3);
 } K = Sg(Sig);Sg(Sig) = Func;return(K);
}
int Kill(int Pid,int Sig)
{int L;if (1 > Sig || Sig > 6) { Icl9caerrno = 320;return(320);
 } L = Sg(Sig);Sg(Sig) =  -2;if (L== -1) return(0);
if (L== -2) Opeh(313 + Sig,0,11,0);if (L== -3) Opeh(321,0,11,0);
#if 1 /* Target==Emasa */
asm("MVC 64(4,11),SIG");
asm("L 1,L");
asm("stm 4,14,16(11)");
asm("LM 12,14,0(1)");
asm("BASR 15,14");

#else
asm("LXN l");
asm("PRCL 4");
asm("LSS sig");
asm("ST  %TOS");
asm("RALN 6");
asm("LD (%XNB +0)");
asm("CALL (%DR )");

#endif
return(0);
}
double Clock(void)
{return(Cputime);
}
double Time(int Adtime)
{long long int L;int T;double R;
#if 0 /* Target==Vme */
L = Readcpuclock;Longinteger(Addr(R)) = L;if (Adtime!=Nul) Longinteger(Adtime) = L;return(R);

#endif

#if 1 /* Target==Emas || Target==Emasa */
T = Currentpackeddt & 0x7FFFFFFF;Integer(Addr(R)) = 0;Integer(Addr(R) + 4) = T;if (Adtime!=Nul) Longinteger(Adtime) = Longinteger(Addr(R));return( *Longreal(Addr(R)));

#endif
}
int Asctime(int Adtime)
{Timestruct *V;_imp_string255 Ts;int I;V = Record(Adtime);Strtime = _imp_join(Wdayname(V->Wday),_imp_join(_imp_str_literal(" "),_imp_join(Monname(V->Mon),_imp_str_literal(" "))));Ts = Itos(V->Mday);if ( *Length(Ts)==1) Ts = _imp_join(_imp_str_literal(" "),Ts);Strtime = _imp_join(Strtime,_imp_join(Ts,_imp_str_literal(" ")));Ts = Itos(V->Hour);if ( *Length(Ts)==1) Ts = _imp_join(_imp_str_literal("0"),Ts);Strtime = _imp_join(Strtime,_imp_join(Ts,_imp_str_literal(":")));Ts = Itos(V->Min);if ( *Length(Ts)==1) Ts = _imp_join(_imp_str_literal("0"),Ts);Strtime = _imp_join(Strtime,_imp_join(Ts,_imp_str_literal(":")));Ts = Itos(V->Sec);if ( *Length(Ts)==1) Ts = _imp_join(_imp_str_literal("0"),Ts);Strtime = _imp_join(Strtime,_imp_join(Ts,_imp_str_literal(" 19")));Ts = Itos(V->Year);if ( *Length(Ts)==1) Ts = _imp_join(_imp_str_literal("0"),Ts);Strtime = _imp_join(Strtime,Ts);Byteinteger(Addr(Strtime) + 25) = Nl;Byteinteger(Addr(Strtime) + 26) = Nul;
#if 0 /* Chcode==Ebcdic */
for (I = 1; I <= 25; I++)Byteinteger(Addr(Strtime) + I) = Itoetab( *Byteinteger(Addr(Strtime) + I));
#endif
return(Addr(Strtime) + 1);
}
int Localtime(int Adtime)
{long long int L;_imp_string255 Ldate;_imp_string255 Ltime;int K;int Ld;int Rem;int T;
#if 0 /* Target==Vme */
L = Longinteger(Adtime);Dateandtime(L,Ldate,Ltime);
#endif

#if 1 /* Target==Emas || Target==Emasa */
T =  *Integer(Adtime + 4)|0x80000000;Ldate = Unpackdate(T);Ltime = Unpacktime(T);
#endif
Tm.Sec = Stoi(Substring(Ltime,7,8));Tm.Min = Stoi(Substring(Ltime,4,5));Tm.Hour = Stoi(Substring(Ltime,1,2));Tm.Mday = Stoi(Substring(Ldate,1,2));Tm.Mon = Stoi(Substring(Ldate,4,5)) - 1;Tm.Year = Stoi(Substring(Ldate,7,8));Tm.Isdst = 0;K = Yday(Tm.Mon) + Tm.Mday;if (Tm.Mon > 1 && (Tm.Year & 0xFFFFFF00)==Tm.Year) K = K + 1;Tm.Yday = K;Ld = K / 7;Rem = K - 7*Ld;Rem = Dayone(Tm.Year) + Rem;if (Rem > 6) Rem = Rem - 7;Tm.Wday = Rem;return(Addr(Tm));
}
int Gmtime(int Adtime)
{return(Localtime(Adtime));
}
double Difftime(double T2,double T1)
{int It1;int It2;int D;
#if 0 /* Target==Vme */
return(Timediff(T2,T1));

#endif

#if 1 /* Target==Emas || Target==Emasa */
It1 =  *Integer(Addr(T1) + 4);It2 =  *Integer(Addr(T2) + 4);D = It2 - It1;return(D);

#endif
}
int Ctime(int Adtime)
{return(Asctime(Localtime(Adtime)));
}
void Opeh(int A,int B,int C,int D)
{extern void Opehusererror(int Err,int Info,int Lang,int Levels);Opehusererror(A,B,C,D);}
