📄 npp_ncl.c
字号:
/*************************************************************************** Copyright Mentor Graphics Corporation 2002 * All Rights Reserved. * * THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS * THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS * SUBJECT TO LICENSE TERMS. **************************************************************************//************************************************************************** FILE NAME VERSION** npp_ncl.c Nucleus Common Library 1.1** DESCRIPTION** This file contains the implementations of NCL_ultoa, NCL_ltoa and* NCL_stricmp.** DATA STRUCTURES** None.** FUNCTIONS** NCL_ultoa* NCL_ltoa* NCL_stricmp* numbertoaWorker** DEPENDENCIES** ncl.h* stdlib.h* ctype.h* convert.h* nucleus.h*************************************************************************/#define NU_NCL_SOURCE_FILE#include "ncl\inc\ncl.h"#include "ncl\inc\stdlib.h"#include "ncl\inc\ctype.h"#include "ncl\inc\convert.h"#include "plus\nucleus.h" /* MMU Support */void numbertoaWorker(unsigned long value, char *destination, int radix, BOOLEAN isNegative){ char* firstDigitLocation = destination; /* Is the value negative? */ if(isNegative) { /* ... yes. Output the minus sign. */ *destination++ = '-'; /* Take the absolute value of the value for the rest of the algorithm. */ value = ((unsigned long) ((long)(((long)0) - ((long)value)))); } /* We will build the number in the reverse order, then swap at end. */ /* So, we need to save a pointer to the first digit's location. */ do { /* Get the remainder after dividing by the radix. */ unsigned remainder = (unsigned)(value % radix); /* Get 'rid' of the remainder, getting the next digit. */ value /= radix; /* Convert the remainder to ascii and store it in the destination. */ /* Is the remainder a 'digit' (non decimal)? */ if( remainder > 9 ) { /* ... yes. Store it as a letter. */ *destination++ = (char)(remainder - 10 + 'a'); } else { /* ... no. Store it as a number. */ *destination++ = (char)(remainder + '0'); } /* Continue to do the above algorithm while the value is positive. */ } while(value > 0); /* We now have the number in the reverse direction, swap it around. */ /* While we are at the end of the string, terminate it and back up. */ *destination-- = '\0'; do { /* Continue to swap until we are at the first digit location. */ /* While we swap, back up the destination pointer and advance */ /* the first digit location. We will essentially meet halfway. */ char swap = *destination; *destination-- = *firstDigitLocation; *firstDigitLocation++ = swap; } while(firstDigitLocation < destination);}/*************************************************************************** FUNCTION** NCL_ultoa** DESCRIPTION** Return the ascii representation of an unsigned long number.** INPUTS** value Value to convert.* destination Character in question.* radix Radix to convert to.** OUTPUTS** char* returns pointer to string representing value**************************************************************************/char* NCL_ultoa(unsigned long value, char *destination, int radix){ /* We no the value is not negative. */ numbertoaWorker(value, destination, radix, NU_FALSE); /* Return pointer to beginning of the stuffed string. */ return( destination );}/*************************************************************************** FUNCTION** NCL_ltoa** DESCRIPTION** Return the ascii representation of a long number.** INPUTS** value Value to convert.* destination Character in question.* radix Radix to convert to.** OUTPUTS** char* returns pointer to string representing value**************************************************************************/char* NCL_ltoa(long value, char* destination, int radix){ /* Do we have a negative number? */ if ((radix == 10) && (value < 0)) { /* ... yes. */ numbertoaWorker((unsigned long)value, destination, radix, NU_TRUE); } else { /* ...no. */ numbertoaWorker((unsigned long)value, destination, radix, NU_FALSE); } /* Return pointer to beginning of the stuffed string. */ return(destination);}/*************************************************************************** FUNCTION** NCL_ltoa** DESCRIPTION** Compares strings until chars are not equal or end of string.* Converts strings to uppercase as it goes.** INPUTS** value Value to convert.* destination Character in question.* radix Radix to convert to.** OUTPUTS** string1 Converted to uppercase* (passed by reference)* string2 Converted to uppercase* (passed by reference)* int Returns pointer to string representing value**************************************************************************/int NCL_stricmp(const char* string1, const char* string2){ /* Keep comparing until the characters are not equal or we are at the */ /* end of one of the strings, converting to upper case along the way. */ while((NCL_toupper(*string1) == NCL_toupper(*string2)) && (*string1)) { /* Advance the pointers. */ string1++; string2++; } /* We are different or at the end. Return the difference of the */ /* contents of the string (cast to int for signed return). */ return((int)((unsigned char)*string1) - (int)((unsigned char)*string2));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -