Newsgroup: it.comp.lang.pascal
Titolo: Screen-Saver: è possibile???

Ciao a tutti.....
E' possibile creare uno screen-saver in un programma pascal che entra in
funzione dopo che per TOT minuti non č stato premuto alcun pulsante del
mouse, della tastiera e il mouse non č stato spostato??E, al verificarsi di
una di queste tre condizioni, lo screen-saver termini......
Vi ringrazio anticipatamente per la Vs collaborazione
DAVIDE


potresti creare un ciclo d'attesa tipo while do o repeat until, mettendo
come condizioni quelle che ti servono
--
Ciao
Gianfranco Marchese
e-mail dgruma@NOPUBBLICITA'
tin.it
 (Da togliere NOPUBBLICITA' se vuoi
rispondermi in privato)
sito internet personale: 
http://www.turbo-pascal.cjb.net
  Tutto sul Turbo
Pascal  1.5

 come condizioni quelle che ti servono
il ciclo che intendi tu č cosě vero???? Perň, come faccio a calcolare il
tempo trascorso per far avviare lo screen-saver???
WHILE condizioni DO BEGIN
   IF (pressionemouse) OR (pressionetastiera) OR (movimentomouse) THEN
condizioni := true
   ELSE IF tempotrascorso THEN screensaver;
END;
Ciao :-)

 ha scritto nel messaggio
news:badmbd$i6e$1...@newsreader.mailgate.org...

ottimo proprio questo. per calcolare il tempo trascorso, puoi usare le
funzioni e procedure contenute nella unit windos (per utilissime info
consulta l'help del pascal), tra cui GetTime(Var Ora,Minuto,
Secondo,DecimoDiSecondo:Word);
usando proprio questa, puoi salvare le posizioni nel tempo in cui cessa ogni
attivita', e quindi magari crei un ciclo d'attesa che fa partire lo screen
saver solo quando vengono superati tot minuti.


 Gianfranco Marchese
Ah, esiste una funzione simile????Mi sa che è ora che mi studi le units del
Pascal per bene :-D
Grazie :-)



Oh My Goodspif!!!! Lo sai che cosi fai un bel macello!!!! 
Per me dovrebbe usare INTERRUPT del orologio di sistema...
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
ICQ     : 67552596
-----------------------------------------------
Founder of MediaPlayer Project
http://mpp.iwebland.com

 Per me dovrebbe usare INTERRUPT del orologio di sistema...
Tsk tsk.....Da quando in qua si danno dei suggerimenti cosě?? ;-p
Caro amico, visto che parli di INTERRUPT, saresti cosě cortese da spiegarmi
cosa č e come funziona???O almeno dove posso reperire informazioni riguardo
questo argomento (esclusa la guida del pascal)???
GRAZIE :o)

 Per me dovrebbe usare INTERRUPT del orologio di sistema...
what is INTERRUPT?


questo argomento (esclusa la guida del pascal)???
La guida del pascal e ottima... ma se proprio non vuoi puoi provare a
cercare info sui programmi TSR....


what is INTERRUPT?
Una semplice interuzzione


 Per me dovrebbe usare INTERRUPT del orologio di sistema...
A me non pare molto comodo l'uso degli interrupt
in questa situazione.
Potrei capire se si trattasse di testare continuativamente
una perfirerica per vedere se e' pronta, oppure se si
dovesse richiamare una routine ad intervalli di
tempo molto precisi... cose di questo tipo.
Qui si parla di uno screensaver, mi pare eccessivo
l'uso degli interrupt. Certo se li volesse usare
per interesse personale capirei, ma a quel punto
consiglierei anche un programma diverso :)
Basta un controllo nel loop principale del programma,
e (secondo piu' secondo meno) lo screensaver parte :)
Poi che usare gli interrupt faccia piu' fico, quello
e' innegabile :))

 e' innegabile :))
A me serve una cosa funzionante e veloce....e scritta correttamente secondo
i linguaggi e le strutture di programmazione ;-p

Ok...appena posso ci provo, anche se non ho capito molto bene....Sai, è ora
di togliere le ragnatele che si sono formate nella mia testa :-))

 i linguaggi e le strutture di programmazione ;-p
Ah beh, ti accontenti di poco :)
A parte che, in teoria, dovrebbero bastarti
delle linee guida in pseudocodice, o no? :)
Poi, in realta', non mi e' nemmeno chiarissimo
il problema (mi sono soffermato sul discorso
interrupt che era quello che maggiormente mi
interessava :))
Praticamente tu hai fatto un programma che fa
qualcosa (cosa?) e dopo N minuti di inattivita'
dovrebbe partire lo screensaver?

 dovrebbe partire lo screensaver?
