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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stand_lib.c

?? Linux0.01內核分析與操作系統設計 隨書源代碼
?? C
字號:
size_t strlen(const char *str)
{
    size_t ret_val;

    for(ret_val = 0; *str != '\0'; str++)
        ret_val++;
    return ret_val;
}

int strcmp(const char *str1, const char *str2)
{
    while ((*str2 != '\0') && (*str1 == *str2))
    {
        str1++;
        str2++;
    }
    return *str1 -  *str2;
}

const char *strstr(const char *s1, const char *s2)
{
    const char *start_s1 = NULL;
    const char *in_s2 = NULL;

    for( ; *s1 != '\0'; s1++)
    {
        if(start_s1 == NULL)
        {
            /* first char of match */
            if(*s1 == *s2)
            {
                /* remember start of matching substring in s1 */
                start_s1 = s1;
                in_s2 = s2 + 1;
                /* done already? */
                if(*in_s2 == '\0')
                    return start_s1;
            }
            /*	continued mis-match
            else
            	nothing ; */
        }
        else
        {
            /* continued match */
            if(*s1 == *in_s2)
            {
                in_s2++;
                /* done */
                if(*in_s2 == '\0')
                    return start_s1;
            }
            else
                /* first char of mis-match */
                start_s1 = NULL;
        }
    }
    return NULL;
}

void *memcpy(void *dst_ptr, const void *src_ptr, size_t count)
{
    const char *src = (const char *)src_ptr;
    char *dst = (char *)dst_ptr;
    void *ret_val = dst_ptr;

    for(; count != 0; count--)
    {
        *dst = *src;
        dst++;
        src++;
    }
    return ret_val;
}

void *memmove(void *dst_p, const void *src_p, size_t count)
{
    const char *src = (const char *)src_p;
    char *dst = (char *)dst_p;

    if(dst_p < src_p)	/* copy up */
    {
        for(; count != 0; count--)
            *dst++ = *src++;
    }
    else			/* copy down */
    {
        dst += (count - 1);
        src += (count - 1);
        for(; count != 0; count--)
            *dst-- = *src--;
    }
    return dst_p;
}

int fputc(int c, FILE *stream)
{
    char one_char;
    int ret_val;

    ret_val = c;
    if(stream->flags == _IONBF || stream->size == 0) /* unbuffered */
    {
        one_char = (char)c;
        if(write(stream->handle, &one_char, 1) != 1)
            ret_val = EOF;
    }
    else										/* buffered */
    {
        if(stream->room == 0)
        {
            if(fflush(stream) != 0)
                return EOF;
        }
        *stream->buf_ptr = (char)c;
        stream->buf_ptr++;
        stream->room--;
        if((stream->flags & _IOLBF) && (c == '\n'))
        {
            if(fflush(stream) != 0)
                ret_val = EOF;
        }
    }
    return ret_val;
}

int fflush(FILE *stream)
{
    int bytes_to_write, ret_val;

    ret_val = 0;
    if(stream->size != 0)						/* buffered? */
    {
        bytes_to_write = stream->size - stream->room;
        if(bytes_to_write != 0)
        {
            if(write(stream->handle, stream->buf_base,
                     bytes_to_write) != bytes_to_write)
                ret_val = EOF;
            stream->buf_ptr = stream->buf_base;
            stream->room = stream->size;
        }
    }
    return ret_val;
}


