334 lines
9.2 KiB
Diff
334 lines
9.2 KiB
Diff
|
diff -Nuarp -x Makefile -x 'gmon*' -x 'profile*' -x 'lv-*' lv451/src/command.c lv451.gotom/src/command.c
|
|||
|
--- lv451/src/command.c 2004-01-05 16:42:31.000000000 +0900
|
|||
|
+++ lv451.gotom/src/command.c 2005-05-06 21:27:02.000000000 +0900
|
|||
|
@@ -497,7 +497,7 @@ private void CommandReload( unsigned int
|
|||
|
byte defaultCodingSystem;
|
|||
|
stream_t st;
|
|||
|
|
|||
|
- if( NULL != f->sp ){
|
|||
|
+ if( NULL != f->sp.iop ){
|
|||
|
label = "cannot reload non-regular files";
|
|||
|
return;
|
|||
|
}
|
|||
|
@@ -506,9 +506,9 @@ private void CommandReload( unsigned int
|
|||
|
label = "cannot reload current file";
|
|||
|
return;
|
|||
|
} else {
|
|||
|
- fclose( f->fp );
|
|||
|
+ fclose( f->fp.iop );
|
|||
|
st.fp = fp;
|
|||
|
- st.sp = f->sp;
|
|||
|
+ st.sp = f->sp.iop;
|
|||
|
st.pid = f->pid;
|
|||
|
}
|
|||
|
|
|||
|
@@ -618,7 +618,7 @@ private void CommandEdit( unsigned int a
|
|||
|
byte *fileName;
|
|||
|
int lineNumber;
|
|||
|
|
|||
|
- if( NULL != f->sp ){
|
|||
|
+ if( NULL != f->sp.iop ){
|
|||
|
label = "cannot edit non-regular files";
|
|||
|
return;
|
|||
|
}
|
|||
|
@@ -698,7 +698,7 @@ private void CommandPoll( unsigned int a
|
|||
|
|
|||
|
kb_interrupted = FALSE;
|
|||
|
|
|||
|
- if( NULL != f->sp ){
|
|||
|
+ if( NULL != f->sp.iop ){
|
|||
|
label = "cannot poll non-regular files";
|
|||
|
return;
|
|||
|
}
|
|||
|
@@ -718,8 +718,8 @@ private void CommandPoll( unsigned int a
|
|||
|
ConsoleSetAttribute( 0 );
|
|||
|
ConsoleFlush();
|
|||
|
|
|||
|
- (void)fseek( f->fp, 0, SEEK_END );
|
|||
|
- pos = ftell( f->fp );
|
|||
|
+ (void)IobufFseek( &f->fp, 0, SEEK_END );
|
|||
|
+ pos = IobufFtell( &f->fp );
|
|||
|
|
|||
|
ConsoleEnableInterrupt();
|
|||
|
|
|||
|
@@ -728,8 +728,8 @@ private void CommandPoll( unsigned int a
|
|||
|
if( kb_interrupted )
|
|||
|
break;
|
|||
|
|
|||
|
- (void)fseek( f->fp, 0, SEEK_END );
|
|||
|
- if( ftell( f->fp ) > pos ){
|
|||
|
+ (void)IobufFseek( &f->fp, 0, SEEK_END );
|
|||
|
+ if( IobufFtell( &f->fp ) > pos ){
|
|||
|
// it grew
|
|||
|
break;
|
|||
|
}
|
|||
|
diff -Nuarp -x Makefile -x 'gmon*' -x 'profile*' -x 'lv-*' lv451/src/configure.in lv451.gotom/src/configure.in
|
|||
|
--- lv451/src/configure.in 2004-01-05 15:35:44.000000000 +0900
|
|||
|
+++ lv451.gotom/src/configure.in 2005-05-06 21:28:07.000000000 +0900
|
|||
|
@@ -57,5 +57,16 @@ AC_DEFUN([AM_LANGINFO_CODESET],
|
|||
|
|
|||
|
AM_LANGINFO_CODESET
|
|||
|
|
|||
|
+AC_MSG_CHECKING(whether fastio is used)
|
|||
|
+AC_ARG_ENABLE(fastio,
|
|||
|
+ [ --enable-fastio tries to reduce stdio overhead],
|
|||
|
+ [if ! test "$enableval" = no; then
|
|||
|
+ AC_DEFINE(USE_INTERNAL_IOBUF, 1)
|
|||
|
+ AC_MSG_RESULT(yes)
|
|||
|
+ else
|
|||
|
+ AC_MSG_RESULT(no)
|
|||
|
+ fi],
|
|||
|
+ [AC_MSG_RESULT(no)])
|
|||
|
+
|
|||
|
dnl AC_OUTPUT(Makefile src/Makefile)
|
|||
|
AC_OUTPUT(Makefile)
|
|||
|
diff -Nuarp -x Makefile -x 'gmon*' -x 'profile*' -x 'lv-*' lv451/src/fetch.c lv451.gotom/src/fetch.c
|
|||
|
--- lv451/src/fetch.c 2004-01-05 16:30:15.000000000 +0900
|
|||
|
+++ lv451.gotom/src/fetch.c 2005-05-06 20:03:44.000000000 +0900
|
|||
|
@@ -151,7 +151,7 @@ private void PageLoad( file_t *f, int bl
|
|||
|
{
|
|||
|
int i;
|
|||
|
|
|||
|
- if( fseek( f->fp, ptr, SEEK_SET ) )
|
|||
|
+ if( IobufFseek( &f->fp, ptr, SEEK_SET ) )
|
|||
|
perror( "PageLoad()" ), exit( -1 );
|
|||
|
|
|||
|
f->eof = FALSE;
|
|||
|
diff -Nuarp -x Makefile -x 'gmon*' -x 'profile*' -x 'lv-*' lv451/src/file.c lv451.gotom/src/file.c
|
|||
|
--- lv451/src/file.c 2004-01-05 16:30:15.000000000 +0900
|
|||
|
+++ lv451.gotom/src/file.c 2005-05-06 21:36:20.000000000 +0900
|
|||
|
@@ -68,6 +68,57 @@ public void FileFreeLine( file_t *f )
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
+#ifdef USE_INTERNAL_IOBUF
|
|||
|
+public inline int IobufGetc( iobuf_t *iobuf )
|
|||
|
+{
|
|||
|
+ if( iobuf->cur >= iobuf->last ){
|
|||
|
+ /* no stream buffer, reset and fill now */
|
|||
|
+ iobuf->cur = 0;
|
|||
|
+ iobuf->last = fread( iobuf->buf, sizeof( byte ), IOBUF_DEFAULT_SIZE, iobuf->iop );
|
|||
|
+ if( iobuf->last <= 0 ){
|
|||
|
+ return EOF;
|
|||
|
+ }
|
|||
|
+ }
|
|||
|
+ return iobuf->buf[ iobuf->cur++ ];
|
|||
|
+}
|
|||
|
+
|
|||
|
+public inline int IobufUngetc( int ch, iobuf_t *iobuf )
|
|||
|
+{
|
|||
|
+ if( iobuf->cur == 0 ){
|
|||
|
+ /* XXX: it should be tied to fp sanely */
|
|||
|
+ return EOF;
|
|||
|
+ }
|
|||
|
+ iobuf->buf[ --iobuf->cur ] = (byte)ch;
|
|||
|
+ return ch;
|
|||
|
+}
|
|||
|
+
|
|||
|
+public long IobufFtell( iobuf_t *iobuf )
|
|||
|
+{
|
|||
|
+ long ptr;
|
|||
|
+ ptr = ftell( iobuf->iop );
|
|||
|
+ if( iobuf->cur == iobuf->last ){
|
|||
|
+ return ptr;
|
|||
|
+ }
|
|||
|
+ return ptr - ( iobuf->last - iobuf->cur );
|
|||
|
+}
|
|||
|
+
|
|||
|
+public int IobufFseek( iobuf_t *iobuf, long off, int mode )
|
|||
|
+{
|
|||
|
+ iobuf->cur = iobuf->last = 0; /* flush all iobuf */
|
|||
|
+ return fseek( iobuf->iop, off, mode );
|
|||
|
+}
|
|||
|
+
|
|||
|
+public int IobufFeof( iobuf_t *iobuf )
|
|||
|
+{
|
|||
|
+ if( iobuf->cur == iobuf->last ){
|
|||
|
+ return feof( iobuf->iop );
|
|||
|
+ } else {
|
|||
|
+ return 1;
|
|||
|
+ }
|
|||
|
+}
|
|||
|
+#endif
|
|||
|
+
|
|||
|
+
|
|||
|
/*
|
|||
|
* $B8=:_$N%U%!%$%k%]%$%s%?$+$i(B 1$B9T$rFI$_9~$s$G%P%C%U%!$K3JG<$9$k(B.
|
|||
|
* $B%3!<%I7O$N<+F0H=JL$NBP>]$H$J$k>l9g(B, $B<+F0H=JL$r9T$J$&(B.
|
|||
|
@@ -93,21 +144,21 @@ public byte *FileLoadLine( file_t *f, in
|
|||
|
count = 0;
|
|||
|
idx = 0;
|
|||
|
|
|||
|
- while( EOF != (ch = getc( f->fp )) ){
|
|||
|
+ while( EOF != (ch = IobufGetc( &f->fp )) ){
|
|||
|
len++;
|
|||
|
load_array[ count ][ idx++ ] = (byte)ch;
|
|||
|
if( LF == ch ){
|
|||
|
/* UNIX style */
|
|||
|
break;
|
|||
|
} else if( CR == ch ){
|
|||
|
- if( LF == (ch = getc( f->fp )) ){
|
|||
|
+ if( LF == (ch = IobufGetc( &f->fp )) ){
|
|||
|
/* MSDOS style */
|
|||
|
} else if( EOF == ch ){
|
|||
|
/* need to avoid EOF due to pre-load of that */
|
|||
|
ch = LF;
|
|||
|
} else {
|
|||
|
/* Mac style */
|
|||
|
- ungetc( ch, f->fp );
|
|||
|
+ IobufUngetc( ch, &f->fp );
|
|||
|
}
|
|||
|
load_array[ count ][ idx - 1 ] = LF;
|
|||
|
break;
|
|||
|
@@ -207,23 +258,23 @@ public boolean_t FileStretch( file_t *f,
|
|||
|
ptr = f->lastPtr;
|
|||
|
segment = f->lastSegment;
|
|||
|
|
|||
|
- if( fseek( f->fp, ptr, SEEK_SET ) )
|
|||
|
+ if( IobufFseek( &f->fp, ptr, SEEK_SET ) )
|
|||
|
perror( "FileStretch()" ), exit( -1 );
|
|||
|
|
|||
|
#ifndef MSDOS /* IF NOT DEFINED */
|
|||
|
- if( NULL != f->sp ){
|
|||
|
- while( EOF != (ch = getc( f->sp )) ){
|
|||
|
- putc( ch, f->fp );
|
|||
|
+ if( NULL != f->sp.iop ){
|
|||
|
+ while( EOF != (ch = IobufGetc( &f->sp )) ){
|
|||
|
+ IobufPutc( ch, &f->fp );
|
|||
|
count++;
|
|||
|
if( LF == ch || CR == ch || count == (LOAD_SIZE * LOAD_COUNT) ){
|
|||
|
if( CR == ch ){
|
|||
|
- if( LF != (ch = getc( f->sp )) )
|
|||
|
- ungetc( ch, f->sp );
|
|||
|
+ if( LF != (ch = IobufGetc( &f->sp )) )
|
|||
|
+ IobufUngetc( ch, &f->sp );
|
|||
|
else
|
|||
|
- putc( LF, f->fp );
|
|||
|
+ IobufPutc( LF, &f->fp );
|
|||
|
}
|
|||
|
count = 0;
|
|||
|
- if( 0 > (ptr = ftell( f->fp )) )
|
|||
|
+ if( 0 > (ptr = IobufFtell( &f->fp )) )
|
|||
|
perror( "FileStretch()" ), exit( -1 );
|
|||
|
if( ++line == LV_PAGE_SIZE ){
|
|||
|
f->totalLines += line;
|
|||
|
@@ -249,21 +300,21 @@ public boolean_t FileStretch( file_t *f,
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
- if( -1 != f->pid && feof( f->sp ) ){
|
|||
|
+ if( -1 != f->pid && IobufFeof( &f->sp ) ){
|
|||
|
int status;
|
|||
|
wait( &status );
|
|||
|
}
|
|||
|
} else {
|
|||
|
#endif /* MSDOS */
|
|||
|
- while( EOF != (ch = getc( f->fp )) ){
|
|||
|
+ while( EOF != (ch = IobufGetc( &f->fp )) ){
|
|||
|
count++;
|
|||
|
if( LF == ch || CR == ch || count == (LOAD_SIZE * LOAD_COUNT) ){
|
|||
|
if( CR == ch ){
|
|||
|
- if( LF != (ch = getc( f->fp )) )
|
|||
|
- ungetc( ch, f->fp );
|
|||
|
+ if( LF != (ch = IobufGetc( &f->fp )) )
|
|||
|
+ IobufUngetc( ch, &f->fp );
|
|||
|
}
|
|||
|
count = 0;
|
|||
|
- if( 0 > (ptr = ftell( f->fp )) )
|
|||
|
+ if( 0 > (ptr = IobufFtell( &f->fp )) )
|
|||
|
perror( "FileStretch()" ), exit( -1 );
|
|||
|
if( ++line == LV_PAGE_SIZE ){
|
|||
|
f->totalLines += line;
|
|||
|
@@ -301,7 +352,7 @@ public boolean_t FileStretch( file_t *f,
|
|||
|
segment++;
|
|||
|
f->totalLines += line;
|
|||
|
f->lastSegment = segment;
|
|||
|
- if( 0 > (f->lastPtr = ftell( f->fp )) )
|
|||
|
+ if( 0 > (f->lastPtr = IobufFtell( &f->fp )) )
|
|||
|
perror( "FileStretch()" ), exit( -1 );
|
|||
|
}
|
|||
|
f->done = TRUE;
|
|||
|
@@ -325,7 +376,7 @@ public boolean_t FileSeek( file_t *f, un
|
|||
|
if( FALSE == FileStretch( f, segment ) )
|
|||
|
return FALSE;
|
|||
|
|
|||
|
- if( fseek( f->fp, f->slot[ Frame( segment ) ][ Slot( segment ) ], SEEK_SET ) )
|
|||
|
+ if( IobufFseek( &f->fp, f->slot[ Frame( segment ) ][ Slot( segment ) ], SEEK_SET ) )
|
|||
|
perror( "FileSeek()" ), exit( -1 );
|
|||
|
|
|||
|
return TRUE;
|
|||
|
@@ -392,8 +443,14 @@ public file_t *FileAttach( byte *fileNam
|
|||
|
f->fileNameI18N = NULL;
|
|||
|
f->fileNameLength = 0;
|
|||
|
|
|||
|
- f->fp = st->fp;
|
|||
|
- f->sp = st->sp;
|
|||
|
+ f->fp.iop = st->fp;
|
|||
|
+ f->sp.iop = st->sp;
|
|||
|
+#ifdef USE_INTERNAL_IOBUF
|
|||
|
+ f->fp.cur = 0;
|
|||
|
+ f->fp.last = 0;
|
|||
|
+ f->sp.cur = 0;
|
|||
|
+ f->sp.last = 0;
|
|||
|
+#endif
|
|||
|
f->pid = st->pid;
|
|||
|
f->lastSegment = 0;
|
|||
|
f->totalLines = 0L;
|
|||
|
diff -Nuarp -x Makefile -x 'gmon*' -x 'profile*' -x 'lv-*' lv451/src/file.h lv451.gotom/src/file.h
|
|||
|
--- lv451/src/file.h 2004-01-05 16:30:15.000000000 +0900
|
|||
|
+++ lv451.gotom/src/file.h 2005-05-06 21:34:53.000000000 +0900
|
|||
|
@@ -27,6 +27,10 @@
|
|||
|
#define FRAME_SIZE 4096U
|
|||
|
#endif /* MSDOS */
|
|||
|
|
|||
|
+#ifdef USE_INTERNAL_IOBUF
|
|||
|
+# define IOBUF_DEFAULT_SIZE 256
|
|||
|
+#endif
|
|||
|
+
|
|||
|
typedef struct {
|
|||
|
int ptr;
|
|||
|
int width;
|
|||
|
@@ -66,11 +70,20 @@ typedef struct {
|
|||
|
} find_t;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
+ FILE *iop;
|
|||
|
+#ifdef USE_INTERNAL_IOBUF
|
|||
|
+ byte buf[ IOBUF_DEFAULT_SIZE ];
|
|||
|
+ size_t cur;
|
|||
|
+ size_t last;
|
|||
|
+#endif
|
|||
|
+} iobuf_t;
|
|||
|
+
|
|||
|
+typedef struct {
|
|||
|
byte *fileName;
|
|||
|
i_str_t *fileNameI18N;
|
|||
|
int fileNameLength;
|
|||
|
- FILE *fp;
|
|||
|
- FILE *sp;
|
|||
|
+ iobuf_t fp;
|
|||
|
+ iobuf_t sp;
|
|||
|
int pid;
|
|||
|
byte inputCodingSystem;
|
|||
|
byte outputCodingSystem;
|
|||
|
@@ -137,4 +150,19 @@ public byte *FileName( file_t *f );
|
|||
|
|
|||
|
public void FileInit();
|
|||
|
|
|||
|
+#ifndef USE_INTERNAL_IOBUF
|
|||
|
+# define IobufGetc( a ) getc( (a)->iop )
|
|||
|
+# define IobufUngetc( a, b ) ungetc( a, (b)->iop )
|
|||
|
+# define IobufFtell( a ) ftell( (a)->iop )
|
|||
|
+# define IobufFseek( a, b, c ) fseek( (a)->iop, b, c)
|
|||
|
+# define IobufFeof( a ) feof( (a)->iop )
|
|||
|
+#else
|
|||
|
+public inline int IobufGetc( iobuf_t *iobuf );
|
|||
|
+public inline int IobufUngetc( int ch, iobuf_t *iobuf );
|
|||
|
+public long IobufFtell( iobuf_t *iobuf );
|
|||
|
+public int IobufFseek( iobuf_t *iobuf, long off, int mode );
|
|||
|
+public int IobufFeof( iobuf_t *iobuf );
|
|||
|
+#endif
|
|||
|
+#define IobufPutc( a, b ) putc( a, (b)->iop )
|
|||
|
+
|
|||
|
#endif /* __FILE_H__ */
|