This program will test macroinstructions defined in library winf32.htm.
EUROASM UNICODE=Off ; For WIDE version set UNICODE=On. No else correction is necessary.
%StdConsole %SETB Yes ; Default mode for macro StdOutput.
twinf32 PROGRAM Format=PE,Width=32,IconFile=,Entry=Main:
INCLUDE winapi.htm, wins.htm, winf%^WIDTH.htm, cpuext%^WIDTH.htm,
[.data]
Passed$ D "passed.",13,10,0
Failed$ D "failed.",13,10,0
DecEAX DB "dddddddddd"
HexEAX DB "xxxxxxxx"
DB 0
TempPath$ D "%^PROGRAM\TempPath\",0
AtOnceName$ D "AtOnce.txt",0
MovedName$ D "Moved.txt",0
DeletedName$ D "Deleted.txt",0
WrittenName$ D "Written.txt",0
MappedName$ D "Mapped.txt",0
StreamName$ D "Stream.txt",0
AtOnceText DB "This file was written by FileStore.",13,10,"It will be read by FileLoad and compared.",13,10
EncloseText DB "Line appended with FileEnclose.",13,10
Enclose$Text DB "Line appended with FileEnclose$.",13,10,0
EncloseLnText DB "Line appended with FileEncloseLn."
AppendedText DB "Line appended with FileAppend, FileWrite.",13,10
StreamWrite$Text DB "Line appended with FileStreamWrite$.",13,10,0
StreamWriteLnText DB "Line appended with FileStreamWriteLn."
[.bss]
TestFile DS FILE
MovedFile DS FILE
DeletedFile DS FILE
WrittenFile DS FILE
MappedFile DS FILE
StreamFile DS FILE
EachFile DS FILE
DataBlock D 16 * BYTE
[.text]
OnError %MACRO FileMacroName
JNC .Skip%.:
MOV ESI,="%FileMacroName"
CALL OnError@RT
.Skip%.:
OnError@RT: PROC1
StoH HexEAX
StdOutput ="error.",Eol=Yes
StdOutput ESI, =" returned CF=1, EAX=0x", HexEAX, Eol=Yes
TerminateProgram 8
ENDP1 OnError@RT
%ENDMACRO OnError
Main: StdOutput ="This program %^PROGRAM will test macros from EuroAssembler library ""maclib\winf%^WIDTH.htm"".",Eol=Yes
StdOutput ="Testing FileAssign, FileMkDir ... "
FileAssign TestFile,TempPath$,AtOnceName$
OnError FileAssign
FileMkDir TestFile
OnError FileMkDir
StdOutput Passed$
StdOutput ="Testing FileNameParse: Path="""
MOV ESI,TestFile.Name
FileNameParse ESI
PUSH EAX
SUB EAX,ESI
StdOutput ESI,Size=EAX
StdOutput =""", Name="""
POP EAX
PUSH ECX
SUB ECX,EAX
StdOutput EAX,Size=ECX
StdOutput =""", Ext="""
POP ECX
SUB EDX,ECX
StdOutput ECX,Size=EDX
StdOutput =""".",Eol=Yes
StdOutput ="Testing FileStore, FileLoad, FileDelete ... "
FileAssign TestFile,TempPath$,AtOnceName$
OnError FileAssign
FileStore TestFile,AtOnceText,SIZE# AtOnceText
OnError FileStore
FileAssign DeletedFile,TempPath$,DeletedName$
FileStore DeletedFile,AtOnceText,SIZE# AtOnceText
OnError FileStore
OnError FileAssign
FileLoad TestFile
OnError FileLoad
CMP EAX,SIZE# AtOnceText
JNE .10:
MOV EDI,AtOnceText
MOV ECX,EAX
REPNE CMPSB
MOV EDX,Passed$
JE .15:
.10: MOV EDX,Failed$
.15: StdOutput EDX
StdOutput ="Testing FileMove, FileDelete, FileExists? ... "
FileAssign MovedFile,TempPath$,MovedName$
OnError FileAssign
FileMove TestFile, MovedFile
OnError FileMove
FileExists? MovedFile
MOV EDX,Failed$
JC .20:
FileDelete DeletedFile
OnError FileDelete
FileExists? DeletedFile
JNC .20:
MOV EDX,Passed$
.20: StdOutput EDX
StdOutput ="Testing FileEnclose, FileEnclose$, FileEncloseLn ... "
FileEnclose MovedFile,EncloseText, SIZE# EncloseText
OnError FileEnclose
FileEnclose$ MovedFile,Enclose$Text
OnError FileEnclose$
FileEncloseLn MovedFile,EncloseLnText, SIZE# EncloseLnText
OnError FileEncloseLn
FileLoad MovedFile
CMP EAX,SIZE#AtOnceText+SIZE#EncloseText+SIZE#Enclose$Text+SIZE#EncloseLnText+1
MOV EDX,Passed$
JE .30:
MOV EDX,Failed$
.30: StdOutput EDX
StdOutput ="Testing FileOpen, FileCreate, FileRead, FileWrite, FileClose ... "
FileOpen MovedFile
OnError FileOpen
FileAssign WrittenFile,TempPath$,WrittenName$
OnError FileAssign
FileCreate WrittenFile
OnError FileCreate
.40: FileRead MovedFile,DataBlock, SIZE# DataBlock
OnError FileRead
JZ .50:
FileWrite WrittenFile,DataBlock,EAX
OnError FileWrite
JMP .40:
.50: FileClose MovedFile, WrittenFile
FileAppend WrittenFile
OnError FileAppend
MOV ECX,EAX
FileWrite WrittenFile,AppendedText, SIZE# AppendedText
OnError FileWrite
ADD ECX,EAX
FileClose WrittenFile
FileOpen WrittenFile
OnError FileOpen
CMP EAX,ECX
MOV EDX,Passed$
JE .60:
MOV EDX,Failed$
.60: StdOutput EDX
StdOutput ="Testing FileMapOpen, FileMapCreate ... "
FileMapOpen WrittenFile
OnError FileMapOpen
MOV ECX,EAX
FileAssign MappedFile,TempPath$,MappedName$
OnError FileAssign
FileMapCreate MappedFile,ECX
OnError FileMapCreate
REP MOVSB
FileClose WrittenFile, MappedFile
StdOutput Passed$
StdOutput ="Testing FileStreamOpen, ~Create, ~Append, ~Read, ~Write ... "
FileStreamOpen MappedFile
OnError FileStreamOpen
MOV EBX,EAX
FileAssign StreamFile,TempPath$,StreamName$
OnError FileAssign
FileStreamCreate StreamFile
OnError FileStreamCreate
.70: FileStreamReadLn MappedFile
OnError FileStreamReadLn
JZ .80:
MOV ECX,EAX
FileStreamWrite StreamFile,ESI,ECX
OnError FileStreamWrite
JMP .70:
.80: FileStreamWrite$ StreamFile,StreamWrite$Text
OnError FileStreamWrite$
FileStreamWriteLn StreamFile,StreamWriteLnText, SIZE# StreamWriteLnText
OnError FileStreamWriteLn
FileClose MappedFile, StreamFile
ADD EBX,SIZE# StreamWrite$Text + SIZE# StreamWriteLnText + 1
FileStreamAppend StreamFile
OnError FileStreamAppend
CMP EAX,EBX
JNE .90:
MOV EAX,'DDDD'
FileStreamWriteDword StreamFile
OnError FileStreamWriteDword
MOV ECX,[StreamFile.Size]
ADD EBX,SIZE# EAX
MOV EDX,Passed$
CMP ECX,EBX
JE .95:
.90: MOV EDX,Failed$
.95: StdOutput EDX
FileClose StreamFile
StdOutput ="Testing FileEach. Dir ",TempPath$, Eol=Yes
FileAssign EachFile,TempPath$,="*.*"
OnError FileAssign
FileEach EachFile,DirProc
DirProc PROC1
MOV EAX,[EDI+WIN32_FIND_DATAW.FileSizeLow]
StoD DecEAX
SUB EAX,EAX
STOSB
StdOutput DecEAX,Unicode=Off
StdOutput =" bytes ", ESI, Eol=Yes
RET
ENDP1 DirProc
StdOutput ="Test %^PROGRAM terminated."
TerminateProgram
ENDPROGRAM twinf32