EuroAssembler Index Manual Download Source Macros


Sitemap Links Forum Tests Projects

twinapi.htm

This program is designated for demonstration and testing of the base functions from 32bit Windows Application Programming Interface macrolibrary winapi.htm : WinAPI, GetArgCount, GetArg, StdInput, StdOutput, TerminateProgram.

Format
PE 32bit
Platform
MS Windows
Build
euroasm twinapi.htm
Run
twinapi arg1 arg2 ...
See also
tdosapi.htm, twinabi.htm.
twinapi PROGRAM Format=PE,Width=32,Entry=Main:
         INCLUDE winapi.htm, cpuext%^WIDTH.htm
Main:    PROC
         GetArgCount     ; Count the command-line arguments.
         JC .Abort:
         MOV [ArgCount],ECX
         MOV EAX,ECX
         StoD ArgCount$  ; Convert binary number EAX to a decimal string.
         JC .Abort:
         StdOutput =B"%^PROGRAM launched with ", ArgCount$, =B" arguments:", Eol=Yes
         JC .Abort:
         SUB EBX,EBX     ; EBX will be the ordinal number of each argument.
.EchoArg:CMP EBX,[ArgCount]
         JA .EchoInp:    ; Jump when all arguments have been echoed.
         MOV EAX,EBX
         StoD ArgNr$     ; Convert binary number EAX to a decimal string.
         SUB EAX,EAX
         STOSB           ; Zero-terminate the string.
         GetArg EBX      ; Retrieve EBX-th argument to ESI,ECX.
         JC .Abort:
         MOV EAX,ECX     ; Argument size in bytes.
         StoD ArgSize$   ; Convert binary number EAX to a decimal string.
         SUB EAX,EAX
         STOSB           ; Zero-terminate the string.
         StdOutput ArgNr$, =B".[", ArgSize$, =B"]: "
         StdOutput ESI, Size=ECX, Eol=Yes ; Echo the argument.
         JC .Abort:
         INC EBX
         JMP .EchoArg:
.EchoInp: ; Four combination of ANSI/WIDE and File/Console access method:
 unicode %FOR No,Yes
 console   %FOR No,Yes
             StdOutput =B"Input/Output mode: Unicode=%unicode, Console=%console", \
                       Eol=Yes, Console=No, Unicode=No
             StdOutput =B"Enter some text: ", Console=No, Unicode=No
             StdInput Buffer, Console=%console, Unicode=%unicode
             JC .Abort:
             MOV EAX,ECX     ; Text size including CR+LF.
             StoD BufSize$   ; Convert binary number EAX to a decimal string.
             SUB EAX,EAX
             STOSB           ; Zero-terminate the string.
             StdOutput =B"Entered[",BufSize$,=B"]: ", Console=No, Unicode=No
             StdOutput Buffer, Size=ECX, Eol=Yes, Console=%console, Unicode=%unicode
             JC .Abort:
           %ENDFOR console
         %ENDFOR unicode
         StdOutput =B"%^PROGRAM terminated.", Console=No, Unicode=No
         TerminateProgram Errorlevel=0
.Abort:  StdOutput =B"Aborted, some macro returned CF.",Eol=Yes,Console=No,Unicode=No
         TerminateProgram Errorlevel=4
        ENDP Main:
ArgCount  DD D
ArgCount$ DB 6*B
ArgNr$    DB 6*B
ArgSize$  DB 6*B
BufSize$  DB 6*B
Buffer    DB 128*B
      ENDPROGRAM twinapi

▲Back to the top▲