# GarminCsvPoiExport.txt
# Export all caches to Garmin POI files, one file for each cache- and child-type.
#
# MacVersion=1.7
# MacDescription=Garmin CSV POI Export with icons
#
# Version: 1.7
# 27-04-2007
# Author: Rene Boe (alias "ProsperoDK")
# Developed on GSAK 7.0.4
#
# Requires:
# - Premium Membership from www.geocaching.com, so you have all the data for the caches and child waypoints
# - The custom icons file created by ThePropers. (Should be included with this macro)
# - Requires GSAK 7.0.0 or higher
#
# Thanks To:
# - Heiner Lieth (alias "Hynr") for seeing how to switch tables between Cache and Child WP.
# - Heiner Lieth (alias "Hynr") for the code to clean up and split hint if it is to long.
# - Christian Caron (alias "cron") for the code to store saved settings.
# - Clyde England (alias "Clyde") for how to generate different files on the fly.
# - Mark (alias "ThePropers") for creating the Custom waypoint icons used with this macro.
# - Mike Wood (alias "Lignumaqua") for creating the outline of the form used, and the datasave and restore.
#
# Features:
# - Export each cachetype to its own file.
# - Export each child waypoint type to its own file.
# - Besides looking in each database on the GPSr the first characters shows if the cache is
# archived or found or has corrected coordinates.
# - For best use with the GPSmap 60CSx use the included icons.
#
# ToDo:
#
# Revisions:
# 1.7 27-04-2007
# - Made it configureable whether to filter out Archived caches
# - Made it configureable whether to filter out Temporary Disabled caches
# 1.6 06-04-2007
# - Fixed error where $UsePrefix was not followed
# - Fixed some more errors where " wasn't removed
# - Made it configureable whether to output the hint or not
# - Made it configureable whether to filter out found caches
# - Added to the form started by Lignumaqua
# 1.5 05-04-2007
# - Added forms for user data input - change by Lignumaqua
# 1.4 19-03-2007
# - I couldn't move the configuration of the name and comment-fields to the start of the macro for easier access
# - because I use smart tags to get some of the data, but I added pointers so they are easy to find.
# - look under "Initial Variable Setup"
# 1.3 19-03-2007
# - Cleaned up the statistics at the end
# 1.2 17-03-2007
# - Added icon for Locationless
# - Added icon for a solved Mystery and solved Multi (corrected to final coordinates) and solved Found
# - Added icons for disabled caches of the following types: Traditional, Multi, Mystery, Event,
# - Virtual, CITO, Earth, Locationless and Found
# 1.1 07-03-2007
# - Fixed a couple of small errors when there was a " in the cache-name or the owner-name
# 1.0 27-09-2006
# - Now the child waypoint comment is split if longer than 88 characters
# 0.9 27-09-2006
# - If the cache has corrected coordinates prefix with "!"
# 0.8 22-09-2006
# - Cleaned up the code and added more comments
# 0.7 20-09-2006
# - Some final bug-tracking
# 0.6 20-09-2006
# - Append to the cachename if the cache is archived, found or both
# 0.5 19-09-2006
# - Separated the writing of output to a subroutine since writing to the file needs
# to be done at several places
# 0.4 19-09-2006
# - Added Hynr code for splitting hints, changed to allow for any length hint
# 0.3 19-09-2006
# - Added separate file for archived caches
# 0.2 18-09-2006
# - Working and generating files
# 0.1 18-09-2006
# - Started macro
#
# This macro will run through your database and export all the caches and child waypoints to
# separate files depending on the cache-type or cache-status. If there's a hint for the cache
# it will be added to an additional line for that cache or split over more lines if the hint
# is longer than 88 characters. Also if the comment for the child waypoints is longer than 88
# characters they too will be split. The generated CSV-files will have the same name as BMP-files
# published along with this macro thus enabling Garmin's POIloader to give the waypoint in
# each file the correct symbol according to geocaching.com. Be sure to unzip the file with the
# icons to the folder where you will put the CSV-files.
#
# Instructions for use:
# - Create a directory where you will put the CSV-files, (f.x. C:\POI),
# - Unzip the "CustomPoiIcons_1.2-1.4.zip" to that directory,
# - Copy this macro to your GSAK macro directory,
# - Run the macro,
# - When asked where to put the CSV-files, point to where you unzipped the custom icons, (f.x. C:\POI),
# - Then chose the database,
# - And finally input you geocacher name,
# - Start Garmin's POIloader and point it to the directory where you put the CSV-files and custom icons,
# - When finished you should have all your caches and child waypoints as POI's in your GPSr.
#
# DEBUG Status="on"
#
# ---------- Initial Variable Setup ----------
#
# Version check
VERCHECK Version=7.0.0.000 (You can find the latest version of GSAK in the forums at http://support.gsak.net/.)
# Save various settings for restoration later
DATASAVE Data=$d_UserFlag
$CurrentSort = $_SortBy
$CurrentFilter = SaveFilter()
$CurrentDB = $_CurrentDatabase
# Define the cachetypes, used when writing the different CSV-files,
# if you change them here also remember to change the name of the bmp-files.
$CacheTypeFull = "Traditional~Mystery~Virtual~Event~WebCam~Letterbox~Locationless~Multi~CITO~Benchmark~Other~Earth"
$CacheType = "TUVEWBLMCGOR"
$CacheTotal = RegExCount("~",$CacheTypeFull) + 1
# Define the childtypes, used when writing the different CSV-files,
# if you change them here also remember to change the name of the bmp-files.
$ChildTypeFull = "Parking Area~Trailhead~Reference Point~Stages of a Multicache~Final Location~Question to Answer"
$ChildType = "PTRSFQ"
$ChildTotal = RegExCount("~",$ChildTypeFull) + 1
# Keep track of problems that were encountered, used together with $Verbose
$ErrorLog = "Errors occured during processing:" + $_NewLine + $_NewLine
$ErrorCount = 0
# Will the macro keep you updated about the progress
$Verbose = True
# set variable to contain double quote character - needed for processing Child WP's
$QT = chr(34)
# Determine and save storage path
# It will be saved in the Macros subdirectory to the GSAK install-directory
# Set and validate some file paths
$datafilepath = $_Install + "\Macros"
IF .NOT. FolderExists($datafilepath)
$BatFile = $_Install + "\babel.bat"
$Result = PutFile($BatFile, "MD " + quote($datafilepath))
FILEOPEN File="$BatFile" Wait=yes
ENDIF
$DataFile = $datafilepath + "\GarminCsvPoiExportData.dat"
# Set up the variables to count the numbers of caches with hint split into 2 or more lines.
$HintCountDB = List("HintDB","create",";")
# Will the found, archived and caches with corrected coordinates have a prefix character.
$UsePrefix = False
# Will there be generated a line in the csv file for the hint? Defaults to True put can be changed in the form.
$OutputHint = True
# Indicate whether found caches should be filtered out. Defaults to False but can be changed in the form.
$FilterOutFound = False
# If you want to change the data in the cache-name, cache-comment, child-name or child-comment
# then search for the following text and look at the line imidiately after that:
# - CacheNameSetup
# - CacheCommentSetup
# - ChildNameSetup
# - ChildCommentSetup
#
# ---------- Code ----------
#
# Check if the data-file exist?
IF (FileExists($DataFile))
# If the file exists then read the saved values and assign them to variables
# now $line will hold the contents of the file
FILEREAD File=$datafile
# Where to save the CSV files
$csvFolder = Extract($line, ";", 1)
# Which Database to export from
$DB = Extract($line, ";", 2)
# What is your Geocacher-Name
$Me = Extract($line, ";", 3)
# Will hints be written to the files
$OutputHint = StrToBool(Extract($line, ";", 4))
# Will the found caches be sorted out
$FilterOutFound = StrToBool(Extract($line, ";", 5))
# Will the archived caches be sorted out
$FilterOutArchived = StrToBool(Extract($line, ";", 6))
# Will the TempDisabled caches be sorted out
$FilterOutDisabled = StrToBool(Extract($line, ";", 7))
ENDREAD
ELSE
# No saved file so set defaults for form
# Set the database to export POIs from.
$DB="Default"
# Set the folder to store the CSV files in.
$csvFolder = ""
# Set the username.
$Me=""
# Set whether to output the hint or not.
$OutputHint = True
# Set whether found caches will be filtered out
$FilterOutFound = False
# Set whether found caches will be filtered out
$FilterOutArchived = False
# Set whether found caches will be filtered out
$FilterOutDisabled = False
ENDIF
# ---------- Form ----------
$dblist = SysInfo("databases")
IF ShowForm($form)
IF $cancel
CANCEL Msg="Macro cancelled"
ENDIF
ELSE
CANCEL Msg="Macro cancelled"
ENDIF
# ---------- Form ----------
# Save the value into $datafile to be reused the next time the macro is run
$variables = $csvFolder + ";" + $DB + ";" + $Me + ";" + "$OutputHint" + ";" + "$FilterOutFound" + ";" + "$FilterOutArchived" + ";" + "$FilterOutDisabled"
$result = PutFile($datafile, $variables)
IF Left($result, 7) = "*Error*"
# If theres any error abort the macro
CANCEL Msg="Unable to write to $datafile!"
ENDIF
# If we get to here then the user must have clicked on the OK button
# CANCEL Msg="OK pressed"
# Remove previously saved CSV files (but not BMP-files, or any other file-type)
$EraseFiles = $csvFolder + "\*.csv"
IF FileExists($EraseFiles)
FILEERASE File=$EraseFiles
ENDIF
# Select the correct database if necessary
IF $CurrentDB <> $DB
DATABASE Name="$DB" Action=Select
ENDIF
IF $FilterOutFound
IF $FilterOutArchived
IF $FilterOutDisabled
MFILTER Expression=NOT($d_Found) AND NOT($d_Archived) AND NOT($d_TempDisabled)
ELSE
MFILTER Expression=NOT($d_Found) AND NOT($d_Archived)
ENDIF
ELSE
IF $FilterOutDisabled
MFILTER Expression=NOT($d_Found) AND NOT($d_TempDisabled)
ELSE
MFILTER Expression=NOT($d_Found)
ENDIF
ENDIF
ELSE
IF $FilterOutArchived
IF $FilterOutDisabled
MFILTER Expression=NOT($d_Archived) AND NOT($d_TempDisabled)
ELSE
MFILTER Expression=NOT($d_Archived)
ENDIF
ELSE
IF $FilterOutDisabled
MFILTER Expression=NOT($d_TempDisabled)
ELSE
MFILTER Expression=$d_Code <> ""
ENDIF
ENDIF
ENDIF
# Set this counter to tell the user how the export progresses
$ThisRecord = 0
# Iterate through the whole database, start at the first cache in the grid
GOTO Position=Top
WHILE NOT($_EOL)
# Show which record we are at
$ThisRecord = $ThisRecord + 1
IF $Verbose
IF Frac($ThisRecord/10) = 0
$Msg = "Now processing: " + "$ThisRecord" + " of " + "$_Count"
SHOWSTATUS msg="$Msg"
ENDIF
ENDIF
# I want "." instead of "," in my terrain and difficulty
$dif = Replace(",",".","$d_Difficulty", True)
$ter = Replace(",",".","$d_Terrain", True)
$csvLon = "$d_Longitude"
$csvLat = "$d_Latitude"
$csvName = ""
IF $UsePrefix
# Previously found caches will have a "*" in front of the smart-name
IF $d_Found
$csvName = "*"
ENDIF
# Archived caches will have a "-" in front of the smart-name
IF $d_Archived
$csvName = "-"
ENDIF
# Caches with corrected coordinates will have a "!" in front of the smart-name
IF $d_HasCorrected
$csvName = "!"
ENDIF
ENDIF
$By = $d_OwnerName
# Note that double quote character MUST be removed to prevent csv file problems
IF At($_Quote,$By) > 0
#replace double quotes with single quotes
$By = Replace($_Quote,"'",$By, True)
ENDIF
# Change these lines for different data in the POI-files
# - CacheNameSetup
$csvName = Quote($csvName + "%smart %typ=2/%con=2 $dif/$ter %code")
# Note that double quote character MUST be removed to prevent csv file problems
IF At($QT,$csvName) > 0
#replace double quotes with single quotes
$csvName = Replace($QT,"'",$csvName, True)
ENDIF
# - CacheCommentSetup
$csvComment = Quote("%last4 Pl:%datepl Lf:%datelf " + $By)
# Note that double quote character MUST be removed to prevent csv file problems
IF At($QT,$csvComment) > 0
#replace double quotes with single quotes
$csvComment = Replace($QT,"'",$csvComment, True)
ENDIF
# This line goes in the CSV file
$csvOut = $csvLon + "," + $csvLat + "," + $csvName + "," + $csvComment + $_NewLine
# Write first line to CSV file
GOSUB Name=WriteCacheFile
# Now check if there's a hint for the cache and if there is process it
# so it can be split if its longer than 88 characters
# only do this if the user has chosen to write hints to the files
IF Len($d_Hints) > 0 .AND. $OutputHint
# This section creates the comment text of the POI
# Many times the hint is too long and this is handled below by splitting it in two or more lines
# To try to get as much useful stuff into the comment, strip out as
# many useless characters as possible: formatting codes, double spaces, line-feeds, etc.
$csvName = ""
IF $UsePrefix
# Previously found caches will have a "*" in front of the name
IF $d_Found
$csvName = "*"
ENDIF
# Archived caches will have a "-" in front of the name
IF $d_Archived
$csvName = "-"
ENDIF
# Caches with corrected coordinates will have a "!" in front of the name
IF $d_HasCorrected
$csvName = "!"
ENDIF
ENDIF
# The lines with the hint will have the full name for the cache
$csvName = $csvName + $d_Name
$csvComment = $d_Hints
# clean up $csvComment:
# remove returns, html, etc
$csvComment = Replace($_NewLine," ",$csvComment, True)
IF At("<",$csvComment) > 0
# remove common html tags
$csvComment = Replace("
"," ",$csvComment, True)
$csvComment = Replace("
","",$csvComment, True) $csvComment = Replace("
","",$csvComment, True) ENDIF # Note that double quote character MUST be removed to prevent csv file problems IF At($QT,$csvName) > 0 #replace double quotes with single quotes $csvName = Replace($QT,"'",$csvName, True) ENDIF # Note that double quote character MUST be removed to prevent csv file problems IF At($QT,$csvComment) > 0 #replace double quotes with single quotes $csvComment = Replace($QT,"'",$csvComment, True) ENDIF IF At(" ",$csvComment) > 0 # convert 3, and then 2, sequential spaces into one # note: this if/endif could be removed to enhance speed $csvComment = Replace(" "," ",$csvComment, True) $csvComment = Alltrim(Replace(" "," ",$csvComment, True)) ENDIF # now assemble the csv data for this cache and deal with cases where 4th field (comment) is too long $CommentLength = Len($csvComment) $csvName = $csvName + " Hint" IF $commentLength <= 88 # Comment field is not too long to fit on Garmin Map60CSx (limit is 88 characters) $csvOut = $csvLon + "," + $csvLat + "," + Quote($csvName) + "," + Quote($csvComment) + $_NewLine # Write the line to CSV file GOSUB Name=WriteCacheFile ELSE # Count the number of lines the hint is split into $HintNumber = 0 # As long as there's more than 88 characters keep splitting the hint WHILE Len($csvComment) > 88 $HintNumber = $HintNumber + 1 # Determine where to split the comment when longer than 88 characters # Try to find a natural space between character 60 and 85 $Icharpos=85 WHILE ($Icharpos>60) .AND. .NOT. (SubStr($csvComment,$Icharpos,1) = " ") $Icharpos = $Icharpos-1 ENDWHILE # Assuming that no spaces where found between 60th and 87th characters of hint # split at character 85 so that we can append "..." IF $Icharpos = 60 $Icharpos = 85 ENDIF # Get the part of the comment that's to be written now $PartComment = SubStr($csvComment,1, $Icharpos) $csvOut = $csvLon + "," + $csvLat + "," + Quote($csvName + " part $HintNumber") + "," + Quote($PartComment + "...") + $_NewLine # Write line to CSV file GOSUB Name=WriteCacheFile # Cut the already written part of the string out of the comment $csvComment = "..." + Replace($PartComment,"",$csvComment, True) ENDWHILE # If there's still part of the comment left (it will now be less than 88 characters long) # then write it to the CSV-file IF Len($csvComment) > 0 $HintNumber = $HintNumber + 1 $csvOut = $csvLon + "," + $csvLat + "," + Quote($csvName + " part $HintNumber") + "," + Quote($csvComment) + $_NewLine # Write line to CSV file GOSUB Name=WriteCacheFile ENDIF # Write to the CountLog if there's more than 2 lines of hint IF $HintNumber > 0 $HintMatch = "^=$HintNumber=" $HintPOS = Val(List("HintDB","RegEx",$HintMatch)) IF $HintPOS > 0 $HintCount = List("HintDB","Item","$HintPOS") $HintNumberString = "=" + NumToStr($HintNumber) + "=" $HintCount = SubStr($HintCount,Len($HintNumberString) + 1,Len($HintCount)-Len($HintNumberString)) $HintValue = Val($HintCount) + 1 $HintCountDB = List("HintDB","Edit:$HintPOS","$HintNumberString$HintValue") ELSE $HintNumberString = "=" + NumToStr($HintNumber) + "=" $HintValueStr = "$HintNumberString" + "1" $HintCountDB = List("HintDB","add",$HintValueStr) ENDIF ENDIF ENDIF ENDIF # Now check the Child waypoints for this cache GOSUB Name=ChildWpt # Goto next cache in view GOTO Position=Next ENDWHILE # Show which record we are at so it shows the right number when the macro ends IF $Verbose $Msg = "Now processing: " + "$ThisRecord" + " of " + "$_Count" SHOWSTATUS msg="$Msg" ENDIF # Return to original database, if different IF $_CurrentDatabase <> $CurrentDB DATABASE Name=$CurrentDB Action=select ENDIF # Restore userflags, filter, and sort DATARESTORE Data=$d_UserFlag IF RESTOREFILTER($CurrentFilter, True) = 0 PAUSE Msg="Previously-set filter now would show no records. Clearing." ENDIF $sortdata = Extract($CurrentSort, "=",1) $sequence = Extract($CurrentSort, "=",2) SORT By=$sortdata Sequence=$sequence IF $Verbose #display summary information $Message = "$ThisRecord records processed." + $_NewLine + $_NewLine $Message = $Message + "Number of caches where the hint is split into 2 or more lines:" + $_NewLine + $_NewLine $HCount = 2 WHILE Val(List("HintDB","Count","")) > 0 $HintMatch = "^=$HCount=" $HintPOS = Val(List("HintDB","RegEx",$HintMatch)) IF $HintPOS > 0 $HintCount = List("HintDB","Item","$HintPOS") $HintNumberString = "=" + NumToStr($HCount) + "=" $HintCount = SubStr($HintCount,Len($HintNumberString) + 1,Len($HintCount)-Len($HintNumberString)) $HintCountDB = List("HintDB","Delete","$HintPOS") $Message = $Message + "$HCount lines of hint: $HintCount cache(s)" + $_NewLine ENDIF $HCount = $HCount + 1 ENDWHILE PAUSE Msg=$Message ENDIF #RUNPGM "C:\Garmin\PoiLoader.exe" Wait=No Parms=/silent # # ---------- SubRoutines ---------- # BEGINSUB Name=ChildWpt # Switch to Additional Waypoint table TABLE Active=Waypoints scope=Parent # Is there any additional waypoints for this cache IF $_count > 0 WHILE NOT($_EOL) # First character in the name indicates the type of child waypoint # Change these lines for different data in the POI-files # - ChildNameSetup $csvName = Left($d_cType, 1) + "-%smart-" + $d_cPrefix + " " + $d_cType # - ChildCommentSetup $csvComment = $d_cComment $csvLon = $d_cLon $csvLat = $d_cLat IF Len($csvComment) > 0 # This section creates the comment text of the POI # Sometimes the comment is too long and this is handled below by splitting it in two or more lines # To try to get as much useful stuff into the comment, strip out as # many useless characters as possible: formatting codes, double spaces, line-feeds, etc. # clean up $Comment: # remove returns, html, etc $csvComment = Replace($_NewLine," ",$csvComment, True) IF At("<",$csvComment) > 0 # remove common html tags $csvComment = Replace("","",$csvComment, True) $csvComment = Replace("
","",$csvComment, True) ENDIF # Note that double quote character MUST be removed to prevent csv file problems IF At($QT,$csvComment) > 0 #replace double quotes with single quotes $csvComment = Replace($QT,"'",$csvComment, True) ENDIF IF At(" ",$csvComment) > 0 # convert 3, and then 2, sequential spaces into one # note: this if/endif could be removed to enhance speed $csvComment = Replace(" "," ",$csvComment, True) $csvComment = Alltrim(Replace(" "," ",$csvComment, True)) ENDIF # now assemble the csv data for this cache and deal with cases where 4th field (comment) is too long $CommentLength = Len($csvComment) IF $commentLength <= 88 # Comment field is not too long to fit on Garmin Map60C(S)x (limit is 88 characters) $csvOut = $csvLon + "," + $csvLat + "," + Quote($csvName) + "," + Quote($csvComment) + $_NewLine # Write the line to CSV file GOSUB Name=WriteChildFile ELSE # Count the number of lines the hint is split into $CommentNumber = 0 # As long as there's more than 88 characters keep splitting the hint WHILE Len($csvComment) > 88 $CommentNumber = $CommentNumber + 1 # Determine where to split the comment when longer than 88 characters # Try to find a natural space between character 60 and 85 $Icharpos=85 WHILE ($Icharpos>60) .AND. .NOT. (SubStr($csvComment,$Icharpos,1) = " ") $Icharpos = $Icharpos-1 ENDWHILE # Assuming that no spaces where found between 60th and 87th characters of hint # split at character 85 so that we can append "..." IF $Icharpos = 60 $Icharpos = 85 ENDIF # Get the part of the comment that's to be written now $PartComment = SubStr($csvComment,1, $Icharpos) $csvOut = $csvLon + "," + $csvLat + "," + Quote($csvName + " #$CommentNumber") + "," + Quote($PartComment + "...") + $_NewLine # Write line to CSV file GOSUB Name=WriteChildFile # Cut the already written part of the string out of the comment $csvComment = "..." + Replace($PartComment,"",$csvComment, True) ENDWHILE # If there's still part of the comment left (it will now be less than 88 characters long) # then write it to the CSV-file IF Len($csvComment) > 0 $CommentNumber = $CommentNumber + 1 $csvOut = $csvLon + "," + $csvLat + "," + Quote($csvName + " #$CommentNumber") + "," + Quote($csvComment) + $_NewLine # Write line to CSV file GOSUB Name=WriteChildFile ENDIF # Write to the ErrorLog if there's more than 2 lines of hint IF $CommentNumber > 0 $ErrorLog = $ErrorLog + $csvName + " - Long comment: $commentNumber POI's" + $_NewLine $ErrorCount = $ErrorCount + 1 ENDIF ENDIF ENDIF GOTO Position=Next ENDWHILE ENDIF TABLE Active=Caches ENDSUB BEGINSUB name=WriteCacheFile # Called to write the data about the cache to the file # The data must be in $csvOut # Default filename # Any waypoint not in the list of geocaching.com cache-types will be put in the "Unknown" file $FileName = "Unknown" # Native cache types $Index = At($d_CacheType,$CacheType) IF $Index > 0 $FileName = Extract($CacheTypeFull,"~",$Index) ENDIF # Found status takes precedence over cachetype IF $d_Found $FileName = "Found" ENDIF # Corrected coordinates will be indicated with a green check-mark, only meaningfull for multi's and mystery's IF $d_HasCorrected $FileName = $FileName + " Solved" ENDIF # Disabled status takes precedence over cachetype, found-status and corrected coordinates IF $d_TempDisabled $DisabledIndex = At($d_CacheType,$CacheType) IF $Index > 0 $FileName = Extract($CacheTypeFull,"~",$DisabledIndex) + " Disabled" ENDIF ENDIF # Archived status takes precedence over cachetype, found-status, corrected coordinates and disabled-ness IF $d_Archived $FileName = "Archived" ENDIF # Any cache that I have placed will be indicated as such, independent of type # Will only match if your name is part of the OwnerName $Index = At($Me,$d_OwnerName) IF $Index > 0 $FileName = "Placed" ENDIF $FileName = "\" + $FileName + ".csv" $error = Appendfile($csvFolder + $FileName, $csvOut) ENDSUB BEGINSUB name=WriteChildFile # Called to write the data about the child to the file # The data must be in $csvOut # Default filename $FileName = "UnknownChild" $ChildType1 = Left($d_cType, 1) $Index = At($ChildType1,$ChildType) IF $Index > 0 $FileName = Extract($ChildTypeFull,"~",$Index) ENDIF $FileName = "\" + $FileName + ".csv" $error = Appendfile($csvFolder + $FileName, $csvOut) ENDSUB Varname=$form Name = Form1 Type = Form Caption = POI Export for Garmin v. 1.7 height = 421 width = 505 left = 466 top = 378 Name = Label1 Type = Label left = 160 top = 6 Caption = POI Export for Garmin color = 16744448 style = bold size = 13 height = 20 width = 178 Name = Label2 Type = Label left = 10 top = 45 Caption = Database to export height = 13 width = 90 Name = db Type = Combobox left = 160 top = 40 values = $dblist height = 21 width = 145 Name = Label3 Type = Label left = 10 top = 155 Caption = Folder to save CSV files height = 13 width = 112 Name = csvFolder Type = Folder left = 160 top = 150 width = 250 height = 21 Name = Label4 Type = Label left = 10 top = 205 Caption = Geocaching Name height = 13 width = 89 Name = me Type = Edit left = 160 top = 200 height = 21 width = 79 Name = ok type = Button top = 350 left = 125 caption = OK height = 25 width = 75 Name = cancel type = Button top = 350 left = 300 caption = Cancel height = 25 width = 75 Name = Warning1 type = Label left = 160 top = 78 caption = ***Warning*** color = 255 style = bold size = 11 height = 20 width = 300 Name = Warning2 type = Label left = 60 top = 98 caption = All CSV files in the destination folder will be deleted before generation color = 255 style = bold size = 9 height = 20 width = 400 Name = Warning3 type = Label left = 60 top = 118 caption = (but not other types of files, so your .BMP or .GPX files will be safe) color = 255 style = bold size = 9 height = 20 width = 400 Name = Label5 type = Label left = 10 top = 250 Caption = Output hint? height = 13 width = 89 Name = OutputHint type = CheckBox left = 160 top = 250 height = 17 width = 15 Name = Label6 type = Label left = 240 top = 250 Caption = Filter out found caches? height = 13 width = 130 Name = FilterOutFound type = CheckBox left = 390 top = 250 height = 17 width = 15 Name = Label7 type = Label left = 10 top = 300 Caption = Filter out archived caches? height = 13 width = 130 Name = FilterOutArchived type = CheckBox left = 160 top = 300 height = 17 width = 15 Name = Label8 type = Label left = 240 top = 300 Caption = Filter out disabled caches? height = 13 width = 130 Name = FilterOutDisabled type = CheckBox left = 390 top = 300 height = 17 width = 15