Como Restaurar um Programa de 16 bits

Só pelo título, dá pra desconfiar que os próximos parágrafos serão bem técnicos, não?  Se jargão de tecnologia não é sua praia, talvez você prefira ler um pouco de ficção.

A história é a seguinte:  como já contei, estou realizando um trabalho na UFF de arqueologia digital, extraindo o conteúdo de um cd-rom criado nos anos 90 para transformá-lo em um site, porque ele não roda mais nos sistemas atuais.  Por ser um programa de 16 bits, ele só roda até o Windows XP, porque a partir do Windows Vista esse suporte começou a ser removido.  A versão 64 bits do Windows 10 já não tem mais esse suporte, nem como opcional.  Então, pra realizar essa extração, precisei usar vários programas que me permitiram acessar o conteúdo desse cd.  Daí que achei que valia a pena compartilhar esse conhecimento, pois tenho certeza de que não sou o único que passa por esse problema.

A extração dividiu-se em quatro partes:  a emulação de um Windows 98 (pra poder rodar o programa), a extração dos textos, a extração das imagens e a extração dos vídeos e músicas.  Vou detalhar cada uma delas a seguir.  Ao longo do texto, há vários links pros programas, e lá no final tem uma lista de todos eles.


Parte 1. Emulando o Windows 98

Pra conseguir rodar o programa, tive que criar uma máquina virtual e instalar nela um Windows 98.  Quem me ajudou nessa tarefa foi o jDosBox.  E já fica a dica:  pra usar esse cara é preciso saber usar comandos do DOS.  Como já tem alguns anos que fiz isso, não lembro de todos os detalhes, mas lembro o suficiente pra indicar o caminho a seguir.  A primeira coisa que fiz foi configurar uma imagem de HD que eu iniciava com o jDosBox, com uma configuração que me permitia ter uma pasta do meu HD real compartilhada como uma unidade dessa máquina virtual.  Nessa pasta eu coloquei o instalador do Windows 98 e então por dentro da máquina virtual fui copiando os arquivos dessa pasta pra minha imagem. 

Aqui destaco um detalhe importante, algo que demorei para entender como funcionava, e que pode economizar muito tempo no processo.  É muito mais rápido copiar os arquivos em pequenos grupos, ao invés de copiar muitos de uma vez só.  Não se atreva a fazer um copy *.*.  É que a cada arquivo copiado, o tempo de cópia vai ficando maior, não importa o tamanho do arquivo.  Os números não são estes, mas o exemplo serve:  o primeiro arquivo leva um segundo, o quinto arquivo já leva três, o décimo arquivo já leva quinze segundos.  Nesse esquema, copiar cem arquivos é impossível.  Então é mais fácil ir copiando no máximo de dez em dez arquivos.

Tendo feito a cópia do instalador pra minha imagem, ajustei os parâmetros da máquina virtual pra deixar de ter a minha pasta compartilhada com ela e pra que ela desse boot a partir desse instalador.  Com isso, consegui instalar o Windows 98 na máquina virtual.  Em seguida, voltei as configurações para ter a pasta compartilhada e então fiz a cópia do conteúdo do cd-rom pra máquina virtual.  Assim pude, finalmente, executar o programa em um Windows 98, sem problemas de compatibilidade.

Uma outra dica pra economizar tempo:  nessa de ter que configurar a máquina virtual de duas maneiras diferentes, ao invés de ficar modificando o arquivo de configuração quando fosse necessário, eu tinha duas cópias dele, cada uma com uma configuração específica.  Daí ia renomeando os arquivos conforme a necessidade.


Parte 2. Extração dos textos

Emular o programa a partir do jDosBox traz um contratempo importante:  não é possível dar um ctrl c no Windows emulado e depois colar no Windows 10.  Se fosse assim, seria fácil extrair os textos do programa.  Quer dizer, seria fácil, se eu pudesse selecionar os textos no programa para dar um ctrl c, o que ele não permitia.

Na impossibilidade de usar ctrl c ctrl v, o primeiro caminho que pensei foi em tirar prints das telas do programa, a partir do próprio Windows 10, recortar os textos e usar algum programa de OCR neles.  Mas consegui seguir por outro caminho, bem menos trabalhoso.

