void lat_sistema_iraxy(lat_mv * mv) { lat_objeto *x = lat_desapilar(mv); lat_objeto *y = lat_desapilar(mv); int yx = __numerico(y), xx = __numerico(x); printf("%c[%d;%df", 0x1B, yx, xx); fflush(stdout); }
void lat_modulo_decimal(lat_vm *vm) { lat_objeto *b = lat_desapilar(vm); lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, fmod(lat_obtener_decimal(a), lat_obtener_decimal(b))); }
void lat_arco_tangente2(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); lat_objeto *b = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, atan2(lat_obtener_decimal(a), lat_obtener_decimal(b))); }
void lat_potencia(lat_vm *vm) { lat_objeto *b = lat_desapilar(vm); lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, pow(lat_obtener_decimal(a), lat_obtener_decimal(b))); }
void lat_escribir_archivo(lat_vm *vm){ lat_objeto* s = lat_desapilar(vm); lat_objeto* o = lat_desapilar(vm); if(o->type == T_STR || o->type == T_LIT){ FILE* fp; fp = fopen(lat_obtener_cadena(o), "w"); const char* cad = lat_obtener_cadena(s); size_t lon = strlen(cad); fwrite(cad, 1 , lon , fp); fclose(fp); }else{ lat_registrar_error("No se pudo escribir en el archivo\n"); } }
void lat_sistema_fecha(lat_mv * mv) { lat_objeto *tiempo = lat_desapilar(mv); char *num = __cadena(tiempo); time_t raw; struct tm *tipo; time(&raw); tipo = localtime(&raw); lat_objeto *tmp = mv->objeto_nulo; if (!strcmp(num, "seg")) { tmp = lat_numerico_nuevo(mv, tipo->tm_sec); //segundos } else if (!strcmp(num, "min")) { tmp = lat_numerico_nuevo(mv, tipo->tm_min); } else if (!strcmp(num, "hora")) { tmp = lat_numerico_nuevo(mv, tipo->tm_hour); } else if (!strcmp(num, "d_mes")) { tmp = lat_numerico_nuevo(mv, tipo->tm_mday); // dia del mes } else if (!strcmp(num, "mes")) { tmp = lat_numerico_nuevo(mv, tipo->tm_mon); } else if (!strcmp(num, "año")) { tmp = lat_numerico_nuevo(mv, tipo->tm_year + 1900); } else if (!strcmp(num, "d_sem")) { tmp = lat_numerico_nuevo(mv, tipo->tm_wday); // día de la sem. } else if (!strcmp(num, "d_año")) { tmp = lat_numerico_nuevo(mv, tipo->tm_yday); // día del año } else if (!strcmp(num, "estacion")) { tmp = lat_numerico_nuevo(mv, tipo->tm_isdst); // verano/inv } else { filename = tiempo->nombre_archivo; lat_error("Linea %d, %d: %s", tiempo->num_linea, tiempo->num_columna, "el formato de tiempo indicado no existe."); } lat_apilar(mv, tmp); lat_gc_agregar(mv, tmp); }
void lat_sistema_avisar(lat_mv * mv) { lat_objeto *a = lat_desapilar(mv); signal(__numerico(a), proceso_al_activarse); if (!proceso_detenido) { lat_apilar(mv, mv->objeto_falso); return; } else { lat_apilar(mv, mv->objeto_verdadero); }; }
void lat_sistema_entorno(lat_mv * mv) { lat_objeto *a = lat_desapilar(mv); char *env = getenv(__cadena(a)); lat_objeto *tmp; if (env) { tmp = lat_cadena_nueva(mv, env); } else { tmp = mv->objeto_nulo; } lat_apilar(mv, tmp); }
void lat_sistema_pipe(lat_mv * mv) { lat_objeto *cmd = lat_desapilar(mv); FILE *fp = __lat_popen(mv, __cadena(cmd), "r"); size_t rlen = MAX_BUFFERSIZE; char *p = __memoria_asignar(NULL, rlen); fread(p, sizeof(char), rlen, fp); rlen = strlen(p); p[rlen - 1] = '\0'; // elimina el ultimo '\n' lat_objeto *tmp = lat_cadena_nueva(mv, strdup(p)); lat_apilar(mv, tmp); __lat_pclose(mv, fp); __memoria_liberar(mv, p); lat_gc_agregar(mv, tmp); }
void lat_leer_archivo(lat_vm *vm){ lat_objeto* o = lat_desapilar(vm); if(o->type == T_STR || o->type == T_LIT){ FILE *fp; char *buf; fp = fopen(lat_obtener_cadena(o), "r"); if (fp == NULL) { lat_registrar_error("No se pudo abrir el archivo\n"); } fseek(fp, 0, SEEK_END); int fsize = ftell(fp); fseek(fp, 0, SEEK_SET); buf = (char*)calloc(fsize, 1); size_t newSize = fread(buf, sizeof(char), fsize, fp); if (buf == NULL) { printf("No se pudo asignar %d bytes de memoria\n", fsize); } buf[newSize] = '\0'; vm->regs[255] = lat_cadena_nueva(vm, buf); }else{ lat_registrar_error("No se pudo abrir el archivo\n"); } }
void lat_exponente(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, exp(lat_obtener_decimal(a))); }
void lat_tangente_hiperbolica(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, tanh(lat_obtener_decimal(a))); }
void lat_seno_hiperbolico(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, sinh(lat_obtener_decimal(a))); }
void lat_coseno(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, cos(lat_obtener_decimal(a))); }
void lat_sistema_ejecutar(lat_mv * mv) { lat_objeto *cmd = lat_desapilar(mv); system(__cadena(cmd)); }
void lat_redondeo_abajo(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, floor(lat_obtener_decimal(a))); }
void lat_valor_absoluto(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, fabs(lat_obtener_decimal(a))); }
void lat_redondear_arriba(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, ceil(lat_obtener_decimal(a))); }
void lat_raiz_cuadrada(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, sqrt(lat_obtener_decimal(a))); }
void lat_sistema_dormir(lat_mv * mv) { lat_objeto *mili_segundos = lat_desapilar(mv); __lat_sleep(__numerico(mili_segundos)); }
void lat_logaritmo_base10(lat_vm *vm) { lat_objeto *a = lat_desapilar(vm); vm->registros[255] = lat_decimal_nuevo(vm, log10(lat_obtener_decimal(a))); }