#include #include #include #include "logo_types.h" /* Loads a logo from disk */ struct logo_info *load_logo_from_disk(char *filename) { struct logo_info *new_logo; int logo_start=0,ascii_logo_start=0; int ascii_size=0,size=0; char temp_st[BUFSIZ]; FILE *fff; new_logo=calloc(1,sizeof(struct logo_info)); if (new_logo==NULL) { printf("Error allocating memory!\n"); return NULL; } fff=fopen(filename,"r"); if (fff==NULL) { printf("Error loading logo: %s\n",filename); return NULL; } new_logo->logo=NULL; new_logo->ascii_logo=NULL; while (!feof(fff)) { fgets(temp_st,BUFSIZ,fff); if (!strncmp(temp_st,"END_LOGO",8)) logo_start=0; if (!strncmp(temp_st,"END_ASCII_LOGO",14)) ascii_logo_start=0; if (logo_start) { size+=strlen(temp_st); if (new_logo->logo==NULL) { new_logo->logo=strdup(temp_st); } else { new_logo->logo=realloc(new_logo->logo,size+1); strncat( new_logo->logo,temp_st,strlen(temp_st)); } new_logo->ysize++; } if (ascii_logo_start) { ascii_size+=strlen(temp_st); if (new_logo->ascii_logo==NULL) { new_logo->ascii_logo=strdup(temp_st); } else { new_logo->ascii_logo=realloc(new_logo->ascii_logo,ascii_size+1); strncat( new_logo->ascii_logo,temp_st,strlen(temp_st)); } new_logo->ascii_ysize++; } if (!strncmp(temp_st,"BEGIN_ASCII_LOGO",16)) ascii_logo_start=1; if (!strncmp(temp_st,"BEGIN_LOGO",10)) logo_start=1; if ( (!ascii_logo_start) && (!logo_start) ) { if (!strncmp(temp_st,"SYSINFO_POSITION",16)) { if (!strncmp(temp_st+17,"bottom",6)) { new_logo->sysinfo_position=SYSINFO_BOTTOM; } if (!strncmp(temp_st+17,"right",5)) { new_logo->sysinfo_position=SYSINFO_RIGHT; } } if (!strncmp(temp_st,"DESCRIPTION_STRING",18)) { new_logo->description=strdup(temp_st+19); new_logo->description[strlen(new_logo->description)-1]=0; } if (!strncmp(temp_st,"NAME",4)) { new_logo->name=strdup(temp_st+5); new_logo->name[strlen(new_logo->name)-1]=0; } } } new_logo->next_logo=NULL; fclose(fff); return new_logo; }