Subversion Repositories Kolibri OS

Rev

Rev 7286 | Rev 7439 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7286 Rev 7435
Line 828... Line 828...
828
		s = DSBYTE[text];
828
		s = DSBYTE[text];
829
	}
829
	}
830
	return ret;
830
	return ret;
831
}
831
}
Line 832... Line 832...
832
 
832
 
833
inline cdecl int sprintf(dword buf, format,...)
833
:dword stdcall sprintf(dword buf, format,...)
834
{
-
 
835
	#define END_ARGS 0xFF00FF //ARGS FUNCTION
834
{
836
	byte s;
-
 
837
	char X[10];
835
	byte s;
838
	dword ret, tmp, l;
836
	dword ret, tmp, l;
839
	dword arg = #format;
837
	dword arg = #format;
840
	ret = buf;
838
	ret = buf;
841
	s = DSBYTE[format];
839
	s = DSBYTE[format];
-
 
840
	while(s)
842
	while(s){
841
	{
-
 
842
		if(s == '%')
843
		if(s=='%'){
843
		{
844
			arg+=4;
844
			arg += 4;
845
			tmp = DSDWORD[arg];
-
 
846
			if(tmp==END_ARGS)goto END_FUNC_SPRINTF;
845
			tmp = DSDWORD[arg];
847
			$inc format
846
			format++;
-
 
847
			s = DSBYTE[format];
-
 
848
			IF (!s)
848
			s = DSBYTE[format];
849
			{
-
 
850
				DSBYTE[buf] = 0;
-
 
851
				return ret;
849
			if(!s)goto END_FUNC_SPRINTF;
852
			}
850
			switch(s)
853
			switch(s)
851
			{
854
			{
852
				case 's':
855
				case 's':
853
					l = tmp;
856
					l = tmp;
854
					s = DSBYTE[tmp];
-
 
855
					while(s)
857
					WHILE(DSBYTE[tmp])
856
					{
858
					{
857
						DSBYTE[buf] = s;
859
						DSBYTE[buf] = DSBYTE[tmp];
858
						$inc tmp
860
						tmp++;
859
						$inc buf
-
 
860
						s = DSBYTE[tmp];
861
						buf++;
861
					}
862
					}
862
				break;
863
				break;
863
				case 'c':
864
				case 'c':
864
					DSBYTE[buf] = tmp;
865
					DSBYTE[buf] = tmp;
865
					$inc buf
866
					buf++;
866
				break;
867
				break;
867
				case 'u': //if(tmp<0)return ret;
868
				case 'u': //if(tmp<0)return ret;
868
				case 'd':
869
				case 'd':
869
				case 'i':
870
				case 'i':
870
					tmp = itoa(tmp);
871
					tmp = itoa(tmp);
-
 
872
					IF (!DSBYTE[tmp])
-
 
873
					{
-
 
874
						DSBYTE[buf] = 0;
-
 
875
						return ret;
871
					if(!DSBYTE[tmp])goto END_FUNC_SPRINTF;
876
					}
872
					l = strlen(tmp);
877
					l = strlen(tmp);
873
					strlcpy(buf,tmp,l);
878
					strlcpy(buf,tmp,l);
874
					buf += l;
879
					buf += l;
875
				break;
880
				break;
876
				case 'a':
881
				case 'a':
877
				case 'A':
882
				case 'A':
878
					strlcpy(buf,"0x00000000",10);
883
					strlcpy(buf, "0x00000000", 10);
879
					buf+=10;
884
					buf += 10;
880
					l=buf;
885
					l = buf;
881
					while(tmp)
886
					WHILE(tmp)
882
					{
887
					{
883
						$dec buf
888
						buf--;
884
						s=tmp&0xF;
889
						s = tmp & 0xF;
885
						if(s>9)DSBYTE[buf]='A'+s-10;
890
						IF (s > 9) DSBYTE[buf] = 'A' - 10 + s;
886
						else DSBYTE[buf]='0'+s;
891
						ELSE DSBYTE[buf] = '0' + s;
887
						tmp>>=4;
892
						tmp >>= 4;
888
					}
893
					}
889
					buf=l;
894
					buf = l;
890
				break;
895
				break;
891
				case 'p':
896
				case 'p':
892
					tmp = itoa(#tmp);
897
					tmp = itoa(#tmp);
-
 
898
					IF (!DSBYTE[tmp])
-
 
899
					{
-
 
900
						DSBYTE[buf] = 0;
-
 
901
						return ret;
893
					if(!DSBYTE[tmp])goto END_FUNC_SPRINTF;
902
					}
894
					l = strlen(tmp);
903
					l = strlen(tmp);
895
					strlcpy(buf,tmp,l);
904
					strlcpy(buf,tmp,l);
896
					buf += l;
905
					buf += l;
897
				break;
906
				break;
898
				case '%':
907
				case '%':
899
					DSBYTE[buf] = '%';
908
					DSBYTE[buf] = '%';
900
					$inc buf
909
					buf++;
901
				break;
910
				break;
-
 
911
				default:
902
				default:
912
				{
-
 
913
					DSBYTE[buf] = 0;
-
 
914
					return ret;
903
				goto END_FUNC_SPRINTF;
915
				}
904
			}
916
			}
905
		}
917
		}
-
 
918
		else 
906
		else {
919
		{
907
			DSBYTE[buf] = s;
920
			DSBYTE[buf] = s;
908
			$inc buf
921
			buf++;
909
		}
922
		}
910
		$inc format
923
		format++;
911
		s = DSBYTE[format];
924
		s = DSBYTE[format];
912
	}
-
 
-
 
925
	}
913
	END_FUNC_SPRINTF:
926
	
914
	DSBYTE[buf] = 0;
927
	DSBYTE[buf] = 0;
915
	return ret;
928
	return ret;
Line 916... Line 929...
916
}
929
}