home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / DOS / UTILITY / DIVERSEN / KWIKHELP / BIN2C.A86 < prev    next >
Text File  |  1994-12-01  |  5KB  |  226 lines

  1. ;----------------------------------------------------------------
  2. ; BIN2C 21 August 1994
  3. ; jtucker@adam.com.au
  4. ; JIM TUCKER 3:800/805
  5.  
  6. ; This reads a screen binary file (4000 bytes) then converts it to
  7. ; C for inclusion as data in your program. Screens can be saved
  8. ; using KWIKGRAB. This code is is for Eric Isaacson's A86V371
  9. ; assembler released April 1994. (This is a variation on BIN2TEXT).
  10. ;----------------------------------------------------------------
  11.  
  12.         jmp    bin2C
  13.  
  14. INCLUDE \ALIB\MACROS.INC        ;my macros
  15. INCLUDE \ALIB\CMDLINE.INC        ;command line procedure
  16. @PRINT                    ;print string procedure
  17. @CRLF                    ;display crlf procedure
  18.  
  19. BIN2C:        call    cmdline
  20.         test    W filename1
  21.         if z    jmp help
  22.  
  23.         mov    si,filename1 w
  24.          mov    di,filename2 w
  25.         mov    ax,121Eh        ;dupe filename?
  26.         int    2Fh            ;undoc dos call
  27.         jnz    >l1
  28.         call    crlf
  29.         say@    "Same name! You can't do that!",bell
  30.         badexit
  31.  
  32. l1:        mov    dx,filename1        ;open
  33.         mov    ax,3D00h
  34.         dosf
  35.         if c    jmp not_found
  36.  
  37.         mov    bx,ax
  38.         mov    ax,3F00h        ;read it
  39.         mov    cx,5000            ;try this many
  40.         mov    dx,OFFSET file_buffer
  41.         dosf
  42.         if c    jmp read_error
  43.  
  44.         cmp    ax,4000            ;should be this many
  45.         if ne    jmp not_bin_file
  46.  
  47.         mov    ax,3E00h        ;close it
  48.         dosf
  49.         jmp    convert_file
  50.  
  51. ;This converts the bin file to hex
  52.  
  53. COUNTER1    db 8            ;entries per line
  54. COUNTER2    db 10            ;lines per block
  55.  
  56. CONVERT_FILE:    mov    si,OFFSET file_buffer
  57.         mov    di,OFFSET write_buffer
  58.  
  59.         mov    cx,2000
  60.         call    store_dw
  61. L1:        mov    ax,'x0'        ;"0x"
  62.         stosw
  63.         lodsw            ;get word
  64.         call    store_hex    ;convert and store
  65.         dec    counter1    ;one less
  66.         jz    >l2        ;end of line?
  67.         mov    ax,' ,'        ;no, ", "
  68.         stosw
  69.         jmp    >l4        ;get next
  70. L2:        dec    counter2    ;end of 80 word block?
  71.         jnz    >l3        ;no
  72.         mov    ax,0A0Dh    ;put in a blank line
  73.         stosw
  74.         mov    counter2,10    ;reset the counter
  75. L3:        call    store_dw    ;start a line
  76.         mov    counter1,8    ;reset the counter
  77. L4:        loop    l1        ;do 2000 times
  78.  
  79. ;Save bytes to write
  80.  
  81.         mov    cx,di
  82.         sub    cx,OFFSET store_buffer
  83.         push    cx
  84.  
  85. ;Create, open, read, close
  86.  
  87.         test    word ptr filename2
  88.         if z    jmp no_file2        ;wasted our time
  89.  
  90.         mov    dx,filename2        ;open
  91.         mov    ax,3D00h
  92.         dosf
  93.         jc    >l2            ;error, so not exist        
  94.  
  95.         mov    bx,ax            ;close it
  96.         mov    ah,3Eh
  97.         dosf
  98.         call    crlf
  99.         say    'Destination file exists. Overwrite (Y/N)? '
  100. L1:        mov    ah,0
  101.         int    16h
  102.         or    al,20h
  103.         cmp    al,'y'
  104.         je    >l2
  105.         cmp    al,'n'
  106.         jne    l1
  107.         call    crlf
  108.         say@    'Aborted at user request'
  109.         goodexit
  110.  
  111. L2:        mov    dx,filename2        ;make it or set zero
  112.         mov    ax,3C00h
  113.         mov    cx,0
  114.         dosf
  115.         if c    jmp create_error
  116.  
  117.         mov    bx,ax            ;write CX bytes
  118.         mov    ax,4000h
  119.         mov    dx,OFFSET store_buffer
  120.         pop    cx            ;bytes to write
  121.         sub    cx,6            ;don't write last dw
  122.         dosf
  123.         if c    jmp write_error
  124.  
  125.         mov    dx,OFFSET end_message    ;write the end comment
  126.         mov    cx,end_message_length
  127.         mov    ax,4000h
  128.         dosf
  129.         if c    jmp write_error
  130.  
  131.         mov    ax,3E00h        ;close it
  132.         dosf
  133.  
  134.         call    crlf            ;say all done
  135.         mov    si,filename1
  136.         call    display
  137.         say    ' converted to C code in '
  138.         mov    si,filename2
  139.         call    display
  140.         call    crlf
  141.         goodexit
  142.  
  143. ;----------------------------------------------------------------
  144.  
  145. HELP:        call    crlf
  146. HELP1:        say@    'BIN2C ■ Release 1994 JIM TUCKER'
  147.         say@    'Copyright (c) 1994 JIM TUCKER. All rights reserved'
  148.         say@    'Converts screen ".BIN" file to C data file'
  149.         say@    'USAGE: BIN2C SOURCEfile TARGETfile'
  150.         goodexit
  151.  
  152. NOT_FOUND:    call    crlf
  153.         say@    'Source file not found',bell
  154.         badexit
  155.  
  156. LENGTH_ERROR:    call    crlf
  157.         say@    'DOS length error',bell
  158.         badexit
  159.  
  160. NOT_BIN_FILE:    call    crlf
  161.         mov    si,FILENAME1
  162.         call    display
  163.         say@    ' is not a screen binary file',bell
  164.         badexit
  165.  
  166. READ_ERROR:    call    crlf
  167.         say@    'DOS error reading source file',bell
  168.         badexit
  169.  
  170. NO_FILE2:    call    crlf
  171.         say@    'No DESTINATION file specified',bell
  172.         jmp    help1
  173.  
  174. CREATE_ERROR:    call    crlf
  175.         say@    'Bad destination filename',bell
  176.         badexit
  177.  
  178. WRITE_ERROR:    call    crlf
  179.         say@    'DOS error writing destination file',bell
  180.         badexit
  181.  
  182. DISPLAY:    mov    ah,2        ;display ASCIIZ string
  183. L1:        lodsb
  184.         or    al,al
  185.         jz    ret
  186.         mov    dl,al
  187.         int    21h
  188.         jmp    l1
  189.  
  190. STORE_DW:    mov    ax,0A0Dh    ;crlf
  191.         stosw
  192.         mov    ax,2020h    ;two spaces
  193.         stosw
  194.         ret
  195.  
  196. ;This puts the hex number in AX into the output buffer
  197. ;Enter with AX=hex number ES:DI position in buffer
  198.  
  199. @SIXTEEN    dw    16
  200. STORE_HEX:    push    ax,cx,dx
  201.         xor    cx,cx
  202. L101:        inc    cx
  203.         xor    dx,dx        ;clear remainder
  204.         div    @sixteen    ;div AX by 16
  205.         push    dx        ;save remainder
  206.         or    ax,ax
  207.         jnz    l101
  208.  
  209. L102:        pop    ax        ;loop and save 'em
  210.         add    al,'0'
  211.         cmp    al,'9'
  212.         jbe    >l103
  213.         add    al,7
  214. L103:        stosb
  215.         loop    l102
  216.         pop    dx,cx,ax
  217.         ret
  218.  
  219. END_MESSAGE    db '};',cr,lf
  220.         db '/** END OF DATA **/',cr,lf
  221. END_MESSAGE_LENGTH equ $-OFFSET end_message
  222.  
  223. FILE_BUFFER    dw 2000 dup 0        ;read file
  224. STORE_BUFFER    db 'int screen_data[] = {'
  225. WRITE_BUFFER    label byte        ;asm data
  226.