home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / os / vms / 18094 < prev    next >
Encoding:
Text File  |  1992-11-17  |  2.9 KB  |  91 lines

  1. Path: sparky!uunet!think.com!ames!agate!ucbvax!ko.hhs.dk!ARNE
  2. From: ARNE@ko.hhs.dk (Arne Vajhxj)
  3. Newsgroups: comp.os.vms
  4. Subject: Re: Help!  SMG$GET_TERM_DATA/VAX PASCAL
  5. Message-ID: <01GR5BWLC7VM8WW9XB@kopc.hhs.dk>
  6. Date: 14 Nov 92 15:12:11 GMT
  7. Sender: daemon@ucbvax.BERKELEY.EDU
  8. Distribution: world
  9. Organization: The Internet
  10. Lines: 79
  11.  
  12. > I'd _really_really_ appreciate it if someone could get the VAX PASCAL code
  13. > below my sig to work properly (and send me a copy... <grin>).  Basically,
  14. > I'm having difficulties passing the buffer address to SMG$GET_TERM_DATA...
  15. > who's bright idea was it to define "Address - Unsigned Longword" as an
  16. > [UNSAFE] ^[UNSAFE] INTEGER????
  17.  
  18. > [inherit('sys$library:starlet','sys$library:pascal$smg_routines')]
  19. > program termtab(input,output);
  20. > type
  21. >   $DEFTYP = [UNSAFE] INTEGER;   {as found in pascal$smg_routines.pas}
  22. >   $DEFPTR = [UNSAFE] ^$DEFTYP;  {ditto}
  23. > var
  24. >   stat : integer;
  25. >   termadr : unsigned;
  26. >   bufadr : $DEFPTR;
  27. >   line : varying [12] of char;  {arbitrary length string}
  28. >   junk : integer;
  29. >   i : integer;
  30. > begin
  31. >   stat := SMG$INIT_TERM_TABLE(%descr 'VT200_Series',termadr);
  32. >   if not(odd(stat)) then $exit(stat);
  33. >   line := zero;
  34. >   bufadr := iaddress(line.body); {this is what gives me problems, I think}
  35. >   {should return 4 character string "<esc>[2J"}
  36. >   stat := SMG$GET_TERM_DATA(termadr,SMG$K_ERASE_WHOLE_DISPLAY,12,junk,bufadr);
  37. >   if not(odd(stat)) then $exit(stat);
  38. >   line.length := junk;
  39. >   writeln('length = ',junk:1);  {this works okay... returns '4'}
  40. >   writeln('"',line.body,'"');   {... but this doesn't}
  41. >   {display the entire string for debugging purposes}
  42. >   for i:=1 to 12 do
  43. >     writeln(i:2,' "',line.body[i],'" (',ord(line.body[i]):1,')');
  44. > end.
  45.  
  46. The following SIMPLE modification works for me:
  47.  
  48. [inherit('sys$library:starlet','sys$library:pascal$smg_routines')]
  49. program termtab(input,output);
  50.  
  51. var
  52.   stat : integer;
  53.   termadr : unsigned;
  54.   line : varying [12] of char;  {arbitrary length string}
  55.   junk : integer;
  56.   i : integer;
  57.  
  58. begin
  59.   stat := SMG$INIT_TERM_TABLE(%descr 'VT200_Series',termadr);
  60.   if not(odd(stat)) then $exit(stat);
  61.  
  62.   line := zero;
  63.  
  64.   {should return 4 character string "<esc>[2J"}
  65.   stat := SMG$GET_TERM_DATA(termadr,SMG$K_ERASE_WHOLE_DISPLAY,12,junk,
  66.                             %REF line.body);
  67.   if not(odd(stat)) then $exit(stat);
  68.   line.length := junk;
  69.  
  70.   writeln('length = ',junk:1);  {this works okay... returns '4'}
  71.   writeln('"',line.body,'"');   {... but this doesn't} (* NOW IT DOES *)
  72.  
  73.   {display the entire string for debugging purposes}
  74.   for i:=1 to 12 do
  75.     writeln(i:2,' "',line.body[i],'" (',ord(line.body[i]):1,')');
  76. end.
  77.  
  78.                                                           Arne
  79.  
  80. Arne Vajhxj                             local DECNET:  KO::ARNE
  81. Computer Department                     PSI:           PSI%23831001304030::ARNE
  82. Business School of Southern Denmark     Internet:      ARNE@KO.HHS.DK
  83.  
  84.  
  85.