void zst_save(FILE *fp, bool Thumbnail, bool Compress) { PrepareOffset(); PrepareSaveState(); unpackfunct(); if (SFXEnable) { SfxRomBuffer -= SfxCROM; SfxLastRamAdr -= SfxRAMMem; } if (SA1Enable) { SaveSA1(); //Convert SA-1 stuff to standard, non displacement format } if (!Compress || !zst_save_compressed(fp)) //If we don't want compressed or compression failed { fwrite(zst_header_cur, 1, sizeof(zst_header_cur)-1, fp); //-1 for null fhandle = fp; //Set global file handle copy_state_data(0, write_save_state_data, csm_save_zst_new); if (Thumbnail) { CapturePicture(); fwrite(PrevPicture, 1, 64*56*sizeof(unsigned short), fp); } } if (SFXEnable) { SfxRomBuffer += SfxCROM; SfxLastRamAdr += SfxRAMMem; } if (SA1Enable) { RestoreSA1(); //Convert back SA-1 stuff } ResetOffset(); ResetState(); }
void CCellView::MouseDown(BPoint where) { StPenState save(this); try { bool optional = IsOptionalClick(Window()->CurrentMessage()); if (!IsFocus() && !fEntering) MakeFocus(); ResetOffset(-1); BRect myRect, bounds(Bounds()); cell myCell = cell(fFrozen.h ? 1 : fPosition.h, fFrozen.v ? 1 : fPosition.v); if (fFirstGraphic) { if (fFirstGraphic->HandleMouseDown(where)) return; else if (fFirstGraphic->HasFocus()) fFirstGraphic->MakeFocus(false); } if (fCellBounds.Contains(where)) { if ((PointIsInSelection(where) && !fEntering) && (optional || WaitMouseMoved(where, false))) { StartDrag(where, optional); } else if (optional) GridMenu(where); else SelectCell(where); } if (!fShowBorders) return; myRect = bounds; myRect.top = fBorderHeight; myRect.left = 0.0; myRect.right = fBorderWidth; if (myRect.Contains(where)) { if (optional) BorderMenu(where); else { do { myCell.v++; GetCellRect(myCell, myRect); } while (myRect.top + 2.0 <= where.y); if (where.y >= myRect.top - 2.0 && where.y <= myRect.top + 2.0) ResizeRow(where, myCell.v - 1); else SelectRow(where, myCell.v - 1); } return; } myRect.Set(fBorderWidth, 0.0, bounds.right, fBorderHeight); if (myRect.Contains(where)) { if (optional) BorderMenu(where); else { do { myCell.h++; GetCellRect(myCell, myRect); } while (myRect.left + 2.0 <= where.x); if (where.x >= myRect.left - 2.0 && where.x <= myRect.left + 2.0) ResizeCol(where, myCell.h - 1); else SelectCol(where, myCell.h - 1); } return; } myRect.Set(0.0, 0.0, fBorderWidth, fBorderHeight); if (myRect.Contains(where)) { if (!fEntering) SetSelection(range(1, 1, kColCount, kRowCount)); else beep(); } } catch(CErr& e) { CATCHED; e.DoError(); return; } catch(...) { CATCHED; ASSERT(FALSE); } }
bool zst_load(FILE *fp, size_t Compressed) { size_t zst_version = 0; if (Compressed) { if (!zst_load_compressed(fp, Compressed)) { return(false); } } else { char zst_header_check[sizeof(zst_header_cur)-1]; Totalbyteloaded += fread(zst_header_check, 1, sizeof(zst_header_check), fp); if (!memcmp(zst_header_check, zst_header_cur, sizeof(zst_header_check)-2)) { zst_version = 143; //v1.43+ } if (!memcmp(zst_header_check, zst_header_old, sizeof(zst_header_check)-2)) { zst_version = 60; //v0.60 - v1.42 } if (!zst_version) { return(false); } //Pre v0.60 saves are no longer loaded load_save_size = 0; fhandle = fp; //Set global file handle copy_state_data(0, read_save_state_data, (zst_version == 143) ? csm_load_zst_new: csm_load_zst_old ); Totalbyteloaded += load_save_size; } if (SFXEnable) { SfxCPB = SfxMemTable[(SfxPBR & 0xFF)]; SfxCROM = SfxMemTable[(SfxROMBR & 0xFF)]; SfxRAMMem = (unsigned int)sfxramdata + ((SfxRAMBR & 0xFF) << 16); SfxRomBuffer += SfxCROM; SfxLastRamAdr += SfxRAMMem; SCBRrel = (SfxSCBR << 10) + (unsigned int)sfxramdata; } if (SA1Enable) { RestoreSA1(); //Convert back SA-1 stuff SA1UpdateDPageC(); } if (SDD1Enable) { UpdateBanksSDD1(); } //Clear cache check if state loaded ClearCacheCheck(); if (zst_version < 143) //Set new vars which old states did not have { prevoamptr = 0xFF; ioportval = 0xFF; spcnumread = 0; nexthdma = 0; } repackfunct(); initpitch(); ResetOffset(); ResetState(); procexecloop(); return(true); }