📄 sfstdio.c
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved. *//* Program to generate the header file sfstdio.h used** by the stdio-binary-compatible functions in Stdio_b.**** Written by Kiem-Phong Vo.*/#include "sfstdhdr.h"_BEGIN_EXTERNS_extern int printf _ARG_((const char*,...));extern int strcmp _ARG_((const char*,const char*));_END_EXTERNS_/* standard names for fields of interest */#if _FILE_cnt#define std_cnt _cnt#endif#if _FILE_r#define std_r _r#endif#if _FILE_w#define std_w _w#endif#if _FILE_ptr#define std_ptr _ptr#endif#if !defined(std_ptr) && _FILE_p#define std_ptr _p#endif#if _FILE_readptr#define std_readptr _IO_read_ptr#define std_readend _IO_read_end#endif#if _FILE_writeptr#define std_writeptr _IO_write_ptr#define std_writeend _IO_write_end#endif#if _FILE_flag#define std_flag _flag#endif#if !defined(std_flag) && _FILE__flag#define std_flag __flag#endif#if !defined(std_flag) && _FILE_flags#define std_flag _flags#endif#if _FILE_file#define std_file _file#endif#if !defined(std_file) && _FILE_fileno#define std_file _fileno#endif/* required fields in the FILE structure */#define STD_CNT 1#define STD_PTR 2#define STD_FLAG 3#define STD_FILE 4#define STD_READPTR 5#define STD_READEND 6#define STD_WRITEPTR 7#define STD_WRITEEND 8#define STD_R 9#define STD_W 10typedef struct _fld_{ int offset; int size; int type; struct _fld_* next;} Field_t;static FILE _F_;#define uchar unsigned char#define Offsetof(member) (((uchar*)(&(_F_.member))) - ((uchar*)(&_F_)))#define Sizeof(member) sizeof(_F_.member)#define NIL(type) ((type)0)#if __STD_CField_t* fldinsert(Field_t* head, Field_t* f)#elseField_t* fldinsert(head,f)Field_t* head;Field_t* f;#endif{ Field_t *fp, *last; if(!head) return f; for(last = NIL(Field_t*), fp = head; fp; last = fp, fp = fp->next) if(f->offset < fp->offset) break; if(last) { f->next = last->next; last->next = f; } else { f->next = head; head = f; } return head;}#if __STD_Cint fldprint(int size, char* name, char* type)#elseint fldprint(size,name,type)int size;char* name;char* type;#endif{ if(type) printf("\t%s\t%s;\n",type,name); else if(size == sizeof(char)) printf("\tchar\t%s;\n",name); else if(size == sizeof(short)) printf("\tshort\t%s;\n",name); else if(size == sizeof(int)) printf("\tint\t%s;\n",name); else printf("\tlong\t%s;\n",name); return 0;}int main(){ int pos, gap, s; Field_t *list, *f; Field_t field[64]; /* construct the order list of the fields of interest */ list = NIL(Field_t*); f = field;#ifdef std_cnt /* old-stdio _cnt */ f->offset = Offsetof(std_cnt); f->size = Sizeof(std_cnt); f->type = STD_CNT; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_r /* BSD-stdio _r (read count) */ f->offset = Offsetof(std_r); f->size = Sizeof(std_r); f->type = STD_R; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_w /* BSD-stdio _w (write count) */ f->offset = Offsetof(std_w); f->size = Sizeof(std_w); f->type = STD_W; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_ptr /* old-stdio _ptr */ f->offset = Offsetof(std_ptr); f->size = Sizeof(std_ptr); f->type = STD_PTR; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_p /* BSD-stdio _p */ f->offset = Offsetof(std_p); f->size = Sizeof(std_p); f->type = STD_PTR; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_readptr /* Linux-stdio _IO_read_ptr */ f->offset = Offsetof(std_readptr); f->size = Sizeof(std_readptr); f->type = STD_READPTR; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_readend /* Linux-stdio _IO_read_end */ f->offset = Offsetof(std_readend); f->size = Sizeof(std_readend); f->type = STD_READEND; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_writeptr /* Linux-stdio _IO_write_ptr */ f->offset = Offsetof(std_writeptr); f->size = Sizeof(std_writeptr); f->type = STD_WRITEPTR; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_writeend /* Linux-stdio _IO_write_end */ f->offset = Offsetof(std_writeend); f->size = Sizeof(std_writeend); f->type = STD_WRITEEND; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_flag /* old-stdio _flag */ f->offset = Offsetof(std_flag); f->size = Sizeof(std_flag); f->type = STD_FLAG; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif#ifdef std_file /* old/BSD-stdio _file */ f->offset = Offsetof(std_file); f->size = Sizeof(std_file); f->type = STD_FILE; f->next = NIL(Field_t*); list = fldinsert(list,f); f += 1;#endif /* output standard protection */ printf("#ifndef _SFSTDIO_H\n"); printf("#define _SFSTDIO_H\t1\n\n"); printf("#include \"no_stdio.h\"\n\n"); printf("extern int\t_Stdstream;\n\n"); printf("extern int\t_Stdextern;\n\n");#if defined(NAME_iob) || _msft_iob#if !_msft_iob if(strcmp(NAME_iob,"_iob") != 0) printf("#define _iob %s\n",NAME_iob);#endif printf("#define _do_iob 1\n\n");#endif#ifdef NAME_sf if(strcmp(NAME_sf,"_sf") != 0) printf("#define _sf %s\n",NAME_sf); printf("#define _do_sf 1\n\n");#endif#ifdef NAME_filbuf if(strcmp(NAME_filbuf,"_filbuf") != 0 ) printf("#define _filbuf %s\n",NAME_filbuf); if(__STD_C) printf("#define FILBUF(f) int _filbuf(FILE* f)\n"); else printf("#define FILBUF(f) int _filbuf(f) FILE* f;\n"); printf("#define _do_filbuf 1\n\n");#endif#ifdef NAME_flsbuf if(strcmp(NAME_flsbuf,"_flsbuf") != 0) printf("#define _flsbuf %s\n",NAME_flsbuf); if(__STD_C) printf("#define FLSBUF(c,f) int _flsbuf(int c, FILE* f)\n"); else printf("#define FLSBUF(c,f) int _flsbuf(c,f) int c; FILE* f;\n"); printf("#define _do_flsbuf 1\n\n");#endif#ifdef NAME_uflow if(strcmp(NAME_uflow,"_uflow") != 0 ) printf("#define _uflow %s\n",NAME_uflow); if(__STD_C) printf("#define FILBUF(f) int _uflow(FILE* f)\n"); else printf("#define FILBUF(f) int _uflow(f) FILE* f;\n"); printf("#define _do_uflow 1\n\n");#endif#ifdef NAME_overflow if(strcmp(NAME_overflow,"_overflow") != 0) printf("#define _overflow %s\n",NAME_overflow); if(__STD_C) printf("#define FLSBUF(c,f) int _overflow(FILE* f, int c)\n"); else printf("#define FLSBUF(c,f) int _overflow(f,c) FILE* f; int c;\n"); printf("#define _do_overflow 1\n\n");#endif#ifdef NAME_srget if(strcmp(NAME_srget,"_srget") != 0 ) printf("#define _srget %s\n",NAME_srget); if(__STD_C) printf("#define FILBUF(f) int _srget(FILE* f)\n"); else printf("#define FILBUF(f) int _srget(f) FILE* f;\n"); printf("#define _do_srget 1\n\n");#endif#ifdef NAME_swbuf if(strcmp(NAME_swbuf,"_swbuf") != 0) printf("#define _swbuf %s\n",NAME_swbuf); if(__STD_C) printf("#define FLSBUF(c,f) int _swbuf(int c, FILE* f)\n"); else printf("#define FLSBUF(c,f) int _swbuf(c,f) int c; FILE* f;\n"); printf("#define _do_swbuf 1\n\n");#endif#if _pragma_weak printf("#if _in_doprnt\n"); printf("#pragma weak _doprnt = __doprnt\n"); printf("#define _doprnt __doprnt\n"); printf("#endif\n\n"); printf("#if _in_doscan\n"); printf("#pragma weak _doscan = __doscan\n"); printf("#define _doscan __doscan\n"); printf("#endif\n\n");#ifdef NAME_iob printf("#if _in_stdextern\n"); printf("#pragma weak %s = _%s\n",NAME_iob,NAME_iob); printf("#define %s _%s\n",NAME_iob,NAME_iob); printf("#endif\n\n");#endif#ifdef NAME_filbuf printf("#if _in_filbuf\n"); printf("#pragma weak %s = _%s\n",NAME_filbuf,NAME_filbuf); printf("#define %s _%s\n",NAME_filbuf,NAME_filbuf); printf("#endif\n\n");#endif#ifdef NAME_flsbuf printf("#if _in_flsbuf\n"); printf("#pragma weak %s = _%s\n",NAME_flsbuf,NAME_flsbuf); printf("#define %s _%s\n",NAME_flsbuf,NAME_flsbuf); printf("#endif\n\n");#endif#ifdef NAME_uflow printf("#if _do_filbuf\n"); /* not a bug! */ printf("#pragma weak %s = _%s\n",NAME_uflow,NAME_uflow); printf("#define %s _%s\n",NAME_uflow,NAME_uflow);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -