mask.cpp Migliorata scelta sheet cui mandare Alt+

strings.cpp  Migliorata generazione nomi di file temporanei
tabutil.cpp  Aggiuornato uso della list_files
utility.cpp  Migliorata la list_files aggiungendo un parametro
utility.h    Cambiato prototipo della list_files


git-svn-id: svn://10.65.10.50/trunk@5342 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1997-10-09 13:31:51 +00:00
parent 7c5f62cb56
commit 2b38285053
5 changed files with 59 additions and 36 deletions

View File

@ -767,7 +767,7 @@ bool TMask::on_key(
case K_CTRL+'+': case K_CTRL+'+':
if (is_running()) if (is_running())
{ {
for (int fire = _focus-1; fire <= _focus+1; fire++) for (int fire = _focus+1; fire >= _focus-1; fire--)
{ {
if (fire >= 0 && fire < fields()) if (fire >= 0 && fire < fields())
{ {

View File

@ -1144,20 +1144,36 @@ const TFilename& TFilename::temp(
{ {
if (extension && *extension) if (extension && *extension)
{ {
static unsigned long numero = 0; TFilename mask(prefix);
if (mask.empty())
mask.tempdir();
TFilename prefisso(prefix); mask.add("*");
if (prefisso.empty()) mask.ext(extension);
prefisso.tempdir(); const int preflen = strlen(mask.path());
if (is_not_slash(prefisso.right(1)[0]))
prefisso << SLASH; TString_array list;
const int count = list_files(mask, list);
// Childish: You could use findfirst!
do if (count > 0)
{ {
format("%s%ld", prefisso.get_buffer(), ++numero); for (int i = 0; i < count; i++)
ext(extension); {
} while (fexist(_str)); const char* name = (const char*)list.row(i) + preflen;
const long numero = atol(name) + 1;
mask.cut(preflen);
mask << numero;
mask.ext(extension);
if (list.find(mask) < 0)
break;
}
}
else
{
const int star = mask.find('*');
mask[star] = '1';
}
set(mask);
} }
else else
{ {
@ -1192,7 +1208,7 @@ const TFilename& TFilename::temp(
#ifdef DBG #ifdef DBG
if (fexist(_str)) if (fexist(_str))
fatal_box("Il file '%s' esiste gia'", _str); yesnofatal_box("Il file temporaneo '%s' esiste gia'", _str);
#endif #endif
return *this; return *this;

View File

@ -207,11 +207,11 @@ void TTable::load_module_description()
n << _tabname; n << _tabname;
n.ext("msk"); n.ext("msk");
n.lower(); n.lower();
TToken_string f;
f.add(n); TString_array f;
if (list_files(f) == 1) if (list_files(n, f) == 1)
{ {
n = f.get(0); n = f.row(0);
if (!fexist(n)) if (!fexist(n))
n.overwrite("ba",0); n.overwrite("ba",0);
if (fexist(n)) if (fexist(n))

View File

@ -10,6 +10,9 @@
#include <xvt.h> #include <xvt.h>
#endif #endif
#include <xvtility.h>
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32 #if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32
#include <direct.h> #include <direct.h>
#include <io.h> #include <io.h>
@ -146,40 +149,44 @@ bool make_dir(
// @rdesc Ritorna il numero di file che soddisfano la condizione passata (numero di elementi // @rdesc Ritorna il numero di file che soddisfano la condizione passata (numero di elementi
// della token string) // della token string)
int list_files( int list_files(
TToken_string& filelist) // @parm Stringa contenente la condizione di estrazione const char* filelist, // @parm Stringa contenente la maschera di estrazione
// della lista dei file TString_array& result) // @parm Array da riempire con la lista dei file
// @comm Per comodita' la lista desiderata vine anch'essa messa in <p filelist> in quanto e' // @comm Per comodita' la lista desiderata vine anch'essa messa in <p filelist> in quanto e'
// gia' costruita // gia' costruita
{ {
TFilename dir(filelist.get(0)); TWait_cursor hourglass;
TFilename dir(filelist);
for (int i = dir.len()-1; i >= 0; i--) for (int i = dir.len()-1; i >= 0; i--)
if (dir[i] == '/' || dir[i] == '\\') break; if (dir[i] == '/' || dir[i] == '\\') break;
const TString16 mask(dir.mid(i+1)); TFilename mask(dir.mid(i+1));
dir.cut(i > 0 ? i : 0); dir.cut(i > 0 ? i : 0);
xvt_fsys_save_dir(); xvt_fsys_save_dir();
DIRECTORY directory; xvt_fsys_convert_str_to_dir((char*)(const char*)dir, &directory);
BOOLEAN ok = xvt_fsys_set_dir(&directory);
if (!ok) fatal_box ("Impossibile entrare in %s", (const char*)dir);
SLIST files = xvt_fsys_list_files("", (char*)(const char*)mask, FALSE);
if (dir.not_empty())
{
DIRECTORY directory; xvt_fsys_convert_str_to_dir(dir.get_buffer(), &directory);
BOOLEAN ok = xvt_fsys_set_dir(&directory);
if (!ok)
fatal_box ("Impossibile entrare in %s", (const char*)dir);
}
SLIST files = xvt_fsys_list_files("", mask.get_buffer(), FALSE);
const int count = xvt_slist_count(files); const int count = xvt_slist_count(files);
filelist.spaces(count*12);
filelist.cut(0);
for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e)) for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e))
{ {
char* f = xvt_slist_get(files, e, NULL); char* f = xvt_slist_get(files, e, NULL);
if (dir.not_empty()) if (dir.not_empty())
{ {
filelist.add(dir); mask = dir;
filelist << '/' << f; mask.add(f);
result.add(mask);
} }
else else
filelist.add(f); result.add(f);
} }
xvt_slist_destroy(files); xvt_slist_destroy(files);

View File

@ -16,7 +16,7 @@ enum os_type { os_Windows, os_Win32s, os_Windows95, os_WindowsNT };
os_type get_os_type(); os_type get_os_type();
bool make_dir(const char* file); bool make_dir(const char* file);
int list_files(TToken_string& names); int list_files(const char* mask, TString_array& result);
const char * encode(const char* data); const char * encode(const char* data);
const char * decode(const char* data); const char * decode(const char* data);