File: indlist.c

package info (click to toggle)
ted 2.6-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 7,928 kB
  • ctags: 8,734
  • sloc: ansic: 71,878; makefile: 2,363; sh: 159
file content (102 lines) | stat: -rw-r--r-- 2,626 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#   include	"config.h"

#   include	<string.h>
#   include	<stdlib.h>
#   include	<stdio.h>

#   include	<ind.h>
#   include	<debugoff.h>

/************************************************************************/
/*  Insert a guess in a guess list.					*/
/*  1)  If it is already there, just adapt score.			*/
/*  2)  Remember a copy of word.					*/
/*  3)  Store in list.							*/
/************************************************************************/
int	indAddGuess(	IndGuessList *		igl,
			const unsigned char *	word,
			int			score	)
    {
    int			i;
    unsigned int	sz;
    unsigned char *	saved;
    IndGuessScore *	fresh;

    /*  1  */
    for ( i= 0; i < igl->iglGuessCount; i++ )
	{
	if  ( ! strcmp( (char *)igl->iglGuesses[i].igsWord, (char *)word ) )
	    {
	    if  ( igl->iglGuesses[i].igsScore < score )
		{ igl->iglGuesses[i].igsScore=  score;	}

	    return 0;
	    }
	}

    /*  2  */
    sz= strlen( (char *)word )+ 1;
    saved= malloc( sz+ 1 );
    if  ( ! saved )
	{ LLDEB(sz,saved); return -1;	}
    strcpy( (char *)saved, (const char *)word );

    /*  3  */
    /*
    if  ( igl->iglGuessCount % 10 == 0 )
	{ sz= ( igl->iglGuessCount+ 10 )* sizeof(IndGuessScore); }
    else{ sz= ( igl->iglGuessCount+  1 )* sizeof(IndGuessScore); }
    */
sz= ( igl->iglGuessCount+  1 )* sizeof(IndGuessScore);

    if  ( igl->iglGuesses )
	{ fresh= (IndGuessScore *)realloc( (void *)igl->iglGuesses, sz ); }
    else{ fresh= (IndGuessScore *)malloc( sz ); }

    if  ( ! fresh )
	{ LLDEB(sz,fresh); return -1;	}

    igl->iglGuesses= fresh;
    fresh[igl->iglGuessCount  ].igsWord= saved;
    fresh[igl->iglGuessCount++].igsScore= score;

    return 0;
    }

void indCleanGuesses( IndGuessList *	igl )
    {
    int			i;

    for ( i= 0; i < igl->iglGuessCount; i++ )
	{
	if  ( igl->iglGuesses[i].igsWord )
	    { free( igl->iglGuesses[i].igsWord ); }
	}

    if  ( igl->iglGuesses )
	{ free( igl->iglGuesses ); }

    igl->iglGuessCount= 0;
    igl->iglGuesses= (IndGuessScore *)0;
    }

/************************************************************************/
/*  Sort a guess list.							*/
/************************************************************************/
static int indIgsCmp(	const void *	vigs1,
			const void *	vigs2	)
    {
    const IndGuessScore *	igs1= (const IndGuessScore *)vigs1;
    const IndGuessScore *	igs2= (const IndGuessScore *)vigs2;

    return igs2->igsScore- igs1->igsScore;
    }

void indSortGuesses( IndGuessList *	igl )
    {
    if  ( igl->iglGuessCount > 1 )
	{
	qsort(	(void *)igl->iglGuesses,
		igl->iglGuessCount, sizeof(IndGuessScore), indIgsCmp );
	}
    }