home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / comp / os / vms / 22059 < prev    next >
Encoding:
Text File  |  1993-01-27  |  2.0 KB  |  69 lines

  1. Path: sparky!uunet!ukma!usenet.ins.cwru.edu!agate!ucbvax!SPOCK.FHCRC.ORG!JOE
  2. From: JOE@SPOCK.FHCRC.ORG (Joe Meadows)
  3. Newsgroups: comp.os.vms
  4. Subject: Re: Running LOGINOUT [SYS$CLI]
  5. Message-ID: <01GU0K146IMO9ULQBR@SPOCK.FHCRC.ORG>
  6. Date: 27 Jan 93 21:33:00 GMT
  7. Sender: daemon@ucbvax.BERKELEY.EDU
  8. Distribution: world
  9. Organization: The Internet
  10. Lines: 57
  11.  
  12. At least one interesting thing that can be done with SYS$CLI and can't be
  13. done with LIB$ routines is the setting of strange symbols. For instance,
  14. you can't do the equivalent of:
  15.  
  16.     $ 80 == "SET TERMINAL/WIDTH=80"
  17.  
  18. Using DCL or the LIB$SET_SYMBOL routine, however you _can_ do it using SYS$CLI.
  19. Oh, and lest anyone get their hopes up, you can't create integer symbols using
  20. it (so far as I can tell, to be honest I haven't checked the sources). I.E. you
  21. can't do the equivalent of "$ number == 6".
  22.  
  23. In fact, here's a bit of C code to do the former:
  24.  
  25. #include <clidef>
  26. #include <cliservdef>
  27. #include <descrip>
  28.  
  29. typedef struct dsc$descriptor string;
  30.  
  31. #define SLEN(a)   (a).dsc$w_length
  32. #define STYPE(a)  (a).dsc$b_dtype
  33. #define SCLASS(a) (a).dsc$b_class
  34. #define SADDR(a)  (a).dsc$a_pointer
  35.  
  36. #define STRING(a,b) {(a).dsc$w_length = strlen(b); (a).dsc$a_pointer = (b);}
  37.  
  38. int set_symbol(char *symbol_name, char *symbol_value)
  39. {
  40.     static struct
  41.     {
  42.         unsigned char cli$b_rqtype;     /* request type */
  43.         unsigned short cli$w_servcod;   /* service code */
  44.         unsigned char cli$b_rqstat;     /* probably not correct, oh well..  */
  45.         string cli$q_namdesc;           /* symbol name  */
  46.         string cli$q_valdesc;           /* symbol value */
  47.     } blk = {CLI$K_CLISERV, CLI$K_DEFGLOBAL, 0};
  48.  
  49.     STRING(blk.cli$q_namdesc, symbol_name);
  50.     STRING(blk.cli$q_valdesc, symbol_value);
  51.  
  52.     return sys$cli(&blk);
  53. }
  54.  
  55. main(int argc, char *argv[])
  56. {
  57.     int status;
  58.  
  59.     status = set_symbol("24",  "set term/page=24");
  60.     if (!(status & 1)) lib$signal(status);
  61.  
  62.     /* etc. */
  63. }
  64.  
  65.  
  66. Cheers,
  67. Joe Meadows joe@kirk.fhcrc.org  meadowsj@boeing.com  etc...
  68.  
  69.