Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: R@MI en Octubre 12, 2011, 12:53:45 pm
-
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
-
Gracias por NO respondr, me alentan a seguir NO publicando
-
No te enojes :D , se agradece tu colaboración, el source esta bien, quizás muchos no saben que hacer con el, seria mas interesante si lee directamente un archivo y ejecute las instrucciones, pero bueno con eso no vasta, tendrías que implementar alguna forma de que se ejecuten funciones mas utilies.
Saludos y seguí con eso.
-
Que carácter Mr. X jejeje guarda tus energias, has pensado en un server telnet y que contenga comandos para realizar determinadas tareas ? Salu2
-
no es un lenguaje de programacion solo es un interprete de cogido :S
-
Nunca dije que es un lenguaje de programación. Por eso puedes hacer un server telnet con winsock y establecer los comandos a travéz del interprete para ejecutar tareas específicas en el server desde un cliente que conecte a él ...
No será necesario una aplicación cliente, ya que conectas de cualquier consola al puerto 23 por medio de telnet y listo ;D... (eso es lo bueno de esto jejeje 8))
ejecutas los comandos directamente ... se entiende???
Se puede establecer que pida usuario y contraseña para permitir el acceso y ademas establecer un filter de ip, de esta manera se eleva el nivel de seguridad en la gestión por telnet ...
Solo fue una idea como para valorizar tu proyect y darle utilidad :-\... nada mas ... salu2
-
HOLA!!!
El codigo me parece una basura (sin ofender)
En cuanto a lo de telnet...
Se descontinuo en vista.
GRACIAS POR LEER!!!
-
79137913
MNMNM, primero que en vista solo viene desactivado .... te cuento por si no sabías, puedes activarlo.
Segundo hay muchos programas para gestionar el protocolo telnet ... ejemplo: http://www.putty.org/ ...
Mas allá de las aplicaciones que tiene este protocolo en routers, servidores (de infraestructuras grandes), dispositivos, etc
Estas acostumbrado a las interfaces graficas de estas cosas, por eso supongo que no conoces el potencial del protocolo telnet. Permitiendote realizar en forma remota configuraciones y ejecuciones de comandos. Cuya interacción con el server a nivel cliente es descentralizada, y esto es mucho, no depender de una aplicación nuestra para establecer la comunicación, si no que esta estandarizado a nivel mundial. Sin contar el multipropósito que esto puede tener, decentralizando también el acceso desde otros sistemas operativos ...
hablé de la seguridad porque no tiene cifrado ... y esto es muy importante tenerlo en cuenta ...
http://es.wikipedia.org/wiki/Telnet (http://es.wikipedia.org/wiki/Telnet)
Igual esto fue solo una idea, imaginado la aplicación del código.
Tercero el código no es basura ... no siempre un código debe ser una aplicación finalizada para un determinado objetivo. O porque a una determinada persona no le sirve su contenido. Hablo de contenido y no del objetivo de la aplicación.
Allí muestra la utilización de varias apis que también promueven aprendizaje.
salu2
-
HOLA!!!
El codigo me parece una basura (sin ofender)
En cuanto a lo de telnet...
Se descontinuo en vista.
GRACIAS POR LEER!!!
Tranquil@!!!
Es innecesario que uses esa expresión mas aun cuando no fundamentas en absoluto tu conclusión.
No es que ofendas, el que queda mal eres tu y nadie mas.
No es que me arañe porque lea la expresión "basura", peores cosas he leído y con mejor fundamento, pero si empiezas a catalogar de esa forma piensa en que se convertiría este foro técnico que esta de lejos muy por encima de muchos otros por el valor de su contenido, no lo malees.
Cualquier ápice de conocimiento que se publique no podría ser basura, y el código que publicó Mr X esta lejos de serlo. Yo no lo pienso usar, no creo poder conseguirle una utilidad personal, pero este foro no es para mi propio y exclusivo beneficio y ello no me da derecho a una expresión como tal, seguramente a muchos si le interesará aunque por lo menos sea para estudiarlo y dar agregados interesantes como los que da softmania.
Tu expresión carece de valor como aporte o como crítica, cuando algo carece de valor alguno ¿que es?
Por ultimo, que se halla descontinuado en Vista mmm, bueno sobre ello creo que softmania ya te explico mejor.
En aras de mantener la calidad del foro, te pido de buena manera cuida tus expresiones.
Sin ofender.
-
Tranquilo no mas gente y vamos a ayudarnos todos juntos... ;D ;D ;D
-
HOLA!!!
Lo del código lo mantengo aunque sea una forma agresiva de escribir mi replica.
Lo de telnet, releí el post y me di cuenta que habia leido mal, pense que decias que te podias conectar a una pc con telnet sin que tenga activado el servicio.
Ahi me apure a escribir y lo acepto.
Pero reitero, el codigo ese es una consola que cambia de colores, pone titulo a la ventana hace print y que masss... un wait y una pausa ... solamente
Es un codigo al cual no le veo utilidad y aparte gasta demaciado haciendo una consola de verdad cuando puede usar un RTB y ahorrarse 99x10^99999 lineas de codigo.
GRACIAS POR LEER!!!
-
el codigo ese es una consola que cambia de colores, pone titulo a la ventana hace print y que masss... un wait y una pausa ... solamente
Es un codigo al cual no le veo utilidad y aparte gasta demaciado haciendo una consola de verdad cuando puede usar un RTB y ahorrarse 99x10^99999 lineas de codigo.
Y no era mas fácil decir eso desde un inicio?. Y luego ya lo adornabas con tu conclusión subjetiva, alli al menos queda un precedente de aportación y se puede conversar o discutir sobre como mejorarlo si vale la pena, o que otras alternativas hay, etc.
Sin mayor bronca, a mi no me parece un código basura, en todo caso por lo menos queda como un ejercicio y ya, pero esas ya son opiniones.
Saludos
-
Por ahora, solo interprete, estoy trabajando en una version ke genera exes ;)