*** empty log message ***
This commit is contained in:
@@ -1,3 +1,19 @@
|
||||
19990727-02:22 EDT Paul Tucker <ptucker@sympatico.ca>
|
||||
* include/gtapi.h
|
||||
+ added definition of gtSetAttribute
|
||||
* source/rtl/dates.c
|
||||
* hb__seconds - fixed MSC support for correct hundreths.
|
||||
* source/rtl/dir.c
|
||||
* Directory() now works under msc. Other platform users should
|
||||
review the code and add defined()'s or code as needed.
|
||||
* source/rtl/gt/gtwin.c
|
||||
+ gtSetAttribute()
|
||||
* source/rtl/gt/gtdos.c source/rtl/gt/gtos2.c
|
||||
+ Empty gtSetAttribute()
|
||||
* source/rtl/console.c
|
||||
+ empty SAVESCREEN,RESTSCREEN
|
||||
+ SHADOW() and DBGSHADOW() now implimented
|
||||
|
||||
19990727-07:50 CET Felipe Coury
|
||||
* tests/working/hscript/dir.hs; tests/working/hscript/hello.hs;
|
||||
tests/working/hscript/hscript.prg; tests/working/hscript/multiply.hs;
|
||||
|
||||
@@ -119,5 +119,6 @@ int gtGetCursorStyle(void);
|
||||
void gtPuts(char x, char y, char attr, char *str, int len);
|
||||
void gtGetText(char x1, char y1, char x2, char y2, char *dest);
|
||||
void gtPutText(char x1, char y1, char x2, char y2, char *srce);
|
||||
void gtSetAttribute( char x1, char y1, char x2, char y2, char attribute );
|
||||
|
||||
#endif /* HB_GTAPI_H_ */
|
||||
|
||||
@@ -73,7 +73,9 @@
|
||||
#endif
|
||||
|
||||
HARBOUR HB___ACCEPT(void);
|
||||
HARBOUR HB___EJECT( void );
|
||||
HARBOUR HB_COL( void );
|
||||
HARBOUR HB_DBGSHADOW( void );
|
||||
HARBOUR HB_DEVOUT( void );
|
||||
HARBOUR HB_DEVOUTPICT( void );
|
||||
HARBOUR HB_DEVPOS( void );
|
||||
@@ -82,7 +84,6 @@ HARBOUR HB_DISPBOX( void );
|
||||
HARBOUR HB_DISPCOUNT( void );
|
||||
HARBOUR HB_DISPEND( void );
|
||||
HARBOUR HB_DISPOUT( void );
|
||||
HARBOUR HB___EJECT( void );
|
||||
HARBOUR HB_ISCOLOR( void );
|
||||
HARBOUR HB_MAXCOL( void );
|
||||
HARBOUR HB_MAXROW( void );
|
||||
@@ -95,12 +96,14 @@ HARBOUR HB_ROW( void );
|
||||
HARBOUR HB_SCROLL( void );
|
||||
HARBOUR HB_SETPOS( void );
|
||||
HARBOUR HB_SETPRC( void );
|
||||
HARBOUR HB_SHADOW( void );
|
||||
HARBOUR HB_QOUT( void );
|
||||
HARBOUR HB_QQOUT( void );
|
||||
|
||||
HB_INIT_SYMBOLS_BEGIN( Console__InitSymbols )
|
||||
{ "__ACCEPT" , FS_PUBLIC, HB___ACCEPT , 0 },
|
||||
{ "__EJECT" , FS_PUBLIC, HB___EJECT , 0 },
|
||||
{ "DBGSHADOW" , FS_PUBLIC, HB_DBGSHADOW , 0 },
|
||||
{ "DEVOUT" , FS_PUBLIC, HB_DEVOUT , 0 },
|
||||
{ "DEVOUTPICT", FS_PUBLIC, HB_DEVOUTPICT, 0 },
|
||||
{ "DISPBEGIN" , FS_PUBLIC, HB_DISPBEGIN , 0 },
|
||||
@@ -117,6 +120,7 @@ HB_INIT_SYMBOLS_BEGIN( Console__InitSymbols )
|
||||
{ "SCROLL" , FS_PUBLIC, HB_SCROLL , 0 },
|
||||
{ "SETPOS" , FS_PUBLIC, HB_SETPOS , 0 },
|
||||
{ "SETPRC" , FS_PUBLIC, HB_SETPRC , 0 },
|
||||
{ "SHADOW" , FS_PUBLIC, HB_SHADOW , 0 },
|
||||
{ "QOUT" , FS_PUBLIC, HB_QOUT , 0 },
|
||||
{ "QQOUT" , FS_PUBLIC, HB_QQOUT , 0 }
|
||||
HB_INIT_SYMBOLS_END( Console__InitSymbols );
|
||||
@@ -969,3 +973,24 @@ HARBOUR HB_NOSNOW (void)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
HARBOUR HB_SHADOW (void)
|
||||
{
|
||||
#ifdef HARBOUR_USE_GTAPI
|
||||
if( hb_pcount() == 5 )
|
||||
gtSetAttribute(hb_parni(1)+1,hb_parni(2)+1,hb_parni(3)+1,hb_parni(4)+1,hb_parni(5));
|
||||
#endif
|
||||
}
|
||||
|
||||
HARBOUR HB_DBGSHADOW (void)
|
||||
{
|
||||
HB_SHADOW();
|
||||
}
|
||||
|
||||
HARBOUR HB_SAVESCREEN (void)
|
||||
{
|
||||
}
|
||||
|
||||
HARBOUR HB_RESTSCREEN (void)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -46,7 +46,9 @@
|
||||
#if defined(__TURBOC__) || defined(__BORLANDC__) || defined(__DJGPP__)
|
||||
#include <dos.h>
|
||||
#endif
|
||||
|
||||
#if defined( _MSC_VER )
|
||||
#include <sys\timeb.h>
|
||||
#endif
|
||||
#ifndef HARBOUR_STRICT_CLIPPER_COMPATIBILITY
|
||||
#define HB_OPTIMIZE_DTOS
|
||||
#endif
|
||||
@@ -82,11 +84,21 @@ HB_INIT_SYMBOLS_END( Dates__InitSymbols );
|
||||
|
||||
double hb__seconds( void )
|
||||
{
|
||||
#if defined(__TURBOC__) || defined(__BORLANDC__) || defined(__DJGPP__) || defined(_MSC_VER)
|
||||
#if defined(__TURBOC__) || defined(__BORLANDC__) || defined(__DJGPP__) // || defined(_MSC_VER)
|
||||
struct time t;
|
||||
gettime( &t );
|
||||
return( ( ( t.ti_hour * 3600 ) + ( t.ti_min * 60 ) + t.ti_sec ) + t.ti_hund / 100.0 );
|
||||
#else
|
||||
return( ( ( t.ti_hour * 3600 ) + ( t.ti_min * 60 ) + t.ti_sec ) + (double)t.ti_hund /100 );
|
||||
#elif defined(_MSC_VER)
|
||||
struct _timeb tb;
|
||||
struct tm *oTime;
|
||||
|
||||
_ftime( &tb );
|
||||
oTime = localtime(&tb.time);
|
||||
return( ( oTime->tm_hour * 3600 ) +
|
||||
( oTime->tm_min * 60 ) +
|
||||
oTime->tm_sec +
|
||||
( (double) tb.millitm /1000 ) );
|
||||
#else
|
||||
time_t t;
|
||||
struct tm *oTime;
|
||||
time(&t);
|
||||
|
||||
@@ -2,6 +2,18 @@
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* DIR.C: Returns a Harbour array of specified directory contents filtered
|
||||
* by the optional file and attribute mask.
|
||||
*
|
||||
* Latest mods:
|
||||
* 1.21 19990722 ptucker Implimented directory for MSVC
|
||||
* Includes new attributes
|
||||
* 1.20 19990722 ptucker Corrected hang when attribute types have
|
||||
* been requested.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <hbsetup.h>
|
||||
#include <extend.h>
|
||||
#include <string.h>
|
||||
@@ -30,7 +42,7 @@
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(__WATCOMC__)
|
||||
#if defined(__WATCOMC__) || defined( _MSC_VER )
|
||||
#include <sys/stat.h>
|
||||
#include <share.h>
|
||||
#include <fcntl.h>
|
||||
@@ -83,6 +95,16 @@
|
||||
#define FA_LABEL 8
|
||||
#define FA_DIREC 16
|
||||
#define FA_ARCH 32
|
||||
/* this may not work, but lets find out (only implimented for msvc) */
|
||||
#define FA_ENCRYPTED 64
|
||||
#define FA_NORMAL 128
|
||||
#define FA_TEMPORARY 256
|
||||
#define FA_SPARSE 512
|
||||
#define FA_REPARSE 1024
|
||||
#define FA_COMPRESSED 2048
|
||||
#define FA_OFFLINE 4096
|
||||
#define FA_NOTINDEXED 8192
|
||||
#define FA_VOLCOMP 32764
|
||||
#endif
|
||||
|
||||
HARBOUR HB_DIRECTORY(void);
|
||||
@@ -100,19 +122,27 @@ static BOOL hb_strMatchDOS (char *pszString, char *pszMask);
|
||||
HARBOUR HB_DIRECTORY( void )
|
||||
{
|
||||
#if defined(HAVE_POSIX_IO)
|
||||
extern STACK stack;
|
||||
|
||||
PHB_ITEM arg1_it = hb_param(1,IT_STRING);
|
||||
PHB_ITEM arg2_it = hb_param(2,IT_STRING);
|
||||
|
||||
extern STACK stack;
|
||||
|
||||
struct stat statbuf;
|
||||
struct dirent *entry;
|
||||
struct tm *ft;
|
||||
|
||||
#if defined(_MSC_VER )
|
||||
struct _finddata_t entry;
|
||||
long hFile;
|
||||
#else
|
||||
struct dirent *entry;
|
||||
DIR * dir;
|
||||
#endif
|
||||
|
||||
char fullfile[_POSIX_PATH_MAX+1];
|
||||
char filename[_POSIX_PATH_MAX+1];
|
||||
char pattern[_POSIX_PATH_MAX+1];
|
||||
char dirname[_POSIX_PATH_MAX+1];
|
||||
char filename[_POSIX_PATH_MAX+1];
|
||||
char string[_POSIX_PATH_MAX+1];
|
||||
char pfname[_POSIX_PATH_MAX+1];
|
||||
char pfext[_POSIX_PATH_MAX+1];
|
||||
char fname[_POSIX_PATH_MAX+1];
|
||||
@@ -120,13 +150,10 @@ HARBOUR HB_DIRECTORY( void )
|
||||
char filesize[10];
|
||||
char ddate[9];
|
||||
char ttime[9];
|
||||
int attrib;
|
||||
char aatrib[8];
|
||||
char string[_POSIX_PATH_MAX+1];
|
||||
char * pos;
|
||||
long fsize;
|
||||
DIR * dir;
|
||||
int attrib;
|
||||
time_t ftime;
|
||||
char * pos;
|
||||
|
||||
PHB_ITEM pdir;
|
||||
PHB_ITEM psubarray;
|
||||
@@ -139,7 +166,6 @@ HARBOUR HB_DIRECTORY( void )
|
||||
dirname[0] = '\0';
|
||||
pattern[0] = '\0';
|
||||
|
||||
|
||||
if( arg1_it )
|
||||
{
|
||||
strcpy(string, hb_parc(1));
|
||||
@@ -181,8 +207,12 @@ HARBOUR HB_DIRECTORY( void )
|
||||
pfext[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/* redundant
|
||||
if (strlen(pfext) < 1)
|
||||
pfext[0] = '\0';
|
||||
*/
|
||||
|
||||
if (strlen(pfname) < 1)
|
||||
strcpy(pfname,"*");
|
||||
|
||||
@@ -195,9 +225,23 @@ HARBOUR HB_DIRECTORY( void )
|
||||
|
||||
tzset();
|
||||
pdir = hb_itemArrayNew(0);
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
|
||||
strcpy(string,dirname);
|
||||
strcat(string,pattern);
|
||||
if( (hFile = _findfirst( string, &entry )) != -1L )
|
||||
{
|
||||
|
||||
do
|
||||
{
|
||||
strcpy(string,entry.name);
|
||||
|
||||
#else
|
||||
dir = opendir( dirname );
|
||||
if (NULL == dir)
|
||||
{
|
||||
/* TODO: proper error handling */
|
||||
printf("\n invalid dirname %s ",dirname);
|
||||
while(0==getchar());
|
||||
}
|
||||
@@ -205,8 +249,9 @@ HARBOUR HB_DIRECTORY( void )
|
||||
/* now put everything into an array */
|
||||
while ((entry = readdir( dir )) != NULL)
|
||||
{
|
||||
|
||||
strcpy(string,entry->d_name);
|
||||
|
||||
#endif
|
||||
pos = strrchr(string,'.');
|
||||
if( pos )
|
||||
{
|
||||
@@ -219,47 +264,60 @@ HARBOUR HB_DIRECTORY( void )
|
||||
strcpy(fname,string);
|
||||
fext[0] = '\0';
|
||||
}
|
||||
|
||||
/* redundant
|
||||
if (strlen(fext) < 1)
|
||||
fext[0] = '\0';
|
||||
*/
|
||||
|
||||
if (strlen(fname) < 1)
|
||||
strcpy(fname,"*");
|
||||
|
||||
/* debug code
|
||||
printf("\n fname fext %s %s ",fname,fext);
|
||||
while(0==getchar());
|
||||
*/
|
||||
*/
|
||||
if (hb_strMatchDOS( fname,pfname) && hb_strMatchDOS( fext,pfext))
|
||||
{
|
||||
|
||||
aatrib[0] = '\0';
|
||||
attrib = 0;
|
||||
aatrib[0] = '\0';
|
||||
filesize[0] = '\0';
|
||||
filename[0] = '\0';
|
||||
attrib = 0;
|
||||
fullfile[0] = '\0';
|
||||
strcat(filename,entry->d_name);
|
||||
strcat(fullfile,dirname);
|
||||
strcat(fullfile,entry->d_name);
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
strcpy(filename,entry.name);
|
||||
#else
|
||||
strcpy(filename,entry->d_name);
|
||||
#endif
|
||||
strcpy(fullfile,dirname);
|
||||
strcat(fullfile,filename);
|
||||
|
||||
if (-1 == stat(fullfile,&statbuf))
|
||||
{
|
||||
/* TODO: proper error handling */
|
||||
printf("\n invalid file %s ",fullfile);
|
||||
while(0==getchar());
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This might be a problem under Novell when the file is a directory */
|
||||
/* needs test */
|
||||
sprintf(filesize, "%ld", statbuf.st_size);
|
||||
|
||||
fsize = statbuf.st_size;
|
||||
sprintf(filesize, "%ld", fsize);
|
||||
ftime = statbuf.st_mtime;
|
||||
ft = localtime(&ftime);
|
||||
ftime = statbuf.st_mtime;
|
||||
ft = localtime(&ftime);
|
||||
sprintf(ddate, "%04d%02d%02d",
|
||||
ft->tm_year+1900, ft->tm_mon + 1, ft->tm_mday);
|
||||
|
||||
sprintf(ddate, "%04d%02d%02d",
|
||||
ft->tm_year+1900, ft->tm_mon + 1, ft->tm_mday);
|
||||
sprintf(ttime, "%02d:%02d:%02d",
|
||||
ft->tm_hour, ft->tm_min, ft->tm_sec);
|
||||
sprintf(ttime, "%02d:%02d:%02d",
|
||||
ft->tm_hour, ft->tm_min, ft->tm_sec);
|
||||
|
||||
/* debug code
|
||||
printf("\n name date time %s %s %s ",entry,ddate,ttime);
|
||||
while(0==getchar());
|
||||
*/
|
||||
|
||||
printf("\n name date time %s %s %s ",filename,ddate,ttime);
|
||||
while(0==getchar());
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
#if defined(OS_UNIX_COMPATIBLE)
|
||||
/* GNU C on Linux or on other UNIX */
|
||||
@@ -279,22 +337,43 @@ HARBOUR HB_DIRECTORY( void )
|
||||
if( S_ISSOCK(statbuf.st_mode) )
|
||||
strcat( aatrib, "K" );
|
||||
#else
|
||||
/* TODO: seems to not clear on root entries ? */
|
||||
attrib = _chmod(fullfile,0);
|
||||
attrib = entry.attrib;
|
||||
if (attrib & FA_ARCH)
|
||||
strcat(aatrib,"A");
|
||||
if (attrib & FA_DIREC)
|
||||
strcat(aatrib,"D");
|
||||
if (attrib & FA_HIDDEN)
|
||||
strcat(aatrib,"H");
|
||||
if (attrib & FA_LABEL)
|
||||
strcat(aatrib,"V");
|
||||
if (attrib & FA_RDONLY)
|
||||
strcat(aatrib,"R");
|
||||
if (attrib & FA_SYSTEM)
|
||||
strcat(aatrib,"S");
|
||||
#endif
|
||||
if (attrib & FA_LABEL)
|
||||
{
|
||||
strcat(aatrib,"V");
|
||||
if (attrib & FA_VOLCOMP)
|
||||
strcat(aatrib,"L"); /* volume supports compression. */
|
||||
}
|
||||
/* some of these are known to work under NT - I picked the letters to use.*/
|
||||
/* needs testing on a Novell drive */
|
||||
if (attrib & FA_ENCRYPTED)
|
||||
strcat(aatrib,"E");
|
||||
// if (attrib & FA_NORMAL)
|
||||
// strcat(aatrib,"N");
|
||||
if (attrib & FA_TEMPORARY)
|
||||
strcat(aatrib,"T");
|
||||
if (attrib & FA_SPARSE)
|
||||
strcat(aatrib,"P");
|
||||
if (attrib & FA_REPARSE)
|
||||
strcat(aatrib,"Z");
|
||||
if (attrib & FA_COMPRESSED)
|
||||
strcat(aatrib,"C");
|
||||
if (attrib & FA_OFFLINE)
|
||||
strcat(aatrib,"O");
|
||||
if (attrib & FA_NOTINDEXED)
|
||||
strcat(aatrib,"X");
|
||||
|
||||
#endif
|
||||
/* TODO: attribute match rtn */
|
||||
pos = string;
|
||||
if( arg2_it && hb_parclen(2) >= 1)
|
||||
@@ -302,13 +381,11 @@ HARBOUR HB_DIRECTORY( void )
|
||||
strcpy(string, hb_parc(2));
|
||||
while (*pos != '\0')
|
||||
{
|
||||
*pos = toupper(*pos);
|
||||
*pos = (char)toupper(*pos);
|
||||
pos++;
|
||||
}
|
||||
pos = strchr(string,*aatrib);
|
||||
}
|
||||
else
|
||||
pos = string;
|
||||
|
||||
if ( pos )
|
||||
{
|
||||
@@ -336,14 +413,23 @@ HARBOUR HB_DIRECTORY( void )
|
||||
}
|
||||
}
|
||||
}
|
||||
#if defined(_MSC_VER)
|
||||
while( _findnext( hFile, &entry ) == 0 );
|
||||
|
||||
_findclose( hFile );
|
||||
#else
|
||||
closedir( dir );
|
||||
#endif
|
||||
|
||||
ItemCopy( &stack.Return, pdir ); /* DIRECTORY() returns an array */
|
||||
|
||||
hb_itemRelease(pdir);
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
|
||||
}
|
||||
#endif
|
||||
#endif /* HAVE_POSIX_IO */
|
||||
return;
|
||||
}
|
||||
|
||||
static BOOL hb_strMatchDOS (char *pszString, char *pszMask)
|
||||
@@ -386,4 +472,3 @@ static BOOL hb_strMatchDOS (char *pszString, char *pszMask)
|
||||
return !((!(*pszString) && *pszMask && *pszMask != '*') ||
|
||||
(!(*pszMask) && *pszString));
|
||||
}
|
||||
|
||||
|
||||
@@ -294,6 +294,10 @@ void gtPutText(char x1, char y1, char x2, char y2, char *srce)
|
||||
}
|
||||
}
|
||||
|
||||
void gtSetAttribute( char x1, char y1, char x2, char y2, char attribute )
|
||||
{
|
||||
}
|
||||
|
||||
char gtWhereX(void)
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
|
||||
@@ -126,3 +126,7 @@ void gtPutText(char x1, char y1, char x2, char y2, char *srce)
|
||||
srce += width;
|
||||
}
|
||||
}
|
||||
|
||||
void gtSetAttribute(char x, char y, char attr, char *str, int len)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
/*
|
||||
* GTWIN.C: Video subsystem for Windows 95/NT compilers.
|
||||
*
|
||||
* This module is based on VIDMGR by Andrew Clarke and modified for
|
||||
* the Harbour project
|
||||
* This module is based (somewhat) on VIDMGR by
|
||||
* Andrew Clarke and modified for the Harbour project
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
@@ -53,6 +53,7 @@ void gtInit(void)
|
||||
HOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
}
|
||||
|
||||
/* TODO: this can very likely be removed */
|
||||
HARBOUR GTINIT( void )
|
||||
{
|
||||
gtInit();
|
||||
@@ -80,7 +81,7 @@ char gtGetScreenHeight(void)
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
LOG("GetScreenWidth");
|
||||
LOG("GetScreenHeight");
|
||||
GetConsoleScreenBufferInfo(HOutput, &csbi);
|
||||
return (char)csbi.dwSize.Y;
|
||||
}
|
||||
@@ -274,6 +275,34 @@ void gtPutText(char x1, char y1, char x2, char y2, char *srce)
|
||||
hb_xfree(pstr);
|
||||
}
|
||||
|
||||
void gtSetAttribute( char x1, char y1, char x2, char y2, char attribute )
|
||||
{
|
||||
/* ptucker */
|
||||
|
||||
DWORD len, i, width;
|
||||
COORD coord;
|
||||
LPWORD pwattr;
|
||||
width = (y2 - y1 + 1);
|
||||
|
||||
pwattr = (LPWORD) hb_xgrab(width * sizeof(*pwattr));
|
||||
if (!pwattr)
|
||||
return;
|
||||
memset( pwattr, attribute, width *sizeof(*pwattr) );
|
||||
|
||||
coord.X = (DWORD) (y1); /* note */
|
||||
coord.Y = (DWORD) (x2);
|
||||
WriteConsoleOutputAttribute(HOutput, pwattr, width, coord, &len);
|
||||
|
||||
coord.X = (DWORD)( y2 );
|
||||
for( i=x1;i<=x2;i++)
|
||||
{
|
||||
coord.Y = (DWORD) (i);
|
||||
WriteConsoleOutputAttribute(HOutput, pwattr, 1, coord, &len);
|
||||
}
|
||||
|
||||
hb_xfree( pwattr );
|
||||
}
|
||||
|
||||
char gtWhereX(void)
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
Reference in New Issue
Block a user