亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? db.c

?? MUD服務(wù)器程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
    if ( iList == MAX_MEM_LIST )
    {
	bug( "Free_mem: size %d too large.", sMem );
	exit( 1 );
    }

    pMem = memset( pMem, 0, sMem );
    * ((void **) pMem) = rgFreeList[iList];
    rgFreeList[iList]  = pMem;

    return;
#endif
}



/*
 * Allocate some permanent memory.
 * Permanent memory is never freed,
 *   pointers into it may be copied safely.
 */
void *alloc_perm( int sMem )
{
    static char *pMemPerm;
    static int iMemPerm;
    void *pMem;

    while ( sMem % sizeof(long) != 0 )
	sMem++;
    if ( sMem > MAX_PERM_BLOCK )
    {
	bug( "Alloc_perm: %d too large.", sMem );
	exit( 1 );
    }

    if ( pMemPerm == NULL || iMemPerm + sMem > MAX_PERM_BLOCK )
    {
	iMemPerm = 0;
	if ( ( pMemPerm = calloc( 1, MAX_PERM_BLOCK ) ) == NULL )
	{
	    perror( "Alloc_perm" );
	    exit( 1 );
	}
    }

    pMem        = pMemPerm + iMemPerm;
    iMemPerm   += sMem;
    nAllocPerm += 1;
    sAllocPerm += sMem;
    return pMem;
}



/*
 * Duplicate a string into dynamic memory.
 * Fread_strings are read-only and shared.
 */
char *str_dup( const char *str )
{
    char *str_new;
#if 1 // %%%
    if ( str[0] == '\0' )
	return &str_empty[0];

    if ( str >= string_space && str < top_string )
	return (char *) str;
#endif
    str_new = alloc_mem( strlen(str) + 1 );
    strcpy( str_new, str );
    return str_new;
}



/*
 * Free a string.
 * Null is legal here to simplify callers.
 * Read-only shared strings are not touched.
 */
void free_string( char *pstr )
{
    if ( pstr == NULL
    ||   pstr == &str_empty[0]
    || ( pstr >= string_space && pstr < top_string ) )
	return;

    free_mem( pstr, strlen(pstr) + 1 );
    return;
}


//#if 0
void do_areas( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
    AREA_DATA *pArea1;
    AREA_DATA *pArea2;
    int iArea;
    int iAreaHalf;

    iAreaHalf = (top_area + 1) / 2;
    pArea1    = area_first;
    pArea2    = area_first;
    for ( iArea = 0; iArea < iAreaHalf; iArea++ )
	pArea2 = pArea2->next;

    for ( iArea = 0; iArea < iAreaHalf; iArea++ )
    {
	sprintf( buf, "%-39s%-39s\n\r",
	    pArea1->name, (pArea2 != NULL) ? pArea2->name : "" );
	send_to_char( buf, ch );
	pArea1 = pArea1->next;
	if ( pArea2 != NULL )
	    pArea2 = pArea2->next;
    }

    return;
}



void do_memory( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];

    sprintf( buf, "Affects %5d\n\r", top_affect    ); send_to_char( buf, ch );
    sprintf( buf, "Areas   %5d\n\r", top_area      ); send_to_char( buf, ch );
    sprintf( buf, "ExDes   %5d\n\r", top_ed        ); send_to_char( buf, ch );
    sprintf( buf, "Exits   %5d\n\r", top_exit      ); send_to_char( buf, ch );
    sprintf( buf, "Helps   %5d\n\r", top_help      ); send_to_char( buf, ch );
    sprintf( buf, "Mobs    %5d\n\r", top_mob_index ); send_to_char( buf, ch );
    sprintf( buf, "Objs    %5d\n\r", top_obj_index ); send_to_char( buf, ch );
	 sprintf( buf, "Resets  %5d\n\r", top_reset     ); send_to_char( buf, ch );
	 sprintf( buf, "Rooms   %5d\n\r", top_room      ); send_to_char( buf, ch );
	 sprintf( buf, "Shops   %5d\n\r", top_shop      ); send_to_char( buf, ch );

	 sprintf( buf, "Strings %5d strings of %7d bytes (max %d).\n\r",
	nAllocString, sAllocString, MAX_STRING );
	 send_to_char( buf, ch );

	 sprintf( buf, "Perms   %5d blocks  of %7d bytes.\n\r",
	nAllocPerm, sAllocPerm );
	 send_to_char( buf, ch );

	 return;
}
//#endif


