|
@@ -25,7 +25,8 @@ void CFTTFile_Buffered::Shutdown() {
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
//002640F8 //^_^
|
|
|
bool CFTTFile_Buffered::FillBuffer(int index, int64 end) {
|
|
|
- return true;
|
|
|
+ LOGE("CFTTFile_Buffered::FillBuffer %p%x%x%x",this,index,((int*)&end)[0],((int*)&end)[1]);
|
|
|
+ return rand();
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
//00264302 //^_^
|
|
@@ -34,9 +35,116 @@ int64 CFTTFile_Buffered::Read(void *arg_buf, int64 len) {
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
//00264518
|
|
|
-int64 CFTTFile_Buffered::Write(void const *buf, int64 buflen) {
|
|
|
- int64 dret = 0;
|
|
|
- return dret;
|
|
|
+int64 CFTTFile_Buffered::Write(void const *buf, int64 buflen_r8sp20) {
|
|
|
+ int64 dret_3C_sp18 = 0;
|
|
|
+ if (pFile_8 == nullptr)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ // 00264532
|
|
|
+ if ((pFile_8->GetModeFlags() & 3) == 1) {
|
|
|
+ // 00264542
|
|
|
+ errCode_4 = EFTTError_14;
|
|
|
+ Close();
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_26454A
|
|
|
+ if (errCode_4) {
|
|
|
+ // loc_264550
|
|
|
+ Close();
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_264564
|
|
|
+ if (pFile_8->GetModeFlags() & 4) {
|
|
|
+ // 00264574
|
|
|
+ int64 d = Seek(0, 2);
|
|
|
+ if (d <= -1)
|
|
|
+ return d;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_264590
|
|
|
+ uint8 *pbuf_38 = static_cast<uint8 *>(const_cast<void *>(buf));
|
|
|
+
|
|
|
+ // loc_264590
|
|
|
+ int r10 = 0;
|
|
|
+ // int64 var_2C = 0;
|
|
|
+ // int64 var_3C = 0;
|
|
|
+ while (buflen_r8sp20 > 0) {
|
|
|
+ // loc_2645AA
|
|
|
+ int64 r6r7 = i64Arrar_18[r10]; //.text:002645B2 048 LDRD.W R6, R7, [R0,#0x18] @ R6, R7 = i64Arrar_18[r10]
|
|
|
+ int r4 = r10;
|
|
|
+ r10 = r10 ^ 1;
|
|
|
+ int64 r2r3 = r6r7 + mod_C;
|
|
|
+ if (curPos_38 < r6r7 || curPos_38 >= (r6r7 + mod_C)) {
|
|
|
+ // loc_2645D8
|
|
|
+ if (curPos_38 < i64Arrar_18[r10] || curPos_38 >= (i64Arrar_18[r10] + mod_C)) {
|
|
|
+ // loc_2645FC
|
|
|
+ while (byArray_30[r4]) {
|
|
|
+ if (!byArray_30[r10]) {
|
|
|
+ r4 = r10;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // loc_264608
|
|
|
+ FTTThread_Sleep(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_26461A
|
|
|
+ if (!FillBuffer(r4, curPos_38)) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_26462C
|
|
|
+ int64 r5r7_spc = (int64)mod_C - (curPos_38 - r6r7);
|
|
|
+ if (r5r7_spc >= buflen_r8sp20) {
|
|
|
+ r5r7_spc = buflen_r8sp20;
|
|
|
+ //dret_3C_sp18 = buflen;
|
|
|
+ } else {
|
|
|
+ //dret_3C_sp18 = r5r7;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 00264662
|
|
|
+ if ((r6r7 + mod_C) < size_40 && !byArray_30[r10]) {
|
|
|
+ // 00264674
|
|
|
+ if (r2r3 < i64Arrar_18[r10] || r2r3 >= (i64Arrar_18[r10] + mod_C)) {
|
|
|
+ // loc_264696
|
|
|
+ if (!byArray_32[r10]) {
|
|
|
+ // 0026469C
|
|
|
+ if (!FillBuffer(r10, r2r3)) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_2646A8
|
|
|
+ while (byArray_30[r4]) {
|
|
|
+ // loc_2646B2
|
|
|
+ FTTThread_Sleep(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 002646BE
|
|
|
+
|
|
|
+ memcpy(bufArray_28[r4] + (int)(curPos_38 - r6r7), pbuf_38, (int)r5r7_spc);
|
|
|
+
|
|
|
+ byArray_32[r4] = 1; // 002646D6 STRB.W R0, [R7,#0x32]
|
|
|
+ pbuf_38 += (int)r5r7_spc;
|
|
|
+ curPos_38 += r5r7_spc; // 00264706 STRD.W R0, R1, [R12]
|
|
|
+//curpos_38=r9
|
|
|
+ if (curPos_38 >= size_40) {
|
|
|
+ size_40 = curPos_38; // 00264706
|
|
|
+ }
|
|
|
+
|
|
|
+ dret_3C_sp18 += r5r7_spc;
|
|
|
+ buflen_r8sp20 -= r5r7_spc;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return dret_3C_sp18;
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
//00264746 //^_^
|