Custom built files

This macro was contributed by Peter Gavin 

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:\nasm\nasmw.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

Posted on: November 29, 1998.