Changeset 272 for Include/basic/function.sbp
- Timestamp:
- Jun 12, 2007, 7:24:38 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Include/basic/function.sbp
r269 r272 13 13 14 14 #require <Classes/System/Math.ab> 15 #require <Classes/System/DateTime.ab> 16 #require <Classes/System/Text/StringBuilder.ab> 15 17 #require <Classes/ActiveBasic/Math/Math.ab> 18 #require <Classes/ActiveBasic/Strings/Strings.ab> 16 19 17 20 … … 92 95 End Function 93 96 94 Const RAND_MAX =&H7FFFFFFF95 Dim _System_RndNext =1 As DWord97 Const RAND_MAX = &H7FFFFFFF 98 Dim _System_RndNext = 1 As DWord 96 99 97 100 Function rand() As Long 98 101 _System_RndNext = _System_RndNext * 1103515245 + 12345 99 rand = _System_RndNext >> 1102 rand = (_System_RndNext >> 1) As Long 100 103 End Function 101 104 … … 233 236 234 237 Function Chr$(code As StrChar) As String 235 Chr$ = ZeroString(1) 236 Chr$[0] = code 238 Chr$ = New String(code, 1) 237 239 End Function 238 240 … … 252 254 Function ChrW(c As UCSCHAR) As String 253 255 If c <= &hFFFF Then 254 ChrW.ReSize(1) 255 ChrW[0] = c As WCHAR 256 Return New String(c As StrChar, 1) 256 257 ElseIf c < &h10FFFF Then 257 ChrW.ReSize(2) 258 ChrW[0] = &hD800 Or (c >> 10) 259 ChrW[1] = &hDC00 Or (c And &h3FF) 260 Else 261 ' OutOfRangeException 258 Dim t[1] = [&hD800 Or (c >> 10), &hDC00 Or (c And &h3FF)] As StrChar 259 Return New String(t, 2) 260 Else 261 'ArgumentOutOfRangeException 262 262 End If 263 263 End Function … … 265 265 266 266 Function Date$() As String 267 Dim st As SYSTEMTIME268 GetLocalTime(st)267 Dim date = DateTime.Now 268 Dim buf = New System.Text.StringBuilder(10) 269 269 270 270 'year 271 Date$=Str$(st.wYear)271 buf.Append(date.Year) 272 272 273 273 'month 274 If st.wMonth<10 Then275 Date$=Date$+"/0"276 Else 277 Date$=Date$+"/"278 End If 279 Date$=Date$+Str$(st.wMonth)274 If date.Month < 10 Then 275 buf.Append("/0") 276 Else 277 buf.Append("/") 278 End If 279 buf.Append(date.Month) 280 280 281 281 'day 282 If st.wDay<10 Then 283 Date$=Date$+"/0" 284 Else 285 Date$=Date$+"/" 286 End If 287 Date$=Date$+Str$(st.wDay) 282 If date.Day < 10 Then 283 buf.Append("/0") 284 Else 285 buf.Append("/") 286 End If 287 buf.Append(date.Day) 288 289 Date$ = buf.ToString 288 290 End Function 289 291 … … 358 360 End Function 359 361 360 Function Left$(buf As String, length As Long) As String 361 Left$ = ZeroString(length) 362 memcpy(StrPtr(Left$), StrPtr(buf), SizeOf (StrChar) * length) 363 End Function 364 365 Function Mid$(buf As String, StartPos As Long)(ReadLength As Long) As String 366 Dim length As Long 367 368 StartPos-- 369 If StartPos<0 Then 370 'error 371 'Debug 372 Exit Function 373 End If 374 375 length=Len(buf) 376 If length<=StartPos Then Exit Function 377 378 If ReadLength=0 Then 379 ReadLength=length-StartPos 380 End If 381 382 If ReadLength>length-StartPos Then 383 ReadLength=length-StartPos 384 End If 385 386 Mid$=ZeroString(ReadLength) 387 memcpy(StrPtr(Mid$), VarPtr(buf.Chars[StartPos]), SizeOf (StrChar) * ReadLength) 388 End Function 389 390 Function Oct$(num As DWord) As String 391 Dim i As DWord, i2 As DWord 392 393 For i=10 To 1 Step -1 394 If (num \ CDWord(8^i)) And &H07 Then 395 Exit For 396 End If 397 Next 398 399 Oct$=ZeroString(i+1) 400 i2=0 362 Function Left$(s As String, length As Long) As String 363 Left$ = s.Substring(0, System.Math.Min(s.Length, length)) 364 End Function 365 366 Function Mid$(s As String, startPos As Long) As String 367 startPos-- 368 Mid$ = s.Substring(startPos) 369 End Function 370 371 Function Mid$(s As String, startPos As Long, readLength = 0 As Long) As String 372 startPos-- 373 Dim length = s.Length 374 Mid$ = s.Substring(System.Math.Min(startPos, length), System.Math.Min(readLength, length - startPos)) 375 End Function 376 377 Const _System_MaxFigure_Oct_QW = 22 As DWord 'QWORD_MAX = &o1,777,777,777,777,777,777,777 378 Function Oct$(n As QWord) As String 379 Dim s[ELM(_System_MaxFigure_Oct_QW)] As StrChar 380 Dim i = ELM(_System_MaxFigure_Oct_QW) As Long 401 381 Do 402 Oct$[i2] = &h30 + ((num \ CDWord(8 ^ i)) And &H07) As StrChar ' &h30 = Asc("0") 403 If i=0 Then Exit Do 382 s[i] = ((n And &o7) + &h30) As StrChar '&h30 = Asc("0") 383 n >>= 3 384 If n = 0 Then 385 Return New String(s + i, _System_MaxFigure_Oct_QW - i) 386 End If 404 387 i-- 405 i2++406 388 Loop 407 389 End Function 408 390 409 Function Right$(buf As String, length As Long) As String 410 Dim i As Long 411 412 i=Len(buf) 413 If i>length Then 414 Right$=ZeroString(length) 415 memcpy(StrPtr(Right$), VarPtr(buf.Chars[i-length]), SizeOf (StrChar) * length) 416 Else 417 Right$=buf 418 End If 391 Const _System_MaxFigure_Oct_DW = 11 As DWord 'DWORD_MAX = &o37,777,777,777 392 Function Oct$(n As DWord) As String 393 Dim s[ELM(_System_MaxFigure_Oct_DW)] As StrChar 394 Dim i = ELM(_System_MaxFigure_Oct_DW) As Long 395 Do 396 s[i] = ((n And &o7) + &h30) As StrChar '&h30 = Asc("0") 397 n >>= 3 398 If n = 0 Then 399 Return New String(s + i, _System_MaxFigure_Oct_DW - i) 400 End If 401 i-- 402 Loop 403 End Function 404 405 Function Right$(s As String, length As Long) As String 406 Right$ = s.Substring(System.Math.Max(0, s.Length - length), s.Length) 419 407 End Function 420 408 … … 447 435 '値が0の場合 448 436 If value = 0 Then 449 _System_FillChar(_System_ecvt_buffer, count As SIZE_T, &H30 As StrChar)437 ActiveBasic.Strings.ChrFill(_System_ecvt_buffer, count As SIZE_T, &H30 As StrChar) 450 438 _System_ecvt_buffer[count] = 0 451 439 dec = 0 … … 523 511 buffer[i] = Asc(".") 524 512 i++ 525 memcpy(VarPtr(buffer[i]), VarPtr(temp[1]), SizeOf (StrChar) *14)513 ActiveBasic.Strings.ChrCopy(VarPtr(buffer[i]), VarPtr(temp[1]), 14) 526 514 i += 14 527 515 buffer[i] = Asc("e") 528 516 i++ 529 _stprintf(VarPtr(buffer[i]), "+%03d", dec - 1) 517 _stprintf(VarPtr(buffer[i]), "+%03d", dec - 1) 'ToDo: __STRING_UNICODE_WINDOWS_ANSI状態への対応 530 518 531 519 Return MakeStr(buffer) … … 538 526 buffer[i] = Asc(".") 539 527 i++ 540 memcpy(VarPtr(buffer[i]), VarPtr(temp[1]), SizeOf (StrChar) *14)528 ActiveBasic.Strings.ChrCopy(VarPtr(buffer[i]), VarPtr(temp[1]), 14) 541 529 i+=14 542 530 buffer[i] = Asc("e") 543 531 i++ 544 _stprintf(VarPtr(buffer[i]), "+%03d", dec - 1) 532 _stprintf(VarPtr(buffer[i]), "+%03d", dec - 1) 'ToDo: __STRING_UNICODE_WINDOWS_ANSI状態への対応 545 533 546 534 Return MakeStr(buffer) … … 603 591 604 592 Dim buf[20] As StrChar 605 buf[20] = 0593 'buf[20] = 0 606 594 Dim i = 19 As Long 607 595 Do … … 640 628 Dim i = 9 As Long 641 629 Do 642 buf[i] = (x Mod 10 + &h30) As StrChar630 buf[i] = (x As Int64 Mod 10 + &h30) As StrChar 'Int64への型変換は#117対策 643 631 x \= 10 644 632 If x = 0 Then 645 Exit Do633 Return New String(VarPtr(buf[i]), 10 - i) 646 634 End If 647 635 i-- 648 Loop 649 Return New String(VarPtr(buf[i]), 10 - i) 636 Loop 650 637 #endif 651 638 End Function … … 679 666 End Function 680 667 681 Function String$(num As Long, buf As String) As String 682 Dim dwStrPtr As DWord 683 Dim length As Long 684 685 length=Len(buf) 686 687 'バッファ領域を確保 688 String$=ZeroString(length*num) 689 690 '文字列をコピー 668 Function String$(n As Long, s As StrChar) As String 669 Return New String(s, n) 670 End Function 671 672 #ifdef _AB4_COMPATIBILITY_STRING$_ 673 Function String$(n As Long, s As String) As String 674 If n < 0 Then 675 'Throw ArgumentOutOfRangeException 676 End If 677 678 Dim buf = New System.Text.StringBuilder(s.Length * n) 691 679 Dim i As Long 692 For i =0 To num-1693 memcpy(VarPtr(String$.Chars[i*length]), StrPtr(buf), SizeOf (StrChar) * length)680 For i = 0 To n 681 buf.Append(s) 694 682 Next 695 683 End Function 684 #else 685 Function String$(n As Long, s As String) As String 686 If String.IsNullOrEmpty(s) Then 687 Return New String(0 As StrChar, n) 688 Else 689 Return New String(s[0], n) 690 End If 691 End Function 692 #endif 696 693 697 694 Function Time$() As String 698 Dim st As SYSTEMTIME699 700 GetLocalTime(st)695 Dim time = DateTime.Now 696 697 Dim buf = New System.Text.StringBuilder(8) 701 698 702 699 'hour 703 If st.wHour<10 Then704 Time$="0"705 End If 706 Time$=Time$+Str$(st.wHour)700 If time.Hour < 10 Then 701 buf.Append("0") 702 End If 703 buf.Append(time.Hour) 707 704 708 705 'minute 709 If st.wMinute<10 Then710 Time$=Time$+":0"711 Else 712 Time$=Time$+":"713 End If 714 Time$=Time$+Str$(st.wMinute)706 If time.Minute < 10 Then 707 buf.Append(":0") 708 Else 709 buf.Append(":") 710 End If 711 buf.Append(time.Minute) 715 712 716 713 'second 717 If st.wSecond<10 Then 718 Time$=Time$+":0" 719 Else 720 Time$=Time$+":" 721 End If 722 Time$=Time$+Str$(st.wSecond) 714 If time.Second < 10 Then 715 buf.Append(":0") 716 Else 717 buf.Append(":") 718 End If 719 buf.Append(time.Second) 720 Time$ = buf.ToString 723 721 End Function 724 722 … … 738 736 If buf[0]=Asc("&") Then 739 737 temporary = New String( buf ) 740 temporary .ToUpper()738 temporary = temporary.ToUpper() 741 739 TempPtr = StrPtr(temporary) 742 740 If TempPtr(1)=Asc("O") Then … … 816 814 817 815 Function Loc(FileNum As Long) As Long 818 Dim NowPos As Long, BeginPos As Long819 820 816 FileNum-- 821 817 822 NowPos=SetFilePointer(_System_hFile(FileNum),0,NULL,FILE_CURRENT)823 BeginPos=SetFilePointer(_System_hFile(FileNum),0,NULL,FILE_BEGIN)824 SetFilePointer(_System_hFile(FileNum), NowPos-BeginPos,NULL,FILE_BEGIN)825 826 Loc =NowPos-BeginPos818 Dim NowPos = SetFilePointer(_System_hFile(FileNum), 0, 0, FILE_CURRENT) 819 Dim BeginPos = SetFilePointer(_System_hFile(FileNum), 0, 0, FILE_BEGIN) 820 SetFilePointer(_System_hFile(FileNum), NowPos - BeginPos, 0, FILE_BEGIN) 821 822 Loc = NowPos - BeginPos 827 823 End Function 828 824 … … 851 847 _System_pGC->__free(lpMem) 852 848 End Sub 853 854 849 855 850 Function _System_malloc(stSize As SIZE_T) As VoidPtr … … 1044 1039 End Function 1045 1040 1046 Sub _System_FillChar(p As PWSTR, n As SIZE_T, c As WCHAR)1047 Dim i As SIZE_T1048 For i = 0 To ELM(n)1049 p[i] = c1050 Next1051 End Sub1052 1053 Sub _System_FillChar(p As PSTR, n As SIZE_T, c As SByte)1054 Dim i As SIZE_T1055 For i = 0 To ELM(n)1056 p[i] = c1057 Next1058 End Sub1059 1060 1041 Function _System_ASCII_IsUpper(c As WCHAR) As Boolean 1061 1042 Return c As DWord - &h41 < 26 ' &h41 = Asc("A") … … 1096 1077 Function _System_ASCII_ToUpper(c As SByte) As SByte 1097 1078 Return _System_ASCII_ToUpper(c As Byte As WCHAR) As Byte As SByte 1098 End Function1099 1100 Function _System_ChrCpy(dst As PCWSTR, src As PCWSTR, size As SIZE_T) As PCWSTR1101 memcpy(dst, src, size * SizeOf (WCHAR))1102 Return dst1103 End Function1104 1105 Function _System_ChrCpy(dst As PCSTR, src As PCSTR, size As SIZE_T) As PCSTR1106 memcpy(dst, src, size)1107 Return dst1108 End Function1109 1110 Function _System_StrCmp(s1 As PCSTR, s2 As PCSTR) As Long1111 Dim i = 0 As SIZE_T1112 While s1[i] = s2[i]1113 If s1[i] = 0 Then1114 Exit While1115 End If1116 i++1117 Wend1118 _System_StrCmp = s1[i] - s2[i]1119 End Function1120 1121 Function _System_StrCmp(s1 As PCWSTR, s2 As PCWSTR) As Long1122 Dim i = 0 As SIZE_T1123 While s1[i] = s2[i]1124 If s1[i] = 0 Then1125 Exit While1126 End If1127 i++1128 Wend1129 _System_StrCmp = s1[i] - s2[i]1130 End Function1131 1132 Function _System_StrCmpN(s1 As PCSTR, s2 As PCSTR, size As SIZE_T) As Long1133 Dim i = 0 As SIZE_T1134 For i = 0 To ELM(size)1135 _System_StrCmpN = s1[i] - s2[i]1136 If _System_StrCmpN <> 0 Then1137 Exit Function1138 End If1139 Next1140 End Function1141 1142 Function _System_StrCmpN(s1 As PCWSTR, s2 As PCWSTR, size As SIZE_T) As Long1143 Dim i = 0 As SIZE_T1144 For i = 0 To ELM(size)1145 _System_StrCmpN = s1[i] - s2[i]1146 If _System_StrCmpN <> 0 Then1147 Exit Function1148 End If1149 Next1150 End Function1151 1152 Function _System_MemChr(s As PCSTR, c As CHAR, size As SIZE_T) As PCSTR1153 Dim i As SIZE_T1154 For i = 0 To ELM(size)1155 If s[i] = c Then1156 Return VarPtr(s[i])1157 End If1158 Next1159 Return 01160 End Function1161 1162 Function _System_MemChr(s As PCWSTR, c As WCHAR, size As SIZE_T) As PCWSTR1163 Dim i As SIZE_T1164 For i = 0 To ELM(size)1165 If s[i] = c Then1166 Return VarPtr(s[i])1167 End If1168 Next1169 Return 01170 End Function1171 1172 Function _System_MemPBrk(str As PCSTR, cStr As SIZE_T, Chars As PCSTR, cChars As SIZE_T) As PCSTR1173 Dim i As SIZE_T1174 For i = 0 To ELM(cStr)1175 If _System_MemChr(Chars, str[i], cChars) Then1176 Return VarPtr(str[i])1177 End If1178 Next1179 Return 01180 End Function1181 1182 Function _System_MemPBrk(str As PCWSTR, cStr As SIZE_T, Chars As PCWSTR, cChars As SIZE_T) As PCWSTR1183 Dim i As SIZE_T1184 For i = 0 To ELM(cStr)1185 If _System_MemChr(Chars, str[i], cChars) Then1186 Return VarPtr(str[i])1187 End If1188 Next1189 Return 01190 1079 End Function 1191 1080
Note:
See TracChangeset
for help on using the changeset viewer.