⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print.c

📁 Hermit-at-1.1.3,一款bootloader
💻 C
字号:
/* * Copyright (c) 2000 Blue Mug, Inc.  All Rights Reserved. */#include <stdarg.h>#include <target/htypes.h>#include <target/io.h>static int dprint(int dec){	int order = 1000000000;	/* for 32 bits */	int count = 0, started;	/*	 * should switch to this algorithm instead:        i = MAX_DIGITS;        do {                unsigned long long thispower = power_table[--i];                char c = '0';                while (thispower < num) {                        num -= thispower;                        c++;                }                output(c);        } while (i);	*/	if (dec < 0) {		++count; hputchar('-');		dec = -dec;	}	for (started = 0; order >= 10; order /= 10) {		if (dec >= order) {			int digit = dec / order;			++count; hputchar(digit + '0');			dec -= digit * order;			started = 1;		} else if (started) {			++count; hputchar('0');			}	}	++count; hputchar(dec + '0');	return count;}static inline void xputchar(char c){	hputchar((c<10) ? (c+'0') : (c-10+'a'));}static int xprint(word_t hex, int nbytes){	int shift;	for (shift = nbytes * 8 - 4; shift >= 0; shift -= 4)		xputchar((hex >> shift) & 0xF);	return nbytes * 2;}/* print a string, expanding CR to CRLF */int hprint(const char *s){	int count;	for (count=0; *s; ++count) {		if (*s == '\n')			++count, hputchar('\r');		hputchar(*s++);	}	return count;}/* mini-printf implementation */int hprintf(const char *format, ...){	va_list ap;	int count = 0;	enum state { NORMAL, LITERAL, FORMAT } state = NORMAL;	va_start(ap, format);	for (; *format; ++format) {		switch (state) {		case NORMAL:			if (*format == '\n') {				/* translate CR to CRLF */				hputchar('\r');				hputchar('\n');				count += 2;			} else if (*format == '\\') {				state = LITERAL;			} else if (*format == '%') {				state = FORMAT;			} else				++count, hputchar(*format);			break;		case LITERAL:			++count, hputchar(*format);			state = NORMAL;			break;		case FORMAT:			switch (*format) {			case 'b':				count += xprint(va_arg(ap, word_t), 1);					break;			case 'c':				++count, hputchar(va_arg(ap, int));				break;			case 'd':				count += dprint(va_arg(ap, int));				break;			case 'h':				count += xprint(va_arg(ap, word_t), 2);				break;			case 'p':				count += hprint("0x");				count += xprint(va_arg(ap, word_t),					sizeof(word_t));				break;			case 's':				count += hprint(va_arg(ap, char*));				break;			case 'x':				count += xprint(va_arg(ap, word_t),					sizeof(word_t));				break;			case '%':				++count, hputchar('%');				break;			default:				break;			}			state = NORMAL;			break;		}	}	va_end(ap);	return count;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -