Login
User Name:

Password:



Register
Forgot your password?
Vote for Us!
Couple bugs
Dec 12, 2017, 5:42 pm
By Remcon
Bug in disarm( )
Nov 12, 2017, 6:54 pm
By GatewaySysop
Bug in will_fall( )
Oct 23, 2017, 1:35 am
By GatewaySysop
Bug in do_zap( ), do_brandish( )
Oct 18, 2017, 1:52 pm
By GatewaySysop
Bug in get_exp_worth( )
Oct 10, 2017, 1:26 am
By GatewaySysop
LOP 1.45
Author: Remcon
Submitted by: Remcon
LOP Heroes Edition
Author: Vladaar
Submitted by: Vladaar
Heroes sound extras
Author: Vladaar
Submitted by: Vladaar
6Dragons 4.3
Author: Vladaar
Submitted by: Vladaar
Memwatch
Author: Johan Lindh
Submitted by: Vladaar
Users Online
CommonCrawl, Yandex, Bing

Members: 0
Guests: 11
Stats
Files
Topics
Posts
Members
Newest Member
477
3,705
19,232
608
LAntorcha
Today's Birthdays
There are no member birthdays today.
Related Links
» SmaugMuds.org » General » Coding » trying something different
Forum Rules | Mark all | Recent Posts

trying something different
< Newer Topic :: Older Topic >

Pages:<< prev 1 next >>
Post is unread #1 Sep 19, 2013, 7:19 pm
Go to the top of the page
Go to the bottom of the page

mystickdreamer
Magician
GroupMembers
Posts128
JoinedApr 9, 2010

Ok I have decided to try and use smaugfuss 1.9 and port all of CalareyMuds features over to that, and of course so far I'm having a bit of trouble


I'm trying to port over the easy stuff first

the part that I'm working on now is importing the ingredients that are able to be harvested, and I'm getting an error

here is the error
build.c:4111: error: invalid use of incomplete type âstruct ingred_dataâ
mud.h:164: error: forward declaration of âstruct ingred_dataâ


here is the code

        while( ingred )
         {
            sprintf( buf, "%d: %s\r\n",
                     ingred->vnum, ( pObjIndex = get_obj_index( ingred->vnum ) ) ? pObjIndex->short_descr : "???" );
            send_to_char( buf, ch );
            ingred = ingred->next;
         }




My feeble brain and I are thinking it's something wrong in mud.h with

typedef struct ingred_data INGRED_DATA;



but of course I could be absolutely wrong in my thinking lol
       
Post is unread #2 Sep 19, 2013, 10:25 pm
Go to the top of the page
Go to the bottom of the page

Remcon
Geomancer
GroupAdministrators
Posts1,858
JoinedJul 26, 2005

in that function that is causing the bug message what do you have for ingred, also make sure that in mud.h or somewhere you have the data for struct ingred_data. The typedef struct just more or less tells it that where it finds INGRED_DATA point it to struct ingred_data
       
Post is unread #3 Sep 23, 2013, 1:46 am
Go to the top of the page
Go to the bottom of the page

Quixadhal
Conjurer
GroupMembers
Posts398
JoinedMar 8, 2005

In early C compilers, "typedef (stuff) foo" was implemented as #defined foo (stuff)
Later, they added actual type checking. :)
       
Post is unread #4 Sep 23, 2013, 12:49 pm
Go to the top of the page
Go to the bottom of the page

mystickdreamer
Magician
GroupMembers
Posts128
JoinedApr 9, 2010

Ah thanks I forgot a piece of the code that told it what ingred was

       
Post is unread #5 Sep 23, 2013, 6:52 pm
Go to the top of the page
Go to the bottom of the page

mystickdreamer
Magician
GroupMembers
Posts128
JoinedApr 9, 2010

Hey Remcon since I know you've looked at the Calarey code

I'm trying to move over the mana system into Smaugfuss 1.9, but I'm having trouble finding out how much mana an area is set with each of the settings( stable, stagnant, etc)


basically, how does the mud know how much mana an area has for tapping.
       
Post is unread #6 Sep 25, 2013, 1:25 pm   Last edited Sep 25, 2013, 1:31 pm by ayuri
Go to the top of the page
Go to the bottom of the page

ayuri
Magician
GroupMembers
Posts239
JoinedJun 13, 2008

