4 (C) 2014-2015 VOSystems.
7 #include<Diverge/diverge.h>
8 #include<Diverge/types.h>
10 void InitCharArrey(char* arrey,size_t lengh)
13 for(i=0;i<lengh;i++)*arrey++ =0;
17 void Sleep(unsigned long milisec)
20 for(sec=0;sec<=milisec;sec+=10)io_hlt();
23 char GetKeyBoardChar(void)
25 Generate_Scancode_To_ASCII_Code();
28 int CharCountInStr(char* str, char cha)
31 for(C=0; str[C]!='\0'; C++){
32 if(str[C]==cha)count++;
37 void StringConnect(char* dest, const char* src)
39 size_t dest_len=strlen(dest);
42 for(C=0; src[C]!='\0'; dest_len++, C++){
43 dest[dest_len]=src[C];
47 void StringBreak(char* dest, const char separate)
49 size_t len=strlen(dest);
51 while(dest[len]!=separate){
58 int StringCompare(const char* s1, const char* s2, const char separate)
61 if(*s1=='\0')return 0;
64 if(*s1==separate || *s2==separate)return 0;
66 return ((unsigned char)*s1 - (unsigned char)*s2);
69 void LoadingPromptSec(unsigned int Sec)
72 for(C=0; C<((Sec*1000)/(100*4)); C++){
77 void LoadingPrompt(void)
93 static void memswap(void *x, void *y, size_t n)
95 unsigned char *a=(unsigned char*)x;
96 unsigned char *b=(unsigned char*)y;
105 void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
108 size_t pl=0;//左カーソル */
109 size_t pr=nmemb-1;//右カーソル
110 size_t pv=nmemb;//ピボット
111 size_t pt=(pl + pr)/2;//ピボットの更新値
112 char *v=(char *)base;//先頭要素へのポインタ
116 if (pv != pt) x = &v[(pv = pt) * size];
118 while (compar((const void *)&v[pl * size], x) < 0) pl++;
119 while (compar((const void *)&v[pr * size], x) > 0) pr--;
121 pt = (pl == pv) ? pr : (pr == pv) ? pl : pv;
122 memswap(&v[pl * size], &v[pr * size], size);
124 if (pr == 0) /* 符号無し整数0からのデクリメントを避ける */
130 if(0<pr)qsort(&v[0], pr+1, size, compar);
132 if(pl<nmemb-1)qsort(&v[pl*size], nmemb-pl, size, compar);
136 char* ScanPassword(char* buf)
140 unsigned int count=0;
144 if(tmp==' ' || tmp=='\n'){
149 }else if(tmp=='\b' && count>0){
176 /* a/b = ans ... rem*/
177 static int Divide16on32(unsigned int a, unsigned int b, unsigned int* ans, unsigned int* rem)
185 unsigned long long DivideU64(unsigned long long a, unsigned int b)
187 unsigned int a1, a2, a3, a4;
188 unsigned int b1, b2, b3, b4;
189 unsigned long long ans;
195 a3=((a1<<32)|(a2<<16))^(a>>16);
197 a4=((a1<<48)|(a2<<32)|(a3<<16))^a;
199 unsigned int ans1,rem1;
200 if(Divide16on32(a1,b,&ans1,&rem1)==-1)return 0;
203 unsigned int ans2,rem2;
204 if(Divide16on32(a2,b,&ans2,&rem2)==-1)return 0;
207 unsigned int ans3,rem3;
208 if(Divide16on32(a3,b,&ans3,&rem3)==-1)return 0;
211 unsigned int ans4,rem4;
212 if(Divide16on32(a4,b,&ans4,&rem4)==-1)return 0;
214 ans=(ans1<<48)+(ans2<<32)+(ans3<<16)+ans4;
219 int hex2dec_bcd(int hex)
223 if(0x0<=m && m<=0x9){
231 if(0x0<=m && m<=0x9){
241 unsigned int DivideU64_2(unsigned long long a, unsigned long long b)
244 unsigned long long i_a = 0;
245 unsigned long long i_b = 0;
246 unsigned long long i_op1 = (unsigned long long)a;
247 unsigned long long i_op2 = (unsigned long long)b << 32;
248 for(i=1; i<=64; i++){
257 unsigned int ans = i_a >> 16;