⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdio.cpp

📁 eC++编译器源码
💻 CPP
字号:
#pragma stdio
#pragma qualified
#include <SYSTEM.h>
#include <FInOut.h>
#include <InOut.h>
#include <RealInOut.h>
#include <SInOut.h>
#include <stdio.h>
#include <Storage.h>
#include <FileSystem.h>
#include <String.h>

void printf(char format[], SYSTEM.WORD val[])
{
  char out[500];
  if (FInOut.Write1(format, out, 0, val)==0);
  InOut.WriteString(out);
};

void printf(char format[]) 
{
  InOut.WriteString(format);
};

void printf(char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[])
{
  char out[500];
  if (FInOut.Write2(format, out, 0, val,val1)==0);
  InOut.WriteString(out);
};

void printf(char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[])
{
  char out[500];
  if (FInOut.Write3(format, out, 0, val,val1,val2)==0);
  InOut.WriteString(out);
};

void printf(char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[], SYSTEM.WORD val3[])
{
  char out[500];
  if (FInOut.Write4(format, out, 0, val,val1,val2,val3)==0);
  InOut.WriteString(out);
};

void printf(char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[], SYSTEM.WORD val3[], SYSTEM.WORD val4[])
{
  char out[500];
  if (FInOut.Write5(format, out, 0, val,val1,val2,val3,val4)==0);
  InOut.WriteString(out);
};

int scanf(char format[], SYSTEM.WORD &val[])
{
  int *pi;
  unsigned int *pu, u;
  long *pl;
  float *pf;
  char *pc;
  typedef char Str[80];
  Str *ps;
  Str s;
  pi = SYSTEM.ADR(val);
  pu = SYSTEM.ADR(val);
  pf = SYSTEM.ADR(val);
  pc = SYSTEM.ADR(val);
  ps = SYSTEM.ADR(val);
  pl = SYSTEM.ADR(val);
  if (format[0]!='%') return 0;
  switch (format[1]) {
  case 'i':
  case 'd': InOut.ReadInt(*pi);
            break;
  case 'u': InOut.ReadCard(*pu);
            break;
  case 'f': 
  case 'e': 
            RealInOut.ReadReal(*pf);
            if (!RealInOut.Done) return 0; else return 1;
            break;
  case 'c': do {
              InOut.Read(*pc);
              if (!InOut.Done) return 0;
            } while ((*pc=='\n')||(*pc=='\t')||(*pc==' '));
            break;
  case 's': InOut.ReadString(*ps);
            break;
  case 'l': if (format[2]!='d') return 0;
            InOut.ReadString(s);
            u = 0;
            if (!SInOut.ReadLongInt(s, u, *pl)) return 0;
            break;
  default: return 0;
  };
  if (!InOut.Done) return 0; else return 1;
};
//read & write from strings; returns number of bytes written
int sprintf(char &buffer[], char format[], SYSTEM.WORD val[])
{
  if (FInOut.Write1(format, buffer, 0, val)==0) return -1;
  return String.Length(buffer);
};

int sprintf(char &buffer[], char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[])
{
  if (FInOut.Write2(format, buffer, 0, val,val1)!=2) return -1;
  return String.Length(buffer);
};

int sprintf(char &buffer[], char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[])
{
  if (FInOut.Write3(format, buffer, 0, val,val1,val2)!=3) return -1;
  return String.Length(buffer);
};

int sprintf(char &buffer[], char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[], SYSTEM.WORD val3[])
{
  if (FInOut.Write4(format, buffer, 0, val,val1,val2,val3)!=4) return -1;
  return String.Length(buffer);
};

int sprintf(char &buffer[], char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[], SYSTEM.WORD val3[], SYSTEM.WORD val4[])
{
  if (FInOut.Write5(format, buffer, 0, val,val1,val2,val3,val4)!=5) return -1;
  return String.Length(buffer);
};

//returns number of fields converted
int sscanf(char &buffer[], char format[], SYSTEM.WORD &val[])
{ unsigned int i;
  i = 0;
  return FInOut.Read1(format, buffer, i, val);
};

int fseek(FILE *stream, long offset, Position position)
{ unsigned int high, low;
  long temp;
  switch (position) {
  case SEEK_END:
    FileSystem.Length(*stream, high, low);
    if (FileSystem.GetResponse(*stream)!=FileSystem.done) return -1;
    if (int(high)<0) return -1;
    temp = LONG(high)*65536L+LONG(low);
    INC(offset, temp);
    if (offset<0L) return -1;
    high = TRUNC(offset/65536L);
    low = TRUNC(offset%65536L);
    break;
  case SEEK_CUR:
    temp = ftell(stream);
    if (temp<0L) return -1;
    INC(offset, temp);
    if (offset<0L) return -1;
    high = TRUNC(offset/65536L);
    low = TRUNC(offset%65536L);
    break;
  case SEEK_SET:
    if (offset<0L) return -1;
    high = TRUNC(offset/65536L);
    low = TRUNC(offset%65536L);
    break;
  };
  FileSystem.SetPos(*stream, high, low);
  if (FileSystem.GetResponse(*stream)!=FileSystem.done) return -1;
  return 0;
};

long ftell(FILE *stream)
{ unsigned int high, low;
  FileSystem.GetPos(*stream, high, low);
  if (FileSystem.GetResponse(*stream)!=FileSystem.done) return -1L;
  return LONG(high)*65536L+LONG(low);
};

FILE *fopen(const char name[], const char mode[])
{
  FILE *p;
  Storage.ALLOCATE(p, sizeof(FILE));
  if (p==NULL) return NULL;
  FileSystem.Lookup(*p, name, mode[0]=='w');
  if (FileSystem.GetResponse(*p)!=FileSystem.done) return NULL;
  return p;
};

int fprintf(FILE *f, char format[], SYSTEM.WORD val[]) 
{
  char out[500];
  unsigned int foo,i;
  if (FInOut.Write1(format, out, 0, val)==0) return -1;
  i = String.Length(out);
  FileSystem.WriteNBytes(*f, SYSTEM.ADR(out), i, foo);
  return i;
};

int fprintf(FILE *f, char format[]) 
{unsigned int i,foo;
  i = String.Length(format);
  FileSystem.WriteNBytes(*f, SYSTEM.ADR(format), i, foo);
  return i;
};

int fprintf(FILE *f, char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[])
{
  char out[500];
  unsigned int foo,i;
  if (FInOut.Write2(format, out, 0, val,val1)!=2) return -1;
  i = String.Length(out);
  FileSystem.WriteNBytes(*f, SYSTEM.ADR(out), i, foo);
  return i;
};

int fprintf(FILE *f, char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[])
{
  char out[500];
  unsigned int foo,i;
  if (FInOut.Write3(format, out, 0, val,val1,val2)!=3) return -1;
  i = String.Length(out);
  FileSystem.WriteNBytes(*f, SYSTEM.ADR(out), i, foo);
  return i;
};

int fprintf(FILE *f, char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[], SYSTEM.WORD val3[])
{
  char out[500];
  unsigned int foo,i;
  if (FInOut.Write4(format, out, 0, val,val1,val2,val3)!=4) return -1;
  i = String.Length(out);
  FileSystem.WriteNBytes(*f, SYSTEM.ADR(out), i, foo);
  return i;
};

int fprintf(FILE *f, char format[], SYSTEM.WORD val[], SYSTEM.WORD val1[], SYSTEM.WORD val2[], SYSTEM.WORD val3[], SYSTEM.WORD val4[])
{
  char out[500];
  unsigned int foo,i;
  if (FInOut.Write5(format, out, 0, val,val1,val2,val3,val4)!=5) return -1;
  i = String.Length(out);
  FileSystem.WriteNBytes(*f, SYSTEM.ADR(out), i, foo);
  return i;
};

//used to read input; the return value equals one if a value was read
//formats are the same as for printf
int fscanf(FILE *f, char format[], SYSTEM.WORD &val[])
{
  int *pi;
  unsigned int *pu, u, i;
  long *pl;
  float *pf;
  char *pc;
  typedef char Str[280];
  Str *ps;
  Str s;
  char c;
  pi = SYSTEM.ADR(val);
  pu = SYSTEM.ADR(val);
  pf = SYSTEM.ADR(val);
  pc = SYSTEM.ADR(val);
  ps = SYSTEM.ADR(val);
  pl = SYSTEM.ADR(val);
  if (format[0]!='%') return 0;
  i = 0;
  do {
    c = '\0';
    do {
      FileSystem.ReadNBytes(*f, SYSTEM.ADR(c), 1, u);
    } while ((i==0)&&(u!=0)&&((c==' ')||(c=='\t')||(c=='\n')||(c=='\r')));
    s[i] = c; INC(i);
  } while ((u!=0)&&(c!=' ')&&(c!='\t')&&(c!='\n')&&(c!='\r'));
  DEC(i); s[i] = '\0'; i=0;
  switch (format[1]) {
  case 'i': 
  case 'd': if (SInOut.ReadInt(s,i,*pi)) return 1;
            break;
  case 'u': if (SInOut.ReadCard(s,i,*pu)) return 1;
            break;
  case 'f': 
  case 'e': 
            if (SInOut.ReadReal(s,i,*pf)) return 1;
            break;
  case 'c': if (s[0]!='\0') {*pc=s[0]; return 1;};
            break;
  case 's': if (s[0]!='\0') {String.Copy(*ps, s); return 1;};
            break;
  case 'l': 
            if (SInOut.ReadLongInt(s, i, *pl)) return 1;
            break;
  default: return 0;
  };
  return 0;
};

void fclose(FILE *file)
{
  if (file!=NULL) {
    FileSystem.Close(*file);
    Storage.DEALLOCATE(file, sizeof(FILE));
  };
};

unsigned int fread(SYSTEM.WORD &val[], unsigned int itemSize,
                        unsigned int itemCount, FILE *file)
{
  unsigned int n;
  if ((itemSize==0)||(itemCount==0)) return 0;
  FileSystem.ReadNBytes(*file, SYSTEM.ADR(val), itemSize*itemCount, n);
  return n/itemSize;
};

unsigned int fwrite(SYSTEM.WORD &val[], unsigned int itemSize,
                        unsigned int itemCount, FILE *file)
{
  unsigned int n;
  if ((itemSize==0)||(itemCount==0)) return 0;
  FileSystem.WriteNBytes(*file, SYSTEM.ADR(val), itemSize*itemCount, n);
  return n/itemSize;

};

void stdio()
{
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -