#include "main.h"

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* PRINT UNSIGNED NUMBER \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_unsigned - Prints an unsigned number
 \* @types: List a of arguments
 \* @buffer: Buffer array to handle print
 \* @flags: Calculates active flags
 \* @width: get width
 \* @precision: Precision specification
 \* @size: Size specifier
 \* Return: Number of chars printed.
 \*/
int print\_unsigned(va\_list types, char buffer[],
 int flags, int width, int precision, int size)
{
 int i = BUFF\_SIZE - 2;
 unsigned long int num = va\_arg(types, unsigned long int);

 num = convert\_size\_unsgnd(num, size);

 if (num == 0)
 buffer[i--] = '0';

 buffer[BUFF\_SIZE - 1] = '\0';

 while (num > 0)
 {
 buffer[i--] = (num % 10) + '0';
 num /= 10;
 }

 i++;

 return (write\_unsgnd(0, i, buffer, flags, width, precision, size));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\* PRINT UNSIGNED NUMBER IN OCTAL \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_octal - Prints an unsigned number in octal notation
 \* @types: Lista of arguments
 \* @buffer: Buffer array to handle print
 \* @flags: Calculates active flags
 \* @width: get width
 \* @precision: Precision specification
 \* @size: Size specifier
 \* Return: Number of chars printed
 \*/
int print\_octal(va\_list types, char buffer[],
 int flags, int width, int precision, int size)
{

 int i = BUFF\_SIZE - 2;
 unsigned long int num = va\_arg(types, unsigned long int);
 unsigned long int init\_num = num;

 UNUSED(width);

 num = convert\_size\_unsgnd(num, size);

 if (num == 0)
 buffer[i--] = '0';

 buffer[BUFF\_SIZE - 1] = '\0';

 while (num > 0)
 {
 buffer[i--] = (num % 8) + '0';
 num /= 8;
 }

 if (flags & F\_HASH && init\_num != 0)
 buffer[i--] = '0';

 i++;

 return (write\_unsgnd(0, i, buffer, flags, width, precision, size));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\*\* PRINT UNSIGNED NUMBER IN HEXADECIMAL \*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_hexadecimal - Prints an unsigned number in hexadecimal notation
 \* @types: Lista of arguments
 \* @buffer: Buffer array to handle print
 \* @flags: Calculates active flags
 \* @width: get width
 \* @precision: Precision specification
 \* @size: Size specifier
 \* Return: Number of chars printed
 \*/
int print\_hexadecimal(va\_list types, char buffer[],
 int flags, int width, int precision, int size)
{
 return (print\_hexa(types, "0123456789abcdef", buffer,
 flags, 'x', width, precision, size));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\* PRINT UNSIGNED NUMBER IN UPPER HEXADECIMAL \*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_hexa\_upper - Prints an unsigned number in upper hexadecimal notation
 \* @types: Lista of arguments
 \* @buffer: Buffer array to handle print
 \* @flags: Calculates active flags
 \* @width: get width
 \* @precision: Precision specification
 \* @size: Size specifier
 \* Return: Number of chars printed
 \*/
int print\_hexa\_upper(va\_list types, char buffer[],
 int flags, int width, int precision, int size)
{
 return (print\_hexa(types, "0123456789ABCDEF", buffer,
 flags, 'X', width, precision, size));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\*\* PRINT HEXX NUM IN LOWER OR UPPER \*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_hexa - Prints a hexadecimal number in lower or upper
 \* @types: Lista of arguments
 \* @map\_to: Array of values to map the number to
 \* @buffer: Buffer array to handle print
 \* @flags: Calculates active flags
 \* @flag\_ch: Calculates active flags
 \* @width: get width
 \* @precision: Precision specification
 \* @size: Size specifier
 \* @size: Size specification
 \* Return: Number of chars printed
 \*/
int print\_hexa(va\_list types, char map\_to[], char buffer[],
 int flags, char flag\_ch, int width, int precision, int size)
{
 int i = BUFF\_SIZE - 2;
 unsigned long int num = va\_arg(types, unsigned long int);
 unsigned long int init\_num = num;

 UNUSED(width);

 num = convert\_size\_unsgnd(num, size);

 if (num == 0)
 buffer[i--] = '0';

 buffer[BUFF\_SIZE - 1] = '\0';

 while (num > 0)
 {
 buffer[i--] = map\_to[num % 16];
 num /= 16;
 }

 if (flags & F\_HASH && init\_num != 0)
 {
 buffer[i--] = flag\_ch;
 buffer[i--] = '0';
 }

 i++;

 return (write\_unsgnd(0, i, buffer, flags, width, precision, size));
}
include "main.h"

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* PRINT UNSIGNED NUMBER \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_unsigned - 부호 없는 숫자를 인쇄합니다.
 \* @types: 인자를 나열합니다
 \* @버퍼: 인쇄를 처리할 버퍼 배열
 \* @flags: 활성 플래그를 계산합니다
 \* @width: 너비 가져오기
 \* @precision: 정밀도 사양
 \* @size: 크기 지정자
 \* 반환: 인쇄된 문자 수입니다.
 \*/
int print\_unsigned(va\_list types, char buffer[],
 int 플래그, int 너비, int 정밀도, int 크기)
{
 int i = BUFF\_SIZE - 2;
 부호 없는 긴 int num = va\_arg(types, 부호 없는 긴 int);

 num = convert\_size\_unsgnd(num, size);

 if (num == 0)
 buffer[i--] = '0';

 buffer[BUFF\_SIZE - 1] = '\0';

 while (num > 0)
 {
 buffer[i--] = (num % 10) + '0';
 num /= 10;
 }

 i++;

 반환 (쓰기\_unsgnd(0, i, 버퍼, 플래그, 너비, 정밀도, 크기));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\*\* 부호 없는 숫자를 8진수로 인쇄 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_octal - 부호 없는 숫자를 8진수 표기법으로 인쇄합니다.
 \* @types: 인자 목록
 \* @버퍼: 인쇄를 처리할 버퍼 배열
 \* @flags: 활성 플래그를 계산합니다
 \* @width: 너비 가져오기
 \* @precision: 정밀도 사양
 \* @size: 크기 지정자
 \* 반환: 인쇄된 문자 수
 \*/
int print\_옥탈(VA\_리스트 타입, 문자 버퍼[],
 int 플래그, int 너비, int 정밀도, int 크기)
{

 int i = BUFF\_SIZE - 2;
 부호 없는 긴 int num = va\_arg(types, 부호 없는 긴 int);
 부호없는 긴 int init\_num = num;

 UNUSED(width);

 num = convert\_size\_unsgnd(num, size);

 if (num == 0)
 buffer[i--] = '0';

 buffer[BUFF\_SIZE - 1] = '\0';

 while (num > 0)
 {
 buffer[i--] = (num % 8) + '0';
 num /= 8;
 }

 if (flags & F\_HASH && init\_num != 0)
 buffer[i--] = '0';

 i++;

 return (write\_unsgnd(0, i, buffer, flags, width, precision, size));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\*\* 부호 없는 숫자를 16진수로 인쇄 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_hexadecimal - 부호 없는 숫자를 16진수 표기법으로 인쇄합니다.
 \* @타입: 인자 목록
 \* @버퍼: 인쇄를 처리할 버퍼 배열
 \* @flags: 활성 플래그를 계산합니다
 \* @width: 너비 가져오기
 \* @precision: 정밀도 사양
 \* @size: 크기 지정자
 \* 반환: 인쇄된 문자 수
 \*/
int print\_16진수(VA\_리스트 타입, 문자 버퍼[],
 int 플래그, int 너비, int 정밀도, int 크기)
{
 return (print\_hexa(types, "0123456789abcdef", buffer,
 flags, 'x', width, precision, size));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\* 부호 없는 숫자를 상위 16진수로 인쇄 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*
 \* print\_hexa\_upper - 부호 없는 숫자를 16진수 상위 표기법으로 인쇄합니다.
 \* @타입: 인자 목록
 \* @버퍼: 인쇄를 처리할 버퍼 배열
 \* @flags: 활성 플래그를 계산합니다
 \* @width: 너비 가져오기
 \* @precision: 정밀도 사양
 \* @size: 크기 지정자
 \* 반환: 인쇄된 문자 수
 \*/
int print\_hexa\_upper(va\_list types, char buffer[],
 int 플래그, int 너비, int 정밀도, int 크기)
{
 return (print\_hexa(types, "0123456789ABCDEF", buffer,
 flags, 'X', width, precision, size));
}

/\*\*\*\*\*\*\*\*\*\*\*\*\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ 인쇄 헥스 숫자를 하위 또는 상위 \*\*\*\*\*\*/로 인쇄합니다.
/\*\*
 \* print\_hexa - 16진수를 소문자 또는 대문자로 인쇄합니다.
 \* @타입: 인자 목록
 \* @map\_to: 숫자를 매핑할 값의 배열
 \* @버퍼: 인쇄를 처리할 버퍼 배열
 \* @flags: 활성 플래그를 계산합니다
 \* @flag\_ch: 활성 플래그를 계산합니다
 \* @width: 너비 가져오기
 \* @precision: 정밀도 사양
 \* @size: 크기 지정자
 \* @size: 크기 지정자
 \* 반환: 인쇄된 문자 수
 \*/
int print\_hexa(va\_list types, char map\_to[], char buffer[],
 int 플래그, char 플래그\_ch, int 너비, int 정밀도, int 크기)
{
 int i = BUFF\_SIZE - 2;
 부호 없는 긴 int num = va\_arg(types, 부호 없는 긴 int);
 부호없는 긴 int init\_num = num;

 UNUSED(width);

 num = convert\_size\_unsgnd(num, size);

 if (num == 0)
 buffer[i--] = '0';

 buffer[BUFF\_SIZE - 1] = '\0';

 while (num > 0)
 {
 buffer[i--] = map\_to[num % 16];
 num /= 16;
 }

 if (flags & F\_HASH && init\_num != 0)
 {
 buffer[i--] = flag\_ch;
 buffer[i--] = '0';
 }

 i++;

 반환 (쓰기\_unsgnd(0, i, 버퍼, 플래그, 너비, 정밀도, 크기));
}