Skip to content

Instantly share code, notes, and snippets.

@tuklusan
Last active March 7, 2019 18:51
Show Gist options
  • Save tuklusan/4666755385686ebaeb4eb1aa0e9f4a5c to your computer and use it in GitHub Desktop.
Save tuklusan/4666755385686ebaeb4eb1aa0e9f4a5c to your computer and use it in GitHub Desktop.
A OpenVMS DCL script to map and report HECnet (the Hobbyist DECnet) nodes in HTML files for WASD OpenVMS Web Server | http://supratim-sanyal.blogspot.com/2016/11/yet-another-openvms-dcl-command.html
$! SET NOVERIFY
$ SET NOON
$ ON CONTROL_Y THEN GOTO ERR_EXIT
$!
$! -----------------------
$! HECNET-SCAN.COM
$!
$! READS LIST OF HECnet NODES, CREATES HTML FILES CONTAINING LIST, AND DETAILED STATUS OF INDIVIDUAL REACHABLE NODES
$! SEE THE FOLLOWING URL FOR OUTPUT OF THIS PROCEDURE:
$! http://sanyalnet-openvms-vax.freeddns.org:82/falserver/hecnet-status.html
$!
$! CONFIGURATION:
$!
$! NODENAME_DAT_FILE: FULL PATH AND FILENAME OF HECnet NODES LIST (MAINTAINED ON MIM:: (1.13) BY JOHNNY)
$!
$! OUTPUT_HTML: FULL PATH AND FILENAME OF HECnet NODE SUMMARY LIST INDEX FILE; THIS FILE LINKS TO SEPARATE FILES PER REACHABLE NODE
$!
$! NODEDETAIL_DIR: DIRECTORY WHERE INDIVIDUAL NODE DETAILS HTML FILES WILL BE PLACED (FILENAMES ARE GENERATED BY THE SCRIPT)
$!
$! NODEDETAIL_DIR_URI_BASE: URI OF DIRECTORY OF NODE DETAILS FILES AS SERVED BY WEB-SERVER; FILENAMES OF NODE DETAIL FILES WILL
$! BE GENERATED AND APPENDED TO THIS BY THE SCRIPT WHEN GENERATING THE HTML FILES
$!
$! HECNET_TEST_NODE: DECNET ADDRESS OF HECnet NODE TO TEST FOR HECnet ACCESSIBLILITY. IF THIS NODE IS UNREACHABLE, SCRIPT DOES NOTHING AND EXITS.
$!
$! VERSION HISTORY
$!
$! NOV 11, 2016: REV 1.0 INITIAL RELEASE
$! NOV 13, 2016: REV 1.1 ADDED VIEWPORT,FAVICON IN HTML HEAD
$! NOV 17, 2016: REV 1.2 ADDED FREEFIND.COM SITE SEARCH BOX
$! NOV 27, 2016: REV 2.0 ADDED SUPPORT FOR PHASE IV AND PHASE V OSI NODES
$! MAKE NODE-SPECIFIC URLS LOWERCASE
$! DEC 02, 2016: REV 2.1 SPECIFY GNU AGPLv3 LICENSE
$! SEP 26, 2017: REV 2.2 ADD DESCRIPTION IN HEAD
$! NOV 19, 2017: REV 2.3 ADD BREADCRUMBS
$! FEB 10, 2019: REV 2.4 ADD CANONICAL URL, ADJACENT NODES
$! MAR 07, 2019: REV 2.5 USE NCP LOOP FOR INITIAL REACHABLE TEST
$! USE NCP SHOW EXEC STATUS TO TRY TO IDENTIFY
$! PHASE IV OR V, OR CISCO ROUTERS WITH NO NML OBJECT
$!
$! (C) SUPRATIM SANYAL <SUPRATIM AT RISEUP DOT NET>
$! FREELY USABLE AND REDISTRIBUTABLE UNDER GNU AGPLv3
$! LICENSE: http://tuklusan.decsystem.org/agpl-3.0-standalone.html
$! -----------------------
$!
$! -- START CONFIGURATION
$! NODENAME_DAT_FILE="DUA1:[SANYAL.MISC]x.dat"
$ NODENAME_DAT_FILE="DUA2:[FAL$SERVER]NODENAMES.DAT"
$ OUTPUT_HTML="DUA2:[FAL$SERVER]HECNET-STATUS.HTML"
$ NODEDETAIL_DIR="DUA2:[FAL$SERVER.HECNET-NODE-DETAILS]"
$ NODEDETAIL_DIR_URI_BASE="/falserver/hecnet-node-details"
$ HECNET_TEST_NODE="1.13" ! MIM::
$! -- END CONFIGURATION
$!
$!
$ TEMPFILE_UNREACHABLE="SYS$SCRATCH:HECNET-SCAN-NOK.TMP"
$ TEMPFILE_REACHABLE="SYS$SCRATCH:HECNET-SCAN-OK.TMP"
$ LOCALNODENAME=F$GETSYI("NODENAME")
$ LOCALAREA=F$GETSYI("NODE_AREA")
$ LOCALNODE=F$GETSYI("NODE_NUMBER")
$ LOCALHOST="''LOCALAREA'.''LOCALNODE'"
$ NCP="MCR NCP"
$ NCL="MCR NCL"
$!
$! IF TEST NODE IS UNREACHABLE HECNET IS DOWN OR UNREACHABLE, DO NOTHING IN THAT CASE
$! TEST NODE IS PHASE IV - USE NCP
$ NCP TELL 'HECNET_TEST_NODE' SHOW NODE 'HECNET_TEST_NODE' STATUS
$ NCPSTAT=$STATUS
$ IF NCPSTAT .NE. %X10000001
$ THEN
$ WRITE SYS$OUTPUT "%HECNET-E-UNREACHABLE HECNET SEEMS TO BE UNREACHABLE, EXITING."
$ WRITE SYS$ERROR "%HECNET-E-UNREACHABLE HECNET SEEMS TO BE UNREACHABLE, EXITING."
$ EXIT
$ ENDIF
$!
$!
$ OPEN/READ/ERROR=ERR_EXIT NODENAMES 'NODENAME_DAT_FILE'
$ OPEN/WRITE/ERROR=ERR_EXIT TEMPFILEOK 'TEMPFILE_REACHABLE'
$ OPEN/WRITE/ERROR=ERR_EXIT TEMPFILENOK 'TEMPFILE_UNREACHABLE'
$ OPEN/WRITE/ERROR=ERR_EXIT OUTPUTHTML 'OUTPUT_HTML'_TMP
$!
$ WRITE OUTPUTHTML F$FAO("<HTML><HEAD><TITLE>VIEW OF HECnet FROM !AS (!AS) AT !%D</TITLE><META NAME=""AUTHOR"" CONTENT=""SUPRATIM SANYAL (SUPRATIM AT RISEUP DOT NET)""><link rel=""stylesheet"" href=""/styles/styles.css"">",LOCALNODENAME,LOCALHOST,0)
$ WRITE OUTPUTHTML F$FAO("<link rel=""canonical"" href=""http://sanyalnet-openvms-vax.freeddns.org:82/falserver/hecnet-status.html"">")
$ WRITE OUTPUTHTML F$FAO("<link rel=""shortcut icon"" href=""/favicon.ico""><link rel=""icon"" href=""/favicon.ico""><meta name=""viewport"" content=""initial-scale=1"">")
$ WRITE OUTPUTHTML "</HEAD><BODY>"
$!
$! Breadcrumb
$ WRITE OUTPUTHTML "<p><a href=""/"">QCOCAL VAX</a>&nbsp;&raquo;&nbsp;<a href=""/falserver/hecnet-status.html"">HECnet</a></p>"
$!
$ WRITE OUTPUTHTML F$FAO("<P><IMG WIDTH="260" HEIGHT="162" SRC=""/qcocal-logo.jpg"" ALT=""QCOCAL DIGITAL DEC OPENVMS VAX SANYALnet HOBBYIST SERVER VAXserver 3900 Series with OPENVMS 7.3 Operating System""></P><P></P>")
$ WRITE OUTPUTHTML F$FAO("<H1>VIEW OF HECnet FROM !AS (!AS)</H1><H2>!%D</H2>",LOCALNODENAME,LOCALHOST,0)
$!
$ WRITE OUTPUTHTML "<p>Search for HECnet Nodes and More on this server:</p><!-- freefind.com http://sanyalnet-openvms-vax.freeddns.org:82/ freefindcom1 at tuklusan dot 33mail dot com -->"
$ WRITE OUTPUTHTML "<!-- start of freefind search box html --><table cellpadding=0 cellspacing=0 border=0 ><tr><td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"">"
$ WRITE OUTPUTHTML "<center><table width=""90%"" cellpadding=0 cellspacing=0 border=0 style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" ><tr>"
$ WRITE OUTPUTHTML "<td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" align=left ><a href=""http://search.freefind.com/siteindex.html?si=74775162"">index</a></td>"
$ WRITE OUTPUTHTML "<td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" align=center><a href=""http://search.freefind.com/find.html?si=74775162&amp;m=0&amp;p=0"">sitemap</a></td>"
$ WRITE OUTPUTHTML "<td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" align=right><a href=""http://search.freefind.com/find.html?si=74775162&amp;pid=a"">advanced</a></td>"
$ WRITE OUTPUTHTML "</tr></table></center><form style=""margin:0px; margin-top:4px;"" action=""http://search.freefind.com/find.html"" method=""get"" accept-charset=""utf-8"" target=""_self"">"
$ WRITE OUTPUTHTML "<input type=""hidden"" name=""si"" value=""74775162""><input type=""hidden"" name=""pid"" value=""r""><input type=""hidden"" name=""n"" value=""0""><input type=""hidden"" name=""_charset_"" value="""">"
$ WRITE OUTPUTHTML "<input type=""hidden"" name=""bcd"" value=""&#247;""><input type=""text"" name=""query"" size=""32"">"
$ WRITE OUTPUTHTML "<input type=""submit"" value=""search""></form></td></tr><tr>"
$ WRITE OUTPUTHTML "<td style=""text-align:center; font-family: Arial, Helvetica, sans-serif;font-size: 7.5pt; padding-top:4px;"">"
$ WRITE OUTPUTHTML "<a style=""text-decoration:none; color:gray;"" href=""http://www.freefind.com"" >site search</a><a style=""text-decoration:none; color:gray;"" href=""http://www.freefind.com"" > by"
$ WRITE OUTPUTHTML "<span style=""color: #606060;"">freefind</span></a></td></tr></table><!-- end of freefind search box html -->"
$!
$ WRITE TEMPFILEOK F$FAO("<H2>REACHABLE HECnet NODES</H2><OL>")
$ WRITE TEMPFILENOK F$FAO("<H2>UNREACHABLE HECnet NODES</H2><OL>")
$!
$! Skip over first four heading lines
$ READ/END_OF_FILE=NODELIST_EXIT NODENAMES LINE
$ READ/END_OF_FILE=NODELIST_EXIT NODENAMES LINE
$ READ/END_OF_FILE=NODELIST_EXIT NODENAMES LINE
$ READ/END_OF_FILE=NODELIST_EXIT NODENAMES LINE
$!
$Disk_ReadLoop:
$ READ/END_OF_FILE=NODELIST_EXIT NODENAMES LINE
$!1.2 ERNIE
$ DECNETADDR=F$EDIT(F$EXTRACT(0,12,LINE),"TRIM,COMPRESS")
$ NODENAME=F$EDIT(F$EXTRACT(12,6,LINE),"TRIM,COMPRESS")
$!
$ IF DECNETADDR .EQS. LOCALHOST
$ THEN
$ GOTO Disk_ReadLoop ! SKIP THIS LOCALHOST
$ ENDIF
$
$! -- START OLD CODE --
$! DECNET_PHASE=0
$!! TRY PHASE IV NCP
$!! NCP TELL 'DECNETADDR' SHOW NODE 'DECNETADDR' STATUS ! Does not work on DOS NML V5.0.001 (on WFW311)
$! NCP TELL 'DECNETADDR' SHOW EXECUTOR SUMMARY
$! NCPSTAT=$STATUS
$! IF NCPSTAT .EQ. %X10000001
$! THEN
$! DECNET_PHASE=4
$! ELSE
$!! TRY PHASE V OSI NCL
$! NCL SHOW NODE 'DECNETADDR'
$! NCPSTAT=$STATUS
$! IF NCPSTAT .EQ. %X10000001
$! THEN
$! DECNET_PHASE=5
$! ENDIF
$! ENDIF
$! IF DECNET_PHASE .EQ. 0
$! -- END OLD CODE --
$
$! TRY A LOOP COMMAND; IF RESULT IS ANYTHING EXCEPT "%SYSTEM-F-UNREACHABLE" ASSUME NODE IS REACHABLE
$ PIPE (NCP LOOP NODE 'DECNETADDR') | SEARCH SYS$INPUT "%SYSTEM-F-UNREACHABLE"
$ NCPSTAT=$STATUS ! SEARCH RESULT: %X10000001 = SUCCESS, %X18D78053 = FAILED
$ IF NCPSTAT .EQ. %X10000001 ! NODE IS UNREACHABLE
$ THEN
$ NODESTATUS=F$FAO("<LI><PRE>!6AS !7AS UNREACHABLE</PRE></LI>", NODENAME, DECNETADDR)
$ WRITE TEMPFILENOK "''NODESTATUS'"
$ ELSE ! IS REACHABLE
$! TRY TO FIGURE OUT IF THIS IS A PHASE-IV, PHASE-V or CISCO ROUTER NODE
$ DECNET_PHASE=0
$ NCP TELL 'DECNETADDR' SHOW EXECUTOR STATUS
$ NCPSTAT=$STATUS
$ IF NCPSTAT .EQ. %X10000001 ! PHASE-IV NODE
$ THEN
$ DECNET_PHASE=4
$ ELSE
$ IF NCPSTAT .EQ. %X11F88800 ! PROBABLY A PHASE-V NODE
$ THEN
$ DECNET_PHASE=5
$ ELSE
$ IF NCPSTAT .EQ. %X11F8807A ! NO NML OBJECT - PROBABLY CISCO ROUTER
$ THEN
$ DECNET_PHASE=9
$ ENDIF
$ ENDIF
$ ENDIF
$!
$ CALL GET_NODE_INFO 'DECNETADDR' 'NODENAME' 'DECNET_PHASE'
$!
$ ENDIF
$!
$ GOTO Disk_ReadLoop
$!
$NODELIST_EXIT:
$ CLOSE NODENAMES
$!
$ WRITE TEMPFILEOK "</OL><P></P>"
$!
$ WRITE TEMPFILENOK "</OL><P></P><H2>HECnet</H2>"
$ WRITE TEMPFILENOK "<P>HECnet is the oldest world-wide hobbyist DECnet network connecting people who play around with different machines that have the DECnet protocol suite. "
$ WRITE TEMPFILENOK "Visit the <A HREF=""http://www.update.uu.se/~bqt/hecnet.html"" TARGET=""_BLANK"">HECnet Official Website</A>.</P>"
$!
$! START GOOGLE CSE SEARCH BOX
$ WRITE TEMPFILENOK "<p></p><p>Search SANYALNET Hobbyist Servers and Services</p><div id=""google-cse""><!-- Google Custom Search via sanyal.duckdns.org.openvms.vax at gmail --><script>"
$ WRITE TEMPFILENOK F$FAO("(function() { var cx = '015567988034387983255:4ulgqks3d_a'; var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true;")
$ WRITE TEMPFILENOK F$FAO(" gcse.src = 'https://cse.google.com/cse.js?cx=' + cx; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); })(); </script>")
$ WRITE TEMPFILENOK F$FAO(" <gcse:search></gcse:search></div><p></p>")
$! END GOOGLE CSE SEARCH BOX
$!
$ WRITE TEMPFILENOK "<P>Proudly generated by a DCL Command Procedure and served by WASD Web Server from a Digital DEC VAXserver 3900 Series computer running OpenVMS VAX 7.3 Operating System.</P>"
$ WRITE TEMPFILENOK "<P>&copy; SUPRATIM SANYAL (<A HREF=""https://goo.gl/FqzyBW"" TARGET=""_BLANK"">EMAIL</A>)"
$ WRITE TEMPFILENOK " (<A HREF=""http://supratim-sanyal.blogspot.com/"" TARGET=""_BLANK"">BLOG</A>)"
$ WRITE TEMPFILENOK " (<A HREF=""http://www.sanyal.org/"" TARGET=""_BLANK"">Website</A>)"
$ WRITE TEMPFILENOK "</P><P><A HREF=""/"">HOME</A></P>"
$ WRITE TEMPFILENOK "<!-- McAfee SECURE Certification --><script type=""text/javascript"" src=""https://cdn.ywxi.net/js/1.js"" async></script></BODY></HTML>"
$!
$ CLOSE TEMPFILENOK
$ CLOSE TEMPFILEOK
$!
$ CLOSE OUTPUTHTML
$ APPEND 'TEMPFILE_REACHABLE' 'OUTPUT_HTML'_TMP
$ APPEND 'TEMPFILE_UNREACHABLE' 'OUTPUT_HTML'_TMP
$ COPY/NOLOG/NOCONF 'OUTPUT_HTML'_TMP 'OUTPUT_HTML'
$!
$ SET FILE/PROT=(W:R) 'OUTPUT_HTML'
$ PURGE/KEEP=2 'OUTPUT_HTML'_TMP
$ PURGE/KEEP=2 'OUTPUT_HTML'
$ DELETE/NOLOG/NOCONF 'TEMPFILE_REACHABLE';*
$ DELETE/NOLOG/NOCONF 'TEMPFILE_UNREACHABLE';*
$ EXIT
$!
$ERR_EXIT:
$! Close files just in case they are still open
$ CLOSE OUTPUTHTML
$ CLOSE TEMPFILENOK
$ CLOSE TEMPFILEOK
$ CLOSE NODENAMES
$ CLOSE TEMPDETAILFILE
$ EXIT
$!
$! ---------------------------------
$GET_NODE_INFO:
$ SUBROUTINE
$! ---------------------------------
$!
$! Parameters: P1=REMOTE DECNET ADDRESS (X.Y), P2=REMOTE DECNET NODENAME, P3=REMOTE DECNET PHASE: 4 OR 5, OR 9=NO NML(CISCO SWITCH?)
$!
$ SET NOON
$!
$ REMOTE_DECNET_AREA=F$ELEMENT(0,".",P1)
$ REMOTE_DECNET_NODENUM=F$ELEMENT(1,".",P1)
$ REMOTE_DECNET_PHASE=P3
$!
$ NODEDETAIL_URL=F$FAO("!AS/!AS_!AS-!AS.html",NODEDETAIL_DIR_URI_BASE, REMOTE_DECNET_AREA, REMOTE_DECNET_NODENUM, F$EDIT(P2,"TRIM,LOWERCASE")) ! MUST BE SAME FILENAME AS NODEDETAIL_FILE THREE LINES BELOW
$ NODESTATUS=F$FAO("<LI><PRE>!6AS !7AS <A HREF=""""!AS"""" TARGET=""""_BLANK"""">DECnet DETAILS</A></PRE></LI>",P2,P1,NODEDETAIL_URL)
$ WRITE TEMPFILEOK "''NODESTATUS'"
$!
$ NODEDETAIL_FILE=F$FAO("!AS!AS_!AS-!AS.html",NODEDETAIL_DIR, REMOTE_DECNET_AREA, REMOTE_DECNET_NODENUM, F$EDIT(P2,"TRIM,LOWERCASE"))
$!
$ OPEN/WRITE/ERROR=SUB_EXIT TEMPDETAILFILE 'NODEDETAIL_FILE'
$!
$ WRITE TEMPDETAILFILE F$FAO("<HTML><HEAD><link rel=""stylesheet"" href=""/styles/styles.css"">")
$ WRITE TEMPDETAILFILE F$FAO("<TITLE>OPENVMS VAX DECNET | HECnet NODE !AS (!AS) REPORT FROM !AS (!AS) DIGITAL DEC VAXserver 3900</TITLE><META NAME=""AUTHOR"" CONTENT=""SUPRATIM SANYAL (SUPRATIM AT RISEUP DOT NET)"">",P2,P1,LOCALNODENAME,LOCALHOST)
$ WRITE TEMPDETAILFILE F$FAO("<META NAME=""DESCRIPTION"" CONTENT=""DECnet node information reported by !AS (!AS) to !AS (!AS) Digital DEC VAX VAXserver 3900 running OpenVMS 7.3 operating system over HECnet"">",P2,P1,LOCALNODENAME,LOCALHOST)
$ WRITE TEMPDETAILFILE F$FAO("<link rel=""shortcut icon"" href=""/favicon.ico""><link rel=""icon"" href=""/favicon.ico""><meta name=""viewport"" content=""initial-scale=1""></HEAD><BODY>")
$!
$! Breadcrumb
$ WRITE TEMPDETAILFILE "<p><a href=""/"">QCOCAL VAX</a>&nbsp;&raquo;&nbsp;<a href=""/falserver/hecnet-status.html"">HECnet</a>&nbsp;&raquo;&nbsp;"
$ WRITE TEMPDETAILFILE "<a href=""''NODEDETAIL_URL'"">''P2' (''P1')</a></p>"
$!
$!
$ WRITE TEMPDETAILFILE F$FAO("<P><IMG WIDTH="260" HEIGHT="162" SRC=""/qcocal-logo.jpg"" ALT=""QCOCAL DIGITAL DEC OPENVMS VAX SANYALNET HOBBYIST SERVER VAXserver 3900 Series with OPENVMS 7.3 Operating System""></P>")
$!
$ WRITE TEMPDETAILFILE "<p>Search for HECnet Nodes and More on this server:</p><!-- freefind.com http://sanyalnet-openvms-vax.freeddns.org:82/ freefindcom1 at tuklusan dot 33mail dot com -->"
$ WRITE TEMPDETAILFILE "<!-- start of freefind search box html --><table cellpadding=0 cellspacing=0 border=0 ><tr><td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"">"
$ WRITE TEMPDETAILFILE "<center><table width=""90%"" cellpadding=0 cellspacing=0 border=0 style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" ><tr>"
$ WRITE TEMPDETAILFILE "<td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" align=left ><a href=""http://search.freefind.com/siteindex.html?si=74775162"">index</a></td>"
$ WRITE TEMPDETAILFILE "<td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" align=center><a href=""http://search.freefind.com/find.html?si=74775162&amp;m=0&amp;p=0"">sitemap</a></td>"
$ WRITE TEMPDETAILFILE "<td style=""font-family: Arial, Helvetica, sans-serif; font-size: 7.5pt;"" align=right><a href=""http://search.freefind.com/find.html?si=74775162&amp;pid=a"">advanced</a></td>"
$ WRITE TEMPDETAILFILE "</tr></table></center><form style=""margin:0px; margin-top:4px;"" action=""http://search.freefind.com/find.html"" method=""get"" accept-charset=""utf-8"" target=""_self"">"
$ WRITE TEMPDETAILFILE "<input type=""hidden"" name=""si"" value=""74775162""><input type=""hidden"" name=""pid"" value=""r""><input type=""hidden"" name=""n"" value=""0""><input type=""hidden"" name=""_charset_"" value="""">"
$ WRITE TEMPDETAILFILE "<input type=""hidden"" name=""bcd"" value=""&#247;""><input type=""text"" name=""query"" size=""32"">
$ WRITE TEMPDETAILFILE "<input type=""submit"" value=""search""></form></td></tr><tr>"
$ WRITE TEMPDETAILFILE "<td style=""text-align:center; font-family: Arial, Helvetica, sans-serif;font-size: 7.5pt; padding-top:4px;"">"
$ WRITE TEMPDETAILFILE "<a style=""text-decoration:none; color:gray;"" href=""http://www.freefind.com"" >site search</a><a style=""text-decoration:none; color:gray;"" href=""http://www.freefind.com"" > by"
$ WRITE TEMPDETAILFILE "<span style=""color: #606060;"">freefind</span></a></td></tr></table><!-- end of freefind search box html --><P></P>"
$!
$ WRITE TEMPDETAILFILE F$FAO("<P></P><H1>HECnet NODE !AS - !AS</H1><H2>!%D</H2><P></P>",P2,P1,0)
$!
$! ++ -- Disabling retrieval of INFO.TXT - causes unwanted access attempts logged at target nodes that don't have it
$! WRITE TEMPDETAILFILE "<H3>INFO.TXT</H3><PRE>"
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! TYPE 'P1'::INFO.TXT
$! WRITE TEMPDETAILFILE "</PRE>"
$! --
$!
$ IF REMOTE_DECNET_PHASE .EQ. 4
$ THEN
$ WRITE TEMPDETAILFILE "<H3>DECnet PHASE IV REPORT FOR NODE ''P2' (''P1')</H3>"
$ WRITE TEMPDETAILFILE "<PRE>"
$ DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$ NCP TELL 'P1' SHOW NODE 'P1' SUMMARY
$ DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$ NCP TELL 'P1' SHOW NODE 'P1' STATUS
$ WRITE TEMPDETAILFILE "</PRE><H3>KNOWN LINES</H3><PRE>"
$!
$ DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$ NCP TELL 'P1' SHOW KNOWN LINES
$ WRITE TEMPDETAILFILE "</PRE><H3>EXECUTOR AND CIRCUIT CHARACTERISTICS</H3><PRE>"
$!
$ DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$ NCP TELL 'P1' SHOW EXECUTOR CHARACTERISTICS
$!
$ DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$ NCP TELL 'P1' SHOW KNOWN CIRCUIT CHARACTERISTICS
$ WRITE TEMPDETAILFILE "</PRE><H3>KNOWN AREAS / ROUTING</H3><PRE>"
$!
$ DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$ NCP TELL 'P1' SHOW KNOWN AREA
$ WRITE TEMPDETAILFILE "</PRE><H3>ADJACENT NODES</H3><PRE>"
$!
$ DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$ NCP TELL 'P1' SHOW ADJACENT NODES
$! +++ Do not make FAL contents public on the internet ---
$! WRITE TEMPDETAILFILE "</PRE><H3>SHARED FILES</H3><PRE>"
$!
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! DIR/SIZE/DATE 'P1'::
$! ---
$ WRITE TEMPDETAILFILE "</PRE>"
$ ELSE
$ IF REMOTE_DECNET_PHASE .EQ. 5
$ THEN
$ WRITE TEMPDETAILFILE "<H3>DECnet PHASE V OSI REPORT FOR NODE ''P2' (''P1')</H3>"
$ WRITE TEMPDETAILFILE "<P>PHASE-V OR DECnet-PLUS DATA NOT AVAILABLE</P>"
$! -- NO PHASE-V DATA AVAILABLE
$! WRITE TEMPDETAILFILE "<H3>EXECUTOR SUMMARY</H3><PRE>"
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' ALL STATUS
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' SESSION CONTROL ALL STATUS
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' NSP ALL STATUS
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' ROUTING ALL STATUS
$! WRITE TEMPDETAILFILE "</PRE>"
$!!
$! WRITE TEMPDETAILFILE "<H3>EXECUTOR CHARACTERISTICS</H3><PRE>"
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' ALL CHAR
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' SESSION CONTROL ALL CHAR
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' NSP ALL CHAR
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' ROUTING ALL CHAR
$! WRITE TEMPDETAILFILE "</PRE>"
$!!
$! WRITE TEMPDETAILFILE "<H3>NSP CHARACTERISTICS</H3><PRE>"
$! DEFINE/USER SYS$OUTPUT TEMPDETAILFILE ! Valid for only next image execution
$! NCL SHOW NODE 'P1' NSP ALL CHAR
$! WRITE TEMPDETAILFILE "</PRE>"
$! ----
$ ELSE
$ IF REMOTE_DECNET_PHASE .EQ. 9
$ THEN
$ WRITE TEMPDETAILFILE "<H3>DECnet REPORT FOR NODE ''P2' (''P1')</H3>"
$ WRITE TEMPDETAILFILE "<P>NOT AVAILABLE - NO REMOTE NML OBJECT (POSSIBLY A CISCO ROUTER OR SWITCH)</P>"
$ ELSE
$ WRITE SYS$OUTPUT "%DECNET-PHASE-INVALID UNKNOWN DECNET PHASE ''REMOTE_DECNET_PHASE' FOR NODE ''P1'"
$ WRITE SYS$ERROR "%DECNET-PHASE-INVALID UNKNOWN DECNET PHASE ''REMOTE_DECNET_PHASE' FOR NODE ''P1'"
$ GOTO SUB_EXIT
$ ENDIF
$ ENDIF
$ ENDIF
$ WRITE TEMPDETAILFILE "<P></P><H2>HECnet</H2><P>HECnet is the oldest world-wide hobbyist DECnet network connecting people who play around with different machines that have the DECnet protocol suite. "
$ WRITE TEMPDETAILFILE "Visit the <A HREF=""http://www.update.uu.se/~bqt/hecnet.html"" TARGET=""_BLANK"">HECnet Official Website</A>.</P>"
$!
$! START GOOGLE CSE SEARCH BOX
$ WRITE TEMPDETAILFILE "<p></p><p>Search SANYALnet Hobbyist Servers and Services:</p><div id=""google-cse""><!-- Google Custom Search via sanyal.duckdns.org.openvms.vax at gmail --><script>"
$ WRITE TEMPDETAILFILE F$FAO("(function() { var cx = '015567988034387983255:4ulgqks3d_a'; var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true;")
$ WRITE TEMPDETAILFILE F$FAO(" gcse.src = 'https://cse.google.com/cse.js?cx=' + cx; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); })(); </script>")
$ WRITE TEMPDETAILFILE F$FAO(" <gcse:search></gcse:search></div><p></p>")
$! END GOOGLE CSE SEARCH BOX
$!
$ WRITE TEMPDETAILFILE "<P></P><P>Proudly generated by a DCL Command Procedure and served by WASD Web Server from a Digital DEC VAXserver 3900 Series computer running OpenVMS VAX 7.3 Operating System.</P>"
$ WRITE TEMPDETAILFILE "<P>&copy; SUPRATIM SANYAL (<A HREF=""https://goo.gl/FqzyBW"" TARGET=""_BLANK"">EMAIL</A>)"
$ WRITE TEMPDETAILFILE " (<A HREF=""http://supratim-sanyal.blogspot.com/"" TARGET=""_BLANK"">BLOG</A>) (<A HREF=""http://www.sanyal.org/"" TARGET=""_BLANK"">Website</A>)</P>"
$ WRITE TEMPDETAILFILE "<P><A HREF=""/falserver/hecnet-status.html"">HECnet NODE SUMMARY</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF=""/"">HOME</A></P>"
$ WRITE TEMPDETAILFILE "<!-- McAfee SECURE Certification --><script type=""text/javascript"" src=""https://cdn.ywxi.net/js/1.js"" async></script></BODY></HTML>"
$!
$!
$SUB_EXIT:
$ CLOSE TEMPDETAILFILE
$ SET FILE/PROT=(W:R) 'NODEDETAIL_FILE'
$ PURGE/NOLOG/NOCONFIRM/KEEP=2 'NODEDETAIL_FILE'
$!
$ ENDSUBROUTINE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment