00001
00002
00003
00004
00005
00006
00007 #include <ODEPT.H>
00008
00009
00010 #include <OGFILE.H>
00011
00012
00013
00014
00015
00016
00017
00018
00019
00021
00022
00023
00024 if( !filePtr->file_write( (char*) this + sizeof(DynArrayB), sizeof(DepartmentArray)-sizeof(DynArrayB) ) )
00025 return 0;
00026
00027 err_when(department_count == 0);
00028
00029
00030
00031 int i;
00032 Department *deptPtr;
00033
00034 int deptSize = size();
00035
00036 filePtr->file_put_short( deptSize );
00037
00038 for( i=1; i<=deptSize; i++) {
00039 deptPtr = (Department*) get_ptr(i);
00040
00041
00042
00043 if( !deptPtr ) {
00044 filePtr->file_put_short(0);
00045 }
00046 else {
00047 filePtr->file_put_short(1);
00048
00049
00050
00051 if( !deptPtr->write_file(filePtr) )
00052 return 0;
00053
00054 err_when(i != deptPtr->department_recno);
00055 }
00056 }
00057
00058
00059
00060 write_empty_room(filePtr);
00061
00062 return 1;
00063 }
00064
00065 int DepartmentArray::read_file(File* filePtr) {
00066 if( !filePtr->file_read( (char*) this + sizeof(DynArrayB), sizeof(DepartmentArray)-sizeof(DynArrayB) ) )
00067 return 0;
00068
00069 err_when(department_count == 0);
00070
00071
00072
00073 int i, deptRecno, deptSize;
00074 Department* deptPtr;
00075
00076 deptSize = filePtr->file_get_short();
00077
00078
00079
00080 for( i=1; i<=deptSize; i++) {
00081 if( filePtr->file_get_short() == 0 ) {
00082 add_blank(1);
00083 }
00084 else {
00085
00086
00087 deptRecno = create_dept();
00088
00089 deptPtr = department_array[deptRecno];
00090
00091
00092
00093 if( !deptPtr->read_file( filePtr ) )
00094 return 0;
00095
00096 deptPtr->create_department_firm();
00097
00098 err_when(deptRecno != deptPtr->department_recno);
00099 }
00100 }
00101
00102
00103
00104
00105
00106 for( i=size() ; i>0 ; i-- ) {
00107 DynArrayB::go(i);
00108
00109 if( get_ptr() == NULL )
00110 linkout();
00111 }
00112
00113
00114
00115 read_empty_room(filePtr);
00116
00117 err_when(packed_size() != department_count || department_count == 0);
00118 return 1;
00119 }
00120
00121
00122
00123
00125
00126 first_write_offset = 1;
00127
00128 if ( !GeneralDepartment::write_file(filePtr) )
00129 return 0;
00130
00131
00132
00133 if ( !faculty_array.write_file(filePtr) )
00134 return 0;
00135
00136 if ( !course_array.write_file(filePtr) )
00137 return 0;
00138
00139 #if(GAME_VERSION>=200)
00140 if ( !display_faculty_array.write_file(filePtr) )
00141 return 0;
00142
00143 if ( !cur_faculty_array.write_file(filePtr) )
00144 return 0;
00145 #endif
00146
00147
00148
00149 int writeSize = sizeof(Department) - ((char*)(&first_write_offset) - (char*)(this));
00150
00151 return filePtr->file_write( (&first_write_offset), writeSize);
00152 }
00153
00154 int Department::read_file(File* filePtr) {
00155 first_write_offset = 0;
00156
00157 if ( !GeneralDepartment::read_file(filePtr) )
00158 return 0;
00159
00160
00161
00162 if ( !faculty_array.read_file(filePtr) )
00163 return 0;
00164
00165 if ( !course_array.read_file(filePtr) )
00166 return 0;
00167
00168 #if(GAME_VERSION>=200)
00169 if ( !display_faculty_array.read_file(filePtr) )
00170 return 0;
00171
00172 if ( !cur_faculty_array.read_file(filePtr) )
00173 return 0;
00174 #endif
00175
00176
00177
00178 int readSize = sizeof(Department) - ((char*)(&first_write_offset) - (char*)(this));
00179
00180 if (! filePtr->file_read( (&first_write_offset), readSize) )
00181 return 0;
00182
00183 err_when(first_write_offset != 1);
00184
00185 return 1;
00186 }
00187
00188
00189
00190
00192
00193
00194
00195 if ( !student_array.write_file(filePtr) )
00196 return 0;
00197
00198
00199
00200 int writeSize = sizeof(GeneralDepartment) - ((char*)(&first_write_offset) - (char*)(this));
00201
00202 return filePtr->file_write( (&first_write_offset), writeSize);
00203 }
00204
00205 int GeneralDepartment::read_file(File* filePtr) {
00206
00207
00208 if ( !student_array.read_file(filePtr) )
00209 return 0;
00210
00211
00212
00213 int readSize = sizeof(GeneralDepartment) - ((char*)(&first_write_offset) - (char*)(this));
00214
00215 return filePtr->file_read( (&first_write_offset), readSize);
00216 }
00217
00218
00219
00220
00222
00223 if( !filePtr->file_write( (char*) this + sizeof(DynArrayB), sizeof(StudentArray)-sizeof(DynArrayB) ) )
00224 return 0;
00225
00226 return DynArrayB::write_file( filePtr );
00227 }
00228
00229 int StudentArray::read_file(File* filePtr) {
00230 if( !filePtr->file_read( (char*) this + sizeof(DynArrayB), sizeof(StudentArray)-sizeof(DynArrayB) ) )
00231 return 0;
00232
00233 if ( !DynArrayB::read_file( filePtr ) )
00234 return 0;
00235
00236 err_when(packed_size() != student_count);
00237
00238 return 1;
00239 }
00240
00241
00242
00243
00244
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00260
00261 if( !filePtr->file_write( (char*) this + sizeof(DynArrayB), sizeof(FacultyArray)-sizeof(DynArrayB) ) )
00262 return 0;
00263
00264 return DynArrayB::write_file( filePtr );
00265 }
00266
00267 int FacultyArray::read_file(File* filePtr) {
00268 if( !filePtr->file_read( (char*) this + sizeof(DynArrayB), sizeof(FacultyArray)-sizeof(DynArrayB) ) )
00269 return 0;
00270
00271 return DynArrayB::read_file( filePtr );
00272 }
00273
00274
00275
00276
00277
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00295
00296 if( !filePtr->file_write( (char*) this + sizeof(DynArrayB), sizeof(CourseArray)-sizeof(DynArrayB) ) )
00297 return 0;
00298
00299 return DynArrayB::write_file( filePtr );
00300 }
00301
00302 int CourseArray::read_file(File* filePtr) {
00303 if( !filePtr->file_read( (char*) this + sizeof(DynArrayB), sizeof(CourseArray)-sizeof(DynArrayB) ) )
00304 return 0;
00305
00306 return DynArrayB::read_file( filePtr );
00307 }
00308
00309
00310
00311
00312
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324