Newsgroup: it.comp.lang.pascal
Titolo: [ X Dreadnaut ] - Unit fMouse.pas scusa ma non capisco...

Ciao Dreadnaut ( e a tutti quelli che leggono il messagio, ma non lo
sapete che la corispondenza č privata? ( scherzo ) )
Sto facendo un programma DOS con i bottoni  e ho inziato a studiami la
tua unit perke mi ricordavo che l'avevi fatta e non mi andava di
studiarmi la Ralf Brown's List ( chi non sa cosa č si vergoni ) cosi
me la guardo arrivato alla MousePos vedo che fai delle cose "strane"
io asm lo capisco poco ma ho fatto una mai unit tutta in assembler
sensa scomodare istruzini strane ( avevo usato solo mov e int ) cosi
mi hai costretto a fare quello ke non volevo andarmi a spulciare la
lista di ralf ma andiamo con ordine ecco la tua MousePos
Procedure MousePos(var x,y,buttons:integer); assembler;
 asm
   MOV    AX, moGetPosition { =3 }
   INT    33h
   LES    DI,buttons
   MOV    AX,BX
   STOSW
   LES    DI,x
   MOV    AX,CX
   STOSW
   LES    DI,y
   MOV    AX,DX
   STOSW
 end;
( perke un Integer, non era meglio un Word? io avevo usato un word )
e questo e quello ke dice Ralf
Inp.:
	AX = 0003h
Return: BX = button status (see #2358)
	CX = column
	DX = row
Quindi perke non hai fatto semplicemente
mov buttons, bx
mov x, CX
mov y, DX
poi potremmo mettere button byte ( infondo la tabella 2354 dice che o
č 0, 2, 3 o FF )
e quindi fare
movzx buttons, bx
ma č gia qualcosa di "strano"
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

 ma č gia qualcosa di "strano"
perché movzx ?
che dato c'č in bx in ritorno a questo servizio?

 
--------M-330003-----------------------------
INT 33 - MS MOUSE v1.0+ - RETURN POSITION AND BUTTON STATUS
	AX = 0003h
Return: BX = button status (see #03168)
	CX = column
	DX = row
Note:	in text modes, all coordinates are specified as multiples of the cell
	  size, typically 8x8 pixels
SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
Bitfields for mouse button status:
Bit(s)	Description	(Table 03168)
  0	left button pressed if 1
  1	right button pressed if 1
  2	middle button pressed if 1 (Mouse Systems/Logitech/Genius)
no niente ... perché non fai tre funzioni boolean a parte per i pulsanti 
che richiamano il medesimo servizio?
Cosě nel tuo programma ottieni un codice piů leggibile.
Function lmbpressed:boolean;
Function rmbpressed:boolean;
Function mmbpressed:boolean;

 mov y, DX
Mmm... hai provato?
A me da "invalid combination of opcode and operands",
quindi si dovrebbero introdurre delle variabile temporanee
e fare gli assegnamenti fuori dal blocco asm, cosa non
necessaria con l'altro sistema.

 e, dopo la STOSW hai che DI è incrementato di 2, pertanto punta a y.
A dire il vero non funziona proprio cosi'. Viene fatta una LES per ogni
STOSW, quindi ES:DI puntera' a buttons, x, y grazie alla LES
eseguita ogni volta prima della STOSW associata.
Anche perche' DI viene incrementato solo se il flag di direzione
e' 0, cosa che non e' stata specificata.

Mmm... hai provato?
Io avevo usato un word


 Io avevo usato un word
Boh :)
A me da quell'errore in compilazione anche usando
word al posto di integer (ho provato solo col TP7).



a dire il vero tra Integer e Word non c'è diffenza entramibi sono a
16bit,cmq se vuoi compilare qualcosa :
Procedure Copy ( A: Integer; Var B : Integer ); Assembler;
Asm
  MOV AX, A
  LES DI, B
  MOV ES:[DI], AX
End;
Come vedi A lo sposto semplicemnente ( mov ax, a )
per sposarlo in B ho bisogno di fare un po' di macheggi ( vedi LES DI,
B ) visto che B è passato come Var quindi B contiene un puntatore al
vero B.


 mov y, DX
ed io ti ho risposto che facendo cosi' ottieni
un errore in fase di compilazione.
Se gia' sapevi il problema (leggendo questo post
sembrerebbe cosi') che senso ha la domanda
iniziale? :)

 e' 0, cosa che non e' stata specificata.
si, vero, chiedo venia ;)

 sapete che la corispondenza č privata? ( scherzo ) )
hola Razz., scusa il ritardo ma sono stato un po' nelle canne
ultimamente.
Cmq se volevi scrivermi in privato glI indirizzI li conosci :-p
Tornando al problema, non mi ricordo piu' una mazza di quella unit,
so' che l'avevo scritta quando ho scoperto che la drivers di default
mi dava le coordinate grafiche a salti di 8 pixel... il che mi dava un
poco
fastidio :-)   Quindi l'avevo incentrata sulla compatibilita' con questa
unit, in modo da dover modificare il meno possibile i miei programmi :-)
Il giochillo LES / STOSW non so' dove l'ho trovato, cmq dovrebbe
servire perche' le variabili sono passate come riferimento, e quindi
non si trovano nello stack della procedura ma fuori chissadove, quindi
il semplice mov non basta (credo sia per la dimensione degli indirizzi
che non sta' dentro una istruzione o qlcs del genere, ci vorrebbe Albe
in questi casi.... AAAAAALLLBEEEEEEEEEE !!! )  La unit credo sia
cmq ottimizzabile qua e la'... al tempo non ero cosi' paranoico :-p
saluti a tutti,
Dreadnaut faticosamente in vacanza
-- 
Dreadnaut
(Life would be easier if I had the source code)