FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Biomorphe de Pickover
par papydall Aujourd'hui à 1:09

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Dim 23 Sep 2018 - 22:14

» Planétarium virtuel.
par Pedro Alvarez Dim 23 Sep 2018 - 19:50

» Virus/Antivirus
par JL35 Dim 23 Sep 2018 - 10:55

» Calculatrice
par papydall Ven 21 Sep 2018 - 22:45

» Orbites de l’ensemble de Mandelbrot
par Minibug Ven 21 Sep 2018 - 21:32

» Demande pour Jack concernant PanExpress
par Minibug Ven 21 Sep 2018 - 11:04

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 incohérence POKE32

Aller en bas 
AuteurMessage
silverman

avatar

Nombre de messages : 675
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: incohérence POKE32   Lun 26 Mar 2018 - 17:20

Bonjour à tous

Contrairement à PEEK32, POKE32 ne supporte pas les nombres négatifs. Il le devrait puisque les variables entières en panoramic sont signées.
Code:
dim a%,b%      
a%=1
poke32 adr(b%),a%      :' écrire 1 dans la mémoire à l'adresse b%
print peek32(adr(b%))  :' montrer le contenu de la mémoire à l'adresse b%
poke32 adr(b%),b%      :' inverser l'ordre des octets pour afficher correctement b%
print b% : print
a%= -1
poke32 adr(b%),a%      :' <--- ERREUR !!!   écrire -1 dans la mémoire à l'adresse b%  
print peek32(adr(b%))  :' montrer le contenu de la mémoire à l'adresse b%
poke32 adr(b%),b%      :' inverser l'ordre des octets pour afficher correctement b%
print b%
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: incohérence POKE32   Lun 26 Mar 2018 - 17:38

Pour moi, le fait que cela soit signé ou non devrait plutôt être un paramètre car une valeur sur 32 bit n'est pas forcément un entier signé même s'il peut l'être.
La même remarque peut s'appliquer au 64 bits, il faudrait rajouter un paramètre pour préciser la nature de la valeur attendue (signée ou non)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: incohérence POKE32   Lun 26 Mar 2018 - 18:21

Je ne pense pas que ce soit nécessaire. Peek, Poke et se dérivés attendent des adresses, et par nature, une adresse est en nombre non signé de 32 ou 64 bits. En Panoramic, il n'y a que des entiers, et donc, une adresse peut être vue comme un nombre négatif, mais ça reste néanmoins un ordinal non signé sur 32 ou 64 bits. Il faut bien entendu que Panoramic laisse passer ces valeurs - à Windows ensuite de rejeter ou non en cas de violation de mémoire.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jack
Admin
avatar

Nombre de messages : 1921
Date d'inscription : 28/05/2007

MessageSujet: Re: incohérence POKE32   Lun 26 Mar 2018 - 20:15

klaus a écrit:
Peek, Poke et ses dérivés attendent des adresses, et par nature, une adresse est en nombre non signé de 32 ou 64 bits.

Tout est là.
POKE32 d'une adresse de variable n'est qu'un cas particulier de l'utilisation de POKE32.
Ajouter un paramètre pour ce cas particulier irait trop loin.
Pourquoi pas un autre paramètre indiquant qu'on écrit dans la mantisse d'une variable réelle, ou dans son exposant, ou qu'on écrit dans un complément à 2 d'une variable entière négative, etc.

C'est trop compliqué et pas le but de PEEK(), POKE et dérivés.

_________________
username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.1fr1.net
silverman

avatar

Nombre de messages : 675
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: incohérence POKE32   Lun 26 Mar 2018 - 22:32

Bien, je comprend. PEEK32 m'a donné des adresses négatives et je comptais sur POKE32 pour régler le pb. Je viens de remarquer que PEEK32 lit les adresses à l'envers d'ou la question suivante:
pourquoi PEEK32 lit les adresses à l'envers?
En fait c'est cette commande qui me pose un pb maintenant... Obtenir l'adresse qui donne accès aux octets qui compose une string n'est pas aisé directement. "a%=PEEK32(adr(machaine$))" ne retourne pas le résultat que j'attendais; je pensais transmettre cette adresse à une dll windows, mais ce n'est compatible, il faut passer par une bidouille Sad
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: incohérence POKE32   Mar 27 Mar 2018 - 0:17

D'après mes tests, Peek32 retourne bien la bonne suite de 4 octets, mais dans l'ordre inversé ! C'est ce qui rend ce résultat inexploitable. Il s'agit ici clairement d'un bug.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc

avatar

Nombre de messages : 869
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: incohérence POKE32   Mar 27 Mar 2018 - 11:37


Bonjour à tous !

Je viens de lire cet article sur l'organisation des données :

https://fr.wikipedia.org/wiki/Endianness

Très intéressant !

Bonne programmation à tous !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 675
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: incohérence POKE32   Mar 27 Mar 2018 - 12:04

klaus a écrit:
D'après mes tests, Peek32 retourne bien la bonne suite de 4 octets, mais dans l'ordre inversé ! C'est ce qui rend ce résultat inexploitable.

Ouf, ça me rassure! Je l'ai vite remarqué, c'est pour ça que j'utilisais POKE32 pour inverser l'ordre des octets, car cette commande les inverse également.

Un code pour montrer le pb:
Code:
dim a%,b%,i%

' ecrire dans a% la série d'octet : 001 002 003 004
a%=001*power(256,3) + 002*power(256,2) + 003*power(256,1) + 004*power(256,0)
print "a% contient la série d'octet : 001 002 003 004"
' copier a% dans b%
b%=peek32(adr(a%))
print "a% est copié dans b% via la commande PEEK32"
print

print "lecture de a%:"
for i%=3 to 0 step -1
  print peek(adr(a%)+i%);"  ";
next i%

print:print

print "lecture de b%:"
for i%=3 to 0 step -1
  print peek(adr(b%)+i%);"  ";
next i%
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1921
Date d'inscription : 28/05/2007

MessageSujet: Re: incohérence POKE32   Mar 27 Mar 2018 - 20:44

silverman a écrit:
a% contient la série d'octet : 001 002 003 004

Eh bien non.

En faisant
Code:
a%=001*power(256,3) + 002*power(256,2) + 003*power(256,1) + 004*power(256,0)
Tu n'écris pas dans a% la série d'octet : 001 002 003 004, mais la série d'octets 004 003 002 001

_________________
username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.1fr1.net
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: incohérence POKE32   Mer 28 Mar 2018 - 0:08

Voici la preuve du problème, Jack. Je crée une variable string contenant "ABCD". J'affiche la valeur hexa de peek32(adr(cette variable)). En même temps, j'appelle une fonction DLL en passant adr(cette variable) en paramètre. Je place dans le titre de la form 0 la représentation hexa de adr(cette variable), le contenu du mot pointé par cette adresse (ce qui est l'adresse du début des données de la chaine de caractères), puis le mot pointé par cette adresse (ce qui affiche les 4 premiers caractères en hexa), puis la chaîne elle-même lue par la fonction DLL.

Or, on constate que, alors que la DLL accède parfaitement normalement à la chaîne, la valeur retournée par peek32 donne bien les bons octets, mais dans l'ordre inverse. Et, partant de là, cette valeur n'est pas utilisable comme adresse pour des traitements ultérieurs.

Voici la fonction DLL:
Code:
function TestAdr(hnd: HWND; a: integer):integer; stdcall; export;
var
  i1, i2: integer;
  s: string;
begin
  i1 := pinteger(a)^;
  i2 := pinteger(i1)^;
  s := inttohex(a,8)+'  '+inttohex(i1,8)+'   '+inttohex(i2,8)+'   '+pstring(a)^;
  sendmessage(hnd,WM_SETTEXT,0,integer(@s[1]));
  result := 0;
end;
exports TestAdr;

Et voici le code Panoramic:
Code:
dim MaChaine$, a%, b%, res%
MaChaine$ = "ABCD"
dll_on "KGF.dll"
a% = peek32(adr(MaChaine$))
res% = dll_call2("TestAdr",handle(0),adr(MaChaine$))
display
message "a%="+hex$(a%)
end

Et le résultat:


Compare l'affichage du message Panoramic avec le deuxième nombre hexa affiché dans la barre de titre...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jack
Admin
avatar

Nombre de messages : 1921
Date d'inscription : 28/05/2007

MessageSujet: Re: incohérence POKE32   Dim 8 Avr 2018 - 23:06

@Klaus:
dans la version instantanée V 0.9.28i17, j'ai inversé l'ordre des octets de PEEK16() et PEEK32().

_________________
username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.1fr1.net
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: incohérence POKE32   Lun 9 Avr 2018 - 0:41

Super ! Merci !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: incohérence POKE32   

Revenir en haut Aller en bas
 
incohérence POKE32
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: