Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BlackBlex

#21
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola Black bex, para compiladores es muy util  El libro del dragón (Dragon Book en inglés), yo hice un compilador hace poco en c++, con su respectivo analizador sintatico y semantico en librerias, si necesitas ayuda con gusto y tiempo se te dara una respuesta!, Saludos.

Le echaré un vistazo, y de paso haber si lo consigo en físico el libro, te contactaré si me surge alguna duda.

Gracias.
#22
Alguien ha leído algún libro sobre compiladores y que recomienden?

Enviado desde mi MotoG3 mediante Tapatalk

#23
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Te recomiendo que todos los parámetros de tipo cadena que sepas que no se van a modificar sean pasados por referencia, ya que si no estableces la instrucción se copia la cadena que estableces como parámetro y luego es liberada, básicamente se genera código basura que a pesar de tener razón, no sirve para estos casos.

Tienes razón, no sabia que funcionaba así
#24
Diseño UX/UI / Re:Pide tu firma.
Marzo 07, 2017, 12:04:33 PM


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Sera que la puedas hacer como wallpaper para pc?, esta me gusto mucho para esto.

Aparte la segunda esta genial.

BlackBlex

Enviado desde mi MotoG3 mediante Tapatalk

#25
Otros lenguajes / Re:Primeros pasos con Cramel
Marzo 04, 2017, 05:20:11 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Me parece que se callo el link del resaltador  :-\
Saludos!! :)

El link funciona correctamente. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Y para descargar el archivo es este: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta <- Debes dar click derecho y guardar como.
#26
Les traigo este código el cual te facilita la escritura y lectura de un archivo.



Información

  • Compatible con Cramel: 2.0.0.362
  • Librerías requeridas: MSVBVM60.cml



Tiene los siguientes métodos:

  • abrir(dirección:Cadena, DesiredAccess, CreationDisposition:Entero) - Abrimos el archivo
  • abrir(dirección, modo:Cadena) - Abrimos el archivo
  • escribir(texto:Cadena) - Escribimos en el archivo
  • leer(texto:Cadena) - Leemos el archivo y establecemos el contenido a texto
  • cerrar() - Cerramos el archivo

Para obtener información del archivo están los siguientes metodos:

  • conseguirPtr() - Retorna el puntero del archivo
  • conseguirNombre() - Retorna el nombre del archivo
  • conseguirDirectorio() - Retorna el directorio del archivo
  • conseguirExtension() - Retorna la extensión del archivo
  • conseguirTamaño() - Retorna el tamaño del archivo en bytes
  • esLectura() - Retorna Verdad si el archivo es de lectura
  • esEscritura() - Retorna Verdad si el archivo es de escritura

Para usarla solo es de Importar la librería Cramel, Archivo y su archivo de constantes propia; después declaramos una variable del tipo ArchivoC o ArchivoF y creamos el objecto.

Para el parámetro DesiredAccess se puede usar:
GENERIC_WRITE - Para la escritura del archivo. (Reemplaza todo el contenido)
GENERIC_READ - Para la lectura del archivo.
FILE_APPEND_DATA - Para la escritura del archivo. (Escribe al final de este)

Para el parámetro CreationDisposition se puede usar:
OPEN_EXISTING - Abre el archivo solo si existe.
OPEN_ALWAYS - Abre el archivo siempre, sino existe lo crea.
CREATE_NEW - Crea el archivo, si existe marcará error.
CREATE_ALWAYS - Crea un nuevo archivo, si existe lo reescribe.

Para el parámetro modo se puede usar:
r - Para la lectura del archivo, este debe de existir.
w - Para la escritura del archivo, este se crea sino existe o se sobreescribe si existe.
a - Para la escritura del archivo,este se crea sino existe. (Escribe al final de este)
r+ - Para lectura y escritura del archivo, este debe de existir.
w+ - Para lectura y escritura del archivo este se crea sino existe o se sobreescribe si existe.




Y es todo por el momento.

Aquí el código Archivo.cml:

Código: text
'/**
' * Archivos
' *
' * @author  Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' *      Filename: Archivo.cml
' * ---------------------------------------
'*/