/*
 * Stick a little fuzz on a number.
 */
int number_fuzzy( int number )
{
    switch ( number_bits( 2 ) )
    {
    case 0:  number -= 1; break;
    case 3:  number += 1; break;
    }

    return UMAX( 1, number );
}



/*
 * Generate a random number.
 */
int number_range( int from, int to )
{
    int power;
    int number;

    if ( ( to = to - from + 1 ) <= 1 )
	return from;

    for ( power = 2; power < to; power <<= 1 )
	;

    while ( ( number = number_mm( ) & (power - 1) ) >= to )
	;

    return from + number;
}



/*
 * Generate a percentile roll.
 */
int number_percent( void )
{
    int percent;

    while ( ( percent = number_mm( ) & (128-1) ) > 99 )
	;

    return 1 + percent;
}



/*
 * Generate a random door.
 */
int number_door( void )
{
    int door;

    while ( ( door = number_mm( ) & (8-1) ) > 5 )
	;

    return door;
}



int number_bits( int width )
{
    return number_mm( ) & ( ( 1 << width ) - 1 );
}



/*
 * I've gotten too many bad reports on OS-supplied random number generators.
 * This is the Mitchell-Moore algorithm from Knuth Volume II.
 * Best to leave the constants alone unless you've read Knuth.
 * -- Furey
 */
static	int	rgiState[2+55];

void init_mm( )
{
    int *piState;
    int iState;

    piState	= &rgiState[2];

    piState[-2]	= 55 - 55;
    piState[-1]	= 55 - 24;

    piState[0]	= ((int) current_time) & ((1 << 30) - 1);
    piState[1]	= 1;
    for ( iState = 2; iState < 55; iState++ )
    {
	piState[iState] = (piState[iState-1] + piState[iState-2])
			& ((1 << 30) - 1);
    }
    return;
}



int number_mm( void )
{
    int *piState;
    int iState1;
    int iState2;
    int iRand;

    piState		= &rgiState[2];
    iState1	 	= piState[-2];
    iState2	 	= piState[-1];
    iRand	 	= (piState[iState1] + piState[iState2])
			& ((1 << 30) - 1);
    piState[iState1]	= iRand;
    if ( ++iState1 == 55 )
	iState1 = 0;
    if ( ++iState2 == 55 )
	iState2 = 0;
    piState[-2]		= iState1;
    piState[-1]		= iState2;
    return iRand >> 6;
}



/*
 * Roll some dice.
 */
int dice( int number, int size )
{
    int idice;
    int sum;

    switch ( size )
    {
    case 0: return 0;
    case 1: return number;
    }

    for ( idice = 0, sum = 0; idice < number; idice++ )
	sum += number_range( 1, size );

    return sum;
}



/*
 * Simple linear interpolation.
 */
int interpolate( int level, int value_00, int value_32 )
{
    return value_00 + level * (value_32 - value_00) / 32;
}



/*
 * Removes the tildes from a string.
 * Used for player-entered strings that go into disk files.
 */
void smash_tilde( char *str )
{
    for ( ; *str != '\0'; str++ )
    {
	if ( *str == '~' )
	    *str = '-';
    }

    return;
}



/*
 * Compare strings, case insensitive.
 * Return TRUE if different
 *   (compatibility with historical functions).
 */
bool str_cmp( const char *astr, const char *bstr )
{
    if ( astr == NULL )
    {
	bug( "Str_cmp: null astr.", 0 );
	return TRUE;
    }

    if ( bstr == NULL )
    {
	bug( "Str_cmp: null bstr.", 0 );
	return TRUE;
    }

    for ( ; *astr || *bstr; astr++, bstr++ )
    {
	if ( LOWER(*astr) != LOWER(*bstr) )
	    return TRUE;
    }

    return FALSE;
}



