Game Boy e suddivisione di testi

Tutta l'informatica

Game Boy e suddivisione di testi

Messaggioda sHaDy » ven apr 02, 2004 1:08 am

Ho un nuovo interessante (?) quesito da porvi. Mi sto cimentando nella programmazione di applicazioni per Game Boy Color (ebbene sì!) ma mentre cercavo di creare un reader di E-book sono incianpato in un problema. Premetto che programmo in C e uso per compilare GBDK. Dunque, io devo creare un programma in C generatore.c (non per GB, un programma normalissimo da compilare con il solito gcc) che generi di volta in volta il codice di un altro programma reader.c (questa volta per GB) che poi sarà il nostro E-book da leggere sulla mini console. Che c'è di difficile? Beh il problema è che per GB il testo va formattato a 20 colonne e 8 righe affinchè sia leggibile. Per intenderci:

ciaociaociao hahahah
mi piace la pappa ma
non il pomodoro ciao
/////////////////////////
pastellogino pino io e
te te e io egli e babbo
aaaaaaaaaaaaaaaaaa
hdhdhdhdhdhdhdhdhd

Il programma generatore.c deve quindi accettare come argomento un file contenente un testo già diviso a questa maniera e deve separare i singoli blocchi di 20x8 e scriverli nel file di output che conterrà il sorgente di reader.c. Il problema è proprio suddividere i blocchi e scriverli separatamente. Per chiarirvi le idee (mi sono accorto di essere stato chiaro come un tafano) vi pasto quello che dovrebbe essere un possibile sorgente generato da generatore.c


#include <gb/gb.h>
#include <stdio.h>


void pag_2()
{
printf("( DMCA , ECMA) sul\n");
printf("copyright digitale;\n");
printf("minacce messe in\n");
printf("atto da potenti\n");
printf("organizzazioni (vedi\n");
printf("la RIAA) con le loro\n");
printf("iniziative aggressi-\n");
printf("ve. Per non dimenti-\n");
}


void pag_1()
{
UBYTE f = 0;
printf("Sono molte le batta-\n");
printf("glie che vedono im-\n");
printf("pegnati gli hacker\n");
printf("su tutti i fronti.\n");
printf("Intanto ci sono le\n");
printf("minacce provenienti\n");
printf("dalle celebri leggi\n");
printf("americane ed europee\n");

f = waitpad(J_START);
waitpadup();
if(f == J_START) {
pag_2();



}
}


void main(void)
{
UBYTE i, n = 0;


printf("-------------------- \n");
printf(" [O]nda [Q]uadra \n");
printf(" L0GiN - LA JiHAD \n");
printf("-------------------- \n");
printf("START: avanti \n");

while(1) {
i = waitpad(J_START);
waitpadup();

if(i == J_START)
{
pag_1();
}
}
}

Life's not a bitch, Life is a beautiful woman,
You only call her a bitch because she won't let you get that pussy
Avatar utente
sHaDy

Maestro
 
Messaggi: 464
Iscritto il: mar feb 04, 2003 7:59 pm

Messaggioda RadomE » ven apr 02, 2004 5:43 am

Sinceramente non ho capito bene il tuo problema....devi creare un programma che generi codice formattato come vuoi tu? :mah:
Si ricordano le idee ma non gli uomini, gli uomini muoiono le idee sono eterne. Ho visto gente uccidere in nome delle idee, li ho visti morire per difenderle. Ma non si pu? abbracciare un'idea, non la si pu? baciare. Le idee non sanguinano, non provano dolore. Le idee non amano.
Avatar utente
RadomE

Eroe
 
Messaggi: 820
Iscritto il: ven gen 10, 2003 12:02 pm
Località: Mi considero cittadino del mondo...WOW

Messaggioda The Elter » ven apr 02, 2004 2:34 pm

Effettivamente non sei stato affatto chiaro!

Sembra comunque che il problema sia quello di frmattare un testo ascii a 20 colonne giusto? :sperduto:
Quando la tigre ruggisce, si alzano forti venti; quando il drago grida, si addensano le nubi. Il verso della lepre o il raglio dell'asino invece non hanno alcun effetto sul vento e sulle nubi.
Avatar utente
The Elter

