News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

A simple space-saving macro

Started by Larry Hammick, November 22, 2009, 05:39:34 PM

Previous topic - Next topic

Larry Hammick

It would go in windows.inc or whatever file contains your favorite macros.
includem MACRO m1,m2,m3,m4,m5,m6,m7,m8,m9,m10
   IRP s,<m1,m2,m3,m4,m5,m6,m7,m8,m9,m10>
      IFB <s>
         EXITM
      ENDIF
      include \masm32\include\s.inc
      includelib \masm32\lib\s.lib
   ENDM
ENDM

so, for example, you can go
includem user32,kernel32,gdi32
instead of this familiar stuff
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\gdi32.inc
includelib \masm32\lib\gdi32.lib



dedndave

a lot of us just use "include \masm32\include\masm32rt.inc"
you may want to take a look inside that file to see what it has
although - nice macro, anyways

japheth


includem MACRO m1,m2,m3,m4,m5,m6,m7,m8,m9,m10
   IRP s,<m1,m2,m3,m4,m5,m6,m7,m8,m9,m10>
      IFB <s>
         EXITM
      ENDIF
      include \masm32\include\s.inc
      includelib \masm32\lib\s.lib
   ENDM
ENDM


using VARARG qualifier simplifies this macro:


includem MACRO m:VARARG
   IRP s,<m>
      include \masm32\include\s.inc
      includelib \masm32\lib\s.lib
   ENDM
ENDM


jj2007

Quote from: dedndave on November 22, 2009, 06:42:09 PM
a lot of us just use "include \masm32\include\masm32rt.inc"

One might suspect that assembly takes longer if unnecessary files are being included. Here are some timings:
Manual as below:
JWasm 290
ml 460

masm32rt.inc:
JWasm 310
ml 510

MasmBasic.inc (includes masm32rt.inc plus many macros):
JWasm 270
ml 480



Conclusion: It doesn't matter. Be lazy and use masm32rt.inc
(but the macro is nice and useful anyway :thumbu)

      .486                                      ; create 32 bit code
      .model flat, stdcall                      ; 32 bit memory model
      option casemap :none                      ; case sensitive

      include \masm32\include\windows.inc       ; main windows include file
      include \masm32\include\masm32.inc        ; masm32 library include
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc

      include \masm32\macros\macros.asm         ; masm32 macro file
      includelib \masm32\lib\masm32.lib         ; masm32 static library
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib

.code
start:
MsgBox 0, "Hello World", "Hi", MB_OK
exit ; short form of invoke ExitProcess, 0

end start

Larry Hammick


hutch--

Larry,

You may like thios one, its in the tail end of the masm32 macros file.


comment * -------------------------------------------------

        The "uselib" macro allows names that are used for
        both include files and library file to be used in a
        list without extensions. Note the following order
        of include files where WINDOWS.INC should be
        included first then the main macro file BEFORE this
        macro is called.

        include \masm32\include\windows.inc
        include \masm32\macros\macros.asm
        uselib masm32,gdi32,user32,kernel32,Comctl32,comdlg32,shell32,oleaut32,msvcrt

        ------------------------------------------------- *

    uselib MACRO args:VARARG
      LOCAL acnt,buffer,var,lbl,libb,incc,buf1,buf2
      acnt = argcount(args)
      incc equ <include \masm32\include\>
      libb equ <includelib \masm32\lib\>
      var = 1
    :lbl
      buffer equ getarg(var,args)

      buf1 equ <>
      buf1 CATSTR buf1,incc,buffer,<.inc>
      buf1
      ;; % echo buf1

      buf2 equ <>
      buf2 CATSTR buf2,libb,buffer,<.lib>
      buf2
      ;; % echo buf2

      var = var + 1
      IF var LE acnt
        goto lbl
      ENDIF
    ENDM

  ; -----------------------------------------------
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php