#include <_printf.h>		/* fnptr_t */
#include <string.h>			/* strlen() */
#include <stdarg.h>		/* va_list, va_arg() */
/*******************************************************************
	name:	do_printf
	action:	minimal subfunction for ?printf, calls function
		'fn' with arg 'ptr' for each character to be output
	returns:total number of characters output

	%[flag][width][.prec][mod][conv]
	flag:	-	left justify, pad right w/ blanks	DONE
		0	pad left w/ 0 for numerics		DONE
		+	always print sign, + or -		xxx
		' '	(blank)					xxx
		#	(???)					xxx

	width:		(field width)				DONE

	prec:		(precision)				xxx

	conv:	d,i	decimal int				DONE
		u	decimal unsigned			DONE
		o	octal					DONE
		x,X	hex					DONE
		f,e,g,E,G float					xxx
		c	char					DONE
		s	string					DONE
		p	ptr					DONE

	mod:	N	near ptr				DONE
		F	far ptr					xxx
		h	short (16-bit) int			DONE
		l	long (32-bit) int			DONE
		L	long long (64-bit) int			xxx
*******************************************************************/
/* flags used in processing format string */
#define		PR_LJ	0x01	/* left justify */
#define		PR_CA	0x02	/* use A-F instead of a-f for hex */
#define		PR_SG	0x04	/* signed numeric conversion (%d vs. %u) */
#define		PR_32	0x08	/* long (32-bit) numeric conversion */
#define		PR_16	0x10	/* short (16-bit) numeric conversion */
#define		PR_WS	0x20	/* PR_SG set and num was < 0 */
#define		PR_LZ	0x40	/* pad left with '0' instead of ' ' */
#define		PR_FP	0x80	/* pointers are far */

/* largest number handled is 2^32-1, lowest radix handled is 8.
2^32-1 in base 8 has 11 digits (add 5 for trailing NUL and for slop) */
#define		PR_BUFLEN	16

