Jump to content
Nokioteca Forum

Miniguida per Iniziare


masmil1988
 Share

Recommended Posts

m-shell-Logo.gif

GUIDA ALLO SVILUPPO DI APPLICAZIONI

La seguente guida è ancora da completare, vuole essere soltanto una spinta per chi vorrebbe iniziare ma si scoraggia già all'inizio.

Chi volesse collaborare scrivendo spiegazioni su come compiere determinate operazioni può farlo, servirà d'aiuto per tutti coloro che vogliono programmare utilizzando questo linguaggio.

Hanno collaborato:

Mauro90

nokiomane

xMetallicax

ultimo aggiornamento: 11/06/2009,

- Attesa per il tocco dello schermo e estrazione delle coordinate del tocco

_________________________________________________

Nel tutorial, allo stato attuale, sono trattati i seguenti argomenti (oltre alle funzioni di base):

Aggiunta di un testo a un file IO

Acquisire immagini dalla fotocamera CAM

Apertura di un archivio .zip ZIP

Apertura di un file IO

Apertura di un'immagine GRAPH

Aprire un'applicazione/file APP

Attendere per la ricezione di un sms SMS

Attesa per il tocco dello schermo e estrazione delle coordinate del tocco UI

Attesa per la pressione di un tasto, riconoscimento del tasto premuto UI

Cambiare colore di riempimento GRAPH

Cambiare colore di scrittura GRAPH

Cambiare o ottenere il font utilizzato nel modulo graph GRAPH

Chiudere l'applicazione corrente PROC

Concatenare due o più array ARRAY

Connettersi a un server per la comunicazione TCP/IP. NET

Conoscere la lunghezza di un file audio AUDIO

Conoscere la posizione del file audio in esecuzione AUDIO

Copiare uno o più files FILES

Creazione di una lista UI

Creazione di una lista di elementi modificabili UI

Creazione di un menu UI

Creazione di un file IO

Disegnare una linea GRAPH

Disegnare un cerchio GRAPH

Disegnare un rettangolo GRAPH

Effettuare una chiamata PHONE

Elenco cartelle all'interno di una cartella FILES

Elenco files di una cartella FILES

Estrazione di un numero casuale MATH

Fare partire la canzone da un punto desiderato AUDIO

Ingrandire l'area del programma UI

Inserimento di una variabile UI

Inserimento di un messaggio UI

Inserire un testo GRAPH

Interrompere una chiamata PHONE

Inviare un sms SMS

Leggere una data linea IO

Leggere un sms ricevuto SMS

Lettura di un file per caratteri IO

Lettura di un file per linee IO

Ottenere il codice IMEI del cellulare GSM

Ottenere il colore di uno o più pixel GRAPH

Ottenere il livello del segnale per la rete corrente GSM

Ottenere la data e l'orario corrente TIME

Ottenere l'ID della cella nella quale ci troviamo GSM

Realizzare un'applicazione a tutto schermo GRAPH

Riprodurre un beep AUDIO

Riprodurre un file audio (mid, wav, mp3, ecc...) AUDIO

Salvare solo una porzione di quello che è disegnato GRAPH

Salvare tutto quello che è stato disegnato in un'immagine GRAPH

Sapere quali file sono presenti in un archivio .zip ZIP

Sapere se un file esiste FILES

Scattare e salvare una foto CAM

Scrittura su un file IO

Simulare la pressione di un tasto APP

Stoppare un file audio in riproduzione AUDIO

Tagliare un numero e tenere solo la parte intera MATH

Tagliare un numero e tenere solo la parte decimale MATH

Tagliare un numero e tenere tutta la parte intera e soltanto alcune cifre della parte decimale MATH

Tenere la luce accesa UI

Usare la vibrazione VIBRA

Volume della periferica audio AUDIO

_________________________________________________

INIZIO

Per iniziare a scrivere il codice dobbiamo, ovviamente, prima aprire mShell.

Una volta aperto clicchiamo col tasto di selezione sinistro e selezioniamo "New script".

Qui possiamo già scrivere il codice.

All'inizio del codice dobbiamo specificare di quali moduli faremo uso nella nostra applicazione; facciamo questo tramite l'istruzione use [modulo].

Un esempio, volendo creare un programma nel quale vogliamo fare uso di alcune immagini (anche immagini di design per abbellire il programma) dobbiamo fare uso del modulo GRAPH. Per avere la possibilità poi di gestire i tasti della tastiera del cellulare dovremo fare uso del modulo UI.

La nostra applicazione inizierà quindi con il codice use graph,ui.

Se dobbiamo fare uso di altri moduli basta separare questi tramite una virgola.

OPERAZIONI FONDAMENTALI

Addizione: x+y (somma di due numeri) (concatenazione di due stringhe)

Sottrazione: x-y (sottrazione di due numeri)

Moltiplicazione: x*y (prodotto di due numeri)

Divisione: x/y (quoziente di due numeri)

Resto: x%y (resto della divisione x/y)

Eguagliazione: x=y (x assume il valore di y)

Incremento 1: x++ (la variabile x viene incrementata di 1)

Incremento 2: x+=y (è uguale a scrivere x=x+y, a x viene sommato y)

Decremento 1: x-- (la variabile x viene decrementata di 1)

Decremento 2: x-=y (è uguale a scrivere x=x-y, a x viene sottratto y)

_________________________________________________

CICLI

If : esegue le istruzioni finché la condizione è vera

if condizione/i then

istruzioni;

end;

If-Else: esegue le istruzioni che seguono l'If se la condizione è vera, altrimenti esegue le istruzioni che seguono l'Else

if condizione/i then

istruzioni;

else

istruzioni;

end;

While: esegue le istruzioni finché la condizione è vera

while condizione/i do

istruzioni;

end;

Do-Until: esegue almeno una volta le istruzioni che seguono il Do, e continua a eseguirle se la condizione che segue l'Until è vera

do

istruzioni;

until condizione/i;

For: utile se si deve eseguire una certa operazione un certo numero di volte

for i=0 to 100 by 1 do

