Has anybody tried to use the "built-in" macro @environ?
I tried to use it by using EQU and TEXTEQU. This is the code fragment I used:
En1 equ @Environ
En2 equ "@Environ"
En3 equ <@Environ>
En4 equ <"@Environ">
En5 textequ @Environ
En6 textequ "@Environ"
En7 textequ <@Environ>
En8 textequ <"@Environ">
The results after assembly:
En1 thru En4 sets the equate to @Environ or "@Environ"
En5 and En6 results in error : error text item required
En7 and En8 sets the text equate to @Environ and "@Environ"
so how do you use it? Masm has NO info!
You can set LIB,INCLUDE,BIN variables in environment and get that.
%echo @Environ(<windir>)
%incpath textequ <@Environ(<windir>)>
%include <incpath\\masm32rt.inc>
output in my machine while assembling is:
C:\windows
: fatal error A1000: cannot open file : C:\windows\masm32rt.inc <<<<<yes, this file is sitting in other directory
;------------------------------------------
~/.wine/drive_c$ wine cmd
Microsoft Windows 5.2.3790
C:\>set include=c:\masm32\include
C:\>set lib=c:\masm32\lib
C:\>set bin=c:\masm32\bin
C:\>echo %bin%
c:\masm32\bin
Look here.
https://docs.microsoft.com/en-us/cpp/assembler/masm/at-environ?view=msvc-170 (https://docs.microsoft.com/en-us/cpp/assembler/masm/at-environ?view=msvc-170)
Build this as a console app in MASM32.
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \masm32\include\masm32rt.inc
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
comment * -----------------------------------------------------
Build this template with
"CONSOLE ASSEMBLE AND LINK"
----------------------------------------------------- *
.data?
value dd ?
.data
item dd 0
.code
start:
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
call main
inkey
exit
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
; @Environ Returns values of environment variables during assembly.
main proc
% echo -------------------
% echo @Environ(path)
% echo -------------------
ret
main endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end start
get ancient stuff like this from the following URL.
https://www.mikrocontroller.net/attachment/450367/MASM61PROGUIDE.pdf (https://www.mikrocontroller.net/attachment/450367/MASM61PROGUIDE.pdf)
Some extra variations.
% echo -------------------
% echo path = @Environ(path)
% echo tmp = @Environ(tmp)
% echo OS = @Environ(OS)
% echo CPU = @Environ(PROCESSOR_IDENTIFIER)
% echo Ver = @Environ(PROCESSOR_REVISION)
% echo Arch = @Environ(PROCESSOR_ARCHITECTURE)
% echo Pshl = @Environ(PSModulePath)
% echo WinD = @Environ(windir)
% echo -------------------
Steve,
Quote from: hutch-- on May 07, 2022, 12:01:07 PM
Some extra variations.
% echo -------------------
% echo path = @Environ(path)
% echo tmp = @Environ(tmp)
% echo OS = @Environ(OS)
% echo CPU = @Environ(PROCESSOR_IDENTIFIER)
% echo Ver = @Environ(PROCESSOR_REVISION)
% echo Arch = @Environ(PROCESSOR_ARCHITECTURE)
% echo Pshl = @Environ(PSModulePath)
% echo WinD = @Environ(windir)
% echo -------------------
wow, I didn't know that. Good work. :thumbsup:
There are 13 usage examples in the latest (http://masm32.com/board/index.php?topic=94.0) \Masm32\MasmBasic\MasmBasic.inc
Works in 64 bit MASM as well.
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \masm32\include64\masm64rt.inc
.code
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
entry_point proc
USING r12
SaveRegs
conout "Howdy, your new console template here.",lf,lf
% echo -------------------
% echo path = @Environ(path)
% echo tmp = @Environ(tmp)
% echo OS = @Environ(OS)
% echo CPU = @Environ(PROCESSOR_IDENTIFIER)
% echo Ver = @Environ(PROCESSOR_REVISION)
% echo Arch = @Environ(PROCESSOR_ARCHITECTURE)
% echo Pshl = @Environ(PSModulePath)
% echo WinD = @Environ(windir)
% echo -------------------
waitkey
RestoreRegs
.exit
entry_point endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end
include \masm32\include\masm32rt.inc
.code
start:
tmp$ CATSTR <chr$(">, @Environ(PROCESSOR_IDENTIFIER), <")>
MsgBox 0, tmp$, "Your cpu:", MB_OK
ret
end start
This works OK as well.
mov pbuf, ptr$(ebuf)
invoke GetEnvironmentVariable,"PROCESSOR_IDENTIFIER",pbuf,260
conout pbuf,lf
Quote from: hutch-- on May 13, 2022, 08:48:35 PM
invoke GetEnvironmentVariable,"PROCESSOR_IDENTIFIER",pbuf,260
How would the Assembler interpret invoke GetEnvironmentVariable,
"PATH",pbuf,4096 ? On my machine, using ML64, it crashes in RtlInitAnsiStringEx.
Here are a few more.
LOCAL hLib :QWORD
LOCAL pGetActiveProcessorCount :QWORD
LOCAL pGetMaximumProcessorCount :QWORD
SaveRegs
mov hLib, rvcall(GetModuleHandle,"kernel32.dll")
mov pGetActiveProcessorCount, rvcall(GetProcAddress,hLib,"GetActiveProcessorCount")
mov pGetMaximumProcessorCount, rvcall(GetProcAddress,hLib,"GetMaximumProcessorCount")
mov pbuf, ptr$(ebuf)
invoke GetEnvironmentVariable,"PROCESSOR_IDENTIFIER",pbuf,260
conout pbuf,lf
invoke GetEnvironmentVariable,"PROCESSOR_REVISION",pbuf,260
conout "cpu revision ",pbuf,lf
invoke GetEnvironmentVariable,"PROCESSOR_ARCHITECTURE",pbuf,260
conout "cpu architecture ",pbuf,lf
rcall pGetActiveProcessorCount,0FFFFh
conout "active cpu count ",str$(rax),lf
rcall pGetMaximumProcessorCount,0FFFFh
conout "maximum cpu count ",str$(rax),lf
:biggrin:
mov pbig, ptr$(bpth)
invoke GetEnvironmentVariable,"PATH",pbig,4096
conout pbig,lf
Result
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;d:\syspath\;C:\Program Files\dotnet\;C:\Users\hutch\AppData\Local\Microsoft\WindowsApps
So how does the assembler distinguish between "PATH" (=address to a string) and "PATH" (=a DWORD passed by value)? Just curious :rolleyes:
Huh ?
The code works on one of my Xeon's as well, no problems.
Intel64 Family 6 Model 63 Stepping 2, GenuineIntel
C:\Users\hutch\AppData\Local\ActiveState\StateTool\release;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;d:\syspath;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Windows\System32\OpenSSH\;C:\Users\hutch\AppData\Local\Microsoft\WindowsApps;
cpu revision 3f02
cpu architecture AMD64
active cpu count 24
maximum cpu count 24
Press any key to continue...
To your question, either quoted text or a QWORD ptr to the text.
Quote from: hutch-- on May 13, 2022, 09:47:31 PM
To your question, either quoted text or a QWORD ptr to the text.
So your
invoke macro changes the behaviour of good ol' ML 32. Good to know :thumbsup:
:biggrin: