Domácí úkol č.1

enumdny.c
// Encoding: ISO-8859-2
 
// enumdny.c
// Řešení IJC-DU1, příklad a)
// Autor: Jan Kaláb, FIT
// Přeloženo gcc 4.1.1
 
#include "error.h"
#include "enumdny.h"
 
#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
const char *DayShort [] = {"", "po", "út", "st", "čt", "pá", "so", "ne"};
const char *DayShortASCII [] = {"", "po", "ut", "st", "ct", "pa", "so", "ne"};
const char *DayLong [] = {"", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota", "neděle"};
const char *DayLongASCII [] = {"", "pondeli", "utery", "streda", "ctvrtek", "patek", "sobota", "nedele"};
 
void JeToDen (enum dny den) {
  if (den < Po || den > Ne)
  Error("PrintDay: hodnota %d mimo rozsah\n", den);
}
 
void PrintDayShortASCII (enum dny den) {
  JeToDen(den);
  printf ("%c%s", toupper(DayShortASCII[den][0]), DayShortASCII[den]+1);
}
 
void PrintDayLongASCII (enum dny den) {
  JeToDen(den);
  printf ("%c%s", toupper(DayLongASCII[den][0]), DayLongASCII[den]+1);
}
 
void PrintDayShort(enum dny den) {
  JeToDen(den);
  printf("%c%s", toupper(DayShort[den][0]), DayShort[den]+1);
}
 
void PrintDayLong(enum dny den) {
  JeToDen(den);
  printf("%c%s", toupper(DayLong[den][0]), DayLong[den]+1);
}
 
enum dny ReadDay (void) {
//  printf("ReadDay\n");
 
  char slovo[100]; //100 znaku by mohlo stacit
  int i=0;
  int znak;
 
  while ((znak=getchar())!=EOF) {
    if (znak==EOF) return 0;
    if (!isalpha(znak)) continue; //zahodime blbosti
    if (i < sizeof(slovo)-1) slovo[i++] = tolower(znak);
  }
  slovo[i++] = '\0'; //ukonceni retezce
//  printf ("Precetl jsem: %s\n",slovo);
 
  for (enum dny i = Po; i <= Ne; i++) {
    if (strcmp(slovo, DayShortASCII[i])==0) return i;
    if (strcmp(slovo, DayShort[i])==0) return i;
    if (strcmp(slovo, DayLongASCII[i])==0) return i;
    if (strcmp(slovo, DayLong[i])==0) return i;
  }
  return 0;
}
enumdny.h
// enumdny.h
// Řešení IJC-DU1, příklad a)
// Autor: Jan Kaláb, FIT
// Přeloženo gcc 4.1.1
 
enum dny {Po=1, Ut, St, Ct, Pa, So, Ne};
 
void PrintDayShort (enum dny den);
void PrintDayShortASCII (enum dny den);
void PrintDayLong (enum dny den);
void PrintDayLongASCII (enum dny den);
 
enum dny ReadDay(void);
enumtest.c
// enumtest.c
// Řešení IJC-DU1, příklad a)
// Autor: Jan Kaláb, FIT
// Přeloženo gcc 4.1.1
 
#include "error.h"
#include "enumdny.h"
 
#include <stdio.h>
#include <locale.h>
 
int main(void) { /* test funkcí - NEMĚNIT!!! */
  enum dny den;
  char *l = setlocale(LC_ALL,"cs_CZ");
  if(l==NULL)
      Error("setlocale: Nelze nastavit českou lokalizaci\n");
  den = ReadDay(); // čte Po, Pondělí, Pondeli, PONdeli, ....
  PrintDayShort(den);        // tiskne Po
  printf("\n");
  PrintDayShortASCII(den);   // tiskne Po
  printf("\n");
  PrintDayLong(den);         // tiskne Pondělí
  printf("\n");
  PrintDayLongASCII(den);    // tiskne Pondeli
  printf("\n\n");
  for( den = Po; den < 10; den++ ) { /* úmyslná chyba */
    PrintDayShortASCII(den);
    printf("\n");
  }
  return 0;
}
error.cz
// error.c
// Řešení IJC-DU1, příklad a)
// Autor: Jan Kaláb, FIT
// Přeloženo gcc 4.1.1
 
#include "error.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
 
void Error (const char *fmt, ...) {
  va_list parametry;
  va_start (parametry, fmt);
  fprintf (stderr, "CHYBA: ");
  vfprintf (stderr, fmt, parametry);
  fprintf (stderr, "\n");
  va_end (parametry);
  exit (1);
}     
error.h
// error.h
// Řešení IJC-DU1, příklad a)
// Autor: Jan Kaláb, FIT
// Přeloženo gcc 4.1.1
 
void Error (const char *fmt, ...);
Makefile
CC = gcc
CFLAGS = -O2 -std=c99 -pedantic -Wall 
PROGS = enumtest
LOGIN = xkalab00
ARCHIVER = zip
 
all: $(PROGS)
 
enumtest: enumtest.o error.o enumdny.o
 
enumdny.o: enumdny.c error.h enumdny.h
enumtest.o: enumtest.c error.h enumdny.h
error.o: error.c error.h
 
clean:
	-rm -f *.o $(PROGS)
 
pack:
	-$(ARCHIVER) $(LOGIN).zip *.c *.h Makefile