I went and grabbed a copy of CaleryMud 2.0 (hope thats the right codebase) and started to poke about a bit.
I'm noticing in build.c some references to climate_mana
Just a snippet:
/*
    * set climate mana
    */
   else if( !str_cmp( arg, "mana" ) )
   {
      int i;
      argument = one_argument( argument, arg );

      for( i = 0; i < MAX_CLIMATE; i++ )
      {
         if( str_cmp( arg, mana_settings[i] ) )
            continue;

         area->weather->climate_mana = i;
         ch_printf( ch, "The climate mana " "for %s is now %s.\n\r", area->name, mana_settings[i] );
         break;
      }

      if( i == MAX_CLIMATE )
      {
         ch_printf( ch, "Possible mana " "settings:\n\r" );
         for( i = 0; i < MAX_CLIMATE; i++ )
         {
            ch_printf( ch, "\t%s\n\r", mana_settings[i] );
         }
      }

      return;
   }

Also seeing a lot of stuff such as:
ch->in_room->area->weather->mana += ( int )mana / 10;
ch->mana -= ( mana / 2 );


So I'm betting thats about what you'd want to look at.
Each area has mana set by functions in build.c thats set by do_climate
From there, it seems the player spells are looking at the area->weather->mana.
Also you'd want to poke about in update.c as it has what looks like mana regeneration code for the area.

Don't forget the usual places like db.c where your loading and saving (most likely saving) the values set for the areas.

**Edit You said some was stable, stagnate, etc etc. Didn't see anything along those lines in my quick look. Could you expand on those a bit? Like what spell uses them?


***EDIT EDIT: Ok I think I follow now, your talking about AIR, WIND, etc etc. Those seem to be using MAX_CLIMATE. Also found in build.c

Hope it helps some,
ayuri



       
Post is unread #7 Sep 25, 2013, 7:40 pm
Go to the top of the page
Go to the bottom of the page

Remcon
Geomancer
GroupAdministrators
Posts1,858
JoinedJul 26, 2005

mystickdreamer is using 3.0 CaleryMud i think :) I'll look sometime just to check :) Sorry been kind of busy and thanks ayuri for looking into it :)
       
Post is unread #8 Sep 25, 2013, 7:51 pm
Go to the top of the page
Go to the bottom of the page

ayuri
Magician
GroupMembers
Posts239
JoinedJun 13, 2008

Remcon,
I may not be up to the level you are but I can at least try to follow the path. I was only able to find 2.0, but alas I was at work and our webfilter catches a lot of sites. Kinda amazed they haven't hit smaugmuds yet!

I'm willing to bet that they didn't change all that much from 2.0 to 3.0 however. Just look at how things are done in swr to swfote :)

Geeze, since I've been showing up here I have this inkling to try to get my game up and running....

*walks off into the distance chanting 'One FOTE, two FOTE, where's all the FOTE's?'

ayuri
       
Post is unread #9 Sep 25, 2013, 8:10 pm
Go to the top of the page
Go to the bottom of the page

Remcon
Geomancer
GroupAdministrators
Posts1,858
JoinedJul 26, 2005

in mud.h under the struct weather_data you can find
   int mana;   /* base amount of mana in the zone */
   int mana_vector;
   int climate_mana;