Pra isso, usei o Visual Studio Code, e com ele abri os arquivos executáveis como se fossem arquivos de texto.  Sim, tem um monte de lixo ali misturado, por conta da codificação do executável, mas dei a sorte de que os textos do programa estavam todos fáceis de encontrar, sem qualquer codificação.  Foi só questão de procurar por eles, selecionar e copiar.

Claro, a cópia não estava 100% limpa.  Em alguns casos, o texto vinha com alguns caracteres de controle no meio, então eu tive que fazer uma série de substituições para limpá-los.  Além disso, como o programa é trilíngue, ele tem três executáveis, um pra cada idioma.  Na hora de revisar os textos em francês, tive que ter uma atenção especial com o caractere œ (as letras "ó" e "é" unidas em uma só, como em Cœur de Pirate), que o Visual Studio Code não interpretou corretamente e omitiu.  A mesma coisa aconteceu com os textos em inglês, onde ele omitiu alguns apóstrofos.


Parte 3. Extração das Imagens

Pra extração das imagens e fotos usei duas técnicas diferentes.  A primeira delas foi extrair as imagens que foram empacotadas diretamente nos executáveis.  Minha primeira tentativa nesse sentido foi tentar abrir o executável usando o 7Zip.  Alguns executáveis modernos podem ser abertos assim, mas não foi o caso.  O 7Zip não reconheceu a estrutura dos executáveis do meu cd.

Parti então para buscar programas que fossem capazes de fazer esse trabalho.  Encontrei vários, mas apenas o MultiExtractor foi capaz de interpretar os executáveis e listar as imagens disponíveis para extração.  E aqui tive dois revezes.

O primeiro deles é que o MultiExtractor era uma versão gratuita que permite apenas a extração de cinco imagens.  De nada adiantava desinstalar e instalar novamente, porque ele mantinha em algum canto da máquina o registro de que eu já tinha extraído as cinco imagens a que tinha direito.  Pra enganá-lo, apelei para mais um subterfúgio:  a Sandbox do Windows 10.

Eu executava a Sandbox, copiava pra ela o executável do cd-rom, instalava nela a versão gratuita do MultiExtractor, extraía cinco imagens, fechava a Sandbox e abria uma nova.  Como uma nova Sandbox é uma máquina virtual que não tem informações de execuções anteriores, eu podia instalar o MultiExtractor de novo e extrair mais cinco imagens.  Repeti o processo algumas dezenas de vezes.

Depois de extrair todos os arquivos, parti pra convertê-los pra png, porque o formato original era wmf.  Procurei por vários programas pra fazer a conversão em lote, mas os poucos que reconheciam o formato wmf não faziam a conversão correta, e mudavam as dimensões do arquivo, deixando-o esticado.  Terminei tendo que fazer um a um, na mão, usando o Paint.  Eu abria o arquivo wmf no Paint e usava o comando Salvar Como para salvar no formato .png.

Mas tinha o segundo revés:  o MultiExtractor não encontrou todas as imagens disponíveis no programa, então eu tive que partir de novo pra força bruta:  tirar prints.  Com o programa do cd-rom rodando no jDosBox, eu abria uma tela com uma imagem a ser extraída, tirava um print, colava no Paint, fazia os recortes necessários e salvava.


Parte 4. Extração dos vídeos e músicas

Essa foi a parte menos trabalhosa.  Como os arquivos de áudio e vídeo não foram empacotados nos executáveis, eles estavam disponíveis para acesso na estrutura de pastas do cd-rom.  Foi só uma questão de copiá-los.

No caso dos arquivos de vídeo, tive que reconverter todos eles, porque os arquivos originais estavam usando um codec que o Windows não reconhecia mais.  Pra isso, usei a versão gratuita do Any Video Converter.  Foi um trabalho bem fácil, porque a conversão foi em lote, e converti todos os quase 400 arquivos num clique só.



Rebarba Final.  Links pra quem quer links

Ao longo do texto estão espalhados os links pros programas que eu cito.  Pra facilitar a busca, reúno todos aqui no final:

jDosBox, pra criar uma máquina virtual onde instalei o Windows 98 e o programa Limite.

Visual Studio Code, pra abrir os arquivos executáveis como texto.

MultiExtractor, pra extrair imagens empacotadas nos executáveis.

Sandbox do Windows, pra criar uma máquina virtual com Windows 10 zerada.

Any Video Converter, pra converter arquivos de vídeo pra tecnologias mais novas.