Turbo pascal
Résolu/Fermé
suz
-
28 sept. 2008 à 11:25
shikamaroux Messages postés 539 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 22 février 2013 - 7 janv. 2012 à 13:23
shikamaroux Messages postés 539 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 22 février 2013 - 7 janv. 2012 à 13:23
A voir également:
- Turbo pascal
- Turbo pascal download - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Dev-pascal - Télécharger - Édition & Programmation
- Turbo pascal linux ✓ - Forum Linux / Unix
- Turbo sim c'est quoi - Forum Mobile
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
1 oct. 2008 à 10:13
1 oct. 2008 à 10:13
Voici une unité qui permet de modifier la console et la rendre compatible avec le clavier français (elle intègre aussi un affichage du numéro de l'erreur lorsque le programme s'arrête brusquement, et un compteur qui affiche à la fin la durée totale d'exécution du programme).
Il est important que le fichier qui contient le code porte le même nom que celui qui suit "unit" au tout début du code (tel quel le fichier serait donc KX.pas)
Pour que cette unité puisse être appelée facilement par un autre programme, il faut la placer avec les autres unités pré-installées de Turbo Pascal (par exemple moi c'est dans C:\Program Files\Pascal\units\KX.pas) il n'y aura alors plus qu'à faire "uses KX;" au début du code de ton programme pour appeler l'unité et utiliser son contenu.
Il est important que le fichier qui contient le code porte le même nom que celui qui suit "unit" au tout début du code (tel quel le fichier serait donc KX.pas)
Pour que cette unité puisse être appelée facilement par un autre programme, il faut la placer avec les autres unités pré-installées de Turbo Pascal (par exemple moi c'est dans C:\Program Files\Pascal\units\KX.pas) il n'y aura alors plus qu'à faire "uses KX;" au début du code de ton programme pour appeler l'unité et utiliser son contenu.
unit KX; interface implementation uses dos; //////////////////////////////////////////////////////////////////////////////// // Cette partie de l'unité modifie les caractères lisibles de la console // Il y aura alors adéquation entre le clavier français et l'affichage à l'écran //////////////////////////////////////////////////////////////////////////////// type Table=array[0..255] of char; Driver=procedure(var t:TextRec); var RawInput,RawOutput:Driver; InTable,OutTable:Table; procedure Assoc(i,c: integer); begin InTable[c]:=chr(i); OutTable[i]:=chr(c); end; procedure InitTables; var i:integer; begin for i:=0 to 127 do begin InTable[i]:=chr(i); OutTable[i]:=chr(i); end; for i:=128 to 255 do begin InTable[i]:=chr(128); OutTable[i]:=chr(177); end; Assoc(160,255); // Assoc(161,173); // ¡ Assoc(162,189); // ¢ Assoc(163,156); // £ Assoc(164,207); // ¤ Assoc(165,190); // ¥ Assoc(166,221); // ¦ Assoc(167,245); // § Assoc(168,249); // ¨ Assoc(169,184); // © Assoc(170,166); // ª Assoc(171,174); // « Assoc(172,170); // ¬ Assoc(173,240); // Assoc(174,169); // ® Assoc(175,238); // ¯ Assoc(176,248); // ° Assoc(177,241); // ± Assoc(178,253); // ² Assoc(179,252); // ³ Assoc(180,239); // ´ Assoc(181,230); // µ Assoc(182,244); // ¶ Assoc(183,250); // · Assoc(184,247); // ¸ Assoc(185,251); // ¹ Assoc(186,167); // º Assoc(187,175); // » Assoc(188,172); // ¼ Assoc(189,171); // ½ Assoc(190,243); // ¾ Assoc(191,168); // ¿ Assoc(192,183); // À Assoc(193,181); // Á Assoc(194,182); // Â Assoc(195,199); // Ã Assoc(196,142); // Ä Assoc(197,143); // Å Assoc(198,146); // Æ Assoc(199,128); // Ç Assoc(200,212); // È Assoc(201,144); // É Assoc(202,210); // Ê Assoc(203,211); // Ë Assoc(204,222); // Ì Assoc(205,214); // Í Assoc(206,215); // Î Assoc(207,216); // Ï Assoc(208,209); // Ð Assoc(209,165); // Ñ Assoc(210,227); // Ò Assoc(211,224); // Ó Assoc(212,226); // Ô Assoc(213,229); // Õ Assoc(214,153); // Ö Assoc(215,158); // × Assoc(216,157); // Ø Assoc(217,235); // Ù Assoc(218,233); // Ú Assoc(219,234); // Û Assoc(220,154); // Ü Assoc(221,237); // Ý Assoc(222,232); // Þ Assoc(223,225); // ß Assoc(224,133); // à Assoc(225,160); // á Assoc(226,131); // â Assoc(227,198); // ã Assoc(228,132); // ä Assoc(229,134); // å Assoc(230,145); // æ Assoc(231,135); // ç Assoc(232,138); // è Assoc(233,130); // é Assoc(234,136); // ê Assoc(235,137); // ë Assoc(236,141); // ì Assoc(237,161); // í Assoc(238,140); // î Assoc(239,139); // ï Assoc(240,208); // ð Assoc(241,164); // ñ Assoc(242,149); // ò Assoc(243,162); // ó Assoc(244,147); // ô Assoc(245,228); // õ Assoc(246,148); // ö Assoc(247,246); // ÷ Assoc(248,155); // ø Assoc(249,151); // ù Assoc(250,163); // ú Assoc(251,150); // û Assoc(252,129); // ü Assoc(253,236); // ý Assoc(254,231); // þ Assoc(255,152); // ÿ end; procedure CookedOutput(var f:textrec); var i:integer; begin for i:=0 to f.bufpos-1 do f.buffer[i]:=OutTable[ord(f.buffer[i])]; RawOutput(f); end; procedure CookedInput(var f:textrec); [IOCheck]; var i: integer; begin RawInput(f); for i:=0 to f.bufend-1 do f.buffer[i]:=InTable[ord(f.buffer[i])]; end; procedure RedirectIO(var InText,OutText:text); begin RawInput:=Driver(TextRec(InText).InOutFunc); TextRec(InText).InOutFunc:=@CookedInput; RawOutput:=Driver(TextRec(OutText).InOutFunc); TextRec(OutText).InOutFunc:=@CookedOutput; TextRec(OutText).FlushFunc:=@CookedOutput; end; procedure Install_Screen; begin InitTables; RedirectIO(input,output) end; //////////////////////////////////////////////////////////////////////////////// // Cette partie de l'unité affiche (à la fin) le temps d'exécution du programme // En cas d'erreur lors de l'exécution, le numéro d'erreur est également affiché //////////////////////////////////////////////////////////////////////////////// type ProcType=procedure; var OldProc:ProcType; r1:real; function RealOfGetTime:real; var h,m,s,c:word; begin GetTime(h,m,s,c); result:=h*3600+m*60+s+real(c)/100; end; procedure ToDoAtExit; var r,r2:real; begin Exitproc:=OldProc; r2:=RealOfGetTime; r:=r2-r1; if r<0 then r:=r+24*3600; writeln; if ErrorAddr=nil then write('Fin du programme') else write('Erreur ',ExitCode); write('. Temps d''exécution : ',r:0:2,' secondes'); readln; end; procedure Install_Time; begin OldProc:=ProcType(ExitProc); ExitProc:=@ToDoAtExit; end; begin r1:=RealOfGetTime; Install_Screen; Install_Time; end.Voici un petit programme de test qui montre bien le problème que résoud cette unité :
program Accents; uses KX; begin writeln('àâä éèêë ìîï òôö ùûü ÿ'); end.Je pense que cette unité à résolu ton problème, sinon dis moi où ça coince...
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
30 sept. 2008 à 13:41
30 sept. 2008 à 13:41
Il y a une méthode pour modifier la console et afficher les bons caractères et elle fait appel à des connaissances qui ne sont pas celles de novices (il faut bidouiller à l'intérieur de la console)
La méthode la plus simple est d'éviter d'utiliser des accents dans tes writeln et readln...
Remarque : si tu utilise un readln(s) en mettant des accents, il n'y aura pas de changement dans le writeln(s) c'est à dire que si tu ne fais pas de traitement sur s, les accents seront conservés...
La méthode la plus simple est d'éviter d'utiliser des accents dans tes writeln et readln...
Remarque : si tu utilise un readln(s) en mettant des accents, il n'y aura pas de changement dans le writeln(s) c'est à dire que si tu ne fais pas de traitement sur s, les accents seront conservés...
shikamaroux
Messages postés
539
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
22 février 2013
227
7 janv. 2012 à 13:23
7 janv. 2012 à 13:23
Bonjour,
Une solution ici :
https://forums.commentcamarche.net/forum/affich-4453333-turbo-pascal-et-vista
Une solution ici :
https://forums.commentcamarche.net/forum/affich-4453333-turbo-pascal-et-vista