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 - Yuki

#21
Ideas y Sugerencias / Re:LLuvia de ideas
Junio 15, 2017, 07:22:25 PM
Me gustaría que abrieran una sección para que los usuarios puedan vender software por criptomonedas, se que la idea de la comunidad es contenido público y libre, pero si nos limitamos a programas informáticos no se pierde el contenido, ademas es lo único que se me ocurre para fomentar la programación.

La idea de un canal de Underc0de esta muy buena, y mucho mejor seria que se les permitiera a los usuarios subir contenidos a ese canal mientras que sea de calidad.

También podrían abrir un canal público de Gobby (editor de código multi-usuario), para que los usuarios que deseen puedan escribir programas en modo cooperativo. (Fomentar la programación 2  ::))

#22
Otros lenguajes / Re:Primeros pasos con Cramel
Junio 15, 2017, 02:28:19 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Me parece demasiado interesante para alguien que está comenzando como yo, será muy limitante el intentar avanzar con caramelo no teniendo grandes conocimientos de programación? ... Pienso que podría avanzar junto a él y hacerlo mi nativo. Saludos

Me parece interesante tu cuestión, Cramel (o caramelo) fue desarrollado principalmente para iniciarse en la programación. Es un lenguaje de programación y se puede usar para este propósito.

Lo único que lamento es que puede llevar a un par de malos hábitos en la programación, al ser un lenguaje de alto nivel no abusa de los signos (como C/C++/Java/PHP entre muchos otros), y esta en español (el 90% de los lenguajes de programación están en ingles).

Pero si podes relacionar las instrucciones de Cramel con las de otros lenguajes en ingles, se hace relativamente simple la transición de X a Z, haciendo que Cramel sea una buena base en la programación general.
#23
ASM / Algoritmo CRC32
Junio 13, 2017, 12:55:02 AM
Traducción del No tienes permitido ver los links. Registrarse o Entrar a mi cuenta a ensamblador [FASM].

Código: php
include 'win32ax.inc'

.data
TLookup dd 0x0,0x77073096,0xEE0E612C,0x990951BA,0x76DC419,0x706AF48F,0xE963A535,\
          0x9E6495A3,0xEDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x9B64C2B,0x7EB17CBD,\
          0xE7B82D07,0x90BF1D91,0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,\
          0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,\
          0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,0x3B6E20C8,0x4C69105E,0xD56041E4,\
          0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,\
          0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,0x26D930AC,\
          0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,\
          0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,\
          0xB6662D3D,0x76DC4190,0x1DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x6B6B51F,\
          0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0xF00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,\
          0x86D3D2D,0x91646C97,0xE6635C01,0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,\
          0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,\
          0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,0x4DB26158,0x3AB551CE,\
          0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,\
          0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,\
          0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,\
          0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,\
          0xB7BD5C3B,0xC0BA6CAD,0xEDB88320,0x9ABFB3B6,0x3B6E20C,0x74B1D29A,0xEAD54739,\
          0x9DD277AF,0x4DB2615,0x73DC1683,0xE3630B12,0x94643B84,0xD6D6A3E,0x7A6A5AA8,\
          0xE40ECF0B,0x9309FF9D,0xA00AE27,0x7D079EB1,0xF00F9344,0x8708A3D2,0x1E01F268,\
          0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,\
          0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,0xD6D6A3E8,\
          0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,\
          0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,\
          0x4669BE79,0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,\
          0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,\
          0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,0x9B64C2B0,0xEC63F226,0x756AA39C,0x26D930A,\
          0x9C0906A9,0xEB0E363F,0x72076785,0x5005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,\
          0xCB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0xBDBDF21,0x86D3D2D4,0xF1D4E242,\
          0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,\
          0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,\
          0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,\
          0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,\
          0x47B2CF7F,0x30B5FFE9,0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,\
          0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,\
          0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D

          dd 10
          Parámetro1 db 'Hola Mundo',0
.code
start:
      push Parámetro1
      call pCRC32
      ; A PARTIR DE ACÁ, EAX = 22436ed2h
      push 0
      call [ExitProcess]

; El parámetro a establecer debe contener la longitud de la cadena en sus primeros 4 bytes.

proc pCRC32 Texto:DWORD
     local CRC dd -1
     local i dd 0
     local Temp1 dd ?
     local Temp2 dd ?
     mov ecx,DWORD[Texto]
     mov ecx,DWORD[ecx-4]
     mov ebx,256 ; Inicializamos EBX con 256.
.Contar1:
     cmp DWORD[i],ecx
     je .Seguir1
     cmp DWORD[CRC],-1
     jne .SiNo1 ; Si no es menor a cero.
.Si1: ; Etiqueta de decoración.
     ; Temp1 = (((CRC And &7FFFFFFF) \ 256) Or &800000) And &FFFFFF
     mov eax,DWORD[CRC]
     and eax,0x7FFFFFFF
     xor edx,edx
     div ebx
     or eax,0x800000
     and eax,0xFFFFFF
     mov DWORD[Temp1],eax
     jmp .FinSi1
.SiNo1:
     ; Temp1 = (CRC \ 256) And &FFFFFF
     mov eax,DWORD[CRC]
     xor edx,edx
     div ebx
     and eax,0xFFFFFF
     mov DWORD[Temp1],eax
.FinSi1:
     ; CRC = Temp1 Xor (TLookup[(CRC Xor bArray[i]) And &FF])
     mov edi,DWORD[Texto]
     add edi,DWORD[i]
     mov eax,DWORD[CRC]
     xor al,BYTE[edi]
     movzx eax,al
     mov edi,4
     mul edi
     lea edi,[TLookup]
     add edi,eax
     mov eax,DWORD[Temp1]
     xor eax,DWORD[edi]
     mov DWORD[CRC],eax
     inc DWORD[i]
     jmp .Contar1
.Seguir1:
     mov eax,DWORD[CRC]
     xor eax,0xFFFFFFFF
     ret
endp

.end start

#24
Otros lenguajes / [Cramel] Algoritmo CRC32
Junio 10, 2017, 10:28:18 PM
El algoritmo CRC o código de redundancia cíclica es un algoritmo que permite comprobar la fiabilidad y la no alteración de datos, en software se utiliza para comprobar si existe corrupción de datos.

Les dejo acá una implementación en Cramel.

Código: php
Importar "Cramel.cml"

Clase CRC32,TLookup[256]:Entero

    Constructor:Inicializar

    Proc Inicializar
        TLookup[0] = &0
        TLookup[1] = &77073096
        TLookup[2] = &EE0E612C
        TLookup[3] = &990951BA
        TLookup[4] = &76DC419
        TLookup[5] = &706AF48F
        TLookup[6] = &E963A535
        TLookup[7] = &9E6495A3
        TLookup[8] = &EDB8832
        TLookup[9] = &79DCB8A4
        TLookup[10] = &E0D5E91E
        TLookup[11] = &97D2D988
        TLookup[12] = &9B64C2B
        TLookup[13] = &7EB17CBD
        TLookup[14] = &E7B82D07
        TLookup[15] = &90BF1D91
        TLookup[16] = &1DB71064
        TLookup[17] = &6AB020F2
        TLookup[18] = &F3B97148
        TLookup[19] = &84BE41DE
        TLookup[20] = &1ADAD47D
        TLookup[21] = &6DDDE4EB
        TLookup[22] = &F4D4B551
        TLookup[23] = &83D385C7
        TLookup[24] = &136C9856
        TLookup[25] = &646BA8C0
        TLookup[26] = &FD62F97A
        TLookup[27] = &8A65C9EC
        TLookup[28] = &14015C4F
        TLookup[29] = &63066CD9
        TLookup[30] = &FA0F3D63
        TLookup[31] = &8D080DF5
        TLookup[32] = &3B6E20C8
        TLookup[33] = &4C69105E
        TLookup[34] = &D56041E4
        TLookup[35] = &A2677172
        TLookup[36] = &3C03E4D1
        TLookup[37] = &4B04D447
        TLookup[38] = &D20D85FD
        TLookup[39] = &A50AB56B
        TLookup[40] = &35B5A8FA
        TLookup[41] = &42B2986C
        TLookup[42] = &DBBBC9D6
        TLookup[43] = &ACBCF940
        TLookup[44] = &32D86CE3
        TLookup[45] = &45DF5C75
        TLookup[46] = &DCD60DCF
        TLookup[47] = &ABD13D59
        TLookup[48] = &26D930AC
        TLookup[49] = &51DE003A
        TLookup[50] = &C8D75180
        TLookup[51] = &BFD06116
        TLookup[52] = &21B4F4B5
        TLookup[53] = &56B3C423
        TLookup[54] = &CFBA9599
        TLookup[55] = &B8BDA50F
        TLookup[56] = &2802B89E
        TLookup[57] = &5F058808
        TLookup[58] = &C60CD9B2
        TLookup[59] = &B10BE924
        TLookup[60] = &2F6F7C87
        TLookup[61] = &58684C11
        TLookup[62] = &C1611DAB
        TLookup[63] = &B6662D3D
        TLookup[64] = &76DC4190
        TLookup[65] = &1DB7106
        TLookup[66] = &98D220BC
        TLookup[67] = &EFD5102A
        TLookup[68] = &71B18589
        TLookup[69] = &6B6B51F
        TLookup[70] = &9FBFE4A5
        TLookup[71] = &E8B8D433
        TLookup[72] = &7807C9A2
        TLookup[73] = &F00F934
        TLookup[74] = &9609A88E
        TLookup[75] = &E10E9818
        TLookup[76] = &7F6A0DBB
        TLookup[77] = &86D3D2D
        TLookup[78] = &91646C97
        TLookup[79] = &E6635C01
        TLookup[80] = &6B6B51F4
        TLookup[81] = &1C6C6162
        TLookup[82] = &856530D8
        TLookup[83] = &F262004E
        TLookup[84] = &6C0695ED
        TLookup[85] = &1B01A57B
        TLookup[86] = &8208F4C1
        TLookup[87] = &F50FC457
        TLookup[88] = &65B0D9C6
        TLookup[89] = &12B7E950
        TLookup[90] = &8BBEB8EA
        TLookup[91] = &FCB9887C
        TLookup[92] = &62DD1DDF
        TLookup[93] = &15DA2D49
        TLookup[94] = &8CD37CF3
        TLookup[95] = &FBD44C65
        TLookup[96] = &4DB26158
        TLookup[97] = &3AB551CE
        TLookup[98] = &A3BC0074
        TLookup[99] = &D4BB30E2
        TLookup[100] = &4ADFA541
        TLookup[101] = &3DD895D7
        TLookup[102] = &A4D1C46D
        TLookup[103] = &D3D6F4FB
        TLookup[104] = &4369E96A
        TLookup[105] = &346ED9FC
        TLookup[106] = &AD678846
        TLookup[107] = &DA60B8D0
        TLookup[108] = &44042D73
        TLookup[109] = &33031DE5
        TLookup[110] = &AA0A4C5F
        TLookup[111] = &DD0D7CC9
        TLookup[112] = &5005713C
        TLookup[113] = &270241AA
        TLookup[114] = &BE0B1010
        TLookup[115] = &C90C2086
        TLookup[116] = &5768B525
        TLookup[117] = &206F85B3
        TLookup[118] = &B966D409
        TLookup[119] = &CE61E49F
        TLookup[120] = &5EDEF90E
        TLookup[121] = &29D9C998
        TLookup[122] = &B0D09822
        TLookup[123] = &C7D7A8B4
        TLookup[124] = &59B33D17
        TLookup[125] = &2EB40D81
        TLookup[126] = &B7BD5C3B
        TLookup[127] = &C0BA6CAD
        TLookup[128] = &EDB88320
        TLookup[129] = &9ABFB3B6
        TLookup[130] = &3B6E20C
        TLookup[131] = &74B1D29A
        TLookup[132] = &EAD54739
        TLookup[133] = &9DD277AF
        TLookup[134] = &4DB2615
        TLookup[135] = &73DC1683
        TLookup[136] = &E3630B12
        TLookup[137] = &94643B84
        TLookup[138] = &D6D6A3E
        TLookup[139] = &7A6A5AA8
        TLookup[140] = &E40ECF0B
        TLookup[141] = &9309FF9D
        TLookup[142] = &A00AE27
        TLookup[143] = &7D079EB1
        TLookup[144] = &F00F9344
        TLookup[145] = &8708A3D2
        TLookup[146] = &1E01F268
        TLookup[147] = &6906C2FE
        TLookup[148] = &F762575D
        TLookup[149] = &806567CB
        TLookup[150] = &196C3671
        TLookup[151] = &6E6B06E7
        TLookup[152] = &FED41B76
        TLookup[153] = &89D32BE0
        TLookup[154] = &10DA7A5A
        TLookup[155] = &67DD4ACC
        TLookup[156] = &F9B9DF6F
        TLookup[157] = &8EBEEFF9
        TLookup[158] = &17B7BE43
        TLookup[159] = &60B08ED5
        TLookup[160] = &D6D6A3E8
        TLookup[161] = &A1D1937E
        TLookup[162] = &38D8C2C4
        TLookup[163] = &4FDFF252
        TLookup[164] = &D1BB67F1
        TLookup[165] = &A6BC5767
        TLookup[166] = &3FB506DD
        TLookup[167] = &48B2364B
        TLookup[168] = &D80D2BDA
        TLookup[169] = &AF0A1B4C
        TLookup[170] = &36034AF6
        TLookup[171] = &41047A60
        TLookup[172] = &DF60EFC3
        TLookup[173] = &A867DF55
        TLookup[174] = &316E8EEF
        TLookup[175] = &4669BE79
        TLookup[176] = &CB61B38C
        TLookup[177] = &BC66831A
        TLookup[178] = &256FD2A0
        TLookup[179] = &5268E236
        TLookup[180] = &CC0C7795
        TLookup[181] = &BB0B4703
        TLookup[182] = &220216B9
        TLookup[183] = &5505262F
        TLookup[184] = &C5BA3BBE
        TLookup[185] = &B2BD0B28
        TLookup[186] = &2BB45A92
        TLookup[187] = &5CB36A04
        TLookup[188] = &C2D7FFA7
        TLookup[189] = &B5D0CF31
        TLookup[190] = &2CD99E8B
        TLookup[191] = &5BDEAE1D
        TLookup[192] = &9B64C2B0
        TLookup[193] = &EC63F226
        TLookup[194] = &756AA39C
        TLookup[195] = &26D930A
        TLookup[196] = &9C0906A9
        TLookup[197] = &EB0E363F
        TLookup[198] = &72076785
        TLookup[199] = &5005713
        TLookup[200] = &95BF4A82
        TLookup[201] = &E2B87A14
        TLookup[202] = &7BB12BAE
        TLookup[203] = &CB61B38
        TLookup[204] = &92D28E9B
        TLookup[205] = &E5D5BE0D
        TLookup[206] = &7CDCEFB7
        TLookup[207] = &BDBDF21
        TLookup[208] = &86D3D2D4
        TLookup[209] = &F1D4E242
        TLookup[210] = &68DDB3F8
        TLookup[211] = &1FDA836E
        TLookup[212] = &81BE16CD
        TLookup[213] = &F6B9265B
        TLookup[214] = &6FB077E1
        TLookup[215] = &18B74777
        TLookup[216] = &88085AE6
        TLookup[217] = &FF0F6A70
        TLookup[218] = &66063BCA
        TLookup[219] = &11010B5C
        TLookup[220] = &8F659EFF
        TLookup[221] = &F862AE69
        TLookup[222] = &616BFFD3
        TLookup[223] = &166CCF45
        TLookup[224] = &A00AE278
        TLookup[225] = &D70DD2EE
        TLookup[226] = &4E048354
        TLookup[227] = &3903B3C2
        TLookup[228] = &A7672661
        TLookup[229] = &D06016F7
        TLookup[230] = &4969474D
        TLookup[231] = &3E6E77DB
        TLookup[232] = &AED16A4A
        TLookup[233] = &D9D65ADC
        TLookup[234] = &40DF0B66
        TLookup[235] = &37D83BF0
        TLookup[236] = &A9BCAE53
        TLookup[237] = &DEBB9EC5
        TLookup[238] = &47B2CF7F
        TLookup[239] = &30B5FFE9
        TLookup[240] = &BDBDF21C
        TLookup[241] = &CABAC28A
        TLookup[242] = &53B39330
        TLookup[243] = &24B4A3A6
        TLookup[244] = &BAD03605
        TLookup[245] = &CDD70693
        TLookup[246] = &54DE5729
        TLookup[247] = &23D967BF
        TLookup[248] = &B3667A2E
        TLookup[249] = &C4614AB8
        TLookup[250] = &5D681B02
        TLookup[251] = &2A6F2B94
        TLookup[252] = &B40BBE37
        TLookup[253] = &C30C8EA1
        TLookup[254] = &5A05DF1B
        TLookup[255] = &2D02EF8D
    FinProc

    Proc CalcularCRC32(Referencia Fuente:Cadena):Cadena
        Var CRC,i,Temp1:Entero,bArray[]:Byte
        bArray = CadAMatByte(Fuente)
        CRC = -1
        Contar i a &bArray-1
            Si CRC < 0 Entonces
                Temp1 = (((CRC And &7FFFFFFF) \ 256) Or &800000) And &FFFFFF
            SiNo
                Temp1 = (CRC \ 256) And &FFFFFF
            FinSi
            CRC = Temp1 Xor (TLookup[(CRC Xor bArray[i]) And &FF])
        Seguir
        CRC = CRC Xor &FFFFFFFF
        Resultado = EntCad(CRC,16)
    FinProc

