MapBasic WorkshopEksterne teksteditorer
• Peter Horsbøll Møller• Juni 2011
1
Agenda
• MapBasic compiler
• Opsætning af UEStudio
• Opsætning af Notepad++
MapBasic compiler
MapBasic kompiler parametre
• Mapbasic.exe-Nosplash : Viser ikke ”splash-billede” ved opstart – sparer tid-D filename1 filename2: kompilerer filerne angivet efter –D-L filename1: linker filen efter –L
• Disse parametre kan kombineres:MapBasic.exe –Nosplash –D filename1.mb filename2.mbMapBasic.exe –Nosplash –D filename1.mb –L filename.mbp
• Hvis du anvender –D eller –L parametrene vil MapBasic lukke ned efter at have kompileret/linket filerne
• Eventuelle fejl vil blive skrevet til en fil med samme navn som den fil, der bliver kompileret/linket men med filtypen .err
Bat-filer til UEStudio/UltraEdit
• Compile.bat@Echo Off
"C:\MapInfo\MapBasic\Mapbasic.exe" -NOSPLASH -D ""% 1.mb"
IF not exist ""%1.err"" echo compilation successful (v10.5) Module: %1
if exist ""%1.err"" type ""%1.err""
• Link.bat@Echo off
"C:\MapInfo\MapBasic\Mapbasic.exe" -NOSPLASH -L ""% 1.mbp""
IF not exist ""%1.err"" echo Project Linking succes sful (v10.5)
if exist ""%1.err"" type ""%1.err""
Bat-filer til Notepad++
• Compile.bat
@echo offsetlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSIONrem Compile_MB.batrem This file is used to compile a MapBasic Program Source file from within Notepad++
rem Check that the file is a MapBasic Program Source fileif /i %~x1 NEQ .mb (
echo Error: file %~dpnx1 is not a MapBasic Program Source file ^(^*.mb^)echo.pause
) else (
echo Compiling %~dpnx1"C:\Program Files\MapInfo\MapBasic\MAPBASIC.EXE" -s erver -D %1
if exist "%~dpn1.err" (echo Errors in compilationecho Press a key to open error log: %~dpn1.err.echo.pause"C:\Program Files\Notepad++\notepad++.exe" "%~dpn1. err"
))
Bat-filer til Notepad++
• Link.bat
@echo offsetlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSIONrem Link_MB.batrem This file is used to link a MapBasic Project fil e from within Notepad++
rem Check that the file is a MapBasic Project fileif /i %~x1 NEQ .mbp (
echo Error: file %~dpnx1 is not a MapBasic Project file ^(^*.mb^)echo.pause
) else (
echo Linking %~dpnx1"C:\Program Files\MapInfo\MapBasic\MAPBASIC.EXE" -s erver -L %1
if exist "%~dpn1.err" (echo Errors in linkingecho Press a key to open error log: %~dpn1.err.echo.pause"C:\Program Files\Notepad++\notepad++.exe" "%~dpn1. err"
))
Bat-filer til Notepad++ 1 af 3
• Link.bat – kompiler alle moduler og link så projekt
• @echo offsetlocal enabledelayedexpansion enableextensions
set MBExecPath="C:\Program Files\MapInfo\MapBasic\MAP BASIC.EXE"set NPPExecPath="C:\Program Files\Notepad++\notepad++ .exe"
echo MapBasic Project File ^(^*.mbp^) Linker
if not exist !MBExecPath! (echo Cannot find MapBasic, expecting it to be here:echo !MBExecPath!pausegoto :EOF)
if not exist !NPPExecPath! (echo Cannot find Notepad++, expecting it to be here:echo !NPPExecPath!pausegoto :EOF)
rem Check that the file is a MapBasic Project Fileif /i "%~x1" NEQ ".mbp" (
echo Error: file %~dpnx1 is not a MapBasic Project File ^(^*. mbp^)pausegoto :EOF)
echo First, all the source files will be compiled:
Bat-filer til Notepad++ 2 af 3
• Link.bat – kompiler alle moduler og link så projekt
• for /f "usebackq skip=1 delims== tokens=2" %%j in (%1) do (if /i %%~xj EQU .mbo (
rem Check that source code existsif exist "%~dp1%%~nj.mb" (
echo Compiling %%~nj.mb!MBExecPath! -server -D "%~dp1%%~nj.mb"if exist "%~dp1%%~nj.err" (
echo Errors in compilationecho Press a key to open error log: %~dp1%%~nj.err.pause!NPPExecPath! "%~dp1%%~nj.err"goto :EOF
)) else (
echo Source file not present:echo %%~nj.mbecho Using previously compiled object file instead:echo %~dp1%%jif not exist "%~dp1%%j" (
echo Error: cannot find source code ^(^*.mb^)echo or object file ^(^*.mbo^) for %%~njpausegoto :EOF
))
))
Bat-filer til Notepad++ 3 af 3
• Link.bat – kompiler alle moduler og link så projekt• echo.
echo Ready to link the MapBasic Project File:echo.echo Linking %~1!MBExecPath! -server -L "%~dpnx1"if exist "%~dpn1.err" (
echo Errors in linkingecho Press a key to open error log: %~dpn1.err.pause!NPPExecPath! "%~dpn1.err"goto :EOF
)
echo.echo Completedecho.echo Ready to run %~n1.mbxecho.echo Press Ctrl-C if you do not want to run the applicationecho.pause"%~dpn1.mbx"
Auto completion
• Auto completion hjælper dig med at finde og stave til funktioner og konstanter.
• Auto Compleation kan aktiveres med Ctrl+Space – det vil vise en liste med mulige match på det ord, som du netop er ved at skrive
• Hverken UEStudio eller Notepad++ kender MapBasic, så vi er nødt til at levere de nødvendige filer med MapBasic ord, funktioner og konstanter
Auto completion – UEStudio/UltraEdit
• Advanced > Configuration, Editor > Word wrap/Tab settings, udpeg Auto-complete fil med Browse
Auto Completion – Notepad++
Notepad++ version 5.0 (frigivet juli 2008) og nyere versio ner: mapbasic.xml
Hent filen mapbasic.xml og placer den i \plugins\APIs i Notepad++ installationsmappen. (f.eks. C:\Program Files\Notepad++\plugins\APIs\mapbasic.xml).
Notepad++ version 4.9.2 og ældre versioner: mapbasic.api• Hent filen mapbasic.api og placer den i \plugins\APIs i Notepad++
installationsmappen. (f.eks. C:\Program Files\Notepad++\plugins\APIs\mapbasic.api).
• Ovenstående filer kan eventuelt hentes på denne hjemmeside: http://www.twiav.nl/php/mapbasic.php#shac
Opgave
• Konfigurer din teksteditor med Auto Completion
Syntax highlighting
• Syntax highlighting gør det nemme at gennemse din kode, eftersom du ud fra farve eller fonttype får en bedre oversigt over din kildekode
Syntax highlighting – UEStudio/UltraEdit
• Advanced > Configuration, Editor Display > Syntax highlighting, udpeg “wordlist”-fil (wordfile.txt) med knappen Browse
• Wordlist-filen indeholder beskrivelse af forskellige sprog, som UEStudio kan understøtte.
Syntax Highlighting
• Som udgangspunkt kender Notepad++ en lang række sprog/formater. MapBasic er dog ikke understøttet som standard, du skal der for selvtilføje dette.
• Hent filen userDefineLang.xml og placer den i denne mappe: %USERPROFILE%\Application Data\Notepad++ (f.eks. C:\Docs and Setts\my_user_name\ApplicationData\Notepad++\userDefineLang.xml).
• Vær opmærksom på at hvis du allerede har denne fil i denne mappe, skal du tilføje indholdet fra ovenstående fil til denne fil.
• Nu vil du se en syntax highlighting for dine filer via Language > MapBasic for din fil. Dette vil virker for følgende MapBasic og MapInfo Professional filtyper: *.MB, *.DEF, *.TAB and *.WOR.
• Ovenstående fil kan eventuelt hentes på denne hjemmeside: http://www.twiav.nl/php/mapbasic.php#shac
Opgave
• Konfigurer din teksteditor med syntax highlighting
Kopilere
• Når man bruger en ekstern teksteditor, skal man kalde MapBasic kompileren for at få kompileret sin kildekode til enten en mbx eller en mbo.
• Det gør man ved at sende navnet på den aktive fil til en bat-fil, som efterfølgende kalder MapBasic kompileren med –D parameteren
Kompile fra UEStudio/UltraEdit
• Advanced > Tool Configuration• %p%n referer til den aktuelt aktive fil i UEStudio
Kompiler med Notepad++
• Kopier kompilerings bat-filen til Notepad++ til Notepad++ installationsmappen. (f.eks. C:\Program Files\Notepad++\Compile_MB.bat).
• Tilpas Notepad++ til at kunne kalde denne batch-fil ved at tilpasseshortcuts.xml. Du finder denne fil i %USERPROFILE%\Application Data\Notepad++ (f.eks. C:\Docs and Setts\my_user_name\ApplicationData\Notepad++\shortcuts.xml).
• Tilføj nedenstående linje til <UserDefinedCommands> tag:
<Command name="Compile MapBasic" Ctrl="yes" Alt="no " Shift="no" Key="49"> $(NPP_DIRECTORY)\Compile_MB.bat"$(FULL_CURRENT_PATH)"</Command>
• Det vil tilføje et menupunkt i Run menuen: Run > Compile MapBasic (med genvejstasten Ctrl+1).
• Vær opmærksom på at du ikke kan tilpasse shortcuts.xml mens Notepad++ kører. Så brug enten en anden teksteditor eller kopier filen til et andet sted, ret den, luk Notepad++ og kopier den tilbage og genstart Notepad++.
Opgave
• Konfigurer din teksteditor med en genvej til Kompilering
Linke
• Når man bruger en ekstern teksteditor, skal man kalde MapBasic kompileren for at få linke sine MapBasic moduler (mbo’er) til enten en mbx.
• Det gør man ved at sende navnet på den aktive fil eller det aktive projekt til en bat-fil, som efterfølgende kalder MapBasic kompileren med –L parameteren
Linking using UEStudio
• Advanced > Tool Configuration• %rp%rn referer til det aktuelt aktive UEStudio projekt
Linke med Notepad++
• Kopier linke- bat-filen til Notepad++ til Notepad++ installationsmappen. (f.eks. C:\Program Files\Notepad++\Link_MBP.bat).
• Tilpas Notepad++ til at kunne kalde denne batch-fil ved at tilpasseshortcuts.xml. Du finder denne fil i %USERPROFILE%\Application Data\Notepad++ (f.eks. C:\Docs and Setts\my_user_name\ApplicationData\Notepad++\shortcuts.xml).
• Tilføj nedenstående linje til <UserDefinedCommands> tag:
<Command name=“Link MapBasic Project" Ctrl="yes" Al t="no" Shift=“yes" Key="49"> $(NPP_DIRECTORY)\Link_MBP.bat"$(FULL_CURRENT_PATH)"</Command>
• Det vil tilføje et menupunkt i Run menuen: Run > Link MapBasic Project (med genvejstasten Ctrl+Shift+1).
• Vær opmærksom på at du ikke kan tilpasse shortcuts.xml mens Notepad++ kører. Så brug enten en anden teksteditor eller kopier filen til et andet sted, ret den, luk Notepad++ og kopier den tilbage og genstart Notepad++.
Opgave
• Konfigurer din teksteditor med en genvej til link af MapBasic projekt
Templates, Snippets and QuickText
• Skabeloner gør det nemt at indsætte en bestemt mængde tekst i en eksisterende fil på den aktuelle position
• Skabeloner er ikke understøttet i MapBasic Editoren, men det understøttes i de fleste andre teksteditorer, f.eks. UltraEdit, UEStudio, m.fl.
• Andre teksteditorer kan anvende andre navne på samme eller lignende funktionalitet
• Kan bruges til nemt at oprette nye/tomme procedurer og funktioner,MapBasic projektfiler, nye MapBasic moduler mm.
Skabeloner i UEStudio
• Advanced > Display/Modifytemplates
• Her kan du administrere og tilpasse dine skabeloner
• UEStudio ’06 gemmer skabelonerne i filen UETMPLTE.DAT. Du kanangive placering af den via Advanced > Configuration, Directories > Template directory
UEStudio v10/UltraEdit v17 gemmer skabelonerne i denne fil: C:\Users\username\AppData\Roaming\IDMComp\UEStudio\programmer.te1 eller Power User.te1 – afhængig af din brugerprofil i UEStudio
Template – New Function
Template – New MapBasic Module
Template – New Main Module
Biblioteker
Biblioteker – UEStudio/UltraEdit
• Advanced > Configuration, Directories, specify:– Default save directory– Default open directory– Default project directory– Template directory, discussed later
Genvejstaster
Genvejstaster – UEStudio/UltraEdit
• Advanced > Configuration,Key Mapping• Angiv genvejstaster (shortcut keys) for
– AdvancedUserTool1 – n: som anvendes til kompilering, linkning mm
Genvejstaster – Notepad++
• Settings, Shortcut Mapper
Opgave
• Tilpas dine genvejstaster efter eget ønske i din teksteditor
MapBasic projects
MapBasic Projekt filtyper
• .def: definitionsfil, bruges ofte til definition af funktioner og procedurer. Kan også indeholde konstanter. Anvendes via Include kommandoen
• .mb: Dette er kildekoden, som udgør selve programmet. Vil ofteinkludere en eller flere .def filer. Kompileres til en .mbx eller .mbo
• .mbo: et kompileret modul (MapBasic Object). Et sådant oprettes, nåret modul ikke indeholder en Main procedure eller hvis det “henviser”til andre moduler (anvender funktioner i andre moduler).
• .mbp: Dette er MapBasic projekt filen. Angiver hvilke moduler (.mbo) der skal linkes sammen til en .mbx.
• .mbx: Dette er den endelige applikation (MapBasic Executable) somkan køres i MapInfo Professional/MapInfo Professional Runtime
Definitionsfiler (.def)DEBUGlib.def
Defaults.def
ConfigFileLib.def
Kilekode (.mb)
MapBasic Projektfil (.mbp)
NodesDisplayer.mbp
WindowHelper.mbp
Kompilere ikke-projektbaseret
• Ikke-projektbaseret, simpelt
compile
compile
.mb .mbx
.mbx.mb .def
• Ikke-projektbaseret, avanceret
Kompilere og linke projektbaseret
• Projektbaseret
compile .mbo.mb .def
compile .mbo.mb .def
link .mbx
Kompilere og linke projektbaseret
• Projektbaseret, med anvendelse af delte moduler
.mbo.def
compile .mbo.mb .def
link .mbx
Oprette et nyt projekt – UEStudio projekt
• Start UEStudio• Vælg Project > New Project/Workspace > Create new project• I Specify Project File dialogboksen oprettes en ny mappe med
samme navn som projektet, her anvendes ”Example1”. I denne mappe oprette en ny mappe med navnet ”mb code”
• Navngiv projektet som den første mappe, her ”Example1”• Tryk på OK/Save• Tryk på Close i Project Settings dialogboksen
Oprette et nyt projekt – MapBasic projekt
• Opret en ny fil – det vil blive til MapBasic projektfilen (mbp)• Brug skabelonen”New MapBasic Project” til at indsætte den
basale information, ændre navnet på applikationen og angiv også navnet på hoved MapBasic kildekodefilen i den sidste linje
• Gem denne fil i den netop oprettede mappe Example1\mb code. Anvend samme navn som UEStudio projektfilen, men filtypen mbp
Opret et nyt projekt – Hoved kildekodefilen
• Opret en ny fil – dette vil blive til MapBasic hoved kildekodefilen• Anvend skabelonen ”New Main Module” til at indsætte det
grundlæggende. Tilpas værdien af xProgram og xProgramMenu• Gem denne fil i den netop oprettede mappe Example1\mb code.
Brug samme navn som projektet, tilføj Menu eller Main, og anvend filtypen mb
Opret nyt projekt – Delte moduler
• Kopier de delte moduler til det nye projekt i en undermappe med navnet ”library”. Kan evt. gøres via en batch-fil via User Tools
• Kompiler hoved MapBasic kildefilen• Link MapBasic projektet• Kør applikationen i MapInfo Pro
MapBasic Delte Moduler
Anvende delte moduler i et projekt
• Delte moduler ændres også over tid. Bagudkompatibilitet kan blive et problem!
• Tre måder at anvende delte moduler:1. Link dem via deres aktuelle position2. Kopier dem til det aktuelle projekt3. Kopier kun .def og .mbo til det aktuelle projekt (og gør dem
skrivebeskyttede)
• Kopier via en batch-fil:@Echo off
xcopy ""library\*.mbo"" ""%1Library\"" /D /S /Y
attrib +R ""%1Library\*.mbo""
xcopy ""library\*.def"" ""%1Library\"" /D /S /Y
attrib +R ""%1Library\*.def""
Et lille eksempel
• Liste med åbne tabeller• Det er nødvendigt at gennemløbe de aktuelt åbne tabeller
Links
• Den danske PBBI blog: danmark.pbbiblogs.com
• PBBI Benelux Blog benelux.pbbiblogs.com
• MapInfo-L groups.google.com/group/mapinfo-l
• MI Pro tutorials: www.pbinsight.com/support/training/video-tutorials
• Road Maps: roadmap.pbinsight.com/
• MI Pro documentation: www.pbinsight.com/support/product-documentation/details/mapinfo-professional
• Download MapBasic: www.pbinsight.com/support/product-downloads/for/mapbasic
• MI Pro trial: www.pbinsight.com/support/product-downloads/for/mapinfo-professional
• PBBI Location Intelligence Blog: li.pbbiblogs.com/
• Other documentation: www.pbinsight.com/support/product-documentation/
• Other download: www.pbinsight.com/support/product-downloads/
Questions!
Peter Horsbøll Mø[email protected]