int do_printf(const char *fmt, va_list args, fnptr_t fn, void *ptr)
{
    unsigned char state, flags, radix, actual_wd;
    unsigned short count, given_wd;
    char *where, buf[PR_BUFLEN];
    long num;

    state = flags = count = given_wd = 0;
    /* begin scanning format specifier list */
    for(; *fmt; fmt++)
    {
        switch(state)
        {
            /* STATE 0: AWAITING % */
        case 0:
            if(*fmt != '%')	/* not %... */
            {
                fn(*fmt, &ptr);	/* ...just echo it */
                count++;
                break;
            }
            /* found %, get next char and advance state to check if next char is a flag */
            state++;
            fmt++;
            /* FALL THROUGH */
            /* STATE 1: AWAITING FLAGS (%-0) */
        case 1:
            if(*fmt == '%')	/* %% */
            {
                fn(*fmt, &ptr);
                count++;
                state = flags = given_wd = 0;
                break;
            }
            if(*fmt == '-')
            {
                if(flags & PR_LJ)/* %-- is illegal */
                    state = flags = given_wd = 0;
                else
                    flags |= PR_LJ;
                break;
            }
            /* not a flag char: advance state to check if it's field width */
            state++;
            /* check now for '%0...' */
            if(*fmt == '0')
            {
                flags |= PR_LZ;
                fmt++;
            }
            /* FALL THROUGH */
            /* STATE 2: AWAITING (NUMERIC) FIELD WIDTH */
        case 2:
            if(*fmt >= '0' && *fmt <= '9')
            {
                given_wd = 10 * given_wd +
                           (*fmt - '0');
                break;
            }
            /* not field width: advance state to check if it's a modifier */
            state++;
            /* FALL THROUGH */
            /* STATE 3: AWAITING MODIFIER CHARS (FNlh) */
        case 3:
            if(*fmt == 'F')
            {
                flags |= PR_FP;
                break;
            }
            if(*fmt == 'N')
                break;
            if(*fmt == 'l')
            {
                flags |= PR_32;
                break;
            }
            if(*fmt == 'h')
            {
                flags |= PR_16;
                break;
            }
            /* not modifier: advance state to check if it's a conversion char */
            state++;
            /* FALL THROUGH */
            /* STATE 4: AWAITING CONVERSION CHARS (Xxpndiuocs) */
        case 4:
            where = buf + PR_BUFLEN - 1;
            *where = '\0';
            switch(*fmt)
            {
            case 'X':
                flags |= PR_CA;
                /* FALL THROUGH */
                /* xxx - far pointers (%Fp, %Fn) not yet supported */
            case 'x':
            case 'p':
            case 'n':
                radix = 16;
                goto DO_NUM;
            case 'd':
            case 'i':
                flags |= PR_SG;
                /* FALL THROUGH */
            case 'u':
                radix = 10;
                goto DO_NUM;
            case 'o':
                radix = 8;
                /* load the value to be printed. l=long=32 bits: */
DO_NUM:				if(flags & PR_32)
                num = va_arg(args, unsigned long);
                /* h=short=16 bits (signed or unsigned) */
                else if(flags & PR_16)
                {
                    if(flags & PR_SG)
                        num = va_arg(args, short);
                    else
                        num = va_arg(args, unsigned short);
                }
                /* no h nor l: sizeof(int) bits (signed or unsigned) */
                else
                {
                    if(flags & PR_SG)
                        num = va_arg(args, int);
                    else
                        num = va_arg(args, unsigned int);
                }
                /* take care of sign */
                if(flags & PR_SG)
                {
                    if(num < 0)
                    {
                        flags |= PR_WS;
                        num = -num;
                    }
                }
                /* convert binary to octal/decimal/hex ASCII
                OK, I found my mistake. The math here is _always_ unsigned */
                do
                {
                    unsigned long temp;

                    temp = (unsigned long)num % radix;
                    where--;
                    if(temp < 10)
                        *where = temp + '0';
                    else if(flags & PR_CA)
                        *where = temp - 10 + 'A';
                    else
                        *where = temp - 10 + 'a';
                    num = (unsigned long)num / radix;
                }
                while(num != 0);
                goto EMIT;
            case 'c':
                /* disallow pad-left-with-zeroes for %c */
                flags &= ~PR_LZ;
                where--;
                *where = (char)va_arg(args, char);
                actual_wd = 1;
                goto EMIT2;
            case 's':
                /* disallow pad-left-with-zeroes for %s */
                flags &= ~PR_LZ;
                where = va_arg(args, char *);
EMIT:
                actual_wd = strlen(where);
                if(flags & PR_WS)
                    actual_wd++;
                /* if we pad left with ZEROES, do the sign now */
                if((flags & (PR_WS | PR_LZ)) ==
                        (PR_WS | PR_LZ))
                {
                    fn('-', &ptr);
                    count++;
                }
                /* pad on left with spaces or zeroes (for right justify) */
EMIT2:				if((flags & PR_LJ) == 0)
                {
                    while(given_wd > actual_wd)
                    {
                        fn(flags & PR_LZ ? '0' :
                           ' ', &ptr);
                        count++;
                        given_wd--;
                    }
                }
                /* if we pad left with SPACES, do the sign now */
                if((flags & (PR_WS | PR_LZ)) == PR_WS)
                {
                    fn('-', &ptr);
                    count++;
                }
                /* emit string/char/converted number */
                while(*where != '\0')
                {
                    fn(*where++, &ptr);
                    count++;
                }
                /* pad on right with spaces (for left justify) */
                if(given_wd < actual_wd)
                    given_wd = 0;
                else given_wd -= actual_wd;
                for(; given_wd; given_wd--)
                {
                    fn(' ', &ptr);
                    count++;
                }
                break;
            default:
                break;
            }
        default:
            state = flags = given_wd = 0;
            break;
        }
    }
    return count;
}

#if 0 /* testing */
int vsprintf_help(char c, void **ptr)
{
    char *dst;

    dst = *ptr;
    *dst++ = c;
    *ptr = dst;
    return 0 ;
}
int vsprintf(char *buffer, const char *fmt, va_list args)
{
    int ret_val;

    ret_val = do_printf(fmt, args, vsprintf_help, (void *)buffer);
    buffer[ret_val] = '\0';
    return ret_val;
}
int sprintf(char *buffer, const char *fmt, ...)
{
    va_list args;
    int ret_val;

    va_start(args, fmt);
    ret_val = vsprintf(buffer, fmt, args);
    va_end(args);
    return ret_val;
}

