; ===================================================================================================================== ; = 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