Difference between revisions of "System unit structure/es"

From Lazarus wiki
Jump to navigationJump to search
Line 55: Line 55:
 
==== SysInitExceptions ====
 
==== SysInitExceptions ====
  
Initialization of internal structures used by the exception support.
+
Inicialización de estructuras internas utilizadas por el soporte de excepciones.
  
<TODO>
+
<POR REALIZAR>
  
 
==== Apertura estandar de entrada/salida: OpenStdIO (Open Standard Input/Output) ====
 
==== Apertura estandar de entrada/salida: OpenStdIO (Open Standard Input/Output) ====

Revision as of 00:14, 31 August 2009

Estructura de la unit System

(trabajo en progreso - ¡incompleto!)

Esta página trata de documentar funciones y procedimientos que sirven como "interfaces" entre common and platform specific parts of unit System as well as commonly used subroutines for particular tasks performed during unit System initialization and specify their behaviour. This should then serve as specification for mantenedores de plataformas nuevas y ya existentes para asegurar un comportamiento totalmente (tanto como sea posible teniendo en consideración las limitaciones de las plataformas individuales).

Todas las rutinas listadas son mandatorias (at least as stub) a menos que se mencione otra cosa específicamente. Si no se menciona el nombre del fichero fuente habitual que contiene la implementación de la rutina, entonces se supone que hace referencia a system.pas para partes de una plataforma específica y a system.inc para las rutinas compartidas entre plataformas.

Tipos

Los siguientes tipos se asume que están definidos en el interface de la unit System para plataformas específicas:

  • THandle
  • TThreadID
  • TRTLCriticalSection
  • PRTLCriticalSection

Constantes y variables

El siguiente listado incluye contantes y variables mandatorias que han de ser declaradas (y habitualmente inicializadas con valores razonables acordes a una plataforma en particular) para todas las plataformas:

  • LineEnding
  • DirectorySeparator
  • DriveSeparator
  • PathSeparator
  • MaxExitCode
  • MaxPathLen
  • UnusedHandle
  • StdInputHandle
  • StdOutputHandle
  • StdErrorHandle
  • LFNSupport
  • FileNameCaseSensitive
  • CtrlZMarksEof
  • sLineBreak
  • DefaultTextLineBreakStyle
  • ArgC
  • ArgV
  • EnvC
  • EnvP


<TODO>

Initialization

Shared

InitHeap

Implementado en heap.inc.

Inicialización de estructuras internas utilizadas por el gestor por defecto de la memoria del heap (montón). No es posible utilizar el heap (montón) sin antes llamar a InitHeap.

SysInitExceptions

Inicialización de estructuras internas utilizadas por el soporte de excepciones.

<POR REALIZAR>

Apertura estandar de entrada/salida: OpenStdIO (Open Standard Input/Output)

Parte común de la inicialización para variables de fichero estandar. Es similar a las llamadas Assign y Reset/Rewrite utilizadas con ficheros de texto, pero los ficheros son asociados con nombres de fichero vacios y no se hacen intentos de apertura de ficheros (se asume que ya están habiertos).

<POR ESCRIBIR>

InitSystemThreads

<TODO>

SetThreadManager

<TODO>

InitHeapMutexes

<TODO>

InitVariantManager

<TODO>

InitWideStringManager

<TODO>

Platform specific

Inicialización de la unit

Se llevan a cabo las siguientes tareas:

  • Inicialización de la variable IsLibrary (true if running in a shared library, false en cuaquier otro caso)
  • Inicialización de las variables ProcessID y ThreadID.
  • Inicialización de la variable IsConsole (true si está funcionando en una consola de texto, false si está funcionando en una aplicación de ventana bajo un Interface Gráfico de Usuario (GUI)).
  • Inicialización de la variable ExitProc <POR HACER>
  • Inicialización del Heap (llamando a InitHeap compartido)
  • Inicialización de procedimientos y variables potenciales y/o parámetros necesarios para soportar System unit rutina que requieren distintas implementaciones dependiendo de la versión de sistema operativo detectada (posiblemente incluyendo una carga dinámica de procedimientos y funciones de librerias compartidas donde se requiera) - ver OS aware RTL
  • InOutRes variable initialization (set to 0)
  • Environment variables initialization (EnvC and EnvP), usually by calling InitEnvironment - only needed for platforms not providing access to these variables natively
  • Internal thread manager is initialized by calling InitSystemThreads
  • Internal variant manager is initialized by calling InitVariantManager
  • Internal widestring manager is initialized by calling InitWideStringManager

Inicialización del entorno (InitEnvironment)

Solamente necesario para aquellas plataformas que no aportan acceso nativo a las variables EnvC y EnvP.

El procedimiento chequea las variables de entorno y las almacena en EnvC. Entonces se asigna memoria para EnvP^ desde la heap (matriz de EnvC + 1 elementos del tipo PChar (puntero a carácter) - the list pointer will point to nil). Finalmente los elementos individuales en la matriz se inicializan con PCHARS apuntando a cadenas finalizadas con null que contienen el nombre de variable de entornoe, equal sign and the environment variable value. Memory for the individual null terminated strings may be allocated from heap for these strings and they may be copied there if needed (i.e. if the particular platform doesn't provide pointer to a fixed location for these strings in required format).

Argumentos de inicio (InitArguments)

Solamente se necesitan en plataformas que no aportan acceso a variables ArgC, ArgV y/o CmdLine en modo nativo.

<TODO>

SysInitStdIO

Inicialización de variables estandar de fichero (Input, Output, ErrOutput, StdOut and StdErr).

<TODO>

InitSystemThreads

<TODO>

General tasks

Platform specific

Manejo de ficheros

Usualmente implementado en el fichero sysfile.inc.

Do_Close
Do_Erase
Do_Rename
Do_Read
Do_Write
Do_FilePos
Do_Seek
Do_SeekEnd
Do_FileSize
Do_Truncate
Do_Open
Do_IsDevice

Heap management

SysOSAlloc
SysOSFree

Threading Support

SysInitThreadVar
SysRelocateThreadVar

Other

System_Exit

Rutinas públicas

Las siguientes rutinas son parte del interface de la unit System y se suponen implementadas completamente en plataformas específicas. Su especificación está disponible en la documentación de FPC, por que que son listadas aquí mayormente para aportar una lista completa en vista a su portabilidad.

Manejo de directorios

Usualmente implementado en sysdir.inc.

  • MkDir
  • RmDir
  • ChDir
  • GetDir

Otros

  • Randomize
  • ParamCount, ParamStr (posiblemente para ser movido a common - <TODO>)

Finalization

Shared

InternalExit

<TODO>

FinalizeHeap

<TODO>

Platform specific

FinalDeallocation

<TODO>