istruzioni;

end;

i parte da 0 e finchè non arriva a 100 vengono eseguite le istruzioni. i viene ogni volta incrementato di 1 (by 1).

(Solo in questo caso. i potrebbe partire da un qualsiasi numero e arrivare a un qualsiasi altro numero)

_________________________________________________

CONDIZIONI: (le seguenti condizioni vanno usate come condizioni per If, Else e While)

x=y (x è uguale a y)

x#y (x è diverso da y)

x<y (x è minore di y)

x<=y (x è minore o uguale a y)

x>y (x è maggiore di y)

x>=y (x è maggiore o uguale a y)

PIÙ CONDIZIONI

condizione1 or condizione2 (è vera la condizione1 o è vera la condizione2)

condizione1 and condizione2 (la condizione1 e la condizione2 devono essere tutt'e due vere)

_________________________________________________

FUNZIONI FUORI DAI MODULI:

cls() - pulisce lo schermo.

a=len("parola") - riporta in a la lunghezza della parola scritta tra virgolette.

a=len(array) - riporta in a la lunghezza dell'array scritto tra parentesi.

a=lower("PAROLA") - a assumerà tutte le lettere della parola scritta tra parentesi, soltanto che queste saranno tutte lettere minuscole.

a=num(numero) - utile se la variabile numero non viene ad esempio riconosciuta come numero ma come stringa. In questo modo si effettua la conversione da una stringa a un numero. a sarà quindi il nostro numero.

sleep(numsecondi) - tra parentesi va scritto il numero, in millisecondi, per cui il programma si deve feramre.

a=str(numero) - serve a convertire un numero in stringa formato testuale in modo da poterlo stampare con funzioni le quali vogliono come parametri delle stringhe.

a=substr(vecchiastringa,inizio,lunghezza) - permette di tagliare la stringa vecchiastringa a partire dal carattere inizio per un numero di caratteri uguale a lunghezza. I caratteri "tagliati" andranno a finire nella variabile a.

a=upper("parola") - a assumerà tutte le lettere della parola scritta tra parentesi, soltanto che queste saranno tutte lettere maiuscole.

_________________________________________________

USI VARI DELLE FUNZIONI DEI MODULI:

ricordatevi che per utilizzare le funzioni di ogni modulo dovete specificare, all'inizio del programma, che avete intenzione di usare quel determinato modulo.

Scriverete quindi per esempio: use graph

per utilizzare più moduli nello stesso programma basta scrivere per esempio: use graph,math,ui

AGENDA

-

APP

Aprire un'applicazione/file

app.open("percorso_del_file");

Scrivendo il percorso del file tra virgolette verrà aperta l'applicazione. Per i programmi/giochi è necessario scrivere il percorso del file APP che si trova in C:\SYSTEM\APPS\ o in E:\SYSTEM\APPS\. La funzione può essere usata anche per aprire file che non siano applicazioni; in quel caso verrà aperto automaticamente il programma a cui è associata l'estensione del file.

Simulare la pressione di un tasto

ui.keys(true);

app.key([53,-53])

Dichiariamo prima gli interessi all'uso degli eventi-tastiera tramite la funzione ui.keys().

L'esempio mostra come simulare la pressione di un qualsiasi tasto (in questo caso il tasto 5).

Alla funzione app.key() passiamo come parametri i codici dei tasti da simulare. Il valore positivo indica il tasto premuto, il valore negativo indica il tasto rilasciato. Per simulare altri tasti basta scrivere sempre nello stesso array i codici corrispondenti.

Elenco completo dei tasti con relativo codice tastiera:

joystick sinistra: 14

joystick destra: 15

joystick sopra: 16

joystick sotto: 17

pressione joystick: 167

matita: 18

C: 1

0: 48

1: 49

2: 50

3: 51

4: 52

5: 53

6: 54

7: 55

8: 56

9: 57

*: 42

#: 127

selezione sinistro: 164

selezione destro: 165

spegnimento: 166

blocca tastiera: 169

verde: 196

rosso: 197

menu: 180

ARRAY

Concatenare due o più array.

Se abbiamo due array e li vogliamo concatenare basta usare la funzione array.concat()

ad esempio abbiamo due array:

a=["mela","pera"];

b=["ciliegia","banana"]

c=array.concat(a,b )

print c

-->[mela,pera,ciliegia,banana]

AUDIO

Conoscere la lunghezza di un file audio.

audio.open("percorso_del_file");

a=audio.len();

Con la prima istruzione apriamo il file audio di cui vogliamo conoscere la lunghezza.

Con la seconda nella variabile a viene allocata la lunghezza in millisecondi del file audio

Conoscere la posizione del file audio in esecuzione.

audio.open("percorso_del_file");

a=audio.pos();

Con la prima istruzione apriamo il file audio sul quale vogliamo lavorare.

Con la seconda nella variabile a viene allocata la posizione in millisecondi del file audio in esecuzione, che ovviamente se prima non avviaremo con la funzione audio.play() ritornerà il valore 0.

Fare partire la canzone da un punto desiderato.

audio.open("percorso_del_file");

audio.pos(10000);

audio.play();

while audio.busy() do end;

Se non si vuole eseguire un brano dall' inizio ma ad esempio da 10 secondi, apriamo prima il file. Prima di avviarlo con la funzione audio.play() decidiamo da quanti millisecondi partendo dall'inizio deve suonare la canzone. Dopo ciò riproduciamo il file come spiegato sotto.

Riprodurre un beep

audio.beep(frequenza,millisec);

while audio.busy() do end;

Con questa funzione possiamo far riprodurre al cellulare un determinato suono alla frequenza voluta, per il tempo che desideriamo. Tra parentesi dobbiamo scrivere due numeri: la frequenza del suono da riprodurre e il tempo (espresso in millisecondi) per il quale dovrà essere riprodotto il suono.

Dopo la funzione audio.beep() dobbiamo tenere il cellulare impegnato a fare qualcosa (anche a fare "niente", come nel codice di cui sopra), in questo caso con while audio.busy() do end;, che significa che il cellulare resta impegnato a fare "niente" intanto che l'audio è impegnato (la funzione audio.busy() ci dice se l'audio è o non è impegnato).

Riprodurre un file audio (mid, wav, mp3, ecc...)

audio.play("percoso_del_file");

while audio.busy() do end;

Per riprodurre il suono usiamo la funzione audio.play(). Tra le parentesi scriviamo, dentro virgolette, il percorso del nome del file da aprire. I file che possono essere riprodotti sono quelli che può leggere il cellulare. Ad esempio il 6600 di suo non può aprire files mp3.

Dopo la funzione audio.play() dobbiamo tenere il cellulare impegnato a fare qualcosa (anche a fare "niente", come nel codice di cui sopra), in questo caso con while audio.busy() do end;, che significa che il cellulare resta impegnato a fare "niente" intanto che l'audio è impegnato (la funzione audio.busy() ci dice se l'audio è o non è impegnato).

Stoppare un file audio in riproduzione.

audio.stop();

Per fermare un file audio in riproduzione basta questa semplicissima funzione.

Volume della periferica audio.

audio.volume(volume);

Questa funzione serve per regolare il volume dell'audio che verrà riprodotto con il programma. Il volume desiderato va scritto tra le parentesi della funzione, ricordando che il volume MAX=100 e il volume MIN=0.

BIGINT

-

BT

-

CAM

Acquisire immagini dalla fotocamera.

cam.on(1);

while true do

a=cam.take();

graph.put(0,0,a);

graph.show();

end

