Bonjour,
je suis nouveau sur ce forum et débutant en programation(j'apprend le language c avec les tutorials).
Malgré cela j'aimerai être aider à convertir un programme.
Ce programme permet de comander un module externe branché sur le port usb en //com3.Je suis désoler si je ne suis pas clair dans mes explications mes ne connaissant pas le language delphi, j'ai un peu de mal à m'expliquer.
var
Form1: TForm1;
Data:array[1..8]ofBoolean;
numcom:integer;
i:integer;
Ordre_Data:array[1..8]ofByte;
implementation
{$R *.DFM}
// SELECTION DU PORT COM ET OUVERTURE ==========================================
begin
numCom:=3; ifnot(InitCom(numCom,9600,NOPARITY,ONESTOPBIT))then ShowMessage('Impossible d''ouvrir COM'+inttostr(numCom));
// CHANGEMENT D'ETAT D'UNE SORTIE ==============================================
i:=7;
Data[i]:=true;
// PROCEDURE D'ENVOI DES DONNEES AU MONTAGE ==================================== // Ordre dans lequel les données doivent être envoyées-------------------------
Ordre_Data[1]:=1;
Ordre_Data[2]:=2;
Ordre_Data[3]:=3;
Ordre_Data[4]:=4;
Ordre_Data[5]:=8;
Ordre_Data[6]:=7;
Ordre_Data[7]:=6;
Ordre_Data[8]:=5;
// Envoi des données via le port série-----------------------------------------
DTRon; //STROBE=0 for i:=8downto1do begin
TXDon; //CLK=0 if Data[ Ordre_Data[i]]then RTSoff else RTSon; //DATA
TXDoff; //CLK=1 end;
DTRoff; //STROBE=0 end.
{*******************************************************************************
Fonctions et procédure permettant de piloter les lignes du port série du PC
comme des lignes d'Entrées / Sorties
*******************************************************************************}
unit UnitPortSerieXP;
interface
uses
Windows,Messages,SysUtils,Classes;
Function InitCom(Com:Integer;Vitesse:LongInt;Parite:Byte;stopsBits:Byte):Boolean; Procedure CloseCom; Function TXDon:Boolean; Function TXDoff:Boolean; Function DTRon:Boolean; Function DTRoff:Boolean; Function RTSon:Boolean; Function RTSoff:Boolean; Function CTS:boolean; Function DCD:boolean; Function DSR:boolean; Function RI:boolean; Function Lecture:Byte;
implementation
var dcbCom:TDCB;
hPort:LongInt;
//========================================================================================== //Initialisation du port COM
FunctionInitCom(Com:Integer;Vitesse:LongInt;Parite:Byte;stopsBits:Byte):Boolean; begin
hPort:=CreateFile(PChar('COM'+IntToStr(Com)),
GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,LongInt(0)); if(hPort=LongInt(INVALID_HANDLE_VALUE))then
result:=false else begin if GetCommState(hPort,dcbCom)then begin
dcbCom.Baudrate:=Vitesse;
dcbCom.ByteSize:=8;
dcbCom.Parity:=Byte(Parite);
dcbCom.Flags:=0;
SetCommState(hPort,dcbCom);
result:=true; end else
result:=false; end; end;
//========================================================================================== //Fermeture du port COM Procedure CloseCom; begin try
CloseHandle(hPort); finally; end; end;
//========================================================================================== //TXD ON Function TXDon:Boolean; begin
result:=EscapeCommFunction(hPort,SETBREAK); end;
//========================================================================================== //TXD OFF Function TXDoff:Boolean; begin
result:=EscapeCommFunction(hPort,CLRBREAK); end;
//========================================================================================== //DTR ON Function DTRon:Boolean; begin
result:=EscapeCommFunction(hPort,SETDTR); end;
//========================================================================================== //DTR OFF Function DTRoff:Boolean; begin
result:=EscapeCommFunction(hPort,CLRDTR); end;
//========================================================================================== //RTS ON Function RTSon:Boolean; begin
result:=EscapeCommFunction(hPort,SETRTS); end;
//========================================================================================== //RTS OFF Function RTSoff:Boolean; begin
result:=EscapeCommFunction(hPort,CLRRTS); end;
//========================================================================================== //LECTURE CTS Function CTS:Boolean; var state:Cardinal; begin if GetCommModemStatus(hPort,State)then begin if(state and MS_CTS_ON)<>0then result:=trueelse result:=false; end else
result:=false; end;
//========================================================================================== //LECTURE DSR Function DSR:Boolean; var state:Cardinal; begin if GetCommModemStatus(hPort,State)then begin if(state and MS_DSR_ON)<>0then result:=trueelse result:=false; end else
result:=false; end;
//========================================================================================== //LECTURE DCD Function DCD:Boolean; var state:Cardinal; begin if GetCommModemStatus(hPort,State)then begin if(state and MS_RLSD_ON)<>0then result:=trueelse result:=false; end else
result:=false; end;
//========================================================================================== //LECTURE RI Function RI:Boolean; var state:Cardinal; begin if GetCommModemStatus(hPort,State)then begin if(state and MS_RING_ON)<>0then result:=trueelse result:=false; end else
result:=false; end;
//========================================================================================== //LECTURE DES 4 ENTREES, RETOURNE UN MOT CODE SUR 4 BITS Function Lecture:Byte; var DATA:Byte;begin
DATA:=0; if CTS then DATA:=DATA AND1;{LSB} if DSR then DATA:=DATA AND2; if RI then DATA:=DATA AND4; if DCD then DATA:=DATA AND8;{MSB}
result:=DATA; end;
UnitPortSerieXP(dans les used) correspond-il à un header au language C ?
Est-ce que j'ai besoin de tous ces used pour que mon programme fonctionne(je suppose que les used correspondent au header) ?
Qu'est ce que le Type
Le message qui suit est une réponse automatique activée par un modérateur.
Les réponses automatiques permettent d'éviter aux modérateurs d'avoir à répéter de nombreuses fois la même chose, et donc de leur faire gagner beaucoup de temps.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter le modérateur en question par MP.
Merci d'utiliser les balises de code
Bonjour,
Les forums du Site du Zér0 disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source.
Vous avez posté un code source sans utiliser cette fonctionnalité. Pourriez-vous éditer votre message en entourant votre code des balises <code > et </code> ?
Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.
Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :
Citation
int main(int argc, char *argv[])
{
long choixOperation;
printf("Choisissez l'operation a effectuer");
/* etc. */
}
Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :
int main(int argc, char *argv[]) { long choixOperation;
printf("Choisissez l'operation a effectuer"); /* etc. */ }
C'est plus clair n'est-ce pas ?
N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.
Oui je voudrais bien mais je ne conais pas le language pascal et je croi qu'il y a que des fonctions.
J'ai passer beaucoup de temps à essayer de convertir et si je pouvais avoir quelques règle de convertion...comme := en pascal donne -> en c.
je m'en fiche que tu connaisses pas le pascal, ce que je te demande c'est de mettre les balises <code type="pascal"></code> autour de ton code dans ton 1er message
Tu déterres un vieux sujet datant de 2006/2007 et tu ne donnes pas le contexte de ton intervention. Crée ton propre sujet et sois plus clairr. Pour ce qui est du post original: J'ai déjà converti un programme Pascal en C avec plusieurs commandes pour GNU sed. J'ai fait la conversion à plus de 95% et le reste à la main.
Le Tout est souvent plus grand que la somme de ses parties.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Je ferme ce sujet. En cas de désaccord, me contacter par MP.
Le Tout est souvent plus grand que la somme de ses parties.