FinClase

Var Objeto:CRC32

Crear Objeto

    Mensaje(Objeto.CalcularCRC32("Hola Mundo"))
   
Destruir Objeto
#25

La tecnología Blockchain parecía exclusivamente vinculada a los Bitcoin hasta que otras empresas han empezado a ver su potencial para la distribución digital de contenido. Tenemos muchos ejemplos en cadenas de supermercados o empresas de transporte, aunque hasta la fecha no teníamos constancia de su uso en los navegadores. Al menos eso acaba de cambiar. Os presentamos Blockstack, nuevo navegador descentralizado que usa la tecnología del Bitcoin.

Una startup de nombre Blockstack, igual que el navegador (o, mejor dicho, la extensión para crear un navegador descentralizado), utiliza la tecnología Blockchain para su navegador descentralizado que utiliza la infraestructura existente de Internet. Podemos decir que se trata de algo similar a Project Maelstrom, el navegador descentralizado de BitTorrent que ofrece navegación segura sin espías ni intermediarios.

Como sabemos, Internet es un lugar muy centralizado donde casi toda la red se encuentra "almacenada" en unos pocos centros de datos controlados por los gigantes de este negocio. Esto se puso de manifiesto con el ataque DDoS a gran escala de finales del pasado año, donde medio mundo se quedó sin acceso a los principales servicios o tuvo muchos problemas para acceder con normalidad.

Por ello, muchas empresas quieren crear una forma descentralizada de acceder a Internet, con un nuevo concepto de red donde seamos más libres, además de que todo "suceda" en un entorno más seguro. Y ahí entra en juego Blockstack. La startup quiere crear un nuevo Internet donde seamos los dueños de los datos y que gestionemos nuestras propias aplicaciones.

De esta forma, nuestra privacidad estará garantizada y todas las transacciones se realizarán de forma segura, tal y como sucede con el Bitcoin. El control y monopolio de las grandes empresas quedará en algo del pasado (si es que consiguen triunfar). Este nuevo concepto de navegador llega en forma de extensión para Chrome o Firefox.