Thats the main things that will be needed.
Just do a grep in the cm3/src folder for those looking for things that have to do with them and the weather system.
this is for example what I got from doing a grep mana *
$ grep \>mana *
act_comm.c:               ch_printf( ch, "%5d/%-5d ", gch->mana, gch->max_mana );
act_info.c:      mana = ( ch->in_room->area->weather->mana + 3 * weath_unit - 1 ) / weath_unit;
act_info.c:      if( ch->mana > ( int )ch->max_mana / 20 )
act_info.c:   mana = ( ch->in_room->area->weather->mana + 3 * weath_unit - 1 ) / weath_unit;
act_info.c:   if( ch->mana > ( int )ch->max_mana / 20 )
act_wiz.c:   ch_printf_color( ch, "&cMana: &p%d&w/&r%d\n\r", obj->mana, obj->raw_mana );
act_wiz.c:   sprintf( mnbuf, "%d/%d", victim->mana, victim->max_mana );
act_wiz.c:            vch->mana = vch->max_mana;
act_wiz.c:      victim->mana = victim->max_mana;
act_wiz.c:         ch_printf( ch, "%3d", pArea->weather->mana );
act_wiz.c:         ch_printf( ch, "%3d", pArea->weather->mana_vector );
birth.c:   ch->max_mana = UMAX( 20, ch->nation->mana * get_curr_int( ch ) );
birth.c:   ch->mana = ch->max_mana;
birth.c:   ch->mana = ch->max_mana;
birth.c:   ch->mana = ch->max_mana;
birth.c:   ch->mana = ch->max_mana;
build.c:      obj->mana = value;
build.c:      sprintf( buf, "Mana:        %d\n\r", ingred->mana );
build.c:      ingred->mana = 0;
build.c:         ingred->mana = atoi( arg4 );
build.c:         fprintf( fp, "Mana        %d\n", ingred->mana );
build.c:      sprintf( buf, "&gHitpoints: &G%d   &gMana: &G%d\r\n", nation->hit, nation->mana );
build.c:      nation->mana = 0;
build.c:         nation->mana = atoi( arg4 );
build.c:         fprintf( fp, "Mana       %d\n", nation->mana );
comm.c:                  stat = ch->mana;
db.c:   pArea->weather->mana = 0;
db.c:   pArea->weather->mana_vector = 0;
db.c:   obj->mana = 0;
db.c:   ch->mana = 100;
db.c:               ingred->mana = 0;
db.c:            KEY( "Mana", ingred->mana, fread_number( fp ) );
db.c:               nation->mana = 0;
db.c:            KEY( "Mana", nation->mana, fread_number( fp ) );
db.c:      pArea->weather->mana = number_range( -weath_unit, weath_unit ) + cf * number_range( 0, weath_unit );
db.c:      pArea->weather->mana_vector = cf + number_range( -rand_factor, rand_factor );
elkandu.c:   if( obj->mana < amt && type != MAG_TIME && type != MAG_ALL && type != MAG_LIGHT && type != MAG_UNHOLY )
elkandu.c:         if( obj->mana < amt || IS_OBJ_STAT( obj, ITEM_MAGIC ) || ch->curr_talent[TAL_CATALYSM] < 40 )
elkandu.c:               lose_hp( ch, obj->mana * 3 + ( obj->raw_mana / 20 ) );
elkandu.c:         if( obj->mana < amt )
elkandu.c:         if( obj->mana < amt )
elkandu.c:         if( obj->mana < amt )
elkandu.c:         if( obj->mana < amt )
elkandu.c:         if( obj->mana < amt )
elkandu.c:   obj->mana -= amt;
elkandu.c:   obj->mana += 50;
elkandu.c:         if( obj->mana && ch->curr_talent[TAL_SEEKING] >= 40 )
elkandu.c:            ch_printf( ch, "%d points of energy have been absorbed into this item.\n\r", obj->mana );
elkandu.c:               ch->mana = ch->max_mana + power;
elkandu.c:            ch->mana -= power;
elkandu.c:            victim->mana += power;
elkandu.c:   if( obj->mana < 500 && type != MAG_ANTIMAGIC )
elkandu.c:         if( obj->mana < 500 )
elkandu.c:         obj->mana -= 500;
elkandu.c:         obj->mana = 0;
elkandu.c:   obj->mana -= 500;
elkandu.c:         victim->max_mana = UMAX( 20, victim->nation->mana * get_curr_int( victim ) + victim->base_mana );
elkandu.c:         victim->mana = UMIN( victim->max_mana, victim->mana );
elkandu.c:   if( obj->mana < 50 )
elkandu.c:   amount = obj->mana / 50;
elkandu.c:   obj->mana -= 50 * amount;
fight.c:         if( ch->mana < 0 )
handler.c:   clone->mana = obj->mana;
handler.c:   if( obj1->pIndexData == obj2->pIndexData && QUICKMATCH( obj1->name, obj2->name ) && QUICKMATCH( obj1->short_descr, obj2->short_descr ) && QUICKMATCH( obj1->description, obj2->description ) && QUICKMATCH( obj1->action_desc, obj2->action_desc ) && obj1->item_type == obj2->item_type && xSAME_BITS( obj1->extra_flags, obj2->extra_flags ) && obj1->weight == obj2->weight && obj1->wear_loc == obj2->wear_loc && obj1->raw_mana == obj2->raw_mana && obj1->mana == obj2->mana && obj1->timer == obj2->timer && obj1->value[0] == obj2->value[0] && obj1->value[1] == obj2->value[1] && obj1->value[2] == obj2->value[2] && obj1->value[3] == obj2->value[3] && obj1->value[4] == obj2->value[4] && obj1->value[5] == obj2->value[5] && !obj1->first_extradesc && !obj2->first_extradesc && !obj1->first_content && !obj2->first_content && !obj1->gem && !obj2->gem && obj1->count + obj2->count > 0 ) /* prevent count overflow */
magic.c:            return ch->mana;
magic.c:if( !IS_NPC( ch ) && ch->mana < mana )
magic.c:victim->mana = URANGE( 0, victim->mana + af.modifier, victim->max_mana );
magic.c:( ch->in_room->area->weather->mana * 10 ) - amount );
magic.c:ch->mana += amount;
magic.c:ch->in_room->area->weather->mana -= ( int )amount / 100;
magic.c:if( weath->mana < 200 )
magic.c:storm *= weath->mana;
magic.c:ch->mana += 100 + ( int )storm / 4000;
makeobjs.c:   mob->max_mana = UMAX( 100, mob->perm_int * nation->mana );
makeobjs.c:   mob->mana = mob->max_mana;
mud_comm.c:victim->mana,
mud_prog.c:return mprog_veval( chkchar->mana, opr, atoi( rval ), mob );
player.c:                 ch->mana, ch->max_mana, xIS_SET( ch->act, PLR_AUTOLOOT ) ? '*' : ' ' );
player.c:              ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move );
player.c:            ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move );
save.c:   fprintf( fp, "HpManaMove   %d %d %d %d %d %d\n", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move );
save.c:   if( obj->mana )
save.c:      fprintf( fp, "Mana        %d\n", obj->mana );
save.c:               ch->mana = fread_number( fp );
save.c:            KEY( "Mana", obj->mana, fread_number( fp ) );
skills.c:      if( !IS_NPC( ch ) && ch->mana < mana )
skills.c:            ch->mana -= mana / 2;
skills.c:            ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:         ch->mana -= mana;
skills.c:         ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:      ch->mana -= mana;
skills.c:      ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c: &&ch->in_room->area->weather->mana < -100 )
skills.c:if( ingred->mana > 0
skills.c: &&ingred->mana < ch->in_room->area->weather->mana )
skills.c:if( victim->mana < 50 )
skills.c:victim->mana -= 5;
skills.c:victim->in_room->area->weather->mana += 1;
skills.c:   if( !IS_NPC( ch ) && ch->mana < mana )
skills.c:      ch->mana -= ( mana / 2 );
skills.c:      ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:      ch->mana -= ( mana / 2 );
skills.c:      ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:   ch->mana -= mana;
skills.c:   ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:   if( !IS_NPC( ch ) && ch->mana < mana )
skills.c:      ch->mana -= ( mana / 2 );
skills.c:      ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:      ch->mana -= ( mana / 2 );
skills.c:      ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:   ch->mana -= mana;
skills.c:   ch->in_room->area->weather->mana += ( int )mana / 10;
skills.c:obj->mana += obj2->mana;
skills.c:      obj->mana /= div;
special.c:obj->mana += 1;
special.c:         obj->mana += 1;
special.c: &&ch->in_room->area->weather->mana < -100 )
special.c:if( ingred->mana > 0
special.c: &&ingred->mana < ch->in_room->area->weather->mana )
talent.c:ch->mana -= UMAX( 0, i );
talent.c:ch->in_room->area->weather->mana += ( int )i / 100;
talent.c:if( ch->mana < -1000 )
talent.c:TALENT( ch, TAL_CATALYSM ) + ch->in_room->area->weather->mana,
talent.c:victim->mana -= amt;
talent.c:ch->mana += amt;
talent.c:if( ch->mana <= 0 )
talent.c:ch->max_mana = UMAX( 20, ch->nation->mana * get_curr_int( ch ) + ch->base_mana );
talent.c:ch->mana = ch->max_mana;
talent.c:if( ch->mana <= 0 )
talent.c:victim->max_mana = UMAX( 20, victim->nation->mana * get_curr_int( victim ) + victim->base_mana );
talent.c:victim->mana = UMIN( victim->max_mana, victim->mana );
talent.c:if( ch->mana <= 0 )
talent.c:if( victim->mana < 100 )
talent.c:if( victim->mana < 100 )
talent.c:if( victim->mana < 50 )
talent.c:if( obj->mana < 500 )
talent.c:obj->mana -= 500;
talent.c:if( obj->mana < 500 )
talent.c:obj->mana -= 500;
talent.c:lose_hp( ch, obj->mana * 3 + ( obj->raw_mana / 30 ) );
talent.c:amt = ch->mana / magic;
talent.c:ch->mana = ch->max_mana + amt;
talent.c:ch->mana -= amt;
talent.c:victim->mana += amt;
talent.c:if( ch->mana < victim->perm_con * 10 )
talent.c:if( ch->mana - ( pMobIndex->perm_con * 50 ) < 0 )
talent.c:use_magic( ch, TAL_HEALING, ch->mana );
talent.c:if( obj->mana && ch->curr_talent[TAL_SEEKING] >= 40 )
talent.c:obj->mana );
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:if( obj->mana < amt )
talent.c:obj->mana -= amt;
update.c:            if( ch->mana < 0 )
update.c:               if( ch->mana < -1000 )
update.c:               check_rebirth( ch, ch->mana * -1 );
update.c:      if( ch->mana > 0 )
update.c:         ch->mana -= 100;
update.c:         ch->mana -= 30;
update.c:   i = number_range( 0, ch->in_room->area->weather->mana * 10 );
update.c:   ch->in_room->area->weather->mana -= ( int )i / 10;
update.c:   return UMIN( gain, ch->max_mana - ch->mana );
update.c:      if( ch->mana < 0 || IS_SET( ch->mood, MOOD_READY ) )
update.c:         if( ch->mana < ch->max_mana )
update.c:            ch->mana += mana_gain( ch );
update.c:         else if( ch->mana > ch->max_mana )
update.c:            lose_hp( ch, ( ch->mana - ch->max_mana ) );
update.c:            ch->mana = ch->max_mana;
update.c:         ch->max_mana = UMAX( 20, ch->nation->mana * get_curr_int( ch ) + ch->base_mana );
update.c:         obj->mana++;
update.c:            obj->mana++;
update.c:      dM += ( neigh->address->weather->mana - weather->mana ) / neigh_factor;
update.c:   weather->mana_vector += ( int )dM;
update.c:   weather->mana_vector = URANGE( -max_vector, weather->mana_vector, max_vector );
update.c:      pArea->weather->mana += pArea->weather->mana_vector;
update.c:         pArea->weather->mana += 50;
update.c:      pArea->weather->mana = URANGE( -limit, pArea->weather->mana, limit );
update.c:   mana = weath->mana;
update.c:   dM = weath->mana_vector;


