Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/tcl8.5.2/tools/fix_tommath_h.tcl @ 43

Last change on this file since 43 was 25, checked in by landauf, 16 years ago

added tcl to libs

File size: 2.3 KB
Line 
1# fixtommath.tcl --
2#
3#       Changes to 'tommath.h' to make it conform with Tcl's linking
4#       conventions.
5#
6# Copyright (c) 2005 by Kevin B. Kenny.  All rights reserved.
7#
8# See the file "license.terms" for information on usage and redistribution
9# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
10#
11# RCS: @(#) $Id: fix_tommath_h.tcl,v 1.6 2007/02/14 17:59:22 kennykb Exp $
12#
13#----------------------------------------------------------------------
14
15set f [open [lindex $argv 0] r]
16set data [read $f]
17close $f
18
19set eat_endif 0
20set eat_semi 0
21set def_count 0
22foreach line [split $data \n] {
23    if { !$eat_semi && !$eat_endif } {
24        switch -regexp -- $line {
25            {#define BN_H_} {
26                puts $line
27                puts {}
28                puts "\#include <tclTomMathDecls.h>"
29                puts "\#ifndef MODULE_SCOPE"
30                puts "\#define MODULE_SCOPE extern"
31                puts "\#endif"
32            }
33            {typedef\s+unsigned long\s+mp_digit;} {
34                # change the second 'typedef unsigned long mp
35                incr def_count
36                puts "\#ifndef MP_DIGIT_DECLARED"
37                if {$def_count == 2} {
38                    puts [string map {long int} $line]
39                } else {
40                    puts $line
41                }
42                puts "\#define MP_DIGIT_DECLARED"
43                puts "\#endif"
44            }
45            {typedef.*mp_digit;} {
46                puts "\#ifndef MP_DIGIT_DECLARED"
47                puts $line
48                puts "\#define MP_DIGIT_DECLARED"
49                puts "\#endif"
50            }
51            {typedef struct} {
52                puts "\#ifndef MP_INT_DECLARED"
53                puts "\#define MP_INT_DECLARED"
54                puts "typedef struct mp_int mp_int;"
55                puts "\#endif"
56                puts "struct mp_int \{"
57            }
58            \}\ mp_int\; {
59                puts "\};"
60            }
61            {^(char|int|void)} {
62                puts "/*"
63                puts $line
64                set eat_semi 1
65                set after_semi "*/"
66            }
67            {^extern (int|const)} {
68                puts "\#if defined(BUILD_tcl) || !defined(_WIN32)"
69                puts [regsub {^extern} $line "MODULE_SCOPE"]
70                set eat_semi 1
71                set after_semi "\#endif"
72            }
73            {define heap macros} {
74                puts $line
75                puts "\#if 0 /* these are macros in tclTomMathDecls.h */"
76                set eat_endif 1
77            }
78            {__x86_64__} {
79                puts "[string map {__x86_64__ NEVER} $line]\
80                      /* 128-bit ints fail in too many places */"
81            }
82            default {
83                puts $line
84            }
85        }
86    } else {
87        puts $line
88    }
89    if {$eat_semi} {
90        if {[regexp {; *$} $line]} {
91            puts $after_semi
92            set eat_semi 0
93        }
94    }
95    if {$eat_endif} {
96        if {[regexp {^\#endif} $line]} {
97            puts "\#endif"
98            set eat_endif 0
99        }
100    }
101}
Note: See TracBrowser for help on using the repository browser.