From 3fbc55c01c136613243920a4e80255baece53f8c Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Mon, 2 Feb 2026 13:06:45 +0100 Subject: [PATCH] SAS Packages Framework, version 20260202 SAS Packages Framework, version 20260202 Changes: -If the `hash=` parameter is not provided the %verifyPackage() macro prints SHA256, SHA1, and MD5 hashes to the log now. - Small fix in the %unbundlePackage() macro. - Bunch general code simplifications. - Documentation updated. --- README.md | 2 +- ...(a how to)- Paper 4725-2020 - extended.pdf | Bin 354053 -> 354161 bytes SPF/Macros/bundlePackages.sas | 4 +- SPF/Macros/extendpackagesfileref.sas | 4 +- SPF/Macros/generatepackage.sas | 18 +- SPF/Macros/helppackage.sas | 14 +- SPF/Macros/installpackage.sas | 6 +- SPF/Macros/ispackagesfilerefok.sas | 4 +- SPF/Macros/listpackages.sas | 8 +- SPF/Macros/loadpackage.sas | 22 +- SPF/Macros/loadpackageaddcnt.sas | 18 +- SPF/Macros/loadpackages.sas | 4 +- SPF/Macros/previewpackage.sas | 14 +- SPF/Macros/relocatepackage.sas | 4 +- SPF/Macros/saspackagesframeworknotes.sas | 4 +- SPF/Macros/spfint_gnpckg_arch.sas | 2 +- SPF/Macros/spfint_gnpckg_markdown.sas | 4 +- SPF/Macros/spfint_gnpckg_tests.sas | 10 +- SPF/Macros/splitcodeforpackage.sas | 6 +- SPF/Macros/unbundlePackages.sas | 16 +- SPF/Macros/unloadpackage.sas | 14 +- SPF/Macros/verifypackage.sas | 95 ++++-- SPF/SPFinit.md | 44 +-- SPF/SPFinit.sas | 273 +++++++++++------- 24 files changed, 345 insertions(+), 245 deletions(-) diff --git a/README.md b/README.md index ef9ad5f..a12b126 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Don't forget to give the repository a **STAR** and become [stargazer](https://gi ### Current version: -**The latest version** of the **SAS Packages Framework** is **`20260126`**. +**The latest version** of the **SAS Packages Framework** is **`20260202`**. --- diff --git a/SPF/Documentation/SAS(r) packages - the way to share (a how to)- Paper 4725-2020 - extended.pdf b/SPF/Documentation/SAS(r) packages - the way to share (a how to)- Paper 4725-2020 - extended.pdf index 002f75cca3dc93710fb3421739aff5c777b422f4..204d9fdd1eead1978da6d719ae23d1d9c710c5b9 100644 GIT binary patch delta 86990 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ℜ{@vPmJT|@6VShCY}V{UtjSv=Lg?>IDFLb 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 O8d6jjE-34$Q2jr`_{ZG< delta 86898 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�`_ibo0UlGT$U)a^$Z7>IQ)S6SO^p)3eBV_ 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 s>>%'"&packageName."'META(P)<<<;'/ @n '%put >>>%'"&packageName."'META(S)<<<;'/; + /* verify */ + put @n '%verifyPackage'"(&packageName.,"; + put @n " path=&buildLocation.)" /; + /* help */ put @n '%helpPackage'"(&packageName.,"; put @n " path=&buildLocation.)" /; @@ -317,6 +321,10 @@ data _null_; '%put >>req packages>%'"&packageName."'META(P)<<<;'/ '%put >>req SAS >%'"&packageName."'META(S)<<<;'/; + /* verify */ + put '%verifyPackage'"(&packageName.,"; + put " path=&buildLocation.)" /; + /* help */ put '%helpPackage'"(&packageName.," / " path=&buildLocation.)" /; diff --git a/SPF/Macros/splitcodeforpackage.sas b/SPF/Macros/splitcodeforpackage.sas index 2258ad3..db8728c 100644 --- a/SPF/Macros/splitcodeforpackage.sas +++ b/SPF/Macros/splitcodeforpackage.sas @@ -8,7 +8,7 @@ ,nobs=0 /* technical parameter */ ) /*** HELP END ***/ -/ des = 'Utility macro to split "one big" code into multiple files for a SAS package, version 20260126. Run %splitCodeForPackage() for help info.' +/ des = 'Utility macro to split "one big" code into multiple files for a SAS package, version 20260202. Run %splitCodeForPackage() for help info.' ; %if (%superq(codeFile) = ) OR (%qupcase(&codeFile.) = HELP) %then %do; @@ -24,7 +24,7 @@ %put #-------------------------------------------------------------------------------#; %put # #; %put # Utility macro to *split* single file with SAS package code into multiple #; - %put # files with separate snippets, version `20260126` #; + %put # files with separate snippets, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -400,7 +400,7 @@ options nomprint nosymbolgen nomlogic notes source ls=MAX ps=MAX msglevel=N ; */ if firstLine[j] then do; - put '/* File generated with help of SAS Packages Framework, version 20260126. */'; + put '/* File generated with help of SAS Packages Framework, version 20260202. */'; firstLine[j]=0; end; put _infile_; diff --git a/SPF/Macros/unbundlePackages.sas b/SPF/Macros/unbundlePackages.sas index 98057a4..97d2116 100644 --- a/SPF/Macros/unbundlePackages.sas +++ b/SPF/Macros/unbundlePackages.sas @@ -8,7 +8,7 @@ ,ods= /* data set for report file */ ,verify=0 )/ -des='Macro to extract a bundle of SAS packages, version 20260126. Run %unbundlePackages(HELP) for help info.' +des='Macro to extract a bundle of SAS packages, version 20260202. Run %unbundlePackages(HELP) for help info.' secure minoperator ; @@ -26,7 +26,7 @@ minoperator %put ### This is short help information for the `unbundlePackages` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *extract* SAS packages from a bundle, version `20260126` #; + %put # Macro to *extract* SAS packages from a bundle, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -128,11 +128,10 @@ minoperator %let datetime = %sysfunc(datetime()); %let reportFile = WORK.tmpbundlefile%sysfunc(int(&datetime.), b8601dt15.)_; -data _null_ ; +data _null_; datetime=symgetn('datetime'); length packagesList $ 32767 bundleName $ 128; - bundleName = compress(symget('bundleName'),"_.","KAD"); /* bundle name is letters, digits, and underscore, up to 128 symbols */ if bundleName NE symget('bundleName') then /* warn about illegal characters */ @@ -140,12 +139,12 @@ if bundleName NE symget('bundleName') then /* warn about illegal characters */ put "ERROR: Bundle name contains illegal characters. Exiting"; stop; end; - bundleName=lowcase(bundleName); +lbn = length(bundleName); /* to cover lengths < 7 & 11 */ /* if there is ".bundle.zip" extension added, remove it */ -if substr(strip(reverse(bundleName)),1,11) = 'piz.eldnub.' then bundleName=scan(bundleName,-3,"."); +if substr(strip(reverse(bundleName)),1,min(11,lbn)) = 'piz.eldnub.' then bundleName=scan(bundleName,-3,"."); else /* if there is ".bundle" extension added, remove it */ -if substr(strip(reverse(bundleName)),1,7) = 'eldnub.' then bundleName=scan(bundleName,-2,"."); +if substr(strip(reverse(bundleName)),1,min(7,lbn)) = 'eldnub.' then bundleName=scan(bundleName,-2,"."); put / "INFO: Bundle name is: " bundleName / ; @@ -153,7 +152,6 @@ length packagesPath $ 32767 packagesRef $ 8; packagesPath = dequote(symget('packagesPath')); packagesRef = upcase(strip(symget('packagesRef'))); - /* organize target path (location for packages) */ if " "=packagesPath then do; @@ -281,7 +279,6 @@ label package="Package name" hash="SHA256 for the Package"; /*--------------------------------------------------*/ - if 0=Q.NUM_ITEMS then /* ... if empty then exit */ do; put "WARNING: No packages to unbundle. Exiting!"; @@ -320,7 +317,6 @@ put / "INFO: The " bundleName "bundle extraction ended."; rc = doSubL(code2); put / "INFO: The " bundleName "bundle verification ended."; %end; - put " "; rc=sleep(1,1); diff --git a/SPF/Macros/unloadpackage.sas b/SPF/Macros/unloadpackage.sas index 7b73d35..5d614f2 100644 --- a/SPF/Macros/unloadpackage.sas +++ b/SPF/Macros/unloadpackage.sas @@ -20,7 +20,7 @@ */ )/secure /*** HELP END ***/ -des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for help info.' +des = 'Macro to unload SAS package, version 20260202. Run %unloadPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -35,7 +35,7 @@ des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for h %put ### This is short help information for the `unloadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to unload SAS packages, version `20260126` #; + %put # Macro to unload SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -115,18 +115,20 @@ des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for h %local _PackageFileref_; data _null_; - call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "P" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".&zip.")); + exists + fileexist(catx("/", p, cats(packageName,".&zip."))); if exists then leave; end; if exists then call symputx("path", p, "L"); diff --git a/SPF/Macros/verifypackage.sas b/SPF/Macros/verifypackage.sas index c643734..1df1aa3 100644 --- a/SPF/Macros/verifypackage.sas +++ b/SPF/Macros/verifypackage.sas @@ -8,12 +8,12 @@ , path = %sysfunc(pathname(packages)) /* location of a package, by default it looks for location of "packages" fileref */ -, hash = /* The SHA256 hash digest for +, hash = F* /* The SHA256 hash digest for the package generated by hashing_file() function, SAS 9.4M6 */ )/secure /*** HELP END ***/ -des = 'Macro to verify SAS package with the hash digest, version 20260126. Run %verifyPackage() for help info.' +des = 'Macro to verify SAS package with the hash digest, version 20260202. Run %verifyPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -28,7 +28,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % %put ### This is short help information for the `verifyPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to verify SAS package with it hash digest, version `20260126` #; + %put # Macro to verify SAS package with it hash digest, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -48,7 +48,9 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % %put # If empty displays this help information. #; %put # #; %put # - `hash=` A value of the package `SHA256` hash. #; - %put # Provided by the user. #; + %put # Provided by the user. When the value is not provided #; + %put # then macro calculates `SHA256`, `SHA1`, and `MD5` #; + %put # digests and display then in the log. #; %put # #; %put # - `path=` Location of a package. By default it looks for #; %put # location of the "packages" fileref, i.e. #; @@ -76,7 +78,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % %put ; %put %nrstr( %%installPackage(SQLinDS) %%* install the package from the Internet; ); %put %nrstr( %%verifyPackage%(SQLinDS, %%* verify the package with provided hash; ); - %put %nrstr( hash=HDA478ANJ3HKHRY327FGE88HF89VH89HFFFV73GCV98RF390VB4%) ); + %put %nrstr( hash=HDA478ANJ3HKHRY327FGE88HF89VH89HFFFV73GCV98RF390VB4%) ); %put ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; %put #################################################################################; %put ; @@ -97,19 +99,21 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % options NOnotes NOsource ls=MAX ps=MAX NOfullstimer NOstimer msglevel=N NOmautocomploc; %local _PackageFileref_ checkExist; - data _null_; - call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + data _null_; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "P" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".zip")); /* check on zip files only! */ + exists + fileexist(catx("/", p, cats(packageName,".zip"))); /* check on zip files only! */ if exists then leave; end; if exists then call symputx("path", p, "L"); @@ -142,31 +146,60 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % filename &_PackageFileref_. list; data _null_; - length providedHash $ 128; + length providedHash $ 128 packageName $ 32; providedHash = strip(symget("hash")); - select; - when ( 'F*' = upcase(substr(providedHash,1,2)) ) /* F = file digest */ - SHA256 = 'F*' !! HASHING_FILE("SHA256", pathname("&_PackageFileref_.",'F'), 0); - when ( 'C*' = upcase(substr(providedHash,1,2)) ) /* C = content digest */ - SHA256 = 'C*' !! HASHING_FILE("SHA256", "&_PackageFileref_.", 4); - otherwise /* legacy approach, without C or F, digest value equivalent to C */ - SHA256 = HASHING_FILE("SHA256", "&_PackageFileref_.", 4); - end; - put "Provided Hash: " providedHash; - put "SHA256 digest: " SHA256; - put " "; - - if upcase(SHA256) = upcase(providedHash) then - do; - put "NOTE: Package verification SUCCESSFUL."; - put "NOTE- Generated hash is EQUAL to the provided one."; + packageName = strip(symget("packageName")); + + emptyHash = (providedHash = " " OR providedHash in ("F*" "f*" "C*" "c*")); + + put 82*"-" / @2 packageName / 82*"-" /; + + if NOT emptyHash then put "Provided Hash: " providedHash; + + length method $ 8 digest $ 128; + /* calculate SHA256 */ + method="SHA256"; + LINK CalcualteHashDigest; /* go to Link 1 */ + + if NOT emptyHash then + do; /* step for veryfication */ + if upcase(digest) = upcase(providedHash) then + do; + put "NOTE: Verification SUCCESSFUL." + / "NOTE- Generated hash is EQUAL to the provided one." / ; + end; + else + do; + pos = 0; + do i = 1 to max(lengthn(digest),lengthn(providedHash)) while(pos=0); + if char(digest,i) NE char(providedHash,i) then pos = i; + end; + put "ERROR- " @(pos+15)"^"/"ERROR- " @(pos+15)"| diff @" pos/"ERROR- "; + put "ERROR: Verification FAILED!!" + / "ERROR- Generated hash is DIFFERENT than the provided one." + / "ERROR- Check if the ZIP is genuine." / ; + end; end; else - do; - put "ERROR: Package verification FAILED!!"; - put "ERROR- Generated hash is DIFFERENT than the provided one."; - put "ERROR- Confirm if the package is genuine."; + do method = "SHA1", "MD5"; /* step for digest display, calcualte also SHA1 and MD5 */ + LINK CalcualteHashDigest; /* go to Link 1 */ end; + put 82*"-" /; + stop; + return; + CalcualteHashDigest: /* Link 1 */ + + select; + when ( 'F*' = upcase(substr(providedHash,1,2)) ) /* F = file digest */ + digest = 'F*' !! HASHING_FILE(method, pathname("&_PackageFileref_.",'F'), 0); + when ( 'C*' = upcase(substr(providedHash,1,2)) ) /* C = content digest */ + digest = 'C*' !! HASHING_FILE(method, "&_PackageFileref_.", 4); + otherwise /* legacy approach, without C or F, digest value equivalent to C */ + digest = HASHING_FILE(method, "&_PackageFileref_.", 4); + end; + put method "digest: " digest /; + + return; run; %let HASHING_FILE_exist = 0; %end; diff --git a/SPF/SPFinit.md b/SPF/SPFinit.md index 58d454a..2d05eaa 100644 --- a/SPF/SPFinit.md +++ b/SPF/SPFinit.md @@ -1,7 +1,7 @@ --- -# SAS Packages Framework, version `20260126` +# SAS Packages Framework, version `20260202` --- @@ -34,7 +34,7 @@ A **SAS package** is an automatically generated, single, stand alone *zip* file The *purpose of a package* is to be a simple, and easy to access, code sharing medium, which will allow: on the one hand, to separate the code complex dependencies created by the developer from the user experience with the final product and, on the other hand, reduce developer's and user's unnecessary frustration related to a remote deployment process. -In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20260126`**. +In this repository we are presenting the **SAS Packages Framework** which allows to develop and use SAS packages. The latest version of SPF is **`20260202`**. **To get started with SAS Packages** try this [**`Introduction to SAS Packages`**](https://youtube.com/playlist?list=PLeMzGEImIT5eV13IGXQIgWmTFCJt_cLZG&si=ElQm0_ifq76mvUbq "Introduction to SAS Packages video series") video series or [**`Getting Started with SAS Packages`**](https://github.com/yabwon/SAS_PACKAGES/blob/main/SPF/Documentation/Getting_Started_with_SAS_Packages.pdf "Getting Started with SAS Packages") presentation (see the `./SPF/Documentation` directory). @@ -57,7 +57,7 @@ them using the SPF can be found [**HERE**](https://github.com/yabwon/HoW-SASPack ## This is short help information for the `installPackage` macro -------------------------------------------------------------------------------------------- - Macro to install SAS packages, version `20260126` + Macro to install SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -185,7 +185,7 @@ filename packages "C:/SAS_PACKAGES"; ## This is short help information for the `helpPackage` macro ------------------------------------------------------------------------------- - Macro to get help about SAS packages, version `20260126` + Macro to get help about SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -263,7 +263,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `loadPackage` macro ------------------------------------------------------------------------------- - Macro to *load* SAS packages, version `20260126` + Macro to *load* SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -421,7 +421,7 @@ If created, those macros are automatically deleted when the `%unloadPackage()` m ## This is short help information for the `loadPackageS` macro ------------------------------------------------------------------------------- - Macro wrapper for the loadPackage macro, version `20260126` + Macro wrapper for the loadPackage macro, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -472,7 +472,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `unloadPackage` macro ------------------------------------------------------------------------------- - Macro to unload SAS packages, version `20260126` + Macro to unload SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -539,7 +539,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `listPackages` macro ----------------------------------------------------------------------------------------- - Macro to list available SAS packages, version `20260126` + Macro to list available SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -588,7 +588,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `verifyPackage` macro ------------------------------------------------------------------------------- - Macro to verify SAS package with it hash digest, version `20260126` + Macro to verify SAS package with it hash digest, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -609,7 +609,9 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; If empty displays this help information. - `hash=` A value of the package `SHA256` hash. - Provided by the user. + Provided by the user. When the value is not provided + then macro calculates `SHA256`, `SHA1`, and `MD5` + digests and display then in the log. - `path=` Location of a package. By default it looks for location of the "packages" fileref, i.e. @@ -636,13 +638,13 @@ filename packages "C:/SAS_PACKAGES"; %* set-up a directory for packages; %installPackage(SQLinDS) %* install the package from the Internet; %verifyPackage(SQLinDS, %* verify the package with provided hash; - hash=HDA478ANJ3HKHRY327FGE88HF89VH89HFFFV73GCV98RF390VB4) + hash=HDA478ANJ3HKHRY327FGE88HF89VH89HFFFV73GCV98RF390VB4) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ## This is short help information for the `previewPackage` macro ------------------------------------------------------------------------------- - Macro to get preview of a SAS packages, version `20260126` + Macro to get preview of a SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -711,7 +713,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `generatePackage` macro ------------------------------------------------------------------------------- - Macro to generate SAS packages, version `20260126` + Macro to generate SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -944,7 +946,7 @@ All files have to have `.sas` extension. Other files are ignored. ## This is short help information for the `extendPackagesFileref` macro ----------------------------------------------------------------------------------------- - Macro to list directories pointed by 'packages' fileref, version `20260126` + Macro to list directories pointed by 'packages' fileref, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -986,7 +988,7 @@ filename packages ("D:/NEW_DIR" %extendPackagesFileref()); %* add new directory; ## This is short help information for the `loadPackageAddCnt` macro ------------------------------------------------------------------------------- - Macro to load *additional content* for a SAS package, version `20260126` + Macro to load *additional content* for a SAS package, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1080,7 +1082,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ------------------------------------------------------------------------------- Utility macro to *split* single file with SAS package code into multiple - files with separate snippets, version `20260126` + files with separate snippets, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1161,7 +1163,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `relocatePackage` macro ------------------------------------------------------------------------------- - Macro to *locally copy or move* (relocate) SAS packages, version `20260126` + Macro to *locally copy or move* (relocate) SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1273,7 +1275,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `isPackagesFilerefOK` macro ----------------------------------------------------------------------------------------- - Macro to check if the `packages` fileref is "correct", version `20260126` + Macro to check if the `packages` fileref is "correct", version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1324,7 +1326,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `SasPackagesFrameworkNotes` macro ------------------------------------------------------------------------------- - Macro prints help notes for SAS Packages Framework macros, version `20260126` + Macro prints help notes for SAS Packages Framework macros, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1374,7 +1376,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `bundlePackages` macro ------------------------------------------------------------------------------- - Macro to *create bundles* of SAS packages, version `20260126` + Macro to *create bundles* of SAS packages, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1443,7 +1445,7 @@ filename packages "C:/SAS_PACKAGES"; %* setup a directory for packages; ## This is short help information for the `unbundlePackages` macro ------------------------------------------------------------------------------- - Macro to *extract* SAS packages from a bundle, version `20260126` + Macro to *extract* SAS packages from a bundle, version `20260202` A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating diff --git a/SPF/SPFinit.sas b/SPF/SPFinit.sas index a0b12f1..f140620 100644 --- a/SPF/SPFinit.sas +++ b/SPF/SPFinit.sas @@ -43,7 +43,7 @@ - to unload, or - to generate SAS packages. - Version 20260126. + Version 20260202. See examples below. A SAS package is a zip file containing a group of files @@ -101,7 +101,7 @@ Contributors: */ )/secure /*** HELP END ***/ -des = 'Macro to load SAS package, version 20260126. Run %loadPackage() for help info.' +des = 'Macro to load SAS package, version 20260202. Run %loadPackage() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -117,7 +117,7 @@ minoperator %put ### This is short help information for the `loadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* SAS packages, version `20260126` #; + %put # Macro to *load* SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -245,30 +245,34 @@ minoperator %local _PackageFileref_; data _null_; - call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "P" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".&zip.")); + exists + fileexist(catx("/", p, cats(packageName,".&zip."))); if exists then leave; end; if exists then call symputx("path", p, "L"); - run; + /*run;*/ /* moved to line 272 */ /* convert cherryPick to lower case if needed */ %if NOT (%str(*) = %superq(cherryPick)) %then %do; - data _null_; + /*data _null_;*/ call symputX("cherryPick",lowcase(compbl(compress(symget("cherryPick"),". _","KDA"))),"L"); - run; + /*run;*/ %end; + run; + /* empty list is equivalent to "*" */ %if %superq(cherryPick)= %then %do; @@ -394,7 +398,7 @@ minoperator */ )/secure /*** HELP END ***/ -des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for help info.' +des = 'Macro to unload SAS package, version 20260202. Run %unloadPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -409,7 +413,7 @@ des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for h %put ### This is short help information for the `unloadPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to unload SAS packages, version `20260126` #; + %put # Macro to unload SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -489,18 +493,20 @@ des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for h %local _PackageFileref_; data _null_; - call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "P" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".&zip.")); + exists + fileexist(catx("/", p, cats(packageName,".&zip."))); if exists then leave; end; if exists then call symputx("path", p, "L"); @@ -562,7 +568,7 @@ des = 'Macro to unload SAS package, version 20260126. Run %unloadPackage() for h */ )/secure /*** HELP END ***/ -des = 'Macro to get help about SAS package, version 20260126. Run %helpPackage() for help info.' +des = 'Macro to get help about SAS package, version 20260202. Run %helpPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -577,7 +583,7 @@ des = 'Macro to get help about SAS package, version 20260126. Run %helpPackage() %put ### This is short help information for the `helpPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get help about SAS packages, version `20260126` #; + %put # Macro to get help about SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -667,18 +673,20 @@ des = 'Macro to get help about SAS package, version 20260126. Run %helpPackage() %local _PackageFileref_; data _null_; - call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "P" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".&zip.")); + exists + fileexist(catx("/", p, cats(packageName,".&zip."))); if exists then leave; end; if exists then call symputx("path", p, "L"); @@ -720,7 +728,7 @@ TODO: */ /*+installPackage+*/ -/* Macros to install SAS packages, version 20260126 */ +/* Macros to install SAS packages, version 20260202 */ /* A SAS package is a zip file containing a group of files with SAS code (macros, functions, data steps generating data, etc.) wrapped up together and %INCLUDEed by @@ -747,7 +755,7 @@ TODO: /secure minoperator /*** HELP END ***/ -des = 'Macro to install SAS package, version 20260126. Run %%installPackage() for help info.' +des = 'Macro to install SAS package, version 20260202. Run %%installPackage() for help info.' ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then %do; @@ -762,7 +770,7 @@ des = 'Macro to install SAS package, version 20260126. Run %%installPackage() fo %put ### This is short help information for the `installPackage` macro #; %put #--------------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to install SAS packages, version `20260126` #; + %put # Macro to install SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -1414,7 +1422,7 @@ des = 'Macro to install SAS package, version 20260126. Run %%installPackage() fo Macro to list SAS packages in packages folder. - Version 20260126 + Version 20260202 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1436,7 +1444,7 @@ des = 'Macro to install SAS package, version 20260126. Run %%installPackage() fo listDataSet /* Name of a data set to save results */ , quiet = 0 /* Indicate if results should be printed in log */ )/secure parmbuff -des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20260126.' +des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HELP) for help, version 20260202.' ; %if (%QUPCASE(&listDataSet.) = HELP) %then %do; @@ -1451,7 +1459,7 @@ des = 'Macro to list SAS packages from `packages` fileref, type %listPackages(HE %put ### This is short help information for the `listPackages` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list available SAS packages, version `20260126` #; + %put # Macro to list available SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -1661,7 +1669,7 @@ run; %if 0=&quiet. %then %do; %put %str( ); - %put # Results ptovided in the &listDataSet. data set. #; + %put # Results provided in the &listDataSet. data set. #; %put %str( ); %end; %end; @@ -1677,7 +1685,7 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; Macro to generate SAS packages. - Version 20260126 + Version 20260202 A SAS package is a zip file containing a group of SAS codes (macros, functions, data steps generating @@ -1727,7 +1735,7 @@ options ls = &ls_tmp. ps = &ps_tmp. ¬es_tmp. &source_tmp.; when empty takes buildLocation */ )/ secure minoperator /*** HELP END ***/ -des = 'Macro to generate SAS packages, version 20260126. Run %generatePackage() for help info.' +des = 'Macro to generate SAS packages, version 20260202. Run %generatePackage() for help info.' ; %if (%superq(filesLocation) = ) OR (%qupcase(&filesLocation.) = HELP) %then %do; @@ -1742,7 +1750,7 @@ des = 'Macro to generate SAS packages, version 20260126. Run %generatePackage() %put ### This is short help information for the `generatePackage` macro #; %put #------------------------------------------------------------------------------------#; %put # #; - %put # Macro to generate SAS packages, version `20260126` #; + %put # Macro to generate SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -2118,10 +2126,10 @@ options NOquotelenmax NOstimer NOfullstimer; */ data _null_; call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); -run; +/*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* test if version is a number */ -data _null_; +/*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ v = "&packageVersion."; version = coalesce(input(scan(v,1,".","M"), ?? best32.),0)*1e8 + coalesce(input(scan(v,2,".","M"), ?? best32.),0)*1e4 @@ -2624,7 +2632,7 @@ title6 "MD5 hashed fileref of package lowcase name: &_PackageFileref_."; title&_titleNumber_. "Package ZIP file location is: &buildLocation."; %end; -footnote1 "SAS Packages Framework, version 20260126"; +footnote1 "SAS Packages Framework, version 20260202"; proc print data = &filesWithCodes.(drop=base build folderRef fileRef rc folderid _abort_ fileId additionalContent) @@ -3449,7 +3457,7 @@ data _null_; %end; put +(-1) '`.;''' / ' !! '' %put The macro generated: '' !! put(dtCASLudf, E8601DT19.-L) !! ";"' - / ' !! '' %put with the SAS Packages Framework version 20260126.;''' + / ' !! '' %put with the SAS Packages Framework version 20260202.;''' / ' !! '' %put ****************************************************************************;''' / ' !! '' %GOTO theEndOfTheMacro;''' / ' !! '' %end;''' ; @@ -3613,7 +3621,7 @@ data _null_; %end; put +(-1) '`.; '' !!' / ''' %put The macro generated: ''' " !! put(dtIML, E8601DT19.-L) !! " '''; '' !! ' / - ''' %put with the SAS Packages Framework version 20260126.; '' !! ' / + ''' %put with the SAS Packages Framework version 20260202.; '' !! ' / ''' %put ****************************************************************************; '' !! ' / ''' %GOTO theEndOfTheMacro; '' !! ' / ''' %end; '' !! ' / @@ -4484,7 +4492,7 @@ data _null_; %end; put 'put " " / @3 "---------------------------------------------------------------------" / " ";' - / 'put @3 "*SAS package generated by SAS Package Framework, version `20260126`*";' + / 'put @3 "*SAS package generated by SAS Package Framework, version `20260202`*";' / "put @3 '*under `&sysscp.`(`&sysscpl.`) operating system,*';" / "put @3 '*using SAS release: `&sysvlong4.`.*';" / 'put " " / @3 "---------------------------------------------------------------------";'; @@ -4923,7 +4931,7 @@ options &qlenmax_fstimer_tmp.; /*+SPFint_gnPckg_tests+*/ %macro SPFint_gnPckg_tests()/secure minoperator -des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the test part of the process. Version 20260126.'; +des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the test part of the process. Version 20260202.'; /* macro picks up all macrovariables from external scope, so from the %generatePackage() macro */ %if %sysmexecname(%sysmexecdepth-1) in (GENERATEPACKAGE) %then %do; @@ -5008,6 +5016,10 @@ run; @n '%put >>>%'"&packageName."'META(P)<<<;'/ @n '%put >>>%'"&packageName."'META(S)<<<;'/; + /* verify */ + put @n '%verifyPackage'"(&packageName.,"; + put @n " path=&buildLocation.)" /; + /* help */ put @n '%helpPackage'"(&packageName.,"; put @n " path=&buildLocation.)" /; @@ -5240,6 +5252,10 @@ data _null_; '%put >>req packages>%'"&packageName."'META(P)<<<;'/ '%put >>req SAS >%'"&packageName."'META(S)<<<;'/; + /* verify */ + put '%verifyPackage'"(&packageName.,"; + put " path=&buildLocation.)" /; + /* help */ put '%helpPackage'"(&packageName.," / " path=&buildLocation.)" /; @@ -5597,7 +5613,7 @@ options "elenmax_tmp.; /*+SPFint_gnPckg_markdown+*/ %macro SPFint_gnPckg_markdown()/secure minoperator -des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the markdown documentation part of the process. Version 20260126.'; +des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the markdown documentation part of the process. Version 20260202.'; /* macro picks up all macrovariables from external scope, so from the %generatePackage() macro */ %if %sysmexecname(%sysmexecdepth-1) in (GENERATEPACKAGE) %then %do; @@ -5709,7 +5725,7 @@ data &filesWithCodes.markdown; %end; put " " / "---------------------------------------------------------------------" / " " - / "*SAS package generated by SAS Package Framework, version `20260126`,*" + / "*SAS package generated by SAS Package Framework, version `20260202`,*" / "*under `&sysscp.`(`&sysscpl.`) operating system,*" / "*using SAS release: `&sysvlong4.`.*" / " " / "---------------------------------------------------------------------" / " "; @@ -5850,7 +5866,7 @@ options &MarkDownOptionsTmp.; /*+SPFint_gnPckg_arch+*/ %macro SPFint_gnPckg_arch()/secure minoperator -des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the archive version generation part of the process. Version 20260126.'; +des='SAS Packages Framework internal macro. Executable only inside the %generatePackage() macro. The macro encapsulates the archive version generation part of the process. Version 20260202.'; /* macro picks up all macrovariables from external scope, so from the %generatePackage() macro */ %if %sysmexecname(%sysmexecdepth-1) in (GENERATEPACKAGE) %then %do; @@ -6017,7 +6033,7 @@ TODO: (in Polish) */ )/secure /*** HELP END ***/ -des = 'Macro to load multiple SAS packages at one run, version 20260126. Run %loadPackages() for help info.' +des = 'Macro to load multiple SAS packages at one run, version 20260202. Run %loadPackages() for help info.' parmbuff ; %if (%superq(packagesNames) = ) OR (%qupcase(&packagesNames.) = HELP) %then @@ -6033,7 +6049,7 @@ parmbuff %put ### This is short help information for the `loadPackageS` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro wrapper for the loadPackage macro, version `20260126` #; + %put # Macro wrapper for the loadPackage macro, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -6126,12 +6142,12 @@ parmbuff , path = %sysfunc(pathname(packages)) /* location of a package, by default it looks for location of "packages" fileref */ -, hash = /* The SHA256 hash digest for +, hash = F* /* The SHA256 hash digest for the package generated by hashing_file() function, SAS 9.4M6 */ )/secure /*** HELP END ***/ -des = 'Macro to verify SAS package with the hash digest, version 20260126. Run %verifyPackage() for help info.' +des = 'Macro to verify SAS package with the hash digest, version 20260202. Run %verifyPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -6146,7 +6162,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % %put ### This is short help information for the `verifyPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to verify SAS package with it hash digest, version `20260126` #; + %put # Macro to verify SAS package with it hash digest, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -6166,7 +6182,9 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % %put # If empty displays this help information. #; %put # #; %put # - `hash=` A value of the package `SHA256` hash. #; - %put # Provided by the user. #; + %put # Provided by the user. When the value is not provided #; + %put # then macro calculates `SHA256`, `SHA1`, and `MD5` #; + %put # digests and display then in the log. #; %put # #; %put # - `path=` Location of a package. By default it looks for #; %put # location of the "packages" fileref, i.e. #; @@ -6194,7 +6212,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % %put ; %put %nrstr( %%installPackage(SQLinDS) %%* install the package from the Internet; ); %put %nrstr( %%verifyPackage%(SQLinDS, %%* verify the package with provided hash; ); - %put %nrstr( hash=HDA478ANJ3HKHRY327FGE88HF89VH89HFFFV73GCV98RF390VB4%) ); + %put %nrstr( hash=HDA478ANJ3HKHRY327FGE88HF89VH89HFFFV73GCV98RF390VB4%) ); %put ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; %put #################################################################################; %put ; @@ -6215,19 +6233,21 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % options NOnotes NOsource ls=MAX ps=MAX NOfullstimer NOstimer msglevel=N NOmautocomploc; %local _PackageFileref_ checkExist; - data _null_; - call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + data _null_; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "P" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".zip")); /* check on zip files only! */ + exists + fileexist(catx("/", p, cats(packageName,".zip"))); /* check on zip files only! */ if exists then leave; end; if exists then call symputx("path", p, "L"); @@ -6260,31 +6280,60 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % filename &_PackageFileref_. list; data _null_; - length providedHash $ 128; + length providedHash $ 128 packageName $ 32; providedHash = strip(symget("hash")); - select; - when ( 'F*' = upcase(substr(providedHash,1,2)) ) /* F = file digest */ - SHA256 = 'F*' !! HASHING_FILE("SHA256", pathname("&_PackageFileref_.",'F'), 0); - when ( 'C*' = upcase(substr(providedHash,1,2)) ) /* C = content digest */ - SHA256 = 'C*' !! HASHING_FILE("SHA256", "&_PackageFileref_.", 4); - otherwise /* legacy approach, without C or F, digest value equivalent to C */ - SHA256 = HASHING_FILE("SHA256", "&_PackageFileref_.", 4); - end; - put "Provided Hash: " providedHash; - put "SHA256 digest: " SHA256; - put " "; - - if upcase(SHA256) = upcase(providedHash) then - do; - put "NOTE: Package verification SUCCESSFUL."; - put "NOTE- Generated hash is EQUAL to the provided one."; + packageName = strip(symget("packageName")); + + emptyHash = (providedHash = " " OR providedHash in ("F*" "f*" "C*" "c*")); + + put 82*"-" / @2 packageName / 82*"-" /; + + if NOT emptyHash then put "Provided Hash: " providedHash; + + length method $ 8 digest $ 128; + /* calculate SHA256 */ + method="SHA256"; + LINK CalcualteHashDigest; /* go to Link 1 */ + + if NOT emptyHash then + do; /* step for veryfication */ + if upcase(digest) = upcase(providedHash) then + do; + put "NOTE: Verification SUCCESSFUL." + / "NOTE- Generated hash is EQUAL to the provided one." / ; + end; + else + do; + pos = 0; + do i = 1 to max(lengthn(digest),lengthn(providedHash)) while(pos=0); + if char(digest,i) NE char(providedHash,i) then pos = i; + end; + put "ERROR- " @(pos+15)"^"/"ERROR- " @(pos+15)"| diff @" pos/"ERROR- "; + put "ERROR: Verification FAILED!!" + / "ERROR- Generated hash is DIFFERENT than the provided one." + / "ERROR- Check if the ZIP is genuine." / ; + end; end; else - do; - put "ERROR: Package verification FAILED!!"; - put "ERROR- Generated hash is DIFFERENT than the provided one."; - put "ERROR- Confirm if the package is genuine."; + do method = "SHA1", "MD5"; /* step for digest display, calcualte also SHA1 and MD5 */ + LINK CalcualteHashDigest; /* go to Link 1 */ end; + put 82*"-" /; + stop; + return; + CalcualteHashDigest: /* Link 1 */ + + select; + when ( 'F*' = upcase(substr(providedHash,1,2)) ) /* F = file digest */ + digest = 'F*' !! HASHING_FILE(method, pathname("&_PackageFileref_.",'F'), 0); + when ( 'C*' = upcase(substr(providedHash,1,2)) ) /* C = content digest */ + digest = 'C*' !! HASHING_FILE(method, "&_PackageFileref_.", 4); + otherwise /* legacy approach, without C or F, digest value equivalent to C */ + digest = HASHING_FILE(method, "&_PackageFileref_.", 4); + end; + put method "digest: " digest /; + + return; run; %let HASHING_FILE_exist = 0; %end; @@ -6329,7 +6378,7 @@ des = 'Macro to verify SAS package with the hash digest, version 20260126. Run % */ )/secure /*** HELP END ***/ -des = 'Macro to preview content of a SAS package, version 20260126. Run %previewPackage() for help info.' +des = 'Macro to preview content of a SAS package, version 20260202. Run %previewPackage() for help info.' ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then %do; @@ -6344,7 +6393,7 @@ des = 'Macro to preview content of a SAS package, version 20260126. Run %preview %put ### This is short help information for the `previewPackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to get preview of a SAS packages, version `20260126` #; + %put # Macro to get preview of a SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -6425,18 +6474,20 @@ des = 'Macro to preview content of a SAS package, version 20260126. Run %preview %local _PackageFileref_; data _null_; - call symputX("_PackageFileref_", "P" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "P" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".&zip.")); + exists + fileexist(catx("/", p, cats(packageName,".&zip."))); if exists then leave; end; if exists then call symputx("path", p, "L"); @@ -6476,7 +6527,7 @@ des = 'Macro to preview content of a SAS package, version 20260126. Run %preview when empty the "packages" value is used */ )/secure /*** HELP END ***/ -des = 'Macro to list directories pointed by "packages" fileref, version 20260126. Run %extendPackagesFileref(HELP) for help info.' +des = 'Macro to list directories pointed by "packages" fileref, version 20260202. Run %extendPackagesFileref(HELP) for help info.' ; %if %QUPCASE(&packages.) = HELP %then @@ -6492,7 +6543,7 @@ des = 'Macro to list directories pointed by "packages" fileref, version 20260126 %put ### This is short help information for the `extendPackagesFileref` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to list directories pointed by 'packages' fileref, version `20260126` #; + %put # Macro to list directories pointed by 'packages' fileref, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -6594,7 +6645,7 @@ filename packages list; is provided in required version */ )/secure /*** HELP END ***/ -des = 'Macro to load additional content for a SAS package, version 20260126. Run %loadPackageAddCnt() for help info.' +des = 'Macro to load additional content for a SAS package, version 20260202. Run %loadPackageAddCnt() for help info.' minoperator ; %if (%superq(packageName) = ) OR (%qupcase(&packageName.) = HELP) %then @@ -6610,7 +6661,7 @@ minoperator %put ### This is short help information for the `loadPackageAddCnt` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *load* additional content for a SAS package, version `20260126` #; + %put # Macro to *load* additional content for a SAS package, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -6691,20 +6742,22 @@ minoperator options NOnotes NOsource ls=MAX ps=MAX NOfullstimer NOstimer msglevel=N NOmautocomploc; %local _PackageFileref_; - data _null_; - call symputX("_PackageFileref_", "A" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - call symputX("_TargetFileref_", "T" !! put(MD5(lowcase("&packageName.")), hex7. -L), "L"); - run; + data _null_; + length packageName $ 32; + packageName = lowcase(symget("packageName")); + call symputX("_PackageFileref_", "A" !! put(MD5(strip(packageName)), hex7. -L), "L"); + call symputX("_TargetFileref_", "T" !! put(MD5(strip(packageName)), hex7. -L), "L"); + /*run;*/ /* <- comment out, because it can be 1 data step, not 2 */ /* when the packages reference is multi-directory search for the first one containing the package */ - data _null_; + /*data _null_;*/ /* <- comment out, because it can be 1 data step, not 2 */ exists = 0; length packages $ 32767 p $ 4096; packages = resolve(symget("path")); if char(packages,1) ^= "(" then packages = quote(strip(packages)); /* for paths with spaces */ do i = 1 to kcountw(packages, "()", "QS"); p = dequote(kscanx(packages, i, "()", "QS")); - exists + fileexist(catx("/", p, lowcase("&packageName.") !! ".&zip.")); + exists + fileexist(catx("/", p, cats(packageName,".&zip."))); if exists then leave; end; if exists then call symputx("path", p, "L"); @@ -6979,7 +7032,7 @@ minoperator ,nobs=0 /* technical parameter */ ) /*** HELP END ***/ -/ des = 'Utility macro to split "one big" code into multiple files for a SAS package, version 20260126. Run %splitCodeForPackage() for help info.' +/ des = 'Utility macro to split "one big" code into multiple files for a SAS package, version 20260202. Run %splitCodeForPackage() for help info.' ; %if (%superq(codeFile) = ) OR (%qupcase(&codeFile.) = HELP) %then %do; @@ -6995,7 +7048,7 @@ minoperator %put #-------------------------------------------------------------------------------#; %put # #; %put # Utility macro to *split* single file with SAS package code into multiple #; - %put # files with separate snippets, version `20260126` #; + %put # files with separate snippets, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -7371,7 +7424,7 @@ options nomprint nosymbolgen nomlogic notes source ls=MAX ps=MAX msglevel=N ; */ if firstLine[j] then do; - put '/* File generated with help of SAS Packages Framework, version 20260126. */'; + put '/* File generated with help of SAS Packages Framework, version 20260202. */'; firstLine[j]=0; end; put _infile_; @@ -7404,7 +7457,7 @@ options &options_tmp2.; ,psMAX=MAX /* pageSise in case executed inside DoSubL() */ ,ods= /* a data set for results, e.g., work.relocatePackageReport */ ) -/ des = 'Utility macro that locally Copies or Moves Packages, version 20260126. Run %relocatePackage() for help info.' +/ des = 'Utility macro that locally Copies or Moves Packages, version 20260202. Run %relocatePackage() for help info.' secure minoperator ; @@ -7422,7 +7475,7 @@ options &options_tmp2.; %put ### This is short help information for the `relocatePackage` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *locally copy or move* (relocate) SAS packages, version `20260126` #; + %put # Macro to *locally copy or move* (relocate) SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -8080,7 +8133,7 @@ filename PACKAGES ("R:\testPackages2" "R:\testPackages1"); vERRb /* indicates if macro should be verbose and report errors */ ) / minoperator PARMBUFF -des = 'Macro to check if the PACKAGES fileref is "correct", type %isPackagesFilerefOK(HELP) for help, version 20260126.' +des = 'Macro to check if the PACKAGES fileref is "correct", type %isPackagesFilerefOK(HELP) for help, version 20260202.' ; /*** HELP END ***/ %if %QUPCASE(&SYSPBUFF.) = %str(%(HELP%)) %then @@ -8096,7 +8149,7 @@ des = 'Macro to check if the PACKAGES fileref is "correct", type %isPackagesFile %put ### This is short help information for the `isPackagesFilerefOK` macro #; %put #-----------------------------------------------------------------------------------------#;; %put # #; - %put # Macro to check if the `packages` fileref is "correct", version `20260126` #; + %put # Macro to check if the `packages` fileref is "correct", version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -8230,7 +8283,7 @@ SPFmacroName /* space separated list of names */ / minoperator secure -des = 'Macro to provide help notes about SAS Packages Framework macros, version 20260126. Run %SasPackagesFrameworkNotes(HELP) for help info.' +des = 'Macro to provide help notes about SAS Packages Framework macros, version 20260202. Run %SasPackagesFrameworkNotes(HELP) for help info.' ; %local list N i element; %let list= @@ -8276,7 +8329,7 @@ SasPackagesFrameworkNotes %put ### This is short help information for the `SasPackagesFrameworkNotes` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro prints help notes for SAS Packages Framework macros, version `20260126` #; + %put # Macro prints help notes for SAS Packages Framework macros, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -8399,7 +8452,7 @@ options mlogic symbolgen; ,packagesRef=packages ,ods= /* data set for report file */ )/ -des='Macro to create a bundle of SAS packages, version 20260126. Run %bundlePackages(HELP) for help info.' +des='Macro to create a bundle of SAS packages, version 20260202. Run %bundlePackages(HELP) for help info.' secure minoperator ; @@ -8416,7 +8469,7 @@ secure minoperator %put ### This is short help information for the `bundlePackages` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *create bundles* of SAS packages, version `20260126` #; + %put # Macro to *create bundles* of SAS packages, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -8901,7 +8954,7 @@ filename p2 "R:/dontexist"; ,ods= /* data set for report file */ ,verify=0 )/ -des='Macro to extract a bundle of SAS packages, version 20260126. Run %unbundlePackages(HELP) for help info.' +des='Macro to extract a bundle of SAS packages, version 20260202. Run %unbundlePackages(HELP) for help info.' secure minoperator ; @@ -8919,7 +8972,7 @@ minoperator %put ### This is short help information for the `unbundlePackages` macro #; %put #-------------------------------------------------------------------------------#; %put # #; - %put # Macro to *extract* SAS packages from a bundle, version `20260126` #; + %put # Macro to *extract* SAS packages from a bundle, version `20260202` #; %put # #; %put # A SAS package is a zip file containing a group #; %put # of SAS codes (macros, functions, data steps generating #; @@ -9021,11 +9074,10 @@ minoperator %let datetime = %sysfunc(datetime()); %let reportFile = WORK.tmpbundlefile%sysfunc(int(&datetime.), b8601dt15.)_; -data _null_ ; +data _null_; datetime=symgetn('datetime'); length packagesList $ 32767 bundleName $ 128; - bundleName = compress(symget('bundleName'),"_.","KAD"); /* bundle name is letters, digits, and underscore, up to 128 symbols */ if bundleName NE symget('bundleName') then /* warn about illegal characters */ @@ -9033,12 +9085,12 @@ if bundleName NE symget('bundleName') then /* warn about illegal characters */ put "ERROR: Bundle name contains illegal characters. Exiting"; stop; end; - bundleName=lowcase(bundleName); +lbn = length(bundleName); /* to cover lengths < 7 & 11 */ /* if there is ".bundle.zip" extension added, remove it */ -if substr(strip(reverse(bundleName)),1,11) = 'piz.eldnub.' then bundleName=scan(bundleName,-3,"."); +if substr(strip(reverse(bundleName)),1,min(11,lbn)) = 'piz.eldnub.' then bundleName=scan(bundleName,-3,"."); else /* if there is ".bundle" extension added, remove it */ -if substr(strip(reverse(bundleName)),1,7) = 'eldnub.' then bundleName=scan(bundleName,-2,"."); +if substr(strip(reverse(bundleName)),1,min(7,lbn)) = 'eldnub.' then bundleName=scan(bundleName,-2,"."); put / "INFO: Bundle name is: " bundleName / ; @@ -9046,7 +9098,6 @@ length packagesPath $ 32767 packagesRef $ 8; packagesPath = dequote(symget('packagesPath')); packagesRef = upcase(strip(symget('packagesRef'))); - /* organize target path (location for packages) */ if " "=packagesPath then do; @@ -9174,7 +9225,6 @@ label package="Package name" hash="SHA256 for the Package"; /*--------------------------------------------------*/ - if 0=Q.NUM_ITEMS then /* ... if empty then exit */ do; put "WARNING: No packages to unbundle. Exiting!"; @@ -9213,7 +9263,6 @@ put / "INFO: The " bundleName "bundle extraction ended."; rc = doSubL(code2); put / "INFO: The " bundleName "bundle verification ended."; %end; - put " "; rc=sleep(1,1);