Nota: nueva versión 0.3
Hola a todos. Aca les traigo un lenguaje de programación, en versión SUPER beta :blank: , está recien creado, con muy pocas funciones. y sin compilador (Por ahora). ahora lo explico:
las funciones que tiene son:
titl{} - Setea el título de la ventana.
echo{} - Imprime un texto en pantalla.
setcolor{}{}{}{} (las últimas dos, son opcionales) - ajusta el color
echo{|(operación)} - imprime el resultado de una operación matematica (por ahora solo suma, y no se le puede concatenar texto.
Ahora, se puede concatenar texto, con las operaciones
pause{} - realiza una pausa, y sy se pone texto entre los {}, muestra ese texto.
wait{} - espera
# -comentarios!
end - termina el programa
las funciones se usan asi:
funcion{parametro1}{parametro2}{...}...
NO admite la creación de funciones propias por código.
un ejemplo de código:
titl{console application using MKL}
echo{Soy Mr. X}"
setcolor{green}{0}{1}
echo{|1+5}
wait{5000}
end
esto usa todas las funciones, y ahora explico:
titl{console application using MKL}
Pone el título como console application using MKL
echo{Soy Mr. X}
Imprime en pantalla Soy Mr. X
setcolor{green}{0}{1}
pone como color de fondo, verde claro.
Setcolor funciona así: setcolor{color}{color}{claro?}{claro?}
Color sería: red, green o blue, y claro? se pone en 1 si se quiere que el color sea uno claro.
si se quieren los colores por default, en vez de red, green o blue, se pone 0
echo{|1+5} - imprime en pantalla el resultado de 1+5
wait{5000} - Espera 5 segundos
end - termina
ACLARACIÓN: si no se pone end, la aplicación espera a que el usuario presione *, y enter.
Sorry: el source code:
en un módulo, y, que se inicie en sub main:
Option Explicit
Private Const FOREGROUND_BLUE = &H1
Private Const FOREGROUND_GREEN = &H2
Private Const FOREGROUND_RED = &H4
Private Const BACKGROUND_BLUE = &H10
Private Const BACKGROUND_GREEN = &H20
Private Const BACKGROUND_RED = &H40
Private Const BACKGROUND_INTENSITY = &H80&
Private Const BACKGROUND_SEARCH = &H20&
Private Const FOREGROUND_INTENSITY = &H8&
Private Const FOREGROUND_SEARCH = (&H10&)
Private Const ENABLE_LINE_INPUT = &H2&
Private Const ENABLE_ECHO_INPUT = &H4&
Private Const ENABLE_MOUSE_INPUT = &H10&
Private Const ENABLE_PROCESSED_INPUT = &H1&
Private Const ENABLE_WINDOW_INPUT = &H8&
Private Const ENABLE_PROCESSED_OUTPUT = &H1&
Private Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2&
Private Const STD_OUTPUT_HANDLE = -11&
Private Const STD_INPUT_HANDLE = -10&
Private Const STD_ERROR_HANDLE = -12&
Private Const INVALID_HANDLE_VALUE = -1&
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Private Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long
Private Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput As Long, ByVal lpBuffer As String, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long
Private Declare Function SetConsoleTextAttribute Lib "kernel32" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
Private Declare Function SetConsoleTitle Lib "kernel32" Alias "SetConsoleTitleA" (ByVal lpConsoleTitle As String) As Long
Private hConsoleOut As Long, hConsoleIn As Long, hConsoleErr As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private sSource As String
Sub Main()
'On Error Resume Next
If AllocConsole() Then
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE)
If hConsoleOut = INVALID_HANDLE_VALUE Then MsgBox "Unable to get STDOUT"
hConsoleIn = GetStdHandle(STD_INPUT_HANDLE)
If hConsoleOut = INVALID_HANDLE_VALUE Then MsgBox "Unable to get STDIN"
Else
MsgBox "Couldn't allocate console"
End If
sSource = "titl{console application using MKL}" & vbNewLine & _
"echo{Soy Ramiro}" & vbNewLine & _
"setcolor{blue}{0}{1}{1}" & vbNewLine & _
"echo{el resultado de 9450+1560 es |9450+1560|}" & vbNewLine & _
"# Esto es un comentario" & vbNewLine & _
"pause" & vbNewLine & _
"echo{despues de la pausa...}" & vbNewLine & _
"pause{Presione enter para salir}" & vbNewLine & _
"wait{5000}" & vbNewLine & _
"end"
SetConsoleTitle "MK Soft"
setBG "01", True, False
ConsoleWrite "MKL is a Open Source language created by MK Soft S.A"
ConsoleWrite "(C)2010 MK Soft "
ConsoleWrite ""
setBG "00"
Dim tSource() As String
Dim lSource() As String
Dim i As Long, o As Long, w As Long
Dim bColor As String, i1 As Boolean, i2 As Boolean
tSource = Split(sSource, vbNewLine, -1, vbTextCompare)
Dim fName As String, Params() As String
Dim tOperation As Long, tOperation2 As Long, tOperation3 As Long, isC As Boolean, iC1 As Long, iC2 As Long, iC As Integer, wDo As String, wP As Long, iwO As Boolean, fText As String
For i = 0 To UBound(tSource)
lSource = Split(tSource(i), "{")
fName = lSource(0)
If Mid(lSource(0), 1, 1) = "#" Then
fName = "#"
End If
If Not UBound(lSource) = 0 Then
ReDim Params(UBound(lSource) - 1)
Else
ReDim Params(0)
End If
For o = 1 To UBound(lSource)
Params(o - 1) = Mid(lSource(o), 1, Len(lSource(o)) - 1)
Next o
bColor = ""
Select Case fName
Case "titl"
If Not UBound(Params) < 0 Then SetConsoleTitle Params(0)
Case "echo"
If Not UBound(Params) < 0 Then
isC = False
iC = 0
iC1 = 0
iC2 = 0
tOperation = 0
tOperation2 = 0
tOperation3 = 0
wDo = ""
wP = 0
fText = ""
iwO = False
For w = 1 To Len(Params(0))
If Mid(Params(0), w, 1) = "|" Then
isC = Not isC
iwO = True
End If
If isC Then
If iC = 0 Then
iC1 = w
Else
If wP Then
iC2 = w
fText = Mid(Params(0), 1, iC1 - 1)
tOperation = Mid(Params(0), iC1 + 1, (wP - iC1 - 1))
tOperation2 = Mid(Params(0), wP + 1, (iC2 - wP))
If wDo = "+" Then
tOperation3 = tOperation + tOperation2
End If
fText = fText & tOperation3
fText = fText & Mid(Params(0), iC2 + 1, (Len(Params(0)) - iC2) - 1)
iC = 0
End If
End If
'
iC = iC + 1
End If
If (Mid(Params(0), w, 1) = "+") And (iC > 1) Then
wDo = "+"
wP = w
End If
Next w
If iwO = True Then
ConsoleWrite fText
Else
ConsoleWrite Params(0)
End If
End If
Case "setcolor"
If Not UBound(Params) < 2 Then
If Params(2) = 1 Then
i1 = True
End If
End If
If Not UBound(Params) < 3 Then
If Params(3) = 1 Then
i2 = True
End If
End If
If UBound(Params) < 0 Then bColor = "00": Call setBG(bColor): GoTo nx
Select Case Params(0)
Case "red"
bColor = "1"
Case "green"
bColor = "2"
Case "blue"
bColor = "3"
Case Else
bColor = "0"
End Select
If UBound(Params) < 1 Then
bColor = bColor & "0"
Call setBG(bColor)
GoTo nx
End If
Select Case Params(1)
Case "red"
bColor = bColor & "1"
Case "green"
bColor = bColor & "2"
Case "blue"
bColor = bColor & "3"
Case Else
bColor = bColor & "0"
End Select
Call setBG(bColor, i1, i2)
nx:
Case "wait"
If Not UBound(Params) < 0 Then
Sleep Params(0)
Else
Sleep 1000
End If
Case "end"
FreeConsole
End
Case "#" ' comentario
Case "pause"
If (UBound(Params) < 0) Or (Params(0) = "") Then
ConsoleWrite "Presione enter para continuar . . ."
For w = 1 To 10
w = 1
If GetAsyncKeyState(vbKeyReturn) Then Exit For
Next w
Else
ConsoleWrite Params(0)
For w = 1 To 10
w = 1
If GetAsyncKeyState(vbKeyReturn) Then Exit For
Next w
End If
Case Else
ConsoleWrite "ERROR: No se ha reconocido el comando " & fName
End Select
Next i
If ConsoleReadLine = "*" Then FreeConsole
End Sub
Function setBG(ByVal col As String, Optional i1 As Boolean, Optional i2 As Boolean)
Select Case col
Case "11"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_RED Or FOREGROUND_RED Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "12"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_RED Or FOREGROUND_GREEN Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "13"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_RED Or FOREGROUND_BLUE Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "21"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_GREEN Or FOREGROUND_RED Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "22"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_GREEN Or FOREGROUND_GREEN Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "23"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_GREEN Or FOREGROUND_BLUE Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "31"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_BLUE Or FOREGROUND_RED Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "32"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_BLUE Or FOREGROUND_GREEN Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "33"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_BLUE Or FOREGROUND_BLUE Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "10"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_RED Or &H7 Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "20"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_GREEN Or &H7 Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "30"
SetConsoleTextAttribute hConsoleOut, BACKGROUND_BLUE Or &H7 Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "01"
SetConsoleTextAttribute hConsoleOut, &H0 Or FOREGROUND_RED Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "02"
SetConsoleTextAttribute hConsoleOut, &H0 Or FOREGROUND_GREEN Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "03"
SetConsoleTextAttribute hConsoleOut, &H0 Or FOREGROUND_BLUE Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case "00"
SetConsoleTextAttribute hConsoleOut, &H0 Or &H7 Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
Case Else 'Normal text
SetConsoleTextAttribute hConsoleOut, &H0 Or &H7 Or IIf(i1, FOREGROUND_INTENSITY, &H0) Or IIf(i2, BACKGROUND_INTENSITY, &H0)
End Select
' SetConsoleTextAttribute hConsoleOut, FOREGROUND_RED Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY Or BACKGROUND_BLUE
End Function
Sub ConsoleWrite(ByVal sInput As String)
Dim cWritten As Long
sInput = sInput + vbCrLf
WriteConsole hConsoleOut, ByVal sInput, Len(sInput), cWritten, ByVal 0&
End Sub
Function ConsoleReadLine() As String
Dim ZeroPos As Long
'Create a buffer
ConsoleReadLine = String(10, 0)
'Read the input
ReadConsole hConsoleIn, ConsoleReadLine, Len(ConsoleReadLine), vbNull, vbNull
'Strip off trailing vbCrLf and Chr$(0)'s
ZeroPos = InStr(ConsoleReadLine, Chr$(0))
If ZeroPos > 0 Then ConsoleReadLine = Left$(ConsoleReadLine, ZeroPos - 3)
End Function
FUENTE:
http://gmks.com.ar/index.php/topic,10.0.html