*****************************************************************************************************
j'ai fait une modification de PouchinTVmod pour permettre de capturer
plus de 4 Go en PS (.mpg) sur des partitions FAT32 en splittant le fichier de capture
en plusieurs fichiers < 4 Go (taille paramètrable)
*****************************************************************************************************
- il faut noter que chaque fichier 'splitté' n'est pas un fichier .mpg valide !!!!!
- il faudra concaténer les fichiers 'splittés' pour obtenir un fichier .mpg valide !!!!!
(sur une partition NTFS s'il doit dépasser 4 Go)
- au lieu d'un fichier de capture unique (par exemple : nom.mpg)
on aura plusieurs fichiers : nom.mpg.001, nom.mpg.002, nom.mpg.003, etc
Les modifications sont les suivantes :
- ajout d'un fichier de paramètres de type texte
- modification des fichiers capture.cpp et ini.cpp
****************************************************************************************************************
***** ajout d'un fichier 'lettresFAT32.txt' dans le même répertoire que PouchinTVMod.exe *****
****************************************************************************************************************
- exemple de contenu :
CSW
2000000000
ce qui veut dire :
- qu'il y aura split pour les partitions C: , S: et W:
- que la taille maximum des fichiers 'splittés' est 2000000000 (presque 2 Go)
- si ce genre de modification interesse suffisament de personnes
on pourrait envisager de modifier le fichier 'config.ini'
au lieu d'utiliser le fichier spécifique 'lettresFAT32.txt'
*************************************************************
***** ajout vers le début du fichier capture.cpp *****
*************************************************************
Code : Tout sélectionner
// ----- variables ajoutées pour le split du fichier de capture -----
extern TCHAR nom_init[MAX_PATH]; // declaré en global
extern unsigned int written_all, written_all_max; // declaré en global
extern int nusufx; // declaré en global
*****************************************************************************************
***** modif du module CCapture::ecrit_fichier(...) du fichier capture.cpp *****
*****************************************************************************************
Code : Tout sélectionner
BOOL CCapture::ecrit_fichier(LPCVOID pBuf, DWORD sizBuf) const
{
DWORD written;
// ----- mise en commentaire pour le split du fichier de capture -----
// return WriteFile(hFile, pBuf, sizBuf, &written, NULL);
// ----- partie ajoutée pour le split du fichier de capture -----
BOOL result;
result = WriteFile(hFile, pBuf, sizBuf, &written, NULL);
if ( nusufx == -1 ) return result;
written_all = written_all+written;
if ( written_all > written_all_max ) {
TCHAR nom_new[MAX_PATH];
nusufx++;
swprintf(nom_new, L"%s.%3.3d", nom_init, nusufx);
CloseHandle(hFile);
CreateFile(nom_new, GENERIC_WRITE, FILE_SHARE_READ, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
written_all = 0;
}
return result;
// ----- fin de la partie ajoutée -----
}
******************************************************
***** ajout vers le début du fichier ini.cpp *****
******************************************************
Code : Tout sélectionner
// ----- variables ajoutées pour le split du fichier de capture -----
TCHAR nom_init[MAX_PATH]; // declaré en global
unsigned int written_all, written_all_max; // declaré en global
int nusufx; // declaré en global
// ----- fin des variables ajoutées
****************************************************************************************
**** modif du module NomFichierAvecDate::Create() du fichier ini.cpp *****
****************************************************************************************
Code : Tout sélectionner
HANDLE NomFichierAvecDate::Create() const
{
// ----- partie ajoutée pour initialiser le split du fichier de capture -----
FILE *fd;
char FileLetterFat[300], LettersFat[20], nom_mbs[100], LetterFile, chwrittenmax[20];
wchar_t cmdline[300];
char *ptch;
int itmp, i_last_slash;
bool do_split_file;
LPTSTR lpszCommandLine = ::GetCommandLine();
wcscpy(cmdline, lpszCommandLine);
wcstombs(&FileLetterFat[0], cmdline, sizeof(cmdline));
strcat(FileLetterFat, " ");
if ( FileLetterFat[0] == '"' ) {
memmove(&FileLetterFat[0] , &FileLetterFat[1], strlen(FileLetterFat)); // elimine 1ere double quote
ptch = strchr(FileLetterFat, '"');
if ( ptch != NULL ) *ptch = 0; // elimine 2eme double quote et ce qui suit
} else {
ptch = strchr(FileLetterFat, ' ');
if ( ptch != NULL ) *ptch = 0; // elimine espace et ce qui suit
}
i_last_slash = -1;
for (itmp = 0; itmp < (int)strlen(FileLetterFat); itmp++) {
if ( FileLetterFat[itmp] == 92 ) i_last_slash = itmp; // 92 : anti-slash
}
if ( i_last_slash == -1 ) {
// cas ou il n'y a pas de répertoire devant le nom de l'exécutable
FileLetterFat[0] = 0;
} else {
FileLetterFat[i_last_slash+1] = 0;
}
strcpy(FileLetterFat, "lettresFAT32.txt");
do_split_file = false;
fd = fopen(FileLetterFat, "r");
if ( fd != NULL ) {
// fichier présent, il doit contenir :
// - en 1ere ligne : une liste de lettres (par exemple : CSW)
// correspondant aux lettres de lecteurs associées à des partitions FAT32
// ou même à des partitions NTFS pour lesquelles on veut splitter le fichier
// - en 2eme ligne : la taille maximum en octets à partir de laquelle
// on splitte le fichier (par exemple : 2000000000 pour presque 2 Go)
// la 2eme ligne est facultative (dans ce cas 2000000000 est pris par défaut)
fgets(LettersFat, sizeof(LettersFat), fd);
if ( LettersFat[strlen(LettersFat)-1] == 10 ) LettersFat[strlen(LettersFat)-1] = 0;
strupr(LettersFat); // converti en majuscules
if ( fgets(chwrittenmax, sizeof(chwrittenmax), fd) != NULL ) {
if ( chwrittenmax[strlen(chwrittenmax)-1] == 10 ) chwrittenmax[strlen(chwrittenmax)-1] = 0;
sscanf(chwrittenmax, "%d", &written_all_max);
} else {
written_all_max = 2000000000; // presque 2 Go
}
fclose(fd);
wcstombs(&nom_mbs[0], nom, sizeof(nom));
if ( nom_mbs[1] == ':' ) {
// cas de nom de fichier absolu (par exemple : C:\dir\file)
// le cas de nom de fichier relatif (par exemple : dir1\file) n'est pas traité
LetterFile = nom_mbs[0];
if ( LetterFile >= 97 ) LetterFile = LetterFile-32; // converti en majuscules
if ( strchr(LettersFat, nom_mbs[0]) != NULL ) {
// cas ou la lettre est dans la liste LettersFat
do_split_file = true;
}
}
}
if ( do_split_file == false ) {
nusufx = -1; // pour désactiver le découpage du fichier capturé
} else {
written_all = 0;
nusufx = 1;
wcscpy(nom_init, nom);
TCHAR nom_new[MAX_PATH];
swprintf(nom_new, L"%s.%3.3d", nom_init, nusufx);
return CreateFile(nom_new, GENERIC_WRITE, FILE_SHARE_READ, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
}
// ----- fin de la partie ajoutée -----
return CreateFile(nom, GENERIC_WRITE, FILE_SHARE_READ, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
}