Utilizzando la funzione cam.take() è necessario utilizzare anche il modulo graph. Eseguendo questo codice verrà mostrato in alto a sinistra sullo schermo la sequenza delle immagini riprese dalla fotocamera con una risoluzione di 160x120 (questo perchè alla funzione cam.on() abbiamo passato come parametro il valore 1). Le immagini vengono progressivamente archiviate nella variabile a, tramite la funzione graph.put() posizioniamo queste alle coordinate x=0 e y=0 (l'angolo in alto a sinistra) e tramite la funzione graph.show() mandiamo ripetutamente le immagini a video.

Scattare e salvare una foto

graph.size(640,480); //nel caso del Nokia 6600

cam.on(0);

a=cam.take();

graph.put(0,0,a);

graph.save("e:\\immagine.jpg");

E' sempre la funzione cam.take() che permette di acquisire foto. A differenza del punto Acquisire immagini dalla fotocamera in questo caso la dimensione dell'immagine che verrà scattata non sarà di 160x120 bensì di 640x480 (nel caso del Nokia 6600) in quanto alla funzione cam.on() abbiamo passato stavolta il parametro 0. Una volta acquisita l'immagine e salvata questa nell'oggetto a poniamo questa immagine nello spazio riservato alla grafica (senza però necessariamente mandarla a video). Direttamente salviamo l'immagine alla destinazione voluta tramite la funzione graph.save().

Edited by masmil1988
Link to comment
Share on other sites

  • Replies 72
  • Created
  • Last Reply

Top Posters In This Topic

COMM

-

CONTACTS

-

FILES

Copiare uno o più files

files.copy("sorgente","destinazione",ricorsività=true/false);

Al posto di "ricorsività=true/false" si mette appunto true o false a seconda che si voglia (true) o meno (false) copiare tutti i files continui all'interno di un percorso di una directory, dunque ricreando l'esatta struttura di quella sorgente.

esempio: files.copy("c:\\documents\\mShell\\*.m","E:\\documents\\mShell\\", true)

(copia tutti i files con la sola estensione *.m)

Elenco cartelle all'interno di una cartella.

a=files.scan("e:\\",files.dir);

La variabile a sarà un array contenente tutti i nomi della cartelle presenti in "e:\".

Elenco files di una cartella.

a=files.scan("e:\\*.*");

La variabile a sarà un array contenente tutti i nomi dei files presenti in "e:\".

Sapere se un file esiste.

a=files.exists("e:\\esempio.txt");

Questa funzione restituisce un valore booleano, quindi:

se il file esiste a=true

se non esiste a=false

GRAPH

Apertura di un'immagine.

graph.size(x,y);

immagine=graph.icon("percorso_del_file");

graph.put(coord_x,coord_y,immagine);

graph.show();

Per aprire un'immagine inizialmente dobbiamo definire l'altezza e la larghezza della parte di schermo che dobbiamo utilizzare (x e y di graph.size()).

Fatto ciò possiamo indicare il percorso dell'immagine da aprire usando la funzione graph.icon(), dentro alle quali parentesi scriveremo tra virgolette il percorso di questa. Ricordandoci che invece di "\" dobbiamo scrivere "\\" (esempio: "e:\\images\\immagine.jpg").

Con la funzione graph.put() andiamo a specificare in quale spazio è aperta l'immagine (nel nostro caso è nella variabile immagine). Tra parentesi dopo graph.pu andiamo a scrivere le coordinate x e y dove andrà a comparire l'immagine e la variabile dove si trova l'immagine.

Infine usiamo la funzione graph.show() per mostrare a video tutto quello che abbiamo caricato sulla grafica nel frattempo.

Cambiare colore di riempimento.

graph.brush(colore);

Dopo questa istruzione cambierà il colore di riempimento per le varie figure (rettangoli, cerchi, ecc...)

Il colore che passeremo come paremetro alla funzione dovrà essere un numero intero, calcolato come spiegato sotto.

Cambiare colore di scrittura.

graph.pen(colore);

Dopo questa istruzione cambierà il colore della penna e dei bordi delle varie figure geometriche (rettangoli, cerchi, linee...).

Il colore che passeremo come paremetro alla funzione dovrà essere un numero intero.

Calcolo del colore: ogni colore prende vita da 3 valori, che sarebbero rispettivamente la tonalità di Rosso (Red), Verde (Green), Blue (Blue). Il sistema è detto appunto (RGB). La tonalità di ogni colore va da 0 a 255. Basta scegliere la tonalità di ognuno dei 3 colori, convertire ognuno di questi in esadecimale, affiancare tutti e 3 i numeri in esadecimale (prima il rosso, poi il verde e poi il blue e quindi riconvertire il numero nel sistema decimale.

Cambiare o ottenere il font utilizzato nel modulo graph.

graph.font();

I font sono espressi sotto forma di un array suddiviso in quattro campi:

[nomedelfont,dimensione,grassetto,corsivo]

nomedelfont è una stringa,

dimensione è un numero,

grassetto e corsivo invece sono due boolean.

Per settare un nuovo font basta passare alla funzione un array contenente i 4 parametri sopra indicati.

Disegnare una linea.

graph.line(x1,y1,x2,y2);

graph.show();

x1 è l'ascissa del punto da dove deve partire la linea.

y1 è l'ordinata del punto da dove deve partire la linea.

x2 è l'ascissa di fine.

y2 è l'ordinata di fine.

Disegnare un cerchio

graph.circle(x,y,diametro)

Tramite questa funzione è possibile disegnare un cerchio, dove:

x sta alle ascisse,

y sta alle ordinate,

il diametro è espresso in pixel.

NB: x e y non definiscono il centro del cerchio ma il vertice superiore sinistro del cerchio, come se fosse un'immagine.

Disegnare un rettangolo.

graph.rect(x,y,w,h);

graph.show();

x è l'ascissa.

y è l'ordinata.

w è la larghezza.

h è l'altezza.

Inserire un testo

graph.text(x,y,testo,direzione);

Tramite questa funzione si può inserire un testo con coordinate x e y

Se direzione è uguale a zero allora il testo sarà disegnato orizzontalmente.

Se direzione è maggiore di zero il testo sarà disegnato verticalmente verso su.

Se direzione è minore di zero il testo sarà disegnato verticalmente verso giù

Ottenere il colore di uno o più pixel.

graph.get(x,y);

Si ottiene il colore del pixel che ha posizione x e y.

graph.get(x,y,w);

Si ottiene un array contenente i colori dei pixel della linea di lunghezza w con partenza da x e y.

graph.get(x,y,w,h);

Questa volta si otterrà un array contenente tanti array quanto h, in pratica ogni array contiene i colori di una linea.

Realizzare un'applicazione a tutto schermo.

graph.size(176,208);

graph.full(true);

In questo modo passiamo prima alla funzione graph.size() le dimensioni del nostro schermo (che sono appunto 176x208) e con l'istruzione graph.full(true) abilitiamo la grapica a tutto schermo. Possiamo ora utilizzare tutti i 176x208 pixel per le nostre applicazioni. Senza l'istruzione graph.size(176,208) la grafica verrà ugualmente impostata a tutto schermo, non potremo però lavorare sugli ultimi 176x20 pixel in basso (che sono i pixel occupati dalla barra sottostante).

Salvare solo una porzione di quello che è disegnato.

graph.save(percorso,x,y,w,h);

x sta alle ascisse, y alle ordinate, w sta alla larghezza, h sta all'altezza.

NB: sono supportate solo 3 estensioni: gif,jpg,png.

Salvare tutto quello che è stato disegnato in un'immagine.

graph.save("E:\\immagine.jpg");

Con questa funzione viene salvato su immagine.jpg tutto quello che è stato disegnato in precedenza, la risoluzione dell'immagine sarà quella attribuita con la funzione graph.size().

GSM

Ottenere il codice IMEI del cellulare

print gsm.imei

Il modulo gsm ha all'interno una costante chiamata imei che contiene appunto il relativo codice del telefono.

Attenzione a non mettere le parentesi aperta-chiusa dopo gsm.imei perché in questo caso non parliamo di una funzione, ma bensì di una costante e quindi un numero che è già in memoria.

Ottenere il livello del segnale per la rete corrente

a=gsm.signal()

In questo modo nella variabile a verrà ritornato il valore corrispondente al livello del segnale nel luogo in cui siamo. Il numero che verrà ritornato sarà compreso tra 0 e 100.

Ottenere l'ID della cella nella quale ci troviamo

a=gsm.cid()

Questa funzione ritornerà in a l'ID della cella nel quale ci troviamo. Ricordando che l'ID identifica una precisa area geografica.

IO

per utilizzare alcune funzioni di questo modulo il programma richiede i permessi per leggere e scrivere su file. All'installazione di mShell questi permessi non sono tutti abilitati. Per abilitare questi bisogna:

aprire mShell, cliccare sul tasto di selezione sinistro (mShell), scorrere fino a "view" e selezionare "permissions".

Una volta giunti alle opzioni assicurarsi che ogni voce riporti la voce "Yes" a fianco.

Aggiunta di un testo a un file.

a=io.append("percorso_del_file", io.raw)

Con la funzione io.append() possiamo aggiungere del testo a un file contenente già altro testo. Per fare ciò dobbiamo scrivere tra parentesi (tra virgolette) il percorso del file da aprire e seguentemente la costante io.raw .

Nell'esempio, nella variabile a verrà memorizzato l'indirizzo del file aperto. Questo indirizzo sarà l'indirizzo che andremo a usare nelle funzioni per leggere e scrivere su un file. Se il file specificato nel percorso non esiste, questa funzione assumerà lo stesso compito della funzione io.create().

Apertura di un file

io.open("percorso_del_file", false/true, io.raw)

Per "apertura" non intendiamo la lettura di un file. Questa funzione ci è utile per avere l'indirizzo di un file già esistente in memoria, utile quest'ultimo per leggere e scrivere su un file.

Tra parentesi (tra virgolette) scriviamo dapprima il percorso del file da aprire. Dopo ciò scriviamo true o false a seconda delle nostre esigenze. Se scriveremo "true" l'utente, una volta aperto il file, avrà accesso sia alla scrittura che alla lettura di questo. Scrivendo "false" l'utente avrà accesso al file solo per quanto riguarda la lettura.

Creazione di un file.

nuovofile=io.create("percorso_del_file",io.raw)

Questa funzione ci permette di creare all'indirizzo specificato un file vuoto. L'indirizzo del file va scritto tra virgolette al posto di percorso_del_file. La specifica io.raw che segue l'indirizzo sta a specificare che il file può essere trattato per la lettura (Read), per l'aggiunta di testo (Append) e per la scrittura su questo (Write).

Assegnando tutto questo alla variabile nuovofile, in quest'ultima verrà salvato l'indirizzo del file, che viene rilasciato nella variabile al termine della funzione io.create().

Leggere una data linea.

a=io.open("e:\\esempio.txt")

for i=1 to 4 by 1 do

io.readln(a);

end

print io.readln(a);

io.close(a);

Nel caso volessimo leggere una determinata linea saltando le precedenti, dobbiamo sapere che mShell non ha l'accesso random alla lettura din un file. Potremmo però ricorrere a un altro metodo.

Il codice riporta l'esempio per la lettura della quinta riga del file e:\esempio.txt.

Non abbiamo fatto altro che aprire il file e allocare l'indirizzo in a, poi per quattro volte abbiamo spostato il puntatore di una riga, infine abbiamo stampato la riga successiva, quindi la 5.

Come al solito infine chiudiamo il file.

Lettura di un file per caratteri.

a=io.open("e:\\esempio.txt");

print io.read(a, numerocaratteri);

io.close(a);

Nella variabile a viene allocato l'indirizzo del file, per la lettura è sufficiente scrivere solo il percorso del file.

Con io.read() abbiamo dovuto scrivere l'indice del file (variabile a) e il numero di caratteri che vogliamo leggere, che vengono poi visualizzati con print.

Infine abbiamo chiuso il file con la funzione io.close().

Lettura di un file per linee.

a=io.open("e:\\esempio.txt")

for i=1 to 3 by 1 do

print io.readln(a);

end

io.close(a);

Il procedimento è simile a quello utilizzato per lettura di un file per caratteri: abbiamo aperto il file e per tre volte, mediante l'istruzione for i=1 to 3 by 1; abbiamo letto e stampato sullo schermo le prime tre linee del file; infine abbiamo poi chiuso il file con l'istruzione io.close(a).

Scrittura su un file.

io.write(indirizzo_del_file, "testo")

Con questa funzione saremo in grado di scrivere del testo su un file. Il file sul quale scrivere non viene individuato mediante il percorso di questo, bensì mediante l'indirizzo, ottenuto per esempio come specificato nel paragrafo "CREAZIONE DI UN FILE". Se il file esiste già possiamo avere l'indirizzo come specificato nel paragrafo "APERTURA DI UN FILE".

Il testo da scrivere sul file può essere contenuto in una variabile o può essere scritto direttamente tra virgolette.

Edited by masmil1988
Link to comment
Share on other sites

MATH

Estrazione di un numero casuale.

per estrarre un numero casuale bisogna usare la funzione math.random(), in questo modo:

a=math.random()*1000000000;

b=a%nummax+1;

In quanto con la funzione math.random() viene estratto un numero decimale che va da 0 a 1 (che poi casuale non è perchè si basa in un certo qual modo sull'orario) moltiplichiamo questo numero per un numero elevato (in questo caso 1000000000) in modo da rendere questo maggiore di 0.

Dividiamo allora questo per nummax (che sarebbe il valore massimo che vogliamo sia estratto) ottenendo il resto di questa divisione (l'abbiamo diviso con il simbolo % che serve a calcolare il resto della divisione) e il valore "casuale" in questo caso andrà a finire in b.

Dopo nummax abbiamo scritto "+1" in modo tale che il numero estratto vada "da 1 a nummax".

Senza il "+1" il numero estratto andrà "da 0 a nummax-1"

Tagliare un numero e tenere solo la parte intera.

a=math.trunc(numero);

In questo modo andremo a mettere in a solo la parte intera del numero contenuto nella variabile numero.

Tagliare un numero e tenere solo la parte decimale.

b=a;

a=math.trunc(a);

b=b-a

Con questo codice non facciamo altro che:

copiare a in b,

tagliare ad a la parte decimale, tenendo così soltanto quella intera,

sottrarre a b (dove abbiamo ancora il numero comprensivo di cifre decimali) la parte intera contenuta in a.

Alla fine la parte decimale resta nella variabile b.

Breve descrizione delle funzioni del modulo MATH

math.abs(x) - ritorna il valore assoluto di x

math.acos(x) - ritorna l'arco coseno di x (in radianti)

math.asin(x) - ritorna l'arco seno di x (in radianti)

math.atan(x) - ritorna l'arco tangente di x (in radianti)

math.ceil(x) - ritorna il primo intero maggiore di x (nel caso x sia un numero decimale) o uguale a x

math.cos(x) - ritorna il coseno di x (in radianti)

math.exp(x) - ritorna e^x, ricordando che "e" è la base del logaritmo naturale (vale 2,718281828459045)

math.floor(x) - ritorna il primo intero minore di x (nel caso x sia un numero decimale) o uguale a x

math.log(x) - ritorna il logaritmo naturale di x

math.pow(x,y) - ritorna il valore x^y

math.sin(x) - ritorna il seno di x (in radianti)

math.sqrt(x) - ritorna la radice quadrata di x

math.tan(x) - ritorna la tangente di x (in radianti)

math.trunc(x) - ritorna la parte intera di x

MSG

-

MMS

-

NET

Connettersi a un server per la comunicazione TCP/IP.

connessione=net.conn(indirizzo_server, porta)

Tramite la funzione net.conn() è possibile instaurare una connessione col server desiderato sulla giusta porta.

La funzione ritorna uno stream sul quale è poi possibile comunicare tramite il modulo IO.

E' necessario un esempio per chiarirne il funzionamento. Per quest'esempio è stato utilizzato il protocollo FTP:

s=net.conn("ftp.interfree.it",21);   // si crea lo stream s
print io.readln(s);   // stampa a video della risposta del server

vett=["USER masmil1988","PASS ***","CWD /Altro","PWD"];   // elenco delle istruzioni che vengono inviate al server
for i=0 to len(vett)-1 by 1 do
 io.write(s,vett[i]+"\r\n");	// \r\n indica la fine dell'istruzione (ritorno carrello e nuova linea)

 // Questo è necessario in quanto non si è a conoscenza della lunghezza (in termini di righe) della risposta del server.
 // La io.timeout() è necessaria in quanto se non vi è più alcuna riga nella risposta la funzione io.readln() attende indefinitamente che ve ne sia una.
 while true do
io.timeout(1000);
try
  r=io.readln(s);
  print r;
catch e by
  break;
end;
 end;
end;

OBEX

-

PHONE

Effettuare una chiamata.

phone.dial("numero_di_telefono",durata);

Il numero di telefono che passeremo alla funzione dovrà essere una stringa e non un numero intero. La durata che passeremo sarà invece un intero e sarà espressa in millisecondi. Passando soltanto il numero di telefono, senza la durata la chiamata verrà soltanto avviata, senza sapere quando finirà.

Interrompere una chiamata.

phone.hangup();

Con questa semplicissima funzione verrà interrotta la chiamata in corso.

PROC

Chiudere l'applicazione corrente

proc.close();

In questo modo l'applicazione eseguita su mShell verrà terminata istantaneamente e verrà mostrato nuovamente l'elenco delle applicazioni presenti sul cell eseguibili da mShell. Per una migliore funzionalità del codice penso sia utile chiudere le applicazioni con questo codice, in modo da tornare subito all'elenco dei programmi e non dover ogni volta chiudere l'applicazione manualmente una volta terminata l'esecuzione.

SMS

Attendere per la ricezione di un sms

a=sms.receive(-1)

Questa funzione fa si che il programma si blocchi nell'attesa di un nuovo sms. Tra parentesi scriviamo il tempo, in millisecondi, per il quale vogliamo attendere l'sms. Scrivendo tra parentesi -1 il programma aspetterà senza limite di tempo l'arrivo del primo sms.

Una volta arrivato l'sms in a non avremo direttamente le informazioni sul messaggio, ma bensì l'ide del messaggio ricevuto, che non sarà altro che un numero.

Per avere le informazioni relative a questo messaggio (numero del mittente, testo, ecc...) si rimanda al punto Leggere un sms ricevuto.

Inviare un sms

sms.send("numero_destinatario","testo del messaggio")

La funzione sms.send() ci permette di inviare un sms in modo semplice.

Alla funzione dobbiamo passare come parametri il numero del destinatario (come stringa, quindi tra virgolette) e il testo del messaggio (sempre come stringa).

Se vogliamo inviare lo stesso sms a più persone contemporaneamente possiamo passare, al posto del numero del destinatario, un array di stringhe contenenti i numeri di telefono ai quali dobbiamo inviare l'sms.

Leggere un sms ricevuto

a=sms.inbox()

b=sms.get(a[0])

Con questo codice possiamo avere le informazioni relative a un qualsiasi messaggio ricevuto. La prima funzione, ovvero la sms.inbox() ci ritornerà in a un array contenente gli id di tutti i messaggi della casella "Messaggi ricevuti".

Avendo gli id possiamo avere le informazioni relative ai messaggi tramite la funzione sms.get(). A questa funzione passiamo come parametro la variabile a (dove avevamo tutti gli id) completa di indice che identifica il messaggio specifico.

Nell'esempio passiamo la variabile a con indice 0 (zero). Il messaggio 0 è il primo messaggio tra quelli ricevuti, ovvero il più vecchio.

La funzione sms.get() ritornerà in b un array contenente tutte le informazioni sul messaggio.

Nello specifico sarà un array di 4 celle, identificabili in questo modo:

cella 0: numero telefonico del mittente

cella 1: testo del messaggio

cella 2: data del messaggio (ritornata questa come numero di secondi trascorsi a partire dall'inizio dell'anno 0)

cella 3: true o false, a seconda che il messaggio sia stato letto (false) o no (true).

NB: Per ottenere la data in formato comune si rimanda alla funzione time.str(), illustrata tra le funzioni del modulo TIME.

SYSTEM

-

TIME

Ottenere la data e l'orario corrente

a=time.get();

b=time.str(a);

Con la funzione time.get() ritorneremo in a il numero di secondi trascorsi dal primo gennaio dell'anno 0 fino all'esatto secondo in cui è stata eseguita la funzione. Per trasformare questo numero in formato comprensibile (cioè in data) utilizziamo la funzione time.str() passandogli come parametro la variabile a, nella quale è riportato il numero di prima (il numero di secondi dall'inizio dell'anno 0).

La data finale verrà riportata come stringa nella variabile b.

Come parametro opzionale, possiamo passare alla funzione time.str() anche il formato in cui vogliamo ci venga restituita la data. In questo caso scriveremo la funzione time.str() in questo modo:

b=time.str(a,"YYYY-MM-DD hh:mm:ss")

dove:

YYYY sta per l'anno (mettendo 2 sole Y c verranno date solo le ultime 2 cifre dell'anno)

MM sta per il mese

DD sta per il giorno

hh sta per l'ora

mm sta per i minuti

ss sta per i secondi

NB: se vogliamo evitare di estrarre alcuni di questi dati possiamo benissimo omettere dalla stringa quello che non ci interessa.

UI

Attesa per il tocco dello schermo e estrazione delle coordinate del tocco.

ui.ptr(ui.relative);

pressione=ui.cmd(-1);

Alla funzione ui.ptr() passiamo come parametro una costante (ui.relative=2) la quale indica che vogliamo ottenere dal tocco le coordinate relative alla dimensione della parte di schermo relativa al nostro programma.

La funzione ui.cmd() resterà in attesa per un tempo indeterminato (-1) fin quando non verrà toccato lo schermo in un punto qualsiasi del programma.

Una volta premuto su un punto qualsiasi dello schermo verranno ritornate in pressione["x"] e in pressione["y"] le coordinate relative al tocco prendendo come punto di partenza (0,0) l'angolo in alto a sinistra del programma.

Nella terza cella dell'array ritornato in pressione (pressione["buttons"]) troviamo invece il tipo di tocco, ovvero se è stato premuto o rilasciato lo schermo.

- in corrispondenza della pressione troveremo il valore 1

- in corrispondenza del rilascio troveremo il valore 0

Nel caso volessimo ottenere le coordinate assolute sarà necessario sostituire alla costante ui.relative (2) l'altra costante ui.absolute (4).

Attesa per la pressione di un tasto, riconoscimento del tasto premuto.

ui.keys(false,false);

a=ui.cmd(-1);

...il programma si fermerà nell'attesa che venga premuto un tasto, una volta premuto il tasto viene posizionato nella variabile a il numero corrispondente al tasto premuto.

qui sotto è elencata la lista dei tasti del cellulare col corrispondente numero che verrebbe in tal caso rilasciato nella variabile a

0: 48

1: 49

2: 50

3: 51

4: 52

5: 53

6: 54

7: 55

8: 56

9: 57

*: 42

#: 35

su (joystick): 63497

giù (joystick): 63498

sinistra (joystick): 63495

destra (joystick): 63496

verde: 63586

rosso: 63587

menu: 63570

C: 8

matita: 63499

Creazione di una lista

a=ui.list(["uno","due","tre","quattro","cinque"],false,[],"Numeri")

Scrivendo il seguente codice creeremo una lista nella quale potremo selezionare un elemento. Nella variabile a verrà ritornato il numero corrispondente all'elemento selezionato (partendo da 0 per il primo elemento). Tra parentesi scriveremo inizialmente l'array con tutti gli elementi che vogliamo far comparire nella lista (che possiamo anche creare prima e scrivere quindi il nome identificativo dell'array). Dopo la lista degli elementi dovremo specificare se la lista deve permettere la multiselezione (true) o no (false). Fatto ciò, nel caso in cui abilitassimo la multiselezione, specifichiamo quali elementi devono essere selezionati sin dall'inizio (scrivendo [] nel caso nn volessimo selezionare niente. Infine scriveremo tra virgolette il nome della finestra che comparirà a video.

Creazione di una lista di elementi modificabili

a=["Nome":"",

"Cognome":"",

"Nick":"nessuno"];

b=ui.form(a)

Nella variabile a creiamo così un array, dove andremo a mettere tutte le parti della nostra lista.

Con la funzione ui.list() andiamo invece a trasferire tutto il contenuto di a in b, andando però a visualizzare a video una lista, dove poter inserire i valori.

A sinistra compariranno le diciture Nome, Cognome, Nick (queste non modificabili). A destra di ognuna comparirà invece un campo modificabile, che in questo caso sarà vuoto per i campi Nome e Cognome, e che in corrispondenza di Nick avrà già scritto "nessuno". Quest'ultimo anche se già scritto può essere comunque modificato.

Nel caso in cui non dovremmo inserire noi una variabile ma dovessimo sceglierla tra una serie preimpostata di valori dovremmo scrivere quanto segue, prendendo per esempio il campo Nome:

a=["Nome":["Carlo","Francesco","Mario"],

"Cognome":"",

"Nick":"nessuno"];

b=ui.form(a)

Non facciamo altro che creare un'array dentro l'array dentro al quale definiamo le scelte possibili.

Una volta dentro al programma, possiamo scorrere tra gli elementi muovendo il joystick a destra e a sinistra.

Ogni campo viene separato dall'altro tramite una virgola; non necessariamente bisogna andare a capo tra un campo e l'altro, è soltanto una questione di migliore comprensione del codice.

Creazione di un menu.

ui.menu("Operazioni", ["Somma", "Sottrazione", "Esci"]);

while true do

c=ui.cmd();

if c="Somma" then

num1=ui.query("Inserisci il primo numero: ","");

num2=ui.query("Inserisci il secondo numero: ","");

print "La somma è uguale a " num1+num2;

end;

if c="Sottrazione" then

num1=ui.query("Inserisci il primo numero: ","");

num2=ui.query("Inserisci il secondo numero: ","");

print "La differenza è uguale a " num1-num2;

end;

if c="Esci" then break end;

end

Con queste istruzioni possiamo far comparire la scritta Operazioni (corrispondente questa al tasto di selezione sinistro) e cliccando su questa comparirà un menu a tendina dove troveremo le varie possibilità. Nel nostro cao le possibilità sono "Somma", "Sottrazione" o "Esci".

Con l'istruzione c=ui.cmd() diciamo al pogramma che se clicchiamo su "Somma" esso deve eseguire tutte le istruzioni corrispondenti a questa, e lo stesso se clicchiamo su "Sottrazione".

Cliccando invece su "Esci" il programma dovrà uscire dal while dentro al quale si trova (con l'istruzione break).

Tenere la luce accesa

ui.idletime(true);

Eseguendo questa istruzione verrà resettato il timer che temporizza il tempo di inattività. In questo modo la luce si accende (o si mantiene accesa).

VIBRA

-

ZIP

Apertura di un archivio .zip

zipfile=zip.open("percorso_del_file");

La funzione zip.open() ritorna in zipfile l'oggetto nativo per accedere al file del quale è stato passato il percorso. Sarà possibile lavorare all'interno di questo file trattando zipfile.

Sapere quali file sono presenti in un archivio .zip

arrayzip=zip.scan(zipfile, null);

In questo modo, avendo cura di aver prima aperto il file zip con la funzione zip.open(), è possibile conoscere quali file sono presenti nell'archivio zip. In arrayzip verrà ritornato un array contenente le informazioni su ogni singolo file. Ogni file è identificato da 4 parametri: il nome, la grandezza originale del file, la grandezza compressa del file, e un valore che attesta la correttezza del file zip (CRC).

Edited by masmil1988
Link to comment
Share on other sites

  • 6 months later...

Agenda

Permessi necessari: WriteApp

AGGIUNGERE UN'APPUNTAMENTO ALL'AGENDA (agenda.add)

// Calcolare la differenza tra una data e un'altra
//in millisecondi(credo)
e=["text": "Testo_della_appuntamento",
  "flags": agenda.anniv,
  "start": time.num("YYYY-MM-DD"),
  "base": 1564,
  "rep": ["type":agenda.yearlydate]];
agenda.add(e)
→ 117440532

Con questo codice aggiungeremo all'agenda una data che si ripeterà ogni anno:

Nell'array(correggimi se sbaglio) "text": dovremo scrivere il testo che comparirà quel giorno nell'agenda

- "flags": metteremo il tipo di appuntamento(in questo caso agenda.anniv che aggiunge l'appuntamento in modo che si ripeta ogni anno.

- "start": scriveremo la data dell'anniversario nel formato YYYY-MM-DD

- "base": metteremo la data di inizio da calcolare

- "rep": scriveremo soltanto se vorremmo fare riperete l'azione

- ["type":agenda.yearlydate] scriveremo ogni quanto vorremmo fare ripetere l'azione. Con -agenda.yearldate- l'azione si ripeterà ogni anno

- agenda.add(e) con questa stringa diciamo al programma di aggiungere all'agenda la variabile "e"

Il risultato credo che sia mostrato in millisecondi, e ogni anno ripete l'azione aggiungedo i millisecondi...

P.s: credo sia giusto, in caso di errori ditemelo

Link to comment
Share on other sites

  • 1 month later...

ciao!!! notizie fresche dal sito di mshell...

Simulare la pressione di un tasto

app.key([53,-53]) -> Simula la pressione del tasto "5", 1 volta

Se si desidera premere quel tasto più volte è sufficiente concatenare all'array il codice del tasto

ad es, scrivere "k" -> app.key([53,-53,53,-53])

Spero sia utile..

se qlkn gentilmente prova....a me funge x i tasti, ma per tasti tipo menu, ecc, no.... a voi???

Ps , se volete sapere il codice dei tasti del cell, fate csi:

use ui;

key=null;
while key#53 do //esce col tasto 5
  ui.keys(false,false);
  key=ui.cmd(-1);
  cls();
  print(key);
end;

Link to comment
Share on other sites

No, non mi pare di averla mai inserita, perchè io stesso non l'ho mai usata...

Se vuoi puoi scriverla tu, se ti va b)

Per ora credo che gli orizzonti sono puntati verso la simulazione dei tasti.

Dopo un breve lavoro ecco a voi l'elenco dei tasti con relativo codice:

joystick sinistra: 14

joystick destra: 15

joystick sopra: 16

joystick sotto: 17

pressione joystick: 167

matita: 18

C: 1

0: 48

1: 49

2: 50

3: 51

4: 52

5: 53

6: 54

7: 55

8: 56

9: 57

*: 42

#: 127

selezione sinistro: 164

selezione destro: 165

spegnimento: 166

blocca tastiera: 169

verde: 196

rosso: 197

menu: 180 (corretto, grazie a xMetallicax)

PUNTUALIZZAZIONI:

- Al codice 169 corrisponde blocco tastiera, non corrisponde a nessun tasto del cellulare ma eseguendo questo codice compare il messaggio "Bloccare tastiera?".

- Non so perchè ma per il tasto matita non c'è nessun codice negativo (ovvero mancail rilascio...), non so se questo comporta problemi o è una cosa normale.

Comunque sia, i tasti della tastiera ci sono tutti ed è possibile controllare a pieno il cellulare b)

Edited by masmil1988
Link to comment
Share on other sites

Topic Ripulito. b)

Gente, non siate timidi con l'apertura dei Topic! b)

Se avete domande o dubbi inerenti a questo linguaggio, siete calorosamente invitati ad aprire nuovi Topic ( possibilmente usando il tag [mShell] )

Edited by Il.Socio
Link to comment
Share on other sites

ah ok grazie 1000....nel caso avessi bisogno di qualcos'altro (sicuramente ne avrò XD) verrrò ancora quì a rompervi b)

arieccolo...b) ..ma cn qst proramma...posso creare applicazioni...nel senso io avevo in mente di fare un programma..dove metto tutti i risultati del mondiale...2006...magari anche cn qualche bandieruzza ;)..mi consigliate di usare questo programma oppure magari un'altro...che possa fare + al caso mio??

Link to comment
Share on other sites

ecco...è quello che o nn ho..b);):D:D

