Skip to content

Instantly share code, notes, and snippets.

View CarlTBarnes's full-sized avatar

Carl T. Barnes CarlTBarnes

View GitHub Profile
@CarlTBarnes
CarlTBarnes / Bak_and_Zip_Sample1.bat
Last active January 20, 2021 20:19
Backup Clarion Project BAT files
@REM This will backup the File Extensions listed below for ROBOCOPY to a subfolder
@REM then zip using PowerShell to a file named: ProjName_Date_Time.ZIP
@REM I place this BAT file in the Project folder named: _Bak_and_Zip_ProjBane.bat
@REM This backs up to a sub folder named _Bak_ under the project, some times I place this folder elsewhere
@REM This saves the CLW that allows for doing a code compare
@REM -----------------------------------------------------------------
@echo off
for /f %%I in ('wmic os get localdatetime ^|find "20"') do set dt=%%I
REM dt format is now YYYYMMDDhhmmss...
@CarlTBarnes
CarlTBarnes / ChooseColorAPI.clw
Last active January 20, 2021 23:21
ChooseColor API function instead of Clarion ColorDialog()
!Clarion's ColorDialog() does not have the deatures of the API ChooseColor like saving the 16 custom colors
!From https://www.icetips.com/showarticle.php?articleid=272
!A few changes to Larry's code by Carl:
! Set cc.rgbResult = W{PROP:Color} before call. Should CC_RGBINIT be conditional?
! Check for ChooseColor returning True with IF ccBool THEN .
! Comment UnlockThread.
! Prototype a (LONG cc) so no need for type at Map level. Add DLL(1)
!-----------------------------------------
!Windows API: Saving and restoring custom colors for ColorDialog
@CarlTBarnes
CarlTBarnes / RemoveDirectoryOfFiles.clw
Last active January 14, 2021 15:52
Remove Directory of Files using Directory() and API DeleteFile
RemoveDirectoryFiles(STRING FolderPath,STRING Specs2Purge,LONG ShowWindow=0,<*LONG OutCountRemoved>),LONG,PROC ! Returns Error Cnt
DB(STRING DBString) !OutputDebugString wrapper DebugOutput.clw https://gist.github.com/CarlTBarnes/d3c7a3779b094f0ed48186d04a9b45e6
MODULE('Win32')
DeleteFileA(*cstring lpFileName),BOOL,RAW,PROC,PASCAL,DLL(1)
GetLastError(),LONG,PASCAL,DLL(1)
END
!Specs2Purge can be multiple using semicolon e.g. *.tmp;*.$$$;*.xxx
@CarlTBarnes
CarlTBarnes / ExistsDirectory_or_ExistsFile.clw
Last active October 15, 2020 20:36
ExistsDirectory() or ExistsFile() using GetFileAttributes() instead of Clarion Exists()
! Clarion EXISTS() returns True for File or Directory.
! Sometimes you need to know you have a Directory, or a File
!-----------------------------------------------------------------------------------------------------
MAP
ExistsDirectory PROCEDURE(STRING pDirName),BOOL !True if Directory and Not file
ExistsFile PROCEDURE(STRING pFileName),BOOL !True if File and Not Directory
MODULE('win32.lib')
GetFileAttributes(*CSTRING FileName),LONG,PASCAL,DLL(1),RAW,NAME('GetFileAttributesA') !Returns Attribs
END
@CarlTBarnes
CarlTBarnes / FileAttributes.clw
Last active October 15, 2020 20:32
File Attributes Strip Read Only - GetFileAttributes / SetFileAttributes
MAP
FileStripReadOnly PROCEDURE(string _filename),BOOL !True if Worked
MODULE('win32.lib')
SetFileAttributes(*CSTRING FileName,LONG NewFileAttribs),BOOL,PROC,PASCAL,DLL(1),RAW,NAME('SetFileAttributesA')
GetFileAttributes(*CSTRING FileName),LONG,PASCAL,DLL(1),RAW,NAME('GetFileAttributesA') !Returns Attribs
END
!--------------------------------------------------------
FileStripReadOnly PROCEDURE(string _filename) !,BOOL
Attrs LONG,AUTO
@CarlTBarnes
CarlTBarnes / AbcPreview_RptTest_FontProp111.clw
Last active June 27, 2021 03:28
Report Test Scratch Program
!Report Test Framework by Carl Barnes from https://gist.github.com/CarlTBarnes
!Using ABC Report Previewer instead of my simple previewer
!
!This tested Report${PROP:FontXxx} broken by 11.1
!
!-----------------------------------------------------------------------------
!Try various REPORT specs and PROP Settings quicky in this little Win32 project that has its own simple Previewer.
!If you want to report a bug this can be used to create a small example
!
!1. Create a new Win32 Project and paste this code.
@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
@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 / 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 / CBDropListLEFT.clw
Last active February 8, 2022 16:48
DROP List is Left Aligned by Class for Combo/List Control. Normally RTL aligns Right. CBDropLeftClass
MEMBER()
!--------------------------
! CBDropLeftClass - by Carl Barnes - Release under the MIT License
!--------------------------
INCLUDE('EQUATES.CLW')
INCLUDE('CBDropListLEFT.INC'),ONCE
CBRect GROUP,TYPE
Left SIGNED
Top SIGNED