1 1.1.1.1.10.2 tls /* $NetBSD: rtstr.c,v 1.1.1.1.10.2 2014/08/20 00:04:24 tls Exp $ */ 2 1.1.1.1.10.2 tls 3 1.1.1.1.10.2 tls /*++ 4 1.1.1.1.10.2 tls 5 1.1.1.1.10.2 tls Copyright (c) 1998 Intel Corporation 6 1.1.1.1.10.2 tls 7 1.1.1.1.10.2 tls Module Name: 8 1.1.1.1.10.2 tls 9 1.1.1.1.10.2 tls str.c 10 1.1.1.1.10.2 tls 11 1.1.1.1.10.2 tls Abstract: 12 1.1.1.1.10.2 tls 13 1.1.1.1.10.2 tls String runtime functions 14 1.1.1.1.10.2 tls 15 1.1.1.1.10.2 tls 16 1.1.1.1.10.2 tls Revision History 17 1.1.1.1.10.2 tls 18 1.1.1.1.10.2 tls --*/ 19 1.1.1.1.10.2 tls 20 1.1.1.1.10.2 tls #include "lib.h" 21 1.1.1.1.10.2 tls 22 1.1.1.1.10.2 tls #ifndef __GNUC__ 23 1.1.1.1.10.2 tls #pragma RUNTIME_CODE(RtAcquireLock) 24 1.1.1.1.10.2 tls #endif 25 1.1.1.1.10.2 tls INTN 26 1.1.1.1.10.2 tls RUNTIMEFUNCTION 27 1.1.1.1.10.2 tls RtStrCmp ( 28 1.1.1.1.10.2 tls IN CHAR16 *s1, 29 1.1.1.1.10.2 tls IN CHAR16 *s2 30 1.1.1.1.10.2 tls ) 31 1.1.1.1.10.2 tls // compare strings 32 1.1.1.1.10.2 tls { 33 1.1.1.1.10.2 tls while (*s1) { 34 1.1.1.1.10.2 tls if (*s1 != *s2) { 35 1.1.1.1.10.2 tls break; 36 1.1.1.1.10.2 tls } 37 1.1.1.1.10.2 tls 38 1.1.1.1.10.2 tls s1 += 1; 39 1.1.1.1.10.2 tls s2 += 1; 40 1.1.1.1.10.2 tls } 41 1.1.1.1.10.2 tls 42 1.1.1.1.10.2 tls return *s1 - *s2; 43 1.1.1.1.10.2 tls } 44 1.1.1.1.10.2 tls 45 1.1.1.1.10.2 tls #ifndef __GNUC__ 46 1.1.1.1.10.2 tls #pragma RUNTIME_CODE(RtStrCpy) 47 1.1.1.1.10.2 tls #endif 48 1.1.1.1.10.2 tls VOID 49 1.1.1.1.10.2 tls RUNTIMEFUNCTION 50 1.1.1.1.10.2 tls RtStrCpy ( 51 1.1.1.1.10.2 tls IN CHAR16 *Dest, 52 1.1.1.1.10.2 tls IN CHAR16 *Src 53 1.1.1.1.10.2 tls ) 54 1.1.1.1.10.2 tls // copy strings 55 1.1.1.1.10.2 tls { 56 1.1.1.1.10.2 tls while (*Src) { 57 1.1.1.1.10.2 tls *(Dest++) = *(Src++); 58 1.1.1.1.10.2 tls } 59 1.1.1.1.10.2 tls *Dest = 0; 60 1.1.1.1.10.2 tls } 61 1.1.1.1.10.2 tls 62 1.1.1.1.10.2 tls #ifndef __GNUC__ 63 1.1.1.1.10.2 tls #pragma RUNTIME_CODE(RtStrCat) 64 1.1.1.1.10.2 tls #endif 65 1.1.1.1.10.2 tls VOID 66 1.1.1.1.10.2 tls RUNTIMEFUNCTION 67 1.1.1.1.10.2 tls RtStrCat ( 68 1.1.1.1.10.2 tls IN CHAR16 *Dest, 69 1.1.1.1.10.2 tls IN CHAR16 *Src 70 1.1.1.1.10.2 tls ) 71 1.1.1.1.10.2 tls { 72 1.1.1.1.10.2 tls RtStrCpy(Dest+StrLen(Dest), Src); 73 1.1.1.1.10.2 tls } 74 1.1.1.1.10.2 tls 75 1.1.1.1.10.2 tls #ifndef __GNUC__ 76 1.1.1.1.10.2 tls #pragma RUNTIME_CODE(RtStrLen) 77 1.1.1.1.10.2 tls #endif 78 1.1.1.1.10.2 tls UINTN 79 1.1.1.1.10.2 tls RUNTIMEFUNCTION 80 1.1.1.1.10.2 tls RtStrLen ( 81 1.1.1.1.10.2 tls IN CHAR16 *s1 82 1.1.1.1.10.2 tls ) 83 1.1.1.1.10.2 tls // string length 84 1.1.1.1.10.2 tls { 85 1.1.1.1.10.2 tls UINTN len; 86 1.1.1.1.10.2 tls 87 1.1.1.1.10.2 tls for (len=0; *s1; s1+=1, len+=1) ; 88 1.1.1.1.10.2 tls return len; 89 1.1.1.1.10.2 tls } 90 1.1.1.1.10.2 tls 91 1.1.1.1.10.2 tls #ifndef __GNUC__ 92 1.1.1.1.10.2 tls #pragma RUNTIME_CODE(RtStrSize) 93 1.1.1.1.10.2 tls #endif 94 1.1.1.1.10.2 tls UINTN 95 1.1.1.1.10.2 tls RUNTIMEFUNCTION 96 1.1.1.1.10.2 tls RtStrSize ( 97 1.1.1.1.10.2 tls IN CHAR16 *s1 98 1.1.1.1.10.2 tls ) 99 1.1.1.1.10.2 tls // string size 100 1.1.1.1.10.2 tls { 101 1.1.1.1.10.2 tls UINTN len; 102 1.1.1.1.10.2 tls 103 1.1.1.1.10.2 tls for (len=0; *s1; s1+=1, len+=1) ; 104 1.1.1.1.10.2 tls return (len + 1) * sizeof(CHAR16); 105 1.1.1.1.10.2 tls } 106 1.1.1.1.10.2 tls 107 1.1.1.1.10.2 tls #ifndef __GNUC__ 108 1.1.1.1.10.2 tls #pragma RUNTIME_CODE(RtBCDtoDecimal) 109 1.1.1.1.10.2 tls #endif 110 1.1.1.1.10.2 tls UINT8 111 1.1.1.1.10.2 tls RUNTIMEFUNCTION 112 1.1.1.1.10.2 tls RtBCDtoDecimal( 113 1.1.1.1.10.2 tls IN UINT8 BcdValue 114 1.1.1.1.10.2 tls ) 115 1.1.1.1.10.2 tls { 116 1.1.1.1.10.2 tls UINTN High, Low; 117 1.1.1.1.10.2 tls 118 1.1.1.1.10.2 tls High = BcdValue >> 4; 119 1.1.1.1.10.2 tls Low = BcdValue - (High << 4); 120 1.1.1.1.10.2 tls 121 1.1.1.1.10.2 tls return ((UINT8)(Low + (High * 10))); 122 1.1.1.1.10.2 tls } 123 1.1.1.1.10.2 tls 124 1.1.1.1.10.2 tls 125 1.1.1.1.10.2 tls #ifndef __GNUC__ 126 1.1.1.1.10.2 tls #pragma RUNTIME_CODE(RtDecimaltoBCD) 127 1.1.1.1.10.2 tls #endif 128 1.1.1.1.10.2 tls UINT8 129 1.1.1.1.10.2 tls RUNTIMEFUNCTION 130 1.1.1.1.10.2 tls RtDecimaltoBCD ( 131 1.1.1.1.10.2 tls IN UINT8 DecValue 132 1.1.1.1.10.2 tls ) 133 1.1.1.1.10.2 tls { 134 1.1.1.1.10.2 tls UINTN High, Low; 135 1.1.1.1.10.2 tls 136 1.1.1.1.10.2 tls High = DecValue / 10; 137 1.1.1.1.10.2 tls Low = DecValue - (High * 10); 138 1.1.1.1.10.2 tls 139 1.1.1.1.10.2 tls return ((UINT8)(Low + (High << 4))); 140 1.1.1.1.10.2 tls } 141 1.1.1.1.10.2 tls 142 1.1.1.1.10.2 tls 143