From 2936528ce734866b4f5ea673bc067e80077cefbc Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 1 Oct 1999 03:53:40 +0000 Subject: [PATCH] 19991001-05:40 GMT+1 --- harbour/ChangeLog | 13 +++- harbour/funclist.txt | 2 +- harbour/source/rtl/Makefile | 1 + harbour/source/rtl/dircmd.prg | 108 ++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 harbour/source/rtl/dircmd.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 366fb8ffa3..9c2d69caa3 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,9 +1,17 @@ +19991001-05:40 GMT+1 Victor Szel + + + source/rtl/dircmd.prg + source/rtl/Makefile + funclist.txt + + __DIR() function added, so the DIR command is working now. + ( Please add this file to the non-GNU make files ) + 19991001-05:30 GMT+1 Victor Szel * source/rtl/filesys.c ! BIN2I(), BIN2L() made Clipper compatible, for strings shorter than - the expected length. One test call still fails, probable because of - different int size. + the expected length. One test call still fails, probably because of + different int size on 32 bit platforms. * include/hbdefs.h ! MKINT() casted to long instead of int. * include/external.ch @@ -11,6 +19,7 @@ + W2BIN removed. + tests/working/rtl_test.prg + BIN2W(), BIN2I(), BIN2L(), L2BIN(), I2BIN() regression tests added. + + FNAME*() tests enabled. - doc/*.nfo (removed) + doc/depend.txt (added) + The long filename files converted to one file with short name, the diff --git a/harbour/funclist.txt b/harbour/funclist.txt index 057a0dccba..084ed9d918 100644 --- a/harbour/funclist.txt +++ b/harbour/funclist.txt @@ -280,7 +280,7 @@ __dbSort ;N; __dbTotal ;N; __dbUpdate ;N; __dbZap ;N; -__Dir ;N; +__Dir ;R; __Eject ;R; __Keyboard ;R; __LabelForm ;N; diff --git a/harbour/source/rtl/Makefile b/harbour/source/rtl/Makefile index ab61ae7f91..842b7c2f35 100644 --- a/harbour/source/rtl/Makefile +++ b/harbour/source/rtl/Makefile @@ -46,6 +46,7 @@ PRG_SOURCES=\ asort.prg \ browdb.prg \ devoutp.prg \ + dircmd.prg \ errorsys.prg \ fieldbl.prg \ harbinit.prg \ diff --git a/harbour/source/rtl/dircmd.prg b/harbour/source/rtl/dircmd.prg new file mode 100644 index 0000000000..daa5fec650 --- /dev/null +++ b/harbour/source/rtl/dircmd.prg @@ -0,0 +1,108 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * __DIR() function + * + * Copyright 1999 {list of individual authors and e-mail addresses} + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version, with one exception: + * + * The exception is that if you link the Harbour Runtime Library (HRL) + * and/or the Harbour Virtual Machine (HVM) with other files to produce + * an executable, this does not by itself cause the resulting executable + * to be covered by the GNU General Public License. Your use of that + * executable is in no way restricted on account of linking the HRL + * and/or HVM code into it. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit + * their web site at http://www.gnu.org/). + * + */ + +#include "directry.ch" +#include "fileio.ch" + +PROCEDURE __Dir( cFileMask ) + LOCAL cPath + LOCAL cName + LOCAL cExt + + IF Empty( cFileMask ) + + QOut( "Database Files # Records Last Update Size" ) + + aEval( Directory( hb_FNameMerge( Set( _SET_DEFAULT ), "*", ".dbf" ) ),; + {| aDirEntry | PutDbf( aDirEntry ) } ) + ELSE + + hb_FNameSplit( LTrim( cFileMask ), @cPath, @cName, @cExt ) + IF Empty( cPath ) + cPath := Set( _SET_DEFAULT ) + ENDIF + + aEval( Directory( hb_FNameMerge( cPath, cName, cExt ) ),; + {| aDirEntry | PutNormal( aDirEntry ) } ) + ENDIF + + QOut() + + RETURN + +STATIC PROCEDURE PutDBF( aDirEntry ) + LOCAL fhnd + LOCAL buffer + LOCAL nRecCount := 0 + LOCAL dLastUpdate := SToD( "" ) + + IF ( fhnd := fOpen( aDirEntry[ F_NAME ] ) ) != F_ERROR + + buffer := Replicate( Chr( 0 ), 8 ) + + IF fRead( fhnd, @buffer, 8 ) == 8 .AND. ; + ( Bin2W( Left( buffer, 1 ) ) == 3 .OR. ; + Bin2W( Left( buffer, 1 ) ) == 131 ) + + nRecCount := Bin2L( SubStr( buffer, 5, 4 ) ) + dLastUpdate := SToD( StrZero( Bin2W( SubStr( buffer, 2, 1 ) ) + 1900, 4 ) +; + StrZero( Bin2W( SubStr( buffer, 3, 1 ) ), 2 ) +; + StrZero( Bin2W( SubStr( buffer, 4, 1 ) ), 2 ) ) + + ENDIF + + fClose( fhnd ) + + ENDIF + + QOut( PadR( aDirEntry[ F_NAME ], 15 ) +; + Str( nRecCount, 12 ) + " " +; + DToC( dLastUpdate ) +; + Str( aDirEntry[ F_SIZE ], 12 ) ) + + RETURN + +STATIC PROCEDURE PutNormal( aDirEntry ) + LOCAL cName + LOCAL cExt + + hb_FNameSplit( aDirEntry[ F_NAME ], NIL, @cName, @cExt ) + + QOut( PadR( cName, 8 ) + " " +; + PadR( cExt, 3 ) + " " +; + Str( aDirEntry[ F_SIZE ], 8 ) + " " +; + DToC( aDirEntry[ F_DATE ] ) ) + + RETURN