Stringscan

Check-in [6e8bb72429]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:More tweaks
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256:6e8bb724293cbf1596a0e6e1ff6bd53b6e6fc9fd1bad6d25855a4f8fe9c0a34d
User & Date: kevin 2019-11-29 02:22:58
Context
2019-12-02
00:23
Add image check-in: 8a51ba2769 user: kevin tags: trunk
2019-11-29
02:22
More tweaks check-in: 6e8bb72429 user: kevin tags: trunk
2018-06-05
04:39
Tweak for bgerror, software update check-in: 3db5b85264 user: kevin tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to buildapp.

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162

hdiutil create  -srcfolder build -fs HFS+ -volname Stringscan Stringscan.dmg

codesign  --signature-size 9400 -f -s "Developer ID Application: Kevin Walzer" --verbose=2  Stringscan.dmg

echo "Uploading DMG..."

#upload Stringscan.dmg updates

#upload stringscan-changes.tcl

#upload stringscan-version.tcl

cd ../

#create archive of entire source tree
tar cvfz Stringscan-$1.tgz Stringscan


echo "Done."










|

|

|











140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162

hdiutil create  -srcfolder build -fs HFS+ -volname Stringscan Stringscan.dmg

codesign  --signature-size 9400 -f -s "Developer ID Application: Kevin Walzer" --verbose=2  Stringscan.dmg

echo "Uploading DMG..."

upload Stringscan.dmg updates

upload stringscan-changes.tcl

upload stringscan-version.tcl

cd ../

#create archive of entire source tree
tar cvfz Stringscan-$1.tgz Stringscan


echo "Done."



Added scriptlibs/darkaqua/darkaqua.tcl.





















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#MIT license



package provide darkaqua 1.0

namespace eval darkaqua {
    
    proc changeImagesDark {} {
	
	foreach item [image names]  {
	    if {[image type $item] eq "bitmap"} {
		$item configure -foreground white
	    }
	}
    }
    
    proc changeImagesLight {} {
	
	foreach item [image names]  {
	    if {[image type $item] eq "bitmap"} {
		$item configure -foreground black
	    }
	}
    }
    
    proc checkDarkMode {} {
	set mode [catch {exec defaults read -g AppleInterfaceStyle} msg]
	if {$msg eq "Dark"} {
	    event generate . <<DarkAqua>>
	} else {
	    event generate . <<LightAqua>>
	}
    }
    
    
    bind all <<LightAqua>> {changeImagesLight}
    bind all <<DarkAqua>> {changeImagesDark}
    
    namespace export *
    
}

Added scriptlibs/darkaqua/pkgIndex.tcl.























>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
# Tcl package index file, version 1.1
# This file is generated by the "pkg_mkIndex" command
# and sourced either when an application starts up or
# by a "package unknown" script.  It invokes the
# "package ifneeded" command to set up package-related
# information so that packages will be loaded automatically
# in response to "package require" commands.  When this
# script is sourced, the variable $dir must contain the
# full path name of this file's directory.
 
package ifneeded darkaqua 1.0 [list source [file join $dir darkaqua.tcl]]

Changes to stringscan.icns.

cannot compute difference between binary files

Changes to stringscan.ico.

cannot compute difference between binary files

Changes to stringscan.png.

cannot compute difference between binary files

Changes to stringscan.rb.

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21




22
23
24
25
26
27
28
..
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
..
67
68
69
70
71
72
73



74
75
76
77
78

79
80
81
82
83
84
85
...
119
120
121
122
123
124
125
126













127
128
129
















130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
...
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
...
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
...
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
....
1079
1080
1081
1082
1083
1084
1085
1086

1087
1088


1089










1090
1091
1092
1093
1094
1095
1096

require 'tk'
#find additional Tcl libraries
Tk::AUTO_PATH.list <<= File.dirname(__FILE__)
require_relative 'tkballoonhelp'  
require 'tkextlib/tile'
require 'find'
require 'tkextlib/tcllib/tablelist_tile'
require 'mime/types'
require 'tkextlib/tkDND'
require 'tkextlib/tkimg'