/*
 * Compare strings, case insensitive, for prefix matching.
 * Return TRUE if astr not a prefix of bstr
 *   (compatibility with historical functions).
 */
bool str_prefix( const char *astr, const char *bstr )
{
    if ( astr == NULL )
    {
	bug( "Strn_cmp: null astr.", 0 );
	return TRUE;
    }

    if ( bstr == NULL )
    {
	bug( "Strn_cmp: null bstr.", 0 );
	return TRUE;
    }

    for ( ; *astr; astr++, bstr++ )
    {
	if ( LOWER(*astr) != LOWER(*bstr) )
	    return TRUE;
    }

    return FALSE;
}



/*
 * Compare strings, case insensitive, for match anywhere.
 * Returns TRUE is astr not part of bstr.
 *   (compatibility with historical functions).
 */
bool str_infix( const char *astr, const char *bstr )
{
    int sstr1;
    int sstr2;
    int ichar;
    char c0;

    if ( ( c0 = LOWER(astr[0]) ) == '\0' )
	return FALSE;

    sstr1 = strlen(astr);
    sstr2 = strlen(bstr);

    for ( ichar = 0; ichar <= sstr2 - sstr1; ichar++ )
    {
	if ( c0 == LOWER(bstr[ichar]) && !str_prefix( astr, bstr + ichar ) )
	    return FALSE;
    }

    return TRUE;
}



/*
 * Compare strings, case insensitive, for suffix matching.
 * Return TRUE if astr not a suffix of bstr
 *   (compatibility with historical functions).
 */
bool str_suffix( const char *astr, const char *bstr )
{
    int sstr1;
    int sstr2;

    sstr1 = strlen(astr);
    sstr2 = strlen(bstr);
    if ( sstr1 <= sstr2 && !str_cmp( astr, bstr + sstr2 - sstr1 ) )
	return FALSE;
    else
	return TRUE;
}



/*
 * Returns an initial-capped string.
 */
char *capitalize( const char *str )
{
    static char strcap[MAX_STRING_LENGTH];
    int i;

    for ( i = 0; str[i] != '\0'; i++ )
	strcap[i] = LOWER(str[i]);
    strcap[i] = '\0';
    strcap[0] = UPPER(strcap[0]);
    return strcap;
}



/*
 * Append a string to a file.
 */
void append_file( CHAR_DATA *ch, char *file, char *str )
{
    FILE *fp;

    if ( IS_NPC(ch) || str[0] == '\0' )
	return;

    fclose( fpReserve );
    if ( ( fp = fopen( file, "a" ) ) == NULL )
    {
	perror( file );
	send_to_char( "Could not open the file!\n\r", ch );
    }
    else
    {
	fprintf( fp, "[%5d] %s: %s\n",
	    ch->in_room ? ch->in_room->vnum : 0, ch->name, str );
	fclose( fp );
    }

    fpReserve = fopen( NULL_FILE, "r" );
    return;
}


#if 0
/*
 * Reports a bug.
 */
void bug( const char *str, int param )
{
    char buf[MAX_STRING_LENGTH];
    FILE *fp;

    if ( fpArea != NULL )
    {
	int iLine;
	int iChar;

	if ( fpArea == stdin )
	{
	    iLine = 0;
	}
	else
	{
	    iChar = ftell( fpArea );
	    fseek( fpArea, 0, 0 );
	    for ( iLine = 0; ftell( fpArea ) < iChar; iLine++ )
	    {
		while ( getc( fpArea ) != '\n' )
		    ;
	    }
	    fseek( fpArea, iChar, 0 );
	}

	sprintf( buf, "[*****] FILE: %s LINE: %d", strArea, iLine );
	log_string( buf );

	if ( ( fp = fopen( "shutdown.txt", "a" ) ) != NULL )
	{
	    fprintf( fp, "[*****] %s\n", buf );
	    fclose( fp );
	}
    }

    strcpy( buf, "[*****] BUG: " );
    sprintf( buf + strlen(buf), str, param );
    log_string( buf );

    fclose( fpReserve );
    if ( ( fp = fopen( BUG_FILE, "a" ) ) != NULL )
    {
	fprintf( fp, "%s\n", buf );
	fclose( fp );
    }
    fpReserve = fopen( NULL_FILE, "r" );

    MessageBox(0, buf, "Merc2.2 server", MB_ICONHAND|MB_OK);
    DebugBreak();

    return;
}
#endif

