📄 stdio.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 + -