Dokumentace souboru cqparse.c

#include "cqparse.h"
#include "cqtools.h"
#include <assert.h>
#include <string.h>

Funkce

static int skipLine (FILE *f)
int readLine (FILE *f, int *nLines, char line[], int max)
int readLines (FILE *f, int *nLines, char *firstLine, char **lines, int maxLines)
bool testAnswers (char *answers)
TErrorCode readTest (FILE *f, TTestData *data)

Proměnné

const char C_COMM = '#'
const char C_STAR = '*'
const char * NOERR
const char * WARN_LONGLINE
const char * ERR_TITLE
const char * ERR_QUEST
const char * ERR_VAR
const char * ERR_VARORDER
const char * ERR_ANSWTIME
const char * ERR_EXPL
const char * ERR_SEP
const char * ERR_EOF
const char * ERR_ONLINE

Dokumentace funkcí

int readLine ( FILE *  f,
int *  nLines,
char  line[],
int  max 
)

Naète ze souboru dal¹í nezakomentovaný øádek. Pokud narazí na konec souboru, vrací EOF. Parametr line musí ukazovat na správnì alokovanou pamì». Po pøeètení øádku bude ukazatel v souboru pøed prvním znakem dal¹ího øádku. Na konci naèteného øádku bude v¾dy znak "\n".

Parametry:
f Ukazatel na popisovaè souboru.
nLines Poèet pøeètených øádkù. Funkce zvý¹í toto èíslo o poèet øádkù, které naète.
line Buffer, do nìj¾ se naètou data. Je nutné, aby v nìm byl alokován dostatek pamìti. Pøeètený øádek bude v¾dy konèit sekvencí "\n\0". Obsah tohoto bufferu je hlavním výsledkem volání funkce.
max Rozmìr bufferu line. Musí to být minimálnì 3, aby bylo mo¾né i za øádek, který je del¹í doplnit "\n\0".
Návratová hodnota:
Vrací EOF, pokud bìhem ètení narazí na konec souboru nebo první znak pøeèteného øádku.

Odkazuje se na C_COMM a skipLine().

Používá se v readLines() a readTest().

int readLines ( FILE *  f,
int *  nLines,
char *  firstLine,
char **  lines,
int  maxLines 
)

Naète ze souboru maximálnì maxLines øádkù. Za naètenými øádky oèekává øádek zaèínající hvìzdièkou, který se naète, ale neulo¾í. Do parametru lines se ulo¾í øetìzec slepený z naètených øádkù, je¾ v nìm budou oddìleny znakem konce øádku "\n". Tato funkce alokuje pamì»!

Vrací EOF, pokud bìhem ètení narazí na konec souboru nebo první znak posledního naèteného øádku (slou¾í pro rozli¹ení jestli se naèetl øádek s hvìzdièkou nebo ne). Pokud vrátí znak *, je v¹e v poøádku, v ostatních pøípadech je nìco ¹patnì.

Parametry:
f Ukazatel na popisovaè souboru.
nLines Poèet pøeètených øádkù. Funkce zvý¹í toto èíslo o poèet øádkù, které naète.
firstLine první naètený øádek, bude zkopírován na první místo výsledného øetìzce.
lines Ukazatel na textový øetìzec. Tato funkce sama alokuje pamì», tak¾e parametr by pøi volání nemìl ukazovat na ¾ádnou alokovanou pamì».
maxLines Maximální poèet øádkù, které je mo¾né naèíst.
Návratová hodnota:
Vrací první znak posledního naèteného øádku nebo EOF, pokud pøi ètení narazí na konec souboru.

Odkazuje se na C_STAR, LLEN, myStrdup() a readLine().

Používá se v readTest().

TErrorCode readTest ( FILE *  f,
TTestData data 
)

Naète data ze souboru. Vrací true, pokud v¹e probìhlo bez problémù nebo vrací false, pokud je soubor ve ¹patném formátu.

