{ Welcome to the World Wide Reb! Please open this script with REBOL/View, to launch it: 1) Get REBOL/View at http://www.rebol.com/view-platforms.html 2) Install REBOL/View 3) Choose one of the following method: a) under windows, double click on ReViewer.r icon b) in a console, do "rebol -s ReViewer.r" c) from REBOL/View Desktop, goto "http://www.digicamsoft.com" Get more tips at http://www.digicamsoft.com } REBOL [ Title: "Namexif 1.0" Web: "http://www.digicamsoft.com" Author: "Gregory Pecheret" License: "GNU General Public License" ] secure none license-txt: {Namexif, wizard to automatically rename photos' files. Copyright (C) 2004 Gregory Pecheret, www.digicamsoft.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXIF Library (LGPL): Copyright (C) 2003 Piotr Gapinski } vbanner: load 64#{ iVBORw0KGgoAAAANSUhEUgAAAJYAAAA5CAMAAADjlSLrAAADAFBMVEUuLi1+fn3i 4uHX19b//vsQDgn96LT96rv+7cL+7sj+8M7+8tR4c2b+9Nvu5tP+/PcYFQ763qL7 4an9+O3++/T39O0rIhDvwWntwGpYSCnSrWWli1hdUDfEqniul2v215r52p3XvIjy 1Jq6o3bv0prz1p3rz5jz16D326RTSjj33Kf33Kj436744LH44LL44bT55Lv55sDg z63658L66MXw37766sr77M/77tTQxrH779b88Nnd07/s4s788+H99+tfXVk5ODY/ PjySkY/trDveoTfHkTLtrT1oTBs7LBDtr0KrfjCVbirus0zxv2fyw2rxwmrNpVrC m1Wyj07xwGvnu2fftGTwwWzyxG6jhEq1klPyw3HzxnKMckLzyHbyxXZ3Yjq2llrz yXnzx3o8MR70y33yyH3zyoD0zIHGpmnnwXseGRD0y4TWtHX0zYdnVzlCOCUyKhz1 z4z10Y3vy4qVf1ZKPyv10ZD205KKd1P10pTx0JH21JV9bEznyI321Zf11Zj105jy 0pb21pn11JrOs4Gjjmf215z32J711pzmyZP21p732aDdwo/32aL216H32qPv0p/3 26YiHhf43Kn43ar326n43q333Kz43a7437D437Po0qr54rf03bW1pIb547n547r5 5Lz547355b/65sH55cH348D658T658b66Mb45cT66cn66cr7683768756c377NH7 7dP879f879jp3cj369b88Nv88d357tv88t/99OP99OT99eb99un99+z++fD++vNZ QRjwuFjxvGH0yoL21Jr32KP32ab326vz2Kr437T44Lf54bj34Lr55MD65cLq2Ln5 58n66cz769D77dX77db879rWzLz88d/98+L78uPx6dz++/bt6uX++O/OysT//fr+ /Pn//v0DAgImJSVsa2vm5eX////8/Pz5+fnz8/Pu7u7p6ene3t7b29vY2NjV1dXR 0dHOzs7KysrFxcXBwcG/v7+8vLy5ubm2traxsbGrq6uioqJ0dHRSUlJVAvLIAAAA CXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH1AYTARAIzUwJHAAACRZJREFUeNqt mXtcU+cdxpPA6S5im1oXBwY6BIW0a93aObSiDYTaKkgUCzQwTIBjkIsEUIKgwWIH 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 } hbanner: load 64#{ iVBORw0KGgoAAAANSUhEUgAAAKQAAAE6CAMAAACvcAn0AAADAFBMVEUCAgFzc3F+ fn2YmJcIBwQREA3+7cKknIgbFw7846j74qr85K3957P96brOwqf+8M/98tn+9eC+ t6fu5tV5YjXyxGt5YjbyxW3zxm/zx3D0x3F6ZDn0yHP0yXT1ynf1y3h7Zj32zHsG BQP2zX2Pd0n3zn/3z4L1zoH40IN4ZUD50odtXDtVSC7IqW3hv31jVDf71o8HBgSr k2X415W5oXL52Zv625763KH63aL53KH63qPrz5n73qX53aT736f74Kn736n74Kr7 4a3ZwpbQuo/74a7847D74q/bxZny2qr847Lgyp7dx5z85LP64rLs1qjjzqL85LXp 06jm0aYgHRfq1ars16zu2a7v2rD037by3bT34rn55Lv447owLCQODQvOxbLe1cJd XFrtrDvcoTqNaCdZQhnvtVHwvWPxv2jyw27wwW15YTfywm/yxG96Yzjnu2v0x3Ly w3HyxHHyxXLzxnPzxnTyxHT1yXZ6ZDvzx3b2y3nzyHfxxXbEoWD2y3rzyHn0yXrz x3qmiVP3zX70ynywklrUsG33zoD0yn7yyH18Z0D4z4H1zID4z4L2zYHzyYCYf1Aq Ixb4z4T40IT3z4T2zoP1zYPzyoK4mmKFb0f50Yb1zYT1zoX0y4TvyYF8aEP50ojp xH/buHf604n1zob604r2z4j0zIf50ov20Il1Y0H71I361Iz30Yr71Y720Iv50470 zovwzIj81pD71pD30o3syYf61ZD815L41JD10I/41ZM9NCT10pXty5CfiWGgi2Oy m3L216D32aXDrYPt0qH326rVvpP43a743rH44LXx27H44bjy3LP44rn24Lf5472A dWH65b/w3bvez7Xx48n89utzUx2qfC7GkTfusEbwuVsOCwZGPCv21JptYlD54bnp 1rb66Mn77NPo28XVzL3y7OL++vQEAwL//ftpaGjIx8f////8/Pz6+vr29vbx8fHr 6+vm5ubi4uLe3t7Z2dnW1tbR0dHMzMzDw8O8vLyysrKmpqZLS0sAAAARjb4sAAAA CXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH1AYTARAw5U6xggAAHmpJREFUeNrt 3Qt8k+W9B/A2odLjphSBotZz1uNyYDVp4mr07OjmjrNDbipidGebprMgd23nNrEe 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 P/p/1+ASzaJawjoAAAAASUVORK5CYII= } exif-ctx: context [ set 'EXIF-SOI 64#{/9g=} set 'EXIF-APP0 64#{/+A=} set 'EXIF-APP1 64#{/+E=} set 'EXIF-APP2 64#{/+I=} set 'EXIF-CMT 64#{//4=} set 'EXIF-EOI 64#{/9k=} EXIF-HEADER: 64#{RXhpZgAA} TIFF-HEADER-OFFSET: 10 EXIF-FORMS: [ 64#{AAE=} [1 to-integer] 64#{AAI=} [1 to-string] 64#{AAM=} [2 to-integer] 64#{AAQ=} [4 to-integer] 64#{AAU=} [8 to-rational] 64#{AAY=} [1 to-integer] 64#{AAc=} [1 to-binary] 64#{AAg=} [2 to-integer] 64#{AAk=} [4 to-integer] 64#{AAo=} [8 to-rational] 64#{AAs=} [4 to-binary] 64#{AAw=} [8 to-binary] ] byte-order: "" dat: none debug: false range: func [ {Pobiera fragment danych z bufora (bez weryfikacji zakresu danych).} offset [integer!] "przesunięcie od początku bufora" length [integer!] "długość danych bajtach (relatywna do offsetu)" /all "długość danych liczona od początku bufora" /custom "bufor danych" buffer [series!] "opcjonalny bufor z danymi" /local d] [ d: any [buffer dat] return copy/part (skip d offset) (either all [length - offset] [length]) ] get-content: func [ {Pobiera size danych znajdujących się location bajtów za nagłówkiem bufora} location [integer!] "przesunięcie od początku bufora" size [integer!] "długość danych bajtach (relatywna do offsetu)"] [ range (TIFF-HEADER-OFFSET + location) size ] intel?: func [ {Konwersja zapisu danych binarnych Intel-Motorola (zmiana kolejności bajtów).} bin [binary!] "dane binarne"] [ return either (byte-order = "II") [head reverse bin] [bin] ] read-traverse: func [ {Zwraca binary! zawartość wskazanego chunk lub none!} file-name [file! string!] "nazwa pliku" tag [binary!] "szukany chunk-id" /position "zwraca offset pozycji chunk od początku pliku" /local chunk-id chunk-size offset buffer] [ file: to-file file-name if error? try [ buffer: read/binary/direct/part file 2 if not equal? EXIF-SOI (range/custom 0 2 buffer) [return none] offset: 2 forever [ buffer: read/binary/direct/part file (offset + 4) chunk-id: range/custom offset 2 buffer if (chunk-id and 64#{/wA=} <> 64#{/wA=}) [return none] chunk-size: to-integer range/custom (offset + 2) 2 buffer if debug [print ["znaleziono chunk" chunk-id "offset" offset "wielkość" (chunk-size + 2) "bajtów"]] if (chunk-id = tag) [ buffer: skip (read/binary/direct/part file (offset + chunk-size + 2)) offset return either position [offset] [buffer] ] offset: offset + chunk-size + 2 ] ] [return none] ] set 'exif-file? func [ {Zwraca true! w przypadku gdy plik jest w formacie JPEG i zawiera dane EXIF (APP1).} file-name [file! string!] "nazwa pliku" /debug "dodatkowe informacje o działaniu programu" /local size] [ self/debug: any [(not none? debug) false] all [ not none? dat: read-traverse file-name EXIF-APP1 equal? EXIF-APP1 range 0 2 not zero? size: to-integer range 2 2 not empty? byte-order: to-string range 10 2 ] ] set 'good-file? :exif-file? set 'exif-tag func [ "Przeszukuje katalogi struktury EXIF." tag [binary! block!] "poszukiwane znaczniki" /local ifd-first ifd-next search-ifds ifds rcs tags offset] [ ifd-first: does [TIFF-HEADER-OFFSET + to-integer (intel? range 14 4)] ifd-next: func [ "Zwraca offset do następnego IFD lub none!" offset "aktualna pozycja katalogu" /local elements next] [ elements: to-integer (intel? range offset 2) next: to-integer (intel? range (offset + 2 + (elements * 12)) 4) either equal? 0 next [none] [TIFF-HEADER-OFFSET + next] ] search-ifds: func [ "Szuka znacznika tag we wszystkich katalogach APP1." ifds [block!] "block! offsetów do katalogów APP1" tag [binary!] "szukany znacznik EXIF" /local offset rc] [ foreach offset ifds [if not none? (rc: ifd-content offset tag) [break]] return rc ] ifds: copy [] tags: copy [] rcs: copy [] append ifds offset: ifd-first while [not none? (offset: ifd-next offset)] [append ifds offset] foreach tag [64#{h2k=} 64#{oAU=}] [ offset: search-ifds ifds tag if not none? offset [append ifds (TIFF-HEADER-OFFSET + (to-integer offset))] ] ifds: sort ifds if debug [print ["znalezione katalogi" mold ifds CRLF "rozpoczynam poszukiwania" CRLF]] either block? tag [tags: tag] [append tags tag] foreach tag tags [append rcs (search-ifds ifds tag)] either (block? tag) [rcs] [first rcs] ] set 'exif-ifd :exif-tag ifd-content: func [ "Wyszukuje określony parametr w katalogu EXIF." offset [integer!] "lokalizacja (offset) katalogu" tag [binary!] "poszukiwany znacznik" /local items tag-format tag-length tag-value tag-components] [ items: to-integer intel? range offset 2 if debug [print ["szkukam" tag "w katalogu" offset "(" items "elementy/ów )"]] offset: offset + 2 loop items [ if debug [print ["-> znaleziono znacznik" (intel? range offset 2)]] if equal? tag (intel? range offset 2) [ tag-format: intel? range (offset + 2) 2 tag-components: to-integer intel? range (offset + 4) 4 tag-length: tag-components * EXIF-FORMS/:tag-format/1 tag-value: intel? range offset + 8 4 if (tag-length > 4) [tag-value: range (TIFF-HEADER-OFFSET + to-integer tag-value) tag-length] if debug [print ["-> format" tag-format tag-components "komponent/ów w buforze" tag-value "(" tag-length "bajt/y )" CRLF]] return to-rebol tag-value tag-format tag-length ] offset: offset + 12 ] if debug [print ["-> znacznika" tag "nie znaleziono!" CRLF]] return none ] to-rebol: func [ "Konwersja danych binarnych na Rebol datatype." bin [binary!] "dane binarne" format [binary!] "format danych" length [integer!] "bajtów danych (binarnych)"] [ to-rational: func [bin [binary!] /local a b] [ a: order copy/part bin 4 b: order copy/part skip bin 4 4 to-string rejoin [(to-integer a) "/" (to-integer b)] ] return do EXIF-FORMS/:format/2 copy/part skip bin ((length? bin) - length) length ] ] if error? err: try [ fix-slider: func [faces [object! block!]] [ foreach lv-list to-block faces [ lv-list/sld/data: 0 lv-list/sn: 0 lv-list/sld/redrag lv-list/lc / max 1 length? head lv-list/lines show lv-list ] ] tasks: context [ photos: copy [] t01: func [/local l1] [ l1: request-file/keep/title/filter "Select Photos" "Add" ["*.jpg" "*.jpeg"] if l1 [ forall l1 [ if find [%.jpg %.jpeg] find/last l1/1 "." [ append photos l1/1 ] ] load_txt/text: join length? photos " pictures (JPEG) found and loaded." fix-slider load_list show main ] l1: none if not empty? photos [show load-btn] ] t02: func [/local l0 l1 l2 l3] [ main/pane: lay_build show main hide build-btn l1: length? photos l0: 1 forall photos [ if good-file? photos/1 [ dat: exif-tag [64#{kAM=}] l2: dat/1 poke l2 20 #"." if opt1/data [ replace l2 " " "" replace/all l2 ":" "" ] if opt2/data [ replace l2 " " "-" replace/all l2 ":" "-" poke l2 14 #"h" poke l2 17 #"m" ] if opt3/data [ l3: parse l2 ":" l2: to-date rejoin [l3/3 "-" l3/2 "-" l3/1 "/" l3/4 ":" l3/5 ":" l3/6] l2: subtract l2 1-Jan-1998 l2: (l2 * 86400) + (3600 * to-integer l3/4) + (60 * to-integer l3/5) + to-integer l3/6 l2: to-hex l2 append l2 "." ] append l2 "jpg" if error? try [ rename photos/1 to-file l2 build-txt/text: rejoin ["Renaming " second split-path photos/1 " to " l2] ] [ build-txt/text: rejoin ["Can not rename " second split-path photos/1 " to " l2] ] ] p/data: divide l0 l1 show main wait 0.1 l0: add l0 1 ] photos: head photos l0: l1: l2: l3: none hide build-btnc build-txtd/text: "Work completed." show build-txtd show build-btn ] t03: func [] [quit] t04: func [] [ if alert "Click OK to exit OR close pop-up to continue." [quit] ] t05: func [] [ main/pane: lay_load show main if empty? photos [hide load-btn] ] t06: func [] [ main/pane: lay_welcome show main ] t07: func [] [ main/pane: lay_license show main ] t08: func [] [ clear photos load_txt/text: "No pictures loaded." fix-slider load_list show main if empty? photos [hide load-btn] ] t09: func [] [ main/pane: lay_options show main ] ] v121: stylize [btn: button bar: box 475x2] lay_welcome: layout/size/offset [styles v121 backdrop 200.200.200 at 0x0 image hbanner at 164x0 box 331x314 white at 175x15 h1 "Welcome to Namexif 1.0!" at 175x60 text 300 "Namexif renames photos to the date they were shot." at 175x90 text 300 {Select photos you want to rename and Namexif will automatically rename them using the date and time recorded when you shot as name.} at 175x150 text 300 {Namexif only renames photos' files, it doesn't modify photos at all.} at 175x200 text 300 "Click Next to continue." at 320x325 btn 75 "Next >" [tasks/t07] at 410x325 btn 75 "Cancel" [tasks/t04] at 5x335 text "www.digicamsoft.com" blue [browse "http://www.digicamsoft.com"] ] 495x360 0x0 lay_license: layout/size/offset [styles v121 backdrop 200.200.200 at 0x0 box 495x57 white at 0x0 image vbanner at 140x5 h3 "License Agreement" at 150x25 text 400 {Please review the license terms before using Namexif.} at 20x93 lic-txt: text-list 455x200 data parse/all license-txt "^/" at 10x310 bar 475 at 240x325 btn 75 "< Back" [tasks/t06] at 320x325 btn 75 "Next >" [tasks/t05] at 410x325 btn 75 "Cancel" [tasks/t04] at 5x335 text "www.digicamsoft.com" blue [browse "http://www.digicamsoft.com"] ] 495x360 0x0 lay_load: layout/size/offset [styles v121 backdrop 200.200.200 at 0x0 box 495x57 white at 0x0 image vbanner at 140x5 h3 "Photos Selection" at 150x25 text 400 "Select photos' files you want to rename." at 20x65 btn 50 "Add..." [tasks/t01] at 80x65 btn 50 "Reset" [tasks/t08] at 20x93 load_list: text-list 455x200 data tasks/photos at 20x292 load_txt: text 400 "No photos loaded." at 10x310 bar 475 at 240x325 btn 75 "< Back" [tasks/t07] at 320x325 load-btn: btn 75 "Next >" [tasks/t09] at 410x325 btn 75 "Cancel" [tasks/t04] at 5x335 text "www.digicamsoft.com" blue [browse "http://www.digicamsoft.com"] ] 495x360 0x0 lay_options: layout/size/offset [styles v121 backdrop 200.200.200 at 0x0 box 495x57 white at 0x0 image vbanner at 140x5 h3 "Choose Format" at 150x25 text 400 "Choose preferred format for renaming." across origin 50x130 opt1: radio text "YYYYMMDDHHMMSS" return opt2: radio on text "YYYY-MM-DD-HHhMMmSS" return opt3: radio text "8 characters (ISO compliant)" at 10x310 bar 475 at 240x325 btn 75 "< Back" [tasks/t05] at 320x325 btn 75 "Next >" [tasks/t02] at 410x325 btn 75 "Cancel" [tasks/t04] at 5x335 text "www.digicamsoft.com" blue [browse "http://www.digicamsoft.com"] ] 495x360 0x0 lay_build: layout/size/offset [styles v121 backdrop 200.200.200 at 0x0 box 495x57 white at 0x0 image vbanner at 140x5 h3 "Renaming" at 150x25 text 400 "Please wait while renaming your files..." at 40x160 build-txtd: text 400 "Please wait, work in progress..." at 40x180 build-txt: text 400 "" at 40x200 p: progress 415 gray green at 10x310 bar 475 at 320x325 build-btn: btn orange 75 "Finish" [tasks/t03] at 410x325 build-btnc: btn 75 "Cancel" [tasks/t04] at 5x335 text "www.digicamsoft.com" blue [browse "http://www.digicamsoft.com"] ] 495x360 0x0 view/new center-face main: layout/size [] 495x360 tasks/t06 insert-event-func [ either equal? event/type 'close [tasks/t04] [event] ] change-dir %/c/ do-events ] [ alert "We apologize, an unexpected error occurred." quit]