then you kind of look for the stuff that deals with weather etc...
       
Post is unread #10 Sep 25, 2013, 8:14 pm
Go to the top of the page
Go to the bottom of the page

Remcon
Geomancer
GroupAdministrators
Posts1,858
JoinedJul 26, 2005

Remcon, 
I may not be up to the level you are but I can at least try to follow the path. I was only able to find 2.0, but alas I was at work and our webfilter catches a lot of sites. Kinda amazed they haven't hit smaugmuds yet! 

I'm willing to bet that they didn't change all that much from 2.0 to 3.0 however. Just look at how things are done in swr to swfote :) 

Geeze, since I've been showing up here I have this inkling to try to get my game up and running.... 

*walks off into the distance chanting 'One FOTE, two FOTE, where's all the FOTE's?' 

You do fine lol, yea I recall having a problem finding one i could download to start with. You could have downloaded one I have that has some bugs fixed and is on here.

Not sure on how many changes were done between the two but yea it can be massive lol.

You should :)
       
Post is unread #11 Sep 26, 2013, 7:39 am
Go to the top of the page
Go to the bottom of the page

mystickdreamer
Magician
GroupMembers
Posts128
JoinedApr 9, 2010

lol thanks ya'll

the reason I asked is because I'm porting everything over into smaugfuss1.9 and I was having problems adding mana to the weather system, since it's vastly different (imo)


