Exemple #1
0
T_void Hash32Destroy(T_hash32 hash)
{
    T_word16 i ;
    T_hash32Struct *p_hash ;
    T_hash32Item hashItem ;
    T_doubleLinkListElement element ;
    DebugRoutine("Hash32Destroy") ;

    /* Make sure this is a valid hash table type. */
    DebugCheck(hash != HASH32_BAD) ;
    if (hash != HASH32_BAD)  {
        /* Get a quick pointer to the header. */
        p_hash = (T_hash32Struct *)hash ;

        /* Make sure this is a pointer to a not already dead */
        /* hash table. */
        DebugCheck(p_hash->tag == HASH32_TAG) ;
        if (p_hash->tag == HASH32_TAG)  {
            /* Go through the list of items and remove them all. */
            element = DoubleLinkListGetFirst(p_hash->itemList) ;
            while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)   {
                hashItem =
                    (T_hash32Item)DoubleLinkListElementGetData(element) ;
                Hash32Remove(hashItem);
                element = DoubleLinkListGetFirst(p_hash->itemList) ;
            }

            /* Now destroy all the lists. */
            for (i=0; i<p_hash->indexSize; i++)
                DoubleLinkListDestroy(p_hash->p_index[i]) ;

            /* Free the list of link lists. */
            MemFree(p_hash->p_index) ;

            /* Now destroy the main list. */
            DoubleLinkListDestroy(p_hash->itemList) ;

            /* Tag this block as gone. */
            p_hash->tag = HASH32_DEAD_TAG ;

            /* Now get rid of the header. */
            MemFree(p_hash) ;

            /* Done. */
        }
    }

    DebugEnd() ;
}
/* displays information about an open game */
static T_void GuildDisplayGameInfo (T_TxtboxID TxtboxID)
{
    T_sword16 selection;
    T_doubleLinkListElement element;
    T_gameDescriptionStruct *p_game;
    T_mapDescriptionStruct *p_map;
    T_gameDescriptionStruct blank = { 0, 0 } ;

    DebugRoutine ("GuildDisplayGameInfo");

    selection=TxtboxGetSelectionNumber(TxtboxID);
    element=DoubleLinkListGetFirst (G_gameList);

    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        /* compare this game entry to the selection number */
        if (selection==0)
        {
            /* this is the one - */
            p_game=(T_gameDescriptionStruct *)DoubleLinkListElementGetData(element);
            /* find map */
            element=DoubleLinkListGetFirst (G_mapList);
            while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
            {
                p_map=(T_mapDescriptionStruct *)DoubleLinkListElementGetData(element);
                if (p_map->mapIndex==p_game->mapNumber)
                {
                    /* display this one */
                    TxtboxCursSetRow (G_displayBoxes[GUILD_MAPS_LIST],selection);
                    TxtboxSetData (G_displayBoxes[GUILD_MAPS_DESC],p_map->description);
                    break;
                }
                element=DoubleLinkListElementGetNext(element);
                selection++;
            }
            break;
        }
        element=DoubleLinkListElementGetNext(element);
        selection--;
    }

   /* request player list for this game from server here */
    if (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
        GuildUIRequestPlayerListForOpenGame(p_game);
    else
        GuildUIRequestPlayerListForOpenGame(&blank) ;

    DebugEnd();
}
/* removes a game from the list of active 'open' games */
T_void GuildUIRemoveGame (T_word16 mapNumber, T_gameGroupID groupID)
{
    T_gameDescriptionStruct *p_game;
    T_doubleLinkListElement element,nextElement;
    DebugRoutine ("GuildUIRemoveGame");

    element=DoubleLinkListGetFirst(G_gameList);

    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        nextElement=DoubleLinkListElementGetNext(element);
        p_game=(T_gameDescriptionStruct *)DoubleLinkListElementGetData(element);

        if ((p_game->mapNumber==mapNumber) &&
            (CompareGameGroupIDs(p_game->groupID, groupID)))
        {
            /* remove this one */
            MemFree(p_game);
            DoubleLinkListRemoveElement(element);
            break;
        }

        element=nextElement;
    }

    /* Only redraw the list if we are not joining or creating a game. */
    if (PeopleHereGetOurState() == 0)
        GuildUIDrawGameList();

    DebugEnd();
}
/* to our current player */
static E_Boolean GuildUIPlayerCanVisitMap (T_word16 which)
{
    T_doubleLinkListElement element;
    E_Boolean canGo=FALSE;
    T_word16 count=0;
    T_mapDescriptionStruct *p_mapDesc;

    DebugRoutine ("GuildUIPlayerCanVisitMap");
    element=DoubleLinkListGetFirst (G_mapList);
    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        if (count==which)
        {
            /* check this map */
            p_mapDesc=(T_mapDescriptionStruct *)DoubleLinkListElementGetData(element);
            if (p_mapDesc->mapKey==0) canGo=TRUE;
            else if (StatsPlayerHasNotePage(p_mapDesc->mapKey)) canGo=TRUE;
            break;
        }
        count++;
        element=DoubleLinkListElementGetNext(element);
    }

    DebugEnd();
    return (canGo);
}
T_void GuildUIGetSelectedGame(
                  T_word16 *p_mapNumber,
                  T_gameGroupID *p_groupID,
				  T_word16 *p_quest)
{
    T_word16 i, index ;
    T_gameDescriptionStruct *p_game ;
    T_doubleLinkListElement element ;

    DebugRoutine("GuildUIGetSelectedGame") ;

    /* Just the appropriate text line on the list. */
    index = TxtboxGetSelectionNumber(G_displayBoxes[GUILD_GAME_LIST]) ;

    element = DoubleLinkListGetFirst(G_gameList) ;
    for (i=0; i<index; i++)  {
        element = DoubleLinkListElementGetNext(element) ;
    }
    if (element != DOUBLE_LINK_LIST_ELEMENT_BAD)  {
        p_game = (T_gameDescriptionStruct *)
                    DoubleLinkListElementGetData(element) ;
        *p_mapNumber = p_game->mapNumber ;
        *p_groupID = p_game->groupID ;
		*p_quest = p_game->questNumber;
    } else {
        /* Element not found?  Return zero. */
        *p_mapNumber = 0 ;
        *p_groupID = *DirectTalkGetNullBlankUniqueAddress() ;
		*p_quest = 0 ;
    }

    DebugEnd() ;
}
static T_word16 GuildUIGetSelectedAdventure(T_void)
{
    T_word16 adventure ;
    T_word16 i, index ;
    T_mapDescriptionStruct *p_map ;
    T_doubleLinkListElement element ;

    DebugRoutine("GuildUIGetSelectedAdventure") ;

    /* Just the appropriate text line on the list. */
    index = TxtboxGetSelectionNumber(G_displayBoxes[GUILD_MAPS_LIST]) ;
    StatsSetCurrentQuestNumber(index);

    element = DoubleLinkListGetFirst(G_mapList) ;
    for (i=0; i<index; i++)  {
        element = DoubleLinkListElementGetNext(element) ;
    }
    if (element != DOUBLE_LINK_LIST_ELEMENT_BAD)  {
        p_map = (T_mapDescriptionStruct *)
                    DoubleLinkListElementGetData(element) ;
        adventure = p_map->mapIndex ;
    } else {
        /* Element not found? */
        DebugCheck(FALSE) ;
        adventure = 0 ;
    }

    DebugEnd() ;

    return adventure ;
}
Exemple #7
0
T_hash32Item Hash32GetFirstItem(T_hash32 hash)
{
    T_hash32Struct *p_hash ;
    T_hash32ItemStruct *p_item = HASH32_ITEM_BAD ;
    T_doubleLinkListElement element ;

    DebugRoutine("Hash32GetFirstItem") ;

    /* Make sure this is a valid hash table type. */
    DebugCheck(hash != HASH32_BAD) ;
    if (hash != HASH32_BAD)  {
        /* Get a quick pointer to the header. */
        p_hash = (T_hash32Struct *)hash ;

        /* Make sure this is a pointer to a not already dead */
        /* hash table. */
        DebugCheck(p_hash->tag == HASH32_TAG) ;
        if (p_hash->tag == HASH32_TAG)  {
            /* See if there is anything in that list. */
            element = DoubleLinkListGetFirst(p_hash->itemList) ;
            if (element != DOUBLE_LINK_LIST_ELEMENT_BAD)  {
                /* Found something.  Get the hash item. */
                p_item = DoubleLinkListElementGetData(element) ;
            }
        }
    }

    DebugEnd() ;

    return ((T_hash32Item)p_item) ;
}
/* removes a player name from the list of players for the selected game */
T_void GuildUIRemovePlayer (T_byte8 *playerName)
{
    T_doubleLinkListElement element;
    T_byte8 *name;
    T_word32 size;
    DebugRoutine ("GuildUIRemovePlayer");

    size=TxtboxCanFit(G_displayBoxes[GUILD_GAME_DESC],playerName);
    element=DoubleLinkListGetFirst(G_playerList);

    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        name=(T_byte8 *)DoubleLinkListElementGetData(element);
        if (strncmp(name,playerName,size)==0)
        {
            /* remove element */
            MemFree(name);
            DoubleLinkListRemoveElement(element);
            break;
        }
        element=DoubleLinkListElementGetNext(element);
    }

    GuildUIDrawPlayerList();

    DebugEnd();
}
/* information block about an adventure */
static T_void GuildDisplayMapInfo (T_TxtboxID TxtboxID)
{
    T_word16 selection;
    T_mapDescriptionStruct *p_map;
    T_doubleLinkListElement element;

    DebugRoutine ("GuildDisplayMapInfo");

    selection=TxtboxGetSelectionNumber(TxtboxID);
    element=DoubleLinkListGetFirst(G_mapList);

    /* Record that adventure as the selected adventure. */
    StatsSetCurrentQuestNumber(selection);

    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        if (selection==0)
        {

            /* display this map information */
            p_map=DoubleLinkListElementGetData(element);
            TxtboxSetData (G_displayBoxes[GUILD_MAPS_DESC],p_map->description);
            break;
        }

        selection-=1;
        element=DoubleLinkListElementGetNext(element);
    }


    DebugEnd();
}
/* redraws the list of open games */
static T_void GuildUIDrawGameList(T_void)
{
    T_doubleLinkListElement element;
    T_gameDescriptionStruct *p_game=NULL;
    T_mapDescriptionStruct *p_map=NULL;
    T_byte8 *listData=NULL;
    T_byte8 *temp=NULL;
    T_byte8 stmp[64];
    T_word16 count=0;
    T_word32 size=0;

    DebugRoutine ("GuildUIDrawGameList");
    element=DoubleLinkListGetFirst (G_gameList);
    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        /* get this element's data */
        p_game=(T_gameDescriptionStruct *)DoubleLinkListElementGetData(element);

        /* find corresponding map information structure */
        p_map=GuildUIGetMapDescription(p_game->mapNumber);

        /* make this data line */
        sprintf (stmp,"%s\r",p_map->name);

        /* add to list */
        if (listData != NULL) size=strlen(listData);
        else size=0;
        size+=strlen(stmp);
        temp=MemAlloc(size+2);
        if (listData != NULL) sprintf (temp,"%s%s",listData,stmp);
        else strcpy (temp,stmp);
        if (listData != NULL) MemFree(listData);

        listData=temp;
        temp=NULL;

        element=DoubleLinkListElementGetNext(element);
    }

    if (listData != NULL)
    {
        /* get rid of last '\r' */
        listData[strlen(listData)-1]='\0';
        TxtboxSetData(G_displayBoxes[GUILD_GAME_LIST],listData);
        MemFree(listData);
    }
    else
    {
        TxtboxSetData(G_displayBoxes[GUILD_GAME_LIST],"");
    }
    DebugEnd();
}
/* routine cleans up all efx in progress */
T_void EfxFinish (T_void)
{
    T_doubleLinkListElement element ;
    DebugRoutine ("EfxFinish");

    /* clean up effects linked list */
    if (G_effectsInProgress != DOUBLE_LINK_LIST_BAD)
    {
        element = DoubleLinkListGetFirst(G_effectsInProgress) ;
        while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
        {
            EfxDestroy(element) ;
            element = DoubleLinkListGetFirst(G_effectsInProgress) ;
        }

        DoubleLinkListDestroy (G_effectsInProgress);
        G_effectsInProgress=DOUBLE_LINK_LIST_BAD;
    }

    G_numEfxObjectsInWorld=0;

    DebugEnd();
}
Exemple #12
0
T_hash32Item Hash32Find(T_hash32 hash, T_word32 key)
{
    T_hash32Struct *p_hash ;
    T_hash32ItemStruct *p_item = HASH32_ITEM_BAD ;
    T_doubleLinkListElement element ;
    T_doubleLinkList list ;
    T_hash32ItemStruct *p_itemSearch ;

    DebugRoutine("Hash32Find") ;

    /* Make sure this is a valid hash table type. */
    DebugCheck(hash != HASH32_BAD) ;
    if (hash != HASH32_BAD)  {
        /* Get a quick pointer to the header. */
        p_hash = (T_hash32Struct *)hash ;

        /* Make sure this is a pointer to a not already dead */
        /* hash table. */
        DebugCheck(p_hash->tag == HASH32_TAG) ;
        if (p_hash->tag == HASH32_TAG)  {
            /* Find the list that the element is definitely in. */
            list = p_hash->p_index[key & p_hash->keyMask] ;

            /* Search the list for a matching key. */
            element = DoubleLinkListGetFirst(list) ;
            while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)  {
                /* Get the item in this list. */
                p_itemSearch = (T_hash32ItemStruct *)
                    DoubleLinkListElementGetData(element) ;

                /* See if the keys match */
                if (p_itemSearch->key == key)  {
                    /* Grab it and break out of this linear search. */
                    p_item = p_itemSearch ;
                    break ;
                }

                /* Find the next element. */
                element = DoubleLinkListElementGetNext(element) ;
            }
        }
    }

    DebugEnd() ;

    /* Return what we found. */
    return ((T_hash32Item)p_item) ;
}
/**
 *  MousePopEventHandler restores the last handler on the stack
 *  (if there is one).
 *
 *<!-----------------------------------------------------------------------*/
