Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Soubor: proj1-kostra.c
- * Datum: 2010/08/12
- * Autor: Kačer Donald, donald@fit.vutbr.cz
- * Projekt: Jednoduchá komprese textu, projekt č. 1 pro předmět IZP
- * Popis: Program provádí... (doplňte)
- */
- // // // //
- // V TOMTO SOUBORU MŮŽETE ZMĚNIT COKOLI VÁS NAPADNE.
- // TENTO SOUBOR VŮBEC NEMUSÍTE POUŽÍT.
- // // // //
- // práce se vstupem/výstupem
- #include <stdio.h>
- // obecné funkce jazyka C
- #include <stdlib.h>
- // kvůli funkci strcmp
- #include <string.h>
- // testování znaků - isalpha, isdigit, atd.
- #include <ctype.h>
- // pro testování programu
- // #include <assert.h>
- // limity číselných typů
- // #include <limits.h>
- // typ bool, konstanty true, false
- #include <stdbool.h>
- // proměnná errno
- // #include <errno.h>
- /** Kódy chyb programu */
- enum tecodes
- {
- EOK = 0, /**< Bez chyby */
- ECLWRONG, /**< Chybný příkazový řádek. */
- // sem můžete přidat vlastní chybové kódy
- EUNKNOWN, /**< Neznámá chyba */
- };
- /** Stavové kódy programu */
- enum tstates
- {
- CHELP, /**< Nápověda */
- CCOMP, /**< Komprimovat. */
- CDECOMP, /**< Dekomprimovat. */
- };
- /** Chybová hlášení odpovídající chybovým kódům. */
- const char *ECODEMSG[] =
- {
- /* EOK */
- "Vše v pořádku.\n",
- /* ECLWRONG */
- "Chybné parametry příkazového řádku!\n",
- // sem můžete přidat vlastní chybová hlášení
- "Nastala nepředvídaná chyba! Vypněte počítač a rychle utečte.\n",
- };
- const char *HELPMSG =
- "Program Jednoduchá komprese - vzorová implementace.\n"
- "Autor: Kačer Donald (c) 2010\n"
- "Program provádí...\n"
- "Použití: proj1 -h\n"
- " proj1 -c N\n"
- " proj1 -d N\n"
- "Popis parametrů:\n"
- // sem doplňte svůj popis
- " [...]\n";
- char a
- 1111 1111
- -1
- /**
- * Struktura obsahující hodnoty parametrů příkazové řádky.
- */
- typedef struct params
- {
- unsigned int N; /**< Hodnota N z příkazové řádky. */
- int ecode; /**< Chybový kód programu, odpovídá výčtu tecodes. */
- int state; /**< Stavový kód programu, odpovídá výčtu tstates. */
- } TParams;
- /**
- * Vytiskne hlášení odpovídající chybovému kódu.
- * @param ecode kód chyby programu
- */
- void printECode(int ecode)
- {
- if (ecode < EOK || ecode > EUNKNOWN)
- { ecode = EUNKNOWN; }
- fprintf(stderr, "%s", ECODEMSG[ecode]);
- }
- unsigned int getN(char * text, int * PChyba)
- {
- unsigned int val = strtoul(str, &endptr, base);
- /* Check for various possible errors */
- if ((errno == ERANGE && (val == ULONG_MAX || val == 1))
- || (errno != 0 && val == 0)) {
- *PChyba=ERANGE;
- return 0;
- }
- if (endptr == str) {
- fprintf(stderr, "No digits were found\n");
- exit(EXIT_FAILURE);
- }
- /* If we got here, strtol() successfully parsed a number */
- printf("strtol() returned %ld\n", val);
- if (*endptr != '\0') /* Not necessarily an error... */
- {
- *PChyba= ... ;
- return 0;
- }
- *PChyba=EOK;
- return val;
- }
- /**
- * Zpracuje argumenty příkazového řádku a vrátí je ve struktuře TParams.
- * Pokud je formát argumentů chybný, ukončí program s chybovým kódem.
- * @param argc Počet argumentů.
- * @param argv Pole textových řetězců s argumenty.
- * @return Vrací analyzované argumenty příkazového řádku.
- */
- TParams getParams(int argc, char *argv[])
- {
- TParams result =
- { // inicializace struktury
- .N = 0,
- .ecode = EOK,
- .state = CCOMP,
- };
- /*
- * Zastaralý způsob inicializace - nepřehledný, ale funguje i na starých
- * překladačích:
- * TParams result = {0, EOK, CCOMP};
- */
- if (argc == 2 && strcmp("-h", argv[1]) == 0)
- { // tisk nápovědy
- result.state = CHELP;
- }
- else if (argc == 3)
- { // dva parametry
- if( strcmp("-c",argv[1])==0)
- {
- int ecode;
- result.N=getN(argv[2], &ecode);
- result.ecode=ecode;
- result.state=CCOMPRESS;
- }
- else if ( )
- else {
- }
- //
- // testování parametrů příkazového řádku
- // a nastavení result.ecode a result.state
- // na správnou hodnotu
- //
- // převod textové reprezentace čísla na číselnou hodnotu
- // pomocí systémových funkcí a ošetření všech problémů,
- // které mohou nastat
- //
- }
- else
- { // příliš mnoho parametrů
- result.ecode = ECLWRONG;
- }
- return result;
- }
- /////////////////////////////////////////////////////////////////
- /**
- * Hlavní program.
- */
- int main(int argc, char *argv[])
- {
- TParams params = getParams(argc, argv);
- if (params.ecode != EOK)
- { // něco nestandardního
- printECode(params.ecode);
- return EXIT_FAILURE;
- }
- if (params.state == CHELP)
- {
- printf("%s", HELPMSG);
- return EXIT_SUCCESS;
- }
- //
- // Sem patří volání funkcí, které zajistí zadanou funkčnost a ošetření
- // chybových stavů.
- //
- if (params.state == COMP)
- {
- errcode = compress(params.N);
- if(errcode != EOK)
- {
- printEcode(errcode);
- return EXIT_FAILURE;
- }
- }
- // else ...
- return EXIT_SUCCESS;
- }
- /* konec proj1-kostra.c */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement