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;
> }