$platform = Tk.windowingsystem

if $platform == 'aqua'
    TkPackage.require('windowlist')
    require 'tk/tk_mac'
end




TkPackage.require('regproc')
TkPackage.require('machelp')
TkPackage.require('softwareupdate')
TkPackage.require('xplat')

if $platform == 'aqua'
    $accelkey = 'Command'
................................................................................

    #here we initialize our app class
    def initialize

        $dirname = ""
        $searchterm = ""
        $appname = 'Stringscan'
        $appversion = '1.2'
        Tk.tk_call('machelp::setAppName', $appname, $appversion)
        Tk.tk_call('softwareupdate::setAppName', $appname)
        Tk.tk_call('softwareupdate::setVersion', $appname, $appversion)

        bgerror = Tk.install_cmd(proc{
            |*args|
             Tk::messageBox :type => 'info', :message => args,
................................................................................
                    end
                rescue
                    raise
                end
            })    
            Tk.ip_eval("proc ::tk::mac::OpenDocument {args} {#{setDir} $args}")
            Tk.ip_eval("proc ::tk::mac::ShowHelp {} {#{Tk.install_cmd(proc{showHelp})}}")



        install = getInstall
        Tk.tk_call('softwareupdate::setInstall', install)
        end        
        drawgui
        Tk.tk_call('regproc::readLic', $appname, $appversion)

    end  

    #core method; here we search for a string in text files within a directory and  display a list of matching files in the listbox 
    def stringgrep
        $root.update
        $file_list = []
        $grep_list = []
................................................................................
    begin
        Tk.ip_eval("console hide")
    rescue
      nil
    end

    #image data
    $folderdata = 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAADFBMVEUEBwcEBwcEBwcEBwcNzGmPAAAAAXRSTlMAQObYZgAAAC1JREFUeAFjYEYABgQgXRhCowAyhNEAfmFMQFiYsJX0F6aa5xmxiTIygMQxRQEtWAMvBVlMnAAAAABJRU5ErkJggg=='














    $glassdata = 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcSAg8sJGRWZAAAAXhJREFUOMutlL9LQlEUxz+WGRHllGNEPyAUWnLWsVYhXNpd+ldC6B/QPyDnoMXNtbnFIRAarLAn+bDU13IuHC/vPm/agQuXy/d93veec+4Bv9gGKkAbGAORrAHQBPLAOn+MAtBVMNdqARlfaEk+minAJ/AOvAEjC973gWeAnvpoCNSAfWAX2AKKQN36eWtRWhoK+grkErRXlvO8S7hjuah6pK2uwE2X6BKYiujFsx5FlfPBmkO0B6Rkf+8JfgZC2Wdd4EjtNzzBcwVzgccKfuIJzgJp2X+7RIfAjyrGkQe4pvTtpIcxUcLOgt7MSZ8bfcUFDWOebMfhvCp9btqzK7NlLspW/36ptjPrAbgDbqUVbQOFOKh++wFwLfCk4WNM9OS2scPGrA/gQODmbCIFnQpspm7TsIdPWqCPIkgJ9AZ4Uk97DFyIq3NgU7R9yf0wrliB5fZMxqI+K7FEnIpLe+5GkvMyK8SxoyArQTXcOA+XvX5SWoL/gP4Cdj2n/+OJ36AAAAAASUVORK5CYII='

















    $folderimage = TkPhotoImage.new(:data => $folderdata)
    $glassimage = TkPhotoImage.new(:data => $glassdata)

    $winicondata = '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'
        $macicondata = 'R0lGODlhAAIAAuf/ACktLywwMi4yNCo1Ni80NjM4Ojk9P0BERkNFQkVJS0dJRj1S
