Bonjour,
Je cherche la fonction (et l'unité qui va avec ) pascal qui permet de connaitre l'OS utilisé par le programme.
La connaissez-vous ?
Mon soft doit tourner sur solaris, linux et win....
merci d'avance
Bonjour,
Je cherche la fonction (et l'unité qui va avec ) pascal qui permet de connaitre l'OS utilisé par le programme.
La connaissez-vous ?
Mon soft doit tourner sur solaris, linux et win....
merci d'avance
Je ne connais pas un tel OS mais par contre il t'est possible de connaître toutes les informations sur une machine en utilisant les variables d'environnements (tu peux voir leur liste en tapant Set dans la fenêtre Dos).
Pour le faire, inspire toi de l'exemple pour simuler un interpréteur de commande en Pascal (aide sur GetEnv je crois...) (tu simules l'exécution de la commande ver toi même et tu recupères le résultat dans un string)
@+
TP est uniquement pour DOS, si tu veux compiler pour d'autres plateformes regarde le post-it de Pascail, au début de ce forum.
Il faudra que tu aies 3 sources différentes pour chaque plateforme, j'espère que tu en es conscient...
Je pense que le meilleur moyen est de tester les variables d'environnement (si elles existent), enfin de trouver un truc spécifique à chaque environnement... Vu que tu as trois 3 sources, il ne devrait pas y avoir de difficultés !
a+
Oui c'est vrai que j'ai du poser cette question un peu vite....
mais en fait je n'utilise pas Turbo pascal, j'utilise Gnu Pascal (sous solaris et linux) et Freepascal (sous win et linux)....
En fait pr le moment, je n'ai besoin de connaitre l'os pour une seule chose, savoir ou mettre lun fichier de sauvegarde.
Donc je pensais, avec une simple condition, assigner mon fichier a un chemin différent en fonction de l'os en cours... donc la source serait la mm pr tt les OS.
Ce ne serait pas possible ?
Bonjour !
Il existe une fonction GetWindowsDir qui permet à un programme DOS de déterminer le répertoire de Windows.
En cas d'échec, la fonction retourne 0. Ce serait déjà un premier pas juste pour tester la présence de Windows ?
Cette fonction se trouve dans l'unité VER (en fait, j'ignore si cette unité est fournie avec TP - elle l'est avec BP en tout cas).
Beeeuh j'ai posté ma réponse en même temps que la tienne, d'où je tombe à côté du sujet...
Bon j'ai essayé "Getenv", mais je suppose qu'il est dans une unit que je ne connais pas... vous pourriez me dire laquelle ?
[Ou alors je capte pas la syntaxe ]
Deux compilateurs donc deux sources différentes ! Le problème reste le même... Comment différencier linux et windows ou linux et solaris ? Tu peux tester la présence de l'int 21 pour windows ( en espérant qu'elle existe encore pour windows XP...) , ou tester l'int 80 pour linux... Pour solaris, je ne connais pas du tout donc je ne peux pas t'aider...Envoyé par Ilove
a+
Bon en fait, l'astuce que je donnai était valable uniquement pour déterminer la version de Windows en cours.
Bon voici un petit code que tu vas tester :
Le résultat (le fichier version.dat) sera à la racine du disque dur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 program GetWindowsVersion; uses Dos; var version1,path : string; cmd : string; begin path := 'C:\'; version1 := '/C '+ 'ver' + '>'+Path+'Version.dat'; version2 := '/C '+ 'Os' + '>>'+Path+'version.dat'; Swapvectors; Exec(GetEnv('CompSec'),version1); Exec(GetEnv((CompSpec'),version2); SwapVectors; end.
Les variables d'environnement Os et ver nous donnant respectivement la version de Windows et du Dos en cours.
@+
utilisez la compilation conditionnelle en testant les variables
d'environnement du compilateur
je suppose qu'il doit exister d'autres variables pour l'OS tel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 {$IFDEF VER1_0_6} writeln ("compilateur FREE Pascal version 1.0.6"); {$ELSE} writeln ("compilateur autre"); {$ENDIF}
__WIN32__ ou __LINUX__
HRS,
Les variables que tu utilises te servent à retrouver la version de l'Os ou
du compilateur?
Envoyé par Ilove
Merci pr vos réponse, j'y jeterais un coup d'oeil dès que j'aurais le temps... (un peu overbooké pr le moment )
Mais quand tu parles de source différente, wormful, tu veux parler du code (=> le fichier .pas) ? Pcq ce fichier doit etre le mm pr tt les os. En fait, au final, je dois avoir un fichier/code qui compile sous linux, solaris, et win (avec fpc et gpc). :
avec FreePascal, on détermine d'abord l'OS global.
A l'intérieur de la branche Windows, on pourra lancer une API pour
savoir à quel niveau de Windows on est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 program quelos; begin {$IFDEF WIN32} writeln ('je suis sous win32'); {$ELSE} writeln ('je ne suis pas sous win32'); {$ENDIF} readln; end.
Si tu as un seul compilateur qui existe pour les trois plateformes, tu n'auras besoin que d'un seul code source (fichier .pas), mais si tu as plusieurs compilateurs, il te faudra sûrement un fichier pas pour chaque compilateur, pour la simple et bonne raison que chaque compilateur est différent... Un code source peut être compilé correctement par un compilateur, mais il n'est pas garanti que ce même code puisse être compilé sans problème par un autre compilateur !
a+
wormful, vous n'avez pas dû comprendre mon 1er message.
on peut distinguer un compilateur Pascal d''un autre
VER130 pour le Pascal Objet 13.0 (Delphi 5)
__GPC__ pour le GNU Pascal
VER1_0_6 pour le FreePascal 1.0.6
donc il faut combiner les variables OS et les variables compilateurs
Si si j'ai parfaitement compris
Seulement, la compilation conditionnelle n'est peut-être pas non plus supporté par tous les compilateurs...
Cela dit, cette solution est totalement acceptable !!
a+
C'est justement ce que je doit garantirEnvoyé par wormful_sickfoot
Juste une question Ilove : j'espère que tu es conscient que tu obtiendras quoiqu'il arrive trois fichiers exécutables ? A moins qu'il existe une astuce pour avoir le même fichier exécutable...
A la limite, le problème peut s'envisager différemment : plutot que de tester l'OS, faire carrément trois versions différentes du programme, pour chaque plateforme...
a+
Oui oui oui, j'en suis conscient, le but est de faire UN code source qui soit compilable par fpc et gpc sous linux, solaris et win. Le tout en pascal "classique".Envoyé par wormful_sickfoot
Et donc je ne peux pas faire çaEnvoyé par wormful_sickfoot
Mais bon, la plateforme n'influenra pas bcp mon programme, jsute la façon de sauvegarder des données ds un fichier
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager