home *** CD-ROM | disk | FTP | other *** search
- /*
- * SvrFlSel.c
- *
- * Purpose:
- * --------
- * Slecteur de fichiers
- *
- * History:
- * --------
- * 22.01.95: fplanque: Created
- */
-
-
- #include "!OPTIONS.H" /* Options de compilation */
- #define THIS_FILE "SVRFLSEL.C v1.00 - 03.95"
-
-
- /*
- * System headers:
- */
- #include <stdio.h> /* header standard */
- #include <string.h> /* header tt de chaines */
- #include <stdlib.h> /* Pour malloc etc.. */
- #include <tos.h>
-
- /*
- * Custom headers:
- */
- #include "SPEC_PU.H"
- #include "S_MALLOC.H"
- #include "DEF_ARBO.H"
- #include "DATPG_PU.H"
- #include "DEBUG_PU.H"
- #include "SERV_PU.H"
- #include "LINE0_PU.H"
- #include "GEMDIRPU.H"
- #include "GENRC_PU.H"
- #include "SERCOMPU.H"
- #include "IOFLD_PU.H"
- #include "TEXT_PU.H"
- #include "FILES_PU.H"
-
-
- static void FileSel_ReadDir(
- VOIE * pVoie_curr ); /* In: Voie concerne */
-
-
- /*
- * --------------------------- METHODES -------------------------------
- */
-
-
- /*
- * FileSel_ENPG(-)
- *
- * Purpose:
- * --------
- * Traitrement des initialisations ENTER PAGE
- *
- * Suggest:
- * --------
- * Le read-dir ne devrait pas etre inclus ici
- *
- * History:
- * --------
- * 24.01.95: fplanque: Created
- */
- void FileSel_ENPG(
- VOIE * pVoie_curr ) /* In: Voie concerne */
- {
- PAGEARBO * pArboPg = pVoie_curr -> arboparams;
- const char * cpsz_RootPath = pArboPg -> special_par.filesel -> pMsz_RootPath;
- char * pMsz_SearchPath;
-
- /*
- * Affiche donnes
- */
- register_action( pVoie_curr, DDAT, 0, 0, NULL );
-
- /*
- * Cration PATH courant:
- */
- free_String( pVoie_curr -> pMsz_Path );
- pMsz_SearchPath = MALLOC( strlen( cpsz_RootPath ) + 15 );
- strcpy( pMsz_SearchPath, cpsz_RootPath );
- path_add_backslash( pMsz_SearchPath );
- strcat( pMsz_SearchPath, "*.*" );
- pVoie_curr -> pMsz_Path = pMsz_SearchPath;
-
- /*
- * Lecture directory:
- */
- FileSel_ReadDir( pVoie_curr );
- }
-
-
-
- /*
- * FileSel_ReadDir(-)
- *
- * Purpose:
- * --------
- * Lecture du directory courant
- *
- * Notes:
- * ------
- * For direct call: create batches, Should not be batched
- *
- * History:
- * --------
- * 28.01.95: fplanque: Created
- */
- void FileSel_ReadDir(
- VOIE * pVoie_curr ) /* In: Voie concerne */
- {
- /*
- * Efface eventuellement le directory dj
charg en mmoire:
- */
- Dir_Forget( pVoie_curr -> TpDirEnt, pVoie_curr -> nb_DirEnt );
-
- /*
- * Charge nouveau dir:
- */
- pVoie_curr -> nb_DirEnt = Dir_Read( pVoie_curr -> pMsz_Path, &(pVoie_curr -> TpDirEnt), &(pVoie_curr -> nb_TableEnt) );
- Dir_Sort( pVoie_curr -> TpDirEnt, pVoie_curr -> nb_DirEnt );
-
- /*
- * Numro de record en haut de l'cran:
- * Numro de record courant:
- */
- pVoie_curr -> n_RecIndex_Top = 1;
- pVoie_curr -> n_RecIndex_Curr = 1;
-
- /*
- * Demande l'affichage:
- */
- register_action( pVoie_curr, DREC, 0, 0, NULL );
- register_action( pVoie_curr, DPAG, 0, 0, NULL );
- }
-
-
- /*
- * FileSel_DispData(-)
- *
- * Purpose:
- * --------
- * Affiche les donnes initiales
l'cran:
- *
- * Notes:
- * ------
- * Ceci n'est normalement xcut qu'une seule fois
l'entre de la page
- *
- * History:
- * --------
- * 24.03.95: fplanque: Created
- * 28.03.95: n'affiche plus que le groupe 1
- */
- void FileSel_DispData(
- VOIE * pVoie_curr ) /* In: Voie concerne */
- {
- /*
- * Affichage champs groupe 1 (commentaire...):
- */
- OutFields_DisplayGroup( pVoie_curr, 1, 0, 0 );
- }
-
-
- /*
- * FileSel_DispRec(-)
- *
- * Purpose:
- * --------
- * Affiche les donnes concernat le dir courant
- *
- * Notes:
- * ------
- *
- * History:
- * --------
- * 28.03.95: fplanque: Created
- */
- void FileSel_DispRec(
- VOIE * pVoie_curr ) /* In: Voie concerne */
- {
- /*
- * Affichage champs groupe 2 (Path):
- */
- OutFields_DisplayGroup( pVoie_curr, 2, 0, 0 );
- }
-
-
-
- /*
- * FileSel_DispPage(-)
- *
- * Purpose:
- * --------
- * Affiche une page de liste
- *
- * History:
- * --------
- * 24.03.95: fplanque: Created
- */
- void FileSel_DispPage(
- VOIE * pVoie_curr ) /* In: Voie concerne */
- {
- ARBO_LISTPARS * pArboListPars = pVoie_curr -> arboparams -> pArboListPars;
-
- /*
- * Compteurs de lignes:
- */
- int n_Line;
- /*
- * Offsets d'affichage par rapport aux champs de rfrence
- * du groupe 4:
- */
- int n_YOffset = 0;
-
- for( n_Line = 1;
- n_Line <= pArboListPars -> nb_Lines;
- n_Line++ )
- {
- if( pVoie_curr -> n_RecIndex_Curr > pVoie_curr -> nb_DirEnt )
- {
- return;
- }
-
- /*
- * Affichage des champs du groupe 4:
- */
- OutFields_DisplayGroup( pVoie_curr, 4, 0, n_YOffset );
-
- /*
- * Prochain no de record:
- */
- (pVoie_curr -> n_RecIndex_Curr) ++; /* + ou - Relatif au dbut du groupe */
-
- /*
- * Descend
l'cran:
- */
- n_YOffset += pArboListPars -> n_InterLine;
- }
- }
-
-
- /*
- * FileSel_ChgePage(-)
- *
- * Purpose:
- * --------
- * Changement de page dans la liste suite
pression sur SUITE ou RETOUR
- *
- * History:
- * --------
- * 26.03.95: fplanque: Created
- */
- void FileSel_ChgePage(
- VOIE * pVoie_curr, /* In: Voie concerne */
- KEYCODE curr_keypress ) /* In: Touche presse */
- {
- int nb_DirEnt = pVoie_curr -> nb_DirEnt;
- int n_TopDirEnt = pVoie_curr -> n_RecIndex_Top;
- ARBO_LISTPARS * pArboListPars = pVoie_curr -> arboparams -> pArboListPars;
- int nb_MaxDispLines = pArboListPars -> nb_Lines;
-
- if( nb_DirEnt == 0 )
- { /*
- * S'il n'y a rien d'affich
- * ... c'est qu'il n'y a rien
afficher!
- */
- aff_msg_l0( pVoie_curr, "Dossier Vide!" );
- return;
- }
-
- affiche_touche( pVoie_curr, curr_keypress ); /* Affiche nom de la touche */
-
- if( curr_keypress == KEY_RETOUR )
- { /*
- * Retour:
- */
- if( n_TopDirEnt <= 1 )
- {
- aff_msg_l0( pVoie_curr, "Dbut de liste!" );
- return;
- }
-
- n_TopDirEnt -= nb_MaxDispLines;
- if( n_TopDirEnt < 1 )
- {
- n_TopDirEnt = 1;
- }
-
- pVoie_curr -> n_RecIndex_Top = n_TopDirEnt;
- pVoie_curr -> n_RecIndex_Curr = n_TopDirEnt;
-
- /*
- * Demande raffichage page:
- */
- Generic_DisplayPageChange( pVoie_curr );
- }
- else
- { /*
- * Suite:
- */
- if( n_TopDirEnt + nb_MaxDispLines > nb_DirEnt )
- {
- aff_msg_l0( pVoie_curr, "Fin de liste!" );
- return;
- }
-
- n_TopDirEnt += nb_MaxDispLines;
-
- pVoie_curr -> n_RecIndex_Top = n_TopDirEnt;
- pVoie_curr -> n_RecIndex_Curr = n_TopDirEnt;
-
- /*
- * Demande raffichage page:
- */
- Generic_DisplayPageChange( pVoie_curr );
- }
- }
-
-
- /*
- * FileSel_KeyAction(-)
- *
- * Purpose:
- * --------
- * Ragit
la touche presse sur une page de Slection de fichier
- *
- * History:
- * --------
- * 25.03.95: fplanque: Created
- * 14.05.95: correction BUG: le realloc ne gardait pas la place du \0 final du path
- * 14.05.95: efface no apres l'entre dans un dossier
- * 14.10.95: mmorise nom de fichier selectionne
- */
- void FileSel_KeyAction(
- KEYCODE curr_keypress, /* In: Touche presse */
- VOIE * pVoie_curr ) /* In: Voie concerne */
- {
- switch( curr_keypress )
- {
- case KEY_RETOUR:
- case KEY_SUITE:
- /*
- * On veut changer de page:
- */
- FileSel_ChgePage( pVoie_curr, curr_keypress );
- break;
-
- case KEY_ENVOI:
- { /*
- * Obtient ligne de commande:
- * (NE PAS MODIFIER la ligne de commande!)
- */
- const char * cpBsz_CmdLine = aim_CurrField( pVoie_curr );
-
- long l_number;
-
- if( extract_number( cpBsz_CmdLine, &l_number ) )
- { /*
- * Demande d'ouverture:
- */
- DIRENTRY * pDirEntry;
- const char * cpsz_FileName;
- char * pisz;
-
- if( l_number < 1 || l_number > pVoie_curr -> nb_DirEnt )
- {
- aff_msg_l0( pVoie_curr, "Numro de fichier incorrect!" );
- return;
- }
-
- pDirEntry = (pVoie_curr -> TpDirEnt)[ l_number-1 ];
- cpsz_FileName = pDirEntry -> sz_fname;
-
- if( (pDirEntry -> uc_attrib) & FA_SUBDIR )
- { /*
- * Il s'agit d'un sous dossier:
- */
- sprintf( G_tmp_buffer, " Ouverture du dossier: %s", cpsz_FileName );
- add_textinf( pVoie_curr -> wi_params, G_tmp_buffer );
-
- /*
- * Cration du nouveau path:
- * 15: provisoire
- */
- pVoie_curr -> pMsz_Path = REALLOC( pVoie_curr -> pMsz_Path, strlen( pVoie_curr -> pMsz_Path ) + strlen( cpsz_FileName ) + 15 );
-
- pisz = strBchr( pVoie_curr -> pMsz_Path, '\\' );
- if( pisz == NULL )
- {
- pisz = pVoie_curr -> pMsz_Path;
- }
-
- sprintf( pisz+1, "%s\\*.*", cpsz_FileName );
-
- /*
- * Affiche page de transition:
- */
- register_action( pVoie_curr, DISP, FE_CHGPAGE, 0, NULL ); /* Demande affichage page cran */
-
- /*
- * Lecture nouveau directory:
- */
- FileSel_ReadDir( pVoie_curr );
-
- /*
- * Efface le champ de saisie en question
- * et se remet en attente pour une nouvelle saisie:
- */
- register_action( pVoie_curr, CLRF, 0, 0, pVoie_curr -> pIOField_CurrIn );
- register_action( pVoie_curr, WAIT, 0, 0, NULL ); /* Repasse en mode d'attente d'action */
-
- return;
- }
-
- /*
- * On a tap le no d'un fichier
- * C'est trs probablement pour le tlcharger!
- * Compose nom du fichier et le mmorise dans la variable approprie
- */
- strcpy( G_tmp_buffer, pVoie_curr -> pMsz_Path );
- pisz = strBchr( G_tmp_buffer, '\\' );
- if( pisz )
- {
- pisz++;
- }
- else
- {
- pisz = G_2nd_buffer;
- }
- strcpy( pisz, cpsz_FileName );
- freeOld_dupString( &(pVoie_curr ->pMsz_VFile), G_tmp_buffer );
-
- sprintf( G_tmp_buffer, " Slection du fichier: %s", pVoie_curr ->pMsz_VFile );
- add_textinf( pVoie_curr -> wi_params, G_tmp_buffer );
-
- /*
- * Demande Changement de page:
- */
- if( follow_ArboLink( pVoie_curr, FL_DOWNLOAD ) == TRUE_1 )
- { /*
- * parametres pour la page arbo suivante:
- */
- /* pVoie_curr -> pDataPage_LockedDB_OUT = pVoie_curr -> database; */
- }
- return;
- }
-
- /*
- * On n'a pas tap un nombre...
- */
- if( ! serv_handleKeyword( pVoie_curr, '\0' ) )
- { /*
- * Si pas de mot clef:
- */
- affiche_touche( pVoie_curr, curr_keypress ); /* Affiche nom de la touche */
-
- /*
- * Demande Changement de page:
- */
- follow_KeyArboLink( pVoie_curr, curr_keypress );
- }
- break;
- }
-
- case KEY_SOMM:
- {
- PAGEARBO * pArboPg = pVoie_curr -> arboparams;
- const char * cpsz_RootPath = pArboPg -> special_par.filesel -> pMsz_RootPath;
- char * pMsz_CurrPath = pVoie_curr -> pMsz_Path;
- size_t size_Root = strlen( cpsz_RootPath );
- char * piBsz_EndSlash = strBchr( pMsz_CurrPath, '\\' );
-
- if( cpsz_RootPath[ size_Root-1 ] != '\\' )
- { /*
- * Si le rootpath ne se termine pas par \
- * sa vraie longueur est plus longue!
- */
- size_Root++;
- }
-
- if( piBsz_EndSlash > &( pMsz_CurrPath[ size_Root-1 ] ) )
- { /*
- * On est dans un subdir par rapport
Root:
- * Vire le masque
- */
- *piBsz_EndSlash = '\0';
- /*
- * Cherche
- */
- piBsz_EndSlash = strBchr( pMsz_CurrPath, '\\' );
- if( piBsz_EndSlash != NULL )
- {
- strcpy( piBsz_EndSlash+1, "*.*" );
- pVoie_curr -> pMsz_Path = REALLOC( pMsz_CurrPath, strlen( pMsz_CurrPath )+1 );
-
- /*
- * Affiche page de transition:
- */
- register_action( pVoie_curr, DISP, FE_CHGPAGE, 0, NULL ); /* Demande affichage page cran */
-
- /*
- * Lecture nouveau directory:
- */
- FileSel_ReadDir( pVoie_curr );
-
- register_action( pVoie_curr, CPOS, 0, 0, NULL ); /* Repositionne curseur pour continuer dition */
- register_action( pVoie_curr, WAIT, 0, 0, NULL ); /* Repasse en mode d'attente d'action */
-
- return;
- }
- }
-
- /*
- * Si on ne peux pas remonter l'arbo, traite sommaire normalement
- */
- }
-
-
- case KEY_ANNUL:
- case KEY_REPET:
- case KEY_GUIDE:
- case KEY_CORREC:
- affiche_touche( pVoie_curr, curr_keypress ); /* Affiche nom de la touche */
- /*
- * Demande Changement de page:
- */
- follow_KeyArboLink( pVoie_curr, curr_keypress );
- break;
-
- }
-
- }
-
-