'APIS'
API CDECL fwrite(buffer, size, number, file:Entero):Entero, "msvcrt"
API CDECL fscanf(file:Entero, formato:Cadena, destino:Entero):Entero, "msvcrt"
API CDECL fopen(fileName:Cadena, modo:Cadena):Entero, "msvcrt"
API CDECL fclose(file:Entero):Entero, "msvcrt"
API CDECL fseek(file, offset, origin:Entero):Entero, "msvcrt"
API CDECL ftell(file:Entero):Entero, "msvcrt"

Clase InfoArchivo
    Var nombreArchivo:Cadena
    Var directorioArchivo:Cadena
    Var extensionArchivo:Cadena
    Var lecturaArchivo:Booleano
    Var escrituraArchivo:Booleano
    Var tamañoArchivo:Entero
    Var ptrArchivo:Entero
   
    Proc conseguirNombre():Cadena
        Resultado = nombreArchivo
    FinProc

    Proc conseguirDirectorio():Cadena
        Resultado = directorioArchivo
    FinProc
   
    Proc conseguirExtension():Cadena
        Resultado = extensionArchivo
    FinProc

    Proc conseguirTamaño():Entero
        Resultado = tamañoArchivo
    FinProc

    Proc esLectura():Booleano
        Resultado = lecturaArchivo
    FinProc

    Proc esEscritura():Booleano
        Resultado = escrituraArchivo
    FinProc

    Proc conseguirPtr():Entero
        Resultado = ptrArchivo
    FinProc

    Proc checarApertura():Booleano
        Si (ptrArchivo = 0) Entonces
            Mensaje("No puedes realizar operaciones si no está abierto el archivo")
            Resultado = Falso
        SiNo
            Resultado = Verdad
        FinSi
    FinProc
FinClase

Clase ArchivoC(InfoArchivo),_
    archivoNombre[],_
    archivoExtension[],_
    separador,_
    texto:Cadena,_
    temp:Entero

    Destructor:Finalizador

    Proc Finalizador
        cerrar()
    FinProc

    Sección Pública
        Proc abrir(dirección:Cadena, DesiredAccess, CreationDisposition:Entero)
            Si Buscar(dirección, "\\") > 0 Entonces
                separador = "\\"
            SiNo
                separador = "\/"
            FinSi

            archivoNombre = Separar(dirección, separador)
            nombreArchivo = archivoNombre[&archivoNombre-1]
            archivoExtension = Separar(nombreArchivo, ".")
            extensionArchivo = archivoExtension[&archivoExtension-1]
            directorioArchivo = Reemplazar(dirección, separador + nombreArchivo, "")

            Si DesiredAccess = GENERIC_READ Entonces
                lecturaArchivo = Verdad
                escrituraArchivo = Falso
            OSi (DesiredAccess = GENERIC_WRITE) Or (DesiredAccess = FILE_APPEND_DATA) Entonces
                escrituraArchivo = Verdad
                lecturaArchivo = Falso
            OSi DesiredAccess = (GENERIC_WRITE + GENERIC_READ) Entonces
                escrituraArchivo = Verdad
                lecturaArchivo = Verdad
            FinSi

            ptrArchivo = CreateFile(dirección, DesiredAccess, nulo , nulo, CreationDisposition, FILE_ATTRIBUTE_NORMAL,0)

            Si ( ptrArchivo = INVALID_HANDLE ) Entonces
                Mensaje("El archivo no pudo ser abierto: " + dirección)
            FinSi

            tamañoArchivo = GetFileSize(ptrArchivo, nulo)
        FinProc

        Proc escribir(Referencia txt:Cadena)
            Si( checarApertura() = Verdad ) Entonces
                Si( escrituraArchivo = Verdad ) Entonces
                    WriteFile(ptrArchivo, StrPtr(txt), CadLong(txt), temp, nulo)
                SiNo
                    Mensaje("No se permite la escritura cuando el archivo esta abierto como solo lectura.")
                FinSi
            FinSi
        FinProc

        Proc leer():Cadena
            Si( checarApertura() = Verdad ) Entonces
                Si( lecturaArchivo = Verdad ) Entonces
                    texto = Espacio(tamañoArchivo+1)
                    ReadFile(ptrArchivo, StrPtr(texto), tamañoArchivo, temp, nulo)
                    Resultado = texto
                SiNo
                    Mensaje("No se permite la lectura cuando el archivo esta abierto como solo escritura.")
                FinSi
            FinSi
        FinProc

        Proc cerrar()
            Si ( checarApertura() = Verdad ) Entonces
                CloseFile(ptrArchivo)
            FinSi
        FinProc
FinClase

Clase ArchivoF(InfoArchivo),_
    archivoNombre[],_
    archivoExtension[],_
    separador,_
    texto:Cadena,_
    temp:Entero

    Destructor:Finalizador

    Proc Finalizador
        cerrar()
    FinProc

    Sección Pública
        Proc abrir(dirección, modo:Cadena)
            Si Buscar(dirección, "\\") > 0 Entonces
                separador = "\\"
            SiNo
                separador = "\/"
            FinSi

            temp = fopen(dirección, "r")
            fseek(temp, 0, SEEK_END)
            tamañoArchivo = ftell(temp)
            fclose(temp)
            temp = 0

            archivoNombre = Separar(dirección, separador)           
            nombreArchivo = archivoNombre[&archivoNombre-1]
            archivoExtension = Separar(nombreArchivo, ".")
            extensionArchivo = archivoExtension[&archivoExtension-1]
            directorioArchivo = Reemplazar(dirección, separador + nombreArchivo, "")

            Si Buscar(modo, "+") Entonces
                lecturaArchivo = Verdad
                escrituraArchivo = Verdad
            OSi Buscar(modo, "r") Entonces
                lecturaArchivo = Verdad
                escrituraArchivo = Falso
            OSi Buscar(modo, "w") or Buscar(modo, "a") Entonces
                lecturaArchivo = Falso
                escrituraArchivo = Verdad
            FinSi

            ptrArchivo = fopen(dirección, modo)

            Si ( ptrArchivo = INVALID_HANDLE ) Entonces
                Mensaje("El archivo no pudo ser abierto: " + dirección)
            FinSi

        FinProc

        Proc escribir(Referencia txt:Cadena)
            Si( checarApertura() = Verdad ) Entonces
                Si( escrituraArchivo = Verdad ) Entonces
                    fwrite(StrPtr(txt), CadLong(txt), 1, ptrArchivo)
                SiNo
                    Mensaje("No se permite la escritura cuando el archivo esta abierto como solo lectura.")
                FinSi
            FinSi
        FinProc

        Proc leer():Cadena
            Si( checarApertura() = Verdad ) Entonces
                Si( lecturaArchivo = Verdad ) Entonces
                    texto = Espacio(MAX_PATH)
                    fscanf(ptrArchivo, "%[^" + CRLF + "] " + CRLF, StrPtr(texto))
                    Resultado = texto
                SiNo
                    Mensaje("No se permite la lectura cuando el archivo esta abierto como solo escritura.")
                FinSi
            FinSi
        FinProc

        Proc cerrar()
            Si ( checarApertura() = Verdad ) Entonces
                fclose(ptrArchivo)
            FinSi
        FinProc
FinClase


Archivo Constantes.cml <- Se recomienda que tengan un archivo propio de constantes (y que sea global), donde puedan poner todas las constantes que no contenta Cramel por defecto.
Código: Cramel
'/**
' * Constantes para el archivo
' *
' * @author  Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' *      Filename: Constantes.cml
' * ---------------------------------------
'*/

' File '
Const FILE_ATTRIBUTE_NORMAL = &80
Const FILE_APPEND_DATA = 4
Const SEEK_CUR = 1
Const SEEK_END = 2
Const SEEK_SET = 0
Const FILE_SEEK_OK = 0


Y aquí un ejemplo usando Archivo.cml

Código: text
Importar "Cramel.cml"
Importar "MSVBVM60\MSVBVM60.cml"
Importar "Constantes.cml"
Importar "Archivo.cml"

Var contenido, salida:Cadena
Var archivoC:ArchivoC
Var tempCad:Cadena

Crear archivoC
archivoC.abrir("D:\BlackBlex_antiguo\Desktop\LogF.txt", GENERIC_READ, OPEN_EXISTING)

contenido = archivoC.leer()