Návratová hodnota:
Vrací strukturu chybovou zprávou a s èíslem øádku, kde tato chyba vznikla. Pokud je chybová zpráva NOERR, k ¾ádné chybì nedo¹lo a ve slo¾ce .line je poèet øádkù souboru (mù¾e se li¹it o jednièku od skuteènosti - zále¾í na tom, jestli konec øádku le¾í na konci nebo na zaèátku øádku).

Odkazuje se na addItem(), item::answLines, C_STAR, createItem(), ERR_ANSWTIME, ERR_EOF, ERR_EXPL, ERR_QUEST, ERR_SEP, ERR_TITLE, ERR_VAR, ERR_VARORDER, error_code::errMsg, item::explLines, error_code::line, LLEN, myStrdup(), NOERR, item::questLines, readLine(), readLines(), item::rightAnswer, RLEN, testAnswers(), item::time, testdata::title a testdata::total.

Používá se v main().

static int skipLine ( FILE *  f  )  [inline, static]

Pøeskoèí øádek souboru. Pokud narazí na konec souboru, vrací EOF. Pokud je v¹e v poøádku, posledním pøeèteným znakem je '
' a pøi dal¹ím ètení znaku se tedy naète první znak dal¹ího øádku.

Používá se v readLine().

bool testAnswers ( char *  answers  ) 

Vrací true, pokud v¹echny varianty odpovìdí mají jako první znak malé písmeno od a do z ve správném poøadí, jinak vrací false.

Používá se v readTest().


Dokumentace proměnných

const char C_COMM = '#'

Znak oznaèující komentáø. V této implementaci jde o znak møí¾ka (#)

Používá se v readLine().

const char C_STAR = '*'

Znak oznaèující oddìlovaè polo¾ek v souboru. Jde o znak hvìzdièka (*).

Používá se v readLines() a readTest().

const char* ERR_ANSWTIME
Initializer:
 
"Chyba pøi naèítání kódu odpovìdi nebo èasové nároènosti otázky!\n"

Chyba na øádku se správnou odpovìdí a èasem.

Používá se v readTest().

const char* ERR_EOF
Initializer:
"Neoèekávaný konec souboru!\n"

Neoèekávaný konec souboru.

Používá se v readTest().

const char* ERR_EXPL
Initializer:
 
"Chybí vysvìtlení správné odpovìdi nebo zabírá pøíli¹ mnoho øádkù!\n"

Chyba nìkde v textu s vysvìtlením správné odpovìdi.

Používá se v readTest().

const char* ERR_ONLINE
Initializer:
 
"Chyba vznikla na øádku %d\n"

Chyba na øádku ...

Používá se v main().

const char* ERR_QUEST
Initializer:
 
"Chybí otázka nebo zabírá pøíli¹ mnoho øádkù!\n"

Chyba nìkde v otázce.

Používá se v readTest().

const char* ERR_SEP
Initializer:
 
"Chybí oddìlovaè (hvìzdièka) v místì, kde byl oèekáván.\n"

Chybí oddìlovaè (hvìzdièka) v místì, kde byl oèekáván.

Používá se v readTest().

const char* ERR_TITLE
Initializer:
 
"Chybí nadpis souboru!\n"

Chybí nadpis testu.

Používá se v readTest().

const char* ERR_VAR
Initializer:
 
"Chybí varianty odpovìdí nebo je jich pøíli¹ mnoho!\n"

Chyba nìkde ve variantách odpovìdí.

Používá se v readTest().

const char* ERR_VARORDER
Initializer:
 
"Varianty odpovìdí nejsou ve správném poøadí!\n"

Chybné poøadí variant odpovìdí.

Používá se v readTest().

const char* NOERR
Initializer:
"Soubor je v poøádku.\n"

Chybová hlá¹ka udávající, ¾e v¹e je v poøádku.

Používá se v main() a readTest().

const char* WARN_LONGLINE
Initializer:
"V souboru se vyskytují øádky del¹í ne¾ 78 znakù!\n"

Varování, ¾e v souboru jsou pøíli¹ dlouhé øádky.

Používá se v main().

David Martinek © 2004, < martinek (zavináè) fit (teèka) vutbr (teèka) cz >