Turbo pascal
Résolu/Fermé
suz
-
28 sept. 2008 à 11:25
shikamaroux Messages postés 538 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 538 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
- Iphone turbo sim inconvénient - Forum iPhone
- My pascal - Télécharger - Édition & Programmation
- Turbo sim - Forum iPhone
- Telecharger turbo pascal 7.0 gratuit 01net ✓ - Forum Pascal
3 réponses
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
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
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
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
538
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
22 février 2013
234
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