Ma sapete Se A Scuola Di Elettronica Si Fanno Un Pò Di Queste Cose..??

Vabè..Cmq Magari Mi Butto sul C++ Che Mia Sorella Lo Fa A Scuola b).

Per Usare Mschell Mi Servirebbe Proprio Una Guida Di Fanco A Me hihihi

se mshell ti sembra difficile... abbandona l'idea di iniziare con c++... soprattutto in symbian, programmare in c++ non è per niente facile se devi iniziare..

inoltre, l'informatica nelle scuole italiane, se non fai una scuola specifica per programmatori, è abbastanza inutile, o meglio è ad un semplice livello basilare...

Edited by dokkis
Link to comment
Share on other sites

se mshell ti sembra difficile... abbandona l'idea di iniziare con c++... soprattutto in symbian, programmare in c++ non è per niente facile se devi iniziare..

inoltre, l'informatica nelle scuole italiane, se non fai una scuola specifica per programmatori, è abbastanza inutile, o meglio è ad un semplice livello basilare...

quoto in pieno, anche se non so niente di c++.

Ma secondo me l'informatica la impari meglio se lo fai da solo,senza andare in scuole di scarso livello che fregano un sacco di soldi e che ti insegnano quelle quattro cacate: come si usa word,excel, cos'è windows...

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 months later...

Purtroppo ancora sul fronte mShell non è possibile "compilare" i programmi... b)

l'unico modo per avere un'iconcina è il caro metodo di Dokkis, che simula la pressione dei tasti necessari per avviare lo script corrispondente all'applicazione... Che funziona benissimo, ma non è proprio un modo pulito...

[OT]Scusate la consistente assenza dal forum, ma finchè non avrò l'adsl nella casa a Palermo mi potrò far vedere solo venerdì, sabato e domenica (e mica tanto visto che ho anche altro da fare)...[/OT]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy