netscape-revival
lib/layout/bullet.c
#include "xp.h"
#include "layout.h"
#ifdef PROFILE
#pragma profile on
#endif
PA_Block
lo_ValueToAlpha(int32 value, Bool large, intn *len_ptr)
{
int i;
char str[20];
char str2[22];
intn pos, cnt;
PA_Block buff;
char *bptr;
char base;
*len_ptr = 0;
if (large != FALSE)
{
base = 'A';
}
else
{
base = 'a';
}
for (i=0; i<20; i++)
{
str[i] = (char)0;
}
while (value > 26)
{
pos = 1;
str[pos] = (char)((int)str[pos] + 1);
cnt = (int)str[pos];
while ((cnt > 26)&&(pos < 19))
{
str[pos] = (char)0;
pos++;
str[pos] = (char)((int)str[pos] + 1);
cnt = (int)str[pos];
}
if ((pos == 20)&&(cnt > 26))
{
str[pos] = (char)0;
}
value -= 26;
}
str[0] = (char)value;
pos = 0;
while ((int)str[pos] != 0)
{
pos++;
}
if (pos == 0)
{
XP_STRCPY(str2, " .");
}
else
{
cnt = 0;
for (i=pos; i>0; i--)
{
str2[cnt] = (char)(base + (int)str[i - 1] - 1);
cnt++;
}
str2[cnt] = '.';
str2[cnt + 1] = '\0';
}
*len_ptr = XP_STRLEN(str2);
buff = PA_ALLOC(*len_ptr + 1);
if (buff != NULL)
{
PA_LOCK(bptr, char *, buff);
XP_STRCPY(bptr, str2);
PA_UNLOCK(buff);
}
return(buff);
}
static char Fives[2][5] = {"vld ", "VLD "};
static char Ones[2][5] = {"ixcm", "IXCM"};
PA_Block
lo_ValueToRoman(int32 value, Bool large, intn *len_ptr)
{
int i, j;
int indx[4];
char str[4][6];
char *fives;
char *ones;
char str2[22];
char *ptr;
PA_Block buff;
char *bptr;
*len_ptr = 0;
if (large != FALSE)
{
fives = Fives[1];
ones = Ones[1];
}
else
{
fives = Fives[0];
ones = Ones[0];
}
if (value >= 4000)
{
value = value % 3999;
value++;
}
for (i=0; i<4; i++)
{
indx[i] = (int) value % 10;
value = value / 10;
}
for (i=0; i<4; i++)
{
if (indx[i] >= 5)
{
indx[i] -= 5;
str[i][0] = fives[i];
}
else
{
str[i][0] = ' ';
}
if (indx[i] == 4)
{
if (str[i][0] == ' ')
{
str[i][1] = fives[i];
}
else
{
str[i][1] = ones[i + 1];
}
str[i][0] = ones[i];
str[i][2] = '\0';
}
else
{
for (j=0; j<indx[i]; j++)
{
str[i][j + 1] = ones[i];
}
str[i][indx[i] + 1] = '\0';
}
}
XP_STRCPY(str2, "");
for (i=3; i>=0; i--)
{
ptr = str[i];
if (*ptr == ' ')
{
ptr++;
}
XP_STRCAT(str2, ptr);
}
XP_STRCAT(str2, ".");
*len_ptr = XP_STRLEN(str2);
buff = PA_ALLOC(*len_ptr + 1);
if (buff != NULL)
{
PA_LOCK(bptr, char *, buff);
XP_STRCPY(bptr, str2);
PA_UNLOCK(buff);
}
return(buff);
}
#ifdef PROFILE
#pragma profile off
#endif