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

Gamasutra's Postmorten: RiverMan Media's MadStone

Aqui vão os meus comentários sobre este postmortem. O jogo em questão, MadStone, foi desenvolvido para a plataforma WiiWare, vindo de um antigo sonho de publicar um jogo para Nintendo (dos fundadores da RiverMan). MadStone é um puzzle 2d, onde as peças vão caindo (assim como tetris) e que custa U$8.00 no WiiWare. Antes de publicar um jogo para WiiWare, a desenvolvedora havia já desenvolvido outros dois jogos casuais para PC, Cash Cow e Primate Panic. Tela do jogo MadStone Bom, vamos às dicas deixadas pelos desenvolvedores: O que funcionou: 1. Correr atrás da Nintendo: Entre contatar a Nintendo e se tornar um desenvolvedor autorizado, os desenvolvedores tiveram que correr um pouco atrás. A primeira lição é justamente essa, não é fácil correr atrás e muitas vezes temos que sair de nossa zona de conforto para conseguir as coisas. 2. Plataforma 2D: A decisão de desenvolver um jogo 2D foi tomada por algumas facilidades como ferramentas de arte mais simples, como o photoshop; Pouco código

Converter campo text para varchar – SQL Server 2000

Outro dia, conversando com um analista de sistemas no trabalho, este me perguntou, qual era melhor, usar o tipo text ou varchar no campo. Bom, baseado em minhas experiências, respondi que prefiro trabalhar com varchar. Mas antes, uma breve pesquisa no google nos mostrou que: text     Variable-length data with a maximum length of 2^31 - 1 characters varchar Variable-length data with a maximum of 8,000 characters fonte: Database Journal Depois de analisarmos o propósito a que o campo serviria, decidimos por um campo varchar(500). Se você, assim como eu, tentou utilizar uma alter table, alter column, deve ter visto um aviso do SQL Server de que isto não é possível de se fazer. Mas e agora? É isso mesmo que pensamos: temos que criar o novo campo e popular com o que havia no antigo campo. Exemplo: EXEC sp_rename 'tab_inf_nota.mensagem', 'mensagem_old', 'COLUMN'

My fist job @ game industry!

Yes, yes and yes! I have no words to describe this! Awesome, hot, wild! So, what I did? Work as Game Tester for  @LowpolyStudios The game Blowing Pixels Planet Defender for #iPhone was sended to Apple Store review in August 17 and is expected to launch in August 29, so stay tunned! Blowing Pixels Planet Defender, or just BPPD, is a Defender kind game, so you have to break the enemies invasion. Actually, this game is so addictive, like play Tetris! Your brain will enjoy, hwar, hwar, hawr... You can see more details @ developer's web sites: http://www.lowpoly-studios.com/ http://www.facebook.com/LowpolyStudios http://twitter.com/#!/lowpolystudios http://www.blowing-pixels.com/planet_defender.php Oh! Yeah, the Credit Screen: I'm in Testers part: ALEX CANCADO. So, fuck'n YEAH! Next related post I will write about how I get in touch with developer and my contribution about the game.