/[winpt]/trunk/Src/wptMDSumDlg.cpp
ViewVC logotype

Diff of /trunk/Src/wptMDSumDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 22 by twoaday, Wed Aug 10 11:33:35 2005 UTC revision 205 by twoaday, Thu Apr 27 12:46:03 2006 UTC
# Line 1  Line 1 
1  /* wptMDSumDlg.cpp  /* wptMDSumDlg.cpp
2   *      Copyright (C) 2003, 2005 Timo Schulz   *      Copyright (C) 2003, 2005, 2006 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
6   * WinPT is free software; you can redistribute it and/or modify   * WinPT is free software; you can redistribute it and/or modify
7   * it under the terms of the GNU General Public License as published by   * it under the terms of the GNU General Public License as published by
8   * the Free Software Foundation; either version 2 of the License, or   * the Free Software Foundation; either version 2 of the License, or
9   * (at your option) any later version.   * (at your option) any later version.
10   *   *
11   * WinPT is distributed in the hope that it will be useful,   * WinPT is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.   * GNU General Public License for more details.
15   *   *
16   * You should have received a copy of the GNU General Public License   * You should have received a copy of the GNU General Public License
17   * along with WinPT; if not, write to the Free Software Foundation,   * along with WinPT; if not, write to the Free Software Foundation,
18   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19   */   */
20    #ifdef HAVE_CONFIG_H
21    #include <config.h>
22  #include <windows.h>  #endif
23  #include <stdio.h>  
24  #include "../resource.h"  #include <windows.h>
25    #include <stdio.h>
26  #include "wptTypes.h"  
27  #include "wptW32API.h"  #include "resource.h"
28  #include "wptGPG.h"  #include "wptTypes.h"
29  #include "wptCommonCtl.h"  #include "wptW32API.h"
30  #include "wptContext.h"  #include "wptGPG.h"
31  #include "wptNLS.h"  #include "wptCommonCtl.h"
32  #include "wptErrors.h"  #include "wptContext.h"
33    #include "wptNLS.h"
34    #include "wptErrors.h"
35  static const char *  
36  printable_digest( byte *mdbuf, size_t n )  
37  {  /* Return a printable digest of the buffer @mdbuf. */
38      static char mdasc[64];  static const char*
39      size_t i;  printable_digest (byte *mdbuf, size_t n)
40      for( i = 0; i < n; i++ )  {
41          sprintf( mdasc+2*i, "%02X", mdbuf[i] );      static char mdasc[128];
42      return mdasc;      size_t i;
43  } /* printable_digest */  
44        for (i = 0; i < n; i++)
45            sprintf (mdasc+2*i, "%02X", mdbuf[i]);
46  BOOL CALLBACK      return mdasc;
47  mdsum_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  }
48  {  
49      static listview_ctrl_t lv;  
50      static struct md_file_s * md;  static const char*
51      struct listview_column_s cols[] = {  id2algo (gpgme_hash_algo_t mdalgo)
52          {0, 264, (char *)_("Digest")},  {
53          {1, 128, (char *)_("Name")},      switch (mdalgo) {
54          {0, 0, 0}      case GPGME_MD_MD5:      return "MD5";
55      };      case GPGME_MD_SHA1:     return "SHA1";
56      gpgme_data_t sumlist;      case GPGME_MD_RMD160:   return "RMD160";
57      char fname[300], mdasc[64];      case GPGME_MD_SHA256:   return "SHA256";
58      byte mdbuf[20];      default: return "";
59      int i;      }
60      size_t n;      return "";
61    }
62      switch( msg ) {  
63      case WM_INITDIALOG:  
64          md = (md_file_s *)lparam;  /* Hash the selected file from the FM listview control in @md.
65          if( !md )     Add the results to the listview @lv. */
66              BUG( NULL );          static void
67          if( listview_new( &lv ) )  hash_selected_files (md_file_s *md, listview_ctrl_t lv)
68              BUG( NULL );  {
69          lv->ctrl = GetDlgItem( dlg, IDC_MDSUM_LIST );      BYTE mdbuf[32];
70          for( i = 0; i < cols[i].width; i++ )      char fname[256+1];
71              listview_add_column( lv, &cols[i] );      int i;
72          for( i = 0; i < listview_count_items( md->lv, 0 ); i++ ) {      size_t n;
73              if( listview_get_item_state( md->lv, i ) ) {  
74                  listview_get_item_text( md->lv, i, 1, fname, sizeof fname-1 );      for (i = 0; i < listview_count_items( md->lv, 0 ); i++) {
75                  if( !gpg_md_hash_file( md->mdalgo, fname, mdbuf, &n ) ) {          if( listview_get_item_state (md->lv, i)) {
76                      listview_add_item( lv, "" );              listview_get_item_text (md->lv, i, 1, fname, sizeof (fname)-1);
77                      listview_add_sub_item( lv, 0, 0, printable_digest( mdbuf, n ) );              if (!gpg_md_hash_file (md->mdalgo, fname, mdbuf, &n)) {
78                      listview_add_sub_item( lv, 0, 1, fname );                  listview_add_item (lv, "");
79                  }                  listview_add_sub_item (lv, 0, 0, printable_digest (mdbuf, n));
80              }                  listview_add_sub_item (lv, 0, 1, fname);        
81          }              }  
82          SetForegroundWindow( dlg );          }      
83          break;      }
84    }
85      case WM_DESTROY:  
86          if( lv ) {  
87              listview_release( lv );  static int
88              lv = NULL;  tool_avail (gpgme_hash_algo_t mdalgo)
89          }  {
90          break;      if (mdalgo == GPGME_MD_SHA1 || mdalgo == GPGME_MD_MD5)
91            return 1;
92      case WM_COMMAND:      return 0;
93          switch( LOWORD( wparam ) ) {  }
94          case IDOK:  
95              EndDialog( dlg, TRUE );  
96              break;  /* Dialog box procedure to show and calculate file digests. */
97    BOOL CALLBACK
98          case IDC_MDSUM_COPY:  mdsum_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
99              if (gpgme_data_new (&sumlist))  {
100                  BUG(0);      static listview_ctrl_t lv;
101              if (md->mdalgo == 3) {/* rmd160 */      static struct md_file_s *md;
102                  const char *s = "# warning rmd160sum is not yet available\r\n";      struct listview_column_s cols[] = {
103                  gpgme_data_write (sumlist, s, strlen (s));          {0, 264, (char *)_("Digest")},
104              }          {1, 128, (char *)_("Name")},
105              for (i = 0; i < listview_count_items (lv, 0); i++) {          {0, 0, 0}
106                  listview_get_item_text (lv, i, 0, mdasc, DIM (mdasc)-1);      };
107                  listview_get_item_text (lv, i, 1, fname, DIM (fname)-1);      gpgme_data_t sumlist;
108                        const char *name, *algname;
109                  gpgme_data_write (sumlist, mdasc, strlen (mdasc));      char fname[300], mdasc[128];
110                  gpgme_data_write (sumlist, " ", 1);      int i;
111                  gpgme_data_write (sumlist, fname, strlen (fname));  
112                  gpgme_data_write (sumlist, "\r\n", 2);      switch( msg ) {
113              }      case WM_INITDIALOG:
114              const char *name = get_filename_dlg (dlg, 1, _("Select file to save checksums"), NULL, NULL);          md = (md_file_s *)lparam;
115              if (name && *name) {          if (!md)
116                  gpgme_data_release_and_set_file (sumlist, name);              BUG (NULL);
117                  log_box (_("File Manager"), MB_OK, "Checksums successfully saved in %s", name);          if( listview_new (&lv))
118              }              BUG (NULL);
119              else          lv->ctrl = GetDlgItem (dlg, IDC_MDSUM_LIST);
120                  gpgme_data_release (sumlist);          for (i = 0; i < cols[i].width; i++)
121              break;              listview_add_column( lv, &cols[i]);
122          }          hash_selected_files (md, lv);
123          break;          SetDlgItemText (dlg, IDC_MDSUM_COPY, _("&Save..."));
124      }          SetDlgItemText (dlg, IDOK, _("&Close"));
125      return FALSE;          SetDlgItemText (dlg, IDC_MDSUM_TOCLIP, _("Save to clipboard"));
126  } /* mdsum_dlg_proc */          SetWindowText (dlg, _("Print Message Digest"));
127            SetForegroundWindow (dlg);
128            break;
129    
130        case WM_SYSCOMMAND:
131            if (wparam == SC_CLOSE)
132                EndDialog (dlg, TRUE);
133            return TRUE;
134    
135        case WM_DESTROY:
136            if (lv) {
137                listview_release (lv);
138                lv = NULL;
139            }
140            break;
141    
142        case WM_COMMAND:
143            switch (LOWORD (wparam)) {
144            case IDOK:
145                EndDialog (dlg, TRUE);
146                break;
147    
148            case IDCANCEL:
149                EndDialog (dlg, FALSE);
150                break;
151    
152            case IDC_MDSUM_COPY:
153                algname = id2algo ((gpgme_hash_algo_t)md->mdalgo);
154                if (gpgme_data_new (&sumlist))
155                    BUG(0);
156                if (!tool_avail ((gpgme_hash_algo_t)md->mdalgo)) {
157                    const char *s;
158    
159                    s = "#warning '";
160                    gpgme_data_write (sumlist, s, strlen (s));
161                    gpgme_data_write (sumlist, algname, strlen (algname));
162                    s = " ' sum is not yet available\r\n";
163                    gpgme_data_write (sumlist, s, strlen (s));
164                }
165                for (i = 0; i < listview_count_items (lv, 0); i++) {
166                    listview_get_item_text (lv, i, 0, mdasc, DIM (mdasc)-1);
167                    listview_get_item_text (lv, i, 1, fname, DIM (fname)-1);
168                    
169                    gpgme_data_write (sumlist, mdasc, strlen (mdasc));
170                    gpgme_data_write (sumlist, " ", 1);
171                    gpgme_data_write (sumlist, fname, strlen (fname));
172                    gpgme_data_write (sumlist, "\r\n", 2);
173                }
174                if (IsDlgButtonChecked (dlg, IDC_MDSUM_TOCLIP)) {
175                    gpg_data_release_and_set_clipboard (sumlist, 0);
176                    break;
177                }
178                _snprintf (fname, sizeof (fname)-1, "%s_sums.txt", algname);
179                name = get_filesave_dlg (dlg, _("Select file to save checksums"),
180                                         NULL, fname);
181                if (name && *name) {
182                    gpg_data_release_and_set_file (sumlist, name);
183                    log_box (_("File Manager"), MB_OK,
184                             _("Checksums successfully saved in '%s'"), name);
185                }
186                else
187                    gpgme_data_release (sumlist);
188                break;
189            }
190            break;
191        }
192        return FALSE;
193    }

Legend:
Removed from v.22  
changed lines
  Added in v.205

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26