#!/bin/sh # Translates DEC64's Windows-compatible MASM on stdin to # UNIX-compatible NASM on stdout. Not general purpose. # 0. Use the UNIX calling convention. # 1. Replace equ with %define. # 2. Replace public with global. # 3. Replace unary macro with %macro. # 4. Replace nullary macro with %macro. # 5. Replace endm with %endmacro. # 6. Replace if with %if. # 7. Replace endif with %endif. # 8. Replace named with positional parameter. # 9. Replace segment with section. # 10. Replace qword with dq. # 11. Remove execute segment. # 12. Flatten nested index: [a][b] -> [a+b]. # 13. Remove extraneous suffix matter. # 14. Remove extraneous suffix matter. # 15. Remove title. sed \ -E \ -e "s/^UNIX equ 0/%define UNIX 1/g" \ -e "s/^(\w+)\s+equ\s+(.+)/%define \1 \2/g" \ -e "s/^public /global /g" \ -e "s/^(\w+) macro function/%macro \1 1/g" \ -e "s/^(\w+) macro/%macro \1 0/g" \ -e "s/^ endm/ %endmacro/g" \ -e "s/^ if / %if /g" \ -e "s/^ endif/ %endif/g" \ -e "s/^ (call|jmp)\s+function/ \1 %1/g" \ -e "s/^dec64_data segment para read/dec64_code section .text/g" \ -e "/^dec64_data ends/d" \ -e "s/^ qword/ dq /g" \ -e "/^dec64_code segment para execute/d" \ -e "s/(ptr )?\[(.+?)\]\[(.+?)\]/[\2+\3]/g" \ -e "/^dec64_code ends/d" \ -e "/^ end\b/d" \ -e "/^title /d"