diff options
-rw-r--r-- | ifileIO3.s | 21 | ||||
-rw-r--r-- | ufileIO2.c | 63 |
2 files changed, 72 insertions, 12 deletions
@@ -12,6 +12,11 @@ // # saved registers: %ebx %esi %edi %ebp // # d1 a3 a4 a2 +#ifdef LINUX +# define OLD_READ_STRING +# define OLD_WRITE_STRING +#endif + .data #if defined (DOS) || defined (_WINDOWS_) || defined (ELF) .align 8 @@ -39,7 +44,7 @@ fwritestring_error: .globl readFI .globl readFR .globl readFS -#ifndef LINUX +#ifndef OLD_READ_STRING .globl readFString #endif .globl readLineF @@ -47,7 +52,7 @@ fwritestring_error: .globl writeFI .globl writeFR .globl writeFS -#ifndef LINUX +#ifndef OLD_WRITE_STRING .globl writeFString #endif .globl endF @@ -78,7 +83,7 @@ fwritestring_error: .globl @file_read_char .globl @file_read_int .globl @file_read_real -#ifdef LINUX +#ifdef OLD_READ_STRING .globl @file_read_string #else .globl @file_read_characters @@ -87,7 +92,7 @@ fwritestring_error: .globl @file_write_char .globl @file_write_int .globl @file_write_real -#ifdef LINUX +#ifdef OLD_WRITE_STRING .globl @file_write_string #else .globl @file_write_characters @@ -210,7 +215,7 @@ readFR: movl $-1,(sp) jmp *a2 -#ifndef LINUX +#ifndef OLD_READ_STRING readFString: movl 4(a0),a2 cmpl a2,d1 @@ -256,7 +261,7 @@ readFS: popl a1 ja readFS_gc readFS_r_gc: -#ifdef LINUX +#ifdef OLD_READ_STRING movl $__STRING__+2,(a4) addl $4,a4 @@ -412,7 +417,7 @@ writeFR: writeFS: pushl d1 -#ifdef LINUX +#ifdef OLD_WRITE_STRING addl $4,a0 pushl a0 call @file_write_string @@ -427,7 +432,7 @@ writeFS: movl $-1,d0 ret -#ifndef LINUX +#ifndef OLD_WRITE_STRING writeFString: movl 4(a0),a2 cmpl a2,d1 @@ -593,7 +593,7 @@ int file_read_real (long fn,double *r_p) } } else if (f->mode & (1<<F_READ_TEXT)){ if (fscanf (f->file,"%lg",r_p)!=1) - return 0; + return 0; } else IO_error ("FReadR: read from an output file"); @@ -601,8 +601,19 @@ int file_read_real (long fn,double *r_p) } } +#define OLD_READ_STRING 1 +#define OLD_WRITE_STRING 1 + +#if OLD_READ_STRING unsigned long file_read_string (long fn,unsigned long max_length,struct clean_string *s) { +#else +unsigned long file_read_characters (long fn,unsigned long *length_p,char *s) +{ + unsigned long max_length; + + max_length=*length_p; +#endif unsigned long length; if (fn<FIRST_REAL_FILE){ @@ -610,8 +621,13 @@ unsigned long file_read_string (long fn,unsigned long max_length,struct clean_st case 0: IO_error ("FReadS: can't read from StdErr"); case 1: - length = fread (s->characters,1,max_length,stdin); +#if OLD_READ_STRING + length = fread (s->characters,1,max_length,stdin); s->length=length; +#else + length = fread (s,1,max_length,stdin); + *length_p=length; +#endif return length; default: IO_error ("FReadS: can't open this file"); @@ -626,9 +642,13 @@ unsigned long file_read_string (long fn,unsigned long max_length,struct clean_st IO_error ("FReadS: read from an output file"); fd=f->file; +#if OLD_READ_STRING length = fread (s->characters,1,max_length,fd); s->length=length; - +#else + length = fread (s,1,max_length,fd); + *length_p=length; +#endif return length; } } @@ -646,6 +666,25 @@ unsigned long file_read_line (long fn,unsigned long max_length,char *string) int c; length=0; +#if 0 + fgets (string,max_length,stdin); + + string [max_length-1]='\0'; + while (string[length]!='\0') + ++length; + + if (length<max_length-1 || string[length-1]=='\n') + return length; + + c=getchar(); + if (c!=EOF){ + string[length++]=c; + if (c!='\n') + return -1; + } + + return length; +#else flockfile (stdin); while (length!=max_length && (c=getchar_unlocked(),c!=EOF)){ @@ -661,6 +700,7 @@ unsigned long file_read_line (long fn,unsigned long max_length,char *string) if (c!=EOF) return -1; +#endif return length; } @@ -864,15 +904,27 @@ void file_write_real (double r,long fn) } } +#if OLD_WRITE_STRING void file_write_string (struct clean_string *s,long fn) +#else +void file_write_characters (unsigned char *p,int length,long fn) +#endif { if (fn<FIRST_REAL_FILE){ switch (fn){ case 0: +#if OLD_WRITE_STRING ew_print_text (s->characters,s->length); +#else + ew_print_text (p,length); +#endif break; case 1: +#if OLD_WRITE_STRING w_print_text (s->characters,s->length); +#else + w_print_text (p,length); +#endif break; default: IO_error ("FWriteS: can't open this file"); @@ -884,8 +936,11 @@ void file_write_string (struct clean_string *s,long fn) if (f->mode & ~((1<<F_WRITE_TEXT)|(1<<F_WRITE_DATA)|(1<<F_APPEND_TEXT)|(1<<F_APPEND_DATA))) IO_error ("FWriteS: write to an input file"); - +#if OLD_WRITE_STRING fwrite (s->characters,sizeof (char),s->length,f->file); +#else + fwrite (p,sizeof (char),length,f->file); +#endif } } |