#!/bin/sed -f 1{ x # elf header s/$/_ELFEHDREHDREHDR/ s/$/2ELFEHDREHDREHDR/ s/$/3ELFEHDREHDREHDR/ s/$/4ELF/ # program header s/$/1PHDPHDRPHDRPHDR/ s/$/CmpJ@01692PHDPHDRPHDR/ s/$/InitESICmpJ@0075AlignESI/ x } :x /^[-><+,\.\[]\|^]/ { H # get program code g s/\n\([^\n]\)[^\n]*$/\1/ # add instruction />$/ s/.$/Add3/ /<$/ s/.$/Sub3/ /+$/ s/.$/Ic2/ /-$/ s/.$/Dc2/ /,$/ s/.$/ReadReadReadRead___19/ /\.$/ s/.$/WriteWriteWrite____19/ /\[$/ s/.$/CmpJ@FFF79/ /\]$/ s/.$/JMNUMFFF75/ H g :incl_loop s/10$/A/ s/1$/0/ s/2$/1/ s/3$/2/ s/4$/3/ s/5$/4/ s/6$/5/ s/7$/6/ s/8$/7/ s/9$/8/ s/A$/9/ s/CmpJ@\(....\)/CmpJ@\1~/g :incl_incl_loop s/FFFF~/0000/g s/F~/~0/g t incl_incl_loop s/E~/F/g s/D~/E/g s/C~/D/g s/B~/C/g s/A~/B/g s/9~/A/g s/8~/9/g s/7~/8/g s/6~/7/g s/5~/6/g s/4~/5/g s/3~/4/g s/2~/3/g s/1~/2/g s/0~/1/g /[^1]0$/! b incl_loop s/0$// s/^[^\n]*\n[^\n]*\n\(.*\)$/\1/ x s/^[^\n]*\n\([^\n]*\)\n[^\n]*$/\1/ /^]/ { x s/@\(....\)\([^@]*\)$/ePNUM\1\2~\1~/ :decl_loop s/~/|~/g :decl_decl_loop s/0|/|F/ s/F|/E/ s/E|/D/ s/D|/C/ s/C|/B/ s/B|/A/ s/A|/9/ s/9|/8/ s/8|/7/ s/7|/6/ s/6|/5/ s/5|/4/ s/4|/3/ s/3|/2/ s/2|/1/ s/1|/0/ /|/ b decl_decl_loop s/~0000~// t decl_loop x } s/.// bx } /^$/! { s/.// bx # s/.*/error/ # p # q } $ { g s/^\([^\n]*\).*/\1/ s/$/\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80/ s/CmpJ@/PNUM/ s/CmpJ@/PNUM/ /CmpJ@/ { i loop unmatched d q } s/MNUM\(..\)\(..\)/NUM\2NUM\1MINSMINS/g s/PNUM\(..\)\(..\)/NUM\2NUM\1ZEROZERO/g s/NUM00/\x00/g s/NUM01/\x01/g s/NUM02/\x02/g s/NUM03/\x03/g s/NUM04/\x04/g s/NUM05/\x05/g s/NUM06/\x06/g s/NUM07/\x07/g s/NUM08/\x08/g s/NUM09/\x09/g s/NUM0A/\x0A/g s/NUM0B/\x0B/g s/NUM0C/\x0C/g s/NUM0D/\x0D/g s/NUM0E/\x0E/g s/NUM0F/\x0F/g s/NUM10/\x10/g s/NUM11/\x11/g s/NUM12/\x12/g s/NUM13/\x13/g s/NUM14/\x14/g s/NUM15/\x15/g s/NUM16/\x16/g s/NUM17/\x17/g s/NUM18/\x18/g s/NUM19/\x19/g s/NUM1A/\x1A/g s/NUM1B/\x1B/g s/NUM1C/\x1C/g s/NUM1D/\x1D/g s/NUM1E/\x1E/g s/NUM1F/\x1F/g s/NUM20/\x20/g s/NUM21/\x21/g s/NUM22/\x22/g s/NUM23/\x23/g s/NUM24/\x24/g s/NUM25/\x25/g s/NUM26/\x26/g s/NUM27/\x27/g s/NUM28/\x28/g s/NUM29/\x29/g s/NUM2A/\x2A/g s/NUM2B/\x2B/g s/NUM2C/\x2C/g s/NUM2D/\x2D/g s/NUM2E/\x2E/g s/NUM2F/\x2F/g s/NUM30/\x30/g s/NUM31/\x31/g s/NUM32/\x32/g s/NUM33/\x33/g s/NUM34/\x34/g s/NUM35/\x35/g s/NUM36/\x36/g s/NUM37/\x37/g s/NUM38/\x38/g s/NUM39/\x39/g s/NUM3A/\x3A/g s/NUM3B/\x3B/g s/NUM3C/\x3C/g s/NUM3D/\x3D/g s/NUM3E/\x3E/g s/NUM3F/\x3F/g s/NUM40/\x40/g s/NUM41/\x41/g s/NUM42/\x42/g s/NUM43/\x43/g s/NUM44/\x44/g s/NUM45/\x45/g s/NUM46/\x46/g s/NUM47/\x47/g s/NUM48/\x48/g s/NUM49/\x49/g s/NUM4A/\x4A/g s/NUM4B/\x4B/g s/NUM4C/\x4C/g s/NUM4D/\x4D/g s/NUM4E/\x4E/g s/NUM4F/\x4F/g s/NUM50/\x50/g s/NUM51/\x51/g s/NUM52/\x52/g s/NUM53/\x53/g s/NUM54/\x54/g s/NUM55/\x55/g s/NUM56/\x56/g s/NUM57/\x57/g s/NUM58/\x58/g s/NUM59/\x59/g s/NUM5A/\x5A/g s/NUM5B/\x5B/g s/NUM5C/\x5C/g s/NUM5D/\x5D/g s/NUM5E/\x5E/g s/NUM5F/\x5F/g s/NUM60/\x60/g s/NUM61/\x61/g s/NUM62/\x62/g s/NUM63/\x63/g s/NUM64/\x64/g s/NUM65/\x65/g s/NUM66/\x66/g s/NUM67/\x67/g s/NUM68/\x68/g s/NUM69/\x69/g s/NUM6A/\x6A/g s/NUM6B/\x6B/g s/NUM6C/\x6C/g s/NUM6D/\x6D/g s/NUM6E/\x6E/g s/NUM6F/\x6F/g s/NUM70/\x70/g s/NUM71/\x71/g s/NUM72/\x72/g s/NUM73/\x73/g s/NUM74/\x74/g s/NUM75/\x75/g s/NUM76/\x76/g s/NUM77/\x77/g s/NUM78/\x78/g s/NUM79/\x79/g s/NUM7A/\x7A/g s/NUM7B/\x7B/g s/NUM7C/\x7C/g s/NUM7D/\x7D/g s/NUM7E/\x7E/g s/NUM7F/\x7F/g s/NUM80/\x80/g s/NUM81/\x81/g s/NUM82/\x82/g s/NUM83/\x83/g s/NUM84/\x84/g s/NUM85/\x85/g s/NUM86/\x86/g s/NUM87/\x87/g s/NUM88/\x88/g s/NUM89/\x89/g s/NUM8A/\x8A/g s/NUM8B/\x8B/g s/NUM8C/\x8C/g s/NUM8D/\x8D/g s/NUM8E/\x8E/g s/NUM8F/\x8F/g s/NUM90/\x90/g s/NUM91/\x91/g s/NUM92/\x92/g s/NUM93/\x93/g s/NUM94/\x94/g s/NUM95/\x95/g s/NUM96/\x96/g s/NUM97/\x97/g s/NUM98/\x98/g s/NUM99/\x99/g s/NUM9A/\x9A/g s/NUM9B/\x9B/g s/NUM9C/\x9C/g s/NUM9D/\x9D/g s/NUM9E/\x9E/g s/NUM9F/\x9F/g s/NUMA0/\xA0/g s/NUMA1/\xA1/g s/NUMA2/\xA2/g s/NUMA3/\xA3/g s/NUMA4/\xA4/g s/NUMA5/\xA5/g s/NUMA6/\xA6/g s/NUMA7/\xA7/g s/NUMA8/\xA8/g s/NUMA9/\xA9/g s/NUMAA/\xAA/g s/NUMAB/\xAB/g s/NUMAC/\xAC/g s/NUMAD/\xAD/g s/NUMAE/\xAE/g s/NUMAF/\xAF/g s/NUMB0/\xB0/g s/NUMB1/\xB1/g s/NUMB2/\xB2/g s/NUMB3/\xB3/g s/NUMB4/\xB4/g s/NUMB5/\xB5/g s/NUMB6/\xB6/g s/NUMB7/\xB7/g s/NUMB8/\xB8/g s/NUMB9/\xB9/g s/NUMBA/\xBA/g s/NUMBB/\xBB/g s/NUMBC/\xBC/g s/NUMBD/\xBD/g s/NUMBE/\xBE/g s/NUMBF/\xBF/g s/NUMC0/\xC0/g s/NUMC1/\xC1/g s/NUMC2/\xC2/g s/NUMC3/\xC3/g s/NUMC4/\xC4/g s/NUMC5/\xC5/g s/NUMC6/\xC6/g s/NUMC7/\xC7/g s/NUMC8/\xC8/g s/NUMC9/\xC9/g s/NUMCA/\xCA/g s/NUMCB/\xCB/g s/NUMCC/\xCC/g s/NUMCD/\xCD/g s/NUMCE/\xCE/g s/NUMCF/\xCF/g s/NUMD0/\xD0/g s/NUMD1/\xD1/g s/NUMD2/\xD2/g s/NUMD3/\xD3/g s/NUMD4/\xD4/g s/NUMD5/\xD5/g s/NUMD6/\xD6/g s/NUMD7/\xD7/g s/NUMD8/\xD8/g s/NUMD9/\xD9/g s/NUMDA/\xDA/g s/NUMDB/\xDB/g s/NUMDC/\xDC/g s/NUMDD/\xDD/g s/NUMDE/\xDE/g s/NUMDF/\xDF/g s/NUME0/\xE0/g s/NUME1/\xE1/g s/NUME2/\xE2/g s/NUME3/\xE3/g s/NUME4/\xE4/g s/NUME5/\xE5/g s/NUME6/\xE6/g s/NUME7/\xE7/g s/NUME8/\xE8/g s/NUME9/\xE9/g s/NUMEA/\xEA/g s/NUMEB/\xEB/g s/NUMEC/\xEC/g s/NUMED/\xED/g s/NUMEE/\xEE/g s/NUMEF/\xEF/g s/NUMF0/\xF0/g s/NUMF1/\xF1/g s/NUMF2/\xF2/g s/NUMF3/\xF3/g s/NUMF4/\xF4/g s/NUMF5/\xF5/g s/NUMF6/\xF6/g s/NUMF7/\xF7/g s/NUMF8/\xF8/g s/NUMF9/\xF9/g s/NUMFA/\xFA/g s/NUMFB/\xFB/g s/NUMFC/\xFC/g s/NUMFD/\xFD/g s/NUMFE/\xFE/g # why? sed bug? :ff s/NUMFF/\xFF/ t ff s/ZERO/\x00/g :mins s/MINS/\xFF/ t mins s/_ELFEHDREHDREHDR/\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00/ s/2ELFEHDREHDREHDR/\x02\x00\x03\x00\x01\x00\x00\x00\x54\x00\x00\x00\x34\x00\x00\x00/ s/3ELFEHDREHDREHDR/\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x20\x00\x01\x00\x00\x00/ s/4ELF/\x00\x00\x00\x00/ s/1PHDPHDRPHDRPHDR/\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/ s/2PHDPHDRPHDR/\x00\x00\x00\x01\xff\xff\xff\xff\x00\x10\x00\x00/ s/InitESI/\xbe/ s/AlignESI/\x83\xe6\xfc/ s/Add/\x83\xc6\x04/g s/Sub/\x83\xee\x04/g s/Ic/\xff\x06/g s/Dc/\xff\x0e/g s/ReadReadReadRead___/\xb8\x03\x00\x00\x00\xbb\x00\x00\x00\x00\x89\xf1\xba\x01\x00\x00\x00\xcd\x80/g s/WriteWriteWrite____/\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\x89\xf1\xba\x01\x00\x00\x00\xcd\x80/g s/CmpJe/\x83\x3e\x00\x0f\x84/g s/J/\xe9/g # s/SIZE/\xb8\x00\x00\x00/g s/$/Z16Z16Z16Z16Z16Z16Z16Z16Z16Z16Z16Z16Z16Z16Z16Z16/ s/Z16/\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/g p } d