salida = "Nombre del archivo: " + archivoC.conseguirNombre() + CRLF
salida = salida + "Directorio del archivo: " + archivoC.conseguirDirectorio() + CRLF
salida = salida + "Extension del archivo: " + archivoC.conseguirExtension() + CRLF
salida = salida + "Archivo de lectura: " + EntCad(archivoC.esLectura()) + CRLF
salida = salida + "Archivo de escritura: " + EntCad(archivoC.esEscritura()) + CRLF
salida = salida + "Tama\x241o del archivo: " + EntCad(archivoC.conseguirTamaño()) + " bytes" + CRLF
salida = salida + "Puntero: " + EntCad(archivoC.conseguirPtr()) + CRLF
salida = salida + "Contenido: " + contenido
Mensaje(salida)

archivoC.cerrar()
Destruir archivoC




25 de junio del 2017

  • Se paso a crear una clase para el manejo de archivos
  • Corregido error abrir múltiples archivos.
  • Actualizada para la versión 2.0.362 - No funciona en anteriores

Cualquier sugerencia, o error, comenten.
#27
Otros lenguajes / Re:[Cramel] Consola.cml
Marzo 02, 2017, 02:18:12 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
HOLA!!!

Veo que en el intento de emular POO perdes la capacidad para pasar parametros, no seria mejor, hacer una funcion que sea Consola_Escribir(txt) y otro que sea Consola_EscribirLinea(txt) para no tener que llenar las variables por fuera.

Me parece una mala practica la utilizacion de variables publicas para alimentar procedimientos.

GRACIAS POR LEER!!!

Lo hice así sólo para hacer algo simple y sencillo.

Si se le puede pasar parámetros, ahora que tenga un tiempo rehago el archivo.

Estoy conciente de que es mala práctica lo de tener que poner el texto en una variable y luego imprimir, por finés de prácticas fue echo así.


Enviado desde mi MotoG3 mediante Tapatalk
#28
Otros lenguajes / Re:[Cramel] Consola.cml
Marzo 01, 2017, 01:49:23 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Muy interesante tu código y me parece increíble que le hayas agarrado la mano tan rápido, hasta estas usando prototipos :o

Te recomiendo inicializar los prototipos dentro de un procedimiento, al declarar una dll no se puede tener código no encapsulado (fuera de un procedimiento), por lo que tu código no se podría utilizar y seria una lastima.

También me gustó como emulaste la POO  ;D ;D

Muy buen aporte!

Gracias por la explicación de los prototipos, por eso andaba confundido, porque no los hacia funcionar, una vez la explicación le agarre de volada.

Lo de exportarlo como dll, no lo había pensado; simplemente se me hizo más practico dejarlo como .cml e importarlo al usar.
Lo de inicializar los protopitos los tenia antes en la función initConsole, el problema llegaba cuando el usuario no ejecutaba dicho metodo, y salia "Error al acceder a la memoria" aunque es valido; quería que antes saliera un mensaje de lo que paso; y la única forma que vi fue haciendo la inicialización fuera.  ;D

Lo cambiaré para que pueda ser exportado como dll, aunque viendo un poco más afondo, no sabría como mantener lo de "Consola." + metodos, puesto que en la dll, creo que solo se podrían usar los metodos y nada mas
#29
Les traigo este código el cual te genera una consola, en la que puedes escribir y leer.



Información

  • Compatible con Cramel: 2.0.0.362
  • Librerías requeridas: MSVBVM60.cml



Tiene los siguientes métodos:

  • establecerTitulo(titulo:Cadena) - Si queremos cambiar de titulo de la consola
  • escribir(texto:Cadena) - Escribimos en la misma linea
  • escribirLinea(texto:Cadena) - Escribimos agregando al final LF (Salto de linea)
  • establecerColor(atributos:Entero) - Establecemos algunos colores para la fuente y fondo (CONSTANTES)
  • leer(Referencia texto:Cadena) - Leemos el teclado sin agregar el enter
  • pausarConsola() - Terminamos la ejecución de la consola
  • limpiarConsola() - Limpia la consola

Para usarla solo es de Importar la librería Cramel, Consola y su archivo de constantes propia; después declaramos una variable del tipo Console y creamos el objecto

Y es todo por el momento.

