Difference between revisions of "System unit structure/es"

From Free Pascal wiki
Jump to navigationJump to search
Line 1: Line 1:
== Estructura de la unit System ==
+
{{SystemUnitStructure}}[[category:Castellano]][[category:Español]]
 +
 
 +
== Estructura de la unidad System ==
  
 
(trabajo en progreso - ¡incompleto!)
 
(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).
+
Esta página trata de documentar funciones y procedimientos que sirven como "interfaces" entre common and platform specific parts of unidad System as well as commonly used subroutines for particular tasks performed during unidad 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.
 
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.
Line 9: Line 11:
 
== Tipos ==
 
== Tipos ==
  
Los siguientes tipos se asume que están definidos en el interface de la unit System para plataformas específicas:
+
Los siguientes tipos se asume que están definidos en el interface de la unidad System para plataformas específicas:
  
 
* THandle
 
* THandle
Line 86: Line 88:
 
=== Platform specific ===
 
=== Platform specific ===
  
==== Inicialización de la unit ====
+
==== Inicialización de la unidad ====
  
 
Se llevan a cabo las siguientes tareas:
 
Se llevan a cabo las siguientes tareas:
Line 95: Line 97:
 
* Inicialización de la variable ExitProc <POR HACER>
 
* Inicialización de la variable ExitProc <POR HACER>
 
* Inicialización del Heap (llamando a InitHeap compartido)
 
* 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]]
+
* Inicialización de procedimientos y variables potenciales y/o parámetros necesarios para soportar System unidad 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)
 
* InOutRes variable initialization (set to 0)
 
* Inicialización de variables de entorno (EnvC y EnvP), usualmente llamando a initEnvironment  - solamente necesario para plataformas que no proveen acceso nativo a estas variables.
 
* Inicialización de variables de entorno (EnvC y EnvP), usualmente llamando a initEnvironment  - solamente necesario para plataformas que no proveen acceso nativo a estas variables.
Line 167: Line 169:
 
== Rutinas públicas ==
 
== 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.
+
Las siguientes rutinas son parte del interface de la unidad 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 ===
 
=== Manejo de directorios ===

Revision as of 01:32, 10 September 2009

English (en) español (es) français (fr)

Estructura de la unidad 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 unidad System as well as commonly used subroutines for particular tasks performed during unidad 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 unidad 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


<EN ESPERA DE EDICIÓN>

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.

<EN ESPERA DE EDICIÓN>

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 abiertos).

<EN ESPERA DE EDICIÓN>

InitSystemThreads

<EN ESPERA DE EDICIÓN>

SetThreadManager

<EN ESPERA DE EDICIÓN>

InitHeapMutexes

<EN ESPERA DE EDICIÓN>

InitVariantManager

<EN ESPERA DE EDICIÓN>

InitWideStringManager

<EN ESPERA DE EDICIÓN>

Platform specific

Inicialización de la unidad

Se llevan a cabo las siguientes tareas:

  • Inicialización de la variable IsLibrary (true utilizando una librería compartida, 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 unidad 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)
  • Inicialización de variables de entorno (EnvC y EnvP), usualmente llamando a initEnvironment - solamente necesario para plataformas que no proveen acceso nativo a estas variables.
  • El Internal thread manager se inicializa llamando a InitSystemThreads
  • El Internal variant manager se inicializa llamando a InitVariantManager
  • El Internal widestring manager se inicializa llamando a 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.

<EN ESPERA DE EDICIÓN>

SysInitStdIO

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

<EN ESPERA DE EDICIÓN>

InitSystemThreads

<EN ESPERA DE EDICIÓN>

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 unidad 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 - <EN ESPERA DE EDICIÓN>)

Finalization

Shared

InternalExit

<EN ESPERA DE EDICIÓN>

FinalizeHeap

<EN ESPERA DE EDICIÓN>

Platform specific

FinalDeallocation

<EN ESPERA DE EDICIÓN>