/* adds a game to the list of active 'open' games */
T_void GuildUIAddGame(T_word16 mapNumber, T_gameGroupID groupID, T_word16 questNumber)
{
    T_gameDescriptionStruct *p_game;

    DebugRoutine ("GuildUIAddGame");
    p_game=MemAlloc(sizeof(T_gameDescriptionStruct));
    p_game->mapNumber=mapNumber;
    p_game->groupID = groupID ;
	p_game->questNumber = questNumber;
    DoubleLinkListAddElementAtEnd (G_gameList,p_game);

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

    /* If this is the first time entry, go to it. */
    if (DoubleLinkListGetNumberElements(G_gameList) == 1)
        TxtboxCursTop(G_displayBoxes[GUILD_GAME_LIST]) ;

    DebugEnd();
}
/* routine builds a list of maps that the player can create */
static T_void GuildUIBuildMapList (T_void)
{
    T_byte8 stmp[64];
    T_byte8 stmp2[512];
    T_word16 mapIndex,mapKey;
    T_byte8 *dataIn;
    T_resource res;
    T_word32 size,tempSize;
    T_word32 inCnt,outCnt;
    T_byte8 charIn;
    T_word16 pass=0;
    T_word16 listcount=0;
    T_mapDescriptionStruct *p_mapStruct;
    T_byte8 *listdata=NULL,*temps=NULL;

    DebugRoutine ("GuildUIBuildMapList");

    /* initialize map listings */

    G_mapList=DoubleLinkListCreate();
    listcount=0;
    sprintf (stmp,"MAPDESC/DES%05d",listcount++);
    while (PictureExist(stmp))
    {
        /* alloc space for new map description block */
        p_mapStruct = MemAlloc (sizeof(T_mapDescriptionStruct));
        DebugCheck (p_mapStruct != NULL);

        /* lock in data 'text file' */
        dataIn=(T_byte8 *)PictureLockData (stmp,&res);
        size=ResourceGetSize(res);

        /* scan for newline */
        outCnt=inCnt=0;
        pass=0;

        while (inCnt < size)
        {
            /* get a character from input data */
            charIn=dataIn[inCnt++];
            stmp2[outCnt++]=charIn;

            /* check for temporary overflow */
            DebugCheck (outCnt<512);

            if (charIn=='\n')
            {
                /* reached 'end of line' */
                /* parse our temp string */
                stmp2[outCnt]='\0';
                outCnt=0;

                if (pass==0)
                {
                    /* getting map access (journal page needed ) */
                    sscanf (stmp2,"%d",&mapKey);
                    p_mapStruct->mapKey=mapKey;

                }
                else if (pass==1)
                {
                    /* getting map number */
                    sscanf (stmp2,"%d",&mapIndex);
                    p_mapStruct->mapIndex=mapIndex;

                }
                else if (pass==2)
                {
                    /* getting map name */
                    tempSize=strlen(stmp2);
                    /* alloc string */
                    p_mapStruct->name=MemAlloc(tempSize+1);
                    strcpy (p_mapStruct->name,stmp2);
                    p_mapStruct->name[strlen(p_mapStruct->name)-2]='\0';
                }
                else if (pass==3)
                {
                    /* getting map description */
                    tempSize=strlen(stmp2);
                    /* alloc string */
                    p_mapStruct->description=MemAlloc(tempSize+1);
                    strcpy (p_mapStruct->description,stmp2);

                }
                else
                {
                    break;
                }

                pass++;
            }
        }

        PictureUnlockAndUnfind(res);

        /* add our structure to global list */
        DoubleLinkListAddElementAtEnd (G_mapList,p_mapStruct);

        /* build our list of maps on the fly */
        if (GuildUIPlayerCanVisitMap(listcount))
        {
            sprintf (stmp,"^009%s",p_mapStruct->name);
        }
        else
        {
            sprintf (stmp,"^010%s",p_mapStruct->name);
        }

        /* add stmp to list */
        tempSize=strlen(stmp);
        if (listdata!=NULL) tempSize+=strlen(listdata);
        temps=MemAlloc(tempSize+2);
        if (listdata == NULL) sprintf (temps,"%s\r",stmp);
        else sprintf (temps,"%s%s\r",listdata,stmp);
        if (listdata != NULL) MemFree (listdata);
        listdata=temps;
        listdata[strlen(listdata)]='\0';

        /* increment map description file name */
        sprintf (stmp,"MAPDESC/DES%05d",listcount++);
    }

    TxtboxSetData (G_displayBoxes[GUILD_MAPS_LIST],listdata);
    TxtboxCursBot(G_displayBoxes[GUILD_MAPS_LIST]);
    TxtboxBackSpace (G_displayBoxes[GUILD_MAPS_LIST]);
    TxtboxCursTop(G_displayBoxes[GUILD_MAPS_LIST]);
    MemFree(listdata);

    GuildDisplayMapInfo (G_displayBoxes[GUILD_MAPS_LIST]);

    DebugEnd();
}
Exemple #3
0
T_void FormLoadFromFile(T_byte8 *filename)
{
    FILE *fp, *fp2;
    T_word16 i, j;
    T_word16 objtype = 0, objid, x1, y1, x2, y2;
    T_word16 hotkey, toggletype, datatype, fieldtype, fcolor, bcolor, justify;
    T_word16 sbupID, sbdnID, sbgrID;
    T_word16 numericonly;
    T_word32 maxlength;
    T_byte8 picname[32];
    T_byte8 buttontext[256];
    T_byte8 fontname[32];
    T_byte8 tempstr[256];
    T_byte8 tempstr2[256];
    T_byte8 tempstr3[32];
    T_byte8 val;
    E_Boolean isincludedfile = FALSE;
    E_Boolean appendtext = FALSE;
    E_Boolean cursorset = FALSE;
    T_formObjectID objID;
    T_formObjectStruct *p_obj, *p_obj2;
    T_TxtfldStruct *p_txtfld;
    T_buttonStruct *p_button;
    T_buttonID buttonID, SBUbuttonID, SBDbuttonID;
    T_graphicID SBGgraphicID;
    T_sliderID sliderID;
    T_byte8 *p_includedtext;
    T_word32 size;

    DebugRoutine("FormLoadFromFile");
    DebugCheck(filename!=NULL);

    /* first, clean up the form structure and delete any previous forms */
    FormCleanUp();

    /* open up the file */
    fp = fopen(filename, "r");
    DebugCheck(fp!=NULL);
    while (feof(fp) == FALSE) {
        objtype = 0;
        /* get a line from the main file */
        fgets(tempstr, 128, fp);
        /* strip last (newline) character */
        if (tempstr[strlen(tempstr) - 1] == '\n')
            tempstr[strlen(tempstr) - 1] = '\0';

        /* append text to current object if flag is set */
        if (appendtext == TRUE) {
            if (strcmp(tempstr, "ENDOFTEXT") == 0) {
                /* turn off appendstring mode */
                TxtboxBackSpace(p_obj->objID);
                TxtboxCursTop(p_obj->objID);
                TxtboxRepaginate(p_obj->objID);
                TxtboxFirstBox();
                appendtext = FALSE;
                sprintf(tempstr, "#");
            } else if (tempstr[0] != '$' && tempstr[0] != '#') {
                /* strip last character if newline */
                if (tempstr[strlen(tempstr) - 1] == '\n')
                    tempstr[strlen(tempstr) - 1] = '\0';
                TxtboxAppendString(p_obj->objID, tempstr);
                TxtboxAppendKey(p_obj->objID, 13);
                sprintf(tempstr, "#");
            }
        }

        /* check to see if we should open an included file */
        if (tempstr[0] == '$') {
            /* strip the '$' from the string */
            for (i = 1; i < strlen(tempstr); i++)
                tempstr2[i - 1] = tempstr[i];
            tempstr2[i - 1] = '\0';
            /* open an included file */
            p_includedtext = FileLoad(tempstr2, &size);
            TxtboxSetData(p_obj->objID, p_includedtext);
            TxtboxRepaginateAll(p_obj->objID);
            TxtboxCursTop(p_obj->objID);
            MemFree(p_includedtext);

//        	fp2 = fopen (tempstr2,"r");
//	        DebugCheck (fp2!=NULL);
//           isincludedfile=TRUE;

            sprintf(tempstr, "#");
        }

        /* ignore comments and blank lines */
        if (tempstr[0] != '#' && tempstr[0] != ' ') {
            sscanf(tempstr, "%d", &objtype);
            if (objtype == 1) /* add a graphic */
            {
                sscanf(tempstr, "%d,%d,%d,%d,%s", &objtype, &objid, &x1, &y1,
                        picname);
                FormAddGraphic(x1, y1, picname, objid);
            } else if (objtype == 2) /* add a text */
            {
                sscanf(tempstr, "%d,%d,%d,%d,%d,%d", &objtype, &objid, &x1, &y1,
                        &fcolor, &bcolor);
                /* get font name */
                fgets(tempstr, 128, fp);
                sscanf(tempstr, "%s", fontname);
                /* get text */
                fgets(tempstr, 128, fp);
                /* strip last (newline) character */
                if (tempstr[strlen(tempstr) - 1] == '\n')
                    tempstr[strlen(tempstr) - 1] = '\0';
                /* add a text object */
                FormAddText(x1, y1, tempstr, fontname, fcolor, bcolor, objid);
            } else if (objtype == 3) /* add a button */
            {
                sscanf(tempstr, "%d,%d,%d,%d,%d,%d,%s", &objtype, &objid, &x1,
                        &y1, &toggletype, &hotkey, picname);
                FormAddButton(x1, y1, picname, (E_Boolean)toggletype, hotkey,
                        objid);
            } else if (objtype == 4) /* add a text button */
            {
                sscanf(tempstr, "%d,%d,%d,%d,%d,%d", &objtype, &objid, &x1, &y1,
                        &fcolor, &toggletype, &hotkey);
                /* get picture name */
                fgets(tempstr, 128, fp);
                sscanf(tempstr, "%s", picname);
                /* get font name */
                fgets(tempstr, 128, fp);
                sscanf(tempstr, "%s", fontname);
                /* get buttontext */
                fgets(tempstr, 128, fp);
                /* strip last (newline) character */
                if (tempstr[strlen(tempstr) - 1] == '\n')
                    tempstr[strlen(tempstr) - 1] = '\0';
                /* make a text button */
                FormAddTextButton(x1, y1, tempstr, picname, fontname, fcolor, 0,
                        (E_Boolean)toggletype, hotkey, objid);
            } else if (objtype == 5) /* add a text box */
            {
                sscanf(tempstr, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%s",
                        &objtype, &objid, &x1, &y1, &x2, &y2, &maxlength,
                        &numericonly, &justify, &fieldtype, &hotkey, &sbupID,
                        &sbdnID, &sbgrID, fontname);

                /* read in default text */
//                fgets (tempstr,128,fp);
                /* create a text box */
                /* set maximum length to highest possible value if 0 */
                if (maxlength == 0)
                    maxlength--;

                objID = FormAddTextBox(x1, y1, x2, y2, fontname, maxlength,
                        hotkey, numericonly, justify, (E_TxtboxMode)fieldtype,
                        objid);

                DebugCheck(objID != NULL);
                /* set form scroll bar stuff */
                if (sbupID != 0) {
                    SBUbuttonID = FormGetObjID(sbupID);
                    ButtonSetData(SBUbuttonID, objid);
                    ButtonSetCallbacks(SBUbuttonID, NULL, TxtboxHandleSBUp);
                    SBDbuttonID = FormGetObjID(sbdnID);
                    ButtonSetData(SBDbuttonID, objid);
                    ButtonSetCallbacks(SBDbuttonID, NULL, TxtboxHandleSBDn);
                    SBGgraphicID = FormGetObjID(sbgrID);
                    DebugCheck(SBUbuttonID != NULL);
                    DebugCheck(SBDbuttonID != NULL);
                    DebugCheck(SBGgraphicID != NULL);
                    p_obj = (T_formObjectStruct*)objID;
                    TxtboxSetScrollBarObjIDs(p_obj->objID, SBUbuttonID,
                            SBDbuttonID, SBGgraphicID);
                }

                /* set default text */
                p_obj = (T_formObjectStruct *)objID;
                appendtext = TRUE;

            } else if (objtype == 6) /* add a slider */
            {
                sscanf(tempstr, "%d,%d,%d,%d,%d", &objtype, &objid, &x1, &y1,
                        &x2);
                objID = FormAddSlider(x1, y1, x2, objid);
                DebugCheck(objID != NULL);
                p_obj = (T_formObjectStruct *)objID;
                SliderSetCallBack(p_obj->objID, FormReportSlider);
            }
        }
    }
    fclose(fp);
    DebugEnd();
}