From 7e1e04d7c6a45f79615ee2c592cff2d8d18faf13 Mon Sep 17 00:00:00 2001 From: cyd01 Date: Thu, 2 Apr 2020 23:31:26 +0200 Subject: [PATCH] File extension first commit --- .github/workflows/ccpp.yml | 3 + 0.73_My_PuTTY/config.c | 143 ++++++++++++++++++++++++++------- 0.73_My_PuTTY/ldisc.c | 2 + 0.73_My_PuTTY/windows/windlg.c | 9 ++- 0.73_My_PuTTY/windows/window.c | 2 +- kitty.c | 21 ++++- kitty.h | 3 + kitty_ini.txt | 3 + kitty_registry.c | 10 ++- kitty_registry.h | 4 + kitty_savedump.c | 2 +- 11 files changed, 162 insertions(+), 40 deletions(-) diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 6eec46f..9ab80f7 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -5,6 +5,9 @@ on: # Sequence of patterns matched against refs/heads branches: - master # Push events on master branch + - feat-* + - fix-* + - bugfix* # Sequence of patterns matched against refs/tags tags: - v* diff --git a/0.73_My_PuTTY/config.c b/0.73_My_PuTTY/config.c index afbad6a..10f8f7a 100644 --- a/0.73_My_PuTTY/config.c +++ b/0.73_My_PuTTY/config.c @@ -850,11 +850,11 @@ static bool load_selected_session( char sessionname[1024] ; int j; dlg_listbox_gettext(ctrlSessionList, dlg, i, sessionname, 1024 ) ; - for( j=0; jsesslist.nsessions; j++ ){ + for( j=0; jsesslist.nsessions; j++ ) { if( !strcmp( ssd->sesslist.sessions[j], sessionname ) ) i = j ; - } + } if( (get_param("INIFILE")==2/*SAVEMODE_DIR*/) && GetDirectoryBrowseFlag() - && (sessionname[0]==' ')&&(sessionname[1]=='[')&&(sessionname[strlen(sessionname)-1]==']') ) { + && (sessionname[0]==' ')&&(sessionname[1]=='[')&&(sessionname[strlen(sessionname)-1]==']') ) { // On gère un sous-répertoire sessionname[strlen(sessionname)-1]='\0'; strcpy( CurrentFolder, SetSessPath( sessionname+2 ) ) ; @@ -876,21 +876,42 @@ static bool load_selected_session( return false; } isdef = !strcmp(ssd->sesslist.sessions[i], "Default Settings"); - load_settings(ssd->sesslist.sessions[i], conf); #ifdef MOD_PERSO - if( (get_param("INIFILE")==SAVEMODE_DIR) && GetDirectoryBrowseFlag() ) { + if( (get_param("INIFILE")==SAVEMODE_DIR) && GetDirectoryBrowseFlag() ) { // On charge en mode portable + if( !strcmp(FileExtension,"") ) { + load_settings(ssd->sesslist.sessions[i], conf); + sfree(ssd->savedsession); + ssd->savedsession = dupstr(isdef ? "" : ssd->sesslist.sessions[i]); + } else { + int j; + char sessionname[1024] ; + dlg_listbox_gettext(ctrlSessionList, dlg, i, sessionname, 1024 ) ; + for( j=0; jsesslist.nsessions; j++ ) { + if( !strcmp( ssd->sesslist.sessions[j], sessionname ) ) i = j ; + } + strcat(sessionname,FileExtension); + load_settings(sessionname, conf); + sfree(ssd->savedsession); + sessionname[strlen(sessionname)-strlen(FileExtension)]='\0'; + ssd->savedsession = dupstr(isdef ? "" : sessionname); + } conf_set_str(conf,CONF_folder,CurrentFolder) ; - } else { + } else { // On charge depuis le registre ou alors sans browse directory + load_settings(ssd->sesslist.sessions[i], conf); strcpy( CurrentFolder, "Default" ) ; if( conf_get_str(conf,CONF_folder) ) if( strlen( conf_get_str(conf,CONF_folder) )>0 ) { strcpy( CurrentFolder, conf_get_str(conf,CONF_folder) ) ; StringList_Add( FolderList, conf_get_str(conf,CONF_folder) ) ; - } } -#endif + sfree(ssd->savedsession); + ssd->savedsession = dupstr(isdef ? "" : ssd->sesslist.sessions[i]); + } +#else + load_settings(ssd->sesslist.sessions[i], conf); sfree(ssd->savedsession); ssd->savedsession = dupstr(isdef ? "" : ssd->sesslist.sessions[i]); +#endif if (maybe_launch) *maybe_launch = !isdef; dlg_refresh(NULL, dlg); @@ -904,6 +925,7 @@ static bool load_selected_session( int filter_sessionname( const char * pattern, const char * sessionname, const char * folder, const char * savedsession ) { char buffer[4092] ; int lenpattern = strlen(pattern) ; + const char * searchpattern = savedsession+lenpattern ; while( ((searchpattern[0]==' ')||(searchpattern[0]==' '))&&(searchpattern[0]!='\0') ) searchpattern++ ; if( stristr( savedsession, pattern ) != savedsession ) return 0 ; @@ -973,33 +995,72 @@ static void sessionsaver_handler(union control *ctrl, dlgparam *dlg, for (i = 0; i < ssd->sesslist.nsessions; i++) { char folder[1024] ; strcpy( folder, "" ) ; - if( (get_param("INIFILE")==SAVEMODE_REG) || ((get_param("INIFILE")==SAVEMODE_DIR) && !GetDirectoryBrowseFlag()) ) { + if( (get_param("INIFILE")==SAVEMODE_REG) || ((get_param("INIFILE")==SAVEMODE_DIR) && !GetDirectoryBrowseFlag()) ) { // Registry mode GetSessionFolderName( ssd->sesslist.sessions[i], folder ) ; - } - if( GetPuttyFlag() ) + } + if( GetPuttyFlag() ) { // In PuTTY mode => all sessions dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); - else if( (get_param("INIFILE")==SAVEMODE_DIR) && GetDirectoryBrowseFlag() ) { + } + else if( (get_param("INIFILE")==SAVEMODE_DIR) && GetDirectoryBrowseFlag() ) { // In portable mode CleanFolderName( folder ) ; - if (!strcmp( ssd->savedsession, "" )) { + if( !strcmp( ssd->savedsession, "" ) ) { // If nothing in session name field if( (!strcmp(CurrentFolder,folder)) || (!strcmp("",folder)) || ( strstr(ssd->sesslist.sessions[i]," [")==ssd->sesslist.sessions[i] ) - ) - dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); - } - else { - if( (!strcmp(CurrentFolder,folder))||(!strcmp("",folder)) ) { - if( !GetSessionFilterFlag() ) // filtre desactive + ) { + if ( !strcmp(ssd->sesslist.sessions[i]," [..]") ) { dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); - else if( (stristr(ssd->sesslist.sessions[i],ssd->savedsession)!=NULL) - || ( strstr(ssd->sesslist.sessions[i]," [")==ssd->sesslist.sessions[i] ) ) + } else if( !strcmp(FileExtension,"") // No file extension defined + && !(strstr(ssd->sesslist.sessions[i]," [.")==ssd->sesslist.sessions[i]) + ) { dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); + } else if( strcmp(FileExtension,"") // if file extention defined + && ( + !strcmp(FileExtension,ssd->sesslist.sessions[i]+strlen(ssd->sesslist.sessions[i])-strlen(FileExtension)) + ||( (strstr(ssd->sesslist.sessions[i]," [")==ssd->sesslist.sessions[i]) && !(strstr(ssd->sesslist.sessions[i]," [.")==ssd->sesslist.sessions[i]) ) + ) + ) { + char *n=(char*)malloc(strlen(ssd->sesslist.sessions[i])+1); + strcpy(n,ssd->sesslist.sessions[i]); + if( (n[0]!=' ') || (n[1]!='[') ) + n[strlen(n)-strlen(FileExtension)]='\0'; // On essaie de supprimer l'affichage de l'extention + dlg_listbox_add(ctrl, dlg, n); + free(n); } } + } else { // If something in session name field + if( (!strcmp(CurrentFolder,folder))||(!strcmp("",folder)) ) { + if( !GetSessionFilterFlag() ) // No filter + dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); + else if( (stristr(ssd->sesslist.sessions[i],ssd->savedsession)!=NULL) + || ( strstr(ssd->sesslist.sessions[i]," [")==ssd->sesslist.sessions[i] ) ) { + if ( !strcmp(ssd->sesslist.sessions[i]," [..]") ) { + dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); + } else if( !strcmp(FileExtension,"") // No file extension defined + && !(strstr(ssd->sesslist.sessions[i]," [.")==ssd->sesslist.sessions[i]) + ) { + dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); + } else if( strcmp(FileExtension,"") // if file extention defined + && ( + !strcmp(FileExtension,ssd->sesslist.sessions[i]+strlen(ssd->sesslist.sessions[i])-strlen(FileExtension)) + ||( (strstr(ssd->sesslist.sessions[i]," [")==ssd->sesslist.sessions[i]) && !(strstr(ssd->sesslist.sessions[i]," [.")==ssd->sesslist.sessions[i]) ) + ) + ) { + char *n=(char*)malloc(strlen(ssd->sesslist.sessions[i])+1); + strcpy(n,ssd->sesslist.sessions[i]); + if( (n[0]!=' ') || (n[1]!='[') ) + n[strlen(n)-strlen(FileExtension)]='\0'; // On essaie de supprimer l'affichage de l'extention + dlg_listbox_add(ctrl, dlg, n); + free(n); + } + + } + } } - else if( !GetSessionFilterFlag() ) // filtre desactive + } + else if( !GetSessionFilterFlag() ) // In registry mode without filter => all sessions dlg_listbox_add(ctrl, dlg, ssd->sesslist.sessions[i]); - else { + else { // In registry mode with filter if( (!strcmp(CurrentFolder, "Default" )&&GetSessionsInDefaultFlag()) || (!strcmp(CurrentFolder,folder)) ) { if( (!strcmp( ssd->savedsession, "" )) @@ -1106,7 +1167,11 @@ static void sessionsaver_handler(union control *ctrl, dlgparam *dlg, conf_set_str( conf, CONF_password, buffer ) ; memset( buffer, 0, strlen(buffer) ) ; } - char *errmsg = save_settings(ssd->savedsession, conf); + char sessionname[1024]; + strcpy(sessionname,ssd->savedsession); + if( strcmp(FileExtension,"") ) { strcat(sessionname,FileExtension); } + char *errmsg = save_settings(sessionname, conf); + if( conf_get_int(conf, CONF_protocol) != PROT_SERIAL ) { char buffer[1024] ; strcpy( buffer, conf_get_str( conf, CONF_password) ) ; @@ -1133,19 +1198,26 @@ static void sessionsaver_handler(union control *ctrl, dlgparam *dlg, ssd->delbutton && ctrl == ssd->delbutton) { int i = dlg_listbox_index(ssd->listbox, dlg); #ifdef MOD_PERSO - { // Pour recuperer le bon index de la session a supprimer quand il y le filtre des sessions + // Pour recuperer le bon index de la session a supprimer quand il y le filtre des sessions char sessionname[1024] ; int j; dlg_listbox_gettext(ctrlSessionList, dlg, i, sessionname, 1024 ) ; for( j=0; jsesslist.nsessions; j++ ){ if( !strcmp( ssd->sesslist.sessions[j], sessionname ) ) i = j ; - } } -#endif + + if (i <= 0) { + dlg_beep(dlg); + } else { + if( strcmp(FileExtension,"") ) { strcat(sessionname,FileExtension) ; } + del_settings(sessionname); +#else if (i <= 0) { dlg_beep(dlg); } else { del_settings(ssd->sesslist.sessions[i]); + +#endif get_sesslist(&ssd->sesslist, false); get_sesslist(&ssd->sesslist, true); dlg_refresh(ssd->listbox, dlg); @@ -1211,10 +1283,13 @@ static void sessionsaver_handler(union control *ctrl, dlgparam *dlg, #ifdef MOD_PERSO #if (defined MOD_PERSO) && (!defined FDJ) && (defined MOD_STARTBUTTON) else if (ctrl == ssd->startbutton) { + char sessionname[1024]; if( conf_launchable(conf) ) { RunConfig(conf) ; } else if( (strlen(ssd->savedsession)>0) && isSessionExist(ssd,ssd->savedsession) ) { - if( !RunSession( hwnd, CurrentFolder, ssd->savedsession ) ) { dlg_beep(dlg) ; } + strcpy( sessionname, ssd->savedsession ) ; + if( strcmp(FileExtension,"") ) { strcat(sessionname,FileExtension); } + if( !RunSession( hwnd, CurrentFolder, sessionname ) ) { dlg_beep(dlg) ; } } else if( dlg_last_focused(ctrl, dlg) == ssd->listbox ) { Conf *conf2 = conf_new() ; bool mbl = false; @@ -1228,8 +1303,11 @@ static void sessionsaver_handler(union control *ctrl, dlgparam *dlg, } else dlg_beep(dlg); - if (conf_launchable(conf)) { RunSession( hwnd, CurrentFolder, ssd->savedsession ) ; } - strcpy(ssd->savedsession,oldsavedsession); free(oldsavedsession); + strcpy( sessionname, ssd->savedsession ) ; + if( strcmp(FileExtension,"") ) { strcat(sessionname,FileExtension); } + if (conf_launchable(conf)) { RunSession( hwnd, CurrentFolder, sessionname ) ; } + strcpy(ssd->savedsession,oldsavedsession); + free(oldsavedsession); conf_free(conf2); } else { dlg_beep(dlg) ; } @@ -1240,7 +1318,10 @@ static void sessionsaver_handler(union control *ctrl, dlgparam *dlg, ssd->clearbutton && ctrl == ssd->clearbutton) { SetInitCurrentFolder( "Default" ); folder_handler( ctrlFolderList, dlg, data, EVENT_REFRESH ) ; - do_defaults("Default Settings", conf) ; + char sessionname[1024]; + strcpy(sessionname,"Default Settings"); + if( strcmp(FileExtension,"") ) { strcat(sessionname,FileExtension); } + do_defaults(sessionname, conf) ; conf_set_str(conf,CONF_host,""); dlg_editbox_set(ctrlHostnameEdit, dlg,""); if( strlen(ssd->savedsession) > 0 ) { diff --git a/0.73_My_PuTTY/ldisc.c b/0.73_My_PuTTY/ldisc.c index 4c74b45..1409dd2 100644 --- a/0.73_My_PuTTY/ldisc.c +++ b/0.73_My_PuTTY/ldisc.c @@ -157,7 +157,9 @@ void ldisc_send(Ldisc *ldisc, const void *vbuf, int len, bool interactive) int keyflag = 0; assert(ldisc->term); +#ifndef MOD_PERSO assert(len); +#endif /* rutty: */ #ifdef MOD_RUTTY diff --git a/0.73_My_PuTTY/windows/windlg.c b/0.73_My_PuTTY/windows/windlg.c index 3fa176a..f392a90 100644 --- a/0.73_My_PuTTY/windows/windlg.c +++ b/0.73_My_PuTTY/windows/windlg.c @@ -1008,7 +1008,14 @@ bool do_config(void) if( GetDefaultSettingsFlag() ) { char buffer[1024] ; GetSessionFolderName( "Default Settings", buffer ) ; - if( strlen( buffer ) == 0 ) { save_settings( "Default Settings", conf ) ; } + if( strlen( buffer ) == 0 ) { + if( !strcmp(FileExtension,"") ) { + save_settings( "Default Settings", conf ) ; + } else { + sprintf(buffer,"Default Settings%s", FileExtension); + save_settings( buffer, conf ) ; + } + } } #endif ctrlbox = ctrl_new_box(); diff --git a/0.73_My_PuTTY/windows/window.c b/0.73_My_PuTTY/windows/window.c index dd82063..e6a0ed8 100644 --- a/0.73_My_PuTTY/windows/window.c +++ b/0.73_My_PuTTY/windows/window.c @@ -661,7 +661,7 @@ static void close_session(void *ignored_context) void RestartSession( void ) { win_seat_connection_fatal( win_seat, "User request session restart..." ) ; PostMessage(hwnd,WM_KEYDOWN,VK_RETURN ,0) ; - is_backend_first_connected = 0 ; + //is_backend_first_connected = 0 ; PostMessage(hwnd,WM_KEYUP,VK_RETURN ,1) ; } #endif diff --git a/kitty.c b/kitty.c index 46cb29d..4530890 100644 --- a/kitty.c +++ b/kitty.c @@ -350,7 +350,10 @@ char PSCPOptions[1024] = "-scp -r" ; char * PlinkPath = NULL ; // Repertoire de lancement -char InitialDirectory[4096]="" ; +char InitialDirectory[4096]="" ; + +// Extention pour les fichiers de session en mode portable (peut être ktx) +char FileExtension[15] = "" ; // Chemin complet des fichiers de configuration kitty.ini et kitty.sav static char * KittyIniFile = NULL ; @@ -3478,7 +3481,14 @@ int ShowPortfwd( HWND hwnd, Conf * conf ) { void SaveCurrentSetting( HWND hwnd ) { char filename[4096], buffer[4096] ; - strcpy( buffer, "Connection files (*.ktx)|*.ktx|All files (*.*)|*.*|" ) ; + if( strlen(FileExtension)>0 ) { + strcpy( buffer, "Connection files (*" ) ; + strcat( buffer, FileExtension ) ; strcat( buffer, ")|*" ) ; + strcat( buffer, FileExtension ) ; strcat( buffer, "|" ) ; + } else { + strcpy( buffer, "Connection files (*.ktx)|*.ktx|" ) ; + } + strcat( buffer, "All files (*.*)|*.*|" ) ; if( buffer[strlen(buffer)-1]!='|' ) strcat( buffer, "|" ) ; if( SaveFileName( hwnd, filename, "Save file...", buffer ) ) { save_open_settings_forced( filename, conf ) ; @@ -5101,6 +5111,13 @@ void LoadParameters( void ) { internal_delay = atoi( buffer ) ; if( internal_delay < 1 ) internal_delay = 1 ; } + if( ReadParameter( INIT_SECTION, "fileextension", buffer ) ) { + if( strlen(buffer) > 0 ) { + if( buffer[0] != '.' ) { strcpy( FileExtension, "." ) ; } else { strcpy( FileExtension, "" ) ; } + strcat( FileExtension, buffer ) ; + while( FileExtension[strlen(FileExtension)-1]==' ' ) { FileExtension[strlen(FileExtension)-1] = '\0' ; } + } + } if( ReadParameter( INIT_SECTION, "KiPP", buffer ) != 0 ) { if( decryptstring( buffer, MASTER_PASSWORD ) ) ManagePassPhrase( buffer ) ; } diff --git a/kitty.h b/kitty.h index 46527da..f6e32a0 100644 --- a/kitty.h +++ b/kitty.h @@ -220,6 +220,9 @@ extern char PSCPOptions[] ; // Repertoire de lancement extern char InitialDirectory[4096] ; +// Extention pour les fichiers de session en mode portable (peut être ktx) +extern char FileExtension[15] ; + // Répertoire de sauvegarde de la configuration (savemode=dir) extern char * ConfigDirectory ; diff --git a/kitty_ini.txt b/kitty_ini.txt index 8d9a1db..c207fbf 100644 --- a/kitty_ini.txt +++ b/kitty_ini.txt @@ -86,6 +86,9 @@ cygterm=no ; downloaddir: this is the local directory where files are downloaded with the pscp integration ;downloaddir= +; fileextension: the extension for session settings files in portable mode +;fileextension= + ; hyperlink: enable/disable the hyperlink feature hyperlink=yes diff --git a/kitty_registry.c b/kitty_registry.c index 5f76694..1ad8170 100644 --- a/kitty_registry.c +++ b/kitty_registry.c @@ -605,6 +605,8 @@ void CreateSSHHandler() { // Creation de l'association de fichiers *.ktx void CreateFileAssoc() { char path[1024], buffer[1024] ; + char ext[15] ; + if( strlen( FileExtension ) > 0 ) { strcpy( ext, FileExtension ) ; } else { strcpy( ext, ".ktx") ; } GetModuleFileName( NULL, (LPTSTR)path, 1024 ) ; @@ -618,10 +620,10 @@ void CreateFileAssoc() { sprintf(buffer, "\"%s\" -kload \"%%1\"", path ) ; RegTestOrCreate( HKEY_CLASSES_ROOT, "kitty.connect.1\\shell\\open\\command", "", buffer) ; // Création de l'association de fichiers - RegTestOrCreate( HKEY_CLASSES_ROOT, ".ktx", "", "kitty.connect.1") ; - RegTestOrCreate( HKEY_CLASSES_ROOT, ".ktx", "PerceivedType", "Connection") ; - RegTestOrCreate( HKEY_CLASSES_ROOT, ".ktx", "Content Type", "connection/ssh") ; - RegTestOrCreate( HKEY_CLASSES_ROOT, ".ktx", "OpenWithProgids", "kitty.connect.1") ; + RegTestOrCreate( HKEY_CLASSES_ROOT, ext, "", "kitty.connect.1") ; + RegTestOrCreate( HKEY_CLASSES_ROOT, ext, "PerceivedType", "Connection") ; + RegTestOrCreate( HKEY_CLASSES_ROOT, ext, "Content Type", "connection/ssh") ; + RegTestOrCreate( HKEY_CLASSES_ROOT, ext, "OpenWithProgids", "kitty.connect.1") ; } // Check for KiTTY registry key. If not, copy from PuTTY one diff --git a/kitty_registry.h b/kitty_registry.h index 250076d..cce13ee 100644 --- a/kitty_registry.h +++ b/kitty_registry.h @@ -12,8 +12,12 @@ #define MAX_VALUE_NAME 16383 #endif + + char * GetValueData(HKEY hkTopKey, char * lpSubKey, const char * lpValueName, char * rValue) ; +// Extention pour les fichiers de session en mode portable (peut être ktx) +extern char FileExtension[15] ; // Teste l'existance d'une clé int RegTestKey( HKEY hMainKey, LPCTSTR lpSubKey ) ; diff --git a/kitty_savedump.c b/kitty_savedump.c index 7838665..d005ee3 100644 --- a/kitty_savedump.c +++ b/kitty_savedump.c @@ -638,7 +638,7 @@ void SaveDumpConfig( FILE *fp, Conf * conf ) { ,SessionFilterFlag,SessionsInDefaultFlag,DefaultSettingsFlag,ImageViewerFlag,ImageSlideDelay,MaxBlinkingTime,PrintCharSize,PrintMaxLinePerPage,PrintMaxCharPerLine,GetReadOnlyFlag(),GetScrumbleKeyFlag()); fprintf( fp, "AntiIdleCount=%d\nAntiIdleCountMax=%d\nIconeNum=%d\n" ,AntiIdleCount,AntiIdleCountMax,IconeNum); - fprintf( fp, "AntiIdleStr=%s\nInitialDirectory=%s\nConfigDirectory=%s\nBuildVersionTime=%s\n",AntiIdleStr,InitialDirectory,ConfigDirectory,BuildVersionTime); + fprintf( fp, "AntiIdleStr=%s\nInitialDirectory=%s\nFileExtension=%s\nConfigDirectory=%s\nBuildVersionTime=%s\n",AntiIdleStr,InitialDirectory,FileExtension,ConfigDirectory,BuildVersionTime); if( WinSCPPath!= NULL ) fprintf( fp, "WinSCPPath=%s\n", WinSCPPath ) ; if( PSCPPath!= NULL ) fprintf( fp, "PSCPPath=%s\n", PSCPPath ) ; if( PlinkPath!= NULL ) fprintf( fp, "PlinkPath=%s\n", PlinkPath ) ;