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++; }
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); }
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); }