Aquí el código:

Archivo Consola.cml
Código: Cramel
'/**
' * Consola
' *
' * @author  Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' *      Filename: Consola.cml
' * ---------------------------------------
'*/

Clase Consola,_
    hEntrada,_
    hSalida,_
    hError,_
    textoEscritura,_
    contador:Entero,_
    caracter,_
    letra,_
    texto:Cadena,_
    modo:WORD,_
    tecla:Byte

    Constructor:Inicializar
    Destructor:Finalizar

    Proc Inicializar
        AllocConsole()
        hEntrada = GetStdHandle(STD_INPUT_HANDLE)
        hSalida = GetStdHandle(STD_OUTPUT_HANDLE)
        hError = GetStdHandle(STD_ERROR_HANDLE)

        Si hEntrada = INVALID_HANDLE Entonces
            Mensaje("Error al obtener STDIN")
        FinSi

        Si hSalida = INVALID_HANDLE Entonces
            Mensaje("Error al obtener STDOUT")
        FinSi

        Si hError = INVALID_HANDLE Entonces
            Mensaje("Error al obtener STDERR")
        FinSi

    FinProc

    Proc Finalizar
        CloseHandle(hEntrada)
        CloseHandle(hSalida)
        CloseHandle(hError)
        FreeConsole()
    FinProc

    Sección Privada
        Proc getChar():Byte
            caracter = Espacio(1)
            GetConsoleMode(hEntrada, modo)
            SetConsoleMode(hEntrada, modo and (-1*ENABLE_ECHO_INPUT) and (-1*ENABLE_PROCESSED_INPUT))
            ReadConsole(hEntrada, StrPtr(caracter), 1, 1, 0)
            SetConsoleMode(hEntrada, modo)
            Resultado = ASCII(caracter)
        FinProc

    Sección Pública
        Proc escribir(Referencia txt:Cadena)
            WriteConsole(hSalida, StrPtr(txt), CadLong(txt), textoEscritura, nulo)
        FinProc

        Proc escribirLinea(Referencia txt:Cadena)
            escribir(txt + LF)
        FinProc

        Proc establecerColor(atributos:Entero)
            SetConsoleTextAttribute(hSalida, atributos)
        FinProc

        Proc establecerTitulo(Referencia titulo:Cadena)
            SetConsoleTitle(titulo)
        FinProc

        Proc leer():Cadena
            contador = 0
            texto = ""
            Repetir
                tecla = getChar()
                letra = Carácter(tecla)
                Si (tecla = 8) Entonces
                    Si (contador > 0) Entonces
                        escribir("\x08 \x08")
                        texto = Izquierda(texto, CadLong(texto)-1)
                        contador = contador - 1
                    FinSi
                SiNo
                    Si (tecla <> 13) Entonces
                        escribir(letra)
                        texto = texto + letra
                        contador = contador + 1
                    FinSi
                FinSi
            HastaQue (tecla = 13) or (contador = MAX_PATH)
            escribirLinea("")
            Resultado = texto
        FinProc

        Proc pausarConsola
            escribirLinea("Presione una tecla para continuar . . . ")
            tecla = getChar()
        FinProc

        Proc limpiarConsola
            Var Temp:Entero
            Temp = CreateConsoleScreenBuffer(GENERIC_READ Or GENERIC_WRITE,FILE_SHARE_READ Or FILE_SHARE_WRITE,Nulo,1,0)
            Si (Temp = 0) Entonces Salir
            SetConsoleActiveScreenBuffer(Temp)
            CloseHandle(hSalida)
            hSalida = Temp
        FinProc
       
FinClase


Archivo Constantes.cml <- Se recomienda que tengan un archivo propio de constantes (y que sea global), donde puedan poner todas las constantes que no contenta Cramel por defecto.
Código: Cramel
'/**
' * Constantes para la consola
' *
' * @author  Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' *      Filename: Constantes.cml
' * ---------------------------------------
'*/

' Consola '
Const STD_OUTPUT_HANDLE = -11
Const STD_INPUT_HANDLE = -10
Const STD_ERROR_HANDLE = -12