int vprintf_help(char c, void **ptr)
{
    putchar(c);
    return 0 ;
}
int vprintf(const char *fmt, va_list args)
{
    return do_printf(fmt, args, vprintf_help, NULL);
}

int printf(const char *fmt, ...)
{
    va_list args;
    int ret_val;

    va_start(args, fmt);
    ret_val = vprintf(fmt, args);
    va_end(args);
    return ret_val;
}

int main(void)
{
    char buf[64];

    sprintf(buf, "%u score and %i years ago...\n", 4, -7);
    puts(buf);

    sprintf(buf, "-1L == 0x%lX == octal %lo\n", -1L, -1L);
    puts(buf);

    printf("<%-08s> and <%08s> justified strings\n", "left", "right");
    return 0;
}
#endif

unsigned _seed;
unsigned rand(void) /* stdlib.h */
{
    if(_seed == 0)
        _seed = 1;
    if((((_seed << 3) ^ _seed) & 0x80000000L) != 0)
        _seed = (_seed << 1) | 1;
    else
        _seed <<= 1;
    return _seed - 1;
}

extern unsigned _seed; /* in rand.c */
void srand(unsigned new_seed) /* stdlib.h */
{
    _seed = new_seed;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区二区欧美| 亚洲你懂的在线视频| 樱桃视频在线观看一区| 韩国精品主播一区二区在线观看 | 亚洲少妇30p| 蜜臂av日日欢夜夜爽一区| 92精品国产成人观看免费| 欧美大肚乱孕交hd孕妇| 一区二区三区四区视频精品免费| 国产精品一区二区久久不卡 | 色欧美88888久久久久久影院| 欧美精品一区二| 日本不卡一区二区| 欧日韩精品视频| 国产精品久99| 懂色av一区二区三区蜜臀| 日韩欧美中文一区二区| 亚洲一区二区三区三| 91老师国产黑色丝袜在线| 国产日产欧美一区| 狠狠色丁香久久婷婷综| 欧美一区二视频| 亚洲国产精品麻豆| 色综合久久天天综合网| 国产精品福利一区二区| 粉嫩绯色av一区二区在线观看 | av资源站一区| 国产三级久久久| 国模无码大尺度一区二区三区| 91精品国产一区二区| 天堂蜜桃一区二区三区| 欧美中文一区二区三区| 亚洲精品国产视频| 91年精品国产| 亚洲日本青草视频在线怡红院| 成年人网站91| 国产精品久久久久久久久久免费看 | 国产亚洲综合av| 国产精品一区一区| 国产欧美一区二区精品婷婷| 国产乱人伦偷精品视频不卡| 久久免费国产精品| 国产成人av影院| 欧美激情在线观看视频免费| 粉嫩av一区二区三区在线播放 | 欧美日韩一区成人| 亚洲444eee在线观看| 欧美精品亚洲一区二区在线播放| 日韩中文字幕91| 91精品国产综合久久蜜臀| 日日夜夜一区二区| 日韩亚洲欧美成人一区| 久久超级碰视频| 久久综合色之久久综合| 国产不卡视频在线观看| 中文天堂在线一区| 色欧美乱欧美15图片| 亚洲午夜激情网页| 欧美一区二区三区思思人| 久久精品久久精品| 久久久国产精华| k8久久久一区二区三区| 亚洲精品日韩专区silk| 欧美精品在线一区二区| 奇米影视一区二区三区| 久久久国产精品不卡| 99视频一区二区| 亚洲一区精品在线| 日韩欧美中文字幕精品| 国产a级毛片一区| 亚洲精品日日夜夜| 欧美一区二区三区影视| 国产成人三级在线观看| 亚洲视频一区在线| 欧美妇女性影城| 国产一区二区在线电影| 国产精品狼人久久影院观看方式| 色婷婷av久久久久久久| 五月婷婷色综合| 久久亚洲精品小早川怜子| 99国产精品久久久| 日本视频一区二区三区| 欧美激情一区二区在线| 欧美亚洲高清一区| 精品一区二区久久久| 1000精品久久久久久久久| 欧美日韩精品欧美日韩精品| 国内精品嫩模私拍在线| 亚洲欧美另类久久久精品| 欧美一区二区三区在线看| 成人免费毛片片v| 午夜亚洲国产au精品一区二区 | 欧美体内she精高潮| 极品美女销魂一区二区三区免费| 中文字幕一区在线| 3d动漫精品啪啪一区二区竹菊| 国产精品亚洲一区二区三区在线| 亚洲精品国产无天堂网2021 | 欧美日韩综合不卡| 国产精品综合一区二区三区| 亚洲一区在线看| 久久免费的精品国产v∧| 欧美无乱码久久久免费午夜一区| 国产剧情在线观看一区二区| 一区二区三区加勒比av| 久久免费视频色| 在线成人高清不卡| 99re免费视频精品全部| 美女网站色91| 亚洲综合视频在线观看| 久久九九影视网| 欧美日韩国产一级片| 成人av电影免费在线播放| 美女看a上一区| 亚洲一区电影777| 国产精品午夜久久| 久久综合丝袜日本网| 制服.丝袜.亚洲.中文.综合| 91原创在线视频| 国产精品一区二区91| 蜜臀av一级做a爰片久久| 亚洲日本护士毛茸茸| 久久影院视频免费| 91精品国产综合久久久久| 色欧美88888久久久久久影院| 国产99久久久久久免费看农村| 香蕉加勒比综合久久 | 日韩三级在线观看| 欧美亚洲综合久久| 97se亚洲国产综合自在线观| 国产99精品视频| 韩国欧美一区二区| 美女www一区二区| 亚洲成a天堂v人片| 亚洲欧美视频在线观看视频| 国产精品麻豆欧美日韩ww| 国产亚洲婷婷免费| 精品久久久久一区| 欧美一级高清片| 制服.丝袜.亚洲.另类.中文| 欧美区在线观看| 欧美日韩在线播放一区| 91小视频在线免费看| 成人免费视频视频| 国产乱色国产精品免费视频| 日韩精品一二三四| 国产精品毛片久久久久久久| 久久精品视频免费观看| 欧美一区二区三区在线观看| 在线观看亚洲精品视频| av成人老司机| 99天天综合性| 不卡一卡二卡三乱码免费网站| 精品写真视频在线观看| 午夜激情一区二区三区| 午夜视频一区二区| 亚洲综合无码一区二区| 国产精品国产成人国产三级| 国产欧美日韩麻豆91| 国产网红主播福利一区二区| 日韩欧美黄色影院| 日韩一区二区中文字幕| 欧美日韩国产大片| 69堂成人精品免费视频| 欧美日韩午夜在线视频| 在线观看日产精品| 色欧美片视频在线观看在线视频| 在线观看91精品国产入口| 91美女片黄在线观看| 色综合久久中文综合久久牛| 99久久伊人久久99| 色综合久久综合| 色先锋aa成人| 91在线一区二区三区| 99视频在线观看一区三区| 色琪琪一区二区三区亚洲区| 一本色道久久综合亚洲91| 91看片淫黄大片一级在线观看| 93久久精品日日躁夜夜躁欧美| 欧洲精品中文字幕| 欧美最猛黑人xxxxx猛交| 欧美亚洲免费在线一区| 波多野洁衣一区| 欧美视频在线一区二区三区| 欧美亚洲一区三区| 欧美日韩国产一级片| 欧美老女人在线| 欧美va日韩va| 久久久91精品国产一区二区三区| 国产色一区二区| 久久香蕉国产线看观看99| 国产精品盗摄一区二区三区| 亚洲欧美日韩一区二区| 国产一区三区三区| 99国产欧美另类久久久精品| 在线视频欧美区| 91精品国产综合久久久蜜臀粉嫩| 日韩女优av电影在线观看| 国产精品麻豆久久久| 亚洲午夜久久久久久久久久久 |