'From etoys3.0 of 24 February 2008 [latest update: #1918] on 16 March 2008 at 3:47:17 am'! "Change Set: SISSProjWithVersionAndCS-yo Date: 16 March 2008 Author: Yoshiki Ohshima Save project version and changeset in a project stored in the SISS format."! !PasteUpMorph methodsFor: '*siss-interface' stamp: 'yo 3/16/2008 02:54'! sissScanObjectsAsEtoysProject | dict ret | dict _ SISSDictionaryForScanning new initialize. self cleanUpReferences. dict boundaryObjects add: Utilities scrapsBook. Utilities scrapsBook pages do: [:p | dict boundaryObjects add: p]. worldState ifNotNil: [self hands do: [:h | dict boundaryObjects add: h]]. self setProperty: #projectVersion toValue: self project currentVersionNumber. ret _ dict sissScanObjectsFrom: self. self removeProperty: #projectVersion. ^ ret. ! ! !Project methodsFor: 'file in/out' stamp: 'yo 3/16/2008 02:52'! version: anInteger version _ anInteger. ! ! !Project methodsFor: 'file in/out' stamp: 'yo 3/16/2008 03:02'! writeForExportInSexp: sexp withSources: actualName inDirectory: aDirectory changeSet: aChangeSetOrNil | fileStream tempFileName zipper d | tempFileName _ aDirectory nextNameFor: 'SqProject' extension: 'temp'. zipper _ [ aDirectory rename: tempFileName toBe: actualName. aDirectory deleteFileNamed: tempFileName ifAbsent: [] ]. fileStream _ aDirectory newFileNamed: tempFileName. d _ DataStream on: (WriteStream on: (ByteArray new: sexp elements size * 50)). d nextPut: sexp. fileStream binary. fileStream nextPutAll: d contents. fileStream close. fileStream _ aDirectory newFileNamed: 'changes.cs'. aChangeSetOrNil ifNotNil: [aChangeSetOrNil fileOutOn: fileStream]. fileStream close. zipper value. ! ! !ProjectLoading class methodsFor: 'private' stamp: 'yo 3/16/2008 03:12'! loadSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView | archive anObject newProj d member b s memberStream members newSet | (self checkStream: preStream) ifTrue: [^ self]. ProgressNotification signal: '0.2'. preStream reset. archive _ preStream isZipArchive ifTrue:[ZipArchive new readFrom: preStream] ifFalse:[nil]. members _ archive membersMatching: '*.cs'. members do: [:e | newSet _ ChangeSorter newChangesFromStream: e contentStream named: 'zzTemp', Time totalSeconds printString]. member _ (archive membersMatching: '*.sexp') first. memberStream _ member contentStream. (self checkSecurity: member name preStream: preStream projStream: memberStream) ifFalse: [^nil]. b _ String new: member uncompressedSize. s _ RWBinaryOrTextStream on: b. s binary. s nextPutAll: memberStream basicUpToEnd. s reset. d _ DataStream on: s. anObject _ d next sissReadObjectsAsEtoysProject. "anObject _ (MSExpParser parse: (archive membersMatching: '*.sexp') first contents with: #ksexp) sissReadObjects." anObject ifNil: [^ self]. (anObject isKindOf: PasteUpMorph) ifFalse: [^ World addMorph: anObject]. preStream close. ProgressNotification signal: '0.7'. newProj _ Project newMorphicOn: anObject. newProj setChangeSet: newSet. newSet ifNotNil: [newProj setChangeSet: newSet]. dict at: 'projectname' ifPresent: [:n | newProj renameTo: n ]. anObject valueOfProperty: #projectVersion ifPresentDo: [:v | newProj version: v]. ProgressNotification signal: '0.8'. ^ newProj. ! ! !ProjectLoading class methodsFor: 'private' stamp: 'yo 3/16/2008 03:13'! openSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView | archive anObject newProj d member b s memberStream members newSet | (self checkStream: preStream) ifTrue: [^ self]. ProgressNotification signal: '0.2'. preStream reset. archive _ preStream isZipArchive ifTrue:[ZipArchive new readFrom: preStream] ifFalse:[nil]. members _ archive membersMatching: '*.cs'. members do: [:e | newSet _ ChangeSorter newChangesFromStream: e contentStream named: 'zzTemp', Time totalSeconds printString]. member _ (archive membersMatching: '*.sexp') first. memberStream _ member contentStream. (self checkSecurity: member name preStream: preStream projStream: memberStream) ifFalse: [^nil]. b _ String new: member uncompressedSize. s _ RWBinaryOrTextStream on: b. s binary. s nextPutAll: memberStream basicUpToEnd. s reset. d _ DataStream on: s. anObject _ d next sissReadObjectsAsEtoysProject. "anObject _ (MSExpParser parse: (archive membersMatching: '*.sexp') first contents with: #ksexp) sissReadObjects." anObject ifNil: [^ self]. (anObject isKindOf: PasteUpMorph) ifFalse: [^ World addMorph: anObject]. preStream close. ProgressNotification signal: '0.7'. newProj _ Project newMorphicOn: anObject. newSet ifNotNil: [newProj setChangeSet: newSet]. dict at: 'projectname' ifPresent: [:n | newProj renameTo: n ]. anObject valueOfProperty: #projectVersion ifPresentDo: [:v | newProj version: v]. ProgressNotification signal: '0.8'. ^ newProj ifNil: [self inform: 'No project found in this file' translated] ifNotNil: [ProjectEntryNotification signal: newProj]. ! !