just not sure how to do that


in the meantime I'm porting everything else over, boy it's a lot more than I thought lol
       
Post is unread #12 Oct 2, 2013, 5:49 pm
Go to the top of the page
Go to the bottom of the page

mystickdreamer
Magician
GroupMembers
Posts128
JoinedApr 9, 2010

OK so I'm stuck again.

I'm getting these errors
  Compiling o/birth.o....
birth.c: In function âconst char* find_token(const char*, const char*, int)â:
birth.c:69: error: assignment of read-only location â*(token + ((long unsigned int)((long unsigned int)n)))â
birth.c:73: error: assignment of read-only location â*(token + ((long unsigned int)((long unsigned int)n)))â
make[1]: *** [o/birth.o] Error 1
make: *** [all] Error 2



Here is the code
const char *find_token( const char *token, const char *str, int num )
{
   int i, count, found, n;
   count = 0;
   n = 0;
   token = STRALLOC( "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
   found = FALSE;
   for( i = 0; i < MAX_STRING_LENGTH; i++ )
   {
      if( str[i] == '\0' )
         break;
      if( str[i] == ',' )
      {
         count++;
         if( found )
            break;
      }
      if( count == num && !found )
      {
         found = TRUE;
      }
      if( found && str[i] != ',' )
      {
         token[n] = str[i];
         n++;
      }
   }
   token[n] = '\0';
   return token;
}
       
Post is unread #13 Oct 2, 2013, 6:08 pm
Go to the top of the page
Go to the bottom of the page

Remcon
Geomancer
GroupAdministrators
Posts1,858
JoinedJul 26, 2005

hmm and what is the reason for this code right off? I would say the problem is the const char *token is what it is complaining about. You shouldn't STRALLOC on a string like that either.
       
Post is unread #14 Oct 2, 2013, 11:34 pm
Go to the top of the page
Go to the bottom of the page

dbna2
Sorcerer
GroupMembers
Posts600
JoinedDec 2, 2008

and yeah I know that would be the simplest way to do things, but if I could figure out whats causing it, because it didn't used too then my life would be alot easier and wouldn't have to deal with players complaining.
       
Post is unread #15 Oct 3, 2013, 7:30 am
Go to the top of the page
Go to the bottom of the page

dbna2
Sorcerer
GroupMembers
Posts600
JoinedDec 2, 2008

whoops wrong thread my bad
       
Post is unread #16 Oct 3, 2013, 8:21 am
Go to the top of the page
Go to the bottom of the page

Quixadhal
Conjurer
GroupMembers
Posts398
JoinedMar 8, 2005

You are trying to modify a variable which was passed in as "const", namely token.
       
Post is unread #17 Oct 4, 2013, 9:52 am
Go to the top of the page
Go to the bottom of the page

mystickdreamer
Magician
GroupMembers
Posts128
JoinedApr 9, 2010

This is part of the character generator code

best I can figure from looking at the code

it's in birth.c in case you wanted to look at it,


is that it has to deal with eyes, hair, skin, etc


and I understand token is being passed as a constant then trying to be modified, but I don't understand how to fix it


       
Post is unread #18 Oct 4, 2013, 10:24 am
Go to the top of the page
Go to the bottom of the page

Quixadhal
Conjurer
GroupMembers
Posts398
JoinedMar 8, 2005

The first problem is, you're passing in a string called "token", but then you're throwing it away and trying to allocate a new one on top of it, which hides the value you were passed in... why pass in a value that you never use?

I'm not sure exactly what your code is supposed to do, but here's a before-coffee attempt at writing it differently. It is untested, of course. But the main thing is... why bother passing in token if you don't use it?

It seems to me like you could just use a system call for this as well... a loop around index() or strstr() perhaps...

char *find_token( const char *token, const char *str, int num )
{
    int found = 0;
    int count = 0;
    char * thing = STRALLOC( "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );

    for( char *s = str, char *t = thing; *s; s++ ) {
        if( *s )
            break;

        if( *s == ',' ) {
            count++;
            if( found )
                break;
        }

        if( count == num && !found )
            found = 1;

        if( found && *s != ',' ) {
            if( t > (thing + strlen(thing) - 1) ) {
                /* You need some error handling in case you run off the end of the string */
                fprintf( stderr, "Too many tokens found, fix me!\n" );
                abort();
            }
            *t = *s;
            t++;
        }
    }
    *t = '\0';
    return thing;
}
       
Pages:<< prev 1 next >>