EuroAssembler Index Manual Download Source Macros


Sitemap Links Forum Tests Projects

tdosapi.htm

This program is designated for demonstration and testing of the base functions from 16bit Disk Operating System Application Programming Interface macrolibrary dosapi.htm : DosAPI, GetArgCount, GetArg, StdInput, StdOutput, TerminateProgram.

Format
COM 16bit
Platform
DOS, Windows 32bit
Build
euroasm tdosapi.htm
Run
tdosapi arg1 arg2 ...
See also
twinapi.htm, twinabi.htm.
tdosapi PROGRAM Format=COM,Width=16,Entry=Main:
         INCLUDE dosapi.htm, cpuext%^WIDTH.htm
[COM]    SEGMENT Purpose=CODE+RODATA+BSS
Main:    PROC
         GetArgCount     ; Count the command-line arguments.
         JC .Abort:
         MOV [ArgCount],CX
         MOV AX,CX
         StoD ArgCount$  ; Convert binary number AX to a decimal string.
         JC .Abort:
         StdOutput =B"%^PROGRAM launched with ", ArgCount$, =B" arguments:", Eol=Yes
         JC .Abort:
         SUB BX,BX       ; BX will be the ordinal number of each argument.
.EchoArg:INC BX
         CMP BX,[ArgCount]
         JA .EchoEnv:    ; Jump when all arguments have been echoed.
         MOV AX,BX
         StoD ArgNr$     ; Convert binary number AX to a decimal string.
         SUB AX,AX
         STOSB           ; Zero-terminate the string.
         GetArg BX       ; Retrieve BX-th argument to SI,CX.
         JC .Abort:
         MOV AX,CX       ; Argument size in bytes.
         StoD ArgSize$   ; Convert binary number AX to a decimal string.
         SUB AX,AX
         STOSB           ; Zero-terminate the string.
         StdOutput ArgNr$, =B".[", ArgSize$, =B"]: "
         StdOutput SI, Size=CX, Eol=Yes ; Echo the argument.
         JC .Abort:
         JMP .EchoArg:
.EchoEnv:StdOutput =B'Environment string OS='
         PUSH ES
           GetEnv =B'OS', OS$
         POP ES
         JC .EnvNotSet:
         StdOutput OS$,Eol=Yes
         StdOutput =B'Environment string UNKNOWN='
         GetEnv =B'UNKNOWN', UNKNOWN$
         JC .EnvNotSet:
         StdOutput UNKNOWN$,Eol=Yes
         JMP .EchoInp:
.EnvNotSet:StdOutput =B' was not found.',Eol=Yes
.EchoInp:StdOutput ="Enter some text: "
         StdInput Buffer ; Read a string from the keyboard.
         JC .Abort:
         MOV AX,CX       ; String size, including CR+LF.
         StoD BufSize$   ; Convert binary number AX to a decimal string.
         SUB AX,AX
         STOSB           ; Zero-terminate the string.
         StdOutput =B"Entered[", BufSize$, =B"]: "
         StdOutput Buffer, Size=CX ; Echo the input string.
         JC .Abort:
         StdOutput =B"%^PROGRAM terminated."
         TerminateProgram Errorlevel=0
.Abort:  StdOutput =B"Aborted, some macro returned CF.", Eol=Yes
         TerminateProgram Errorlevel=4
         ENDP Main:
ArgCount  DW W
ArgCount$ DB 6*B
ArgNr$    DB 6*B
ArgSize$  DB 6*B
BufSize$  DB 6*B
Buffer    DB 128*B
OS$       DB 1024*B
UNKNOWN$  DB 1024*B
      ENDPROGRAM tdosapi

▲Back to the top▲