コード例 #1
0
ファイル: tokens.c プロジェクト: GnoConsortium/gno
/*
 * generate a number
 */
char *
outnum(char *p, int n)
{
#ifdef __appleiigs__
	int i, m;
	char *q = p;

	/* find out how many decimal places there are */
	m = n;
	i = 1;
	while ((m / 10) != 0) {
		i++;
		m /= 10;
	}
	p += i;
	m = n;
	do {
		*p = m%10 + '0';
		m = m/10;
		--p;
		--i;
	} while (i > 0);
	assert(q == p);
#else
	if (n>=10)
		p = outnum(p, n/10);
	*p++ = n%10 + '0';
#endif
	return p;
}
コード例 #2
0
ファイル: macro.c プロジェクト: Izhido/qrevpak
/*
 * expand a builtin name
 */
void
builtin(Tokenrow *trp, int biname)
{
	char *op;
	Token *tp;
	Source *s;

	tp = trp->tp;
	trp->tp++;
	/* need to find the real source */
	s = cursource;
	while (s && s->fd==-1)
		s = s->next;
	if (s==NULL)
		s = cursource;
	/* most are strings */
	tp->type = STRING;
	if (tp->wslen) {
		*outp++ = ' ';
		tp->wslen = 1;
	}
	op = outp;
	*op++ = '"';
	switch (biname) {

	case KLINENO:
		tp->type = NUMBER;
		op = outnum(op-1, s->line);
		break;

	case KFILE: {
		char *src = s->filename;
		while ((*op++ = *src++) != 0)
			if (src[-1] == '\\')
				*op++ = '\\';
		op--;
		break;
		}

	case KDATE:
		strncpy(op, curtime+4, 7);
		strncpy(op+7, curtime+20, 4);
		op += 11;
		break;

	case KTIME:
		strncpy(op, curtime+11, 8);
		op += 8;
		break;

	default:
		error(ERROR, "cpp botch: unknown internal macro");
		return;
	}
	if (tp->type==STRING)
		*op++ = '"';
	tp->t = (uchar*)outp;
	tp->len = op - outp;
	outp = op;
}
コード例 #3
0
ファイル: include.c プロジェクト: carriercomm/plan9-gpl
/*
 * Generate a line directive for cursource
 */
void
genline(void)
{
	static Token ta = { UNCLASS, NULL, 0, 0 };
	static Tokenrow tr = { &ta, &ta, &ta+1, 1 };
	uchar *p;

	if(nolineinfo)
		return;

	ta.t = p = (uchar*)outp;
	strcpy((char*)p, "#line ");
	p += sizeof("#line ")-1;
	p = (uchar*)outnum((char*)p, cursource->line);
	*p++ = ' '; *p++ = '"';
	if (cursource->filename[0]!='/' && wd[0]) {
		strcpy((char*)p, wd);
		p += strlen(wd);
		*p++ = '/';
	}
	strcpy((char*)p, cursource->filename);
	p += strlen((char*)p);
	*p++ = '"'; *p++ = '\n';
	ta.len = (char*)p-outp;
	outp = (char*)p;
	tr.tp = tr.bp;
	puttokens(&tr);
}
コード例 #4
0
ファイル: tokens.c プロジェクト: DCPUTools/dcpu16-lcc
/*
 * generate a number
 */
char *
outnum(char *p, int n)
{
	if (n>=10)
		p = outnum(p, n/10);
	*p++ = n%10 + '0';
	return p;
}
コード例 #5
0
ファイル: include.c プロジェクト: bill2009/lcc1802
/*
 * Generate a line directive for cursource
 */
void
genline(void)
{
	static Token ta = { UNCLASS };
	static Tokenrow tr = { &ta, &ta, &ta+1, 1 };
	uchar *p;

	ta.t = p = (uchar*)xoutp;
	strcpy((char*)p, "#line ");
	p += sizeof("#line ")-1;
	p = (uchar*)outnum((char*)p, cursource->line);
	*p++ = ' '; *p++ = '"';
	strcpy((char*)p, cursource->filename);
	p += strlen((char*)p);
	*p++ = '"'; *p++ = '\n';
	ta.len = (char*)p-xoutp;
	xoutp = (char*)p;
	tr.tp = tr.bp;
	puttokens(&tr);
}
コード例 #6
0
ファイル: cgettime.c プロジェクト: ErisBlastar/osfree
int cgetchar_timed(int secs)
{
	struct dostime_t start;
	struct dostime_t now;

	start.second = 60;	/* force decrement secs first time in loop */
	++secs;
	while(!keypressed()) {
		_dos_gettime(&now);
		if(now.second != start.second) {
			if(!--secs)
				return 0;
			memcpy(&start, &now, sizeof(now));
			outnum(secs);
		}
		delay(100);
	}
		/* Because "keypressed()" returned true, getchar() does not block */
	return cgetchar();
}
コード例 #7
0
ファイル: include.c プロジェクト: nikon77/lcc42
/**
 * 为当前输入源产生一个行控制指令信息
 * Generate a line directive for cursource
 * TODO: 一般来说像gcc或者tcc之类的编译器产生的行控制指令是类似如下这样的:
 * # 3 "cpp_line_control.c" 2
 * 而像lcc这样的编译器产生的行控制指令是类似如下这样的:
 * #line 2 "cpp_line_control.c"
 * 也就是说lcc产生的行控制信息中多了一个 line (而这其实是可选的单词)而且也少了flag信息,具体请参考testprog/c预处理小知识.txt一文
 */