T_void MousePopEventHandler(T_void)
{
    T_doubleLinkListElement first ;
    T_mouseEventHandler handler ;

    DebugRoutine("MousePopEventHandler") ;

    /* Get the old event handler. */
    first = DoubleLinkListGetFirst(G_eventStack) ;
    DebugCheck(first != DOUBLE_LINK_LIST_ELEMENT_BAD) ;

    if (first != DOUBLE_LINK_LIST_ELEMENT_BAD)  {
        handler = (T_mouseEventHandler)
                      DoubleLinkListElementGetData(first) ;

        MouseSetEventHandler(handler) ;
        DoubleLinkListRemoveElement(first) ;
    }

    DebugEnd() ;
}
/* returns a pointer to a map information structure for map mapIndex */
static T_mapDescriptionStruct* GuildUIGetMapDescription (T_word16 mapIndex)
{
    T_mapDescriptionStruct *mapInfo;
    T_doubleLinkListElement element;
    DebugRoutine ("GuildUIGetMapDescription");

    element=DoubleLinkListGetFirst (G_mapList);

    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        mapInfo=(T_mapDescriptionStruct *)DoubleLinkListElementGetData(element);
        if (mapInfo->mapIndex==mapIndex) break;
        else mapInfo=NULL;

        element=DoubleLinkListElementGetNext(element);
    }
    DebugCheck (mapInfo != NULL);

    DebugEnd();
    return (mapInfo);
}
/* clears all player names from the player list box */
T_void GuildUIClearPlayers (T_void)
{
    T_doubleLinkListElement element,nextElement;
    T_byte8 *p_name;
    T_byte8 *test;
    DebugRoutine ("GuildUIClearPlayers");

    element=DoubleLinkListGetFirst(G_playerList);
    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        nextElement=DoubleLinkListElementGetNext(element);
        p_name=(T_byte8 *)DoubleLinkListElementGetData(element);
        MemFree(p_name);
        DoubleLinkListRemoveElement(element);
        element=nextElement;
    }

    test=TxtboxGetData(G_displayBoxes[GUILD_GAME_DESC]);
    if (test != NULL) TxtboxSetData(G_displayBoxes[GUILD_GAME_DESC],"");

    DebugEnd();
}
/* draws current player list (G_playerList) */
static T_void GuildUIDrawPlayerList (T_void)
{
    T_doubleLinkListElement element;
    T_byte8* listData=NULL;
    T_byte8* temp=NULL;
    T_byte8* name=NULL;
    T_word16 size=0;

    DebugRoutine ("GuildUIDrawPlayerList");
    element=DoubleLinkListGetFirst (G_playerList);

    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        /* get this element's data */
        name=(T_byte8*)DoubleLinkListElementGetData(element);
        /* find corresponding map information structure */
        /* add to list */
        if (listData != NULL) size=strlen(listData);
        else size=0;
        size+=strlen(name);
        temp=MemAlloc(size+2);
        if (listData != NULL) sprintf (temp,"%s%s\r",listData,name);
        else sprintf (temp,"%s\r",name);

        if (listData != NULL) MemFree(listData);

        listData=temp;
        temp=NULL;

        element=DoubleLinkListElementGetNext(element);
    }

    TxtboxSetData(G_displayBoxes[GUILD_GAME_DESC],listData);
    if (listData != NULL) MemFree(listData);

    DebugEnd();
}
T_void GuildUIEnd    (T_void)
{
    T_word16 i;
    T_mapDescriptionStruct *p_map;
    T_doubleLinkListElement element,nextElement;
    DebugRoutine ("GuildUIEnd");

    /* destroy ui objects */
    GraphicDelete (G_backgroundPic);
    G_backgroundPic=NULL;

    for (i=0;i<4;i++)
    {
        ButtonDelete(G_upButtons[i]);
        G_upButtons[i]=NULL;
        ButtonDelete(G_dnButtons[i]);
        G_dnButtons[i]=NULL;
        TxtboxDelete (G_displayBoxes[i]);
        GraphicDelete (G_scrollBars[i]);
        G_scrollBars[i]=NULL;
    }

    ButtonDelete (G_joinButton);
    ButtonDelete (G_createButton);
    G_joinButton=NULL;
    G_createButton=NULL;

    /* free up maps data */
    element=DoubleLinkListGetFirst(G_mapList);
    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        nextElement=DoubleLinkListElementGetNext(element);
        p_map=(T_mapDescriptionStruct *)DoubleLinkListElementGetData(element);
        MemFree (p_map->name);
        MemFree (p_map->description);
        MemFree (p_map);
        element=nextElement;
    }
    DoubleLinkListDestroy (G_mapList);
    G_mapList=DOUBLE_LINK_LIST_BAD;

    /* free up game list data */
    DoubleLinkListFreeAndDestroy(&G_gameList) ;