Toda la información está en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Se han invertido un total de 5 millones de dólares para crear una completa plataforma para el desarrollo de aplicaciones descentralizadas. Por ahora, solo funciona en Linux o macOS, aunque pronto llegará el desarrollo que permite utilizarlo en Windows. Por el momento, todo está pensado para desarrolladores, pero se espera una versión para usuarios finales dentro de unos 6 meses.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#26
Off Topic / Re:Desafío #7 - Viernes Negro
Mayo 19, 2017, 01:54:06 PM
¿Yo puedo participar?
#27
Otros lenguajes / [Cramel] Nueva versión + Ejemplo
Mayo 17, 2017, 09:01:55 AM



Bueno, me alegra informarles hoy que ya esta disponible la versión de Cramel para su uso.

Ahora Cramel le ofrece las siguientes nuevas características:


  • Programación orientada a objetos.
  • Compatibilidad con sistemas de 64 bits.
  • Capacidad para establecer procedimientos y variables como púbicas o privadas.
  • Mayor estabilidad de los ejecutables.
  • Aumento en la velocidad de compilación.
  • Nuevos operadores.

A continuación un pequeño ejemplo:

Código: php
Importar "Cramel.cml"

API BuffLen(lpBuff:Entero):Entero,"Kernel32" "lstrlen"
API CopyStrToBuff(lpDst:Entero,lpStr:Cadena):Entero, "Kernel32" "lstrcpy"
API CopyBuffToStr(lpDst:Cadena,lpSrc:Entero):Entero, "Kernel32" "lstrcpy"
API GlobalLock(hMem:Entero):Entero, "Kernel32"
API GlobalUnlock(hMem:Entero):Entero, "Kernel32"
API GlobalAlloc(uFlags,dwBytes:Entero):Entero, "Kernel32"

Const CF_TEXT = 1
Const GMEM_MOVEABLE = &0002

Clase cmlPortapapeles
    'Procs privados
    Sección Privada
        Proc GetTexto():Cadena
            Var hMem,Ptr:Entero
            Si (Neg OpenClipboard(0)) Entonces Salir
            hMem=GetClipboardData(CF_TEXT)
            Si (hMem=0) Entonces Salir
            Ptr=GlobalLock(hMem)
            Resultado = Espacio(BuffLen(Ptr))
            CopyBuffToStr(Resultado,Ptr)
            GlobalUnlock(Ptr)
            Si (Neg CloseClipboard) Entonces Salir
        FinProc
        Proc SetTexto(Val:Cadena)
            Var hMem,Length,Ptr:Entero
            Si (Neg OpenClipboard(0)) Entonces Salir
            Length=CadLong(Val)+2
            hMem=GlobalAlloc(GMEM_MOVEABLE,Length)
            Ptr=GlobalLock(hMem)
            CopyStrToBuff(Ptr,Val)
            SetClipboardData(CF_TEXT,hMem)
            GlobalUnlock(Ptr)
            Si (Neg CloseClipboard) Entonces Salir
        FinProc
    Sección Pública
        'Procs públicos
        Proc Vaciar:Booleano
            Si (Neg OpenClipboard(0)) Entonces Salir
            Devolver EmptyClipboard()
            Si (Neg CloseClipboard) Entonces Salir
        FinProc
        Proc EsValido(Formato:Entero):Booleano
            Devolver IsClipboardFormatAvailable(Formato)
        FinProc
        'Props públicos
        Prop Texto:Cadena
            Lectura:GetTexto
            Escritura:SetTexto
        FinProp
FinClase

' Código de ejemplo.

Var Objeto:pscClip

Crear Objeto

Objeto.Vaciar
Objeto.Texto = "Cramel es un lenguaje de programación increible
muy simple y altamente potente."

Destruir Objeto


Diferencias con el compilador anterior:


  • Ahora las variables de cadena pasadas como argumentos por valor no son copiadas.
  • Los parámetros por referencia trabajan igual para procedimientos y apis (lo correcto para apis es pasarlas por valor).
  • Las cadenas pueden ser multilínea.

Para descargar Cramel haga clic No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Que lo disfruten!
#28
Windows / Re:Postea tu escritorio Windows
Mayo 16, 2017, 08:21:40 AM
Me van a hacer un bullying terrible, pero...
#29
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Buenas, no me funciona en la última versión de cramel, me da error con la función Caracter().
Es fallo mío o por la versión del compilador.

Saludos.

Tengo la manía de cambiar el nombre de las funciones, intentaste con  "Carácter"? ¿con la tilde?
#30
Muy copada la libreria, aunque personalmente prefiero CreateFile de Win32 ;D

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.
#31
Otros lenguajes / Re:[Cramel] Consola.cml
Marzo 01, 2017, 02:22:25 PM
Podes crear un "InitConsola" que retorne la estructura de prototipos, va a funcionar, el usuario solo tendria que declarar una variable del mismo tipo que la estructura y asignarla con el procedimiento.
#32
Antes que nada, te quisiera agradecer, espero que tu proyecto les permita a los usuarios programar de manera mas fácil a los usuarios.

Ya dicho esto, quisiera remarcar un par de errores (o lo que creo que son errores).

