od
O comando (octal dump) é implementado no Unix desde a versão 1. No entanto, não consegui encontrar um comando reverso no manual do Unix da versão 6 (1975). Maneiras modernas de reverter od
com xxd
ou sed
não se aplicam ao Unix V6, uma vez que sed
e awk
apareceu apenas na versão 7 (enquanto uudecode
, xxd
e base64
não estão disponíveis também).
As perguntas são:
- Como as pessoas em 1975 converteram listagens octais ou hexadecimais em arquivos binários?
- Como posso fazer isso em um emulador PDP-11 que só me permite colar texto no terminal da área de transferência? (Em outras palavras, é necessário escrever meu próprio programa para isso?)
Aqui está um exemplo de despejo hexadecimal de um arquivo binário od
que eu gostaria de converter de volta em binário:
# od -h /bin/sum
0000000 0107 00ba 0000 0204 0000 0000 0000 0001
0000020 1583 0bd6 0ac3 0601 8901 0a37 00ae 15b7
0000040 0002 8905 0000 0000 8609 15c0 0001 8904
0000060 0026 0005 01ef 706f 6472 000a 1001 0a05
0000100 1040 8903 00be 0200 870b 0bc0 030e 0ab7
0000120 007a 15c2 00be 9484 6105 0b45 7e04 01f0
0000140 15c0 0001 8904 0080 0002 09f7 0026 15c0
0000160 0001 8904 0083 0001 1dc5 0050 09f7 0014
0000200 15c0 0001 8904 0082 0001 1040 8906 01c2
0000220 203f 200a 1026 1066 1141 09f7 0006 1581
0000240 1580 0087 0a00 7217 000a 1066 1001 0302
0000260 09f7 fff0 15b7 0012 65f7 0030 000c 15c0
0000300 0001 8904 00ba 0001 0087
0000312
Parece que a versão 6 do Unix ainda não incluiu muitas ferramentas comuns que apareceram apenas na versão 7 (como
sed
eawk
). Nesse ponto, o Unix também não foi comercializado ainda, então "reverse hex dump" poderia estar faltando simplesmente porque não havia uma grande demanda por essa operação ou porque Ken (ou algum outro programador) forneceu tal ferramenta de seu/usr
diretório não oficial no Bell Labs. Quem sabe.Mas aqui está minha implementação para reverter um dump hexadecimal no Unix V6. Quando compilado como
cc -s -O unhex.c
, o executável resultante tem apenas 1160 bytes e funciona mais rápido que o dumping (como esperado).Observe como a linguagem C daquela época ainda tinha sintaxe de atribuição composta de B (
=+
,=*
, etc.) e como esperava que os programadores fornecessem seus próprios buffers para E/S de arquivo.UPD. Publiquei uma versão mais rápida e simples no GitHub , onde a sintaxe também é destacada.
Aqui está um programa C mínimo que você pode tentar compilar no V6 Unix.
Se o resultado acabar com a troca de bytes, pode ser necessário inverter os 2 putchars.