]> git.saurik.com Git - apple/icu.git/blame - icuSources/tools/genrb/rbutil.c
ICU-8.11.1.tar.gz
[apple/icu.git] / icuSources / tools / genrb / rbutil.c
CommitLineData
b75a7d8f
A
1/*
2*******************************************************************************
3*
73c04bcf 4* Copyright (C) 1998-2005, International Business Machines
b75a7d8f
A
5* Corporation and others. All Rights Reserved.
6*
7*******************************************************************************
8*
9* File util.c
10*
11* Modification History:
12*
13* Date Name Description
14* 06/10/99 stephen Creation.
15*******************************************************************************
16*/
17
18#include "unicode/putil.h"
73c04bcf 19#include "rbutil.h"
b75a7d8f
A
20#include "cmemory.h"
21#include "cstring.h"
22
23
24/* go from "/usr/local/include/curses.h" to "/usr/local/include" */
25void
26get_dirname(char *dirname,
27 const char *filename)
28{
29 const char *lastSlash = uprv_strrchr(filename, U_FILE_SEP_CHAR) + 1;
30
31 if(lastSlash>filename) {
32 uprv_strncpy(dirname, filename, (lastSlash - filename));
33 *(dirname + (lastSlash - filename)) = '\0';
34 } else {
35 *dirname = '\0';
36 }
37}
38
39/* go from "/usr/local/include/curses.h" to "curses" */
40void
41get_basename(char *basename,
42 const char *filename)
43{
44 /* strip off any leading directory portions */
45 const char *lastSlash = uprv_strrchr(filename, U_FILE_SEP_CHAR) + 1;
46 char *lastDot;
47
48 if(lastSlash>filename) {
49 uprv_strcpy(basename, lastSlash);
50 } else {
51 uprv_strcpy(basename, filename);
52 }
53
54 /* strip off any suffix */
55 lastDot = uprv_strrchr(basename, '.');
56
57 if(lastDot != NULL) {
58 *lastDot = '\0';
59 }
60}
61
62#define MAX_DIGITS 10
63int32_t
64itostr(char * buffer, int32_t i, uint32_t radix, int32_t pad)
65{
66 int32_t length = 0;
67 int32_t num = 0;
68 int32_t save = i;
69 int digit;
70 int32_t j;
71 char temp;
72
73 /* if i is negative make it positive */
74 if(i<0){
75 i=-i;
76 }
77
78 do{
79 digit = (int)(i % radix);
80 buffer[length++]=(char)(digit<=9?(0x0030+digit):(0x0030+digit+7));
81 i=i/radix;
82 } while(i);
83
84 while (length < pad){
85 buffer[length++] = 0x0030;/*zero padding */
86 }
87
88 /* if i is negative add the negative sign */
89 if(save < 0){
90 buffer[length++]='-';
91 }
92
93 /* null terminate the buffer */
94 if(length<MAX_DIGITS){
95 buffer[length] = 0x0000;
96 }
97
98 num= (pad>=length) ? pad :length;
99
100
101 /* Reverses the string */
102 for (j = 0; j < (num / 2); j++){
103 temp = buffer[(length-1) - j];
104 buffer[(length-1) - j] = buffer[j];
105 buffer[j] = temp;
106 }
107 return length;
108}