Los botones "Salir" y "Guardar como" del menú "Archivo" no me funcionan, y quisiera poder usar CTRL+S para guardar, CTRL+E para ejecutar y CTRL+Y para rehacer el texto eliminado, Gracias!!
#33
Otros lenguajes / Re:[Cramel] Consola.cml
Marzo 01, 2017, 12:48:39 PM
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!
#34
Veo que le estas agarrando la mano al lenguaje, te dejo un par de notas, recomiendo usar la función "Espacio" en vez de "RepCarac", según recuerdo crea un buffer inicializado a cero, básicamente lo que quieres hacer con "RepCarac", pero sin el FillMemory.

No es necesario asignar una variable de retorno a los procedimientos, puedes procesarlos directamente desde una sentencia "Si".

La instrucción "Devolver" retorna un valor y finaliza la ejecución de tu procedimiento, por lo que nunca llega a cerrar el registro.

Te dejo acá el código como creo que debería quedar
Código: php
Importar "Cramel.cml" 
API RegOpenKeyEx(hKey:Entero,lpSubKey:Cadena,ulOptions,samDesired:Entero,Referencia phkResult:Entero):Entero, "Advapi32.dll" "RegOpenKeyExA"
API RegQueryValueEx(hKey:Entero,lpValueName:Cadena,lpReserved:Entero,Referencia lpType:Entero,Referencia lpData:Cadena,Referencia lpcbData:Entero):Entero, "Advapi32.dll" "RegQueryValueExA"
API RegCloseKey(hKey:Entero):Entero, "Advapi32.dll"
'=> Obtiene Nombre del Sistema Operativo
'=> Retorna Cadena
Proc SistemaOperativo():Cadena
    Var SubKey, ValueName, CadenaFinal:Cadena
    Var Result,ret,Data,Tipo,resData:Entero
    Result = &80000002 'HKLM
    SubKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
    ValueName =  "ProductName"
    Si RegOpenKeyEx(Result, SubKey, 0, &20019, Result) <> &0 Entonces Devolver "Desconocido"
    RegQueryValueEx(Result, ValueName, 0, 0, CadenaFinal, Data) 
    CadenaFinal = Espacio(Data)
    RegQueryValueEx(Result, ValueName, 0,  0, CadenaFinal, Data) 
    RegCloseKey(Result)
    Resultado = CadenaFinal
FinProc

Mensaje(SistemaOperativo())


Bueno, mas haya de ese par de pequeños problemas, tu código es excelente y una muy buena manera de obtener el nombre del sistema operativo.
#35
Cramel no puede importar librerías de otros lenguajes, tampoco posee un pre-procesador.
#36
Me parece muy interesante la idea, pero actualmente Cramel no ofrece librerías o instrucciones para comunicarse con arduino, aunque si me has dado una buena idea hasta que estudie sobre arduino creo que estos van a seguir separados.
#37
Otros lenguajes / Algoritmo SHA256
Febrero 25, 2017, 06:56:08 AM
Hace un par de días me interesó traducir el algoritmo SHA256 (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) a Cramel para demostrar su potencia, así que acá les dejo el algoritmo.

Código: text
Importar "Cramel.cml"

Var m_lOnBits[31]:Entero
Var SHA_K[64]:Entero

Const BITS_TO_A_BYTE  = 8
Const BYTES_TO_A_WORD = 4
Const BITS_TO_A_WORD  = 32

Proc InicializarSHA256
    m_lOnBits[0] = 1            ' 00000000000000000000000000000001
    m_lOnBits[1] = 3            ' 00000000000000000000000000000011
    m_lOnBits[2] = 7            ' 00000000000000000000000000000111
    m_lOnBits[3] = 15           ' 00000000000000000000000000001111
    m_lOnBits[4] = 31           ' 00000000000000000000000000011111
    m_lOnBits[5] = 63           ' 00000000000000000000000000111111
    m_lOnBits[6] = 127          ' 00000000000000000000000001111111
    m_lOnBits[7] = 255          ' 00000000000000000000000011111111
    m_lOnBits[8] = 511          ' 00000000000000000000000111111111
    m_lOnBits[9] = 1023         ' 00000000000000000000001111111111
    m_lOnBits[10] = 2047        ' 00000000000000000000011111111111
    m_lOnBits[11] = 4095        ' 00000000000000000000111111111111
    m_lOnBits[12] = 8191        ' 00000000000000000001111111111111
    m_lOnBits[13] = 16383       ' 00000000000000000011111111111111
    m_lOnBits[14] = 32767       ' 00000000000000000111111111111111
    m_lOnBits[15] = 65535       ' 00000000000000001111111111111111
    m_lOnBits[16] = 131071      ' 00000000000000011111111111111111
    m_lOnBits[17] = 262143      ' 00000000000000111111111111111111
    m_lOnBits[18] = 524287      ' 00000000000001111111111111111111
    m_lOnBits[19] = 1048575     ' 00000000000011111111111111111111
    m_lOnBits[20] = 2097151     ' 00000000000111111111111111111111
    m_lOnBits[21] = 4194303     ' 00000000001111111111111111111111
    m_lOnBits[22] = 8388607     ' 00000000011111111111111111111111
    m_lOnBits[23] = 16777215    ' 00000000111111111111111111111111
    m_lOnBits[24] = 33554431    ' 00000001111111111111111111111111
    m_lOnBits[25] = 67108863    ' 00000011111111111111111111111111
    m_lOnBits[26] = 134217727   ' 00000111111111111111111111111111
    m_lOnBits[27] = 268435455   ' 00001111111111111111111111111111
    m_lOnBits[28] = 536870911   ' 00011111111111111111111111111111
    m_lOnBits[29] = 1073741823  ' 00111111111111111111111111111111
    m_lOnBits[30] = 2147483647  ' 01111111111111111111111111111111
    SHA_K[0] = &428A2F98
    SHA_K[1] = &71374491
    SHA_K[2] = &B5C0FBCF
    SHA_K[3] = &E9B5DBA5
    SHA_K[4] = &3956C25B
    SHA_K[5] = &59F111F1
    SHA_K[6] = &923F82A4
    SHA_K[7] = &AB1C5ED5
    SHA_K[8] = &D807AA98
    SHA_K[9] = &12835B01
    SHA_K[10] = &243185BE
    SHA_K[11] = &550C7DC3
    SHA_K[12] = &72BE5D74
    SHA_K[13] = &80DEB1FE
    SHA_K[14] = &9BDC06A7
    SHA_K[15] = &C19BF174
    SHA_K[16] = &E49B69C1
    SHA_K[17] = &EFBE4786
    SHA_K[18] = &FC19DC6
    SHA_K[19] = &240CA1CC
    SHA_K[20] = &2DE92C6F
    SHA_K[21] = &4A7484AA
    SHA_K[22] = &5CB0A9DC
    SHA_K[23] = &76F988DA
    SHA_K[24] = &983E5152
    SHA_K[25] = &A831C66D
    SHA_K[26] = &B00327C8
    SHA_K[27] = &BF597FC7
    SHA_K[28] = &C6E00BF3
    SHA_K[29] = &D5A79147
    SHA_K[30] = &6CA6351
    SHA_K[31] = &14292967
    SHA_K[32] = &27B70A85
    SHA_K[33] = &2E1B2138
    SHA_K[34] = &4D2C6DFC
    SHA_K[35] = &53380D13
    SHA_K[36] = &650A7354
    SHA_K[37] = &766A0ABB
    SHA_K[38] = &81C2C92E
    SHA_K[39] = &92722C85
    SHA_K[40] = &A2BFE8A1
    SHA_K[41] = &A81A664B
    SHA_K[42] = &C24B8B70
    SHA_K[43] = &C76C51A3
    SHA_K[44] = &D192E819
    SHA_K[45] = &D6990624
    SHA_K[46] = &F40E3585
    SHA_K[47] = &106AA070
    SHA_K[48] = &19A4C116
    SHA_K[49] = &1E376C08
    SHA_K[50] = &2748774C
    SHA_K[51] = &34B0BCB5
    SHA_K[52] = &391C0CB3
    SHA_K[53] = &4ED8AA4A
    SHA_K[54] = &5B9CCA4F
    SHA_K[55] = &682E6FF3
    SHA_K[56] = &748F82EE
    SHA_K[57] = &78A5636F
    SHA_K[58] = &84C87814
    SHA_K[59] = &8CC70208
    SHA_K[60] = &90BEFFFA
    SHA_K[61] = &A4506CEB
    SHA_K[62] = &BEF9A3F7
    SHA_K[63] = &C67178F2
FinProc

Proc AddUnsigned(lX,lY:Entero):Entero
    Var lX8,lY8,lX4,lY4:Entero
    lX8 = lX And &80000000
    lY8 = lY And &80000000
    lX4 = lX And &40000000
    lY4 = lY And &40000000
    Resultado = (lX And &3FFFFFFF) + (lY And &3FFFFFFF)
    Si lX4 And lY4 Entonces
        Resultado = Resultado Xor &80000000 Xor lX8 Xor lY8
    OSi lX4 Or lY4 Entonces
        Si Resultado And &40000000 Entonces
            Resultado = Resultado Xor &C0000000 Xor lX8 Xor lY8
        SiNo
            Resultado = Resultado Xor &40000000 Xor lX8 Xor lY8
        FinSi
    SiNo
        Resultado = Resultado Xor lX8 Xor lY8
    FinSi
FinProc
       
Proc Ch(X,Y,Z:Entero):Entero
    Resultado = (X And Y) Xor ((Not X) And Z)

FinProc

Proc Maj(X,Y,Z:Entero):Entero
    Resultado = (X And Y) Xor (X And Z) Xor (Y And Z)
FinProc

Proc S(X,N:Entero):Entero
    Resultado = (X Shr (N And m_lOnBits[4])) Or (X Shl (32 - (N And m_lOnBits[4])))
FinProc

Proc R(X,N:Entero):Entero
    Resultado = X Shr (N And m_lOnBits[4])
FinProc

Proc Sigma0(X:Entero):Entero
    Resultado = S(X,2) Xor S(X,13) Xor S(X,22)
FinProc

Proc Sigma1(X:Entero):Entero
    Resultado = S(X,6) Xor S(X,11) Xor S(X,25)
FinProc

Proc Gamma0(X:Entero):Entero
    Resultado = S(X,7) Xor S(X,18) Xor R(X,3)
FinProc

Proc Gamma1(X:Entero):Entero
    Resultado = S(X,17) Xor S(X,19) Xor R(X,10)
FinProc

Proc ConvertToWordArray(Referencia sMessage:Cadena):Entero[]
    Var lMessageLength:Entero
    Var lNumberOfWords:Entero
    Var lBytePosition:Entero
    Var lByteCount:Entero
    Var lWordCount:Entero
    Var lByte:Entero
    Var @p:Byte
    Const MODULUS_BITS   = 512
    Const CONGRUENT_BITS = 448
    lMessageLength = CadLong(sMessage)
    lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
    ReDim Resultado,lNumberOfWords-1
    Mientras lByteCount < lMessageLength
        lWordCount = lByteCount \ BYTES_TO_A_WORD
        lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE
        p@ = sMessage@@+lByteCount
        lByte = p
        Resultado[lWordCount] = Resultado[lWordCount] Or (lByte Shl lBytePosition)
        lByteCount = lByteCount + 1
    FinMientras
    lWordCount = lByteCount \ BYTES_TO_A_WORD
    lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE
    Resultado[lWordCount] = Resultado[lWordCount] Or (&80 Shl lBytePosition)
    Resultado[lNumberOfWords-1] = lMessageLength Shl 3
    Resultado[lNumberOfWords-2] = lMessageLength Shr 29
FinProc

Proc AnsiASHA256(Referencia cMessage:Cadena):Cadena
    Var HASH[8]:Entero
    Var M[]:Entero
    Var W[64]:Entero
    Var a,b,c,d,e,f,g,h,i,j,T1,T2:Entero
    HASH[0] = &6A09E667
    HASH[1] = &BB67AE85
    HASH[2] = &3C6EF372
    HASH[3] = &A54FF53A
    HASH[4] = &510E527F
    HASH[5] = &9B05688C
    HASH[6] = &1F83D9AB
    HASH[7] = &5BE0CD19
    M = ConvertToWordArray(cMessage)
    Contar i a (&M) Paso 16
            Si i > &M Entonces Salir Contar
            a = HASH[0]
            b = HASH[1]
            c = HASH[2]
            d = HASH[3]
            e = HASH[4]
            f = HASH[5]
            g = HASH[6]
            h = HASH[7]
            j = 0
            Contar j a 63
                Si j < 16 Entonces
                    W[j] = M[j+i]
                SiNo
                    W[j] = AddUnsigned(AddUnsigned(AddUnsigned(Gamma1(W[j-2]),W[j-7]),Gamma0(W[j-15])),W[j - 16])
                FinSi
                T1 = AddUnsigned(AddUnsigned(AddUnsigned(AddUnsigned(h, Sigma1(e)),Ch(e, f, g)), SHA_K[j]), W[j])
                T2 = AddUnsigned(Sigma0(a),Maj(a,b,c))
                h = g
                g = f
                f = e
                e = AddUnsigned(d, T1)
                d = c
                c = b
                b = a
                a = AddUnsigned(T1, T2)
            Seguir
            HASH[0] = AddUnsigned(a, HASH[0])
            HASH[1] = AddUnsigned(b, HASH[1])
            HASH[2] = AddUnsigned(c, HASH[2])
            HASH[3] = AddUnsigned(d, HASH[3])
            HASH[4] = AddUnsigned(e, HASH[4])
            HASH[5] = AddUnsigned(f, HASH[5])
            HASH[6] = AddUnsigned(g, HASH[6])
            HASH[7] = AddUnsigned(h, HASH[7])
    Seguir
    Resultado = EntCad(HASH[0],16) + EntCad(HASH[1],16) + EntCad(HASH[2],16) + _
                EntCad(HASH[3],16) + EntCad(HASH[4],16) + EntCad(HASH[5],16) + _
                EntCad(HASH[6],16) + EntCad(HASH[7],16)
FinProc

InicializarSHA256

MessageBox(0,AnsiASHA256("abc"),"Cramel",48)


También lo pueden ver desde No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

¡Saludos!
#38
Otros lenguajes / Re:GUI para Compilador Cramel
Febrero 23, 2017, 11:50:16 PM
Muy interesante tu programa, a mas de uno le va a facilitar la compilación de su software, muchas gracias por apoyarnos. Por programadores como vos proyectos como este crecen hasta las nubes.

Seguí así! :D
#39
Dudas y pedidos generales / Re:¿A alguien le funciona?
Febrero 23, 2017, 11:29:21 PM
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: php
Proc Prueba:Entero Exportar Alias "WhosYourDaddy"
    Resultado = 789
FinProc


Sobre tu ejemplo de API no se que decirte, es perfectamente valido.
#40
Yo quiero ser un ANTRAX o un M3, que la gente vea mi nick y piense "fua, que grande que es ese tipo".  ;D ;D