System unit structure/es

From Lazarus wiki
Jump to navigationJump to search

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 interfaz entre las partes comunes y las específicas de cada plataforma de la unidad system, así como de las subrutinas habitualmente utilizadas para tareas particulares durante el inicio de la unidad system y así especificar su comportamiento. Esto es útil como especificación para mantenedores de plataformas, existentes o nuevas, con el fin de asegurar un comportamiento completamente compatible (tanto como sea posible teniendo en consideración las limitaciones de cada una de las plataformas).

   Todas las rutinas enumeradas son obligatorias (al menos su declaración) a menos que se especifique otra cosa. Si no se menciona el nombre del archivo fuente habitual que contiene la implementación de la rutina, supondremos que se hace referencia a system.pas para las partes específicas de una plataforma 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>