77a78,79 > MPROG_CODE * mprog_list; > 222a225 > void load_mobprogs args( ( FILE *fp ) ); 224a228 > void fix_mobprogs args( ( void ) ); 349a354 > else if ( !str_cmp( word, "MOBPROGS" ) ) load_mobprogs(fpArea); 378a384 > fix_mobprogs( ); 1164a1171,1250 > /* > * Load mobprogs section > */ > void load_mobprogs( FILE *fp ) > { > MPROG_CODE *pMprog; > > if ( area_last == NULL ) > { > bug( "Load_mobprogs: no #AREA seen yet.", 0 ); > exit( 1 ); > } > > for ( ; ; ) > { > sh_int vnum; > char letter; > > letter = fread_letter( fp ); > if ( letter != '#' ) > { > bug( "Load_mobprogs: # not found.", 0 ); > exit( 1 ); > } > > vnum = fread_number( fp ); > if ( vnum == 0 ) > break; > > fBootDb = FALSE; > if ( get_mprog_index( vnum ) != NULL ) > { > bug( "Load_mobprogs: vnum %d duplicated.", vnum ); > exit( 1 ); > } > fBootDb = TRUE; > > pMprog = alloc_perm( sizeof(*pMprog) ); > pMprog->vnum = vnum; > pMprog->code = fread_string( fp ); > if ( mprog_list == NULL ) > mprog_list = pMprog; > else > { > pMprog->next = mprog_list; > mprog_list = pMprog; > } > } > return; > } > > /* > * Translate mobprog vnums pointers to real code > */ > void fix_mobprogs( void ) > { > MOB_INDEX_DATA *pMobIndex; > MPROG_LIST *list; > MPROG_CODE *prog; > int iHash; > > for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) > { > for ( pMobIndex = mob_index_hash[iHash]; > pMobIndex != NULL; > pMobIndex = pMobIndex->next ) > { > for( list = pMobIndex->mprogs; list != NULL; list = list->next ) > { > if ( ( prog = get_mprog_index( list->vnum ) ) != NULL ) > list->code = prog->code; > else > { > bug( "Fix_mobprogs: code vnum %d not found.", list->vnum ); > exit( 1 ); > } > } > } > } > } 1538a1625 > mob->mprog_target = NULL; 2139a2227,2237 > > MPROG_CODE *get_mprog_index( int vnum ) > { > MPROG_CODE *prg; > for( prg = mprog_list; prg; prg = prg->next ) > { > if ( prg->vnum == vnum ) > return( prg ); > } > return NULL; > }