| Index | Manual | Download | Source | Macros | Embedded word Case ins.
Sitemap | Links | Forum | Tests | Projects

# boxdraw.htm
Header
Table
Main

Project Box Draw is the source text of compiled 32bit Windows executable utility which converts codes of Box Drawing characters from OEM encoding to HTML Unicode entities.

> I employ this utility to convert schematic images and diagrams created with simple semigraphic capability of plaintext editor (MultiEdit) for publishing on web.

Format
  PE console application
Platform
  Windows
Input
  Text file with semigraphic box-drawing characters in 8bit OEM encoding.
Output
  Text file where each character from the range `0xB0..0xDF` is replaced with the corresponding HTML entity.
  For instance BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE encoded as character 0xC7 is replaced with 8 characters &#x255F; which is displayed in browser as `╟`.
Build
  `euroasm boxdraw.htm`
Run
  `boxdraw input.txt output.html`

Header
  Definition of program properties and data variables.

            EUROASM UNICODE=OFF,
    boxdraw PROGRAM FORMAT=PE,WIDTH=32,ENTRY=Start:
            INCLUDEHEAD1 wins.htm, winscon.htm, winapi.htm, winf32.htm, string32.htm, cpuext32.htm
    [.data]
    InpFile DS FILE ; Declare FILE structures for input & output:
    OutFile DS FILE
    HelpText:      ; Message issued when run with incorrect number of parameters.
     DB 'Program:  boxdraw.exe InputFileName OutputFileName',13,10
     DB 'Format:   32bit Windows console application',13,10
     DB 'Version:  %^DATE',13,10
     DB 'Licence:  Public domain by vitsoft',13,10
     DB 'Function: Conversion of box drawing characters from OEM encoding',13,10
     DB '           to HTML Unicode entities.',13,10
     DB 0
    Entity: DB 0x26,'#x????;'  ; Question marks in the template &#x????; will be replaced with 4 hexadecimal characters.

Table
  Conversion table of box-drawing characters 0xB0..0xDF from 8bit CP437 to 16bit UNICODE.

           ALIGN WORD
    Table: DW \
    0x2591, \ 0xB0 ░ LIGHT SHADE
    0x2592, \ 0xB1 ▒ MEDIUM SHADE
    0x2593, \ 0xB2 ▓ DARK SHADE
    0x2502, \ 0xB3 │ BOX DRAWINGS LIGHT VERTICAL
    0x2524, \ 0xB4 ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT
    0x2561, \ 0xB5 ╡ BOX DRAWINGS LIGHT VERTICAL SINGLE AND LEFT DOUBLE
    0x2562, \ 0xB6 ╢ BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
    0x2556, \ 0xB7 ╖ BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
    0x2555, \ 0xB8 ╕ BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
    0x2563, \ 0xB9 ╣ BOx DRAWINGS DOUBLE VERTICAL AND LEFT
    0x2551, \ 0xBA ║ BOX DRAWINGS DOUBLE VERTICAL
    0x2557, \ 0xBB ╗ BOX DRAWINGS DOUBLE DOWN AND LEFT
    0x255D, \ 0xBC ╝ BOX DRAWINGS DOUBLE UP AND LEFT
    0x255C, \ 0xBD ╜ BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
    0x255B, \ 0xBE ╛ BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
    0x2510, \ 0xBF ┐ BOX DRAWINGS LIGHT DOWN AND LEFT
    0x2514, \ 0xC0 └ BOX DRAWINGS LIGHT UP AND RIGHT
    0x2534, \ 0xC1 ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL
    0x252C, \ 0xC2 ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
    0x251C, \ 0xC3 ├ BOX DRAWINGS LIGHT VERTICAL AND LEFT
    0x2500, \ 0xC4 ─ BOX DRAWINGS LIGHT HORIZONTAL
    0x253C, \ 0xC5 ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
    0x255E, \ 0xC6 ╞ BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
    0x255F, \ 0xC7 ╟ BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
    0x255A, \ 0xC8 ╚ BOX DRAWINGS DOUBLE UP AND RIGHT
    0x2554, \ 0xC9 ╔ BOX DRAWINGS DOUBLE DOWN AND RIGHT
    0x2569, \ 0xCA ╩ BOX DRAWINGS DOUBLE UP AND HORIZONTAL
    0x2566, \ 0xCB ╦ BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
    0x2560, \ 0xCC ╠ BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
    0x2550, \ 0xCD ═ BOX DRAWINGS DOUBLE HORIZONTAL
    0x256C, \ 0xCE ╬ BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
    0x2567, \ 0xCF ╧ BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
    0x2568, \ 0xD0 ╨ BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
    0x2564, \ 0xD1 ╤ BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
    0x2565, \ 0xD2 ╥ BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
    0x2559, \ 0xD3 ╙ BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
    0x2558, \ 0xD4 ╘ BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
    0x2552, \ 0xD5 ╒ BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
    0x2553, \ 0xD6 ╓ BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
    0x256B, \ 0xD7 ╫ BOX DRAWINGS VERTICAL DOUBLE AND HORIYONTAL SINGLE
    0x256A, \ 0xD8 ╪ BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
    0x2518, \ 0xD9 ┘ BOX DRAWINGS LIGHT UP AND LEFT
    0x250C, \ 0xDA ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT
    0x2588, \ 0xDB █ FULL BLOCK
    0x2584, \ 0xDC ▄ LOWER HALF BLOCK
    0x258C, \ 0xDD ▌ LEFT HALF BLOCK
    0x2590, \ 0xDE ▐ RIGHT HALF BLOCK
    0x2580, \ 0xDF ▀ UPPER HALF BLOCK
    ;
     %IF SIZE# Table <> 96
       %ERROR "Conversion table size is not 96."
     %ENDIF

