Skip to content

Instantly share code, notes, and snippets.

View CarlTBarnes's full-sized avatar

Carl T. Barnes CarlTBarnes

View GitHub Profile
@CarlTBarnes
CarlTBarnes / ParseTokenStringIntoQueue.clw
Created July 5, 2020 22:39
Parse String with Delimited with Tokens into a Queue
MAP
ParseTokenStringIntoQueue(CONST *STRING pString,STRING pToken,*QUEUE OutQueue,BYTE pBlanksOk=0),LONG,PROC !Return Count
END
ParseTokenStringIntoQueue PROCEDURE(CONST *STRING pString,STRING pToken,*QUEUE OutQueue,BYTE pBlanksOk=0)!,LONG,PROC !Return Count
SLen LONG,AUTO !pString Length
Ndx LONG,AUTO
TokenVal BYTE,AUTO !When hunting for chars I like VAL compares
BegPos LONG(1) !BegPos = 1 required to work right
EndPos LONG,AUTO !EndPos = 0 required to work right
@CarlTBarnes
CarlTBarnes / SmashSpaces.clw
Created July 16, 2020 15:38
Smash (remove) spaces from a STRING
MAP
SmashSpaces PROCEDURE(*string InOutText, BYTE Leave1Space=0)
MODULE('RTL')
LenFastClip PROCEDURE(CONST *STRING Text2Measure),LONG,NAME('Cla$FASTCLIP'),DLL(dll_mode)
!RTL has had this since at least C55. It is much faster because it passes *STRING and is CLIP and LEN in one call
END
END
SmashSpaces PROCEDURE (*string Txt, BYTE Leave1Spc=0)
@CarlTBarnes
CarlTBarnes / Error4Message.clw
Created July 18, 2020 16:14
Format ErrorCode() & Error() etc ... to show in a Message() Stop() Halt(), or format on 1 line for a Log file or debug/tracing
MAP
Err4Msg PROCEDURE(Byte NoCRLF=0),STRING !Fromat ErrorCode() & Error() & FileError... for Message() Stop() Halt() or Log file (NoCRLF)
END
!-----------------------------------------
Err4Msg PROCEDURE(Byte NoCRLF=0)!,STRING
!Example: IF ERRORCODE() THEN STOP('Failed ADD(xxx)' & Err4Msg()).
!Note: Return starts '<13,10><13,10>Error Code:' so no need to put in the Message()
CODE
IF ~ERRORCODE() THEN RETURN ''.
IF ~NoCRLF THEN
@CarlTBarnes
CarlTBarnes / LenFastClip.clw
Created August 2, 2020 17:52
LenFastClip replaces LEN(CLIP()) in ClaRUN.DLL as NAME('Cla$FASTCLIP')
MODULE('RTL')
LenFastClip PROCEDURE(CONST *STRING Text2Measure),LONG,NAME('Cla$FASTCLIP'),DLL(dll_mode)
END
MODULE('RTL')
LenFastClip(CONST *STRING Text2Measure),LONG,NAME('Cla$FASTCLIP'),DLL(dll_mode)
END
!Use LenFastClip() or FastClip() instead of LEN(CLIP( string ))
!This has been around since at least C55. It runs much faster by passing *STRING.
@CarlTBarnes
CarlTBarnes / UnsignCSharp.cs
Last active August 5, 2020 15:24
C++ remove Codesigning Certificates #1 - also OptionalHeader DataDirectory IMAGE_DIRECTORY_ENTRY_SECURITY
// from https://github.com/WhitakerDaniel/UnsignTool
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// For information on ImageRemoveCertificate, see: https://docs.microsoft.com/en-us/windows/desktop/api/imagehlp/nf-imagehlp-imageremovecertificate
@CarlTBarnes
CarlTBarnes / Clarion110.red
Last active August 8, 2020 21:11
Clarion 11 RED file to Copy Debug ClaRUN.DLL to Project Folder during Debug builds
-- #################### Clarion110.RED #################### --
-- Project Redirection for Clarion 11.0 to Copy the Clarion10\Bin\Debug DLLs only for Debug builds
-- This RED has a [Copy] *.dll = %BIN%\debug
{include clarion_DebugDllCopy.red}
-- this includes the normal RED --
{include %REDDIR%\%REDNAME%}
-- review: https://clarionhub.com/t/how-to-improve-the-call-stack-when-your-program-gpfs/188
@CarlTBarnes
CarlTBarnes / Clarion_Hub_Interesting.txt
Created August 8, 2020 21:20
Clarion Hub links of interest
Tips: https://clarionhub.com/c/ide/tips/19
IDE: https://clarionhub.com/c/ide/9
Msbuild example for Clarion
https://clarionhub.com/t/msbuild-example-for-clarion/274/10
FIXED statement in EXP for 4% smaller EXE without .reloc table
https://clarionhub.com/t/fixed-statement-in-exp-for-4-smaller-exe-without-reloc-table/3450/4
How to successfully start the debugger from the command line?
@CarlTBarnes
CarlTBarnes / PopupUnder.clw
Last active September 2, 2020 16:53
Popup() Menu Under or Beside a Control so Menu appears to drop under a Button
!Use the POPUP('xxx', X, Y, 1=Relative) to position a POPUP() right under a Button so it appears to drop down
!The fourth parameter is not documented well. Pass 1 to indicate the X/Y are Relative so can use Clarion GetPosition()
!
!Replace existing Popup() placing the ?Control as the first parameter
!Example: OF ?MenuBtn ; CASE PopupUnder(?,'Copy|Delete')
!---------------------------------------
MAP
PopupBeside(LONG BesideCtrlFEQ, STRING PopMenu),LONG
PopupUnder(LONG UnderCtrlFEQ, STRING PopMenu),LONG
PopupBeside PROCEDURE(LONG BesideCtrlFEQ, STRING PopMenu),LONG
@CarlTBarnes
CarlTBarnes / DEP_Policy_Test.clw
Last active September 16, 2020 12:52
DEP Policy View and Test in Clarion
!DEP Policy Test by Carl Barnes released under the MIT License
!C11.13620 has a new Project DEP setting. This does NOT require 13620
!You do NOT need the new 13620 DEP Project setting to turn on DEP, just call SetProcessDEPPolicy(1)
!You can add this procedure in your application to check DEP status at runtime on the end user machine.
!It probably should be wrapped in a simple CLASS.
!
!FYI - DEP sets the IMAGE_DLL­CHARACTERISTICS_NX_COMPAT bit in the IMAGE_OPTIONAL_HEADER‘s Dll­Characteristics.
!--------------------------------------------------------------------------------------
!Must DEP be turned On in Both EXE and DLL projects? NO. Only the EXE the project.
! It is suggested to turn on DEP in the DLL as an FYI it works with DEP.
@CarlTBarnes
CarlTBarnes / ReportPrintWithDebugLogging.clw
Created September 22, 2020 22:33
ReportPrint() procedure Prints Details while logging to OutputDebugString. Can also add STRING to printed BAND to Identify it.
!Add local ReportPrint()
!Define: DbgString BYTE
!
!Change PRINT(Rpt:Detail) to ReportPrint(?Detail,'Rpt:Detail')
!If desired set DbgString=1 and each Band gets a String Label 'Rpt:Detail'
MAP
ReportPrint PROCEDURE(LONG BandFEQ, STRING BandName)
END
DbgString BYTE