C to c++ converter

mpgasiva

Honorable
Jun 8, 2012
1
0
10,510
/*
** File: U2LNumberFormat.c
** Author: David McAteer
** Date: 12-29-98
**
** Purpose: Is to format numbers to the desired format in crystal reports.
** Example: FormatNumber(23.300700, 0) = 23.3007
** FormatNumber(23.32, 0) = 23.32
** FormatNumber(23.324, 1) = 23.32
** FormatNumber(10.00, 0) = 10
** Arguments: NumberFormat(Number to format, Desired format)
** Desired format: 0 - Normal Format, 1 - Currency Format
*/

#include <Windows.h>
#include "UFDll.h"
#include "UFMain.h"
#include "UFUser.h"
#include "UFJob.h"

#include <CType.h>
#include <stdio.h>
#include <stdlib.h>
#include <float.h>

#include "WinTime.h"

ExternC UFError CR_EXPORT NumberFormat (UFParamBlock * ParamBlock);

UFFunctionDefStrings FunctionDefStrings [] =
{
{"String NumberFormat (Number, Number)", NumberFormat},
{0, 0, 0}
};



UFFunctionTemplates FunctionTemplates [] =
{
{"NumberFormat (!,)"},
{NULL}
};


UFFunctionExamples FunctionExamples [] =
{
{"\tNumberFormat (Number, Number)"},
{NULL}
};

char *ErrorTable [] =
{
"no error",
};

void InitJob (struct JobInfo *jobInfo)
{

}

void TermJob (struct JobInfo *jobInfo)
{
}
static void FormatTheNumber (char dest[20], double NumberFormat, double TrimType)
{
char *w, *d, *p;
char decimal[20];
char whole[20];
char rnumber[25];
char hold[20];
char number[20];
char argument[1];

int dec, length2;
long int length, length3;

NumberFormat = NumberFormat/100;

TrimType=TrimType/100;

sprintf(argument, "%.0lf", TrimType);

if(!strcmp(argument,"0"))
{
memset(rnumber, '\0', sizeof(rnumber));
memset(number, '\0', sizeof(number));
memset(decimal, '\0', sizeof(decimal));
memset(hold, '\0', sizeof(hold));
memset(whole, '\0', sizeof(whole));
sprintf(number,"%.8lf", NumberFormat );

d=strchr(number, '.');
strcpy(decimal, d);

w = strtok(number, ".");
strcpy(whole, w);

p = strrchr(decimal, '0'); // Searches for last occurrence of a 0 in decimal number
if(p)
{
while(p)
{
length2 = strlen(p);
length3 = strlen(decimal);
if(!strcmp(p+1, ""))
{
length = strlen(decimal) - strlen(p);

memset(hold, '\0', sizeof(hold));
strncpy(hold,decimal, length); // Truncates ending 0
memset(decimal, '\0', sizeof(decimal));
strcpy(decimal, hold);
if(strlen(decimal) == 1)
{
strcpy(decimal, "");
}
p = strrchr(decimal, '0');
}
else
{
p = NULL;
}
}
strcpy(rnumber, whole);
strcat(rnumber, decimal);
}
else // Decimal Number does not contain a 0
{
if(strlen(decimal) > 1)
{
strcpy(rnumber, whole);
strcat(rnumber, decimal);
}
else
{
strcpy(rnumber, whole);
}
}
}
else if(!strcmp(argument,"1"))
{
memset(rnumber, '\0', sizeof(rnumber));
sprintf(rnumber, "%.2lf", NumberFormat);
}
if(!strcmp(argument,"2"))
{
memset(rnumber, '\0', sizeof(rnumber));
memset(number, '\0', sizeof(number));
memset(decimal, '\0', sizeof(decimal));
memset(hold, '\0', sizeof(hold));
memset(whole, '\0', sizeof(whole));
sprintf(number,"%.4lf", NumberFormat );

d=strchr(number, '.');
strcpy(decimal, d);

w = strtok(number, ".");
strcpy(whole, w);

p = strrchr(decimal, '0'); // Searches for last occurrence of a 0 in decimal number
if(p)
{
dec = strlen(decimal);
while(p && dec > 3)
{
if(!strcmp(p+1, ""))
{
length = strlen(decimal) - strlen(p);

memset(hold, '\0', sizeof(hold));
strncpy(hold,decimal, length); // Truncates ending 0
memset(decimal, '\0', sizeof(decimal));
strcpy(decimal, hold);
if(strlen(decimal) == 1)
{
strcpy(decimal, "");
}
p = strrchr(decimal, '0');
dec = strlen(decimal);
}
else
{
p = NULL;
}
}
strcpy(rnumber, whole);
strcat(rnumber, decimal);
}
else // Decimal Number does not contain a 0
{
strcpy(rnumber, whole);
strcat(rnumber, decimal);
}

}

strcpy(dest, rnumber);
}

ExternC UFError CR_EXPORT NumberFormat(UFParamBlock *ParamBlock)
{
UFParamListElement *FirstParam, *SecondParam;

FirstParam = GetParam (ParamBlock, 1);
SecondParam = GetParam (ParamBlock, 2);

if (FirstParam == NULL || SecondParam == NULL)
return UFNotEnoughParameters;

FormatTheNumber(ParamBlock->ReturnValue.ReturnString,
FirstParam->Parameter.ParamNumber,
SecondParam->Parameter.ParamNumber);

return UFNoError;
}