/[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 130 by twoaday, Fri Dec 30 14:06:39 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   *   *
# Line 38  Line 38 
38  static const char*  static const char*
39  printable_digest (byte *mdbuf, size_t n)  printable_digest (byte *mdbuf, size_t n)
40  {  {
41      static char mdasc[64];      static char mdasc[128];
42      size_t i;      size_t i;
43    
44      for (i = 0; i < n; i++)      for (i = 0; i < n; i++)
45          sprintf (mdasc+2*i, "%02X", mdbuf[i]);          sprintf (mdasc+2*i, "%02X", mdbuf[i]);
46      return mdasc;      return mdasc;
# Line 47  printable_digest (byte *mdbuf, size_t n) Line 48  printable_digest (byte *mdbuf, size_t n)
48    
49    
50  static const char*  static const char*
51  id2algo (int mdalgo)  id2algo (gpgme_hash_algo_t mdalgo)
52  {  {
53      gpgme_hash_algo_t md = (gpgme_hash_algo_t)mdalgo;      switch (mdalgo) {
   
     switch (md) {  
54      case GPGME_MD_MD5:      return "MD5";      case GPGME_MD_MD5:      return "MD5";
55      case GPGME_MD_SHA1:     return "SHA1";      case GPGME_MD_SHA1:     return "SHA1";
56      case GPGME_MD_RMD160:   return "RMD160";      case GPGME_MD_RMD160:   return "RMD160";
57      case GPGME_MD_SHA256:   return "SHA256";      case GPGME_MD_SHA256:   return "SHA256";
58        default: return "";
59      }      }
60      return "";      return "";
61  }  }
62    
63    
64    /* Hash the selected file from the FM listview control in @md.
65       Add the results to the listview @lv. */
66    static void
67    hash_selected_files (md_file_s *md, listview_ctrl_t lv)
68    {
69        BYTE mdbuf[32];
70        char fname[256+1];
71        int i;
72        size_t n;
73    
74        for (i = 0; i < listview_count_items( md->lv, 0 ); i++) {
75            if( listview_get_item_state (md->lv, i)) {
76                listview_get_item_text (md->lv, i, 1, fname, sizeof (fname)-1);
77                if (!gpg_md_hash_file (md->mdalgo, fname, mdbuf, &n)) {
78                    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            }      
83        }
84    }
85    
86    
87    static int
88    tool_avail (gpgme_hash_algo_t mdalgo)
89    {
90        if (mdalgo == GPGME_MD_SHA1 || mdalgo == GPGME_MD_MD5)
91            return 1;
92        return 0;
93    }
94    
95    
96  /* Dialog box procedure to show and calculate file digests. */  /* Dialog box procedure to show and calculate file digests. */
97  BOOL CALLBACK  BOOL CALLBACK
98  mdsum_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  mdsum_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
99  {  {
100      static listview_ctrl_t lv;      static listview_ctrl_t lv;
101      static struct md_file_s * md;      static struct md_file_s *md;
102      struct listview_column_s cols[] = {      struct listview_column_s cols[] = {
103          {0, 264, (char *)_("Digest")},          {0, 264, (char *)_("Digest")},
104          {1, 128, (char *)_("Name")},          {1, 128, (char *)_("Name")},
105          {0, 0, 0}          {0, 0, 0}
106      };      };
107      gpgme_data_t sumlist;      gpgme_data_t sumlist;
108      const char *name;      const char *name, *algname;
109      char fname[300], mdasc[64];      char fname[300], mdasc[128];
     byte mdbuf[20];  
110      int i;      int i;
     size_t n;  
111    
112      switch( msg ) {      switch( msg ) {
113      case WM_INITDIALOG:      case WM_INITDIALOG:
114          md = (md_file_s *)lparam;          md = (md_file_s *)lparam;
115          if( !md )          if (!md)
116              BUG( NULL );                      BUG (NULL);
117          if( listview_new( &lv ) )          if( listview_new (&lv))
118              BUG( NULL );              BUG (NULL);
119          lv->ctrl = GetDlgItem( dlg, IDC_MDSUM_LIST );          lv->ctrl = GetDlgItem (dlg, IDC_MDSUM_LIST);
120          for( i = 0; i < cols[i].width; i++ )          for (i = 0; i < cols[i].width; i++)
121              listview_add_column( lv, &cols[i] );              listview_add_column( lv, &cols[i]);
122          for( i = 0; i < listview_count_items( md->lv, 0 ); i++ ) {          hash_selected_files (md, lv);
             if( listview_get_item_state( md->lv, i ) ) {  
                 listview_get_item_text( md->lv, i, 1, fname, sizeof (fname)-1 );  
                 if( !gpg_md_hash_file( md->mdalgo, fname, mdbuf, &n ) ) {  
                     listview_add_item( lv, "" );  
                     listview_add_sub_item( lv, 0, 0, printable_digest( mdbuf, n ) );  
                     listview_add_sub_item( lv, 0, 1, fname );  
                 }  
             }  
         }  
123          SetDlgItemText (dlg, IDC_MDSUM_COPY, _("&Save..."));          SetDlgItemText (dlg, IDC_MDSUM_COPY, _("&Save..."));
124          SetDlgItemText (dlg, IDOK, _("&Close"));          SetDlgItemText (dlg, IDOK, _("&Close"));
125            SetDlgItemText (dlg, IDC_MDSUM_TOCLIP, _("Save to clipboard"));
126          SetWindowText (dlg, _("Print Message Digest"));          SetWindowText (dlg, _("Print Message Digest"));
127          SetForegroundWindow (dlg);          SetForegroundWindow (dlg);
128          break;          break;
# Line 111  mdsum_dlg_proc (HWND dlg, UINT msg, WPAR Line 133  mdsum_dlg_proc (HWND dlg, UINT msg, WPAR
133          return TRUE;          return TRUE;
134    
135      case WM_DESTROY:      case WM_DESTROY:
136          if( lv ) {          if (lv) {
137              listview_release( lv );              listview_release (lv);
138              lv = NULL;              lv = NULL;
139          }          }
140          break;          break;
# Line 123  mdsum_dlg_proc (HWND dlg, UINT msg, WPAR Line 145  mdsum_dlg_proc (HWND dlg, UINT msg, WPAR
145              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
146              break;              break;
147    
148            case IDCANCEL:
149                EndDialog (dlg, FALSE);
150                break;
151    
152          case IDC_MDSUM_COPY:          case IDC_MDSUM_COPY:
153                algname = id2algo ((gpgme_hash_algo_t)md->mdalgo);
154              if (gpgme_data_new (&sumlist))              if (gpgme_data_new (&sumlist))
155                  BUG(0);                  BUG(0);
156              if (md->mdalgo == (int)GPGME_MD_RMD160) {              if (!tool_avail ((gpgme_hash_algo_t)md->mdalgo)) {
157                  const char *s = "# warning rmd160sum is not yet available\r\n";                  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));                  gpgme_data_write (sumlist, s, strlen (s));
164              }              }
165              for (i = 0; i < listview_count_items (lv, 0); i++) {              for (i = 0; i < listview_count_items (lv, 0); i++) {
# Line 139  mdsum_dlg_proc (HWND dlg, UINT msg, WPAR Line 171  mdsum_dlg_proc (HWND dlg, UINT msg, WPAR
171                  gpgme_data_write (sumlist, fname, strlen (fname));                  gpgme_data_write (sumlist, fname, strlen (fname));
172                  gpgme_data_write (sumlist, "\r\n", 2);                  gpgme_data_write (sumlist, "\r\n", 2);
173              }              }
174              _snprintf (fname, sizeof (fname)-1, "%s_sums.txt", id2algo (md->mdalgo));              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"),              name = get_filesave_dlg (dlg, _("Select file to save checksums"),
180                                       NULL, fname);                                       NULL, fname);
181              if (name && *name) {              if (name && *name) {

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26