"What is HECnet?
HECnet is a DECnet that connects different people who play around with different machines that have the DECnet protocol suite. The network should not be regarded as a serious networking setup, nor should it be expected to work 24/7. It's a hobby project between people who think it's fun to create a DECnet network.
HECnet is basically a DECnet phase IV network. Currently, the main router is a PDP-11 running RSX-11M-PLUS. The machine is located in Uppsala, Sweden.
The connectivity between nodes can be anything that works. The current connectivity is with an ethernet bridge between sites, DECnet over IP using Multinet on VMS or RSX, and DECnet over IP on Cisco. Other solutions that have been used are a virtual serial async. connection talking DDCMP. Other possibilities are GRE and DECnet over IP." - read more at http://www.update.uu.se/~bqt/hecnet.html
A DCL command procedure to copy over the latest list of HECNET nodes. Execute this using
$ @HECNET-NODENAMES-UPDATE.COM
The DCL script HECNET-SCAN.COM to crawl HECNET and generate the HTML pages. You can run this by itself for testing, or invoke this periodically (once a day or once a week) from a scheduled batch queue job.
The scheduled Batch Queue job for scheduled runs of the above command script. To enable, use the DCL command procedure HECNET-SCAN-BATCH.COM:
$ @HECNET-SCAN-BATCH.COM
HECnet is a DECnet that connects different people who play around with different machines that have the DECnet protocol suite. The network should not be regarded as a serious networking setup, nor should it be expected to work 24/7. It's a hobby project between people who think it's fun to create a DECnet network.
HECnet is basically a DECnet phase IV network. Currently, the main router is a PDP-11 running RSX-11M-PLUS. The machine is located in Uppsala, Sweden.
The connectivity between nodes can be anything that works. The current connectivity is with an ethernet bridge between sites, DECnet over IP using Multinet on VMS or RSX, and DECnet over IP on Cisco. Other solutions that have been used are a virtual serial async. connection talking DDCMP. Other possibilities are GRE and DECnet over IP." - read more at http://www.update.uu.se/~bqt/hecnet.html
A DCL command procedure to copy over the latest list of HECNET nodes. Execute this using
$ @HECNET-NODENAMES-UPDATE.COM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$! Runs at 5 AM system time every day to copy nodenames.dat from MIM:: to DUA2:[FAL$SERVER] | |
$ set noon | |
$ mynameis = f$environment("PROCEDURE") | |
$ goto 'f$mode()' | |
$interactive: | |
$ on warning then goto submit_error | |
$ submit /after="tomorrow+5:00"/noprint/keep 'mynameis' | |
$ write sys$output "Periodic job has been requeued" | |
$ exit | |
$network: | |
$other: | |
$ write sys$output "Unable to process commands in this mode" | |
$ exit | |
$submit_error: | |
$ set noon | |
$! mail nla0: system /subject="Nightly batch job has encountered an error" | |
$ exit | |
$batch: | |
$ on warning then goto submit_error | |
$ submit /after="tomorrow+5:00"/noprint/keep 'mynameis' | |
$ set noon | |
$! now for what we were created for, include the DCL commands to execute daily | |
$! | |
$ set proc/priv=all | |
$ copy mim::nodenames.dat dua2:[fal$server] | |
$ exit |
The DCL script HECNET-SCAN.COM to crawl HECNET and generate the HTML pages. You can run this by itself for testing, or invoke this periodically (once a day or once a week) from a scheduled batch queue job.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$! 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> » <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&m=0&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&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=""÷""><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>© 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> » <a href=""/falserver/hecnet-status.html"">HECnet</a> » " | |
$ 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&m=0&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&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=""÷""><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>© 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> | <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 |
The scheduled Batch Queue job for scheduled runs of the above command script. To enable, use the DCL command procedure HECNET-SCAN-BATCH.COM:
$ @HECNET-SCAN-BATCH.COM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$! Runs every seven days at 4 AM from current time to update HECnet node status HTML files served by WASD | |
$ set noon | |
$ mynameis = f$environment("PROCEDURE") | |
$ goto 'f$mode()' | |
$interactive: | |
$ on warning then goto submit_error | |
$ submit /after="TODAY+7-04:00"/noprint/keep 'mynameis' | |
$ write sys$output "Periodic job has been requeued" | |
$ exit | |
$network: | |
$other: | |
$ write sys$output "Unable to process commands in this mode" | |
$ exit | |
$submit_error: | |
$ set noon | |
$! mail nla0: system /subject="Nightly batch job has encountered an error" | |
$ exit | |
$batch: | |
$ on warning then goto submit_error | |
$ submit /after="TODAY+7-04:00"/noprint/keep 'mynameis' | |
$ set noon | |
$! now for what we were created for, include the DCL commands scheduled to execute | |
$! | |
$ set proc/priv=all | |
$ @DUA1:[SANYAL.MISC]hecnet-scan.com | |
$! REBOOT | |
$ exit |
No comments:
Post a Comment
"SEO" link builders: move on, your spam link will not get posted.
Note: Only a member of this blog may post a comment.