int goc_listSetCursor(GOC_HANDLER uchwyt, int pos) { GOC_StList *lista = (GOC_StList*)uchwyt; int cnt = goc_listGetRowsAmmount( uchwyt ); GOC_POSITION height = goc_elementGetHeight(uchwyt); if ( lista->nKolumna == 0 ) return GOC_ERR_REFUSE; // jezeli pozycja sie nie zmienila nic nie rob if ( lista->kursor == pos ) return GOC_ERR_OK; if ( pos < 0 ) { lista->kursor = -1; goc_systemSendMsg(uchwyt, GOC_MSG_LISTCHANGE, NULL, lista->kursor); } else if ( pos < cnt ) { lista->kursor = pos; goc_systemSendMsg(uchwyt, GOC_MSG_LISTCHANGE, lista->pKolumna[0]->pText[lista->kursor], lista->kursor); } else return GOC_ERR_REFUSE; lista->start = listCountStart(lista->kursor, height, cnt); return GOC_ERR_OK; }
static int listCursorPrev(GOC_HANDLER uchwyt) { GOC_StList *lista = (GOC_StList*)uchwyt; if ( lista->kursor > 0 ) { lista->kursor--; goc_systemSendMsg(uchwyt, GOC_MSG_LISTCHANGE, lista->pKolumna[0]->pText[lista->kursor], lista->kursor); if ( lista->start > lista->kursor ) { // przemaluj calosc, nastapilo przewiniecie strony int n = goc_listGetRowsAmmount(uchwyt); GOC_POSITION height = goc_elementGetHeight(uchwyt); lista->start = listCountStart(lista->kursor, height, n); goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); } if ( lista->flag & GOC_EFLAGA_SHOWN ) { // przemaluj tylko linie nastepna i tam gdzie poszedl kursor listRedrawLine(uchwyt, lista->kursor); listRedrawLine(uchwyt, lista->kursor+1); goc_gotoxy( goc_elementGetScreenX(uchwyt)+1, goc_elementGetScreenY(uchwyt)+(lista->kursor-lista->start) + 1); fflush(stdout); } } return GOC_ERR_OK; }
static int listHotKeyPgDown( GOC_HANDLER uchwyt, GOC_MSG wiesc, void* pBuf, unsigned int nBuf) { GOC_StList *lista = (GOC_StList*)uchwyt; int n = goc_listGetRowsAmmount(uchwyt); int retCode = GOC_ERR_OK; GOC_POSITION heightOffset; // brak wpisów if ( n <= 0 ) return retCode; // kursor jest ju¿ na koñcu if ( lista->kursor == n-1 ) return retCode; // kursor jeszcze nie ustawiony if ( lista->kursor < 0 ) lista->kursor = 0; // wykonaj przesuniecie wszystkiego o lista->height-2 heightOffset = goc_elementGetHeight(uchwyt)-2; lista->start += heightOffset; lista->kursor += heightOffset; // wykonaj wyrównanie if ( lista->start + heightOffset >= n ) lista->start = n - heightOffset; if ( lista->kursor >= n ) lista->kursor = n-1; // zgloszenie zmiany goc_systemSendMsg(uchwyt, GOC_MSG_LISTCHANGE, lista->pKolumna[0]->pText[lista->kursor], lista->kursor); // wy¶wietlenie if ( lista->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return retCode; }
void printMixer() { int param; param = AUMIX_CURRNAME; doAction(ACTION_AUMIX, ¶m); goc_labelSetText(nMixer, (char*)param, GOC_FALSE); param = AUMIX_CURRDEV; doAction(ACTION_AUMIX, ¶m); param &= 0x7F; goc_precentSetPosition(pMixer, param); goc_systemSendMsg(nMixer, GOC_MSG_PAINT, 0, 0); goc_systemSendMsg(pMixer, GOC_MSG_PAINT, 0, 0); fflush(stdout); }
static int barFreeFocus(GOC_HANDLER uchwyt) { GOC_StBar *pasek = (GOC_StBar*)uchwyt; pasek->color = pasek->kolorNieaktywny; goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
int goc_labelSetFlag(GOC_HANDLER u, unsigned short line, GOC_FLAGS flag) { GOC_StLabel *napis = (GOC_StLabel*)u; flag &= (GOC_FLAGS)COC_EFLAGA_G_JUSTIFY; if ( line == (unsigned short)~0 ) /* wykonaj ustawienie dla wszystkich elementów */ { int i; GOC_FLAGS *f = &(napis->flag); unsigned int n = napis->nText; *f &= (GOC_FLAGS)~COC_EFLAGA_G_JUSTIFY; *f |= flag; for ( i=0; i<n; i++ ) { napis->tekst[i].flag &= (GOC_FLAGS)~COC_EFLAGA_G_JUSTIFY; napis->tekst[i].flag |= flag; } } else /* wykonaj ustawienie dla wybranego elementu */ { if ( line >= napis->nText ) return GOC_ERR_END; napis->tekst[line].flag &= (GOC_FLAGS)~COC_EFLAGA_G_JUSTIFY; napis->tekst[line].flag |= flag; } if ( napis->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(u, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
static int hotKeyShowList( GOC_HANDLER uchwyt, GOC_MSG wiesc, void *pBuf, unsigned int nBuf) { GOC_FLAGS f = goc_elementGetFlag(lLista); if ( f & GOC_EFLAGA_PAINTED ) { goc_listClear(lLista); goc_elementIsFlag(lLista, GOC_EFLAGA_PAINTED | GOC_EFLAGA_ENABLE); //goc_elementSetFlag(lLista, f); goc_systemRepaintUnder(lLista); fflush(stdout); } else { int size = 0; const char **ptr; doAction(ACTION_PLAYLIST_GETSIZE, &size); doAction(ACTION_PLAYLIST_GETTABLE, &ptr); goc_listSetExtTable(lLista, ptr, size); doAction(ACTION_PLAYLIST_GETACTUAL, &size); goc_sellistSelect(lLista, size); goc_listSetCursor(lLista, size); goc_elementOrFlag(lLista, GOC_EFLAGA_PAINTED | GOC_EFLAGA_ENABLE); goc_systemFocusOn(lLista); } goc_systemSendMsg(lLista, GOC_MSG_PAINT, 0, 0); }
static int nasluch(GOC_HANDLER uchwyt, GOC_MSG wiesc, void *pBuf, unsigned int nBuf) { if ( uchwyt == GOC_HANDLER_SYSTEM ) { if ( wiesc == GOC_MSG_CHAR ) { if ( nBuf == 27 ) return GOC_ERR_OK; } } else if ( uchwyt == lLista ) { if ( wiesc == GOC_MSG_CHAR ) { if ( nBuf == 0x0D ) { char *selFile = goc_listGetUnderCursor( lLista ); if ( selFile ) doAction(ACTION_PLAY, selFile); return GOC_ERR_OK; } else if ( nBuf == 0x116 ) { int pos = goc_listGetCursor(lLista); if ( pos > 0 ) { int size = 0; const char **ptr; doAction(ACTION_PLAYLIST_REMOVEFILE, &pos); doAction(ACTION_PLAYLIST_GETSIZE, &size); doAction(ACTION_PLAYLIST_GETTABLE, &ptr); goc_listSetExtTable(lLista, ptr, size); doAction(ACTION_PLAYLIST_GETACTUAL, &size); goc_sellistSelect(lLista, size); goc_listSetCursor(lLista, pos); // goc_elementOrFlag(lLista, GOC_EFLAGA_PAINTED | GOC_EFLAGA_ENABLE); // goc_systemFocusOn(lLista); goc_systemSendMsg(lLista, GOC_MSG_PAINT, 0, 0); } return GOC_ERR_OK; } } else if ( wiesc == GOC_MSG_LISTCHANGE ) { // TODO: Opis zaznaczonej pozycji return GOC_ERR_OK; } } /* else if ( uchwyt == pLista ) { // selekcjonuj tylko katalogi do dodawania if ( wiesc == GOC_MSG_FILELISTADDFILE ) { if ( nBuf != GOC_FILELISTFLAG_FOLDER ) return GOC_ERR_REFUSE; } }*/ return goc_systemDefaultAction(uchwyt, wiesc, pBuf, nBuf); }
int goc_barAddText(GOC_HANDLER uchwyt, const char *tekst) { GOC_StBar* pasek = (GOC_StBar*)uchwyt; pasek->tekst = goc_tableAdd(pasek->tekst, &(pasek->nText), sizeof(char*)); pasek->tekst[pasek->nText-1] = strdup(tekst); goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
// -- do ustalenia, co bedzie decydowalo co zrobic po zakonczeniu piosenki // -- czy grac dalej, czy przerwac int controlStart() { GOC_MSG wiesc; doAction(ACTION_START, NULL); goc_systemSendMsg(GOC_HANDLER_SYSTEM, GOC_MSG_PAINT, 0, 0); while ((goc_systemCheckMsg( &wiesc ))); return 0; }
// TODO: Przemieszczenie punktu startowego przy ilosci pól wykraczaj±cych // poza dostêpny obszar static int barHotKeyNext(GOC_HANDLER uchwyt, GOC_MSG wiesc, void* pBuf, unsigned int nBuf) { GOC_StBar *pasek = (GOC_StBar*)uchwyt; if ( pasek->kursor < (int)(pasek->nText-1) ) pasek->kursor++; goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
// TODO: Przemieszczenie punktu startowego przy ilosci pól wykraczaj±cych // poza dostêpny obszar static int barHotKeyPrev(GOC_HANDLER uchwyt, GOC_MSG wiesc, void* pBuf, unsigned int nBuf) { GOC_StBar *pasek = (GOC_StBar*)uchwyt; if ( pasek->kursor > 0 ) (pasek->kursor)--; goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
static int nasluch(GOC_HANDLER uchwyt, GOC_MSG wiesc, void *pBuf, unsigned int nBuf) { if ( wiesc == GOC_MSG_TIMERTICK ) { goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; } return goc_systemDefaultAction(uchwyt, wiesc, pBuf, nBuf); }
static int listFocusFree(GOC_HANDLER uchwyt) { GOC_StList *lista = (GOC_StList*)uchwyt; lista->kolorRamka = lista->kolorRamkaNieaktywny; lista->color = lista->kolorPoleNieaktywny; if ( lista->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
static int barFocus(GOC_HANDLER uchwyt) { GOC_StBar *pasek = (GOC_StBar*)uchwyt; if ( !(pasek->flag & GOC_EFLAGA_PAINTED) ) return GOC_ERR_REFUSE; if ( !(pasek->flag & GOC_EFLAGA_ENABLE) ) return GOC_ERR_REFUSE; pasek->color = pasek->kolorAktywny; goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
int goc_labelSetText(GOC_HANDLER u, char *tekst, GOC_BOOL licz) { GOC_StLabel *napis = (GOC_StLabel*)u; goc_labelRemLines(u); goc_labelAddLine(u, tekst); if ( licz == GOC_TRUE ) goc_elementSetWidth(u, strlen(tekst)); else if ( napis->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(u, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
int goc_listListener(GOC_HANDLER uchwyt, GOC_MSG wiesc, void* pBuf, unsigned int nBuf) { if ( wiesc == GOC_MSG_CREATE ) { GOC_StElement* elem = (GOC_StElement*)pBuf; GOC_HANDLER* retuchwyt = (GOC_HANDLER*)nBuf; GOC_StList* lista = (GOC_StList*)malloc(sizeof(GOC_StList)); memcpy(lista, elem, sizeof(GOC_StElement)); *retuchwyt = (GOC_HANDLER)lista; goc_systemSendMsg(*retuchwyt, GOC_MSG_INIT, lista, 0); return GOC_ERR_OK; } else if ( wiesc == GOC_MSG_INIT ) { return listInit((GOC_HANDLER)pBuf); } else if ( wiesc == GOC_MSG_PAINT ) { return goc_listPaint(uchwyt); } else if ( wiesc == GOC_MSG_FOCUS ) { return listFocus(uchwyt); } else if ( wiesc == GOC_MSG_FOCUSFREE ) { return listFocusFree(uchwyt); } else if ( wiesc == GOC_MSG_DESTROY ) { return goc_listDestroy(uchwyt); } else if ( wiesc == GOC_MSG_LISTSETCOLOR ) { *((GOC_COLOR *)pBuf) = listSetColor( uchwyt, nBuf ); } else if ( wiesc == GOC_MSG_LISTADDTEXT ) { return listAddText(uchwyt, pBuf); } else if ( wiesc == GOC_MSG_LISTADDROW ) { return listAddRow(uchwyt, pBuf); } else if ( wiesc == GOC_MSG_LISTCLEAR ) { return listClear(uchwyt); } else if ( wiesc == GOC_MSG_LISTSETEXTERNAL ) { return listSetExt(uchwyt, pBuf, nBuf); } return GOC_ERR_UNKNOWNMSG; }
static int listHotKeyEnd(GOC_HANDLER uchwyt, GOC_MSG wiesc, void* pBuf, unsigned int nBuf) { GOC_StList *lista = (GOC_StList*)uchwyt; int retCode = GOC_ERR_OK; retCode = goc_listSetCursor(uchwyt, goc_listGetRowsAmmount( uchwyt )-1); if ( retCode != GOC_ERR_OK ) return retCode; if ( lista->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
int controlEvent(unsigned int event) { if ( event == EVENT_CHANGE_SONG ) { char buf[256]; int param; param = INFO_FILE; doAction(ACTION_INFO, ¶m); sprintf(buf, "Plik: %s", (char *)param); free((char*)param); goc_labelSetText(nPlik, buf, 0); goc_systemSendMsg(nPlik, GOC_MSG_PAINT, 0, 0); param = INFO_TITLE; doAction(ACTION_INFO, ¶m); sprintf(buf, "Title: %s", (char *)param); free((char*)param); goc_labelSetText(nTitle, buf, 0); goc_systemSendMsg(nTitle, GOC_MSG_PAINT, 0, 0); param = INFO_ARTIST; doAction(ACTION_INFO, ¶m); sprintf(buf, "Artist: %s", (char *)param); free((char*)param); goc_labelSetText(nArtist, buf, 0); goc_systemSendMsg(nArtist, GOC_MSG_PAINT, 0, 0); param = INFO_ALBUM; doAction(ACTION_INFO, ¶m); sprintf(buf, "Album: %s", (char *)param); free((char*)param); goc_labelSetText(nAlbum, buf, 0); goc_systemSendMsg(nAlbum, GOC_MSG_PAINT, 0, 0); param = INFO_YEAR; doAction(ACTION_INFO, ¶m); sprintf(buf, "Year: %s", (char *)param); free((char*)param); goc_labelSetText(nYear, buf, 0); goc_systemSendMsg(nYear, GOC_MSG_PAINT, 0, 0); param = INFO_COMMENT; doAction(ACTION_INFO, ¶m); sprintf(buf, "Comment: %s", (char *)param); free((char*)param); goc_labelSetText(nComment, buf, 0); goc_systemSendMsg(nComment, GOC_MSG_PAINT, 0, 0); if ( goc_elementGetFlag(lLista) & GOC_EFLAGA_PAINTED ) { int pos = 0; pos = goc_sellistGetSelectPos(lLista, 0); goc_sellistUnselect(lLista, pos); pos = 0; doAction(ACTION_PLAYLIST_GETACTUAL, &pos); goc_sellistSelect(lLista, pos); goc_systemSendMsg(lLista, GOC_MSG_PAINT, 0, 0); } } return 0; }
int goc_labelAddLine(GOC_HANDLER u, const char *Tekst) { GOC_StLabel *napis = (GOC_StLabel*)u; if ( !Tekst ) return GOC_ERR_OK; // ?? napis->tekst = goc_tableAdd(napis->tekst, &napis->nText, sizeof(GOC_StColorLine)); napis->tekst[napis->nText-1].line = goc_stringCopy(NULL, Tekst); napis->tekst[napis->nText-1].color = napis->color; napis->tekst[napis->nText-1].flag = napis->flag; if ( napis->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(u, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
static int listAddText(GOC_HANDLER u, const char *buf) { GOC_LISTROW wiersz; int retCode; memset( &wiersz, 0, sizeof(GOC_LISTROW) ); wiersz.nRow = -1; wiersz.pText = goc_tableAdd(wiersz.pText, &wiersz.nText, sizeof(char *)); wiersz.pText[wiersz.nText-1] = buf; retCode = goc_systemSendMsg(u, GOC_MSG_LISTADDROW, &wiersz, 0); wiersz.pText = goc_tableClear(wiersz.pText, &wiersz.nText); return retCode; }
static int listFocus(GOC_HANDLER uchwyt) { GOC_StList *lista = (GOC_StList*)uchwyt; if ( !(lista->flag & GOC_EFLAGA_PAINTED) ) return GOC_ERR_REFUSE; if ( !(lista->flag & GOC_EFLAGA_ENABLE) ) return GOC_ERR_REFUSE; lista->kolorRamka = lista->kolorRamkaAktywny; lista->color = lista->kolorPoleAktywny; if ( lista->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
static void bacteryGeneration(GOC_HANDLER mapa, int numStartPoints, int nBiomes) { int i; // wygenerowanie punktów startowych biomów context.configuration.maxz = nBiomes-1; pBiomeSet = randomStartPoints(&nBiomeSet, numStartPoints); for ( i=0; i<nBiomeSet; i++ ) { goc_maparawSetPoint(mapa, pBiomeSet[i]->x, pBiomeSet[i]->y, ++(pBiomeSet[i]->v)); } goc_systemSendMsg(mapa, GOC_MSG_PAINT, 0, 0); }
static int hotkeyModeView( GOC_HANDLER u, GOC_MSG m, void* pBuf, unsigned int nBuf) { if ( modeView == MODE_VIEW_CHARS ) { setUpNumericModeView(context.maska); } else if ( modeView == MODE_VIEW_NUMBERS ) { setUpCharModeView(context.maska); } goc_systemSendMsg(context.mapa, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
// Dodanie nowego wierszu i ustawienie tekstu dla podanej kolumny int goc_listAddColumnText(GOC_HANDLER u, const char *tekst, int kolumna) { GOC_LISTROW wiersz; int ret; memset( &wiersz, 0, sizeof(GOC_LISTROW)); wiersz.pText = goc_tableResize( wiersz.pText, &(wiersz.nText), sizeof(char*), kolumna+1); wiersz.pText[kolumna] = tekst; wiersz.nRow = -1; ret = goc_systemSendMsg(u, GOC_MSG_LISTADDROW, &wiersz, 0); wiersz.pText = goc_tableClear( wiersz.pText, &(wiersz.nText) ); return ret; /* GOC_StList* lista = (GOC_StList*)u; char *pBuf = NULL; GOC_COLUMN *k = NULL; int i; if ( lista->flag & GOC_LISTFLAG_EXTERNAL ) return GOC_ERR_REFUSE; // jesli nie ma to stworz nowa kolumne if ( lista->nKolumna == 0 ) goc_listAddColumn(u, lista->width); if ( kolumna >= lista->nKolumna ) return GOC_ERR_REFUSE; // zrob kopie dodawanego tekstu pBuf = goc_stringCopy(pBuf, tekst); // dodaj do wszystkich kolumn wiersz, ustawiajac ten do ktorego // ma zostac wpisany tekst for ( i=0; i<lista->nKolumna; i++ ) { k = lista->pKolumna[i]; k->pText = goc_tableAdd(k->pText, &(k->nText),sizeof(char*)); if ( i != kolumna ) k->pText[k->nText-1] = NULL; else k->pText[k->nText-1] = pBuf; } return GOC_ERR_OK; */ }
// TODO: Dodanie odswiezenia listy, jesli jest widoczna po dodaniu pliku lub // katalogu z zachowaniem pozycji kursora static int hotKeyAddFolder( GOC_HANDLER uchwyt, GOC_MSG wiesc, void *pBuf, unsigned int nBuf) { GOC_FLAGS f = goc_elementGetFlag(pLista); if ( f & GOC_EFLAGA_PAINTED ) { goc_labelRemLines(nStatus); goc_elementIsFlag(pLista, GOC_EFLAGA_PAINTED | GOC_EFLAGA_ENABLE); goc_systemRepaintUnder(pLista); goc_systemRepaintUnder(nStatus); fflush(stdout); } else { goc_elementOrFlag(pLista, GOC_EFLAGA_PAINTED | GOC_EFLAGA_ENABLE); goc_systemFocusOn(pLista); goc_systemSendMsg(pLista, GOC_MSG_PAINT, 0, 0); } return GOC_ERR_OK; }
static int hotKeySelectFolder( GOC_HANDLER uchwyt, GOC_MSG wiesc, void *pBuf, unsigned int nBuf) { char *element = goc_stringCopy(NULL, goc_filelistGetFolder(uchwyt)); element = goc_stringAdd(element, "/"); element = goc_stringAdd(element, goc_listGetUnderCursor(uchwyt)); if ( goc_isFileExists( element ) ) { if ( goc_isFolder( element ) ) { listAddFolder( element ); } else { // a wiec to plik checkAddFile( element ); } char *tmp = goc_stringAdd(goc_stringCopy(NULL, "Dodano: "), element); goc_labelSetText(nStatus, tmp, 0); tmp = goc_stringFree(tmp); goc_systemSendMsg(nStatus, GOC_MSG_PAINT, 0, 0); } }
int goc_labelSetColor(GOC_HANDLER u, unsigned short line, GOC_COLOR color) { GOC_StLabel *napis = (GOC_StLabel*)u; if ( line == (unsigned short)~0 ) { /* wykonaj ustawienie dla wszystkich elementów */ int i; unsigned int n = napis->nText; for ( i=0; i<n; i++ ) napis->tekst[i].color = color; } else { /* wykonaj ustawienie dla wybranego elementu */ if ( line >= napis->nText ) return GOC_ERR_END; napis->tekst[line].color = color; } // TODO: Paint only changed line if ( napis->flag & GOC_EFLAGA_SHOWN ) goc_systemSendMsg(u, GOC_MSG_PAINT, 0, 0); return GOC_ERR_OK; }
// bez konrtoli - odrysuj wskazana linie (pozycja na liscie) static void listRedrawLine(GOC_HANDLER u, int pos) { GOC_StList *lista = (GOC_StList*)u; GOC_StElement e; GOC_COLUMN *k; GOC_FUN_LABELDRAWER *drawer; int j; // licznik kolumn drawer = goc_elementGetLabelDrawer(u); memcpy(&e, lista, sizeof(GOC_StElement)); goc_systemSendMsg(u, GOC_MSG_LISTSETCOLOR, &(e.color), pos); e.y += pos - lista->start + 1; (e.x)++; for ( j = 0; j < lista->nKolumna; j++ ) { k = lista->pKolumna[j]; e.width = k->position; if ( pos<k->nText ) drawer(&e, k->pText[pos]); else drawer(&e, ""); e.x += k->position; } }
static int hotkeyNextTurnDrops( GOC_HANDLER u, GOC_StMessage* msg) { // TODO: Setting max and min landmass for forest/hills/land seperate GOC_BINFO("Turn: %3d", nBiomeTurn); if ( nBiomeTurn <= 0 ) { // fill up with sea generateFillUp(6); } else if ( nBiomeTurn <= biome.lands ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 6; generateLandMass(1, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(2, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees + biome.hills ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(4, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees + biome.hills + biome.desert ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(5, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees + biome.hills + biome.desert + biome.swamp) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(7, allowed, 1); free(allowed); } else { GOC_INFO("This is the end"); // I think it's the end return GOC_ERR_OK; } nBiomeTurn++; GOC_MSG_PAINT( msgPaint ); goc_systemSendMsg(context->mapa, msgPaint); goc_gotoxy(0, 0); goc_textallcolor(GOC_WHITE); printf("%03d", nBiomeTurn); goc_gotoxy(0, 0); fflush(stdout); return GOC_ERR_OK; }