Main
  Program code.

    [.text]
    Start:    GetArgCount ; Macro from library winapi.htm.
              JNC OK:  ; If number of command-line arguments returned normally.
    Help:     StdOutput HelpText, Handle=STD_ERROR_HANDLE
    Abort:    TerminateProgram Errorlevel=8
    BadInput: StdOutput =B'Error reading input file ', InpFile.Name, Eol=Yes, Handle=STD_ERROR_HANDLE
              JMP Abort:
    BadOutput:StdOutput =B'Error writing output file ', OutFile.Name, Eol=Yes, Handle=STD_ERROR_HANDLE
              JMP Abort:
    OK:       CMP ECX,2    ; Two arguments required.
              JNE Help:
              GetArg 2     ; ESI,ECX is now OutputFileName.
              StripQuotes ESI,ECX
              FileAssign OutFile,ESI,Size=ECX
              FileStreamCreate OutFile
              JC BadOutput:
              GetArg 1     ; ESI,ECX is now InputFileName.
              StripQuotes ESI,ECX
              FileAssign InpFile,ESI,Size=ECX
              FileLoad InpFile  ; Read input file to memory, return pointer,size in ESI,EAX.
              JC BadInput:
              LEA EDX,[ESI+EAX] ; Input contents is now between ESI..EDX.
    NextChar: CMP ESI,EDX  ; Is the end of input reached?
              JNB End:     ; When all characters were converted.
              XOR EAX,EAX  ; Clear the working register.
              LODSB
              CMP AL,0xB0  ; The  lowest supported OEM box character.
              JB Copy:
              CMP AL,0xDF  ; The highest supported OEM box character.
              JA Copy:
              LEA EBX,[EAX-0xB0] ; EBX is now 0..0x1F for box characters 0xB0..0xDF.
              MOV AX,[Table + 2*EBX] ; The actual conversion.
              StoH Entity+3, Size=4, LeadingZeroes=yes ; Update the variable Entity with 4 hexa chars.
              FileStreamWrite OutFile,Entity,8 ; Store the converted Entity to output.
              JMP NextChar:
    Copy:     FileStreamWriteByte OutFile ; Copy ordinary non-box character AL to output.
              JMP NextChar:
    End:      FileClose InpFile, OutFile
              TerminateProgram Errorlevel=0
            ENDPROGRAM boxdraw

▲Back to the top▲