Funciones para realizar ftp.
//////////////////////////////////////////////////////////////////////////////
// FILE : ftp.tol
// AUTHOR : http://www.asolver.com
// PURPOSE : Funciones para realizar ftp.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real FtpDir(Text hostRootDir, // Directorio remoto
Text localDir, // Directorio local
Text filPattern, // Patron de los ficheros
Text commandFile, // Fichero de salida con mandatos ftp
Real toLower, // Envio de nombre en minusculas
Real casSen) // Equiparacion sensible a mayus/minusculas
//////////////////////////////////////////////////////////////////////////////
{
Set getDir = GetDir(localDir);
Set filSet = getDir[1];
Set dirSet = getDir[2];
Set filSend = EvalSet(filSet, Text(Text fil)
{
If(TextMatch(fil,filPattern,casSen),
{
Text filName = If(toLower, ToLower(fil), fil);
"send "+fil+" "+filName+"\n"
}, "")
});
Text filCmd = If(Card(filSend)==0, "", BinGroup("+",filSend));
Text allCmd = If(filCmd=="", "",
{
Text WriteLn("ftp> "+localDir);
Text AppendFile(commandFile,"mkdir "+hostRootDir+"\n");
Text AppendFile(commandFile,"cd "+hostRootDir+"\n");
Text AppendFile(commandFile,"lcd "+localDir+"\n");
Text AppendFile(commandFile,filCmd)
});
Set dirSend = EvalSet(dirSet, Real(Text subDir)
{
Text dirName = If(toLower, ToLower(subDir), subDir);
FtpDir(hostRootDir+"/"+dirName, localDir+"/"+dirName, filPattern,
commandFile, toLower, casSen)
});
Card(filSend)+Card(dirSend)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Agrega de formar recursiva a un fichero de nombre commandFile las
instrucciones necesarias para enviar todos los ficheros que hacen match con
filPattern de un directorio local (localDir) y de sus subdirectorios.
Hay que proporcionarle el directorio remoto (hostRootDir) bajo el cual se
requiere hace la copia.
Si toLower es minuscula todos los nombres de ficheros y subdirectorios son
enviados en minusculas, esto es clasico para sistemas UNIX.
Si casSen es TRUE el math de fichero se realizar sensible a mayusculas y
minusculas.",
FtpDir);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real FtpBuild(Text hostRootDir, // Directorio remoto
Text localDir, // Directorio local
Text filPattern, // Patron de los ficheros
Text commandFile, // Fichero de salida con mandatos ftp
Text host, // Nombre del host remoto
Real toLower, // Envio de ficheros en minusculas
Real casSen, // Equiparacion sensible a mayus/minusculas
Real bin) // Envio binario
//////////////////////////////////////////////////////////////////////////////
{
Text WriteLn("ftp> call as: ftp -n -s:"+commandFile);
Text WriteLn("ftp> searching...");
Text WriteFile(commandFile,"open "+host+"\n");
Text AppendFile(commandFile,"user "+FtpHUs+" "+FtpHPa+"\n");
Text AppendFile(commandFile,"cd "+hostRootDir+"\n");
Text AppendFile(commandFile,"lcd "+localDir+"\n");
Text If(bin,AppendFile(commandFile,"binary"+"\n"),
AppendFile(commandFile,"ascii" +"\n"));
Set getDir = GetDir(localDir);
Set filSet = getDir[1];
Set dirSet = getDir[2];
Set filSend = EvalSet(filSet, Text(Text fil)
{
If(TextMatch(fil,filPattern,casSen),
{
Text filName = If(toLower, ToLower(fil), fil);
AppendFile(commandFile,"send "+filName+"\n")
}, "")
});
Set dirSend = EvalSet(dirSet, Real(Text subDir)
{
Text dirName = If(toLower, ToLower(subDir), subDir);
FtpDir(hostRootDir+"/"+dirName, localDir+"/"+dirName, filPattern,
commandFile, toLower, casSen)
});
Text AppendFile(commandFile,"close"+"\n");
Text AppendFile(commandFile,"quit"+"\n");
Text WriteLn("ftp> done");
Card(filSend)+Card(dirSend)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crea un fichero de nombre commandFile con las instrucciones necesarias para
enviar todos los ficheros que hacen match con filPattern de un directorio
local (localDir) y de sus subdirectorios.
Hay que proporcionarle el nombre del host y el nombre del directorio remoto
(hostRootDir) bajo el cual se requiere hacer la copia.
localDir hostRootDir
/ | \ -> / | \
a b c a b c
Si toLower es minuscula todos los nombres de ficheros y subdirectorios son
enviados en minusculas, esto es clasico para sistemas UNIX.
Si casSen es TRUE el math de fichero se realizar sensible a mayusculas y
minusculas.
Sin bin es TRUE la transmision se hace en modo binario.
En Windows se ejecuta como ftp -n -s:commandFile
Retorna el numero de ordenes de transmision dadas.",
FtpBuild);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real FtpAll(Text localDir) // Directorio local
//////////////////////////////////////////////////////////////////////////////
{
Text host = "www.inkwatercolor.com"; // Host remoto
Text cmdF = "ftp/"+PagGal+".bat";
Text WriteFile(cmdF, "cd \\Asc\\Web\\Ink.Watercolor\\ftp\n"+
"copy "+PagGal+".bat "+PagGal+".log\n");
Real ftp(Text dir, Text filPattern, Text sufix, Real bin)
{
Text commandFile = PagGal+sufix+".ftp";
Real do = FtpBuild(FtpHDi+"/"+dir, localDir+"/"+dir, filPattern,
"ftp/"+commandFile,
host, TRUE, // To lower
TRUE, // case sensitive
bin); // binary / ASCII
Text AppendFile(cmdF, "ftp -n -s:"+commandFile+" >> "+PagGal+".log\n");
do
};
Set ftpSet =
[[
[["", "index.html", "inx", FALSE]], // ASCII
[["common/css", "*.css", "cmmcss", FALSE]], // ASCII
[["common/gif", "*.gif", "cmmgif", TRUE]], // Binary
[["common/src", "*.js", "cmmsrc", FALSE]], // ASCII
[[PagGal+"/page", "inf*", "galinfeng", FALSE]], // ASCII
[[PagGal+"/page", "sad*", "galsadeng", FALSE]], // ASCII
[[PagGal+"/page", "upd*", "galupdeng", FALSE]], // ASCII
[[PagGal+"/pags", "inf*", "galinfspa", FALSE]], // ASCII
[[PagGal+"/pags", "sad*", "galsadspa", FALSE]], // ASCII
[[PagGal+"/pags", "upd*", "galupdspa", FALSE]], // ASCII
[[PagGal+"/image/tiny", "*.jpg", "galtin", TRUE]], // Binary
[[PagGal+"/image/zoom", "*.jpg", "galzom", TRUE]], // Binary
[["download", "*.*", "dwn", TRUE]] // Binary
]];
Set ftpCic = EvalSet(ftpSet, Real(Set ftpReg)
{
ftp(ftpReg[1], ftpReg[2], ftpReg[3], ftpReg[4])
});
Card(ftpCic)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Funcion principal para la construccion de ficheros de mandatos de FTP.",
FtpAll);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real FtpRecovery(Text ftpDir,
Text inpLog,
Text outFil)
//////////////////////////////////////////////////////////////////////////////
{
Text outFtp = ftpDir+"/"+outFil+".ftp";
Text WriteFile(outFtp, "");
Text WriteFile(ftpDir+"/"+outFil+".bat",
"cd /sw/inkwatercolor/ftp\n"+
"copy "+outFil+".bat "+outFil+".log\n"+
"ftp -n -s:"+outFil+".ftp >> "+outFil+".log\n");
Text txtLog = ReadFile(ftpDir+"/"+inpLog);
Set setLog = Tokenizer(txtLog,"\n");
Real maxLin = Card(setLog);
Real sendCk = 0;
Set cicLog = For(1, maxLin, Real(Real linPos)
{
Text step = "ftp recovery> "+FormatReal(linPos,"%4.0lf")+
" / "+FormatReal(maxLin,"%4.0lf");
Real lin003 = Min(maxLin, linPos+3);
Real sendOk = TextBeginWith(setLog[lin003], "226 Transfer complete.");
Text linTxt = setLog[linPos];
Text linCls = If(TextBeginWith(linTxt, "ftp> "),
Sub(linTxt, 6, TextLength(linTxt)),
linTxt)+"\n";
Text If(Or( TextBeginWith(linCls, "open "),
TextBeginWith(linCls, "user "),
TextBeginWith(linCls, "mkdir "),
TextBeginWith(linCls, "cd /"),
TextBeginWith(linCls, "lcd /"),
TextBeginWith(linCls, "ascii"),
TextBeginWith(linCls, "binary"),
TextBeginWith(linCls, "close")),
AppendFile(outFtp,linCls),
If(And(TextBeginWith(linCls, "send "),
Not(sendOk)),
{ Real(sendCk:=sendCk+1);
Text AppendFile(outFtp,linCls) },
WriteLn(step)));
TRUE
});
Text AppendFile(outFtp, "quit\n");
Text WriteLn(FormatReal(sendCk,"%.0lf")+" files to resend");
Card(cicLog)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Funcion para poder continuar por donde iba una transmision por FTP que
se ha caido o se ha quedado bloqueada.",
FtpRecovery);
//////////////////////////////////////////////////////////////////////////////
Ink.Watercolor construye las páginas del sitio web inkwatercolor.com
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio