/* 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(); }
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(); }