Ignore:
Timestamp:
Sep 6, 2017, 6:47:49 PM (7 years ago)
Author:
chronos
Message:
  • Modified: Separate API command to be kernel and user space. Execute API command through single callback function.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Kernel/UKernel.pas

    r10 r12  
    77uses
    88  Classes, Math, SysUtils, UList, Contnrs, UFileSystem, UMemory, UScreen, UDevice,
    9   fgl, UApp, UScheduler;
     9  fgl, UApp, UScheduler, UApi;
    1010
    1111type
     
    2626  TKernel = class
    2727  private
     28    Api: TKernelApi;
    2829    procedure InitVideo;
     30    function KernelApiExecute(Command: TApiCommand; Data: Pointer): Pointer;
    2931  public
    3032    Apps: TNamedObjectList<TApp>;
     
    8890end;
    8991
     92function TKernel.KernelApiExecute(Command: TApiCommand;
     93  Data: Pointer): Pointer;
     94begin
     95  Result := Api.Call(Command, Data);
     96end;
     97
    9098procedure TKernel.AppExecute(AFile: TFile);
    9199var
     
    94102  App := TApp(Apps.FindByName(AFile.Name));
    95103  if Assigned(App) then begin
    96     App.API.Kernel := Self;
     104    App.API.KernelApiCallback := KernelApiExecute;
    97105    Scheduler.AddTask(App.Name, App.Run);
    98106  end else raise Exception.Create('Application ''' + AFile.Name + ''' no found');
     
    119127  NewFile.Name := 'Clock2';
    120128  NewDrive.FileSystem.TopDirectory.Items.Add(NewFile);
    121 InitVideo;
     129  InitVideo;
    122130end;
    123131
     
    149157  Scheduler := TScheduler.Create;
    150158  Screens := TFPGObjectList<TScreen>.Create;
     159  Api := TKernelApi.Create;
     160  Api.Kernel := Self;
    151161end;
    152162
    153163destructor TKernel.Destroy;
    154164begin
    155   Screens.Free;
    156   Scheduler.Free;
    157   Apps.Free;
    158   Drives.Free;
    159   Devices.Free;
     165  FreeAndNil(Api);
     166  FreeAndNil(Screens);
     167  FreeAndNil(Scheduler);
     168  FreeAndNil(Apps);
     169  FreeAndNil(Drives);
     170  FreeAndNil(Devices);
    160171  inherited Destroy;
    161172end;
Note: See TracChangeset for help on using the changeset viewer.