This program is designated for interactive and testing of macros defined in library winf64.htm.
EUROASM CPU=X64,SIMD=SSE, UNICODE=Off ; For WIDE version set UNICODE=On. No else correction is necessary. %StdConsole %SETB Yes ; Default mode for macro StdOutput. twinf64 PROGRAM Format=PE,Width=64,IconFile=,Entry=Main: INCLUDE winabi.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 FILE64 MovedFile DS FILE64 DeletedFile DS FILE64 WrittenFile DS FILE64 MappedFile DS FILE64 StreamFile DS FILE64 EachFile DS FILE64 DataBlock D 16 * BYTE [.text] OnError %MACRO FileMacroName JNC .Skip%.: MOV RSI,="%FileMacroName" CALL OnError@RT .Skip%.: OnError@RT: PROC1 StoH HexEAX StdOutput ="error.",Eol=Yes StdOutput RSI, =" 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 RSI,TestFile.Name FileNameParse RSI PUSH RAX SUB RAX,RSI StdOutput RSI,Size=RAX StdOutput =""", Name=""" POP RAX PUSH RCX SUB RCX,RAX StdOutput RAX,Size=RCX StdOutput =""", Ext=""" POP RCX SUB RDX,RCX StdOutput RCX,Size=RDX 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$ OnError FileAssign FileStore DeletedFile,AtOnceText,SIZE# AtOnceText OnError FileStore FileLoad TestFile OnError FileLoad CMP RAX,SIZE# AtOnceText JNE .10: MOV RDI,AtOnceText MOV RCX,RAX REPNE CMPSB MOV RDX,Passed$ JE .15: .10: MOV RDX,Failed$ .15: StdOutput RDX StdOutput ="Testing FileMove, FileDelete, FileExists? ... " FileAssign MovedFile,TempPath$,MovedName$ OnError FileAssign FileMove TestFile, MovedFile OnError FileMove FileExists? MovedFile MOV RDX,Failed$ JC .20: FileDelete DeletedFile OnError FileDelete FileExists? DeletedFile JNC .20: MOV RDX,Passed$ .20: StdOutput RDX 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 RAX,SIZE#AtOnceText+SIZE#EncloseText+SIZE#Enclose$Text+SIZE#EncloseLnText+1 MOV RDX,Passed$ JE .30: MOV RDX,Failed$ .30: StdOutput RDX 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,RAX OnError FileWrite JMP .40: .50: FileClose MovedFile, WrittenFile FileAppend WrittenFile OnError FileAppend MOV RCX,RAX FileWrite WrittenFile,AppendedText, SIZE# AppendedText OnError FileWrite ADD RCX,RAX FileClose WrittenFile FileOpen WrittenFile OnError FileOpen CMP RAX,RCX MOV RDX,Passed$ JE .60: MOV RDX,Failed$ .60: StdOutput RDX StdOutput ="Testing FileMapOpen, FileMapCreate ... " FileMapOpen WrittenFile OnError FileMapOpen MOV RCX,RAX FileAssign MappedFile,TempPath$,MappedName$ OnError FileAssign FileMapCreate MappedFile,RCX OnError FileMapCreate REP MOVSB FileClose WrittenFile, MappedFile StdOutput Passed$ StdOutput ="Testing FileStreamOpen, ~Create, ~Append, ~Read, ~Write ... " FileStreamOpen MappedFile OnError FileStreamOpen MOV RBX,RAX FileAssign StreamFile,TempPath$,StreamName$ OnError FileAssign FileStreamCreate StreamFile OnError FileStreamCreate .70: FileStreamReadLn MappedFile OnError FileStreamReadLn JZ .80: MOV RCX,RAX FileStreamWrite StreamFile,RSI,RCX OnError FileStreamWrite JMP .70: .80: FileStreamWrite$ StreamFile,StreamWrite$Text OnError FileStreamWrite$ FileStreamWriteLn StreamFile,StreamWriteLnText, SIZE# StreamWriteLnText OnError FileStreamWriteLn FileClose MappedFile, StreamFile ADD RBX,SIZE# StreamWrite$Text + SIZE# StreamWriteLnText + 1 FileStreamAppend StreamFile OnError FileStreamAppend CMP RAX,RBX JNE .90: MOV EAX,'DDDD' FileStreamWriteDword StreamFile OnError FileStreamWriteDword MOV RCX,[StreamFile.Size] ADD RBX,SIZE# EAX MOV RDX,Passed$ CMP RCX,RBX JE .95: .90: MOV RDX,Failed$ .95: StdOutput RDX FileClose StreamFile StdOutput ="Testing FileEach. Dir ",TempPath$, Eol=Yes FileAssign EachFile,TempPath$,="*.*" OnError FileAssign FileEach EachFile,DirProc DirProc PROC1 MOV EAX,[RDI+WIN32_FIND_DATAW.FileSizeLow] StoD DecEAX SUB EAX,EAX STOSB StdOutput DecEAX,Unicode=Off StdOutput =" bytes ", RSI, Eol=Yes RET ENDP1 DirProc StdOutput ="Test %^PROGRAM terminated." TerminateProgram ENDPROGRAM twinf64