summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ifileIO3.s21
-rw-r--r--ufileIO2.c63
2 files changed, 72 insertions, 12 deletions
diff --git a/ifileIO3.s b/ifileIO3.s
index a766f94..73cc1dd 100644
--- a/ifileIO3.s
+++ b/ifileIO3.s
@@ -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
diff --git a/ufileIO2.c b/ufileIO2.c
index d4a6d57..ba8484f 100644
--- a/ufileIO2.c
+++ b/ufileIO2.c
@@ -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
}
}