Category : Windows 3.X Files
Archive   : CLIPS.ZIP
Filename : MCLIP.BAS

 
Output of file : MCLIP.BAS contained in archive : CLIPS.ZIP
DefInt A-Z
Option Explicit
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' CLPWATCH.DLL declaration
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Declare Function RegClipViewer Lib "clpwatch.dll" (ByVal wHand%, ByVal OnOff%) As Long
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' global State variables and flags
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Global State%
Global OldState%
Global Const sOn = 1
Global Const sOff = 2
Global Const sCombine = 3
Global IgnoreChange%
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' Other globals
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Global CRLF$ 'Carriage Return
Global FileDirty% 'True if changes not yet saved
Global Beeper% 'Beep after adding new item
Global Title() As String 'Titles array
Global Clip() As Variant 'Text array
Global ClipCount% 'Array elements counter
Global CombineIndex% 'Item being combined
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' fileName holders
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Global cFile$
Global tFile$
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' API function declaration
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Declare Function GetActiveWindow Lib "User" () As Integer

'WinHelp declarations
Declare Function WinHelp Lib "User" (ByVal hWnd As Integer, ByVal lpHelpFile As String, ByVal wCommand As Integer, ByVal lpdwData$) As Integer
Global Const HELP_PARTIALKEY = &H105 ' Display topic found in keyword list
Global Const HELP_CONTEXT = &H1 ' Display topic in ulTopic
Global Const HELP_CONTENTS = &H3 ' Display Help for a particular topic

'clipboard owner test declares
Declare Function GetClipboardOwner Lib "User" () As Integer
Declare Function IsWindow Lib "User" (ByVal hWnd As Integer) As Integer

Function CheckDirty () As Integer
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' if FileDirty% flag set, check if user wants to abandon
' changes. if user says no, return True, otherwise false
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
If FileDirty% = True Then
Dim C%
C% = MsgBox("Abandon changes to this file?", 49, "Clips")
If C% <> 1 Then CheckDirty = True: Exit Function
End If
CheckDirty = False
End Function

Function CleanString (Test$) As String
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' used to build title from first 60 chars of new clip
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Dim I%
Test$ = Trim(Test$)

' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' replace commas--to fix bug in 2.1 saving/loading files
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
For I% = 1 To Len(Test$)
If Mid$(Test$, I%, 1) = "," Then
Mid$(Test$, I%, 1) = " "
End If
Next I%


' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' first strip off leading control chars
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Do While Len(Test$) > 2
If Asc(Left$(Test$, 1)) < 33 Then
Test$ = Mid$(Test$, 2)
Else
Exit Do
End If
Loop
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' now chop at 1st return
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I% = InStr(Test$, CRLF$)
If I% Then Test$ = Left$(Test$, I% - 1)
CleanString = Test$
End Function

Sub CombineAll ()
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' combine all clips into a single clip
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Dim X%, Original$, temp$
X% = MsgBox("Combine all entries into a single Clip?", 52, "Clips")
If X% <> 6 Then Exit Sub
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' select first clip
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MClipForm.Titles.ListIndex = 0
Original$ = MClipForm.ClipText
On Error GoTo CAMemError
IgnoreChange% = True
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' assign ClipText.Text to temp$
temp$ = MClipForm.ClipText
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' loop through Clip()
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
For X% = 1 To UBound(Clip, 1)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' first strip off trailing CRLF$'s
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Do While Right$(temp$, 2) = CRLF$
temp$ = Left$(temp$, Len(temp$) - 2)
Loop
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' now add new string, separated by a CRLF$
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
temp$ = temp$ + CRLF$ + Clip(X%)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' error if string too long to fit into ClipText
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
If Len(temp$) > 32567 Then Err = 14
Next
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' assign temp$ to ClipText
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MClipForm.ClipText = temp$
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' reset arrays
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ReDim Title(0)
ReDim Clip(0)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' reset zero elements & title of combined clip
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Clip(0) = MClipForm.ClipText
MClipForm.Titles.List(0) = "Combined " + Str$(MClipForm.Titles.ListCount) + " clips"
Title(0) = MClipForm.Titles.List(0)
FileDirty% = True
IgnoreChange% = False
On Error GoTo 0
ClipCount% = 1
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' remove all but first item from Titles list box
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
For X% = MClipForm.Titles.ListCount - 1 To 1 Step -1
MClipForm.Titles.RemoveItem X%
Next
ToggleMenu True

CABackDoor:
Exit Sub

CAMemError:
MClipForm.ClipText = Original$
Clip(0) = Original$
IgnoreChange% = False
DispErrorMsg "Too much data to combine into a single Clip!"
Resume CABackDoor
End Sub

Sub DeleteClip ()
Dim X, Index
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' exit if Titles list box is empty
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *'------------------------------------
If MClipForm.Titles.ListCount = 0 Then Exit Sub
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' confirm user wants to delete
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
X = MsgBox("Are you sure that you want to delete the selected clip?", 68, "Clips")
If X <> 6 Then Exit Sub
MClipForm.Titles.Enabled = False
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' identify record to delete
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Index = MClipForm.Titles.ListIndex
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' delete it
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MClipForm.Titles.RemoveItem Index
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' renumber array elements
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
For X = Index To ClipCount% - 2
Title(X) = Title(X + 1)
Clip(X) = Clip(X + 1)
Next
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' clear last element
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Clip(X) = ""
Title(X) = ""
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' decrement record count
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ClipCount% = ClipCount% - 1
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' redim arrays
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ReDim Preserve Title(ClipCount%)
ReDim Preserve Clip(ClipCount%)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' toggle menus based on Titles list count
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Select Case ClipCount%
Case Is = 0
ToggleMenu False
FileDirty% = True
IgnoreChange% = True
MClipForm.ClipText = ""
IgnoreChange% = False
Case Else
FileDirty% = True
MClipForm.Titles.ListIndex = 0
ToggleMenu True
End Select
MClipForm.Titles.Enabled = True
End Sub

