Custom built files

One really annoying thing about DevStudio is that it doesn’t let you add a new file type with special
build settings, and have those settings apply to every file of that type that you add. (Well,
there is always the “Hack the Registry!!!” solution…) These are just a couple of macros I slapped
together to make that (a little) easier. I designed these originally to add assembly files to your
project, using NASM (a cool little freeware assembler [that creates Win32 objs!] available
here) but they can be very easily hacked to work with
any file type and build command line imaginable. (A little more hacking would be required for a
multi-line build command.) The first macro adds a new assembly file, the second one adds an
assembly file you’ve already written. Just change your path to the executable file in the “NASMPath”
variable, and the command line in “NASMSwitches”. It’ll ask you for the filename in both cases; the
first one creates a file with that name, the second will just add that file to your project.
Unfortunately, no file dialog is available, or else you could just browse to it. Instead, you need to
enter the full path to the ASM file. I haven’t tested it with only a filename, so I’m not sure what
directory DevStudio will use by default. The first macro even increments the filename each time you
create a new one, and adds the file to the project’s current directory.


Option Explicit

‘ This is the path to nasmw.exe

Public Const NASMPath = “C:nasmnasmw.exe”
Public Const NASMSwitches = ” -f win32 “”$(InputPath)”” -o “”$(ProjDir)$(IntDir)” + _
“$(InputName).obj”””

‘ The total number of ASM files created so far

Private ASMFilesCreated
ASMFilesCreated = 1

Sub AddNewAssemblyFile()
‘Description: Add a new Assembly File to your project
Dim TempConfiguration
Dim TempDocument
Dim TempFilename
Dim TempBackSlashPosition
Dim CurrentProject
Dim FileSystem

Set CurrentProject = Application.ActiveProject
TempFilename = “Asm” + CStr(ASMFilesCreated) + “.asm”

If CurrentProject.Type <> “Build” Then
MsgBox “This project is not a build project.”

Else

ASMFilesCreated = ASMFilesCreated + 1

TempFilename = InputBox(“Enter the filename:”, “Add ASM File”, _
TempFilename)

If TempFileName = “” Then Exit Sub

TempBackSlashPosition = InStrRev(CurrentProject.FullName, “”)

TempFilename = Left(CurrentProject.FullName, TempBackSlashPosition) + TempFilename

Application.Documents.Add “Text”
Application.ActiveDocument.Save(TempFilename)

CurrentProject.AddFile TempFileName

For Each TempConfiguration In CurrentProject.Configurations
TempConfiguration.AddCustomBuildStepToFile TempFilename, NASMPath + _
NASMSwitches, “$(ProjDir)$(IntDir)$(InputName).obj”, _
“Assembling $(InputName).asm…”
Next

End If

End Sub

Sub AddExistingAssemblyFile()
‘Description: Add an existing Assembly File to your project
Dim TempConfiguration
Dim TempDocument
Dim TempFilename
Dim TempBackSlashPosition
Dim CurrentProject
Dim FileSystem

Set CurrentProject = Application.ActiveProject
TempFilename = “Asm” + CStr(ASMFilesCreated) + “.asm”

If CurrentProject.Type <> “Build” Then
MsgBox “This project is not a build project.”

Else

ASMFilesCreated = ASMFilesCreated + 1

TempFilename = InputBox(“Enter the filename:”, “Add ASM File”, TempFilename)

If TempFileName = “” Then Exit Sub

CurrentProject.AddFile TempFileName

For Each TempConfiguration In CurrentProject.Configurations
TempConfiguration.AddCustomBuildStepToFile TempFilename, NASMPath + _
NASMSwitches, “Assembling $(InputName).asm…”
Next

End If

End Sub

More by Author

Must Read