$! Copyright © 1995, 2005, Oracle Corporation. All Rights Reserved. $! $! File: SQL$SHOVER.COM $! $! This command procedure displays the current Common Components environment. $! $! Input Paramaters: $! $! P1 = (OPTIONAL) $! VERSIONS to define logicals showing installed versions $! or SQL to show current SQL environment $! or DISPATCH to show current Rdb/Dispatch environment $! or ALL to show all common components (default) $! $! P2 = (OPTIONAL) $! Used when P1 = VERSIONS $! SQL to define only SQL$INSTALLED_VERSIONS $! DISPATCH to define only RDB$DISPATCH_INSTALLED_VERSIONS $! NOSHOW to suppress the display of the logicals $! version (Ex: S or 4.1) to define the logical with only a $! specific versions installations $! $! P3 = (OPTIONAL) $! Used when P1 = VERSIONS $! NOSHOW to suppress the display of the logicals $! version (Ex: S or 4.1) to define the logical with only a $! specific versions installations $! $! P4 = (OPTIONAL) $! Used when P1 = VERSIONS $! NOSHOW to suppress the display of the logicals $!---------------------------------------------------------------------- $! $ DELETE = "DELETE" $ SEARCH = "SEARCH" $ FALSE = 0 $ TRUE = 1 $ P1 = F$EDIT(P1,"UPCASE,COLLAPSE") $ P2 = F$EDIT(P2,"UPCASE,COLLAPSE") $ P3 = F$EDIT(P3,"UPCASE,COLLAPSE") $ P4 = F$EDIT(P4,"UPCASE,COLLAPSE") $! $ IF F$EXTRACT(0,7,P1) .EQS. "VERSION" THEN GOTO RETURN_INSTALLED_VERSIONS $ IF P1 .EQS. "DEBUG" THEN GOTO RETURN_DEBUG_INFO $! $ IF P1 .NES. "SQL" .AND. - P1 .NES. "DISPATCH" .AND. - P1 .NES. "ALL" .AND. - P1 .NES. "" $ THEN $ WRITE SYS$OUTPUT "%SQL-E-SHOVER Invalid parameter ''P1'" $ WRITE SYS$OUTPUT "%SQL-I-SHOVER Valid Parameters are " + - "VERSIONS,SQL,DISPATCH,ALL(D)" $ CALL CLEANUP_RTN $ EXIT %X10000000 $ ENDIF $! $ SQL$$LOG_FOUND == FALSE $ RDB$$LOG_FOUND == FALSE $ IF P1 .EQS. "SQL" $ THEN $ CALL SHOW_VERSION "SQL$" "PROCESS" $ CALL SHOW_VERSION "SQL$" "JOB" $ CALL SHOW_VERSION "SQL$" "GROUP" $ CALL SHOW_VERSION "SQL$" "SYSTEM" $ RDB$$LOG_FOUND == TRUE $ GOTO SHOW_VERSION_FINISH $ ENDIF $! $ IF P1 .EQS. "DISPATCH" $ THEN $ CALL SHOW_VERSION "RDB$DISPATCH_" "PROCESS" $ CALL SHOW_VERSION "RDB$DISPATCH_" "JOB" $ CALL SHOW_VERSION "RDB$DISPATCH_" "GROUP" $ CALL SHOW_VERSION "RDB$DISPATCH_" "SYSTEM" $ SQL$$LOG_FOUND == TRUE $ GOTO SHOW_VERSION_FINISH $ ENDIF $! $ IF P1 .EQS. "ALL" .OR. P2 .EQS. "" .OR. P2 .EQS. "NOSYSTEM" $ THEN $ CALL SHOW_VERSION "SQL$" "PROCESS" $ CALL SHOW_VERSION "RDB$DISPATCH_" "PROCESS" $ CALL SHOW_VERSION "SQL$" "JOB" $ CALL SHOW_VERSION "RDB$DISPATCH_" "JOB" $ CALL SHOW_VERSION "SQL$" "GROUP" $ CALL SHOW_VERSION "RDB$DISPATCH_" "GROUP" $ IF P2 .NES. "NOSYSTEM" $ THEN $ CALL SHOW_VERSION "SQL$" "SYSTEM" $ CALL SHOW_VERSION "RDB$DISPATCH_" "SYSTEM" $ ENDIF $ GOTO SHOW_VERSION_FINISH $ ENDIF $! $ SHOW_VERSION_FINISH: $! $ IF SQL$$LOG_FOUND .AND. RDB$$LOG_FOUND $ THEN $ CALL CLEANUP_RTN $ EXIT $ ENDIF $! $ IF (P1 .EQS. "SQL" .OR. P1 .EQS. "ALL" .OR. P1 .EQS. "") - .AND. .NOT. SQL$$LOG_FOUND $ THEN $ WRITE SYS$OUTPUT " " $ WRITE SYS$OUTPUT "%You do not have any SQL MULTIVERSION or "+ - "STANDARD logicals defined." $ ENDIF $! $ IF (P1 .EQS. "DISPATCH" .OR. P1 .EQS. "ALL" .OR. P1 .EQS. "") - .AND. .NOT. RDB$$LOG_FOUND $ THEN $ WRITE SYS$OUTPUT " " $ WRITE SYS$OUTPUT "%You do not have any DISPATCH MULTIVERSION or "+ - "STANDARD logicals defined." $ ENDIF $! $ WRITE SYS$OUTPUT " " $ CALL CLEANUP_RTN $ EXIT $! $ RETURN_INSTALLED_VERSIONS: $! $ QUOTE=""" $ IF P2 .EQS. "NOSHOW" $ THEN $ P2 = "" $ P3 = "NOSHOW" $ ENDIF $! $ TEMP_VARIANT = "" $ IF P2 .NES. "SQL" .AND. P2 .NES. "DISPATCH" .AND. P2 .NES. "NOSHOW" $ THEN $ TEMP_VARIANT = P2 $ ELSE $ IF P3 .NES. "NOSHOW" $ THEN $ IF P4 .EQS. "NOSHOW" $ THEN $ TEMP_VARIANT = P3 $ P3 = "NOSHOW" $ ELSE $ TEMP_VARIANT = P3 $ ENDIF $ ENDIF $ ENDIF $! $ $ IF (TEMP_VARIANT .NES. "") .AND. F$EDIT(TEMP_VARIANT,"UPCASE") .NES. "S" $ THEN $ IF F$LOCATE(".",TEMP_VARIANT) .NE. F$LENGTH(TEMP_VARIANT) $ THEN $ MAJ_VER = "''F$ELEMENT(0,".", TEMP_VARIANT)'" $ MIN_VER = "''F$ELEMENT(1,".", TEMP_VARIANT)'" $ ELSE $ MAJ_VER = "''F$EXTRACT(0,1,TEMP_VARIANT)'" $ MIN_VER = "''F$EXTRACT(1,1,TEMP_VARIANT)'" $ TEMP_VARIANT = MAJ_VER + "." + MIN_VER $ ENDIF $ IF F$TYPE (MAJ_VER) .NES. "INTEGER" .OR. - F$TYPE (MIN_VER) .NES. "INTEGER" $ THEN $ WRITE SYS$OUTPUT "%SQL-E-SHOVER Invalid version specified" $ CALL CLEANUP_RTN $ EXIT %X10000000 $ ENDIF $ ENDIF $! $ $ IF P2 .EQS. "SQL" $ THEN $ IMAGE_FILE = "SQL$SHR*.EXE" $ CALL GET_IMAGE_IDENTS "''IMAGE_FILE'" "''TEMP_VARIANT'" "''P3'" $ ELSE $ IF P2 .EQS. "DISPATCH" $ THEN $ IMAGE_FILE = "RDB$SHARE*.EXE" $ CALL GET_IMAGE_IDENTS "''IMAGE_FILE'" "''TEMP_VARIANT'" "''P3'" $ ELSE $ IMAGE_FILE = "SQL$SHR*.EXE" $ CALL GET_IMAGE_IDENTS "''IMAGE_FILE'" "''TEMP_VARIANT'" "''P3'" $ IMAGE_FILE = "RDB$SHARE*.EXE" $ CALL GET_IMAGE_IDENTS "''IMAGE_FILE'" "''TEMP_VARIANT'" "''P3'" $ ENDIF $ ENDIF $ CALL CLEANUP_RTN $ EXIT $!---------------------------------------------------------------------- $! SUBROUTINES IN ALPHABETICAL ORDER $!---------------------------------------------------------------------- $ CLEANUP_RTN: SUBROUTINE $ ON WARNING THEN CONTINUE $ ON CONTROL_Y THEN CONTINUE $ CALL DELETE_SYMBOL SQL$$LOG_FOUND $ CALL DELETE_SYMBOL RDB$$LOG_FOUND $ ENDSUBROUTINE $ CONTROL_Y_EXIT_HANDLER: SUBROUTINE $ ON CONTROL_Y THEN CONTINUE $ ON WARNING THEN CONTINUE $ WRITE SYS$OUTPUT "%SQL-I-SHOVER CONTROLY User hit control Y" $ CALL CLEANUP_RTN $ STOP $ ENDSUBROUTINE $ DELETE_SYMBOL: SUBROUTINE $ ! (IN ) P1 = symbol $ SET NOON $ DEFINE/USER SYS$ERROR _NL: $ DEFINE/USER SYS$OUTPUT _NL: $ DELETE/SYMBOL/GLOBAL 'P1' $ SET ON $ ENDSUBROUTINE $ GET_IMAGE_IDENTS: SUBROUTINE $! $! This routine will define a logical for the common component passed $! which shows all the installed versions for the product. $! $! (IN) P1 = Image file name $! (IN) P2 = variant $! (IN) P3 = "" or NOSHOW $! (OUT) 'P1'$INSTALLED_VERSIONS - SQL or DISPATCH versions installed $! on the system $! $ ON WARNING THEN CALL WARNING_EXIT_HANDLER $ ON CONTROL_Y THEN CALL CONTROL_Y_EXIT_HANDLER $ SET NOON $ SQL$COMP = F$EXTRACT(0,4,P1) $ SQL$STANDARD_IMAGE = F$EXTRACT(0,F$LOCATE("*",P1),P1) + ".EXE" $ INSTALLED_VERSIONS = "" $! $ GET_NEXT: $! $ SQL$IMAGE_FILENAME = F$SEARCH("SYS$SHARE:''P1'") $ IF SQL$IMAGE_FILENAME .EQS. "" THEN GOTO FINISHED $ GOSUB GET_IDENT_FROM_IMAGE $ IF IDENT .EQS. "" THEN GOTO GET_NEXT $ ! $ ! If P2 is specified, then use it as a version number filter. $ ! $ IF (P2 .NES. "") .AND. F$EDIT(P2,"UPCASE") .NES. "S" $ THEN $ IF F$LOCATE(P2,IDENT) .EQ. F$LENGTH(IDENT) $ THEN GOTO GET_NEXT $ ENDIF $ ENDIF $ IF INSTALLED_VERSIONS .NES. "" $ THEN $ INSTALLED_VERSIONS = INSTALLED_VERSIONS+"," $ ENDIF $ SYM1=F$LENGTH(SQL$IMAGE_FILENAME) $ SYM2=F$LOCATE(SQL$STANDARD_IMAGE,SQL$IMAGE_FILENAME) $ IF SYM1 .EQ. SYM2 $ THEN $ INSTALLED_VERSIONS = INSTALLED_VERSIONS+"*" $ ENDIF $ INSTALLED_VERSIONS = INSTALLED_VERSIONS+IDENT $ IF F$EDIT(P2,"UPCASE") .EQS. "S" THEN GOTO FINISHED $ GOTO GET_NEXT $! $ FINISHED: $! $ IF SQL$COMP .EQS. "RDB$" THEN SQL$COMP = "RDB$DISPATCH_" $ IF INSTALLED_VERSIONS .EQS. "" $ THEN $ DEFINE/PROCESS/NOLOG 'SQL$COMP'INSTALLED_VERSIONS " " $ ELSE $ DEFINE/PROCESS/NOLOG 'SQL$COMP'INSTALLED_VERSIONS - 'INSTALLED_VERSIONS' $ ENDIF $ IF P3 .NES. "NOSHOW" THEN SHOW LOGICAL 'SQL$COMP'INSTALLED_VERSIONS $! $ EXIT $! $! Subroutine to get the image ident from the file SQL$IMAGE_FILENAME $! $ GET_IDENT_FROM_IMAGE: $ DEFINE/USER SYS$OUTPUT NL: $ DEFINE/USER SYS$ERROR NL: $ ANALYZE/IMAGE/OUTPUT=NLA0:/SELECT=IDENT 'SQL$IMAGE_FILENAME' $ IF .NOT. $STATUS $ THEN $ SHOW SYMBOL $STATUS $ WRITE SYS$OUTPUT "%SQL-E-UNEXERR Error analyzing image ''SQL$IMAGE_FILENAME'" $ CALL WARNING_EXIT_HANDLER $ ENDIF $ IDENT_STRING=ANALYZE$IDENTIFICATION $ T1=F$LOCATE(".",IDENT_STRING) $ IDENT_STRING=F$EXTRACT(T1-2,F$LENGTH(IDENT_STRING),IDENT_STRING) $ QUOTE_POS=F$LOCATE(QUOTE,IDENT_STRING) $ IF QUOTE_POS .EQ. F$LENGTH(IDENT_STRING) THEN GOTO VARIANT_1 $ IDENT=F$EXTRACT(0,QUOTE_POS,IDENT_STRING) $ RETURN $ !----------------------------------------------------------------------------- $ VARIANT_1: $ IDENT = "??.?-?" $ RETURN $ !----------------------------------------------------------------------------- $ ENDSUBROUTINE $ SHOW_VERSION: SUBROUTINE $! $! P1 = Common Component $! P2 = Logical name table $! $ SET NOON $ IF P1 .EQS. "RDB$DISPATCH_" $ THEN $ SQL$NAME = "Rdb/Dispatch" $ ELSE $ SQL$NAME = P1 - "$" $ ENDIF $ SQL$VER = F$TRNLNM("''P1'IDENT","LNM$''P2'") $ SQL$TYP = "MULTIVERSION" $ IF F$TRNLNM("''P1'VERSION_VARIANT","LNM$''P2'") .EQS. " " - THEN SQL$TYP = "STANDARD" $ IF SQL$VER .NES. "" $ THEN $ WRITE SYS$OUTPUT "Current ''P2' "+ - "''SQL$NAME' environment is version ''SQL$VER' (''SQL$TYP')" $ IF SQL$NAME .EQS. "SQL" $ THEN $ SQL$$LOG_FOUND == 1 $ ELSE $ RDB$$LOG_FOUND == 1 $ ENDIF $ ENDIF $! $ ENDSUBROUTINE $ WARNING_EXIT_HANDLER: SUBROUTINE $ ON CONTROL_Y THEN CONTINUE $ ON WARNING THEN CONTINUE $ WRITE SYS$OUTPUT "%SQL-I-SHOVER UNEXWARN Unexpected problem found ... unable to continue" $ CALL CLEANUP_RTN $ EXIT $ ENDSUBROUTINE $!--------------------------------------------------------------------------- $! END SUBROUTINES $!--------------------------------------------------------------------------- $ RETURN_DEBUG_INFO: $ IF F$TRNLNM("COM_HANDLE") .NES. "" THEN CLOSE COM_HANDLE $ IF F$TRNLNM("JNL_HANDLE") .NES. "" THEN CLOSE JNL_HANDLE $ IF F$TRNLNM("LOG_HANDLE") .NES. "" THEN CLOSE LOG_HANDLE $ WRITE SYS$OUTPUT "Logicals" $ SHO LOG RD*,SORT*,SQ*,RM*,LNM$* $ WRITE SYS$OUTPUT " " $ WRITE SYS$OUTPUT "Symbols" $ TEMP = "SYS$SCRATCH:" + F$GETJPI("","PID") $ TEMP_COM = TEMP + ".COM" $ TEMP_LOG = TEMP + ".LOG" $ IF F$SEARCH(TEMP_COM) .NES. "" THEN DELETE/NOLOG 'TEMP.COM';* $ OPEN/WRITE COM_HANDLE 'TEMP_COM $ WRITE COM_HANDLE "$SHO SYM RD*" $ WRITE COM_HANDLE "$SHO SYM RM*" $ WRITE COM_HANDLE "$SHO SYM SQ*" $ CLOSE COM_HANDLE $ DEFINE/USER SYS$OUTPUT NL: $ DEFINE/USER SYS$ERROR NL: $ @'TEMP_COM/OUT='TEMP_LOG $ DELETE 'TEMP.COM';*/NOLOG $ OPEN/READ LOG_HANDLE 'TEMP_LOG $ DEBUG_SYM: $ READ/END_OF_FILE=DEBUG_END LOG_HANDLE LOG_RECORD $ IF F$EXTRACT(0,1,LOG_RECORD) .EQS. " " THEN WRITE SYS$OUTPUT LOG_RECORD $ GOTO DEBUG_SYM $ DEBUG_END: $ CLOSE LOG_HANDLE $ DELETE/NOLOG 'TEMP_LOG';* $ WRITE SYS$OUTPUT " " $ SHOW SYSTEM/OUTPUT='TEMP_LOG $ SEARCH/NOSTAT/NOHEADING/NOHIGHLIGHT 'TEMP_LOG RDMS_MONITOR,"VMS" $ DELETE/NOLOG 'TEMP_LOG';* $ WRITE SYS$OUTPUT " " $ WRITE SYS$OUTPUT "Filename Image"+ - " Name Image Id Link Date-Time" $ IMAGES = "SYS$SHARE:RD*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ IMAGES = "SYS$SHARE:SQ*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ IMAGES = "SYS$SYSTEM:RD*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ IMAGES = "SYS$SYSTEM:RMU*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ IMAGES = "SYS$SYSTEM:SQ*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ IMAGES = "SYS$MESSAGE:RD*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ IMAGES = "SYS$MESSAGE:RMU*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ IMAGES = "SYS$MESSAGE:SQ*.EXE;*" $ GOSUB PRINT_IMAGES_INFO $ EXIT $ PRINT_IMAGES_INFO: $ IMAGE = F$SEARCH(IMAGES,1) $ IF IMAGE .NES. "" $ THEN $ GOSUB PRINT_IMAGE_INFO $ GOTO PRINT_IMAGES_INFO $ ENDIF $ RETURN $ PRINT_IMAGE_INFO: $ IMAGE_TEMP = IMAGE $ SEMICOLON = F$LOCATE(";",IMAGE) $ IF SEMICOLON .NE. F$LENGTH(IMAGE) THEN - IMAGE_TEMP = F$EXTRACT(0,SEMICOLON,IMAGE) $ TEMP = "SYS$SCRATCH:" + F$GETJPI("","PID") $ TEMP_COM = TEMP + ".COM" $ TEMP_LOG = TEMP + ".LOG" $ TEMP_JNL = TEMP + ".JNL" $ IF F$SEARCH(TEMP_COM) .NES. "" THEN DELETE/NOLOG 'TEMP.COM';* $ OPEN/WRITE COM_HANDLE 'TEMP_COM $ WRITE COM_HANDLE "$ SET NOVERIFY" $ WRITE COM_HANDLE "$ SET NOON" $ WRITE COM_HANDLE "$ DEFINE/USER SYS$ERROR NL:" $ WRITE COM_HANDLE "$ INSTALL LIST ''IMAGE_TEMP'" $ WRITE COM_HANDLE "$ WRITE SYS$OUTPUT ""EOINSTAL""" $ WRITE COM_HANDLE "$ ANAL/IMA/INT ''IMAGE'" $ WRITE COM_HANDLE " " $ WRITE COM_HANDLE " " $ WRITE COM_HANDLE " " $ WRITE COM_HANDLE " " $ WRITE COM_HANDLE " " $ WRITE COM_HANDLE "." $ CLOSE COM_HANDLE $ @'TEMP_COM/OUT='TEMP_LOG $ DELETE/NOLOG 'TEMP.COM';* $ INSTALL_FLAG = "1" $ OPEN/READ LOG_HANDLE 'TEMP_LOG $ READ_AGAIN: $ READ LOG_HANDLE LOG_RECORD $ LOG_RECORD_LENGTH = F$LENGTH(LOG_RECORD) $ IF INSTALL_FLAG .EQS. "1" $ THEN $ IF F$LOCATE("%INSTALL",LOG_RECORD) .NE. LOG_RECORD_LENGTH $ THEN $ INSTALL_FLAG = "2" $ GOTO READ_AGAIN $ ELSE $ IF F$LOCATE(".",LOG_RECORD) .EQ. LOG_RECORD_LENGTH $ THEN $ GOTO READ_AGAIN $ ELSE $ INSTALLED = "''LOG_RECORD'" $ READ LOG_HANDLE LOG_RECORD $ INSTALLED = INSTALLED + "''LOG_RECORD'" $ READ LOG_HANDLE LOG_RECORD $ IF F$LOCATE("EOINSTAL",LOG_RECORD) .NE. F$LENGTH(LOG_RECORD) $ THEN $ READ LOG_HANDLE LOG_RECORD $ INSTALLED = INSTALLED + "''LOG_RECORD" $ ENDIF $ INSTALLED = F$EDIT(INSTALLED,"COMPRESS") $ INSTALL_FLAG = "3" $ GOTO READ_AGAIN $ ENDIF $ ENDIF $ ENDIF $ IF F$EXTRACT(0,10,F$EDIT(LOG_RECORD,"COLLAPSE")) .NES. "imagename:" - THEN GOTO READ_AGAIN $ IMAGE_INFO = IMAGE $ IMAGE_NAME = F$EXTRACT(F$LOCATE(":",LOG_RECORD)+2,30,LOG_RECORD) $ READ LOG_HANDLE LOG_RECORD $ IMAGE_ID = F$EXTRACT(F$LOCATE(":",LOG_RECORD)+2,30,LOG_RECORD) $ READ LOG_HANDLE LOG_RECORD $ LINK_DATE = F$EXTRACT(F$LOCATE(":",LOG_RECORD)+2,30,LOG_RECORD) $ CLOSE LOG_HANDLE $ DELETE/NOLOG 'TEMP_LOG';* $ IMAGE_INFO = F$EXTRACT(0,45,IMAGE_INFO+ - " ") $ IMAGE_NAME = F$EXTRACT(0,16,IMAGE_NAME+" ") $ IMAGE_ID = F$EXTRACT(0,25,IMAGE_ID+" ") $ LINK_DATE = F$EXTRACT(0,24,LINK_DATE+" ") $ GOSUB IMAGE_INFO_PROTECTION $ WRITE SYS$OUTPUT IMAGE_INFO+IMAGE_NAME+IMAGE_ID+LINK_DATE+PROTECTION $ IF F$SEARCH(TEMP_JNL) .NES. "" THEN DELETE/NOLOG 'TEMP_JNL';* $ DEFINE/USER SYS$OUTPUT NL: $ DEFINE/USER SYS$ERROR NL: $ PATCH 'IMAGE'/JOURNAL='TEMP_JNL' EXIT $ READ_JNL_AGAIN: $ OPEN/READ JNL_HANDLE 'TEMP_JNL $ READ/END_OF_FILE=END_JNL_READ JNL_HANDLE JNL_RECORD $ IF F$EXTRACT(0,14,JNL_RECORD) .EQS. "ECO LEVELS SET" THEN - WRITE SYS$OUTPUT " "+F$EDIT(JNL_RECORD,"COMPRESS") $ GOTO READ_JNL_AGAIN $ END_JNL_READ: $ CLOSE JNL_HANDLE $ DELETE/NOLOG 'TEMP_JNL';* $ IF INSTALL_FLAG .EQS. "3" THEN WRITE SYS$OUTPUT " "+INSTALLED $ RETURN $ IMAGE_INFO_PROTECTION: $ DIRECTORY/NOSIZ/NODAT/OUT='TEMP_LOG/PROT 'IMAGE $ OPEN/READ LOG_HANDLE 'TEMP_LOG $ IMAGE_INFO_READ_AGAIN: $ READ LOG_HANDLE LOG_RECORD $ COLON_POS = F$LOCATE("(",LOG_RECORD) $ IF COLON_POS .EQ. F$LENGTH(LOG_RECORD) THEN GOTO IMAGE_INFO_READ_AGAIN $ PROTECTION = F$EXTRACT(COLON_POS,40,LOG_RECORD) $ CLOSE LOG_HANDLE $ DELETE/NOLOG 'TEMP_LOG';* $ RETURN