Pular para o conteúdo principal
2008-07-23: finalmente, o programa funciona! Nesta parte final o que fizemos foi criar o método geraStr(), que como o nome fala, vai gravar o arquivo STR.

- primeiro instanciamos rafOut, rafOut = new RandomAccessFile(fileNamePath+".str", "rw");, que vai gerar um arquivo ao final chamado “nome.str.str”.

- em rafOut.writeShort(Short.reverseBytes(totalPonteiros)); estamos escrevendo em primeiro lugar o ponteiro de ponteiros, hehe, que é um short com a quantidade de ponteiros que existe no arquivo. Detalhe, que para colocar de volta no arquivo, temos que inverter os bytes para a forma original.

- depois temos um laço que percorrerá o array de RegistraPonteiro, lista[], pegando as informações, short ponteiro e byte[] conteúdo, gravando-as em sequencia no arquivo. Novamente, temos que inverter o short ponteiro para gravar de forma correta:
for ( i = 0; i < totalPonteiros; i++){
rafOut.writeShort(Short.reverseBytes(lista[i].getPonteiro()));
rafOut.write(lista[i].getConteudo());
}

O que importa mesmo é isso, o resto são besteiras que vou testando...

public void geraStr() {
try {
rafOut = new RandomAccessFile(fileNamePath+".str", "rw");
String titulo = this.getFrame().getTitle();
this.getFrame().setTitle(titulo+" salvando STR...");

rafOut.writeShort(Short.reverseBytes(totalPonteiros));//escreve a quantidade de ponteiros
for ( i = 0; i < totalPonteiros; i++){
rafOut.writeShort(Short.reverseBytes(lista[i].getPonteiro()));
rafOut.write(lista[i].getConteudo());
}

this.getFrame().setTitle(titulo+" salvando STR... OK!");
this.getFrame().setTitle(titulo);
//rafOut.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(StrEditorView.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ioe){
Logger.getLogger(StrEditorView.class.getName()).log(Level.SEVERE, null, ioe);
}
}

Ah, a classe RegistraPonteiro():
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package streditor;

/**
*
* @author Administrator
*/
public class RegistraPonteiro {
private short ponteiro; //aqui temos o ponteiro, que é o tamanho do bloco
private byte[] b = new byte[ponteiro]; //aqui vamos guardar o bloco de bytes deste ponteiro

/**
* Aqui vamos passar o valor de ponteiro
* @param sh
*/
public void setPonteiro(short sh){
this.ponteiro = sh;
}
/**
* Aqui passamos o valor do array de bytes do conteúdo
* @param b
*/
public void setConteudo (byte[] b){
this.b = b;
}
/**
* retornamos o valor em ponteiro
* @return
*/
public short getPonteiro (){
return this.ponteiro;
}
/**
* retornamos o valor do array byte
* @return
*/
public byte[] getConteudo (){
return this.b;
}

RegistraPonteiro(short p, byte[] b){
this.ponteiro = p;
this.b = b;
}
}

Ainda vou deixar o programinha mais funcional e lógico, mas já dá para trabalhar com as STRs. Resumindo, este programinha:

- Abre um arquivo STR, lê toda sua estrutura, quantidade de ponteiros, ponteiro e conteúdo, e passa para um array de RegistraPonteiro.

- Faz a leitura do array que contém as informações e joga numa área de texto para ser editada.

- A cada movimento de teclado ou clique de mouse, dispara métodos para atualizar linhas e cálculos de ponteiro/conteúdo, gravando os novos valores no array RegistaPonteiro que continha as informações.

- Gera um novo arquivo .str, gravando a quantidade de ponteiros, seguida pelos ponteiros e seus conteúdos, conforme ocorrem no array RegistraPonteiro.

- Gera também um arquivo .txt do que está na área de texto.

