Inverting Assignment Operations

I found that frequently (particularly when working with dialogs) I was doing a bunch of assignment operations, performing some other operation, then doing the reverse of those same assignment operations. The following is a typical example:
	ClientSheet.m_lClientNo     = m_ClientNo;
	ClientSheet.m_szCompanyName = m_CompanyName;
	ClientSheet.m_szEmail       = m_Email;
	ClientSheet.m_szFirstName   = m_FirstName;
	ClientSheet.m_szLastName    = m_LastName;
	ClientSheet.m_szTitle       = m_Title;

	if (ClientSheet.DoModal()==IDOK) {
		m_ClientNo    = ClientSheet.m_lClientNo;
		m_CompanyName = ClientSheet.m_szCompanyName;
		m_Email       = ClientSheet.m_szEmail;
		m_FirstName   = ClientSheet.m_szFirstName;
		m_LastName    = ClientSheet.m_szLastName;
		m_Title       = ClientSheet.m_szTitle;
	}

Instead of writing the same code twice, I developed this macro to apply to the code. It will act on the current line, or more then one selected lines. If there is no assignment operator in the line, then that line is ignored. The macro treats everything after the first equal sign as the second operand, so if it's applied to something like a=b=c, you'll get b=c=a.

	Sub Invert()
	'DESCRIPTION: Invert an assignment operation
		Dim win
		set win = ActiveWindow
		if win.type <> "Text" Then
			MsgBox "You can only run this macro when a text editor window is active."
		else
			StartLine = ActiveDocument.Selection.TopLine
			EndLine = ActiveDocument.Selection.BottomLine
			If EndLine < StartLine Then
				Temp = StartLine
				StartLine = EndLine
				EndLine = Temp
			End If

			For i = StartLine To EndLine
				TmpBlock = ""

				ActiveDocument.Selection.GoToLine i
				ActiveDocument.Selection.StartOfLine dsFirstText
				ActiveDocument.Selection.EndOfLine dsExtend
				CmtBlock = ActiveDocument.Selection

				Trim(CmtBlock)

				equal = Instr(CmtBlock,"=")
				semi = Instr(CmtBlock, ";")
				If equal <> 0 Then 
					TmpBlock = Left(CmtBlock, equal-1)
					If semi <> 0 then
						CmtBlock = Mid(CmtBlock, equal + 1, semi-equal-1)
					else
						CmtBlock = Right(CmtBlock, Len(CmtBlock) - equal)
					End If

					CmtBlock = Trim(CmtBlock)
					TmpBlock = Trim(TmpBlock)

					if semi <> 0 then
						CmtBlock = CmtBlock + " = " + TmpBlock + ";"
					else
						CmtBlock = CmtBlock + " = " + TmpBlock
					End If
				End If
				ActiveDocument.Selection = CmtBlock
			Next
		End If
	End Sub

Last updated: 2 April 1998



Comments

  • Very nice macro

    Posted by Legacy on 06/08/1999 12:00am

    Originally posted by: Player

    Thanks for a great macro. A real time saver.

    Reply
  • should be using classes

    Posted by Legacy on 10/19/1998 12:00am

    Originally posted by: Mike

    Your macro looks pretty cool... but one blatant thing comes
    
    to mind when looking at it...

    instead of this:
    ClientSheet.m_lClientNo = m_ClientNo;
    ClientSheet.m_szCompanyName = m_CompanyName;
    ClientSheet.m_szEmail = m_Email;
    ClientSheet.m_szFirstName = m_FirstName;
    ClientSheet.m_szLastName = m_LastName;
    ClientSheet.m_szTitle = m_Title;


    why not this:

    class X
    {
    int m_ClientNo;
    CString m_CompanyName;
    CString m_Email;
    CString m_FirstName;
    CString m_LastName;
    CString m_Title;
    }

    class ClientSheet
    {
    X worksaver;
    }

    now in your dialog class:
    class somedlg
    {
    X dlgData;
    }


    now when you use the dlg class...
    somedlg.dlgData = ClientSheet.worksaver;
    if( dlg.DoModal == IDOK )
    {
    ClientSheet.worksaver = dlgData;
    }

    AHHHH much better.... I can breath again....

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Organizations are increasingly gravitating toward mobile-first application development as they assess the need to revamp their application portfolios to support touch computing and mobility. Consumerization has brought higher expectations for application usability along with the mobile devices themselves. Enterprises are increasingly shifting their new application acquisitions and development efforts toward mobile platforms. With this backdrop, it is natural to expect application platform vendors to invest in …

  • Thanks to wide spread cloud hosting and innovations small businesses can meet and exceed the legacy systems of goliath corporations. Explore the freedom to work how you want, with a phone system that will adapt to your evolving needs and actually save you lots of expense—read Get an Enterprise Phone System without High Cost and Complexity. The article clearly illustrates: The only hardware you'll need is phone equipment for advanced voice and fax. How to join all your employees, mobile devices, …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date