piscine-rush00/ex00/rush00.c

58 lines
2.2 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* rush00.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jtorrez- <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/03/18 20:15:12 by jtorrez- #+# #+# */
/* Updated: 2023/03/19 04:21:23 by tischmid ### ########.fr */
/* */
/* ************************************************************************** */
void ft_putchar(char c);
void horiz_line(char left, char middle, char right, int width);
const char g_inside = ' ';
// corners specified clockwise, starting from top left
const char g_corners[] = {'o', 'o', 'o', 'o', '\0'};
const char g_horizontal = '-';
const char g_vertical = '|';
// Display a rectangle on standard output, specified by a width (x),
// a height (y), a char array (g_corners) that contains the corners
// in clockwise direction (starting from the top left), a char that
// contains the horizontal character (g_horizontal), a char that contains
// the vertical character (g_vertical), and additionally a char that
// contains the inside ("the filling") character of the rectangle.
void rush(int x, int y)
{
int i;
i = 0;
if (x * y == 0)
return ;
horiz_line(g_corners[0], g_horizontal, g_corners[1], x);
while (i++ < y - 2)
horiz_line(g_vertical, g_inside, g_vertical, x);
if (y > 1)
horiz_line(g_corners[3], g_horizontal, g_corners[2], x);
}
// Display a horizontal line on standard output, specified by a single
// left char, (width - 2) middle chars, and a single right char,
// followed by a newline at the end.
void horiz_line(char left, char middle, char right, int width)
{
int i;
i = 0;
ft_putchar(left);
while (i++ < width - 2)
ft_putchar(middle);
if (width > 1)
ft_putchar(right);
ft_putchar('\n');
}