' Colores '
Const FOREGROUND_BLUE = &1
Const FOREGROUND_GREEN = &2
Const FOREGROUND_RED = &4
Const FOREGROUND_INTENSITY = &8
Const FOREGROUND_SEARCH = (&10)
Const BACKGROUND_BLUE = &10
Const BACKGROUND_GREEN = &20
Const BACKGROUND_RED = &40
Const BACKGROUND_INTENSITY = &80
Const BACKGROUND_SEARCH = &20

' Console mode flag'
Const ENABLE_ECHO_INPUT = &4
Const ENABLE_PROCESSED_INPUT = &1
Const ENABLE_LINE_INPUT = &2
Const ENABLE_MOUSE_INPUT = &10
Const ENABLE_WINDOW_INPUT = &8
Const ENABLE_PROCESSED_OUTPUT = &1
Const ENABLE_WRAP_AT_EOL_OUTPUT = &2
Const ENABLE_INSERT_MODE = &20
Const ENABLE_QUICK_EDIT_MODE = &40
Const ENABLE_EXTENDED_FLAGS = &80
Const ENABLE_AUTO_POSITION = &100


Y aquí un ejemplo usando Consola.cml

Código: text
Importar "Cramel.cml"
Importar "MSVBVM60\MSVBVM60.cml"
Importar "Constantes.cml"
Importar "Consola.cml"

Var texto:Cadena
Var cmd:Consola

Crear cmd

cmd.establecerTitulo("cmd [Cramel]")
cmd.escribirLinea("Hola, como estas?")
texto = cmd.leer()

Si texto = "bien" Entonces
    cmd.escribirLinea("Me alegra")
SiNo
    cmd.escribirLinea("Suena mal, que paso?")
FinSi

cmd.escribirLinea("Como te llamas??")
texto = cmd.leer()

cmd.limpiarConsola()

cmd.escribirLinea("Hola " + texto)

cmd.pausarConsola()

Destruir cmd




4 de marzo del 2017

  • Gracias a @Yuki - Por la explicación del Prototipo.
  • Aplicada la observación de @79137913
  • Actualizada para la versión 1.5.0.83 - No funciona en anteriores
25 de junio del 2017

  • Gracias a @Yuki - Por su función de limpiarConsola. :#
  • Se paso a crear una clase para la Consola
  • Corregido error al borrar texto.
  • Actualizada para la versión 2.0.362 - No funciona en anteriores

Cualquier sugerencia, o error, comenten.
#30
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Esto me ha servidor, gracias!!! +1

Saludos,

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Entra en modo aprueba de fallos o en recovery mode

Y vuelve a ejecutar el comando de upgrade.

Igual a mi me paso, y tuve que recurrir al modo recovery, para que terminara de instalar todo.

Enviado desde mi MotoG3 mediante Tapatalk
De nada bro.

Anduve leyendo y les pasa a mucha gente, a de ser fallo de Kali.

Enviado desde mi MotoG3 mediante Tapatalk

#31
Entra en modo aprueba de fallos o en recovery mode

Y vuelve a ejecutar el comando de upgrade.

Igual a mi me paso, y tuve que recurrir al modo recovery, para que terminara de instalar todo.

Enviado desde mi MotoG3 mediante Tapatalk

#32
Dudas y pedidos generales / Re:¿A alguien le funciona?
Febrero 23, 2017, 11:56:15 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
El bloque AdmErr si tiene funcionamiento, pero he tenido problemas para utilizar y entender la administración de excepciones, por lo que aveces no funciona correctamente.

Parece que en algún momento se me dio por establecer una instrucción obligatoria llamada "Alias".

Código: text
Proc Prueba:Entero Exportar Alias "WhosYourDaddy"
    Resultado = 789
FinProc


Sobre tu ejemplo de API no se que decirte, es perfectamente valido.

Entendido, entonces ese es el problema del AdmErr.

Con lo de Proc, era porque faltaba "Alias", me acaba de funcionar correctamente.
#33
Quisiera saber si a alguien le funciona el bloque de AdmErr, o es que aun no tiene funcionamiento. ;D


Edito:

Parece que igual la sentencia:
Código: text
Proc Nombre(Parametros):TipoRetorno Exportar "Identificador"


No funciona, o por lo menos a mi, no me coge la función cuanto utilizo en .dll
Código: text

