https://www.cnblogs.com/yeungchie/
脚本位置
$MGC_HOME/shared/pkgs/icv/tools/queryskl/calibre.skl
# $MGC_HOME 为 Calibre 的安装路径
使用方法
- 在 .cdsinit 中增加一行:
loadi(strcat(getShellEnvVar("MGC_HOME") "/shared/pkgs/icv/tools/queryskl/calibre.skl"))
强烈推荐使用上面这种方式。
脚本内容
/*******************************************************************************
*
* calibre.skl
*
*******************************************************************************/
; ==============================================================================
; = @brief Get Calibre version string based on MGC home environment variable.
; ==============================================================================
procedure( mgc_get_calibre_version(@optional (mgcHomeEnvName "MGC_HOME") "t")
let( (mgc_home vfile version vfilep)
mgc_home = getShellEnvVar(mgcHomeEnvName)
version = ""
if( mgc_home then
vfile = strcat(mgc_home "/pkgs/icv/dependencies/version")
when( isFile(vfile) && isReadable(vfile)
vfilep = infile(vfile)
fscanf(vfilep "%s" version)
close(vfilep)
) ; when
else
warn("Invalid or undefined mgc_home environment variable %L!
" mgcHomeEnvName)
) ; if
version
) ; let
) ; end
; ==============================================================================
; = @brief Compare two Calibre version strings.
; = @return 1/0/-1 return 1 if tVersion1 is newer than tVersion2, -1 otherwise,
; = 0 for same version.
; ==============================================================================
procedure( mgc_compare_calibre_versions(tVersion1 tVersion2 "tt")
prog( (nYear1 nYear2 nQuarter1 nQuarter2 tPattern nBld1 nBld2 nPch1 nPch2 nTotal1 nTotal2)
;; tVersion = "v2014.3_0.30" "v2014.2_12.0012"
nYear1 = 0
nYear2 = 0
nQuarter1 = 0
nQuarter2 = 0
nBld1 = 0
nBld2 = 0
nPch1 = 0
nPch2 = 0
tPattern = "\([0-9]+\).\([1-4]+\).\([0-9]+\).\([0-9]+\)"
when( rexMatchp(tPattern tVersion1)
nYear1 = evalstring(rexSubstitute("\1"))
nQuarter1 = evalstring(rexSubstitute("\2"))
nBld1 = evalstring(rexSubstitute("\3"))
nPch1 = evalstring(rexSubstitute("\4"))
) ; when
when( rexMatchp(tPattern tVersion2)
nYear2 = evalstring(rexSubstitute("\1"))
nQuarter2 = evalstring(rexSubstitute("\2"))
nBld2 = evalstring(rexSubstitute("\3"))
nPch2 = evalstring(rexSubstitute("\4"))
) ; when
nTotal1 = nYear1*100 + nQuarter1
nTotal2 = nYear2*100 + nQuarter2
if( nTotal1>nTotal2 then
return(1)
else if( nTotal1<nTotal2 then
return(-1)
else
if( nBld1>nBld2 then
return(1)
else if( nBld1<nBld2 then
return(-1)
else if( nPch1>nPch2 then
return(1)
else if( nPch1<nPch2 then
return(-1)
else
return(0)
))))
)) ; if
return(0)
) ; prog
) ; end
; ==============================================================================
; = @brief Load Calibre SKILL files
; ==============================================================================
if( !boundp('mgcCadenceVersion4_3) then
mgcCadenceVersion4_3 = nil
)
mgcCadenceVersionOA = nil
if( !mgcCadenceVersion4_3 then
when( dbGetDatabaseType()=="OpenAccess"
mgcCadenceVersionOA = t
)
)
/* Check for MGC_HOME */
let( (mgc_home calibre_home realtime_home script_path calibre_realtime_file tVersion1 tVersion2)
; ER1054490: Add mechanism in calibre.skl to prevent double load
if( boundp('MGC_CALIBRE_GLOBALS_SKL_LOADED) && MGC_CALIBRE_GLOBALS_SKL_LOADED then
fprintf(stderr "// Calibre Error: Calibre SKILL code has been loaded, new code will not be loaded!
")
else
MGC_CALIBRE_GLOBALS_SKL_LOADED = t
; DR602690: When User use CALIBRE_HOME without MGC_HOME , Virtuoso can not display Calibre button .
calibre_home = getShellEnvVar("CALIBRE_HOME")
when( calibre_home && isDir(calibre_home) && isReadable(calibre_home)
setShellEnvVar(sprintf(nil "MGC_HOME=%s" calibre_home))
) ; when
mgc_home = getShellEnvVar("MGC_HOME")
realtime_home = getShellEnvVar("MGC_REALTIME_HOME")
when( realtime_home && realtime_home!=mgc_home && isReadable(realtime_home) && getShellEnvVar("MGC_CALIBRE_REALTIME_VIRTUOSO_ENABLED") && dbGetDatabaseType()=="OpenAccess"
; ER1054482: Issue warning message to customer if MGC_REALTIME_HOME is older than MGC_HOME
; ER1094216: An MGC_REALTIME_HOME older than MGC_HOME should be a fatal error
tVersion1 = mgc_get_calibre_version("MGC_HOME")
tVersion2 = mgc_get_calibre_version("MGC_REALTIME_HOME")
if( mgc_compare_calibre_versions(tVersion2 tVersion1)<0 then
error("// Calibre RealTime: MGC_REALTIME_HOME = %L, MGC_HOME = %L; MGC_REALTIME_HOME is older than MGC_HOME! Please correct your settings!" tVersion2 tVersion1)
when( isCallable('unsetShellEnvVar) unsetShellEnvVar("MGC_REALTIME_HOME") )
else
printf("//
")
printf("// Calibre RealTime: MGC_HOME = %L, MGC_HOME is different with MGC_REALTIME_HOME.
" mgc_home)
printf("// Calibre RealTime: MGC_REALTIME_HOME = %L, SKILL code in MGC_REALTIME_HOME will be used!
" realtime_home)
mgc_home = realtime_home
) ; if
) ; when
if( mgc_home!=nil && isReadable(mgc_home) then
script_path = strcat(mgc_home "/shared/pkgs/icv/tools/queryskl/")
load( strcat(script_path "mgc_calibre_menu.skl") )
load( strcat(script_path "mgc_rve.skl") )
load( strcat(script_path "mgc_export.skl") )
load( strcat(script_path "mgc_utility.skl") )
when( getShellEnvVar("MGC_CALIBRE_REALTIME_VIRTUOSO_ENABLED") && dbGetDatabaseType()=="OpenAccess"
calibre_realtime_file = strcat( strcat(script_path "mgc_calibre_realtime.enc_skl") )
if( isReadable(calibre_realtime_file) then
load(calibre_realtime_file)
else
fprintf(stderr "// Calibre Error: %L is not readable
" calibre_realtime_file)
) ; if
) ; when
if( !mgcCadenceVersion4_3 then
load( strcat(script_path "mgc_extview.skl") )
)
else
; MGC_HOME is not set correctly. Report the problem.
fprintf(stderr "// Calibre Error: Environment variable ")
if( mgc_home==nil || mgc_home=="" then
fprintf(stderr "CALIBRE_HOME or MGC_HOME is not set.")
else
if( !isDir(mgc_home) then
fprintf(stderr "CALIBRE_HOME or MGC_HOME does not point to a directory.")
else
unless( isReadable(mgc_home)
fprintf(stderr "CALIBRE_HOME or MGC_HOME points to an unreadable directory.")
)
)
)
fprintf(stderr " Calibre Skill Interface not loaded.
")
) ; if
) ; if
) ; let