X0JRYUxQUk9RTkZVZSBbolFVV1NVUkJYZ1VXVUZZblZYVVdZViZgoTFdn1haV0lc
cllbWEteaEVfc1pcWSxjpFtdWkVhgVxeW01gdV1fXF5gXV9hXkpkf1FjeTlmokpl
emBiX0lmhmFjYGJkYTxppmNlYmRlY1VofWVmZE1qijduqWZnZUxshlNqhmdoZmhp
ZlBtjmhqZ1htgGlraERwpWpsaWttalhwi1Rxkmxua1txgm9uZlNzjW1vbFFzmW5w
bXFwaF9zhG9xbnByb3Jyakp4slV3nXJ0cVR5mHV0bHN1clx4mXd2bnV3dFl7olR9
rnd5dnp5cWB9mFp/nmF9nlWApXp8eV6Ap3N+g2qAkXN+i359dW2Ai36AfWSFrHiD
iYCCf4OCemCHtG+GlleJwHWFkF+Jr4KEgYaGfYSGg2+KoH2IjWOMuGiMs4eJhoiK
h2+OqWqPr3GNr3eNnouKgomLiH2NmYyKjoWMk36OlG2RsoCPlXSQsn2QnI6OhYyO
i3OSrYOPnIePloGQo3uSo3GTu36RqXmUqo+Qk4+RjneWspGTkJSTim2ZzXKZx5SW
k5eWjn2at4Oaq3ybvZaYlYGcsnOf0pmal5uaknygwpyem3qj0J+eloeiv5OhrZ6g
naKimaCin6OlooqpxqamnpCqwaWnpJqpt6aopZKtxKmrqKyso5ivwY2x2pyvyKyu
q6SwvbCwp66wramxupS317K0say1vaq2xKS4xKe3yrS2s7W3tK+4wLi6t6+7ybO7
w6280Lq8uaTB4Ly+u7O/zba/x8DCv7fD0bvDy8DI0b3J1sfJxrTM58HN28TN1c/R
zsbS4M3S1crT28TU6M/X4MnY7NXX1MzY5tXa3c/b6tLb49nb2M3d8dvd2tTg7tfg
6N7g3eXg3+Di39fj8enj4OPl4trm9N/n8OXn5OLr8+nr5+zu6+bv9+ny+u/y7vL1
8ff59vr8+f3//P///yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAP8ALAAAAAAA
AgACAAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnChQgMWLGDNq3MhxI8WPIEOKHEmy
pMmTKFOqXMmypcKOMGPKnEkTpsubOHPq3Mmzp8+fD2sKHUq0aFGgSJMqXcq0qdOK
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
'
    $winicon = TkPhotoImage.new(:data => $winicondata)
    $macicon = TkPhotoImage.new(:data => $macicondata)
    $notifyicon = TkPhotoImage.new()
    $notifyicon.copy($winicon, :subsample=>[2,2])
    #initialize variables for entry
    $dirname = TkVariable.new
    $searchterm = TkVariable.new
    #top window and frame
    Tk::TkDND::DND
    $root = TkRoot.new {
        title "Stringscan"
    }

    if $platform == 'aqua'
        $root.iconphoto_default($macicon)
    else 
        $root.iconphoto_default($winicon)
    end
        $root.withdraw
    #menu
    $menubar = TkMenu.new($root)
    TkOption.add '*tearOff', 0
    if $platform == 'aqua'
        $appmenu = TkSysMenu_Apple.new($menubar)
        $menubar.add :cascade, :menu => $appmenu
        $appmenu.add :command, :label => 'About Stringscan', :command=> proc{aboutWindow}
        $appmenu.add :command, :label => 'License', :command=>proc{getReg}
        $appmenu.add :command, :label=>'Check for Updates', :command=>proc{checkUpdate}
        $appmenu.add :separator
    end
    $searchmenu = TkMenu.new($menubar)
    $menubar.add :cascade, :menu => $searchmenu, :label => 'Search'
    $searchmenu.add :command, :label => 'Choose Directory...', 'accelerator' => "#{$accelkey}+O", :command => proc{choosedir}
    $searchmenu.add :command, :label => 'Run Search', 'accelerator' => "#{$accelkey}+R", :command => proc{stringgrep}
    if $platform == 'win32'
        $searchmenu.add :command, :label => "Exit", :command=>proc{exit}, 'accelerator' => "#{$accelkey}+Q"
    end
    $helpmenu = TkSysMenu_Help.new($menubar)
    $menubar.add :cascade, :menu => $helpmenu, :label => 'Help'
    if $platform != 'aqua'
        $helpmenu.add :command, :label=>'Stringscan Help', :command=>proc{
            Tk.tk_call('machelp::userhelp')
        }