#ifdef SINGLEUSER
/*
 * Writes a string to the log.
 */
void log_string( const char *str )
{
    char *strtime;

    strtime                    = ctime( &current_time );
    strtime[strlen(strtime)-1] = '\0';
    fprintf( stderr, "%s :: %s\n", strtime, str );
    return;
}
#endif


/*
 * This function is here to aid in debugging.
 * If the last expression in a function is another function call,
 *   gcc likes to generate a JMP instead of a CALL.
 * This is called "tail chaining."
 * It hoses the debugger call stack for that call.
 * So I make this the last call in certain critical functions,
 *   where I really need the call stack to be right for debugging!
 *
 * If you don't understand this, then LEAVE IT ALONE.
 * Don't remove any calls to tail_chain anywhere.
 *
 * -- Furey
 */
void tail_chain( void )
{
    return;
}

/*
 * MOBprogram code block
*/
/*

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区不卡视频| 日韩欧美国产高清| 亚洲欧美日韩久久精品| 色又黄又爽网站www久久| 亚洲一区在线电影| 欧美一区二区精美| 国产米奇在线777精品观看| 国产拍欧美日韩视频二区| 成人激情av网| 亚洲一区中文在线| 日韩欧美国产高清| 成人成人成人在线视频| 亚洲综合一二区| 91精品国产综合久久久久久| 精品亚洲国内自在自线福利| 国产欧美一区二区精品性色 | 日本午夜精品视频在线观看 | 亚洲成人你懂的| 日韩精品专区在线影院观看 | 国产主播一区二区三区| 中文字幕av一区二区三区 | 欧美精品日韩一本| 激情综合亚洲精品| 亚洲丝袜另类动漫二区| 欧美高清你懂得| 国产91精品一区二区麻豆网站| 亚洲激情图片小说视频| 日韩免费观看高清完整版| 不卡电影一区二区三区| 日本欧美肥老太交大片| 国产精品传媒在线| 午夜精品国产更新| 国产成人av自拍| 亚洲精品一区二区三区精华液 | 亚洲精品中文在线| 精品人在线二区三区| 成人免费观看av| 日韩国产精品91| 国产精品伦一区二区三级视频| 欧美日韩高清一区二区| 成人91在线观看| 久久99精品久久只有精品| 亚洲综合久久av| 国产精品色一区二区三区| 日韩一区二区免费高清| 色综合久久久久久久久久久| 国产一区免费电影| 日韩主播视频在线| 亚洲免费视频成人| 欧美激情在线看| 精品国产乱码久久久久久久| 欧美色手机在线观看| 成人av在线看| 国内精品久久久久影院色| 午夜国产精品一区| 一区二区三区四区精品在线视频| 久久久久国产精品免费免费搜索| 欧美久久久久中文字幕| 91成人在线免费观看| 99精品视频在线免费观看| 国产**成人网毛片九色 | 在线播放欧美女士性生活| 91在线观看美女| 床上的激情91.| 国产福利不卡视频| 国产经典欧美精品| 国产高清久久久| 国产乱人伦精品一区二区在线观看| 免费成人av在线| 日韩精品一二三| 蜜臀av一级做a爰片久久| 日韩av成人高清| 日本人妖一区二区| 麻豆成人av在线| 麻豆国产一区二区| 精品一区二区av| 国产精品一区一区| 成人永久免费视频| 99久久99久久精品国产片果冻| 99久久久精品| 欧美亚州韩日在线看免费版国语版| 欧洲中文字幕精品| 欧美浪妇xxxx高跟鞋交| 欧美一级日韩免费不卡| 精品日韩欧美一区二区| 国产欧美中文在线| 亚洲欧洲日韩av| 一二三四社区欧美黄| 午夜影院久久久| 日本不卡在线视频| 国模无码大尺度一区二区三区| 国产成人免费视频精品含羞草妖精| 成人av电影在线网| 色综合久久综合网欧美综合网| 欧美色视频在线| 日韩欧美另类在线| 亚洲国产精品av| 一级日本不卡的影视| 天天操天天干天天综合网| 久久精品国产第一区二区三区| 国产999精品久久久久久| 99精品久久免费看蜜臀剧情介绍| 色视频一区二区| 欧美一区二区视频观看视频| 久久视频一区二区| 亚洲人成7777| 日韩av在线发布| www.色精品| 717成人午夜免费福利电影| 精品1区2区在线观看| 中文字幕中文字幕一区二区| 亚洲国产美国国产综合一区二区| 麻豆成人久久精品二区三区小说| 成人一区二区三区视频| 91精品国产综合久久香蕉麻豆 | 午夜精品aaa| 狠狠狠色丁香婷婷综合激情| 成人高清免费观看| 欧美一区三区四区| 国产精品国产a| 麻豆精品久久精品色综合| 91黄色小视频| 久久精品视频在线免费观看| 亚洲成人一区二区| 成人午夜在线免费| 日韩免费在线观看| 一区二区不卡在线播放| 国产高清精品久久久久| 在线成人av影院| 亚洲精品国产第一综合99久久| 国内久久精品视频| 91 com成人网| 亚洲日本护士毛茸茸| 国产麻豆视频一区二区| 欧美性做爰猛烈叫床潮| 国产精品久久久久一区二区三区共| 麻豆久久一区二区| 欧美日韩另类一区| 亚洲日本欧美天堂| 成人黄色av电影| 2022国产精品视频| 免费高清在线视频一区·| 欧美中文字幕不卡| 亚洲精品国产精品乱码不99| 大尺度一区二区| 国产日韩欧美电影| 韩国一区二区视频| 日韩免费看的电影| 免费成人性网站| 91精品国产综合久久国产大片| 一区二区欧美在线观看| 99久久er热在这里只有精品15| 久久久国产一区二区三区四区小说 | 图片区小说区国产精品视频| 色狠狠一区二区三区香蕉| 中文在线一区二区| 成人激情开心网| 国产精品网曝门| 国产高清精品在线| 国产女同性恋一区二区| 国产成人啪免费观看软件| 国产日韩精品一区二区三区| 国产综合久久久久影院| 久久久久久久久久久久久久久99 | 日韩国产一区二| 欧美日韩国产小视频| 午夜不卡av免费| 日韩午夜电影在线观看| 久久狠狠亚洲综合| 久久伊人中文字幕| 国产精品主播直播| 国产精品国产三级国产普通话蜜臀 | 久久se这里有精品| 日韩三级中文字幕| 国产一区二区三区视频在线播放| 精品久久久久久综合日本欧美| 老司机午夜精品99久久| 亚洲精品一区二区三区福利| 国产不卡视频在线播放| 中文字幕一区二| 欧美综合一区二区| 首页综合国产亚洲丝袜| 日韩欧美一区电影| 国产乱理伦片在线观看夜一区 | 亚洲精品亚洲人成人网| 欧美久久久久久蜜桃| 国产在线精品国自产拍免费| 国产日韩欧美高清在线| 色呦呦网站一区| 日本怡春院一区二区| 中文字幕av一区二区三区| 在线一区二区三区四区| 免费在线一区观看| 日本一区二区久久| 在线观看91视频| 激情综合色丁香一区二区| 中文字幕永久在线不卡| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品一色哟哟哟| 玉米视频成人免费看|