OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [cygmon/] [v2_0/] [misc/] [bsp/] [common/] [hex-utils.c] - Blame information for rev 174

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
//==========================================================================
2
//
3
//      hex-utils.c
4
//
5
//      Utilities for dealing with hexadecimal strings.
6
//
7
//==========================================================================
8
//####ECOSGPLCOPYRIGHTBEGIN####
9
// -------------------------------------------
10
// This file is part of eCos, the Embedded Configurable Operating System.
11
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12
//
13
// eCos is free software; you can redistribute it and/or modify it under
14
// the terms of the GNU General Public License as published by the Free
15
// Software Foundation; either version 2 or (at your option) any later version.
16
//
17
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
19
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20
// for more details.
21
//
22
// You should have received a copy of the GNU General Public License along
23
// with eCos; if not, write to the Free Software Foundation, Inc.,
24
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25
//
26
// As a special exception, if other files instantiate templates or use macros
27
// or inline functions from this file, or you compile this file and link it
28
// with other works to produce a work based on this file, this file does not
29
// by itself cause the resulting work to be covered by the GNU General Public
30
// License. However the source code for this file must still be made available
31
// in accordance with section (3) of the GNU General Public License.
32
//
33
// This exception does not invalidate any other reasons why a work based on
34
// this file might be covered by the GNU General Public License.
35
//
36
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37
// at http://sources.redhat.com/ecos/ecos-license/
38
// -------------------------------------------
39
//####ECOSGPLCOPYRIGHTEND####
40
//==========================================================================
41
//#####DESCRIPTIONBEGIN####
42
//
43
// Author(s):    
44
// Contributors: gthomas
45
// Date:         1999-10-20
46
// Purpose:      
47
// Description:  
48
//               
49
//
50
//####DESCRIPTIONEND####
51
//
52
//=========================================================================
53
 
54
 
55
#include <bsp/hex-utils.h>
56
 
57
int
58
__hex(char ch)
59
{
60
    if ((ch >= 'a') && (ch <= 'f')) return (ch-'a'+10);
61
    if ((ch >= '0') && (ch <= '9')) return (ch-'0');
62
    if ((ch >= 'A') && (ch <= 'F')) return (ch-'A'+10);
63
    return (-1);
64
}
65
 
66
 
67
/*
68
 * Convert the hex data in 'buf' into 'count' bytes to be placed in 'mem'.
69
 * Returns a pointer to the character in mem AFTER the last byte written.
70
 */
71
char *
72
__unpack_bytes_to_mem(char *buf, char *mem, int count)
73
{
74
    int  i;
75
    char ch;
76
 
77
    for (i = 0; i < count; i++) {
78
        ch = __hex(*buf++) << 4;
79
        ch = ch + __hex(*buf++);
80
        *mem++ = ch;
81
    }
82
    return(mem);
83
}
84
 
85
/*
86
 * While finding valid hex chars, build an unsigned long int.
87
 * Return number of hex chars processed.
88
 */
89
int
90
__unpack_ulong(char **ptr, unsigned long *val)
91
{
92
    int numChars = 0;
93
    int hexValue;
94
 
95
    *val = 0;
96
 
97
    while (**ptr) {
98
        hexValue = __hex(**ptr);
99
        if (hexValue >= 0) {
100
            *val = (*val << 4) | hexValue;
101
            numChars ++;
102
        } else
103
            break;
104
        (*ptr)++;
105
    }
106
    return (numChars);
107
}
108
 
109
 
110
/*
111
 * Unpack 'count' hex characters, forming them into a binary value.
112
 * Return that value as an int. Adjust the source pointer accordingly.
113
 */
114
int
115
__unpack_nibbles(char **ptr, int count)
116
{
117
    int value = 0;
118
 
119
    while (--count >= 0) {
120
        value = (value << 4) | __hex(**ptr);
121
        (*ptr)++;
122
    }
123
    return value;
124
}
125
 
126
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.