................................................................................
    }
    $helpmenu.add :command, :label=>'Web Site', :command=>proc{
        Tk.tk_call('xplat::launch', 'https://www.codebykevin.com/stringscan.html')
    }

    if $platform != 'aqua'
        $helpmenu.add :command, :label => 'About Stringscan', :command=> proc{aboutWindow}
        $helpmenu.add :command, :label => 'License', :command=>proc{getReg}
        $helpmenu.add :command, :label=>'Check for Updates', :command=>proc{checkUpdate}
    end
    $root['menu'] = $menubar
    $mainframe = Tk::Tile::Frame.new($root).pack('side' => 'top','fill' => 'both','expand' => 'yes')
    #button frame and buttons
    $buttonframe = Tk::Tile::Frame.new($mainframe){padding 2}.pack('side' => 'top','fill' => 'both','expand' => 'no')
    choosedirproc = proc{choosedir}
................................................................................
    $termentry.bind('Return', proc {stringgrep})
    $nextsep = Tk::Tile::Separator.new($mainframe) {orient 'horizontal'}.pack('side'=>'top', 'fill'=>'both')
    #listbox, textbox, scrollbars
    $bottomframe = Tk::Tile::Paned.new($mainframe, 'orient' => 'horizontal' ).pack('side'=>'bottom','fill' => 'both', 'expand' => 'yes')
    $bottomleftframe = Tk::Tile::Frame.new($bottomframe)
    $listlabel = Tk::Tile::Label.new($bottomleftframe) {
        text 'File Name'
        style 'TablelistHeader.TLabel'
        padding 1
    }.pack('side'=>'top', 'fill'=>'both', 'expand' => 'no')
    $lbox = Tk::Listbox.new($bottomleftframe){
        width 50
        height 30
        borderwidth 0
        takefocus 0
        activestyle "none"
        exportselection 0
        selectbackground "RoyalBlue1"
        selectforeground "white"
        dnd_bindtarget('text/uri-list', '<Drop>', '%D') {|d|
            filename=d.join(' ')
            begin
                if File.directory?(filename)
                    $tbox.configure('state'=>'normal')
                    $tbox.delete('1.0', 'end')
                    $tbox.configure('state'=>'disabled')
................................................................................
    $lbox.yscrollbar($listscroll)
    $bottomrightframe  =Tk::Tile::Frame.new($bottomframe)
    $tbox = Tk::Text::new($bottomrightframe){
        borderwidth 0.1
        relief 'sunken'
        wrap 'word'
        highlightcolor 'SlateGray3'
        bg 'white'
        state 'disabled'
    }.pack('side'=>'left','fill' => 'both', 'expand' => 'yes')
    $tscrollframe = Tk::Frame.new($bottomrightframe).pack('side'=>'right','fill' => 'y', 'expand' => 'no')
    $tscroll = Tk::Tile::Scrollbar.new($tscrollframe).pack('side'=>'right','fill' => 'y', 'expand' => 'no')
    $tbox.yscrollbar($tscroll)
    
    $bottomframe.add($bottomleftframe)
    $bottomframe.add($bottomrightframe)
    
    $labelframe = Tk::Tile::Frame.new($root).pack('side'=>'bottom', 'fill'=>'both', 'expand' => 'no')
    $bottomlabel = Tk::Tile::Label.new($labelframe) {text "No data displayed"}.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $bottomsep = Tk::Tile::Separator.new($root) { orient 'horizontal' }.pack('side'=> 'bottom', 'fill'=>'both')
    $root.bind("#{$accelkey}-Q", proc{exit})
    $root.bind("#{$accelkey}-q", proc{exit})
    $root.bind("#{$accelkey}-O", proc{choosedir})
    $root.bind("#{$accelkey}-o", proc{choosedir})
    $root.bind("#{$accelkey}-R", proc{stringgrep})
    $root.bind("#{$accelkey}-r", proc{stringgrep})

    $root.update
    $root.deiconify
................................................................................

#check version of installed software
def checkUpdate 
    Tk.tk_call('softwareupdate::setIcon', $winicon)
    Tk.tk_call('softwareupdate::checkVersion', $appname, $appversion)
end

#check version of installed software

def getReg
    Tk.tk_call('regproc::getReg')


end











#user help
def showHelp
    Tk.tk_call('machelp::userhelp')
end









<
|
|
<




<
|
|
>
>
>
>







 







|







 







>
>
>




|
>







 







|
>
>
>
>
>
>
>
>
>
>
>
>
>
|
<
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
<
<
<









|
<
<










<








|







 







<







 







<









<
<







 







<












|
|







 







<
>
|
|
>
>
|
>
>
>
>
>
>
>
>
>
>







4
5
6
7
8
9
10

11
12

13
14
15
16

17
18
19
20
21
22
23
24
25
26
27
28
29
..
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
..
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
...
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145

146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165




























166

































































































































































































































































































































































































































































































































































































































































































































167
168



169
170
171
172
173
174
175
176
177
178


179
180
181
182
183
184
185
186
187
188

189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
...
208
209
210
211
212
213
214

215
216
217
218
219
220
221
...
244
245
246
247
248
249
250

251
252
253
254
255
256
257
258
259


260
261
262
263
264
265
266
...
289
290
291
292
293
294
295

296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
...
368
369
370
371
372
373
374

375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397

require 'tk'
#find additional Tcl libraries
Tk::AUTO_PATH.list <<= File.dirname(__FILE__)
require_relative 'tkballoonhelp'  
require 'tkextlib/tile'
require 'find'

require 'mime/types'
require 'tkextlib/tkDND'


$platform = Tk.windowingsystem

if $platform == 'aqua'

    require 'tk/tk_mac'
end
if $platform == 'win32'
	TkPackage.require('dde')
	Tk.tk.call('dde servername Stringscan')
end
TkPackage.require('regproc')
TkPackage.require('machelp')
TkPackage.require('softwareupdate')
TkPackage.require('xplat')

if $platform == 'aqua'
    $accelkey = 'Command'
................................................................................

    #here we initialize our app class
    def initialize

        $dirname = ""
        $searchterm = ""
        $appname = 'Stringscan'
        $appversion = '2.0'
        Tk.tk_call('machelp::setAppName', $appname, $appversion)
        Tk.tk_call('softwareupdate::setAppName', $appname)
        Tk.tk_call('softwareupdate::setVersion', $appname, $appversion)

        bgerror = Tk.install_cmd(proc{
            |*args|
             Tk::messageBox :type => 'info', :message => args,
................................................................................
                    end
                rescue
                    raise
                end
            })    
            Tk.ip_eval("proc ::tk::mac::OpenDocument {args} {#{setDir} $args}")
            Tk.ip_eval("proc ::tk::mac::ShowHelp {} {#{Tk.install_cmd(proc{showHelp})}}")
			Tk.ip_eval("proc set_search_term {args} {#{set_search_term} $args}")
			Tk.ip_eval("proc set_search_dir {args} {#{set_search_dir} $args}")
            Tk.ip_eval("proc execute_search {} {#{Tk.install_cmd(proc{execute_search})}}")
        install = getInstall
        Tk.tk_call('softwareupdate::setInstall', install)
        end        
        drawgui
		if $platform == 'aqua' 
			Tk.tk_call('darkaqua::checkDarkMode')
    end  

    #core method; here we search for a string in text files within a directory and  display a list of matching files in the listbox 
    def stringgrep
        $root.update
        $file_list = []
        $grep_list = []
................................................................................
    begin
        Tk.ip_eval("console hide")
    rescue
      nil
    end

    #image data
    $folderdata = '#define xbm_folder_sans_32_width 32
#define xbm_folder_sans_32_height 32
static char xbm_folder_sans_32_bits[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00,
  0x03, 0xFF, 0xFF, 0x3F, 0x03, 0xFF, 0xFF, 0x3F, 0x03, 0xFF, 0xFF, 0xFF,
  0x03, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0,
  0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0,
  0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0,
  0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0,
  0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0,
  0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0,
  0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, };
'


    $glassdata = '#define xbm_search_32_width 32
#define xbm_search_32_height 32
static char xbm_search_32_bits[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00,
  0xC0, 0xFF, 0x00, 0x00, 0xF0, 0xE1, 0x03, 0x00, 0x70, 0x80, 0x07, 0x00,
  0x38, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x0E, 0x00,
  0x1C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00,
  0x0C, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x18, 0x00, 0x0E, 0x00,
  0x38, 0x00, 0x07, 0x00, 0x70, 0x80, 0x0F, 0x00, 0xE0, 0xE3, 0x3F, 0x00,
  0xE0, 0xFF, 0x7F, 0x00, 0x00, 0xBF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x01,
  0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xF8, 0x0F,
  0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xC0, 0x3F,
  0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x06,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
'

    $folderimage = TkBitmapImage.new(:data => $folderdata)
    $glassimage = TkBitmapImage.new(:data => $glassdata)





























    $winicondata = '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'

































































































































































































































































































































































































































































































































































































































































































































	
    $winicon = TkPhotoImage.new(:data => $winicondata)



    #initialize variables for entry
    $dirname = TkVariable.new
    $searchterm = TkVariable.new
    #top window and frame
    Tk::TkDND::DND
    $root = TkRoot.new {
        title "Stringscan"
    }

    if $platform != 'aqua' 


        $root.iconphoto_default($winicon)
    end
        $root.withdraw
    #menu
    $menubar = TkMenu.new($root)
    TkOption.add '*tearOff', 0
    if $platform == 'aqua'
        $appmenu = TkSysMenu_Apple.new($menubar)
        $menubar.add :cascade, :menu => $appmenu
        $appmenu.add :command, :label => 'About Stringscan', :command=> proc{aboutWindow}

        $appmenu.add :command, :label=>'Check for Updates', :command=>proc{checkUpdate}
        $appmenu.add :separator
    end
    $searchmenu = TkMenu.new($menubar)
    $menubar.add :cascade, :menu => $searchmenu, :label => 'Search'
    $searchmenu.add :command, :label => 'Choose Directory...', 'accelerator' => "#{$accelkey}+O", :command => proc{choosedir}
    $searchmenu.add :command, :label => 'Run Search', 'accelerator' => "#{$accelkey}+R", :command => proc{stringgrep}
    if $platform == 'win32'
        $searchmenu.add :command, :label => "Exit", :command=>proc{Tk.tk_call('regproc::makePitch; exit'}, 'accelerator' => "#{$accelkey}+Q"
    end
    $helpmenu = TkSysMenu_Help.new($menubar)
    $menubar.add :cascade, :menu => $helpmenu, :label => 'Help'
    if $platform != 'aqua'
        $helpmenu.add :command, :label=>'Stringscan Help', :command=>proc{
            Tk.tk_call('machelp::userhelp')
        }
................................................................................
    }
    $helpmenu.add :command, :label=>'Web Site', :command=>proc{
        Tk.tk_call('xplat::launch', 'https://www.codebykevin.com/stringscan.html')
    }

    if $platform != 'aqua'
        $helpmenu.add :command, :label => 'About Stringscan', :command=> proc{aboutWindow}

        $helpmenu.add :command, :label=>'Check for Updates', :command=>proc{checkUpdate}
    end
    $root['menu'] = $menubar
    $mainframe = Tk::Tile::Frame.new($root).pack('side' => 'top','fill' => 'both','expand' => 'yes')
    #button frame and buttons
    $buttonframe = Tk::Tile::Frame.new($mainframe){padding 2}.pack('side' => 'top','fill' => 'both','expand' => 'no')
    choosedirproc = proc{choosedir}
................................................................................
    $termentry.bind('Return', proc {stringgrep})
    $nextsep = Tk::Tile::Separator.new($mainframe) {orient 'horizontal'}.pack('side'=>'top', 'fill'=>'both')
    #listbox, textbox, scrollbars
    $bottomframe = Tk::Tile::Paned.new($mainframe, 'orient' => 'horizontal' ).pack('side'=>'bottom','fill' => 'both', 'expand' => 'yes')
    $bottomleftframe = Tk::Tile::Frame.new($bottomframe)
    $listlabel = Tk::Tile::Label.new($bottomleftframe) {
        text 'File Name'

        padding 1
    }.pack('side'=>'top', 'fill'=>'both', 'expand' => 'no')
    $lbox = Tk::Listbox.new($bottomleftframe){
        width 50
        height 30
        borderwidth 0
        takefocus 0
        activestyle "none"
        exportselection 0


        dnd_bindtarget('text/uri-list', '<Drop>', '%D') {|d|
            filename=d.join(' ')
            begin
                if File.directory?(filename)
                    $tbox.configure('state'=>'normal')
                    $tbox.delete('1.0', 'end')
                    $tbox.configure('state'=>'disabled')
................................................................................
    $lbox.yscrollbar($listscroll)
    $bottomrightframe  =Tk::Tile::Frame.new($bottomframe)
    $tbox = Tk::Text::new($bottomrightframe){
        borderwidth 0.1
        relief 'sunken'
        wrap 'word'
        highlightcolor 'SlateGray3'

        state 'disabled'
    }.pack('side'=>'left','fill' => 'both', 'expand' => 'yes')
    $tscrollframe = Tk::Frame.new($bottomrightframe).pack('side'=>'right','fill' => 'y', 'expand' => 'no')
    $tscroll = Tk::Tile::Scrollbar.new($tscrollframe).pack('side'=>'right','fill' => 'y', 'expand' => 'no')
    $tbox.yscrollbar($tscroll)
    
    $bottomframe.add($bottomleftframe)
    $bottomframe.add($bottomrightframe)
    
    $labelframe = Tk::Tile::Frame.new($root).pack('side'=>'bottom', 'fill'=>'both', 'expand' => 'no')
    $bottomlabel = Tk::Tile::Label.new($labelframe) {text "No data displayed"}.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $bottomsep = Tk::Tile::Separator.new($root) { orient 'horizontal' }.pack('side'=> 'bottom', 'fill'=>'both')
    $root.bind("#{$accelkey}-Q", proc{Tk.tk_call('regproc::makePitch; exit'})
    $root.bind("#{$accelkey}-q", proc{Tk.tk_call('regproc::makePitch; exit'})
    $root.bind("#{$accelkey}-O", proc{choosedir})
    $root.bind("#{$accelkey}-o", proc{choosedir})
    $root.bind("#{$accelkey}-R", proc{stringgrep})
    $root.bind("#{$accelkey}-r", proc{stringgrep})

    $root.update
    $root.deiconify
................................................................................

#check version of installed software
def checkUpdate 
    Tk.tk_call('softwareupdate::setIcon', $winicon)
    Tk.tk_call('softwareupdate::checkVersion', $appname, $appversion)
end



#scripting commands
def set_search_term (term)
	$searchterm=term
	return #searchterm
end

def set_search_dir (dir)
	$dirname = dir
	return $dirname
end

def execute_search
	stringgreb
end


#user help
def showHelp
    Tk.tk_call('machelp::userhelp')
end