/core/src/syslib/syslib.c
C | 251 lines | 189 code | 29 blank | 33 comment | 1 complexity | 7ee4689629128707e87764c8c6f269b2 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-3.0
- /*
- * Fenix - Videogame compiler/interpreter
- * Current release : FENIX - PROJECT 1.0
- * Project documentation : http://fenix.divsite.net
- *
- * Copyright © 2008 José Luis Cebrián Pagüe
- * Copyright © 2002 Fenix Team
- */
- #include <runtime/runtime.h>
- #include <syslib/f_dirs.h>
- #include <syslib/f_fileio.h>
- #include <syslib/f_math.h>
- #include <syslib/f_syslib.h>
- #include <syslib/f_sort.h>
- #include <syslib/f_strings.h>
- /* Global variables */
- int TIMER = 0;
- int ARGC = 0;
- int ARGV_TABLE = 0;
- int REGEX_REG = 0;
- int FILEINFO = 0;
- int FILE_PATH = 0;
- int FILE_NAME = 0;
- int FILE_DIRECTORY = 0;
- int FILE_HIDDEN = 0;
- int FILE_READONLY = 0;
- int FILE_SIZE = 0;
- int FILE_CREATED = 0;
- int FILE_MODIFIED = 0;
- int FXI_OS = 0;
- /* Locals */
- int PROCESS_ID = 0;
- int BIGBRO = 0;
- int FATHER = 0;
- int SON = 0;
- int SMALLBRO = 0;
- int PRIORITY = 0;
- int STATUS = 0;
- int ID_SCAN = 0;
- int TYPE_SCAN = 0;
- int PROCESS_TYPE = 0;
- int SAVED_STATUS = 0;
- int SAVED_PRIORITY = 0;
- int FRAME_PERCENT = 0;
- static struct
- {
- char * name ;
- int code ;
- }
- constants_def[] =
- {
- { "TRUE", 1 },
- { "FALSE", 0 },
- { "S_KILL", 0 },
- { "S_WAKEUP", 1 },
- { "S_SLEEP", 2 },
- { "S_FREEZE", 3 },
- { "S_KILL_TREE", 100 },
- { "S_WAKEUP_TREE", 101 },
- { "S_SLEEP_TREE", 102 },
- { "S_FREEZE_TREE", 103 },
- { "MIN_INT", -32767 },
- { "MAX_INT", 32767 },
- { "PI", 180000 },
- { "O_READ", 0 },
- { "O_READWRITE", 1 },
- { "O_RDWR", 1 },
- { "O_WRITE", 2 },
- { "O_ZREAD", 3 },
- { "O_ZWRITE", 4 },
- { 0, 0 }
- } ;
- void syslib_register()
- {
- int i, code;
- /* ----------------------------------------------------------------------
- * Constants
- * ---------------------------------------------------------------------- */
- for (i = 0 ; constants_def[i].name ; i++)
- {
- code = identifier_search_or_add (constants_def[i].name) ;
- constants_add (code, typedef_new(TYPE_DWORD), constants_def[i].code) ;
- }
- /* ----------------------------------------------------------------------
- * Globals
- * ---------------------------------------------------------------------- */
- /* Fileinfo struct */
- VARSPACE * fileinfo = varspace_new();
- FILE_PATH = varspace_add (fileinfo, variable_new( "PATH", typedef_new(TYPE_STRING) ));
- FILE_NAME = varspace_add (fileinfo, variable_new( "NAME", typedef_new(TYPE_STRING) ));
- FILE_DIRECTORY = varspace_add (fileinfo, variable_new( "DIRECTORY", typedef_new(TYPE_DWORD) ));
- FILE_HIDDEN = varspace_add (fileinfo, variable_new( "HIDDEN", typedef_new(TYPE_DWORD) ));
- FILE_READONLY = varspace_add (fileinfo, variable_new( "READONLY", typedef_new(TYPE_DWORD) ));
- FILE_SIZE = varspace_add (fileinfo, variable_new( "SIZE", typedef_new(TYPE_DWORD) ));
- FILE_CREATED = varspace_add (fileinfo, variable_new( "CREATED", typedef_new(TYPE_STRING) ));
- FILE_MODIFIED = varspace_add (fileinfo, variable_new( "MODIFIED", typedef_new(TYPE_STRING) ));
- varspace_varstring(fileinfo, FILE_NAME);
- varspace_varstring(fileinfo, FILE_CREATED);
- varspace_varstring(fileinfo, FILE_MODIFIED);
- TIMER = global_add ( "TIMER", typedef_array_of (TYPE_DWORD, 10) );
- ARGC = global_add ( "ARGC", typedef_new (TYPE_DWORD) );
- ARGV_TABLE = global_add ( "ARGV", typedef_array_of (TYPE_STRING, 32) );
- REGEX_REG = global_add ( "REGEX_REG", typedef_array_of (TYPE_STRING, 16) );
- FILEINFO = global_add ( "FILEINFO", typedef_struct (fileinfo, 1) );
- FXI_OS = global_add ( "OS_ID", typedef_new (TYPE_DWORD) );
- /* Adjust fileinfo offsets */
- FILE_PATH += FILEINFO;
- FILE_NAME += FILEINFO;
- FILE_DIRECTORY += FILEINFO;
- FILE_HIDDEN += FILEINFO;
- FILE_READONLY += FILEINFO;
- FILE_SIZE += FILEINFO;
- FILE_CREATED += FILEINFO;
- FILE_MODIFIED += FILEINFO;
- /* ----------------------------------------------------------------------
- * Locals
- * ---------------------------------------------------------------------- */
- PROCESS_ID = local_add ( "ID", typedef_new (TYPE_DWORD) );
- PRIORITY = local_add ( "PRIORITY", typedef_new (TYPE_DWORD) );
- BIGBRO = local_add ( "BIGBRO", typedef_new (TYPE_DWORD) );
- FATHER = local_add ( "FATHER", typedef_new (TYPE_DWORD) );
- SMALLBRO = local_add ( "SMALLBRO", typedef_new (TYPE_DWORD) );
- SON = local_add ( "SON", typedef_new (TYPE_DWORD) );
- /* Reserved */
- ID_SCAN = local_add ( "#ID_SCAN", typedef_new (TYPE_DWORD) );
- TYPE_SCAN = local_add ( "#TYPE_SCAN", typedef_new (TYPE_DWORD) );
- STATUS = local_add ( "#STATUS", typedef_new (TYPE_DWORD) );
- SAVED_STATUS = local_add ( "#SAVED_STATUS", typedef_new (TYPE_DWORD) );
- PROCESS_TYPE = local_add ( "#PROCESS_TYPE", typedef_new (TYPE_DWORD) );
- FRAME_PERCENT = local_add ( "#FRAME_PERCENT", typedef_new(TYPE_DWORD) );
- SAVED_PRIORITY = local_add ( "#SAVED_PRIORITY", typedef_new(TYPE_DWORD) );
- DEFAULT_LOCDWORD(STATUS, 2);
- DEFAULT_LOCDWORD(SAVED_STATUS, 2);
-
- /* ----------------------------------------------------------------------
- * System functions
- * ---------------------------------------------------------------------- */
- sysproc_add( "SAY" , "S" , TYPE_DWORD , fxi_say);
- /* Math */
- sysproc_add( "RAND" , "II" , TYPE_DWORD , fxi_rand);
- sysproc_add( "RAND_SEED" , "I" , TYPE_DWORD , fxi_rand_seed);
- sysproc_add( "ABS" , "F" , TYPE_FLOAT , fxi_abs);
- sysproc_add( "POW" , "FF" , TYPE_FLOAT , fxi_pow);
- sysproc_add( "SQRT" , "F" , TYPE_FLOAT , fxi_sqrt);
- sysproc_add( "COS" , "F" , TYPE_FLOAT , fxi_cos);
- sysproc_add( "SIN" , "F" , TYPE_FLOAT , fxi_sin);
- sysproc_add( "TAN" , "F" , TYPE_FLOAT , fxi_tan);
- sysproc_add( "ACOS" , "F" , TYPE_FLOAT , fxi_acos);
- sysproc_add( "ASIN" , "F" , TYPE_FLOAT , fxi_asin);
- sysproc_add( "ATAN" , "F" , TYPE_FLOAT , fxi_atan);
- /* Process interaction */
- sysproc_add( "GET_ID" , "I" , TYPE_DWORD , fxi_get_id);
- sysproc_add( "SIGNAL" , "II" , TYPE_DWORD , fxi_signal);
- sysproc_add( "LET_ME_ALONE" , "" , TYPE_DWORD , fxi_let_me_alone);
- sysproc_add( "EXIT" , "SI" , TYPE_DWORD , fxi_exit);
- sysproc_add( "EXIT" , "S" , TYPE_DWORD , fxi_exit_1);
- sysproc_add( "EXIT" , "" , TYPE_DWORD , fxi_exit_0);
- sysproc_add( "EXISTS" , "I" , TYPE_DWORD , fxi_running);
- /* Time & date */
- sysproc_add( "TIME" , "" , TYPE_DWORD , fxi_time);
- sysproc_add( "FTIME" , "SI" , TYPE_STRING , fxi_ftime);
- /* File management */
- sysproc_add( "SAVE" , "SV++" , TYPE_DWORD , fxi_save);
- sysproc_add( "LOAD" , "SV++" , TYPE_DWORD , fxi_load);
- sysproc_add( "FOPEN" , "SI" , TYPE_DWORD , fxi_fopen);
- sysproc_add( "FCLOSE" , "I" , TYPE_DWORD , fxi_fclose);
- sysproc_add( "FREAD" , "IV++" , TYPE_DWORD , fxi_fread);
- sysproc_add( "FWRITE" , "IV++" , TYPE_DWORD , fxi_fwrite);
- sysproc_add( "FSEEK" , "III" , TYPE_DWORD , fxi_fseek);
- sysproc_add( "FTELL" , "I" , TYPE_DWORD , fxi_ftell);
- sysproc_add( "FLENGTH" , "I" , TYPE_DWORD , fxi_filelength);
- sysproc_add( "FPUTS" , "IS" , TYPE_DWORD , fxi_fputs);
- sysproc_add( "FGETS" , "I" , TYPE_STRING , fxi_fgets);
- sysproc_add( "FEOF" , "I" , TYPE_DWORD , fxi_feof);
- sysproc_add( "FILE" , "S" , TYPE_STRING , fxi_file);
- sysproc_add( "FILE_EXISTS" , "S" , TYPE_DWORD , fxi_file_exists);
- /* Directory management */
- sysproc_add( "CD" , "" , TYPE_STRING , fxi_cd);
- sysproc_add( "CD" , "S" , TYPE_STRING , fxi_chdir);
- sysproc_add( "CHDIR" , "S" , TYPE_DWORD , fxi_chdir);
- sysproc_add( "MKDIR" , "S" , TYPE_DWORD , fxi_mkdir);
- sysproc_add( "RMDIR" , "S" , TYPE_DWORD , fxi_rmdir);
- sysproc_add( "GLOB" , "S" , TYPE_STRING , fxi_glob);
- /* String managament */
- sysproc_add( "LEN" , "S" , TYPE_DWORD , fxi_strlen);
- sysproc_add( "UCASE" , "S" , TYPE_STRING , fxi_strupper);
- sysproc_add( "LCASE" , "S" , TYPE_STRING , fxi_strlower);
- sysproc_add( "SUBSTR" , "SII" , TYPE_STRING , fxi_substr);
- sysproc_add( "FIND" , "SS" , TYPE_DWORD , fxi_strfind);
- sysproc_add( "ITOA" , "I" , TYPE_STRING , fxi_itos);
- sysproc_add( "FTOA" , "F" , TYPE_STRING , fxi_ftos);
- sysproc_add( "ATOI" , "S" , TYPE_DWORD , fxi_stoi);
- sysproc_add( "ATOF" , "S" , TYPE_FLOAT , fxi_stof);
- sysproc_add( "ASC" , "S" , TYPE_BYTE , fxi_asc);
- sysproc_add( "CHR" , "I" , TYPE_STRING , fxi_chr);
- sysproc_add( "SUBSTR" , "SI" , TYPE_STRING , fxi_substr2);
- sysproc_add( "TRIM" , "S" , TYPE_STRING , fxi_trim);
- sysproc_add( "FORMAT" , "I" , TYPE_STRING , fxi_formatI);
- sysproc_add( "FORMAT" , "F" , TYPE_STRING , fxi_formatF);
- sysproc_add( "FORMAT" , "FI" , TYPE_STRING , fxi_formatFI);
- sysproc_add( "STRREV" , "S" , TYPE_STRING , fxi_strrev);
- sysproc_add( "REGEX" , "SS" , TYPE_DWORD , fxi_regex);
- sysproc_add( "REGEX_REPLACE" , "SSS" , TYPE_STRING , fxi_regex_replace);
- sysproc_add( "SPLIT" , "SSPI" , TYPE_DWORD , fxi_split);
- sysproc_add( "JOIN" , "SPI" , TYPE_STRING , fxi_join);
- sysproc_add( "STRCASECMP" , "SS" , TYPE_DWORD , fxi_strcasecmp);
- sysproc_add( "FIND" , "SSI" , TYPE_DWORD , fxi_strfindSSI);
- sysproc_add( "LPAD" , "SI" , TYPE_STRING , fxi_lpad);
- sysproc_add( "RPAD" , "SI" , TYPE_STRING , fxi_rpad);
- /* Memory management */
- sysproc_add( "ALLOC" , "I" , TYPE_POINTER, fxi_alloc);
- sysproc_add( "FREE" , "P" , TYPE_DWORD , fxi_free);
- sysproc_add( "REALLOC" , "PI" , TYPE_POINTER, fxi_realloc);
- sysproc_add( "MEMSET" , "PBI" , TYPE_DWORD , fxi_memset);
- sysproc_add( "MEMSETW" , "PWI" , TYPE_DWORD , fxi_memsetw);
- sysproc_add( "MEMCOPY" , "PPI" , TYPE_DWORD , fxi_memcopy);
- /* Sort & struct copy */
- sysproc_add( "#COPY#" , "PV++" , TYPE_POINTER, fxi_copy_struct);
- sysproc_add( "KSORT" , "V++V++", TYPE_DWORD , fxi_ksort);
- sysproc_add( "KSORT" , "V++V++I",TYPE_DWORD , fxi_ksort_n);
- sysproc_add( "SORT" , "V++I" , TYPE_DWORD , fxi_sort_n);
- sysproc_add( "SORT" , "V++" , TYPE_DWORD , fxi_sort);
- }