Sub DispErrorMsg (M$)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' utility routine to display error message
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
On Error GoTo 0
Dim X%
MClipForm.WindowState = 0
X% = MsgBox(M$, 48, "Clips")
End Sub

Sub FrameControl (F As Form, C As Control)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' centers control on form and
' draws 3D frame around control
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Dim Cl%, ct%, ch%, cw%
Const White = &HFFFFFF
Const DarkGrey = &H808080
Const hOffSet% = 90
Const vOffSet% = 45
Const dw% = 1
F.DrawWidth = dw%
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' center control on form
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Cl% = (F.Width / 2) - (C.Width / 2)
C.Left = Cl%
ct% = C.Top
cw% = C.Width
ch% = C.Height
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' clear form
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
F.Cls
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' draw box
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
F.ForeColor = DarkGrey
F.Line (Cl% - hOffSet%, ct% - vOffSet%)-(Cl% - hOffSet%, ct% + ch% + vOffSet%)
F.ForeColor = White
F.Line -(Cl% + cw% + hOffSet%, ct% + ch% + vOffSet%)
F.Line -(Cl% + cw% + hOffSet%, ct% - vOffSet%)
F.ForeColor = DarkGrey
F.Line -(Cl% - hOffSet%, ct% - vOffSet%)
End Sub

Sub GetClip ()
Dim B$, T$, ec%, X%, Y%, Z&, Owner%
On Error GoTo MemError
'new stuff to prevent capturing data when app releases clipboard on shutdown
For Y% = 1 To 10
X% = DoEvents()
Next
Owner% = GetClipboardOwner()
If (Owner% = 0) Or (IsWindow(Owner%) = 0) Then Exit Sub
'end new stuff
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' grab clipboard text
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
B$ = Clipboard.GetText()
If LTrim(B$) = "" Then Exit Sub
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' generate title for new clip
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
T$ = Left$(B$, 60)
On Error GoTo 0
T$ = CleanString(T$)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' increment record counter,
' redim arrays
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ClipCount% = ClipCount% + 1
ReDim Preserve Title(ClipCount%)
ReDim Preserve Clip(ClipCount%)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' add title to list box, then select it
MClipForm.Titles.AddItem T$
MClipForm.Titles.ListIndex = MClipForm.Titles.NewIndex
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' add title to Title() array
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Title(ClipCount% - 1) = T$
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' add clipboard text to ClipText
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MClipForm.ClipText = B$
ToggleMenu True
If Beeper% Then Beep

BackDoor1:
Exit Sub
MemError:
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' emit extended beep on memory error
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
For X% = 1 To 8
Beep
Next
Resume BackDoor1
End Sub

Sub LabelIt ()
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' update status label based on value of State%,
' then redraw 3d box around label
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MClipForm.lblStatus.Visible = False
If State% = sOn Then
MClipForm.lblStatus = "State is On"
Else
MClipForm.lblStatus = "State is Off"
End If
FrameControl MClipForm, MClipForm.lblStatus
MClipForm.lblStatus.Visible = True
End Sub

Sub SetCombineMode (CombineModeSwitch%)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' activate/deactivate Combine Mode
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Select Case CombineModeSwitch%
Case Is = True ' activate
IgnoreChange% = True
State% = sCombine%
MClipForm.lblStatus.Visible = False
MClipForm.lblStatus = "State is Combine"
FrameControl MClipForm, MClipForm.lblStatus
MClipForm.lblStatus.Visible = True
CombineIndex% = MClipForm.Titles.ListIndex
MClipForm.ClipText.SetFocus
Case Is = False ' deactivate
MClipForm.Titles.ListIndex = CombineIndex%
IgnoreChange% = False
End Select
End Sub

Sub ToggleMenu (E%)
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' enable/disable all Edit Menu items except Combine All
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Dim X%
For X% = 0 To 7
If X% <> 5 Then MClipForm.eItem(X%).Enabled = E%
Next
MClipForm.fItem(3).Enabled = E%
MClipForm.fItem(4).Enabled = E%
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' enable/disable 2 Combine items based on Titles list count
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MClipForm.sItem(3).Enabled = ClipCount% > 1
MClipForm.eItem(9).Enabled = ClipCount% > 1
End Sub

Sub ToggleSettings (CheckMe%)
Dim X%
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' move check mark to specified settings menu item
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
For X% = 1 To 3
If X% = CheckMe% Then
MClipForm.sItem(X%).Checked = True
Else
MClipForm.sItem(X%).Checked = False
End If
Next
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
' disable File and Edit menus if Combine Mode selected
' * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MClipForm.fMenu.Enabled = CheckMe% < 3
MClipForm.eMenu.Enabled = CheckMe% < 3
End Sub



  3 Responses to “Category : Windows 3.X Files
Archive   : CLIPS.ZIP
Filename : MCLIP.BAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/