Testei a funcionalidade, carregando um arquivo str, percorrendo com o teclado e clicando (apenas para ativar os métodos atualizadores) o arquivo e salvando o str. Depois com o UltraEdit foi só comprarar os arquivos, gerado e original em modo byte para ver se ocorria alguma diferença. No início estava ocorrendo um erro no cálculo dos novos ponteiros, mas logo vi o que era e foi corrigido.
Depois, testei mesmo o StrEditor em ação, abri o arquivo que tinha traduzido manualmente à muito tempo, base.str, modifiquei “Automapa” para “Mapa”, salvei, gerei um novo arquivo .JAR e testei no emulador. Daí foi só correr pro abraço...


Antes e depois, de forma prática e sem traumas! Finalmente!

Comentários

Postagens mais visitadas deste blog

Instalar Módulo de Proteção Santander no Mac OSX Mountain Lion

Repararam que o módulo de proteção do banco Santander parou de funcionar? Isso, no meu caso foi quando atualizei o OSX para o Mountain Lion. Há quem diga que parou quando da atualização do navegador Safari. Enfin, depois de brigar um pouco com versões Java, consegui encontrar no forum da Apple a solução: Após atualizar o meu MacBook Pro para o Mountain Lion, o módulo de proteção do Santander parou de funcionar no Google Chrome. Ao clicar no botão instalar módulo de proteção, nada acontecia. Olhando o javascript mais a fundo, achei uma chamada a URL ' https://wwws.santandernet.com.br/MPS/moduloJava.html '. Ao inserir ela no browser e pressionar <ENTER>, recebia uma mensagem 'plugin inactive'. Pare resolver o problema, abri uma nova aba e entrei no endereço 'chrome://plugins/'. Naveguei até o plugin do Java, desabilitei o mesmo e reiniciei o chrome. Feito isso, entrei novamente no endereço e ativei este plugin. Ao entrar novamente no s...

GameDev Tutorial - Basic Circle Chain Engine Using Unity3D Part 1

Circle Chain ( http://www.emanueleferonato.com/stuff/circle_chain/ ) is a simple game developed in 2007 by Emanuele Feronato ( http://www.emanueleferonato.com ) as a monetization test in Flash Games. In fact it's based on Boomshine ( http://www.k2xl.com/games/boomshine/ ) Emanuele has since, ported his game tutorial for lots of platforms: AS3: (complete)  http://www.emanueleferonato.com/2012/02/20/circle-chain-ported-to-as3-with-commented-source-code-available-ready-to-jump-to-the-iphone/ Game Maker: (basic)  http://www.emanueleferonato.com/2012/06/07/circle-chain-engine-made-with-game-maker/ Construct2 HTML5:  http://www.emanueleferonato.com/2012/03/14/html5-version-of-circle-chain-engine-using-scirras-construct2/ Corona SDK:  http://www.emanueleferonato.com/2012/02/24/basic-circle-chain-engine-using-corona-sdk/ Gideros Studio:  http://www.emanueleferonato.com/2012/04/12/basic-circle-chain-engine-using-gideros-studio/ Stencyl:  http://www.emanueleferonato.com/2012/02/29/ba...

GameDev Tutorial - Basic Circle Chain Engine Using Unity3D Part 2

This part 2 is not so detailed like before, so If you need you can see the part 1 here:  http://alxcancado.tumblr.com/post/62482465038/gamedev-tutorial-basic-circle-chain-engine-using Once again I want say that this is my port for Unity3D from Emanuele Feronato's tutorial:  http://www.emanueleferonato.com/2013/05/21/from-zero-to-a-complete-game-with-cocos2d-html5-step-2-mouse-interaction/   Okay, time to put some mouse interaction. 1. add the new textures: red circle, bullet red; configure texture type to advanced, uncheck generate mipmap and filter mode to point. 2. drag and drop the greencircleprefab from prefab folder to the hierarchy. drag and drop the red circle texture to this and rename to RedCircle. Remove the GreenCricle script from it. We will create a script to this object later. 3. But we still need create our Bullet prefab. To make it simple, just duplicate the RedCircle object from hierarchy panel with Command+D or (Control+D in windows?). Then rename this ...