Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Extension in Tcl with C

Status
Not open for further replies.

hability

Technical User
Jul 27, 2007
3
0
0
CH
Hello all,

I would like to create an extension with a function of conversion from a number in base ten to another base. I've already the programme in tcl-tk for such a converstion, but i need to transform it in C and Use Tcl libraries.
The problem is that I don't know to use the Tcl libraries in C. How can I do? Do you have an exemple for that, because I don't understand how to create an extension in Tcl with C language. Thanks in advance for your help.

A+

 
Code:
#!/usr/bin/w.ish8.4 -f
#-------------------VARIABLES

global valeur entree; 
global valeur nouvelle; 
global base_entree; 
global nouvelle_base; 
global resultat verifie; 
global chiffres;

#--------------------PROCEDURES

proc Verifie_La_Base { } {
global valeur entree;
global base_entree;
global resultat verifie;

set max [string length $valeur_entree]; 
for {set i 0} { $i < $max } {incr i} {set pos [string index $valeur_entree $i];if { $pos > $base entree } {set resultat_ verifie 0;break;break;}; #end of if};#end of for
}#;end of Verifie_La_Base

#-----------------------

proc Retour_Base_Decimale { } {
global valeur entree;
global base_entree;
global valeur decimale;

set valeur base10 0;
set max [string length $valeur_entree];
for { set i 0 } { $i < $max } {incr i } {set indice_pos [string index $valeur_entree $i];set valeur_base10 [expr $valeur_base10*$base_entree + $indice_pos]; } ;#end of for

set valeur_decimale $valeur base10;

};#end of Retour_Base_Decimale

#-------------------------

proc Changement_De_Base { valeur } {
global chiffres;
gobal valeur entree;
gobal base_entree;
global base nouvelle;
global valeur nouvelle;
if { $valeur > 0 } {set modulo [expr int(fmod($valeur,$base_nouvelle)) ];puts "modulo \= $modulo";set indice [string index $chiffres $modulo];puts "indice \= $indice";set valeur nouvelle [append indice $valeur_nouvelle]; 
puts "valeur nouvelle \= $valeur_nouvelle";set valeur [expr int($valeur / $base_nouvelle) ];puts "diminution de la valeur \= $valeur";Changement_De_Base $valeur;};#end of if

};#end of Changement_De_Base

#-----------------------	DEBUT DU PROGRAMME


#-----------------------	VALEURS ENTREES

puts stdout "Veuillez donner la valeur d'entree dans sa base indiquée ci-dessous";
gets stdin valeur_entree;
puts stdout "Veuillez donner la base d'entrée";
gets stdin base_entree;
puts stdout "Veuillez donner la nouvelle base pour effectuer le changement de base";
gets stdin base_nouvelle;

#----------------------     PROGRAMME

set chiffres "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
set valeur_entree [string toupper $valeur_entree];
puts $valeur_entree;
set resultat verifie 1;
Verifie_La_Base;
if { $resultat verifie == 0 } {puts "La valeur d'entree n'est pas conforme à la base indiquée en entrée"; } else {if { $base entree != 10 } {Retour_Base_Decimale;} else {set valeur_decimale $valeur_entree;};#end of ifputs "$valeur_decimale";set valeur_indiquee $valeur_decimale;set valeur nouvelle "";Changement_De_Base $valeur_indiquee;puts "$valeur_entree en base $base_entree \= $valeur_nouvelle en base $base_nouvelle";} ;#end of if
--------------------------------------------------------------------------------
Dernière modification par Alcatîz 01/07/2007 à 11h42. Motif: balises code au lieu de quote
 
Hello ulis,

A concrete exemple is better for me than this documentation in the wiki. Thank you for your help.

A+
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top