From: Olivier S. <ob...@us...> - 2003-09-27 04:11:03
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1:/tmp/cvs-serv16385/dev/JVCL3/run Modified Files: JvTFManager.pas Log Message: BCB fixes and code cleanup. Refer to newsgroup for details Index: JvTFManager.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvTFManager.pas,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** JvTFManager.pas 17 Aug 2003 14:26:09 -0000 1.6 --- JvTFManager.pas 27 Sep 2003 04:10:48 -0000 1.7 *************** *** 32,44 **** interface - {$IFDEF COMPILER3} - uses Windows, Classes, Controls, SysUtils, Messages, Graphics, ExtCtrls, - Printers, JvTFUtils - {$IFDEF USEJVCL}, JvComponent{$ENDIF}; - {$ELSE} uses Windows, Classes, Controls, SysUtils, Messages, Graphics, ImgList, ExtCtrls, Printers, JvTFUtils {$IFDEF USEJVCL}, JvComponent{$ENDIF}; - {$ENDIF} const --- 32,38 ---- *************** *** 54,57 **** --- 48,56 ---- EJvTFScheduleManagerError = class(Exception); + TJvTFTimeRange = record + StartTime: TTime; + EndTime: TTime; + end; + TJvTFServNotifyCode = (sncDestroyAppt, sncDestroySchedule, *************** *** 151,167 **** TJvTFStateImageMap = class(TPersistent) private - {$IFDEF COMPILER3} - FPics: array[Ord(Low(TJvTFStatePic))..Ord(High(TJvTFStatePic))] of integer; - {$ELSE} FPics: array[Low(TJvTFStatePic)..High(TJvTFStatePic)] of integer; - {$ENDIF} - {$IFDEF COMPILER3} - procedure SetImage(Index, Value: integer); - function GetImage(Index: integer): integer; - {$ELSE} procedure SetImage(StatePicID: TJvTFStatePic; Value: integer); function GetImage(StatePicID: TJvTFStatePic): integer; ! {$ENDIF} protected FScheduleManager: TJvTFScheduleManager; --- 150,167 ---- TJvTFStateImageMap = class(TPersistent) private FPics: array[Low(TJvTFStatePic)..High(TJvTFStatePic)] of integer; procedure SetImage(StatePicID: TJvTFStatePic; Value: integer); function GetImage(StatePicID: TJvTFStatePic): integer; ! function GetAlarmDisabled: integer; ! function GetAlarmEnabled: integer; ! function GetModified: integer; ! function GetRecurring: integer; ! function GetShared: integer; ! procedure SetAlarmDisabled(const Value: integer); ! procedure SetAlarmEnabled(const Value: integer); ! procedure SetModified(const Value: integer); ! procedure SetRecurring(const Value: integer); ! procedure SetShared(const Value: integer); protected FScheduleManager: TJvTFScheduleManager; *************** *** 174,214 **** procedure Clear; procedure Assign(Source: TPersistent); override; - {$IFDEF COMPILER3} - property Pics[Index: integer]: integer read GetImage write SetImage; - {$ELSE} property Pics[Index: TJvTFStatePic]: integer read GetImage write SetImage; - {$ENDIF} published ! {$IFDEF COMPILER3} ! property AlarmEnabled: integer index Ord(spAlarmEnabled) read GetImage write SetImage; ! property AlarmDisabled: integer index Ord(spAlarmDisabled) read GetImage write SetImage; ! property Shared: integer index Ord(spShared) read GetImage write SetImage; ! property Recurring: integer index Ord(spRecurring) read GetImage write SetImage; ! property Modified: integer index Ord(spModified) read GetImage write SetImage; ! {$ELSE} ! property AlarmEnabled: integer index spAlarmEnabled read GetImage write SetImage; ! property AlarmDisabled: integer index spAlarmDisabled read GetImage write SetImage; ! property Shared: integer index spShared read GetImage write SetImage; ! property Recurring: integer index spRecurring read GetImage write SetImage; ! property Modified: integer index spModified read GetImage write SetImage; ! {$ENDIF} ! end; ! ! TJvTFTimeRange = record ! StartTime: TTime; ! EndTime: TTime; end; - {$IFNDEF COMPILER3} TDynTimeRangeArray = array of TJvTFTimeRange; - {$ENDIF} - {$IFNDEF COMPILER3} TDynApptArray = array of TJvTFAppt; - {$ENDIF} - {$IFNDEF COMPILER3} TDynSchedArray = array of TJvTFSched; - {$ENDIF} TJvTFAppt = class(TObject) --- 174,197 ---- procedure Clear; procedure Assign(Source: TPersistent); override; property Pics[Index: TJvTFStatePic]: integer read GetImage write SetImage; published ! property AlarmEnabled: integer {index spAlarmEnabled} ! read GetAlarmEnabled write SetAlarmEnabled; ! property AlarmDisabled: integer {index spAlarmDisabled} ! read GetAlarmDisabled write SetAlarmDisabled; ! property Shared: integer {index spShared} ! read GetShared write SetShared; ! property Recurring: integer {index spRecurring} ! read GetRecurring write SetRecurring; ! //read GetImage write SetImage; ! property Modified: integer {index spModified} ! read GetModified write SetModified; end; TDynTimeRangeArray = array of TJvTFTimeRange; TDynApptArray = array of TJvTFAppt; TDynSchedArray = array of TJvTFSched; TJvTFAppt = class(TObject) *************** *** 351,357 **** procedure ConnectionsOnChange(Sender: TObject); procedure CheckConnections; - {$IFNDEF COMPILER3} function GetFreeUsedTime(FreeTime: boolean): TDynTimeRangeArray; dynamic; - {$ENDIF} public constructor Create(Serv: TJvTFScheduleManager; AName: string; ADate: TDate); virtual; --- 334,338 ---- *************** *** 376,380 **** // Conflict and free time methods - {$IFNDEF COMPILER3} function GetFreeTime: TDynTimeRangeArray; dynamic; function GetUsedTime: TDynTimeRangeArray; dynamic; --- 357,360 ---- *************** *** 392,396 **** function EnumConflicts(anAppt: TJvTFAppt): TDynApptArray; overload; dynamic; - {$ENDIF} property Cached: boolean read FCached; --- 372,375 ---- *************** *** 475,485 **** FRefreshAutoReconcile: boolean; - {$IFDEF COMPILER3} - FStateImages: TImageList; - FCustomImages: TImageList; - {$ELSE} FStateImages: TCustomImageList; FCustomImages: TCustomImageList; - {$ENDIF} FStateImageMap: TJvTFStateImageMap; FCache: TJvTFScheduleManagerCache; --- 454,459 ---- *************** *** 492,502 **** function GetConControl(Index: integer): TJvTFControl; function GetConComponent(Index: integer): TJvTFComponent; - {$IFDEF COMPILER3} - procedure SetStateImages(Value: TImageList); - procedure SetCustomImages(Value: TImageList); - {$ELSE} procedure SetStateImages(Value: TCustomImageList); procedure SetCustomImages(Value: TCustomImageList); - {$ENDIF} procedure SetCache(Value: TJvTFScheduleManagerCache); --- 466,471 ---- *************** *** 548,562 **** BatchEndDate: TDate); virtual; - {$IFDEF COMPILER3} - procedure RequestRefresh(ApptCtrl: TJvTFControl; - Schedule: TJvTFSched); dynamic; - procedure ComponentRequestRefresh(Comp: TJvTFComponent; - Schedule: TJvTFSched); dynamic; - {$ELSE} procedure RequestRefresh(ApptCtrl: TJvTFControl; Schedule: TJvTFSched); overload; dynamic; procedure RequestRefresh(Comp: TJvTFComponent; Schedule: TJvTFSched); overload; dynamic; - {$ENDIF} procedure ImageListChange(Sender: TObject); --- 517,524 ---- *************** *** 594,603 **** property ConComponents[Index: integer]: TJvTFComponent read GetConComponent; - {$IFDEF COMPILER3} - function RequestSchedule(ApptCtrl: TJvTFControl; SchedName: string; - SchedDate: TDate): TJvTFSched; - function ComponentRequestSchedule(Comp: TJvTFComponent; - SchedName: string; SchedDate: TDate): TJvTFSched; - {$ELSE} function RequestSchedule(ApptCtrl: TJvTFControl; SchedName: string; SchedDate: TDate): TJvTFSched; overload; --- 556,559 ---- *************** *** 609,625 **** function RequestSchedule(Comp: TJvTFComponent; SchedName: string; SchedDate: TDate; var LoadedNow: boolean): TJvTFSched; overload; - {$ENDIF} - {$IFDEF COMPILER3} - procedure ReleaseSchedule(ApptCtrl: TJvTFControl; SchedName: string; - SchedDate: TDate); - procedure ComponentReleaseSchedule(Comp: TJvTFComponent; - SchedName: string; SchedDate: TDate); - {$ELSE} procedure ReleaseSchedule(ApptCtrl: TJvTFControl; SchedName: string; SchedDate: TDate); overload; procedure ReleaseSchedule(Comp: TJvTFComponent; SchedName: string; SchedDate: TDate); overload; - {$ENDIF} procedure ProcessBatches; --- 565,573 ---- *************** *** 644,652 **** procedure RefreshConnections(Trigger: TObject); virtual; property Flushing: boolean read FFlushing; - {$IFDEF COMPILER3} - procedure Flush(All: boolean); virtual; - {$ELSE} procedure Flush(All: boolean = false); virtual; - {$ENDIF} function GetApptDisplayText(AComponent: TComponent; --- 592,596 ---- *************** *** 661,671 **** property OnPostAppt: TJvTFApptEvent read FOnPostAppt write FOnPostAppt; property OnDeleteAppt: TJvTFApptEvent read FOnDeleteAppt write FOnDeleteAppt; - {$IFDEF COMPILER3} - property StateImages: TImageList read FStateImages write SetStateImages; - property CustomImages: TImageList read FCustomImages write SetCustomImages; - {$ELSE} property StateImages: TCustomImageList read FStateImages write SetStateImages; property CustomImages: TCustomImageList read FCustomImages write SetCustomImages; - {$ENDIF} property StateImageMap: TJvTFStateImageMap read FStateImageMap write FStateImageMap; property Cache: TJvTFScheduleManagerCache read FCache write SetCache; --- 605,610 ---- *************** *** 754,762 **** procedure PropertyCheck; dynamic; public - {$IFDEF COMPILER3} - constructor Create(anApptCtrl: TJvTFControl); - {$ELSE} constructor Create(anApptCtrl: TJvTFControl); reintroduce; - {$ENDIF} destructor Destroy; override; procedure ActivateHint(Rect: TRect; const AHint: string); override; --- 693,697 ---- *************** *** 1259,1276 **** { TJvTFStateImageMap } - {$IFDEF COMPILER3} - - constructor TJvTFStateImageMap.Create(Serv: TJvTFScheduleManager); - var - I: integer; - begin - inherited Create; - - for I := Ord(Low(TJvTFStatePic)) to Ord(High(TJvTFStatePic)) do - FPics[I] := -1; - - FUpdating := false; - end; - {$ELSE} constructor TJvTFStateImageMap.Create(Serv: TJvTFScheduleManager); --- 1194,1197 ---- *************** *** 1285,1303 **** FUpdating := false; end; - {$ENDIF} - - {$IFDEF COMPILER3} - - procedure TJvTFStateImageMap.SetImage(Index, Value: integer); - begin - if Value < -1 then - Value := -1; - if FPics[Index] <> Value then - begin - FPics[Index] := Value; - Change; - end; - end; - {$ELSE} procedure TJvTFStateImageMap.SetImage(StatePicID: TJvTFStatePic; Value: integer); --- 1206,1209 ---- *************** *** 1311,1329 **** end; end; - {$ENDIF} ! {$IFDEF COMPILER3} ! function TJvTFStateImageMap.GetImage(Index: integer): integer; begin ! Result := FPics[Index]; end; - {$ELSE} ! function TJvTFStateImageMap.GetImage(StatePicID: TJvTFStatePic): integer; begin ! Result := FPics[StatePicID]; end; - {$ENDIF} procedure TJvTFStateImageMap.Change; --- 1217,1275 ---- end; end; ! function TJvTFStateImageMap.GetImage(StatePicID: TJvTFStatePic): integer; ! begin ! Result := FPics[StatePicID]; ! end; ! function TJvTFStateImageMap.GetAlarmDisabled: integer; begin ! Result := GetImage(spAlarmDisabled); end; ! function TJvTFStateImageMap.GetAlarmEnabled: integer; begin ! Result := GetImage(spAlarmEnabled); ! end; ! ! function TJvTFStateImageMap.GetModified: integer; ! begin ! Result := GetImage(spModified); ! end; ! ! function TJvTFStateImageMap.GetRecurring: integer; ! begin ! Result := GetImage(spRecurring); ! end; ! ! function TJvTFStateImageMap.GetShared: integer; ! begin ! Result := GetImage(spShared); ! end; ! ! procedure TJvTFStateImageMap.SetAlarmDisabled(const Value: integer); ! begin ! SetImage(spAlarmDisabled, Value); ! end; ! ! procedure TJvTFStateImageMap.SetAlarmEnabled(const Value: integer); ! begin ! SetImage(spAlarmEnabled, Value); ! end; ! ! procedure TJvTFStateImageMap.SetModified(const Value: integer); ! begin ! SetImage(spModified, Value); ! end; ! ! procedure TJvTFStateImageMap.SetRecurring(const Value: integer); ! begin ! SetImage(spRecurring, Value); ! end; ! ! procedure TJvTFStateImageMap.SetShared(const Value: integer); ! begin ! SetImage(spShared, Value); end; procedure TJvTFStateImageMap.Change; *************** *** 1348,1363 **** end; - {$IFDEF COMPILER3} - - procedure TJvTFStateImageMap.Clear; - var - I: integer; - begin - for I := Ord(Low(TJvTFStatePic)) to Ord(High(TJvTFStatePic)) do - FPics[I] := -1; - Change; - end; - {$ELSE} - procedure TJvTFStateImageMap.Clear; var --- 1294,1297 ---- *************** *** 1368,1389 **** Change; end; - {$ENDIF} - - {$IFDEF COMPILER3} - - procedure TJvTFStateImageMap.Assign(Source: TPersistent); - var - Pic: integer; - begin - if Source is TJvTFStateImageMap then - begin - for Pic := Ord(Low(TJvTFStatePic)) to Ord(High(TJvTFStatePic)) do - FPics[Pic] := TJvTFStateImageMap(Source).Pics[Pic]; - Change; - end - else - inherited Assign(Source); - end; - {$ELSE} procedure TJvTFStateImageMap.Assign(Source: TPersistent); --- 1302,1305 ---- *************** *** 1400,1404 **** inherited Assign(Source); end; - {$ENDIF} { TJvTFAppt } --- 1316,1319 ---- *************** *** 1977,1985 **** begin Comp := TJvTFComponent(FConComponents.Objects[0]); - {$IFDEF COMPILER3} - ScheduleManager.ComponentReleaseSchedule(Comp, SchedName, SchedDate); - {$ELSE} ScheduleManager.ReleaseSchedule(Comp, SchedName, SchedDate); - {$ENDIF} end; --- 1892,1896 ---- *************** *** 2112,2117 **** end; - {$IFNDEF COMPILER3} - function TJvTFSched.GetFreeUsedTime(FreeTime: boolean): TDynTimeRangeArray; var --- 2023,2026 ---- *************** *** 2224,2228 **** end; end; - {$ENDIF} function TJvTFSched.ApptCount: integer; --- 2133,2136 ---- *************** *** 2329,2333 **** end; - {$IFNDEF COMPILER3} function TJvTFSched.GetFreeTime: TDynTimeRangeArray; --- 2237,2240 ---- *************** *** 2335,2341 **** Result := GetFreeUsedTime(true); end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFSched.GetUsedTime: TDynTimeRangeArray; --- 2242,2245 ---- *************** *** 2343,2349 **** Result := GetFreeUsedTime(false); end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFSched.TimeIsFree(TimeRange: TJvTFTimeRange): boolean; --- 2247,2250 ---- *************** *** 2365,2371 **** end; end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFSched.TimeIsFree(RangeStart, RangeEnd: TTime): boolean; --- 2266,2269 ---- *************** *** 2377,2383 **** Result := TimeIsFree(TimeRange); end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFSched.ApptHasConflicts(anAppt: TJvTFAppt): boolean; --- 2275,2278 ---- *************** *** 2400,2406 **** end; end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFSched.EnumConflicts(TimeRange: TJvTFTimeRange): TDynApptArray; --- 2295,2298 ---- *************** *** 2421,2427 **** end; end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFSched.EnumConflicts(RangeStart, RangeEnd: TTime): TDynApptArray; --- 2313,2316 ---- *************** *** 2433,2439 **** Result := EnumConflicts(TimeRange); end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFSched.EnumConflicts(anAppt: TJvTFAppt): TDynApptArray; --- 2322,2325 ---- *************** *** 2455,2459 **** end; end; - {$ENDIF} function TJvTFSched.GetFirstAppt: TJvTFAppt; --- 2341,2344 ---- *************** *** 2703,2722 **** end; - {$IFDEF COMPILER3} - - procedure TJvTFScheduleManager.SetStateImages(Value: TImageList); - begin - if Assigned(FStateImages) then - FStateImages.UnRegisterChanges(FImageChangeLink); - - FStateImages := Value; - - if Assigned(FStateImages) then - begin - FStateImages.RegisterChanges(FImageChangeLink); - FStateImages.FreeNotification(Self); - end; - end; - {$ELSE} procedure TJvTFScheduleManager.SetStateImages(Value: TCustomImageList); --- 2588,2591 ---- *************** *** 2733,2754 **** end; end; - {$ENDIF} - - {$IFDEF COMPILER3} - - procedure TJvTFScheduleManager.SetCustomImages(Value: TImageList); - begin - if Assigned(FCustomImages) then - FCustomImages.UnRegisterChanges(FImageChangeLink); - - FCustomImages := Value; - - if Assigned(FCustomImages) then - begin - FCustomImages.RegisterChanges(FImageChangeLink); - FCustomImages.FreeNotification(Self); - end; - end; - {$ELSE} procedure TJvTFScheduleManager.SetCustomImages(Value: TCustomImageList); --- 2602,2605 ---- *************** *** 2765,2769 **** end; end; - {$ENDIF} procedure TJvTFScheduleManager.SetCache(Value: TJvTFScheduleManagerCache); --- 2616,2619 ---- *************** *** 2985,2997 **** end; - {$IFDEF COMPILER3} - - procedure TJvTFScheduleManager.ComponentRequestRefresh(Comp: TJvTFComponent; - Schedule: TJvTFSched); - begin - NotifyComp(Comp, Self, sncRefresh); - end; - {$ENDIF} - procedure TJvTFScheduleManager.RequestRefresh(ApptCtrl: TJvTFControl; Schedule: TJvTFSched); --- 2835,2838 ---- *************** *** 3007,3012 **** end; - {$IFNDEF COMPILER3} - procedure TJvTFScheduleManager.RequestRefresh(Comp: TJvTFComponent; Schedule: TJvTFSched); --- 2848,2851 ---- *************** *** 3014,3018 **** NotifyComp(Comp, Self, sncRefresh); end; - {$ENDIF} procedure TJvTFScheduleManager.ImageListChange(Sender: TObject); --- 2853,2856 ---- *************** *** 3118,3141 **** end; - {$IFDEF COMPILER3} - - function TJvTFScheduleManager.ComponentRequestSchedule(Comp: TJvTFComponent; - SchedName: string; SchedDate: TDate): TJvTFSched; - var - ApptsNeeded: boolean; - begin - RetrieveSchedule(SchedName, SchedDate, Result, ApptsNeeded); - - if Assigned(Comp) then - begin - Result.Notify(Comp, sncRequestSchedule); - Comp.Notify(Result, sncRequestSchedule); - end; - - if ApptsNeeded then - NeedAppts(Result); - end; - {$ENDIF} - function TJvTFScheduleManager.RequestSchedule(ApptCtrl: TJvTFControl; SchedName: string; SchedDate: TDate): TJvTFSched; --- 2956,2959 ---- *************** *** 3160,3164 **** end; - {$IFNDEF COMPILER3} function TJvTFScheduleManager.RequestSchedule(ApptCtrl: TJvTFControl; --- 2978,2981 ---- *************** *** 3176,3182 **** NeedAppts(Result); end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFScheduleManager.RequestSchedule(Comp: TJvTFComponent; --- 2993,2996 ---- *************** *** 3196,3202 **** NeedAppts(Result); end; - {$ENDIF} - - {$IFNDEF COMPILER3} function TJvTFScheduleManager.RequestSchedule(Comp: TJvTFComponent; --- 3010,3013 ---- *************** *** 3214,3247 **** NeedAppts(Result); end; - {$ENDIF} - - {$IFDEF COMPILER3} - - procedure TJvTFScheduleManager.ComponentReleaseSchedule(Comp: TJvTFComponent; - SchedName: string; SchedDate: TDate); - var - SchedID: string; - I: integer; - Schedule: TJvTFSched; - begin - SchedID := GetScheduleID(SchedName, SchedDate); - I := FSchedules.IndexOf(SchedID); - - if I > -1 then - begin - Schedule := TJvTFSched(FSchedules.Objects[I]); - - if Assigned(Comp) then - begin - Schedule.Notify(Comp, sncReleaseSchedule); - Comp.Notify(Schedule, sncReleaseSchedule); - end; - - if Cache.CacheType = ctBuffer then - Flush(false); - end; - end; - {$ENDIF} - procedure TJvTFScheduleManager.ReleaseSchedule(ApptCtrl: TJvTFControl; SchedName: string; SchedDate: TDate); --- 3025,3028 ---- *************** *** 3269,3273 **** end; - {$IFNDEF COMPILER3} procedure TJvTFScheduleManager.ReleaseSchedule(Comp: TJvTFComponent; --- 3050,3053 ---- *************** *** 3295,3299 **** end; end; - {$ENDIF} procedure TJvTFScheduleManager.RequestAppt(ID: string; var Appt: TJvTFAppt; --- 3075,3078 ---- *************** *** 3443,3460 **** // refresh all schedules for all components connected to the ScheduleManager for I := 0 to ConComponentCount - 1 do - {$IFDEF COMPILER3} - ComponentRequestRefresh(ConComponents[I], nil); - {$ELSE} RequestRefresh(ConComponents[I], nil); - {$ENDIF} end else if Trigger is TJvTFComponent then begin // refresh all schedules for given component - {$IFDEF COMPILER3} - ComponentRequestRefresh(TJvTFComponent(Trigger), nil); - {$ELSE} RequestRefresh(TJvTFComponent(Trigger), nil); - {$ENDIF} end else if Trigger is TJvTFControl then --- 3222,3231 ---- *************** *** 3471,3479 **** // refresh all utf components connected to schedule for I := 0 to Sched.ConComponentCount - 1 do - {$IFDEF COMPILER3} - ComponentRequestRefresh(Sched.ConComponents[I], Sched); - {$ELSE} RequestRefresh(Sched.ConComponents[I], Sched); - {$ENDIF} end else if Trigger is TJvTFAppt then --- 3242,3246 ---- *************** *** 4408,4416 **** if FSchedules.IndexOf(SchedID) > -1 then if Assigned(ScheduleManager) then - {$IFDEF COMPILER3} - ScheduleManager.ComponentReleaseSchedule(Self, SchedName, SchedDate) - {$ELSE} ScheduleManager.ReleaseSchedule(Self, SchedName, SchedDate) - {$ENDIF} else raise EJvTFScheduleManagerError.Create('Could not release schedule. ' + --- 4175,4179 ---- *************** *** 4449,4457 **** if not Assigned(Result) then if Assigned(ScheduleManager) then - {$IFDEF COMPILER3} - Result := ScheduleManager.ComponentRequestSchedule(Self, SchedName, SchedDate) - {$ELSE} Result := ScheduleManager.RequestSchedule(Self, SchedName, SchedDate) - {$ENDIF} else raise EJvTFScheduleManagerError.Create('Could not retrieve schedule. ' + --- 4212,4216 ---- |