home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / fping / part01 / README.VMS < prev   
Internet Message Format  |  1993-07-03  |  6KB

  1. From <@jessica.stanford.edu:IVERSEN@VSFYS1.FI.UIB.NO> Mon Jul 27 08:54:26 1992
  2. Received: from Argus.Stanford.EDU by jessica.stanford.edu (5.59/25-eef) id AA28695; Mon, 27 Jul 92 08:54:22 PDT
  3. Received: from vsfys1.fi.uib.no by Argus.Stanford.EDU (5.65/inc-1.0)
  4.     id AA28942; Mon, 27 Jul 92 08:54:19 -0700
  5. Date:    Mon, 27 Jul 1992 17:54:17 +0200
  6. From: IVERSEN@VSFYS1.FI.UIB.NO (Per Steinar Iversen, Dept. of Physics, Univ. of Bergen, Norway, phone +47-5-212770)
  7. Message-Id: <920727175417.21e004ce@VSFYS1.FI.UIB.NO>
  8. Subject: FPING under VMS
  9. To: schemers@Stanford.EDU
  10. X-Vmsmail-To: SMTP%"schemers@Stanford.EDU"
  11. Status: OR
  12.  
  13. Hello,
  14.  
  15. I rather liked your recently posted fping, and I decided to port it to VMS,
  16. under MultiNet TCP/IP 3.0H and VAXC 3.2. Only some very minor modifications are
  17. necessary to run it under VMS 5.5: 
  18.  
  19. 1) The 2 following lines must be put onto one single line, otherwise VAXC 
  20. complains:
  21.  
  22. #if !__STDC__ && !defined(__cplusplus) && !defined(FUNCPROTO) \
  23.                                                  && !defined(_POSIX_SOURCE)
  24.  
  25. goes to:
  26.  
  27. #if !__STDC__ && !defined(__cplusplus) && !defined(FUNCPROTO) && !defined(_POSIX_SOURCE)
  28.  
  29. 2) The single following line must be changed:
  30.  
  31. extern char *sys_errlist[];
  32.  
  33. to:
  34.  
  35. #ifndef VMS
  36. extern char *sys_errlist[];
  37. #else
  38. extern noshare char *sys_errlist[];
  39. #endif
  40.  
  41. 3) VMS runs privileged programs in a different manner from UNIX. geteuid is 
  42. "supported" by VAXC but the result is not really meaningful.
  43.  
  44. These lines are thus Unix specific:
  45.  
  46.   /* check if we are root */
  47.  
  48. #ifndef VMS
  49.   if (geteuid()) {
  50.       fprintf(stderr,
  51.         "This program can only be run by root, or it must be setuid root.\n");
  52.       exit(3);
  53.   }
  54. #endif
  55.  
  56. 4) VAXC does not support getopt. I got my copies of getopt, index and rindex
  57. from a fileserver with bsd-sources, using anonymous FTP. These routines
  58. compiled without complaints and works fine under VAXC 3.2 at least. 
  59.  
  60. 5) The VMS concept of exit codes is different from the Unix version. After some
  61. thought I decided to short circuit the VAXC attempt of translating the Unix
  62. return codes into VMS style return codes. My version of FPING always returns
  63. "exit(1)", which is VMS success. However the FPING status codes are put into a
  64. VMS symbol, FPING_STATUS. It is thus very easy to use the FPING return status
  65. codes for further action if needed. 
  66.  
  67. The line at the end of main in FPING, "return 0;", must be changed to
  68. "exit(0);" for VMS, this should be OK for Unix too?
  69.  
  70. A small routine is needed to handle the translation, it will probably not
  71. get any rewards for nice C-code (I usually program in Fortran), and it was 
  72. largely created by copying an example from the VAXC manuals:
  73.  
  74. /* VMS-EXIT.C */
  75. #include <ssdef>
  76. #include <stdio>
  77. #include <descrip>
  78.  
  79. int LIB$SET_SYMBOL();
  80.  
  81. vms_exit (ecode)
  82. int ecode;
  83. {
  84.   int status = 1;
  85.   static $DESCRIPTOR(fping_name, "FPING_STATUS");
  86.   static $DESCRIPTOR(fping_exit_0,"0");
  87.   static $DESCRIPTOR(fping_exit_1,"1");
  88.   static $DESCRIPTOR(fping_exit_2,"2");
  89.   static $DESCRIPTOR(fping_exit_3,"3");
  90.   static $DESCRIPTOR(fping_exit_4,"4");
  91.   static $DESCRIPTOR(fping_exit_5,"5");
  92.  
  93.   switch(ecode) {
  94.   case 0 :
  95.     status = LIB$SET_SYMBOL(&fping_name,&fping_exit_0);
  96.     break;
  97.   case 1 :
  98.     status = LIB$SET_SYMBOL(&fping_name,&fping_exit_1);
  99.     break;
  100.   case 2 :
  101.     status = LIB$SET_SYMBOL(&fping_name,&fping_exit_2);
  102.     break;
  103.   case 3 :
  104.     status = LIB$SET_SYMBOL(&fping_name,&fping_exit_3);
  105.     break;
  106.   case 4 :
  107.     status = LIB$SET_SYMBOL(&fping_name,&fping_exit_4);
  108.     break;
  109.   default:
  110.     status = LIB$SET_SYMBOL(&fping_name,&fping_exit_5);
  111.     break;
  112.   }
  113.  
  114.   exit(1);
  115.  
  116. }
  117.  
  118.  
  119. 6) The following command file (script) was used to compile and link under VMS:
  120.  
  121. $! VMS-CC-MAKE.COM
  122. $! 
  123. $! This compile+link procedure has been tested with VAXC 3.2 and
  124. $! MultiNet 3.0H.
  125. $!
  126. $! NOTE: getopt, index, and rindex are not part of VAXC, however the BSD
  127. $! versions works fine. They should be available by anonymous FTP
  128. $! from a number of fileservers.
  129. $!
  130. $ define/user arpa             multinet_root:[multinet.include.arpa]
  131. $ define/user netinet          multinet_root:[multinet.include.netinet]
  132. $ define/user sys              multinet_root:[multinet.include.sys],sys$library
  133. $ cc /nolist /define="exit=vms_exit" fping.c
  134. $ cc /nolist                         vms-exit.c
  135. $ cc /nolist                         getopt.c
  136. $ cc /nolist                         index.c
  137. $ cc /nolist                         rindex.c
  138. $ link /nomap/notrace fping,vms-exit,getopt,index,rindex,sys$input/opt
  139. multinet:multinet_socket_library/share
  140. sys$share:vaxcrtl/share
  141. $ delete fping.obj.*,vms-exit.obj.*,getopt.obj.*,index.obj.*,rindex.obj.*
  142. $ purge  fping.exe
  143. $ fping :== $'f$environment("default")'fping
  144.  
  145. 7) Piping files into fping is not available under VMS, but the "f" option does
  146. the same job.
  147.  
  148. 8) fping must be installed with privileges if it is to be used by
  149. non-privileged users under VMS. 
  150.  
  151. The question then is, does it work? Well, as far I can see the answer is yes!
  152. Here are some examples of output:
  153.  
  154. $ fping xxx
  155. xxx address not found
  156. $ show symbol fping_status
  157.   FPING_STATUS = "2"
  158. $ fping vxcrna.cern.ch
  159. vxcrna.cern.ch is alive
  160. $ show symbol fping_status
  161.   FPING_STATUS = "0"
  162. $ fping -de vxcrna.cern.ch
  163. vxcrna.cern.ch is alive (320 msec)
  164. $ show symbol fping_status
  165.   FPING_STATUS = "0"
  166. $ fping -v
  167. vsfys5$dkb100:[scratch.iversen]fping.exe;7: $Revision: 1.17 $ $Date: 1992/07/23 03:29:42 $
  168. vsfys5$dkb100:[scratch.iversen]fping.exe;7: comments to schemers@Stanford.EDU
  169.  
  170. Regards, Per (iversen@vsfys1.fi.uib.no)
  171.  
  172.