Il mio programma gestisce dei dati molto riservati e verrà utilizzato
soprattutto da aziende...Capita a tutti di lasciare il pc per qualche minuto
e in quel caso tutti potrebbero avvicinarsi al computer e leggere questi
dati.....Nel file OPZIONI verrà specificato se si vorrà proteggere i dati
con uno screen-saver che parte automaticamente a TOT minuti (lo deciderà
l'utente) di inattività della tastiera o del mouse....Ovviamente, per far
terminare l'esecuzione dello screen-saver, l'utente dovrà inserire una
psw....
Parlando più specificatamente, ad ogni input una funzione dovrà controllare
il tempo di inattività del pc...... Ora non so se gli interrupt possono
aiutarmi o meno, purtroppo non conosco questa parte del Pascal....L'idea di
Gianfranco mi sembra abbastanza buona (quella di usare GetTime) però se si
può fare qlc di meglio con gli interrupt, ben venga.....
GRAZIE :-)

 può fare qlc di meglio con gli interrupt, ben venga.....
Per il progetto in questione, io mi appoggerei a GetTime.
Non che l'idea degli interrupt sia malvagia, anzi,
pero' non li scomoderei in questo caso :)
Alla fin fine il problema puo' essere risolto in
vari modi, io ho espresso il mio parere :)

vari modi, io ho espresso il mio parere :)
E io ti ringrazio per questo....Almeno ora so che esiste una funzione
(GetTime) che puņ aiutarmi a risolvere il problema...e che esistono gli
interrupt :-p
Grazie :-)


pero' con il mio metodo, rischi di far girare a "vuoto" la cpu, perche'
questa non e' che viene fermata, anzi e' costretta a lavorare in
continuo...cmq senza dubbio e' piu' semplice


> what is INTERRUPT?
IA-32 Software Developer's Manual (vol 1)
"An interrupt is an asynchronous event that is tipically
triggered by an I/O device."
All'inizio della ram, proprio nel primo kB c'e' un'area di memoria
dedicata al vettore delle interruzioni, cioe' ad un'array di puntatori
a procedure che vengono eseguite al verificarsi di particolari
eventi: gli interrupt. Un interrupt arriva di solito da un dispositivo
hardware (disco, scheda, mouse...) o puo' essere generato via
software (INT in asm / Intr( )in pascal); quando il processore
individua un interrupt legge dalla tabella delle procedura quella
che corrisponde al n° dell'int. e la richiama.
Ci sono 256 posti nel vettore delle interruzioni, i primi 32 predefiniti
o riservati (e.g. 0 divisione per zero, 3 breakpoint, 14 page fault... )
e non mascherabili piu' altri 224 che possono essere definiti
dall'utente (e.g. driver del mouse, servizi dos... ). Questi ultimi sono
mascherabili, cioe' e' possibile "inibirne" la chiamata via software.
Ad ogni interrupt viene di solito associata non una sola procedura
ma una "catena" di procedure di gestione: si mette da parte il valore
corrente preso dalla posizione che ci interessa e ci si mette quello
della nostra procedura che al termine provvedera' a richiamare
quella messa da parte, in modo da mantenere intatta la catena.
Interrupt utili sono il 33h dove si trova il driver del mouse, il 9 per
la tastiera, il 21h dove il DOS mette a disposizione i suoi servizi.
Un discorso a parte merita il numero 8, che viene richiamato dal
chip timer ad un intervallo prefissato. E' possibile programmare
il timer in un range di frequenze abbastanza ampio (di default mi
sembra che sia 18,2hz) in modo da temporizzare eventi. Solo che
per mantenere intatta la catena la procedura deve richiamare
l'anello precedente alla stessa frequenza che questa aveva
impostato precedentemente... il che complica un po' la vita :-)
Per uno screensaver che debba partire durante un programma
in effetti una gestione via interrupt sarebbe comoda ma credo
eccessiva.. ce ne vorrebbero tre: uno sul timer per decrementare
il tempo rimasto, e due su tastiera e mouse per resettarlo ad
ogni movimento... un po' troppo :-)
Dato che nel programma non ci saranno "processi in background"
nei momenti di inattivita' non fara' proprio nulla, o meglio, stara'
facendo un ciclo un cui compie un sacco di controlli per vedere
se l'utente fa' qualcosa. Basta in questo ciclo decrementare il
tempo rimasto quando tutti questi controlli falliscono.
per ulteriori info sugli interrupt direi google, l'help del tp sotto
keep/intr/msdos (no, non li ho ancora tradotti :-\) e poi la Bibbia,
la Ralph Brown Interrupt List [ con RBILView per leggerla in un
modo decente :-) ]
--
Dreadnaut
(Life would be easier if I had the source code)