void genline(void) {
	static Token ta = { UNCLASS };
	static Tokenrow tr = { &ta, &ta, &ta + 1, 1 };
	uchar *p;

	ta.t = p = (uchar*) outp;
	strcpy((char*) p, "#line "); /* 将“#line ”复制到输出缓冲区 */
	p += sizeof("#line ") - 1;
	p = (uchar*) outnum((char*) p, cursource->line); /* 输出当前文件的行号 */
	*p++ = ' ';
	*p++ = '"';
	strcpy((char*) p, cursource->filename); /* 输出当前文件的文件名 */
	p += strlen((char*) p);
	*p++ = '"';
	*p++ = '\n';
	ta.len = (char*) p - outp;
	outp = (char*) p; /* 更新输出缓冲区的当前指针 */
	tr.tp = tr.bp; /* 将当前token设置为token row中的第一个token的首地址,以便接下来调用puttokens函数输出token row */
	puttokens(&tr); /* 输出 token row */
}
コード例 #8
0
ファイル: xil_printf.c プロジェクト: Eclo/FreeRTOS
/* void esp_printf( const func_ptr f_ptr,
   const charptr ctrl1, ...) */
void xil_printf( const char8 *ctrl1, ...)
{
    s32 Check;
    s32 long_flag;
    s32 dot_flag;

    params_t par;

    char8 ch;
    va_list argp;
    char8 *ctrl = (char8 *)ctrl1;

    va_start( argp, ctrl1);

    while ((ctrl != NULL) && (*ctrl != (char8)0)) {

        /* move format string chars to buffer until a  */
        /* format control is found.                    */
        if (*ctrl != '%') {
            outbyte(*ctrl);
            ctrl += 1;
            continue;
        }

        /* initialize all the flags for this format.   */
        dot_flag = 0;
        long_flag = 0;
        par.unsigned_flag = 0;
        par.left_flag = 0;
        par.do_padding = 0;
        par.pad_character = ' ';
        par.num2=32767;
        par.num1=0;
        par.len=0;

try_next:
        if(ctrl != NULL) {
            ctrl += 1;
        }
        if(ctrl != NULL) {
            ch = *ctrl;
        }
        else {
            ch = *ctrl;
        }

        if (isdigit((s32)ch) != 0) {
            if (dot_flag != 0) {
                par.num2 = getnum(&ctrl);
            }
            else {
                if (ch == '0') {
                    par.pad_character = '0';
                }
                if(ctrl != NULL) {
                    par.num1 = getnum(&ctrl);
                }
                par.do_padding = 1;
            }
            if(ctrl != NULL) {
                ctrl -= 1;
            }
            goto try_next;
        }

        switch (tolower((s32)ch)) {
        case '%':
            outbyte( '%');
            Check = 1;
            break;

        case '-':
            par.left_flag = 1;
            Check = 0;
            break;

        case '.':
            dot_flag = 1;
            Check = 0;
            break;

        case 'l':
            long_flag = 1;
            Check = 0;
            break;

        case 'u':
            par.unsigned_flag = 1;
        /* fall through */
        case 'i':
        case 'd':
            if (long_flag != 0) {
                outnum1((s64)va_arg(argp, s64), 10L, &par);
            }
            else {
                outnum( va_arg(argp, s32), 10L, &par);
            }
            Check = 1;
            break;
        case 'p':
            par.unsigned_flag = 1;
            outnum1((s64)va_arg(argp, s64), 16L, &par);
            Check = 1;
            break;
        case 'x':
            par.unsigned_flag = 1;
            if (long_flag != 0) {
                outnum1((s64)va_arg(argp, s64), 16L, &par);
            }
            else {
                outnum((s32)va_arg(argp, s32), 16L, &par);
            }
            Check = 1;
            break;

        case 's':
            outs( va_arg( argp, char *), &par);
            Check = 1;
            break;

        case 'c':
            outbyte( va_arg( argp, s32));
            Check = 1;
            break;

        case '\\':
            switch (*ctrl) {
            case 'a':
                outbyte( ((char8)0x07));
                break;
            case 'h':
                outbyte( ((char8)0x08));
                break;
            case 'r':
                outbyte( ((char8)0x0D));
                break;
            case 'n':
                outbyte( ((char8)0x0D));
                outbyte( ((char8)0x0A));
                break;
            default:
                outbyte( *ctrl);
                break;
            }
            ctrl += 1;
            Check = 0;
            break;

        default:
            Check = 1;
            break;
        }
        if(Check == 1) {
            if(ctrl != NULL) {
                ctrl += 1;
            }
            continue;
        }
        goto try_next;
    }
    va_end( argp);
}
コード例 #9
0
ファイル: saynum.c プロジェクト: microresearch/WORM
/*
** Translate a number to phonemes.  This version is for CARDINAL numbers.
**	 Note: this is recursive.
*/
void say_cardinal(long int value)
	{
	if (value < 0)
		{
		  //		outstring("mAYnAHs ");
		  outnum(mayn);
		value = (-value);
		if (value < 0)	/* Overflow!  -32768 */
			{
			  //			outstring("IHnfIHnIHtIY ");
			  outnum(infin);
			  return;
			}
		}

	if (value >= 1000000000L)	/* Billions */
		{
		say_cardinal(value/1000000000L);
		//		outstring("bIHlIYAXn ");
		  outnum(bihl);
		value = value % 1000000000;
		if (value == 0)
			return;		/* Even billion */
				if (value < 100)	/* as in THREE BILLION AND FIVE */
		//			outstring("AEnd ");
				  outnum(end);
		}

	if (value >= 1000000L)	/* Millions */
		{
		say_cardinal(value/1000000L);
		//		outstring("mIHlIYAXn ");
		outnum(mil);
		value = value % 1000000L;
		if (value == 0)
			return;		/* Even million */
		if (value < 100)	/* as in THREE MILLION AND FIVE */
		  outnum(end);
		  //			outstring("AEnd ");
		}

	/* Thousands 1000..1099 2000..99999 */
	/* 1100 to 1999 is eleven-hunderd to ninteen-hunderd */
	if ((value >= 1000L && value <= 1099L) || value >= 2000L)
		{
		say_cardinal(value/1000L);
		//		outstring("THAWzAEnd ");
		outnum(thaw);
		value = value % 1000L;
		if (value == 0)
			return;		/* Even thousand */
				if (value < 100)	/* as in THREE THOUSAND AND FIVE */
				  outnum(end);
		  //	outstring("AEnd ");
		}

	if (value >= 100L)
		{
		  outnum(Cardinals[value/100]);
		//		outstring("hAHndrEHd ");
		  outnum(hahn);
		value = value % 100;
		if (value == 0)
			return;		/* Even hundred */
		}

	if (value >= 20)
		{
		  outnum(Twenties[(value-20)/ 10]);
		value = value % 10;
		if (value == 0)
			return;		/* Even ten */
		}

	outnum(Cardinals[value]);
	return;
	} 
コード例 #10
0
bool Producer::launch_loop(int flag_mode) {

	std::cout << " Producer::launch_loop   tooooooop" << std::endl;

	while (flag_continue_processing_producer) {

    	if (! circular_buffer->is_production_possible()) {

    		std::cout << "Producer launch_loop is_production_possible NO so sleep" << std::endl;

    		return false;
    	}

		outnum("Producer production IS POSSIBLE ", loop_counter);


		struct_audio_array * ptr_curr_audio_struct = circular_buffer->do_stage_production();

		if (! ptr_curr_audio_struct) {

			std::cout << "Producer NOTICE - do_stage_production returned NULL pointer "
					<< " sleep N retry" << std::endl;

			return false;
		}

		// ----------- OK now populate buffer ----------------

		ptr_curr_audio_struct->aac_index = loop_counter;
		ptr_curr_audio_struct->ptr_struct_sample_specs = synthesize_sound->get_sample_specs();
		ptr_curr_audio_struct->flag_last_buffer = NO;

		if (SYNTH_MODE_SIN == flag_mode) {

			std::cout << "Producer launch_loop OK now populate buffer SYNTH_MODE_SIN"
					<< std::endl;

			pop_audio_spec(ptr_curr_audio_struct->ptr_struct_sample_specs,
					circular_buffer->get_max_size_circular_buffer());

			synthesize_sound->populate_buffer(ptr_curr_audio_struct->ptr_to_array);

		} else if (SYNTH_MODE_PCM_FILE == flag_mode) {

			std::cout << "Producer launch_loop OK now populate buffer SYNTH_MODE_PCM_FILE"
					<< std::endl;

			std::cout << "Producer::launch_loop   source_buffer_size " << source_buffer_size << std::endl;

//			ptr_curr_audio_struct->ptr_to_array = audio_buffer;

//			std::cout << "PRODUCER NOTICE take out following memcpy ... "
//					<< "its needed to satisify Render need to see new buff address on subsequent buffs"
//					<< std::endl;

//			memcpy(ptr_curr_audio_struct->ptr_to_array, curr_audio_buffer, circular_buffer->get_max_size_circular_buffer());

			unsigned int this_buffer_size = circular_buffer->get_max_size_circular_buffer();

			// stens TODO - commented out belo IF ELSE 20131122

/*
			if (loop_counter == 26)
//			if (loop_counter == 27)

//			if (loop_counter == 44)

			{

				exit(8);
			}
*/

			if (buffer_size_available >= this_buffer_size) {

				// OK we have more buffer in reserve for next iteration

				buffer_size_available -= this_buffer_size;

				std::cout << "Producer - OK we have more buffer in reserve for next iteration "
						<< "this_buffer_size " << this_buffer_size
						<< std::endl;

			} else {

//				this_buffer_size = buffer_size_available;

				// stens TODO - since input data does NOT fill desired buffer size may fill with zeros

				// we have reached END of source input buffer - signal
				// stens TODO insert logic to communicate this last buffer

				std::cout << "Producer - we have reached END of source input buffer "
						<< "this_buffer_size " << this_buffer_size
						<< std::endl;

				flag_continue_processing_producer = false;

				ptr_curr_audio_struct->flag_last_buffer = YES;
			}

			ptr_curr_audio_struct->ptr_to_array = curr_audio_buffer;
			ptr_curr_audio_struct->ptr_struct_sample_specs->buffer_size = this_buffer_size;
			ptr_curr_audio_struct->ptr_struct_sample_specs->frequency = 0;	// define 0 since from file not synth
			ptr_curr_audio_struct->ptr_struct_sample_specs->num_channels = num_channels;

			// following division by 2 (i.e. XXX >> 1) works for mono - I believe stereo wants >> 2
			curr_audio_buffer += (circular_buffer->get_max_size_circular_buffer() >> 1);

			ptr_curr_audio_struct->ptr_struct_sample_specs->sample_rate = sample_rate;

		} else if (SYNTH_MODE_DIY == flag_mode) {
コード例 #11
0
ファイル: log.c プロジェクト: akerl/tinyssh
void log_9_(
    int level
    ,int ignoreerrno
    ,const char *f
    ,unsigned long long l
    ,const char *s0
    ,const char *s1
    ,const char *s2
    ,const char *s3
    ,const char *s4
    ,const char *s5
    ,const char *s6
    ,const char *s7
    ,const char *s8
)
{
    const char *s[9];
    long long i;
    const char *m;

    if (level > loglevel) return;

    s[0] = s0; s[1] = s1; s[2] = s2; s[3] = s3;
    s[4] = s4; s[5] = s5; s[6] = s6; s[7] = s7;
    s[8] = s8;

    switch (level) {
        case -1:
            m = "BUG";
            break;
        case 0:
            m = "usage";
            break;
        case  1:
            m = "fatal";
            break;
        case  2: 
            if (!ignoreerrno) m = "warning";
            else m = "info";
            break;
        case  3:
            m = "debug";
            break;
        default:
            m = "unknown";
            break;
    }


    /* name: session: level: message (error){file:line} */

    /* 'name:' */
    do {
        if (level == 0)   break; /* don't print in usage level */
        if (logflagsyslog) break; /* don't print in syslog mode */
        outs(logtext); outs(": ");
    } while (0);

    /* 'session:' */
    do {
        if (level == 0) break;  /* don't print in usage level */
        if (!logflagfnln) break; /* don't print when disabled   */
        outs(logstring); outs(": ");
    } while (0);

    /* 'level:' */
    do {
        if (level == 0) break; /* don't print in usage level */
        outs(m); outs(": ");
    } while (0);

    /* 'message' */
    for (i = 0; i < 9 && s[i]; ++i) outs(s[i]);
    outs(" ");

    /* '(error)' */
    do {
        if (!errno)      break; /* don't print when errno = 0 */
        if (ignoreerrno) break; /* don't print when disabled   */
        outs("("); outs(e_str(errno)); outs(")");
    } while (0);

    /* {file:line} */
    do {
        if (level == 0) break;  /* don't print in usage level */
        if (!f)          break;  /* don't print when no f      */
        if (!l)          break;  /* don't print when no l      */
        if (!logflagfnln && level != -1) break; /* don't print when disabled   */
        outs("{"); outs(f); outs(":"); outnum(l); outs("}");
    } while (0);

    outs("\n");
    flush();
    return;
}