示例#1
0
文件: debug.cpp 项目: OrageDev/sunvox
void sprint( UTF8_CHAR *dest_str, const UTF8_CHAR *str, ... )
{
    va_list p;
    va_start( p, str );

    int ptr = 0;
    int ptr2 = 0;
    UTF8_CHAR num_str[ 32 ];
    int len;

    //Make a string:
    for(;;)
    {
	if( str[ ptr ] == 0 ) break;
	if( str[ ptr ] == '%' )
	{
	    if( str[ ptr + 1 ] == 'd' || str[ ptr + 1 ] == 'x' )
	    {
		//Integer value:
		int arg = va_arg( p, int );
		if( str[ ptr + 1 ] == 'd' )
		    int_to_string( arg, num_str );
		else
		    hex_int_to_string( arg, num_str );
		len = mem_strlen( num_str );
		mem_copy( dest_str + ptr2, num_str, len );
		ptr2 += len;
		ptr++;
	    }
	    else
	    if( str[ ptr + 1 ] == 's' )
	    {
		//ASCII string:
		UTF8_CHAR *arg2 = va_arg( p, UTF8_CHAR* );
		if( arg2 )
		{
		    len = mem_strlen( arg2 );
		    if( len )
		    {
			mem_copy( dest_str + ptr2, arg2, len );
			ptr2 += len;
		    }
		}
		ptr++;
	    }
示例#2
0
Program::Program() {
	/* Find the command line and setup the PSP */
	psp = new DOS_PSP(dos.psp());
	/* Scan environment for filename */
	PhysPt envscan=PhysMake(psp->GetEnvironment(),0);
	while (mem_readb(envscan)) envscan+=mem_strlen(envscan)+1;	
	envscan+=3;
	CommandTail tail;
	MEM_BlockRead(PhysMake(dos.psp(),128),&tail,128);
	if (tail.count<127) tail.buffer[tail.count]=0;
	else tail.buffer[126]=0;
	char filename[256+1];
	MEM_StrCopy(envscan,filename,256);
	cmd = new CommandLine(filename,tail.buffer);
}
示例#3
0
void DOS_PSP::StoreCommandTail() {
	int len=mem_strlen(pt+offsetof(sPSP,cmdtail.buffer));
	MEM_StrCopy(pt+offsetof(sPSP,cmdtail.buffer),storect,len>CTBUF?CTBUF:len);
}