API Nombre(Parametros):TipoRetorno , "miDLL.dll" "Identificador"


Solo me funciona si al Proc no le pongo identificador.
#34
Por si alguien quiere usar Sublime text 3 en vez de Notepad++, aquí les dejo los dos archivos para hacerlo funcionar:

Primero: necesitamos agregar la ruta donde tengamos el Cramel a la variable de entorno de windows llamada PATH
Segundo: agregamos a sublime text 3 el proyecto de Cramel con el que vamos a trabajar.
Tercer: editamos nuestra configuración de sublime (Preferences>Settings) y agregamos
Código: text
"translate_tabs_to_spaces": true



Para agregar el proyecto a sublime text nos vamos a Project>Add Folder to Project



Creamos un archivo llamado Cramel3.sublime-syntax y pegamos lo siguiente:
Código: text
%YAML 1.2
---
file_extensions:
  - cml
scope: source.cml
contexts:
  main:
    # Comentarios
    - match: "'|;"
      scope: punctuation.definition.comment.c
      push: line_comment
    - match: \"
      scope: punctuation.definition.string.begin.c
      push:
        - meta_scope: string.quoted.other.lt-gt.include.c
        - match: \"
          scope: punctuation.definition.string.end.c
          pop: true

    # Palabras de variables
    - match: '\b(Opcional|Referencia|Var|ClaseVar|ClaseVarPriv|Const|Local|Global|Parámetro)\b'
      scope: keyword.control.c

    # Palabras reservadas
    - match: '\b(CDECL|VBCALL|STDCALL|API|Alias|Contar|Seguir|Constructor|Clase|FinClase|Crear|Devolver|Destructor|Destruir|Estruct|Exportar|Escritura|Importar|Lectura|Mientras|FinMientras|NoResultado|Nulo|Prototipo|Proc|FinProc|Preservar|Paso|Prop|FinProp|Repetir|PorSiempre|HastaQue|MientrasQue|FinRepetir|ReDim|Resultado|Referencia|Seleccionar|Caso|Otro|FinSeleccionar|Si|Entonces|OSi|SiNo|FinSi|Salir|Sección Privada|Sección Pública|Unión|AdmErr|Controlar|FinAdmErr)\b'
      scope: keyword.control.c

    #Tipo de datos
    - match: '\b(Booleano|Byte|Word|Entero|Real|Cadena|Nulo)\b'
      scope: storage.type.c

    #Misc
    - match: '\(|\)|\:'
      scope: storage.type.c

    # Numeros
    - match: '\b((-)?[0-9.]+)\b'
      scope: constant.numeric.c
    - match: '\b((0(x|X)[0-9a-fA-F]*(\.[0-9a-fA-F]+p-?\d+)?)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b'
      scope: constant.numeric.c

    # Operadores Aritmeticos
    - match: \+|\-|\^|\*|\/|Shl|Shr|Rol|Ror
      scope: keyword.operator.arithmetic.c

    # Operadores Lógicos
    - match: \>|\<|\>\=|\<\=|\<\>|Not|Neg|And|Y|Or|O|Xor|\!\=|\=|\&|\@
      scope: keyword.operator.c

  line_comment:
    - meta_scope: comment.line.example-c
    - match: $
      pop: true


Y creamos otro archivo llamado Cramel3.sublime-build y pegamos lo siguiente:
Código: text
{
    "shell_cmd": "(IF EXIST \"${file_base_name}.exe\" del \"${file_base_name}.exe\") && %Cramel% /f \"${file}\" /d \"${file_path}/${file_base_name}.exe\"",
    "selector": "source.cml",

    "variants": [
        {
            "name": "Compilar DLL",
            "shell_cmd": "(IF EXIST \"${file_base_name}.dll\" del \"${file_base_name}.dll\") && %Cramel% /f \"${file}\" /dll /d \"${file_path}/${file_base_name}.dll\"",
            "shell": true
        },

        {
            "name": "Compilar & Ejecutar",
            "shell_cmd": "(IF EXIST \"${file_base_name}.exe\" del \"${file_base_name}.exe\") && %Cramel% /f \"${file}\" /d \"${file_path}/${file_base_name}.exe\" /ej",
            "shell": true
        },
       
    ]
}