#if 0
    element=DoubleLinkListGetFirst(G_gameList);
    while (element != DOUBLE_LINK_LIST_ELEMENT_BAD)
    {
        nextElement=DoubleLinkListElementGetNext(element);
        p_game=(T_gameDescriptionStruct *)DoubleLinkListElementGetData(element);
        MemFree(p_game);
        element=nextElement;
    }
    DoubleLinkListDestroy (G_gameList);
    G_gameList=DOUBLE_LINK_LIST_BAD;
#endif

    /* free up player list data */
//    GuildUIClearPlayers();
    DoubleLinkListFreeAndDestroy (&G_playerList);
//    G_playerList=DOUBLE_LINK_LIST_BAD;

    DebugEnd();
}
Exemple #18
0
T_void FormPop(T_void)
{
    T_formObjectID *p_formObjs;
    T_doubleLinkListElement element;
    T_void *p_state;
    T_formVariousValues *p_values;

    DebugRoutine("FormPop");

    /* Recover the form callback */
    element = DoubleLinkListGetFirst(G_formStack);
    p_values = (T_formVariousValues *)DoubleLinkListElementGetData(element);
    formcallback = p_values->callback;
    G_formHasTextBoxes = p_values->hasText;
    G_formHasButtons = p_values->hasButtons;
    MemFree(p_values);
    DoubleLinkListRemoveElement(element);

    /* Recover the list of text boxes */
    element = DoubleLinkListGetFirst(G_formStack);
    p_state = DoubleLinkListElementGetData(element);
    TxtboxSetStateBlock(p_state);
    MemFree(p_state);
    DoubleLinkListRemoveElement(element);

    /* Recover the list of sliders */
    element = DoubleLinkListGetFirst(G_formStack);
    p_state = DoubleLinkListElementGetData(element);
    SliderSetStateBlock(p_state);
    MemFree(p_state);
    DoubleLinkListRemoveElement(element);

    /* Recover the list of graphics */
    element = DoubleLinkListGetFirst(G_formStack);
    p_state = DoubleLinkListElementGetData(element);
    GraphicSetStateBlock(p_state);
    MemFree(p_state);
    DoubleLinkListRemoveElement(element);

    /* Recover the list of buttons */
    element = DoubleLinkListGetFirst(G_formStack);
    p_state = DoubleLinkListElementGetData(element);
    ButtonSetStateBlock(p_state);
    MemFree(p_state);
    DoubleLinkListRemoveElement(element);

    /* Recover the list of form objects */
    element = DoubleLinkListGetFirst(G_formStack);
    p_formObjs = DoubleLinkListElementGetData(element);
    memcpy(G_formObjectArray, p_formObjs, sizeof(G_formObjectArray));
    MemFree(p_formObjs);
    DoubleLinkListRemoveElement(element);

    /* If the list is empty, destroy it. */
    if (DoubleLinkListGetNumberElements(G_formStack) == 0) {
        DoubleLinkListDestroy(G_formStack);
        G_formStack = DOUBLE_LINK_LIST_BAD;
    }

    DebugEnd();
}