System unit structure/es: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: System unit structure/es
| Old | New | Line | |
|---|---|---|---|
| 1 | + | ## Estructura de la unidad System | |
| 2 | + | ||
| 3 | + | (trabajo en progreso - ¡incompleto!) | |
| 4 | + | ||
| 5 | + | Esta página trata de documentar funciones y procedimientos que sirven como [interfaz](http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=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). | |
| 6 | + | ||
| 7 | + | 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. | |
| 8 | + | ||
| 9 | + | ## Tipos | |
| 10 | + | ||
| 11 | + | Los siguientes tipos se asume que están definidos en el interface de la unidad System para plataformas específicas: | |
| 12 | + | ||
| 13 | + | - THandle | |
| 14 | + | - TThreadID | |
| 15 | + | - TRTLCriticalSection | |
| 16 | + | - PRTLCriticalSection | |
| 17 | + | ||
| 18 | + | ## Constantes y variables | |
| 19 | + | ||
| 20 | + | 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: | |
| 21 | + | ||
| 22 | + | - LineEnding | |
| 23 | + | - DirectorySeparator | |
| 24 | + | - DriveSeparator | |
| 25 | + | - PathSeparator | |
| 26 | + | - MaxExitCode | |
| 27 | + | - MaxPathLen | |
| 28 | + | - UnusedHandle | |
| 29 | + | - StdInputHandle | |
| 30 | + | - StdOutputHandle | |
| 31 | + | - StdErrorHandle | |
| 32 | + | - LFNSupport | |
| 33 | + | - FileNameCaseSensitive | |
| 34 | + | - CtrlZMarksEof | |
| 35 | + | - sLineBreak | |
| 36 | + | - DefaultTextLineBreakStyle | |
| 37 | + | - ArgC | |
| 38 | + | - ArgV | |
| 39 | + | - EnvC | |
| 40 | + | - EnvP | |
| 41 | + | ||
| 42 | + | \<EN ESPERA DE EDICIÓN\> | |
| 43 | + | ||
| 44 | + | ## Initialization | |
| 45 | + | ||
| 46 | + | ### Shared | |
| 47 | + | ||
| 48 | + | #### InitHeap | |
| 49 | + | ||
| 50 | + | Implementado en heap.inc. | |
| 51 | + | ||
| 52 | + | 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. | |
| 53 | + | ||
| 54 | + | #### SysInitExceptions | |
| 55 | + | ||
| 56 | + | Inicialización de estructuras internas utilizadas por el soporte de excepciones. | |
| 57 | + | ||
| 58 | + | \<EN ESPERA DE EDICIÓN\> | |
| 59 | + | ||
| 60 | + | #### Apertura estandar de entrada/salida: OpenStdIO (Open Standard Input/Output) | |
| 61 | + | ||
| 62 | + | 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). | |
| 63 | + | ||
| 64 | + | \<EN ESPERA DE EDICIÓN\> | |
| 65 | + | ||
| 66 | + | #### InitSystemThreads | |
| 67 | + | ||
| 68 | + | \<EN ESPERA DE EDICIÓN\> | |
| 69 | + | ||
| 70 | + | #### SetThreadManager | |
| 71 | + | ||
| 72 | + | \<EN ESPERA DE EDICIÓN\> | |
| 73 | + | ||
| 74 | + | #### InitHeapMutexes | |
| 75 | + | ||
| 76 | + | \<EN ESPERA DE EDICIÓN\> | |
| 77 | + | ||
| 78 | + | #### InitVariantManager | |
| 79 | + | ||
| 80 | + | \<EN ESPERA DE EDICIÓN\> | |
| 81 | + | ||
| 82 | + | #### InitWideStringManager | |
| 83 | + | ||
| 84 | + | \<EN ESPERA DE EDICIÓN\> | |
| 85 | + | ||
| 86 | + | ### Platform specific | |
| 87 | + | ||
| 88 | + | #### Inicialización de la unidad | |
| 89 | + | ||
| 90 | + | Se llevan a cabo las siguientes tareas: | |
| 91 | + | ||
| 92 | + | - Inicialización de la variable IsLibrary (true utilizando una librería compartida, false en cuaquier otro caso) | |
| 93 | + | - Inicialización de las variables ProcessID y ThreadID. | |
| 94 | + | - 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)). | |
| 95 | + | - Inicialización de la variable ExitProc \<POR HACER\> | |
| 96 | + | - Inicialización del Heap (llamando a InitHeap compartido) | |
| 97 | + | - 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]] | |
| 98 | + | - InOutRes variable initialization (set to 0) | |
| 99 | + | - 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. | |
| 100 | + | - El Internal thread manager se inicializa llamando a InitSystemThreads | |
| 101 | + | - El Internal variant manager se inicializa llamando a InitVariantManager | |
| 102 | + | - El Internal widestring manager se inicializa llamando a InitWideStringManager | |
| 103 | + | ||
| 104 | + | #### Inicialización del entorno (InitEnvironment) | |
| 105 | + | ||
| 106 | + | Solamente necesario para aquellas plataformas que no aportan acceso nativo a las variables EnvC y EnvP. | |
| 107 | + | ||
| 108 | + | 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). | |
| 109 | + | ||
| 110 | + | #### Argumentos de inicio (InitArguments) | |
| 111 | + | ||
| 112 | + | Solamente se necesitan en plataformas que no aportan acceso a variables ArgC, ArgV y/o CmdLine en modo nativo. | |
| 113 | + | ||
| 114 | + | \<EN ESPERA DE EDICIÓN\> | |
| 115 | + | ||
| 116 | + | #### SysInitStdIO | |
| 117 | + | ||
| 118 | + | Inicialización de variables estandar de fichero (Input, Output, ErrOutput, StdOut and StdErr). | |
| 119 | + | ||
| 120 | + | \<EN ESPERA DE EDICIÓN\> | |
| 121 | + | ||
| 122 | + | #### InitSystemThreads | |
| 123 | + | ||
| 124 | + | \<EN ESPERA DE EDICIÓN\> | |
| 125 | + | ||
| 126 | + | ## General tasks | |
| 127 | + | ||
| 128 | + | ### Platform specific | |
| 129 | + | ||
| 130 | + | #### Manejo de ficheros | |
| 131 | + | ||
| 132 | + | Usualmente implementado en el fichero sysfile.inc. | |
| 133 | + | ||
| 134 | + | ##### Do_Close | |
| 135 | + | ||
| 136 | + | ##### Do_Erase | |
| 137 | + | ||
| 138 | + | ##### Do_Rename | |
| 139 | + | ||
| 140 | + | ##### Do_Read | |
| 141 | + | ||
| 142 | + | ##### Do_Write | |
| 143 | + | ||
| 144 | + | ##### Do_FilePos | |
| 145 | + | ||
| 146 | + | ##### Do_Seek | |
| 147 | + | ||
| 148 | + | ##### Do_SeekEnd | |
| 149 | + | ||
| 150 | + | ##### Do_FileSize | |
| 151 | + | ||
| 152 | + | ##### Do_Truncate | |
| 153 | + | ||
| 154 | + | ##### Do_Open | |
| 155 | + | ||
| 156 | + | ##### Do_IsDevice | |
| 157 | + | ||
| 158 | + | #### Heap management | |
| 159 | + | ||
| 160 | + | ##### SysOSAlloc | |
| 161 | + | ||
| 162 | + | ##### SysOSFree | |
| 163 | + | ||
| 164 | + | #### Threading Support | |
| 165 | + | ||
| 166 | + | ##### SysInitThreadVar | |
| 167 | + | ||
| 168 | + | ##### SysRelocateThreadVar | |
| 169 | + | ||
| 170 | + | #### Other | |
| 171 | + | ||
| 172 | + | ##### System_Exit | |
| 173 | + | ||
| 174 | + | ## Rutinas públicas | |
| 175 | + | ||
| 176 | + | 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. | |
| 177 | + | ||
| 178 | + | ### Manejo de directorios | |
| 179 | + | ||
| 180 | + | Usualmente implementado en sysdir.inc. | |
| 181 | + | ||
| 182 | + | - MkDir | |
| 183 | + | - RmDir | |
| 184 | + | - ChDir | |
| 185 | + | - GetDir | |
| 186 | + | ||
| 187 | + | ### Otros | |
| 188 | + | ||
| 189 | + | - Randomize | |
| 190 | + | - ParamCount, ParamStr (posiblemente para ser movido a common - \<EN ESPERA DE EDICIÓN\>) | |
| 191 | + | ||
| 192 | + | ## Finalization | |
| 193 | + | ||
| 194 | + | ### Shared | |
| 195 | + | ||
| 196 | + | #### InternalExit | |
| 197 | + | ||
| 198 | + | \<EN ESPERA DE EDICIÓN\> | |
| 199 | + | ||
| 200 | + | #### FinalizeHeap | |
| 201 | + | ||
| 202 | + | \<EN ESPERA DE EDICIÓN\> | |
| 203 | + | ||
| 204 | + | ### Platform specific | |
| 205 | + | ||
| 206 | + | #### FinalDeallocation | |
| 207 | + | ||
| 208 | + | \<EN ESPERA DE EDICIÓN\> | |
| 209 | + | ||
| 210 | + | --- | |
| 211 | + | *From the Free Pascal wiki, page "System unit structure/es", as it stood on 2010-01-08 after a change by Iskraelectrica, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 212 | + | Category: Castellano | |
| 213 | + | Category: Español |
