//
// main.c
// 15.9-6
//
// Created by cjm on 2024/2/5.
//
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
struct font_style{
unsigned int font_ID : 8;
unsigned int font_size : 7;
unsigned int alignment : 2;//如果这里是int类型,因位有一位是正负号,2位便表示不了2.
_Bool bold : 1;
_Bool italics : 1;
_Bool underline : 1;
};
void show_menu(struct font_style font_n);
int main()
{
char ch;
struct font_style font_n={1,12,1,0,0,0};
int id,size;
char alig;
show_menu(font_n);
while(scanf("%c",&ch)!=EOF&&ch!='q')
{
while(getchar()!='\n')
continue;
switch(ch)
{
case 'f':
puts("Enter font ID(0-255)");
scanf("%d", &id);
font_n.font_ID=id;
show_menu(font_n);
break;
case 's':puts("Enter font size(0-127)");
scanf("%d",&size);
font_n.font_size=size;
show_menu(font_n);
break;
case 'a':
puts("Select alignment:\nl) left\tc)center\tr)right\n");
scanf("%c",&alig);
while(getchar()!='\n')
continue;
if(alig=='l')
font_n.alignment=1;
else if(alig=='r')
font_n.alignment = 2;
else if(alig=='c')
font_n.alignment=0;
show_menu(font_n);
break;
case 'b':
font_n.bold=~(font_n.bold);
show_menu(font_n);
break;
case 'i':
font_n.italics=~(font_n.italics);
show_menu(font_n);
break;
case 'u':
font_n.underline=~(font_n.underline);
show_menu(font_n);
break;
default :;break;
}
while(getchar()!='\n')
continue;
}
puts("Bye!\n");
return 0;
}
void show_menu(struct font_style font_n)
{
char ali[7];
if(font_n.alignment==0)
strcpy(ali,"center");
else if (font_n.alignment==1)
strcpy(ali,"left");
else if(font_n.alignment==2)
strcpy(ali,"right");
printf("ID SIZE ALIGNMENT B I U\n");
printf("%u\t%u\t%s\t%s\t%s\t%s \n\n",font_n.font_ID,font_n.font_size,ali,font_n.bold == true ?"on":"off",font_n.italics == true ?"on":"off",font_n.underline == true?"on":"off");
printf("f)change font\ts)change size\ta)change alignment\nb)toggle bold\ti)toggle italic\tu)toggle underline\nq)quit\n");
}