summaryrefslogtreecommitdiff
path: root/modules/string/src/c/cvstr.c
blob: a9c25a2dad692c0757499353fdf0e60335939e20 (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
103
104
105
106
107

/*
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) INRIA - Allan CORNET , Cong WU
 *
 * 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
 *
 */

/*--------------------------------------------------------------------------*/
#include <string.h>
#include "cvstr.h"
#include "core_math.h"
#include "getfastcode.h"
/*--------------------------------------------------------------------------*/
/* Table of constant values */
static int cx1 = 1;
static int c_n1 = -1;
/*--------------------------------------------------------------------------*/
int C2F(cvstr)(int * n, int * line, char * str, int * job, unsigned long str_len)
{
    if (*job == 0)
    {
        C2F(asciitocode)(n, line, str, &cx1, str_len);
    }
    else
    {
        C2F(codetoascii)(n, line, str, str_len);
    }
    return 0;
}
/*--------------------------------------------------------------------------*/
int C2F(cvstr1)(int *n, int * line, char * str, int * job,	unsigned long  str_len)
{
    if (*job == 0)
    {
        C2F(asciitocode)(n, line, str, &c_n1, str_len);
    }
    else
    {
        C2F(codetoascii)(n, line, str, str_len);
    }
    return 0;
}
/*--------------------------------------------------------------------------*/
int C2F(codetoascii)(int *n, int * line, char * str, unsigned long str_len)
{
    int j = 0;
    int nn = 0;

    /* check *n value */
    if  (*n >= 0)
    {
        nn = *n;
    }

    /* conversion code -> ascii */
    while (nn--)
    {
        str[j] = convertScilabCodeToAsciiCode(line[j]);
        j++;
    }
    return 0;
}
/*--------------------------------------------------------------------------*/
int C2F(asciitocode)(int * n, int * line, char * str, int * flagx, unsigned long  str_len)
{
    int nn = 0;

    if (*flagx == 1)
    {
        int j = 0;
        nn = *n;
        while (nn--)
        {
            unsigned char current_char = str[j];
            line[j] = convertAsciiCodeToScilabCode(current_char);
            j++;
        }
    }
    else
    {
        int l = 0;

        /* check *n value */
        if ( (int)strlen(str) > *n )
        {
            l = (int)strlen(str);
        }
        else
        {
            l = *n;
        }

        for (nn = l - 1 ; nn >= 0; --nn)
        {
            unsigned char current_char = str[nn];
            line[nn] = convertAsciiCodeToScilabCode(current_char);
        }
    }
    return 0;
}
/*--------------------------------------------------------------------------*/