Αποφάσισα να κάνω την γλώσσα να τρέχει σε άλλες γλώσσες ως αντικείμενο, καθώς επίσης και η ίδια να ανοίγει άλλες γλώσσες (script) και να δίνει το περιβάλλον της ως αντικείμενο.
Εδώ ανοίγουμε τη javascript μέσα από την Μ2000, και αυτή καλεί την Μ2000,
clear
declare vs "MSScriptControl.ScriptControl"
declare Alfa Module
Print Type$(Alfa)
With vs, "Language","Jscript", "AllowUI", true
Method vs, "Reset"
Print Type$(Alfa)
Method vs, "AddObject", "M2000", Alfa
method vs, "ExecuteStatement", {
M2000.AddExecCode("Function BB {=1234 **number} : k=2");
M=M2000.ExecuteStatement("Print 1234, BB(k)");
M2000.AddExecCode("aa$=key$");
}
Method vs, "eval", {"hello there"} as X$
Print X$
Method vs, "eval", {"hello there too"} as X$
Print X$
list
declare vs nothing
Το ίδιο Script Control δίνει και VBScript. Φτιάχνουμε μια Sub που τρέχει σε VBScript αλλά τυπώνει στην Μ2000, στην κονσόλα της!
clear
declare vs "MSScriptControl.ScriptControl"
declare Alfa Module
Print Type$(Alfa)
With vs, "Language","Vbscript", "AllowUI", true
Method vs, "Reset"
Method vs, "AddObject", "M2000", Alfa
X=0
Method vs, "AddCode",{
sub mine(b)
for i=1 to b
M2000.AddExecCode "Print "+cstr(i) +","
next
M2000.AddExecCode "X="+cstr(123456)
end sub
}
method vs, "ExecuteStatement", "mine 50"
Print X
declare vs nothing
Επίσης τώρα υπάρχει Installer (Inno Setup) που βάζει και εικονίδιο στην επιφάνεια εργασίας και κάνει το απαραίτητο Regsvr32 στο m2000.dll
Παρακάτω έχουμε την περίπτωση σύνδεσης με το m2000.dll το οποίο δίνει ένα αντικείμενο M2000.callback
Σε VB6
' at module level
Dim m As New M2000.callback
' in a load or sub main
m.Run "start"
' We can start with clear console, program, variables (but not stack, use Flush)
' Clear for variables and New for clear program and static variables
Dim a$
If m.Status < 0 Then Exit Sub
m.ExecuteStatement "Start"
again:
If m.Status = 0 Then
m.Run "show :repeat { clear cmd$ :print $(0), {M2000>}; : line input cmd$ : print" + vbCrLf + " inline cmd$" + vbCrLf + "} always", False
End If
If Abs(m.Status) = 1 Then
' Use m.ErrorEn for errors in english
a$ = m.ErrorGr
m.Reset
m.Run "Print : Print {" + a$ + "}"
GoTo again
End If
F1.Caption = m.Eval(CStr(Timer))
m.ShowGui = False
m.Reset
Debug.Print "ok".
Άλλη περίπτωση:
μπορούμε να πάρουμε εξαγωγή από παράσταση
a= m.Eval("100*500")
Γρήγορο άνοιγμα:
Sub cli()
If m.Status = 0 Then
'm.cli "", "CLI>"
m.cli "c:\note1.gsb"
m.Reset
End If
End Sub
ή
Sub cli()
If m.Status = 0 Then
m.cli "", "CLI>"
m.Reset
End If
End Sub
Εδώ ανοίγουμε τη javascript μέσα από την Μ2000, και αυτή καλεί την Μ2000,
clear
declare vs "MSScriptControl.ScriptControl"
declare Alfa Module
Print Type$(Alfa)
With vs, "Language","Jscript", "AllowUI", true
Method vs, "Reset"
Print Type$(Alfa)
Method vs, "AddObject", "M2000", Alfa
method vs, "ExecuteStatement", {
M2000.AddExecCode("Function BB {=1234 **number} : k=2");
M=M2000.ExecuteStatement("Print 1234, BB(k)");
M2000.AddExecCode("aa$=key$");
}
Method vs, "eval", {"hello there"} as X$
Print X$
Method vs, "eval", {"hello there too"} as X$
Print X$
list
declare vs nothing
Το ίδιο Script Control δίνει και VBScript. Φτιάχνουμε μια Sub που τρέχει σε VBScript αλλά τυπώνει στην Μ2000, στην κονσόλα της!
clear
declare vs "MSScriptControl.ScriptControl"
declare Alfa Module
Print Type$(Alfa)
With vs, "Language","Vbscript", "AllowUI", true
Method vs, "Reset"
Method vs, "AddObject", "M2000", Alfa
X=0
Method vs, "AddCode",{
sub mine(b)
for i=1 to b
M2000.AddExecCode "Print "+cstr(i) +","
next
M2000.AddExecCode "X="+cstr(123456)
end sub
}
method vs, "ExecuteStatement", "mine 50"
Print X
declare vs nothing
Επίσης τώρα υπάρχει Installer (Inno Setup) που βάζει και εικονίδιο στην επιφάνεια εργασίας και κάνει το απαραίτητο Regsvr32 στο m2000.dll
Παρακάτω έχουμε την περίπτωση σύνδεσης με το m2000.dll το οποίο δίνει ένα αντικείμενο M2000.callback
Σε VB6
' at module level
Dim m As New M2000.callback
' in a load or sub main
m.Run "start"
' We can start with clear console, program, variables (but not stack, use Flush)
' Clear for variables and New for clear program and static variables
Dim a$
If m.Status < 0 Then Exit Sub
m.ExecuteStatement "Start"
again:
If m.Status = 0 Then
m.Run "show :repeat { clear cmd$ :print $(0), {M2000>}; : line input cmd$ : print" + vbCrLf + " inline cmd$" + vbCrLf + "} always", False
End If
If Abs(m.Status) = 1 Then
' Use m.ErrorEn for errors in english
a$ = m.ErrorGr
m.Reset
m.Run "Print : Print {" + a$ + "}"
GoTo again
End If
F1.Caption = m.Eval(CStr(Timer))
m.ShowGui = False
m.Reset
Debug.Print "ok".
Άλλη περίπτωση:
μπορούμε να πάρουμε εξαγωγή από παράσταση
a= m.Eval("100*500")
Γρήγορο άνοιγμα:
Sub cli()
If m.Status = 0 Then
'm.cli "", "CLI>"
m.cli "c:\note1.gsb"
m.Reset
End If
End Sub
ή
Sub cli()
If m.Status = 0 Then
m.cli "", "CLI>"
m.Reset
End If
End Sub
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.