Una vez teniendo los dos archivos creados nos vamos a la carpeta Package>User, para ello nos dirigimos a Preferences>Browse Packages y damos click en la carpeta User; en esa carpeta pegamos los dos archivos.




Ya solo queda abrir tu archivo cramel y programar; una vez terminado solo nos toca guardar y dar Ctrl + b para compilar o Ctrl + Shift + b para elegir entre compilar & ejecutar, compilar DLL, o compilar & generar ASM
#35
Es interesante el chat, es interesante el uso de websockets y la consola propia.

Tiene razón mi compañero de arriba, deberías de implementar algun sistema de plugins.


Yo tengo uno echo pero no utiliza websockets, y fue por parte de un ejercicio de la uni.

A ver si lo posteó más al rato.

Enviado desde mi MotoG3 mediante Tapatalk
#36
Sabias que no solo lo debes encriptar una sola vez?

Con el paso del tiempo lo debes volver a encriptar y actualizar el de tus infectados.

Enviado desde mi MotoG3 mediante Tapatalk

#37
Magnifico aporte fudmario.

Voy a echarle la prueba a ver que tal.

Gracias bro.

Enviado desde mi MotoG3 mediante Tapatalk

#38
Arrastra la pestaña de Explorador de soluciones hacia fuera, una vez echo, posicionala arriba de las propiedades.

Enviado desde mi Lenovo A7600-F mediante Tapatalk

#39


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Ya he acabado ya con  esta parte gracias a todos por su ayuda. Pongo el código por si quiere alguien tenerlo de ejemplo

Código: text
#include <stdio.h> 


int main()

{


float fahr;
float celsius;

//limites de las tablas superior y u inferior

float min;
float max;
float aumento;

//letreros de la tabla
char temp_celsius[20] = "Cº";
char temp_fahr[20] = "F";


min = 0.0;
max = 300.0;
aumento = 20.0;


printf("%3.25s %25.5s\n", temp_fahr, temp_celsius);

fahr = min;

while (fahr <= max)
{

celsius = ((fahr - 32.0) * (5.0/9.0));
printf("%3.25f %6.5f\n", fahr, celsius);
fahr = fahr + aumento;

}
return 0;
}



Posdata: Si os fijais arriba en la primera versión si obviais el bucle infinito de while por no poner las llaves el printf [   printf("%3.25s %25.5s\n", temp_fahr, temp_celsius); ]   lo tenía dentro del bucle por lo que se repetía junto a la impresión de los resultados y salía:
F    Cº
0.0000000000000000000000000 -17.77778
  F    Cº
20.0000000000000000000000000 -6.66667
  F    Cº
40.0000000000000000000000000 4.44444
  F    Cº
60.0000000000000000000000000 15.55556
  F    Cº
....

cuando en realidad es así:

F                       Cº
0.0000000000000000000000000 -17.77778
20.0000000000000000000000000 -6.66667
40.0000000000000000000000000 4.44444
60.0000000000000000000000000 15.55556
80.0000000000000000000000000 26.66667
...


Además de que he modificado los puntos de desplazamiento para hacer coincidir o intentarlo poner Cº encima de sus correspondientes cálculos.


Posdata final ya: No hay forma de limitar los ceros para que no salgan tantos


Gracias a todos.

Los ceros los controlas con el .25 que tienes en el printf.

Código: text

#include <stdio.h>

int main()
{
  float fahr;
  float celsius;

//limites de las tablas superior y u inferior

float min;
float max;
float aumento;

//letreros de la tabla
char temp_celsius[5] = "Cº";
char temp_fahr[5] = "F";
   
min = 0.0;
max = 300.0;
aumento = 20.0;

printf(" %s\t\t  %s\n", temp_fahr, temp_celsius);

fahr = min;

while (fahr <= max)
{
celsius = ((fahr - 32.0) * (5.0/9.0));
printf("%3.2f\t\t%6.2f\n", fahr, celsius);
fahr = fahr + aumento;
}
return 0;
}


Enviado desde mi Lenovo A7600-F mediante Tapatalk

#40
Video Juegos / Re:IDs de usuarios
Noviembre 27, 2014, 11:06:14 PM
Steam: BlackBlex