home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_3_94 / vbwin / makro / command.bas < prev    next >
BASIC Source File  |  1994-04-26  |  14KB  |  417 lines

  1. DefInt A-Z
  2. Global Const MODE_REALIZE = 1
  3. Global Const MODE_HELP = 2
  4. Global Const MODE_TEST = 3
  5. Global Const MODE_PARAMS = 4
  6. Dim IsOutPutOpen As Integer
  7. Dim Comment As String * 1
  8. Dim ErrorAdd As String
  9. Dim MsgCaption As String
  10. Dim UserVars() As Variant
  11. Type MakroLine
  12.     LineIndex As Integer
  13.     LineCommand As String
  14. End Type
  15. ' DLL Deklarationen
  16. Declare Function DiskInfo% Lib "bptools.dll" (ByVal nDrive%, lBytesTotal&, lBytesFree&)
  17. Declare Function VBEdit_GetLineCount% Lib "bptools.dll" (C As Control)
  18. Declare Sub VBEdit_InvertLine Lib "bptools.dll" (C As Control, ByVal i%)
  19. Declare Function VBEdit_GetLine$ Lib "bptools.dll" (C As Control, ByVal i%)
  20. Declare Sub VBCombo_SelectString Lib "bptools.dll" (C As ComboBox, ByVal a$)
  21. Declare Sub VBCombo_ClearString Lib "bptools.dll" (C As ComboBox)
  22.  
  23.  
  24. Function Char2Drive (Char$)
  25.     x = Asc(UCase(Left$(Char$, 1)))
  26.     If (x >= 65) And (x <= 90) Then
  27.         x = x - 64
  28.         Char$ = Chr$(x + 64) & ":\"
  29.     Else
  30.         x = 0
  31.         Char$ = Left$(CurDir$, 1) & ":\"
  32.     End If
  33.     Char2Drive = x
  34. End Function
  35.  
  36. Function cmd_CloseOutput (Modus, OutputLine As Variant)
  37. Select Case Modus
  38. Case MODE_REALIZE, MODE_TEST:
  39.     If IsOutPutOpen Then
  40.         If Modus = MODE_REALIZE Then
  41.             frmOutput.lst_Output.AddItem ""
  42.             frmOutput.lst_Output.AddItem Chr$(9) & "Weiter mit beliebiger Taste oder Mausklick..."
  43.             frmOutput.Show 1
  44.         End If
  45.         IsOutPutOpen = False
  46.         cmd_CloseOutput = 0
  47.     Else cmd_CloseOutput = -6
  48.     End If
  49. Case MODE_HELP
  50.     OutputLine = "'CloseOutput' beendet die Ausgabe in einer Liste"
  51.     cmd_CloseOutput = 1
  52. End Select
  53.  
  54. End Function
  55.  
  56. Function cmd_Exit (Modus, OutputLine As Variant)
  57. Select Case Modus
  58. Case MODE_REALIZE: Unload frmMain
  59. Case MODE_HELP: OutputLine = "'Exit' beendet Makroverarbeitung"
  60. End Select
  61. cmd_Exit = 1
  62. End Function
  63.  
  64. Function cmd_Free (Modus%, In$(), OutputLine As Variant)
  65.     Select Case Modus
  66.     Case MODE_REALIZE
  67.         If UBound(In) = 1 Then
  68.             d$ = CurDir$
  69.         Else d$ = In(2)
  70.         End If
  71.         Drive = Char2Drive(d$)
  72.         If UBound(In) < 3 Then
  73.             showmode = 1
  74.         Else showmode = Val(Left$(In(3), 1))
  75.         End If
  76.         If DriveReady(d$) = 0 Then
  77.             x = DiskInfo(Drive, lBytesTotal&, lBytesFree&)
  78.             If showmode > 0 Then
  79.                 lBytesTotal& = lBytesTotal& / 1024
  80.                 lBytesFree& = lBytesFree& / 1024
  81.             End If
  82.             OutputLine = "Laufwerk: " & d$ & Chr$(13) & Chr$(10)
  83.             OutputLine = OutputLine & "Gesamter Speicherplatz: " & Chr$(9) & Format$(lBytesTotal&, "###,000,000") & Chr$(13) & Chr$(10)
  84.             OutputLine = OutputLine & "Freier Speicherplatz: " & Chr$(9) & Format$(lBytesFree&, "###,000,000") & Chr$(13) & Chr$(10)
  85.             cmd_Free = 1
  86.         Else cmd_Free = 0
  87.         End If
  88.     Case MODE_HELP
  89.         OutputLine = "'Free' ermittelt freien Speicherplatz auf dem aktuellen Laufwerk"
  90.         cmd_Free = 1
  91.     Case MODE_TEST
  92.         If UBound(In) = 1 Then
  93.             d$ = CurDir$
  94.         Else d$ = In(2)
  95.         End If
  96.         Drive = Char2Drive(d$)
  97.         x = DriveReady(d$)
  98.         If x = 0 Then
  99.             cmd_Free = 1
  100.         Else cmd_Free = x
  101.         End If
  102.     End Select
  103. End Function
  104.  
  105. Function cmd_Help (Modus, Arr$(), OutputLine As Variant)
  106. Select Case Modus
  107. Case MODE_REALIZE
  108.         Dummy$ = Arr$(0)
  109.         Pos = InStr(1, Dummy$, " ")
  110.         If Pos > 0 Then
  111.             Dummy$ = Mid$(Arr(0), Pos + 1, Len(Trim$(Arr$(0))) - Pos + 1)
  112.             If Left$(Dummy$, 1) = "@" Then
  113.                 OutputLine = Right$(Dummy$, Len(Dummy$) - 1)
  114.                 cmd_Help = 1
  115.             Else
  116.                 cmd_Help = InterpretLine(MODE_HELP, Dummy$, OutputLine)
  117.             End If
  118.         Else cmd_Help = -3
  119.         End If
  120. Case MODE_TEST
  121.         Dummy$ = Arr$(0)
  122.         Pos = InStr(1, Dummy$, " ")
  123.         If Pos > 0 Then
  124.             Dummy$ = Mid$(Arr(0), Pos + 1, Len(Trim$(Arr$(0))) - Pos + 1)
  125.             If Left$(Dummy$, 1) <> "@" Then
  126.                 cmd_Help = InterpretLine(MODE_HELP, Dummy$, OutputLine)
  127.             Else cmd_Help = 1
  128.             End If
  129.         Else cmd_Help = -3
  130.         End If
  131. Case MODE_HELP
  132.     OutputLine = "'Help' oder '?' zeigt Hilfe zu einem Befehl an"
  133.     cmd_Help = 1
  134. Case Else
  135.     cmd_Help = -2
  136. End Select
  137. End Function
  138.  
  139. Function cmd_MsgBox (Modus, Arr$(), OutputLine As Variant)
  140. Select Case Modus
  141. Case MODE_REALIZE, MODE_TEST
  142.     Dummy$ = Arr$(0)
  143.     Pos = InStr(1, Dummy$, " ")
  144.     If Pos > 0 Then
  145.        Dummy$ = Mid$(Arr(0), Pos + 1, Len(Trim$(Arr$(0))) - Pos + 1)
  146.        If Left$(Dummy$, 1) = "@" Then
  147.         OutputLine = Right$(Dummy$, Len(Dummy$) - 1)
  148.         cmd_MsgBox = 2
  149.        Else
  150.         If InterpretLine(Modus, Dummy$, OutputLine) = 1 Then cmd_MsgBox = 2
  151.        End If
  152.     Else cmd_MsgBox = -3
  153.     End If
  154. Case MODE_HELP
  155.     cmd_MsgBox = 1
  156.     OutputLine = "'MsgBox' zeigt eine Meldung an."
  157. End Select
  158. End Function
  159.  
  160. Function cmd_Now (Modus, OutputLine As Variant)
  161. Select Case Modus
  162. Case MODE_REALIZE, MODE_TEST
  163.     If Modus = MODE_REALIZE Then
  164.         OutputLine = Time$ & " am " & Date$
  165.     End If
  166.     cmd_Now = 1
  167. Case MODE_HELP
  168.     cmd_Now = 1
  169.     OutputLine = "'Now' gibt die aktuelle Uhrzeit und das aktuelle Datum aus."
  170. End Select
  171. End Function
  172.  
  173. Function cmd_OpenOutput (Modus, OutputLine As Variant)
  174. Select Case Modus
  175. Case MODE_REALIZE, MODE_TEST:
  176.     If Not IsOutPutOpen Then
  177.         If Modus = MODE_REALIZE Then Load frmOutput
  178.         IsOutPutOpen = True
  179.         cmd_OpenOutput = 0
  180.     Else cmd_OpenOutput = -6
  181.     End If
  182. Case MODE_HELP
  183.     OutputLine = "'OpenOutput' gestattet die Ausgabe in einer Liste"
  184.     cmd_OpenOutput = 1
  185. End Select
  186. End Function
  187.  
  188. Function cmd_Out (Modus, Arr$(), OutputLine As Variant)
  189. Select Case Modus
  190. Case MODE_REALIZE, MODE_TEST
  191.         Dummy$ = Arr$(0)
  192.         Pos = InStr(1, Dummy$, " ")
  193.         If Pos > 0 Then
  194.             If Modus = MODE_REALIZE Then
  195.                 Dummy$ = Mid$(Arr(0), Pos + 1, Len(Trim$(Arr$(0))) - Pos + 1)
  196.                 If Left(Dummy$, 1) = "@" Then Dummy$ = Right$(Dummy$, Len(Dummy$) - 1)
  197.                 OutputLine = Dummy$
  198.             End If
  199.         Else OutputLine = Right$(Dummy$, Len(Dummy$) - 2)
  200.         End If
  201.         cmd_Out = 1
  202. Case MODE_HELP
  203.     OutputLine = "'Out' oder '<<' zeigt eine Zeichenkette an"
  204.     cmd_Out = 1
  205. End Select
  206. End Function
  207.  
  208. Function cmd_Set (Modus, Arr$(), OutputLine As Variant)
  209. Select Case Modus
  210. Case MODE_REALIZE, MODE_TEST
  211.         If Modus = MODE_REALIZE Then m = False Else m = True
  212.         Select Case UBound(Arr)
  213.         Case Is = 2: cmd_Set = SetOption(Arr$(2), "", m)
  214.         Case Is > 2: cmd_Set = SetOption(Arr$(2), Arr$(3), m)
  215.         Case Is <= 2: cmd_Set = -3
  216.         End Select
  217. Case MODE_HELP
  218.     cmd_Set = 1
  219.     OutputLine = "'Set' oder '!' verΣndert verschiedene Einstellungen des Systems"
  220. End Select
  221. End Function
  222.  
  223. Function cmd_Wait (Modus, OutputLine)
  224.  
  225. End Function
  226.  
  227. Function DriveReady (Drive$)
  228.     On Error Resume Next
  229.     x$ = Dir$(Drive$)
  230.     Select Case Err
  231.     Case 0: DriveReady = 0
  232.     Case 68: DriveReady = -10
  233.     Case 75: DriveReady = -11
  234.     Case 71: DriveReady = -12
  235.     Case Else: DriveReady = -200
  236.     End Select
  237. End Function
  238.  
  239. Function GetError$ (ErrorIndex%)
  240.     Select Case ErrorIndex
  241.     Case -1: GetError = "Unbekannter Befehl: " & ErrorAdd
  242.     Case -2: GetError = "Verschachtelter Befehl nicht ausfⁿhrbar"
  243.     Case -3: GetError = "Parameter erwartet"
  244.     Case -4: GetError = "Unbekannte Option: " & ErrorAdd
  245.     Case -5: GetError = "Diese Option darf nicht gel÷scht werden"
  246.     Case -6: GetError = "Doppelte Aufruf nicht gestattet!"
  247.     Case -7: GetError = "Die Option kann hier nicht gesetzt werden."
  248.     Case -8: GetError = "Vermisse Anweisung: " & ErrorAdd
  249.     Case -9: GetError = "Unbekannter Wert fⁿr diese Option"
  250.     Case -10: GetError = "Laufwerk auf dem System nicht verfⁿgbar"
  251.     Case -11: GetError = "Fehler beim Zugriff auf Laufwerk"
  252.     Case -12: GetError = "Laufwerk nicht bereit"
  253.     Case Else: GetError = "Unbekannter Fehler"
  254.     End Select
  255. End Function
  256.  
  257. Function GetOption (OptionString$, ErrorIndex%) As String
  258.     ErrorIndex = 0
  259.     Select Case UCase(OptionString)
  260.     Case "COMMENT": GetOption = Comment
  261.     Case "MSGCAPTION": GetOption = MsgCaption
  262.     Case Else
  263.         ErrorAdd = OptionString
  264.         ErrorIndex = -4
  265.     End Select
  266. End Function
  267.  
  268. Function InterpretLine (Modus, InputLine$, OutputLine As Variant) As Integer
  269.     Dim Out$(), Arr$()
  270.     doit = LineSplit(InputLine$, Arr$())
  271.     If doit Then
  272.     Select Case UCase(Trim$(Arr$(1)))  'Welcher Befehl?
  273.     Case "EXIT": InterpretLine = cmd_Exit(Modus, OutputLine)
  274.     Case "FREE": InterpretLine = cmd_Free(Modus, Arr$(), OutputLine)
  275.     Case "MSGBOX": InterpretLine = cmd_MsgBox(Modus, Arr$(), OutputLine)
  276.     Case "HELP", "?": InterpretLine = cmd_Help(Modus, Arr$(), OutputLine)
  277.     Case "SET", "!": InterpretLine = cmd_Set(Modus, Arr$(), OutputLine)
  278.     Case "OPENOUTPUT": InterpretLine = cmd_OpenOutput(Modus, OutputLine)
  279.     Case "CLOSEOUTPUT": InterpretLine = cmd_CloseOutput(Modus, OutputLine)
  280.     Case "OUT", "<<": InterpretLine = cmd_Out(Modus, Arr$(), OutputLine)
  281.     Case "NOW": InterpretLine = cmd_Now(Modus, OutputLine)
  282.     Case Else:
  283.         ErrorAdd = Trim$(Arr$(1))
  284.         InterpretLine = -1 'Unbekannter Befehl
  285.     End Select
  286.     End If
  287. End Function
  288.  
  289. Function InterpretMakro (InitMode%, Makro() As MakroLine, ErrorIndex)
  290.     'Dim F As Form
  291.     Dim Out As Variant, Arr$()
  292.     WinCmdInit
  293.     For i = LBound(Makro) To UBound(Makro)
  294.         NextErr = InterpretLine((InitMode), Makro(i).LineCommand, Out)
  295.         Select Case NextErr
  296.         Case 1:
  297.             If InitMode <> MODE_TEST Then
  298.                 If VarType(Out) = 8 Then
  299.                     If IsOutPutOpen Then
  300.                         x = LineUndoBreak(Out, Arr$())
  301.                         For j = 1 To UBound(Arr)
  302.                             frmOutput.lst_Output.AddItem Trim$(Arr$(j))
  303.                         Next
  304.                     Else
  305.                         MsgBox Out, 0, GetOption("MsgCaption", 0)
  306.                     End If
  307.                 End If
  308.             End If
  309.         Case 2: If InitMode <> MODE_TEST Then MsgBox Out, 0, GetOption("MsgCaption", 0)
  310.         Case Is < 0:       ' Sonst ignorieren
  311.             InterpretMakro = Makro(i).LineIndex
  312.             ErrorIndex = NextErr
  313.             Exit Function
  314.         End Select
  315.     Next
  316.     If IsOutPutOpen Then
  317.         ErrorAdd = "CloseOutput"
  318.         ErrorIndex = -8
  319.         InterpretMakro = Makro(UBound(Makro)).LineIndex
  320.     Else InterpretMakro = -1
  321.     End If
  322. End Function
  323.  
  324. Function LineSplit (ByVal CommandLine$, Arr$())
  325.     Dim Start As Integer, Pos As Integer, NextString As String
  326.     ReDim Arr$(0)
  327.     If Len(CommandLine) = 0 Then Exit Function
  328.     If Left$(CommandLine, 1) = ";" Then Exit Function
  329.     LineSplit = True
  330.     Pos = InStr(1, CommandLine$, ";")
  331.     If Pos > 0 Then CommandLine$ = Left$(CommandLine$, Pos - 1)
  332.     CommandLine$ = Trim$(CommandLine$)
  333.     Arr$(0) = CommandLine$
  334.     Start = 1
  335.     Pos = InStr(Start, CommandLine$, " ")
  336.     Do While Pos > 0
  337.         ReDim Preserve Arr(UBound(Arr) + 1)
  338.         NextString = Mid$(CommandLine$, Start, Pos - Start)
  339.         If Left$(NextString, 1) = "@" Then
  340.             Arr(UBound(Arr)) = Mid$(CommandLine$, Start + 1, Len(CommandLine) + 1 - Start)
  341.             Exit Function
  342.         Else
  343.         Start = Pos + 1
  344.         Arr(UBound(Arr)) = NextString
  345.         Pos = InStr(Start, CommandLine$, " ")
  346.         End If
  347.     Loop
  348.     ReDim Preserve Arr(UBound(Arr) + 1)
  349.     Arr(UBound(Arr)) = Mid$(CommandLine$, Start, Len(CommandLine$) - Start + 1)
  350. End Function
  351.  
  352. Function LineUndoBreak (ByVal CommandLine$, Arr$())
  353.     Dim Start As Integer, Pos As Integer, NextString As String
  354.     LF$ = Chr$(13) & Chr$(10)
  355.     ReDim Arr$(0)
  356.     Arr$(0) = CommandLine$
  357.     Start = 1
  358.     Pos = InStr(Start, CommandLine$, LF$)
  359.     Do While Pos > 0
  360.         ReDim Preserve Arr(UBound(Arr) + 1)
  361.         Arr(UBound(Arr)) = Mid$(CommandLine$, Start, Pos - Start)
  362.         Start = Pos + 2
  363.         Pos = InStr(Start, CommandLine$, LF$)
  364.     Loop
  365.     ReDim Preserve Arr(UBound(Arr) + 1)
  366.     Arr(UBound(Arr)) = Mid$(CommandLine$, Start, Len(CommandLine$) - Start + 2)
  367. End Function
  368.  
  369. Function SetOption (OptionString$, OptionValue$, IsTest)
  370.     SetOption = 0
  371.     Select Case UCase(OptionString)
  372.     Case "COMMENT":
  373.         If Len(OptionValue) > 0 Then
  374.             If Not IsTest Then Comment = Left$(OptionValue, 1)
  375.         Else
  376.             SetOption = -5
  377.         End If
  378.     Case "MSGCAPTION": MsgCaption = OptionValue
  379.     Case "OUTPUTCAPTION":
  380.         If Not IsOutPutOpen Then
  381.             SetOption = -7
  382.         Else If Not IsTest Then frmOutput.Caption = OptionValue
  383.         End If
  384.     Case "OUTPUTX"
  385.         If Not IsOutPutOpen Then
  386.             SetOption = -1
  387.         Else
  388.             Select Case Val(OptionValue$)
  389.             Case -1: If Not IsTest Then frmOutput.Left = (Screen.Width - frmOutput.Width) / 2
  390.             Case Is > 0: If Not IsTest Then frmOutput.Left = Val(OptionValue)
  391.             Case Else: SetOption = -9
  392.             End Select
  393.         End If
  394.     Case "OUTPUTY"
  395.         If Not IsOutPutOpen Then
  396.             SetOption = -1
  397.         Else
  398.             Select Case Val(OptionValue$)
  399.             Case -1: If Not IsTest Then frmOutput.Top = (Screen.Height - frmOutput.Height) / 2
  400.             Case Is > 0: If Not IsTest Then frmOutput.Top = Val(OptionValue)
  401.             Case Else: SetOption = -9
  402.             End Select
  403.         End If
  404.     Case Else
  405.         ErrorAdd = OptionString
  406.         SetOption = -4
  407.     End Select
  408. End Function
  409.  
  410. Sub WinCmdInit ()
  411.     Comment = ";"
  412.     MsgCaption = App.Title
  413.     If IsOutPutOpen Then Unload frmOutput
  414.     IsOutPutOpen = False
  415. End Sub
  416.  
  417.