ogni movimento... un po' troppo :-)
Io ne meterei uno solo ( quello del timer ) per la tastiere e mouse lo
fare i fare nel main


continuo...cmq senza dubbio e' piu' semplice
Non stiamo in windows, ricordimocelo bene! la CPU prestera 99% del
tempo al nostro programma ( unico processo in esecuzione )
percui e imposibbile non farla girare a vuoto e quasi impossibile...
sai quanti cicli di sistema si fa quando è sul 
c:\>_
?
neache volgio pensarci meglio che premo Ctrl+S e faccia partire il mio
Snake STR ( ;D )
cmq io proponevo l'idea del INT per una ragione precisa:
se ci sono + punti dove ci sono cicli di input
{
Repet
   Valido := LeggiQualcosa
Until Valido
}
? Che fai in ogni punto ci metti la gestione dello SS?
io in LQ facevo agiornare una varibile temporale
LastComandTime che poi viene controllata nel INT
se ed se e trascoro X tempo via con SS
ps lui vuole anche una pws nello SS...  fatibbile...
ma poi che cosa vuole per SS una scritta che si muove sullo schermo?
uno palla che rimbalza? un drago cinese in 3D che si muove con
accelerazione OpenGL in HD sulla scheda?


 fare i fare nel main
ma, come hai detto tu, ci potrebbero essere piu' cicli di
controllo dell'input... dovresti metterlo in tutti.
[p.s. - lo scrivo qua per non aggiungere un mex...
 ho aggiunto la parte sugli interrupt, Intr e MsDos all'help tradotto]


 accelerazione OpenGL in HD sulla scheda?
Tutto quello che dici sarebbe bellissimo, però la grafica non è proprio il
mio 'forte' (come tante altre cose)....Mi piacerebbe una scritta a caratteri
grandi....oppure qualche oggetto colorato che si muove sullo schermo...però
non sono assolutamente in grado di implementare un modulo del genere :-((

Pensando a come costruire il mio modulo, mi sorge un piccolo dubbio:
di solito per richiedere in input un dato uso smp il comando READKEY....come
faccio a gestire READKEY e lo spostamento (o pressione di un tasto) del
mouse????

 cmq io proponevo l'idea del INT per una ragione precisa:
io invece non l'ho proposto semplicemente perche' non li conosco :-)))))))


 ha scritto nel messaggio
news:basu3h$nth$1...@newsreader.mailgate.org...

per la tastiera esiste la funzione keypressed, che restituisce true se un
tasto e' stato premuto, ad esempio:
repeat
quellochetuvuoi;
until keypressed;
cieo' ripete quello che c'e' dentro il ciclo finche' non viene premuto un
qualsiasi tasto. per il mouse non so cosa dirti, dipende dalla libreria che
usi, almeno penso



ok, capito...Perň la KeyPressed mi restituisce come valore solo TRUE o
FALSE???
ESEMPIO
repeat
write('conferma(S/N) :');
UNTIL keypressed
Se viene premuto un qualsiasi tasto, il ciclo termina..Perň, se mi interessa
sapere se il tasto premuto č S, N o altro, come posso fare????
GRAZIE :-)
CIAO :o)


combina keypressed e readkey, ad esempio:
repeat
 write('conferma(S/N) :');
 UNTIL keypressed and readkey='u'
oppure
repeat
  write(quellochevuoitu)
until keypressed
if readkey='U' then...
come vedi l'uso della funzione keypressed, permette l'uso immediato di
readkey ottenendo cosi' il tasto premuto


  UNTIL keypressed and readkey='u'
occhio che questa funziona correttamente solo se e' attivata la
valutazione short-circuit delle espressioni boolean ( credo sia $B )
altrimenti il pascal ufficialmente usa la valutazione completa.


 altrimenti il pascal ufficialmente usa la valutazione completa.
Il turbo pascal no, ha $B- di default.
Tu parlavi in generale?
Dove hai letto questa cosa?

 Dove hai letto questa cosa?
la "definizione" del pascal prevede la complete evaluation, la short circuit
e' caratteristica del C e parenti. E' stata introdotta e messa come default
a partire dal Turbo Pascal 5, versioni precedenti avevano solo la complete.
dove... mmmh asp... l'avevo studiato da qualche parte, cmq google mi dona
piu' o meno una serie di link simili:
http://www.coronadoenterprises.com/tutorials/pascal/chap03.htm
In generale la valutazione completa e' piu' pulita come aspetto, quindi
rientra nella filosofia del pascal :-)
-- 
Dreadnaut
( che sbattimento la firma a mano :-) )

 
http://www.coronadoenterprises.com/tutorials/pascal/chap03.htm
Thanx :)