summaryrefslogtreecommitdiff
path: root/modules/m2sci/macros/kernel/default_trad.sci
blob: 4d98683089edc46dc2fd030a3da279cb0118f917 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution.  The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt

function tree=default_trad(tree)
    // M2SCI function
    // Create a default translation function

    global("mtlbref_fun") //contains the matlab reference functions which not yet converted
    global("mtlbtool_fun")//contains the matlab  toolboxes functions
    global("not_mtlb_fun") // contains the not matlab functions

    if ~exists("mtlbref_fun") then
        mtlb_fun=[]
    end
    if ~exists("mtlbtool_fun") then
        mtlbtool_fun=[]
    end
    if ~exists("not_mtlb_fun") then
        not_mtlb_fun=[]
    end

    name=tree.name

    ispriminame=%f;
    //true if the name function is the name of scilab function primitive
    if funptr(tree.name)<>0 then
        name1="%"+tree.name
        tree.name=name1
        ispriminame=%t;
    end
    //ismtlbfun is true if the function is in a matlab toolbox, mtlbpath is the path where is the function
    [mtlbpath,ismtlbtoolfun]=mtlbtoolfun(name)
    //Matlab reference functions
    if or(name==not_yet_converted()) then
        set_infos(msprintf(gettext("Matlab function %s not yet converted, original calling sequence used."),name),2)
        if ~or(name==mtlbref_fun(:,1)) then
            mtlbref_fun($+1,1)=name
            if ispriminame then
                mtlbref_fun($,2)=msprintf(gettext("(Warning name conflict: function name changed from %s to %s)."),name,name1);
            else
                mtlbref_fun($,2)=""
            end
        end
        //Matlab toolboxes functions
    elseif ismtlbtoolfun then
        set_infos(msprintf(gettext("Matlab toolbox(es) function %s not converted, original calling sequence used"),name),2)
        if ~or(name==mtlbtool_fun(:,1)) then
            mtlbtool_fun($+1,1)=name
            if ispriminame then
                mtlbtool_fun($,2)=msprintf(gettext("Matlab toolbox(es) function %s not converted, original calling sequence used."),name,name1,mtlbpath)
            else
                mtlbtool_fun($,2)=msprintf(gettext("(Find this function in matlab/%s)."),mtlbpath)
            end
        end
    elseif isdefinedvar(Variable(tree.name,Infer())) then
        operands=list()
        operands(1)=Variable(tree.name,Infer())
        for krhs=1:lstsize(tree.rhs)
            operands($+1)=tree.rhs(krhs)
        end
        tree=Operation("ext",operands,tree.lhs)
        tree=operation2sci(tree)

        //Not matlbb function
    else
        set_infos(msprintf(gettext("Unknown function %s not converted, original calling sequence used."),name),2)
        if ~or(name==not_mtlb_fun(:,1)) then
            not_mtlb_fun($+1,1)=name
            if ispriminame then
                not_mtlb_fun($,2)=msprintf(gettext("(Warning name conflict: function name changed from %s to %s)."),name,name1);
            else
                not_mtlb_fun($,2)=""
            end
        end
    end
    if ispriminame then
        set_infos(msprintf(gettext("(Warning name conflict: function name changed from %s to %s)."),name,name1),0)
    end
    [tree]=sci_generic(tree)
endfunction