From 72a71f0f44cb8ae3e163985576d0b85937e3f7f8 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Tue, 24 Aug 1999 02:17:48 +0000 Subject: [PATCH] 19990824-03:50 GMT+1 --- harbour/ChangeLog | 23 ++++ harbour/config/dos/djgpp.cf | 4 +- harbour/include/ctoharb.h | 2 + harbour/include/filesys.h | 22 ++-- harbour/include/hberrors.h | 1 + harbour/runner.b32 | 6 +- harbour/source/compiler/harbour.l | 2 +- harbour/source/compiler/harbour.y | 170 +++++++++++++++--------------- harbour/source/hbpp/hbppint.c | 2 +- harbour/source/rtl/errorsys.prg | 34 +++--- harbour/tests/working/fileio.prg | 94 +++++++++++++++-- 11 files changed, 235 insertions(+), 125 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ca97a28cee..903e0c4b9a 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,26 @@ +19990824-03:50 GMT+1 Victor Szel + * tests/working/fileio.prg + + Rewritten to check more functions in more situations, displaying all + return values, etc. (almost like RTL_TEST.PRG) + * source/compiler/harbour.y + + Changed spaces to tabs in the generated code. This made the + generated code size almost 30% smaller, and the comments better aligned. + * source/compiler/harbour.l + include/hberrors.h + + One yyerror() call converted to standard GenError(). + * source/hbpp/hbppint.c + ! 'W' sign changed to 'I' for preprocessor warning. + * config/dos/djgpp.cf + - -( -) removed. + * runner.b32 + ! Fixes by Luiz Rafael Culik implemented. + * include/ctoharb.h + + hb_vmRequest*() functions added. + * source/rtl/errorsys.prg + + BREAK uncommented. + * include/filesys.h + * Some name standardization (fp -> p). + 19990823-19:37 GMT+1 Antonio Linares * source/rtl/tbrowse.prg * Added Class TbColumn DATA ColorBlock support. diff --git a/harbour/config/dos/djgpp.cf b/harbour/config/dos/djgpp.cf index cb60fa8168..9fbbf7b6df 100644 --- a/harbour/config/dos/djgpp.cf +++ b/harbour/config/dos/djgpp.cf @@ -24,7 +24,7 @@ LINKPATHS += $(foreach lib, $(LIBS), -L$(TOP)$(ROOT)source/$(lib)/$(ARCH)) else LINKPATHS += -L$(HB_LIB_COMPILE) endif -LINKLIBS += -Wl,-( +# LINKLIBS += -Wl,-( LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) # If LIBS specifies the rdd library, add all DB drivers. @@ -33,7 +33,7 @@ LINKPATHS += $(foreach drv, $(HB_DB_DRIVERS), -L$(TOP)$(ROOT)source/rdd/$(drv)/$ LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif -LINKLIBS += -Wl,-) +# LINKLIBS += -Wl,-) LDFLAGS = $(LINKPATHS) # Note: The empty line directly before 'endef' HAVE TO exist! diff --git a/harbour/include/ctoharb.h b/harbour/include/ctoharb.h index 774ee14944..98e42e95f4 100644 --- a/harbour/include/ctoharb.h +++ b/harbour/include/ctoharb.h @@ -32,6 +32,8 @@ /* Harbour virtual machine functions */ extern void hb_vmExecute( BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */ extern void hb_vmProcessSymbols( PHB_SYMB pSymbols, WORD wSymbols ); /* statics symbols initialization */ +extern void hb_vmRequestQuit( void ); +extern void hb_vmRequestBreak( PHB_ITEM pItem ); /* PCode functions */ extern void hb_vmAnd( void ); /* performs the logical AND on the latest two values, removes them and leaves result on the stack */ diff --git a/harbour/include/filesys.h b/harbour/include/filesys.h index 186445a0b2..b5325d91e9 100644 --- a/harbour/include/filesys.h +++ b/harbour/include/filesys.h @@ -61,27 +61,27 @@ typedef struct char * szExtension; } HB_FNAME, * PHB_FNAME, * HB_FNAME_PTR; -extern BOOL hb_fsChDir ( BYTE * fpDirName ); +extern BOOL hb_fsChDir ( BYTE * pDirName ); extern USHORT hb_fsChDrv ( BYTE * nDrive ); extern void hb_fsClose ( FHANDLE hFileHandle ); extern void hb_fsCommit ( FHANDLE hFileHandle ); -extern FHANDLE hb_fsCreate ( BYTE * fpFilename, USHORT uiAttribute ); +extern FHANDLE hb_fsCreate ( BYTE * pFilename, USHORT uiAttribute ); extern BYTE * hb_fsCurDir ( USHORT uiDrive ); extern BYTE hb_fsCurDrv ( void ); -extern void hb_fsDelete ( BYTE * fpFilename ); +extern void hb_fsDelete ( BYTE * pFilename ); extern USHORT hb_fsError ( void ); -extern FHANDLE hb_fsExtOpen ( BYTE * fpFilename, BYTE * fpDefExt, - USHORT uiFlags, BYTE * fpPaths, PHB_ITEM pError ); +extern FHANDLE hb_fsExtOpen ( BYTE * pFilename, BYTE * pDefExt, + USHORT uiFlags, BYTE * pPaths, PHB_ITEM pError ); extern USHORT hb_fsIsDrv ( BYTE nDrive ); extern BOOL hb_fsLock ( FHANDLE hFileHandle, ULONG ulStart, ULONG ulLength, USHORT uiMode ); -extern BOOL hb_fsMkDir ( BYTE * fpDirName ); -extern FHANDLE hb_fsOpen ( BYTE * fpFilename, USHORT uiFlags ); -extern USHORT hb_fsRead ( FHANDLE hFileHandle, BYTE * fpBuff, USHORT uiCount ); -extern BOOL hb_fsRmDir ( BYTE * fpDirName ); -extern void hb_fsRename ( BYTE * fpOldName, BYTE * fpNewName ); +extern BOOL hb_fsMkDir ( BYTE * pDirName ); +extern FHANDLE hb_fsOpen ( BYTE * pFilename, USHORT uiFlags ); +extern USHORT hb_fsRead ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ); +extern BOOL hb_fsRmDir ( BYTE * pDirName ); +extern void hb_fsRename ( BYTE * pOldName, BYTE * pNewName ); extern ULONG hb_fsSeek ( FHANDLE hFileHandle, LONG lOffset, USHORT uiMode ); -extern USHORT hb_fsWrite ( FHANDLE hFileHandle, BYTE * fpBuff, USHORT uiCount ); +extern USHORT hb_fsWrite ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ); extern PHB_FNAME hb_fsFNameSplit ( char * szFilename ); /* Split given filename into path, name and extension */ extern char * hb_fsFNameMerge ( char * szFileName, PHB_FNAME pFileName ); /* This function joins path, name and extension into a string with a filename */ diff --git a/harbour/include/hberrors.h b/harbour/include/hberrors.h index b6f35f76da..1a5ad31a98 100644 --- a/harbour/include/hberrors.h +++ b/harbour/include/hberrors.h @@ -64,6 +64,7 @@ #define ERR_INVALID_REFER 23 #define ERR_PARAMETERS_NOT_ALLOWED 24 #define ERR_EXIT_IN_SEQUENCE 25 +#define ERR_UNTERM_ARRAY_INDEX 26 #define WARN_AMBIGUOUS_VAR 1 #define WARN_MEMVAR_ASSUMED 2 diff --git a/harbour/runner.b32 b/harbour/runner.b32 index 471fded81c..69229d0ce5 100644 --- a/harbour/runner.b32 +++ b/harbour/runner.b32 @@ -7,7 +7,9 @@ .path.obj = obj;source\runner;source\runner\stdalone .path.prg = source\runner\stdalone -PROJECT: runner.exe runner.lib +PROJECT: runner.lib runner.exe + +runner.lib : runlib.obj runlib.obj : runlib.c @@ -15,7 +17,7 @@ runner.c : runner.prg external.c : external.prg .prg.c: - bin\harbour $< /n /osource\runner /iinclude /p + bin\harbour $< /n /osource\runner\stdalone /iinclude /p .c.obj: bcc32 -c -O2 -I.\include -v -o$@ -DHARBOUR_USE_GTAPI $< diff --git a/harbour/source/compiler/harbour.l b/harbour/source/compiler/harbour.l index 332dd7b4c7..20fba4ad2a 100644 --- a/harbour/source/compiler/harbour.l +++ b/harbour/source/compiler/harbour.l @@ -193,7 +193,7 @@ Separator {SpaceTab} return LITERAL; } -\n { yyerror( "Unterminated Array Index" ); exit(1); } +\n { GenError( _szCErrors, 'E', ERR_UNTERM_ARRAY_INDEX, NULL, NULL ); } \[ { iIndexSets++; return yytext[ 0 ]; } diff --git a/harbour/source/compiler/harbour.y b/harbour/source/compiler/harbour.y index b7aeef6725..0560db2746 100644 --- a/harbour/source/compiler/harbour.y +++ b/harbour/source/compiler/harbour.y @@ -2408,68 +2408,68 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag switch( pFunc->pCode[ lPCodePos ] ) { case HB_P_AND: - fprintf( yyc, " HB_P_AND,\n" ); + fprintf( yyc, "\t\tHB_P_AND,\n" ); lPCodePos++; break; case HB_P_ARRAYAT: - fprintf( yyc, " HB_P_ARRAYAT,\n" ); + fprintf( yyc, "\t\tHB_P_ARRAYAT,\n" ); lPCodePos++; break; case HB_P_ARRAYPUT: - fprintf( yyc, " HB_P_ARRAYPUT,\n" ); + fprintf( yyc, "\t\tHB_P_ARRAYPUT,\n" ); lPCodePos++; break; case HB_P_DEC: - fprintf( yyc, " HB_P_DEC,\n" ); + fprintf( yyc, "\t\tHB_P_DEC,\n" ); lPCodePos++; break; case HB_P_DIMARRAY: w = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; - fprintf( yyc, " HB_P_DIMARRAY, %i, %i,\t/* %i */\n", + fprintf( yyc, "\t\tHB_P_DIMARRAY, %i, %i,\t/* %i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], w ); lPCodePos += 3; break; case HB_P_DIVIDE: - fprintf( yyc, " HB_P_DIVIDE,\n" ); + fprintf( yyc, "\t\tHB_P_DIVIDE,\n" ); lPCodePos++; break; case HB_P_DO: - fprintf( yyc, " HB_P_DO, %i, %i,\n", + fprintf( yyc, "\t\tHB_P_DO, %i, %i,\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ] ); lPCodePos += 3; break; case HB_P_DUPLICATE: - fprintf( yyc, " HB_P_DUPLICATE,\n" ); + fprintf( yyc, "\t\tHB_P_DUPLICATE,\n" ); lPCodePos++; break; case HB_P_DUPLTWO: - fprintf( yyc, " HB_P_DUPLTWO,\n" ); + fprintf( yyc, "\t\tHB_P_DUPLTWO,\n" ); lPCodePos++; break; case HB_P_EQUAL: - fprintf( yyc, " HB_P_EQUAL,\n" ); + fprintf( yyc, "\t\tHB_P_EQUAL,\n" ); lPCodePos++; break; case HB_P_EXACTLYEQUAL: - fprintf( yyc, " HB_P_EXACTLYEQUAL,\n" ); + fprintf( yyc, "\t\tHB_P_EXACTLYEQUAL,\n" ); lPCodePos++; break; case HB_P_ENDBLOCK: --iNestedCodeblock; - fprintf( yyc, " HB_P_ENDBLOCK,\n" ); + fprintf( yyc, "\t\tHB_P_ENDBLOCK,\n" ); lPCodePos++; break; @@ -2478,20 +2478,20 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag if( lPCodePos == pFunc->lPCodePos ) { bEndProcRequired =FALSE; - fprintf( yyc, " HB_P_ENDPROC\n" ); + fprintf( yyc, "\t\tHB_P_ENDPROC\n" ); } else - fprintf( yyc, " HB_P_ENDPROC,\n" ); + fprintf( yyc, "\t\tHB_P_ENDPROC,\n" ); break; case HB_P_FALSE: - fprintf( yyc, " HB_P_FALSE,\n" ); + fprintf( yyc, "\t\tHB_P_FALSE,\n" ); lPCodePos++; break; case HB_P_FORTEST: /* ER For tests. Step > 0 LESS */ /* Step < 0 GREATER */ - fprintf( yyc, " HB_P_FORTEST,\n" ); + fprintf( yyc, "\t\tHB_P_FORTEST,\n" ); lPCodePos++; break; @@ -2507,7 +2507,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag } if( bLocals || pFunc->wParamCount ) - fprintf( yyc, " HB_P_FRAME, %i, %i,\t\t/* locals, params */\n", + fprintf( yyc, "\t\tHB_P_FRAME, %i, %i,\t/* locals, params */\n", bLocals - pFunc->wParamCount, pFunc->wParamCount ); lPCodePos += 3; @@ -2515,12 +2515,12 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_FUNCPTR: - fprintf( yyc, " HB_P_FUNCPTR,\n" ); + fprintf( yyc, "\t\tHB_P_FUNCPTR,\n" ); lPCodePos++; break; case HB_P_FUNCTION: - fprintf( yyc, " HB_P_FUNCTION, %i, %i,\n", + fprintf( yyc, "\t\tHB_P_FUNCTION, %i, %i,\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ] ); lPCodePos += 3; @@ -2528,29 +2528,29 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag case HB_P_GENARRAY: w = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; - fprintf( yyc, " HB_P_GENARRAY, %i, %i,\t/* %i */\n", + fprintf( yyc, "\t\tHB_P_GENARRAY, %i, %i,\t/* %i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], w ); lPCodePos += 3; break; case HB_P_GREATER: - fprintf( yyc, " HB_P_GREATER,\n" ); + fprintf( yyc, "\t\tHB_P_GREATER,\n" ); lPCodePos++; break; case HB_P_GREATEREQUAL: - fprintf( yyc, " HB_P_GREATEREQUAL,\n" ); + fprintf( yyc, "\t\tHB_P_GREATEREQUAL,\n" ); lPCodePos++; break; case HB_P_INC: - fprintf( yyc, " HB_P_INC,\n" ); + fprintf( yyc, "\t\tHB_P_INC,\n" ); lPCodePos++; break; case HB_P_INSTRING: - fprintf( yyc, " HB_P_INSTRING,\n" ); + fprintf( yyc, "\t\tHB_P_INSTRING,\n" ); lPCodePos++; break; @@ -2558,7 +2558,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag /*if( 1 ) (lPCodePos + 3) < pFunc->lPCodePos ) */ { w = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; - fprintf( yyc, " HB_P_JUMP, %i, %i,\t/* %i (abs: %05li) */\n", + fprintf( yyc, "\t\tHB_P_JUMP, %i, %i,\t/* %i (abs: %05li) */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], w, lPCodePos + ( w ? w: 3 ) ); } @@ -2567,7 +2567,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag case HB_P_JUMPFALSE: w = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; - fprintf( yyc, " HB_P_JUMPFALSE, %i, %i,\t/* %i (abs: %05li) */\n", + fprintf( yyc, "\t\tHB_P_JUMPFALSE, %i, %i,\t/* %i (abs: %05li) */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], w, lPCodePos + ( w ? w: 3 ) ); lPCodePos += 3; @@ -2575,19 +2575,19 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag case HB_P_JUMPTRUE: w = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; - fprintf( yyc, " HB_P_JUMPTRUE, %i, %i,\t/* %i (abs: %05li) */\n", + fprintf( yyc, "\t\tHB_P_JUMPTRUE, %i, %i,\t/* %i (abs: %05li) */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], w, lPCodePos + ( w ? w: 3 ) ); lPCodePos += 3; break; case HB_P_LESS: - fprintf( yyc, " HB_P_LESS,\n" ); + fprintf( yyc, "\t\tHB_P_LESS,\n" ); lPCodePos++; break; case HB_P_LESSEQUAL: - fprintf( yyc, " HB_P_LESSEQUAL,\n" ); + fprintf( yyc, "\t\tHB_P_LESSEQUAL,\n" ); lPCodePos++; break; @@ -2601,7 +2601,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_LOCALNAME: - fprintf( yyc, " HB_P_LOCALNAME, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_LOCALNAME, %i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], ( char * ) pFunc->pCode + lPCodePos + 3 ); @@ -2624,7 +2624,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wSym = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wSym ); - fprintf( yyc, " HB_P_MESSAGE, %i, %i, /* %s */\n", + fprintf( yyc, "\t\tHB_P_MESSAGE, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wSym )->szName ); @@ -2633,12 +2633,12 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_MINUS: - fprintf( yyc, " HB_P_MINUS,\n" ); + fprintf( yyc, "\t\tHB_P_MINUS,\n" ); lPCodePos++; break; case HB_P_MODULENAME: - fprintf( yyc, " HB_P_MODULENAME, /* %s */\n", + fprintf( yyc, "\t\tHB_P_MODULENAME,\t/* %s */\n", ( char * ) pFunc->pCode + lPCodePos++ + 1 ); while( pFunc->pCode[ lPCodePos ] ) { @@ -2653,32 +2653,32 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_MODULUS: - fprintf( yyc, " HB_P_MODULUS,\n" ); + fprintf( yyc, "\t\tHB_P_MODULUS,\n" ); lPCodePos++; break; case HB_P_MULT: - fprintf( yyc, " HB_P_MULT,\n" ); + fprintf( yyc, "\t\tHB_P_MULT,\n" ); lPCodePos++; break; case HB_P_NEGATE: - fprintf( yyc, " HB_P_NEGATE,\n" ); + fprintf( yyc, "\t\tHB_P_NEGATE,\n" ); lPCodePos++; break; case HB_P_NOT: - fprintf( yyc, " HB_P_NOT,\n" ); + fprintf( yyc, "\t\tHB_P_NOT,\n" ); lPCodePos++; break; case HB_P_NOTEQUAL: - fprintf( yyc, " HB_P_NOTEQUAL,\n" ); + fprintf( yyc, "\t\tHB_P_NOTEQUAL,\n" ); lPCodePos++; break; case HB_P_OR: - fprintf( yyc, " HB_P_OR,\n" ); + fprintf( yyc, "\t\tHB_P_OR,\n" ); lPCodePos++; break; @@ -2688,7 +2688,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_PARAMETER, %i, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PARAMETER, %i, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), pFunc->pCode[ lPCodePos + 3 ], @@ -2698,17 +2698,17 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_PLUS: - fprintf( yyc, " HB_P_PLUS,\n" ); + fprintf( yyc, "\t\tHB_P_PLUS,\n" ); lPCodePos++; break; case HB_P_POP: - fprintf( yyc, " HB_P_POP,\n" ); + fprintf( yyc, "\t\tHB_P_POP,\n" ); lPCodePos++; break; case HB_P_POPALIAS: - fprintf( yyc, " HB_P_POPALIAS,\n" ); + fprintf( yyc, "\t\tHB_P_POPALIAS,\n" ); lPCodePos++; break; @@ -2718,7 +2718,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_POPALIASEDFIELD, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_POPALIASEDFIELD, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wVar )->szName ); @@ -2732,7 +2732,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_POPFIELD, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_POPFIELD, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wVar )->szName ); @@ -2751,18 +2751,18 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag /* we are accesing variables within a codeblock */ /* the names of codeblock variable are lost */ if( wVar < 0 ) - fprintf( yyc, " HB_P_POPLOCAL, %i, %i,\t/* localvar%i */\n", + fprintf( yyc, "\t\tHB_P_POPLOCAL, %i, %i,\t/* localvar%i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], -wVar ); else - fprintf( yyc, " HB_P_POPLOCAL, %i, %i,\t/* codeblockvar%i */\n", + fprintf( yyc, "\t\tHB_P_POPLOCAL, %i, %i,\t/* codeblockvar%i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], wVar ); } else - fprintf( yyc, " HB_P_POPLOCAL, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_POPLOCAL, %i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], GetVar( pFunc->pLocals, wVar )->szName ); @@ -2776,7 +2776,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_POPMEMVAR, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_POPMEMVAR, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wVar )->szName ); @@ -2793,7 +2793,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag while( pTmp->pNext && pTmp->pNext->wStaticsBase < wVar ) pTmp =pTmp->pNext; pVar = GetVar( pTmp->pStatics, wVar - pTmp->wStaticsBase ); - fprintf( yyc, " HB_P_POPSTATIC, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_POPSTATIC, %i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pVar->szName ); @@ -2802,12 +2802,12 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_POWER: - fprintf( yyc, " HB_P_POWER,\n" ); + fprintf( yyc, "\t\tHB_P_POWER,\n" ); lPCodePos++; break; case HB_P_PUSHALIAS: - fprintf( yyc, " HB_P_PUSHALIAS,\n" ); + fprintf( yyc, "\t\tHB_P_PUSHALIAS,\n" ); lPCodePos++; break; @@ -2818,7 +2818,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_PUSHALIASEDFIELD, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHALIASEDFIELD, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wVar )->szName ); @@ -2828,17 +2828,17 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag case HB_P_PUSHBLOCK: ++iNestedCodeblock; - fprintf( yyc, " HB_P_PUSHBLOCK, %i, %i,\t/* %i */\n", + fprintf( yyc, "\t\tHB_P_PUSHBLOCK, %i, %i,\t/* %i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256 ); w = * ( ( WORD *) &( pFunc->pCode [ lPCodePos + 3 ] ) ); - fprintf( yyc, " %i, %i, \t/* number of local parameters (%i) */\n", + fprintf( yyc, "\t\t%i, %i,\t/* number of local parameters (%i) */\n", pFunc->pCode[ lPCodePos + 3 ], pFunc->pCode[ lPCodePos + 4 ], w ); wVar = * ( ( WORD *) &( pFunc->pCode [ lPCodePos + 5 ] ) ); - fprintf( yyc, " %i, %i, \t/* number of local variables (%i) */\n", + fprintf( yyc, "\t\t%i, %i,\t/* number of local variables (%i) */\n", pFunc->pCode[ lPCodePos + 5 ], pFunc->pCode[ lPCodePos + 6 ], wVar ); lPCodePos += 7; /* codeblock size + number of parameters + number of local variables */ @@ -2846,7 +2846,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag while( wVar-- ) { w = * ( ( WORD *) &( pFunc->pCode [ lPCodePos ] ) ); - fprintf( yyc, " %i, %i, \t/* %s */\n", + fprintf( yyc, "\t\t%i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos ], pFunc->pCode[ lPCodePos + 1 ], GetVar( pFunc->pLocals, w )->szName ); @@ -2858,10 +2858,10 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag { int i; ++lPCodePos; - fprintf( yyc, " HB_P_PUSHDOUBLE, " ); + fprintf( yyc, "\t\tHB_P_PUSHDOUBLE, " ); for( i = 0; i < sizeof( double ) + sizeof( BYTE ); ++i ) - fprintf( yyc, "%i, ", ( ( BYTE * ) pFunc->pCode )[ lPCodePos + i ] ); - fprintf( yyc, "/* %.*f, %d */\n", + fprintf( yyc, "%i,", ( ( BYTE * ) pFunc->pCode )[ lPCodePos + i ] ); + fprintf( yyc, "\t/* %.*f, %d */\n", *( ( BYTE * ) &( pFunc->pCode[ lPCodePos + sizeof( double ) ] ) ), *( ( double * ) &( pFunc->pCode[ lPCodePos ] ) ), *( ( BYTE * ) &( pFunc->pCode[ lPCodePos + sizeof( double ) ] ) ) ); @@ -2876,7 +2876,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_PUSHFIELD, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHFIELD, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wVar )->szName ); @@ -2885,7 +2885,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_PUSHINT: - fprintf( yyc, " HB_P_PUSHINT, %i, %i, /* %i */\n", + fprintf( yyc, "\t\tHB_P_PUSHINT, %i, %i,\t/* %i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pFunc->pCode[ lPCodePos + 1 ] + @@ -2904,18 +2904,18 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag /* we are accesing variables within a codeblock */ /* the names of codeblock variable are lost */ if( wVar < 0 ) - fprintf( yyc, " HB_P_PUSHLOCAL, %i, %i,\t/* localvar%i */\n", + fprintf( yyc, "\t\tHB_P_PUSHLOCAL, %i, %i,\t/* localvar%i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], -wVar ); else - fprintf( yyc, " HB_P_PUSHLOCAL, %i, %i,\t/* codeblockvar%i */\n", + fprintf( yyc, "\t\tHB_P_PUSHLOCAL, %i, %i,\t/* codeblockvar%i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], wVar ); } else - fprintf( yyc, " HB_P_PUSHLOCAL, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHLOCAL, %i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], GetVar( pFunc->pLocals, wVar )->szName ); @@ -2934,18 +2934,18 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag /* we are accesing variables within a codeblock */ /* the names of codeblock variable are lost */ if( wVar < 0 ) - fprintf( yyc, " HB_P_PUSHLOCALREF, %i, %i,\t/* localvar%i */\n", + fprintf( yyc, "\t\tHB_P_PUSHLOCALREF, %i, %i,\t/* localvar%i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], -wVar ); else - fprintf( yyc, " HB_P_PUSHLOCALREF, %i, %i,\t/* codeblockvar%i */\n", + fprintf( yyc, "\t\tHB_P_PUSHLOCALREF, %i, %i,\t/* codeblockvar%i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], wVar ); } else - fprintf( yyc, " HB_P_PUSHLOCALREF, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHLOCALREF, %i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], GetVar( pFunc->pLocals, wVar )->szName ); @@ -2954,7 +2954,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_PUSHLONG: - fprintf( yyc, " HB_P_PUSHLONG, %i, %i, %i, %i, /* %li */\n", + fprintf( yyc, "\t\tHB_P_PUSHLONG, %i, %i, %i, %i,\t/* %li */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pFunc->pCode[ lPCodePos + 3 ], @@ -2970,7 +2970,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_PUSHMEMVAR, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHMEMVAR, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wVar )->szName ); @@ -2985,7 +2985,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wVar = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wVar ); - fprintf( yyc, " HB_P_PUSHMEMVARREF, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHMEMVARREF, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wVar )->szName ); @@ -2994,12 +2994,12 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_PUSHNIL: - fprintf( yyc, " HB_P_PUSHNIL,\n" ); + fprintf( yyc, "\t\tHB_P_PUSHNIL,\n" ); lPCodePos++; break; case HB_P_PUSHSELF: - fprintf( yyc, " HB_P_PUSHSELF,\n" ); + fprintf( yyc, "\t\tHB_P_PUSHSELF,\n" ); lPCodePos++; break; @@ -3012,7 +3012,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag while( pTmp->pNext && pTmp->pNext->wStaticsBase < wVar ) pTmp =pTmp->pNext; pVar = GetVar( pTmp->pStatics, wVar - pTmp->wStaticsBase ); - fprintf( yyc, " HB_P_PUSHSTATIC, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHSTATIC, %i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pVar->szName ); @@ -3029,7 +3029,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag while( pTmp->pNext && pTmp->pNext->wStaticsBase < wVar ) pTmp =pTmp->pNext; pVar = GetVar( pTmp->pStatics, wVar - pTmp->wStaticsBase ); - fprintf( yyc, " HB_P_PUSHSTATICREF, %i, %i,\t/* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHSTATICREF, %i, %i,\t/* %s */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pVar->szName ); @@ -3040,7 +3040,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag case HB_P_PUSHSTR: wLen = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; - fprintf( yyc, " HB_P_PUSHSTR, %i, %i, /* %i */\n", + fprintf( yyc, "\t\tHB_P_PUSHSTR, %i, %i,\t/* %i */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], wLen ); lPCodePos +=3; @@ -3062,7 +3062,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag wSym = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; wFixPos =FixSymbolPos( wSym ); - fprintf( yyc, " HB_P_PUSHSYM, %i, %i, /* %s */\n", + fprintf( yyc, "\t\tHB_P_PUSHSYM, %i, %i,\t/* %s */\n", LOBYTE( wFixPos ), HIBYTE( wFixPos ), GetSymbolOrd( wSym )->szName ); @@ -3071,13 +3071,13 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_RETVALUE: - fprintf( yyc, " HB_P_RETVALUE,\n" ); + fprintf( yyc, "\t\tHB_P_RETVALUE,\n" ); lPCodePos++; break; case HB_P_SEQBEGIN: w = pFunc->pCode[ lPCodePos + 1 ] + pFunc->pCode[ lPCodePos + 2 ] * 256; - fprintf( yyc, " HB_P_SEQBEGIN, %i, %i,\t/* %i (abs: %05li) */\n", + fprintf( yyc, "\t\tHB_P_SEQBEGIN, %i, %i,\t/* %i (abs: %05li) */\n", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], w, lPCodePos + ( w ? w: 3 ) ); lPCodePos += 3; @@ -3093,7 +3093,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag break; case HB_P_SEQRECOVER: - fprintf( yyc, " HB_P_SEQRECOVER,\n" ); + fprintf( yyc, "\t\tHB_P_SEQRECOVER,\n" ); lPCodePos++; break; @@ -3103,7 +3103,7 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag { GetSymbol( _pInitFunc->szName, &w ); w = FixSymbolPos( w ); - fprintf( yyc, " HB_P_SFRAME, %i, %i,\t\t/* symbol (_INITSTATICS) */\n", + fprintf( yyc, "\t\tHB_P_SFRAME, %i, %i,\t/* symbol (_INITSTATICS) */\n", LOBYTE( w ), HIBYTE( w ) ); } lPCodePos += 3; @@ -3113,24 +3113,24 @@ void GenCCode( char *szFileName, char *szName ) /* generates the C languag { GetSymbol( _pInitFunc->szName, &w ); w = FixSymbolPos( w ); - fprintf( yyc, " HB_P_STATICS, %i, %i,\t\t/* symbol (_INITSTATICS) */\n", + fprintf( yyc, "\t\tHB_P_STATICS, %i, %i,\t/* symbol (_INITSTATICS) */\n", LOBYTE( w ), HIBYTE( w ) ); lPCodePos += 3; } break; case HB_P_SWAPALIAS: - fprintf( yyc, " HB_P_SWAPALIAS,\n" ); + fprintf( yyc, "\t\tHB_P_SWAPALIAS,\n" ); lPCodePos++; break; case HB_P_TRUE: - fprintf( yyc, " HB_P_TRUE,\n" ); + fprintf( yyc, "\t\tHB_P_TRUE,\n" ); lPCodePos++; break; case HB_P_ZERO: - fprintf( yyc, " HB_P_ZERO,\n" ); + fprintf( yyc, "\t\tHB_P_ZERO,\n" ); lPCodePos++; break; diff --git a/harbour/source/hbpp/hbppint.c b/harbour/source/hbpp/hbppint.c index 33dc8340d3..d0a98b38f8 100644 --- a/harbour/source/hbpp/hbppint.c +++ b/harbour/source/hbpp/hbppint.c @@ -159,7 +159,7 @@ int Hp_Parse( FILE* handl_i, FILE* handl_o ) *sLine = '\0'; } else - GenWarning( _szPWarnings, 'W', WARN_NONDIRECTIVE, NULL, NULL ); + GenWarning( _szPWarnings, 'I', WARN_NONDIRECTIVE, NULL, NULL ); } } } diff --git a/harbour/source/rtl/errorsys.prg b/harbour/source/rtl/errorsys.prg index 9e460946c2..35aeab4f31 100644 --- a/harbour/source/rtl/errorsys.prg +++ b/harbour/source/rtl/errorsys.prg @@ -26,8 +26,8 @@ #include "error.ch" -#define ISCHAR(var) (ValType(var) == "C") -#define ISNUM(var) (ValType(var) == "N") +#define ISCHAR( var ) ( ValType(var) == "C" ) +#define ISNUM( var ) ( ValType(var) == "N" ) //----------------------------------------------------------------------------// @@ -50,21 +50,21 @@ static function DefError( oError ) LOCAL cInfo := "" LOCAL n := 2 - cMessage := ErrorMessage(oError) + cMessage := ErrorMessage( oError ) // Build buttons aOptions := {} -// aAdd(aOptions, "Break" ) - aAdd(aOptions, "Quit" ) +// aAdd( aOptions, "Break" ) + aAdd( aOptions, "Quit" ) IF oError:canRetry - aAdd(aOptions, "Retry") + aAdd( aOptions, "Retry" ) ENDIF IF oError:canDefault - aAdd(aOptions, "Default") + aAdd( aOptions, "Default" ) ENDIF // Show alert box @@ -75,14 +75,14 @@ static function DefError( oError ) IF Empty( oError:osCode ) nChoice := Alert( cMessage, aOptions ) ELSE - nChoice := Alert( cMessage + ";(DOS Error " + LTrim(Str(oError:osCode)) + ")", aOptions) + nChoice := Alert( cMessage + ";(DOS Error " + LTrim( Str( oError:osCode ) ) + ")", aOptions) ENDIF ENDDO DO CASE CASE aOptions[ nChoice ] == "Break" -// Break(oError) + Break( oError ) CASE aOptions[ nChoice ] == "Retry" RETURN .T. CASE aOptions[ nChoice ] == "Default" @@ -91,8 +91,8 @@ static function DefError( oError ) // "Quit" selected - IF !Empty(oError:osCode) - cMessage += " (DOS Error " + LTrim(Str(oError:osCode)) + ")" + IF ! Empty( oError:osCode ) + cMessage += " (DOS Error " + LTrim( Str( oError:osCode ) ) + ")" ENDIF QOut( cMessage ) @@ -123,29 +123,29 @@ STATIC FUNCTION ErrorMessage(oError) cMessage := iif( oError:severity > ES_WARNING, "Error", "Warning" ) + " " // add subsystem name if available - IF ISCHAR(oError:subsystem) + IF ISCHAR( oError:subsystem ) cMessage += oError:subsystem() ELSE cMessage += "???" ENDIF // add subsystem's error code if available - IF ISNUM(oError:subCode) - cMessage += "/" + LTrim(Str(oError:subCode)) + IF ISNUM( oError:subCode ) + cMessage += "/" + LTrim( Str( oError:subCode ) ) ELSE cMessage += "/???" ENDIF // add error description if available - IF ISCHAR(oError:description) + IF ISCHAR( oError:description ) cMessage += " " + oError:description ENDIF // add either filename or operation DO CASE - CASE !Empty(oError:filename) + CASE !Empty( oError:filename ) cMessage += ": " + oError:filename - CASE !Empty(oError:operation) + CASE !Empty( oError:operation ) cMessage += ": " + oError:operation ENDCASE diff --git a/harbour/tests/working/fileio.prg b/harbour/tests/working/fileio.prg index 1266a10a87..8302748d63 100644 --- a/harbour/tests/working/fileio.prg +++ b/harbour/tests/working/fileio.prg @@ -2,14 +2,96 @@ // $Id$ // -// Testing Harbour file io features +// Written by Victor Szel +// www - http://www.harbour-project.org +// +// Placed in the public domain -function Main() +#include "fileio.ch" - local h := FCreate( "test.txt" ) +FUNCTION Main() + LOCAL cFileName := "TEST.TXT" + LOCAL nFlags - FWrite( h, "This is a test" ) + LOCAL cBuffer + LOCAL fhnd - FClose( h ) + OutSpec("FCreate( cFileName, nFlags )" , fhnd := FCreate( cFileName, nFlags ) ) + OutSpec("FWrite( fhnd, '>1234567890<' )" , FWrite( fhnd, ">1234567890<" ) ) + OutSpec("FWrite( fhnd, '(123.4567890)' )", FWrite( fhnd, "(123" + Chr(0) + "4567890)" ) ) + OutSpec("FSeek( fhnd )" , FSeek( fhnd ) ) + OutSpec("FSeek( fhnd, 5 )" , FSeek( fhnd, 5 ) ) + OutSpec("FSeek( fhnd, -1, FS_SET )" , FSeek( fhnd, -1, FS_SET ) ) + OutSpec("FSeek( fhnd, -10, FS_SET )" , FSeek( fhnd, -10, FS_SET ) ) + OutSpec("FSeek( fhnd, -100, FS_SET )" , FSeek( fhnd, -100, FS_SET ) ) + OutSpec("FWrite( fhnd, '!' )" , FWrite( fhnd, "!" ) ) + OutSpec("FSeek( fhnd, 1 )" , FSeek( fhnd, 1 ) ) + OutSpec("FWrite( fhnd, 'A' )" , FWrite( fhnd, "A" ) ) + OutSpec("FSeek( fhnd, 2, FS_SET )" , FSeek( fhnd, 2, FS_SET ) ) + OutSpec("FWrite( fhnd, 'B' )" , FWrite( fhnd, "B" ) ) + OutSpec("FSeek( fhnd, 3, FS_RELATIVE )" , FSeek( fhnd, 3, FS_RELATIVE ) ) + OutSpec("FWrite( fhnd, 'C' )" , FWrite( fhnd, "C" ) ) + OutSpec("FSeek( fhnd, -1, FS_RELATIVE )" , FSeek( fhnd, -1, FS_RELATIVE ) ) + OutSpec("FWrite( fhnd, 'D' )" , FWrite( fhnd, "D" ) ) + OutSpec("FSeek( fhnd, 3, FS_END )" , FSeek( fhnd, 3, FS_END ) ) + OutSpec("FWrite( fhnd, 'E' )" , FWrite( fhnd, "E" ) ) + OutSpec("FSeek( fhnd, -1, FS_END )" , FSeek( fhnd, -1, FS_END ) ) + OutSpec("FWrite( fhnd, 'F' )" , FWrite( fhnd, "F" ) ) + OutSpec("FSeek( fhnd, 0 )" , FSeek( fhnd, 0 ) ) + cBuffer := Space(4) + OutSpec("FRead( fhnd, cBuffer )" , FRead( fhnd, cBuffer ) ) + OutSpec("FRead( fhnd, cBuffer, 2 )" , FRead( fhnd, cBuffer, 2 ) ) + OutSpec("FRead( fhnd, @cBuffer, 5 )" , FRead( fhnd, @cBuffer, 5 ) ) + OutSpec("FRead( fhnd, @cBuffer, 3 )" , FRead( fhnd, @cBuffer, 3 ) ) + cBuffer := Space(100) + OutSpec("FRead( fhnd, @cBuffer, 100 )" , FRead( fhnd, @cBuffer, 100 ) ) + OutSpec("FSeek( fhnd, 0 )" , FSeek( fhnd, 0 ) ) + OutSpec("FReadStr( fhnd, 4 )" , FReadStr( fhnd, 4 ) ) + OutSpec("FSeek( fhnd, 0 )" , FSeek( fhnd, 0 ) ) + OutSpec("FReadStr( fhnd, 100 )" , FReadStr( fhnd, 100 ) ) + OutSpec("FSeek( fhnd, -4, FS_END )" , FSeek( fhnd, -4, FS_END ) ) + OutSpec("FReadStr( fhnd, 1 )" , FReadStr( fhnd, 1 ) ) + OutSpec("FReadStr( fhnd, 20 )" , FReadStr( fhnd, 20 ) ) + OutSpec("FSeek( fhnd, 0, FS_END )" , FSeek( fhnd, 0, FS_END ) ) + OutSpec("FWrite( fhnd, '_-_-_-_-_-_-_' )", FWrite( fhnd, "_-_-_-_-_-_-_" ) ) + OutSpec("FSeek( fhnd, -4, FS_END )" , FSeek( fhnd, -4, FS_END ) ) + OutSpec("FReadStr( fhnd, 1 )" , FReadStr( fhnd, 1 ) ) + OutSpec("FReadStr( fhnd, 20 )" , FReadStr( fhnd, 20 ) ) + OutSpec("FSeek( fhnd, 3, FS_END )" , FSeek( fhnd, 3, FS_END ) ) + OutSpec("FWrite( fhnd, 'V' )" , FWrite( fhnd, "V" ) ) + OutSpec("FSeek( fhnd, -3, FS_END )" , FSeek( fhnd, -3, FS_END ) ) + OutSpec("FWrite( fhnd, 'W' )" , FWrite( fhnd, "W" ) ) -return nil \ No newline at end of file + OutSpec("FClose()" , FClose() ) + OutSpec("FClose( fhnd )" , FClose( fhnd ) ) + OutSpec("FClose( fhnd )" , FClose( fhnd ) ) + + OutSpec("File( cFileName )" , File( cFileName ) ) + + RETURN NIL + +STATIC FUNCTION OutSpec( cWhat, xRetVal ) + + OutStd( PadR( cWhat, 35 ) +; + PadR( " e: " + LTrim( Str( FError() ) ), 9 ) +; + PadR( " ret: " + XToStr( xRetVal ), 35 ) ) + OutStd( Chr(13) + Chr(10) ) + + RETURN NIL + +STATIC FUNCTION XToStr( xValue ) + LOCAL cType := ValType( xValue ) + + DO CASE + CASE cType == "C" ; RETURN "$" + xValue + "$" + CASE cType == "N" ; RETURN LTrim( Str( xValue ) ) + CASE cType == "D" ; RETURN DToC( xValue ) + CASE cType == "L" ; RETURN iif( xValue, ".T.", ".F." ) + CASE cType == "O" ; RETURN xValue:className + " Object" + CASE cType == "U" ; RETURN "NIL" + CASE cType == "B" ; RETURN "{||...}" + CASE cType == "A" ; RETURN "{...}" + CASE cType == "M" ; RETURN xValue + ENDCASE + + RETURN ""