Veterano
 
Messaggi: 161
Iscritto il: lun set 22, 2003 10:41 am
Località: Firenze

Messaggioda sHaDy » sab apr 03, 2004 2:28 pm

Scusate, vedrò di essere più chiaro :scherza:

Allora io devo scrivere un programma che dato in input un testo formattato 20 colonne restituisca in output un file .c che contiene un codice simile a quello scritto sopra. Il problema principale che non riesco a risolvere è come fare per dividere il testo formattato a 20 colonne in blocchi da 8 righe al fine di considerare ogni blocco separatamente.
Life's not a bitch, Life is a beautiful woman,
You only call her a bitch because she won't let you get that pussy
Avatar utente
sHaDy

Maestro
 
Messaggi: 464
Iscritto il: mar feb 04, 2003 7:59 pm

Messaggioda RadomE » sab apr 03, 2004 6:01 pm

Ok ho capito..forse.. :ammicca:
Una domanda: l'input come viene dato, lo prende da un file di testo?lo inserisci a mano (scanf() per intenderci)?
Si ricordano le idee ma non gli uomini, gli uomini muoiono le idee sono eterne. Ho visto gente uccidere in nome delle idee, li ho visti morire per difenderle. Ma non si pu? abbracciare un'idea, non la si pu? baciare. Le idee non sanguinano, non provano dolore. Le idee non amano.
Avatar utente
RadomE

Eroe
 
Messaggi: 820
Iscritto il: ven gen 10, 2003 12:02 pm
Località: Mi considero cittadino del mondo...WOW

Messaggioda sHaDy » sab apr 03, 2004 6:04 pm

Inserisci da linea di comando il nome del file di testo ad esempio:

generatore.c input.txt output.c
Life's not a bitch, Life is a beautiful woman,
You only call her a bitch because she won't let you get that pussy
Avatar utente
sHaDy

Maestro
 
Messaggi: 464
Iscritto il: mar feb 04, 2003 7:59 pm

Messaggioda Blackfede » dom apr 04, 2004 6:43 pm

Potresti fare una cosa del tipo leggo 20 caratteri,e li metto in una stringa, controllo se il 21 è uno spazio, allora scrivo tutto il contenuto della stringa sul file output.c. Se invece il 21 non è uno spazio allora puoi scorrere la stringa all'indietro alla ricerca di uno spazio, quindi scrivere tutto quello che c'è dallo spazio fino all'inizio della stringa, e via così fino alla fine del file.

Esempio:
questa è solo una prova per shady <---file imput.txt

Leggo i primi 20 char:

Codice: Seleziona tutto
istream sorg ("imput.txt");
ostream dest ("output.txt");
string A(21);
while (sorg.tellg() <= 20) {
   get(sorg, A); // non sono sicuro che la classe string supporti il get
}


A=|q|u|e|s|t|a| |è| |s|o|l|o| |u|n|a| |p|r| |

Adesso controllo che il 21° sia uno spazio, se lo è posso scrivere nell'output il codice

Codice: Seleziona tutto
get(sorg,A);
if (A[21] == ' ')
   dest << //codice per creare il giusto output;


A=|q|u|e|s|t|a| |è| |s|o|l|o| |u|n|a| |p|r|o|

Se il 21 carattere non è uno spazio, scorro la stringa dall'ultimo elemento, verso il primo, fino ad incontrare uno spazio:

Codice: Seleziona tutto
int index_space;
else for (int i=20, i=0, i--) {
   if (A[i] == ' ' )
   index_space = i;
   }


A=|q|u|e|s|t|a| |è| |s|o|l|o| |u|n|a| |p|r|o|
index_space = 17

A questo punto scrivo nell'output tutta la stringa, dall'inizio fino all'indice index_space escluso;

Codice: Seleziona tutto
for (int i=0, i < index_space, i++)
   dest << A[i]; //non ho messo il codice per fare printf


Nell'output.txt dovresti avere la prima riga che contiene solo:
printf("questa è solo una\n");

per completare il tutto adesso devi spostare le lettere che non hai scritto all'inizio della stringa:

Codice: Seleziona tutto
for (int i=index_space+1, int j=0; i<=20; i++) {
   a[j]=a[i];
   j++;
}


Magari poi ti conviene cancellare tutte le altre lettere:

A=|p|r| | | | | | | | | | | | | | | | | | | |

Adesso devi ripete dall'inizio, solo che adesso i caratteri che leggi li devi mettere dopo la 'r', continuando avrai:

A=|p|r|o|v|a| |p|e|r| |s|h|a|d|y|.....ecc

Ecco ho finito, spero ti possa essere utile!
PS: Questo codice fa PENA!! Non l'ho provato, l'ho buttato giù ad ochhio per cui controlla tutti gli indici degli array e tutto il resto...se lo vedesse il mio prof di Programmazione mi fa rifare l'esame! :scherza:
I troll sono solo dei dementi che finisco in /dev/null
-------------------------------------------
I video giochi non influenzano i bambini. Voglio dire, se Pac-man avesse influenzato la nostra generazione, staremmo tutti saltando in sale scure, masticando pillole magiche e ascoltando musica elettronica ripetitiva...e dopo qualche anno ci furono i rave party!
Avatar utente
Blackfede

Eroe
 
Messaggi: 1227
Iscritto il: gio gen 16, 2003 10:18 am
Località: Parma

Messaggioda sHaDy » dom apr 04, 2004 9:45 pm

Grazie mille :felice: Ci provo e poi ti faccio sapere.
Life's not a bitch, Life is a beautiful woman,
You only call her a bitch because she won't let you get that pussy
Avatar utente
sHaDy

Maestro
 
Messaggi: 464
Iscritto il: mar feb 04, 2003 7:59 pm

Messaggioda Blackfede » lun apr 05, 2004 10:19 am

Ah, tieni conto che io ho usato il c++, quindi la libreria iostream, e poi ho visto che nel tuo esempio avevi fatto in modo che le parole andassero a capo spezzandosi, io non l'ho prevista come cosa, anche perchè è piouttosto complicata da implemetare... :ride:
I troll sono solo dei dementi che finisco in /dev/null
-------------------------------------------
I video giochi non influenzano i bambini. Voglio dire, se Pac-man avesse influenzato la nostra generazione, staremmo tutti saltando in sale scure, masticando pillole magiche e ascoltando musica elettronica ripetitiva...e dopo qualche anno ci furono i rave party!
Avatar utente
Blackfede

Eroe
 
Messaggi: 1227
Iscritto il: gio gen 16, 2003 10:18 am
Località: Parma

Messaggioda Whamoo » lun apr 05, 2004 1:47 pm

Mi pare che Blackfede ti abbia dato un'ottima dritta,
Se ancora non riesci posta qui il problema specifico che ci lavoriamo tutti insieme, magari si crea una classe con i metodi, che rende tutto molto piu' facile :ride:

Piuttosto dove hai trovato la documentazione per scrivere applicazione per il GB? Mi piacerebbe saperne di piu' se hai materiale o link mi fai sapere? :eheh2:

Saluti
-- rtg.library, non c'e' limite all'estensione
Avatar utente
Whamoo

Veterano
 
Messaggi: 172
Iscritto il: mer gen 15, 2003 1:40 pm
Località: 0- in geografia

Messaggioda sHaDy » lun apr 05, 2004 9:03 pm

Dunque hai bisogno di un compilatore (il migliore è il GBDK) e di un interprete (io uso il bgb per windows ma ce ne sono tanti). Puoi programmare tranquillamente in C (ovviamente con molte limitazioni) e poi si sono varie librerie specifiche. Per quanto riguarda la documentazione ce n'è molto poca e in inglese. Una guida carina è all'indirizzo: http://www.devrs.com/gb/files/gbdok.html

Per quanto riguarda il mio problema dovrei aver risolto.
Life's not a bitch, Life is a beautiful woman,
You only call her a bitch because she won't let you get that pussy
Avatar utente
sHaDy

Maestro
 
Messaggi: 464
Iscritto il: mar feb 04, 2003 7:59 pm


Torna a Tecnologia, internet, coding

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti