; =====================================================================================================================
; = Asm2Html - ASM to HTML Converter - (C) 1999 Teraphy / Phrozen Crew - http://teraphy.cjb.net
; =====================================================================================================================
.486
.model flat, stdcall
; -------- Include Files and Libraries --------------------------------------------------------------------------------
include windows.inc
include elib32.inc
includelib elib32.lib
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
; -------- Initialised Data -------------------------------------------------------------------------------------------
.data
PrgVersion EQU <"1.3">
szUsage db CrLf
db "Asm2Html [Options] Infile Outfile [@SetupScheme]", CrLf
db CrLf
db "/Bxxxx Set Background Color", CrLf
db "/Txxxx Set Text Color", CrLf
db "/Cxxxx Set Comment Color", CrLf
db "/CENTER Center in document", CrLf
db "/NOCENTER Do not Center in document", CrLf, 0
szBackDef db "WHITE",0
szTextDef db "BLACK",0
szCommentDef db "RED",0
szFontStart db "<FONT COLOR=%s>",0
sFontEnd db "</FONT>"
sFontEndSize EQU $-sFontEnd
szFileHeader db "<!-- Asm2Html v", PrgVersion, " (C) 1999 Teraphy <http://teraphy.cjb.net> -->", CrLf
db "<HTML><HEAD><TITLE>%s</TITLE></HEAD><BODY BGCOLOR=%s TEXT=%s>",CrLf,0
sCenterHead db "<CENTER><TABLE BORDER=0>",CrLf
sCenterHeadSize EQU $-sCenterHead
sPreHead db "<PRE>"
sPreEnd db "</PRE>"
sCenterEnd db "</CENTER></TABLE>"
sCenterEndSize EQU $-sCenterEnd
sFileEnding db "</BODY></HTML>"
sFileEndingSize EQU $-sFileEnding
sCrLf db CrLf
sLT db "<"
sGT db ">"
sAMP db "&"
szINI db "asm2html.ini",0
szSectionDef db "standard",0
szKeyBack db "backcolor",0
szKeyText db "textcolor",0
szKeyComment db "commentcolor",0
szKeyCenter db "center",0
szCenter db "/CENTER",0
szNoCenter db "/NOCENTER",0
bCenter db -1
bBackCol db 0
bTextCol db 0
bComCol db 0
szFalse db "false",0
szTrue db "true",0
; -------- UnInitialised Data -----------------------------------------------------------------------------------------
.data?
szSection db 50 dup (?)
szBackColor db 50 dup (?)
szTextColor db 50 dup (?)
szCommentColor db 50 dup (?)
szBuffer db 512 dup (?)
szBuffer2 db 128 dup (?)
szInFile db 128 dup (?)
szOutFile db 128 dup (?)
hInFile dd ?
hOutFile dd ?
dSize dd ?
hMem dd ?
dLines dd ?
bNoComment db ?
bytes_read dd ?
; -------- Program Code -----------------------------------------------------------------------------------------------
.code
Start:
; -------- Print Message ----------------------------------------------------------------------------------------------
PrintM "Asm2Html v", PrgVersion, " (C) 1999 Teraphy / PhrozenCrew",CrLf
; -------- Get Defaults -----------------------------------------------------------------------------------------------
invoke lstrcpy, addr szBackColor, addr szBackDef
invoke lstrcpy, addr szTextColor, addr szTextDef
invoke lstrcpy, addr szCommentColor, addr szCommentDef
invoke lstrcpy, addr szSection, addr szSectionDef
mov byte ptr szBuffer2, 0
; -------- Get Arguments ----------------------------------------------------------------------------------------------
invoke GetNrOfArgs
.IF eax < 2
invoke Print, addr szUsage
Exit -1
.ENDIF
xor ebx,ebx
.WHILE ebx != eax
push eax
inc ebx
invoke GetCLineArg, addr szBuffer, ebx
.IF byte ptr szBuffer == '/'
invoke StrUpr, addr szBuffer, addr szBuffer
invoke lstrcmp, addr szBuffer, addr szCenter
.IF eax == 0
mov bCenter, 1
jmp @F
.ENDIF
invoke lstrcmp, addr szBuffer, addr szNoCenter
.IF eax == 0
mov bCenter, 0
jmp @F
.ENDIF
.IF word ptr szBuffer == 'B/'
invoke lstrcpy, addr szBackColor, addr szBuffer+2
mov bBackCol, 1
.ELSEIF word ptr szBuffer == 'T/'
invoke lstrcpy, addr szTextColor, addr szBuffer+2
mov bTextCol, 1
.ELSEIF word ptr szBuffer == 'C/'
invoke lstrcpy, addr szCommentColor, addr szBuffer+2
mov bComCol, 1
.ENDIF
@@:
.ELSEIF byte ptr szBuffer == '@'
invoke lstrcpy, addr szSection, addr szBuffer+1
.ELSEIF byte ptr szBuffer2 == 0
invoke lstrcpy, addr szInFile, addr szBuffer
mov byte ptr szBuffer2, 1
.ELSE
invoke lstrcpy, addr szOutFile, addr szBuffer
.ENDIF
pop eax
.ENDW
; -------- Get Setup from INI File ------------------------------------------------------------------------------------
.IF bBackCol == 0
invoke GetPrivateProfileString, addr szSection, addr szKeyBack, addr szBackColor, \
addr szBackColor, 49, addr szINI
.ENDIF
.IF bTextCol == 0
invoke GetPrivateProfileString, addr szSection, addr szKeyText, addr szTextColor, \
addr szTextColor, 49, addr szINI
.ENDIF
.IF bComCol == 0
invoke GetPrivateProfileString, addr szSection, addr szKeyComment, addr szCommentColor, \
addr szCommentColor, 49, addr szINI
.ENDIF
invoke GetPrivateProfileString, addr szSection, addr szKeyCenter, addr szCenter, \
addr szBuffer2, 49, addr szINI
.IF byte ptr szBuffer2 == 't' && bCenter == -1
mov bCenter, 1
.ELSEIF bCenter == -1
mov bCenter, 0
.ENDIF
; -------- Write Setup to INI File ------------------------------------------------------------------------------------
invoke WritePrivateProfileString, addr szSection, addr szKeyBack, addr szBackColor, addr szINI
invoke WritePrivateProfileString, addr szSection, addr szKeyText, addr szTextColor, addr szINI
invoke WritePrivateProfileString, addr szSection, addr szKeyComment, addr szCommentColor, addr szINI
.IF bCenter == 0
invoke WritePrivateProfileString, addr szSection, addr szKeyCenter, addr szFalse, addr szINI
.ELSE
invoke WritePrivateProfileString, addr szSection, addr szKeyCenter, addr szTrue, addr szINI
.ENDIF
; -------- Open Input File --------------------------------------------------------------------------------------------
invoke CreateFile, addr szInFile, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
.IF eax == INVALID_HANDLE_VALUE
PrintM "Error: Input File Not Found"
Exit -1
.ENDIF
mov hInFile, eax
; -------- Create Output File -----------------------------------------------------------------------------------------
invoke CreateFile, addr szOutFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
.IF eax == INVALID_HANDLE_VALUE
PrintM "Error: Could'nt Create Output File"
Exit -1
.ENDIF
mov hOutFile,eax
; -------- Allocate Memory --------------------------------------------------------------------------------------------
invoke GetFileSize, hInFile, NULL
mov dSize, eax
inc eax
invoke GlobalAlloc, GPTR, eax
mov hMem, eax
; -------- Read Input File --------------------------------------------------------------------------------------------
invoke ReadFile, hInFile, hMem, dSize, addr bytes_read, NULL
mov eax,hMem
add eax,dSize
mov byte ptr [eax],0
; -------- Write File Header ------------------------------------------------------------------------------------------
invoke wsprintf, addr szBuffer, addr szFileHeader, addr szInFile, addr szBackColor, addr szTextColor
invoke lstrlen, addr szBuffer
invoke WriteFile, hOutFile, addr szBuffer, eax, addr bytes_read, NULL
.IF bCenter == 1
invoke WriteFile, hOutFile, addr sCenterHead, sCenterHeadSize, addr bytes_read, NULL
.ENDIF
invoke WriteFile, hOutFile, addr sPreHead, 5, addr bytes_read, NULL
; -------- Process File -----------------------------------------------------------------------------------------------
invoke GetNrOfLines, hMem
mov dLines, eax
mov ebx,1
.WHILE ebx != dLines
mov bNoComment, 0
push ebx
invoke ReadLine, addr szBuffer, hMem, ebx
mov esi, offset szBuffer
@@:
lodsb
.IF al == 0
jmp @F
.ELSEIF al == ';' && bNoComment == 0
invoke wsprintf, addr szBuffer2, addr szFontStart, addr szCommentColor
invoke lstrlen, addr szBuffer2
invoke WriteFile, hOutFile, addr szBuffer2, eax, addr bytes_read, NULL
dec esi
invoke lstrlen, esi
invoke WriteFile, hOutFile, esi, eax, addr bytes_read, NULL
invoke WriteFile, hOutFile, addr sFontEnd, sFontEndSize, addr bytes_read, NULL
inc esi
jmp @F
.ELSEIF al == '<'
invoke WriteFile, hOutFile, addr sLT, 4, addr bytes_read, NULL
.ELSEIF al == '>'
invoke WriteFile, hOutFile, addr sGT, 4, addr bytes_read, NULL
.ELSEIF al == '&'
invoke WriteFile, hOutFile, addr sAMP, 5, addr bytes_read, NULL
.ELSEIF al == 22h || al == 27h
.IF bNoComment == 0
inc bNoComment
.ELSE
mov bNoComment, 0
.ENDIF
jmp @WriteChar
.ELSE
@WriteChar:
mov byte ptr szBuffer2, al
invoke WriteFile, hOutFile, addr szBuffer2, 1, addr bytes_read, NULL
.ENDIF
jmp @B
@@:
invoke WriteFile, hOutFile, addr sCrLf, 2, addr bytes_read, NULL
pop ebx
inc ebx
.ENDW
; -------- Write File Ending & Free Memory ----------------------------------------------------------------------------
invoke GlobalFree, hMem
invoke WriteFile, hOutFile, addr sPreEnd, 6, addr bytes_read, NULL
.IF bCenter == 1
invoke WriteFile, hOutFile, addr sCenterEnd, sCenterEndSize, addr bytes_read, NULL
.ENDIF
invoke WriteFile, hOutFile, addr sFileEnding, sFileEndingSize, addr bytes_read, NULL
; -------- Show Complete Message, Close Handles and Exit --------------------------------------------------------------
PrintM "Completed Sucessfully!"
invoke CloseHandle, hInFile
invoke CloseHandle, hOutFile
Exit 0
end Start