home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / os / vms / 20296 < prev    next >
Encoding:
Internet Message Format  |  1993-01-04  |  2.3 KB

  1. Path: sparky!uunet!comp.vuw.ac.nz!zl2tnm!toyunix!don
  2. Newsgroups: comp.os.vms
  3. Subject: Re: VMS 5.5 MoveFile primitive
  4. Message-ID: <17057003@zl2tnm.gen.nz>
  5. From: don@zl2tnm.gen.nz (Don Stokes)
  6. Date: 4 Jan 93 14:42:49 GMT
  7. Sender: news@zl2tnm.gen.nz (GNEWS Version 2.0 news poster.)
  8. References: <1993Jan4.100117.40@elmrd6.ineab.ikea.se>
  9. Distribution: world
  10. Organization: The Wolery
  11. Lines: 53
  12.  
  13. anos@elmrd6.ineab.ikea.se writes:
  14. >         $qiow_s chan = indexf,-            ; Volume channel
  15. >             func = movfunc,-        ; MOVEFILE function
  16. >             p1 = fibdsc2            ; Our FIB pointer
  17. >         blbs    r0,30$
  18. >         $exit_s    r0
  19. > 30$:        
  20. >         ret
  21. > The code fragment above never exits with errors as I said. If anybody out
  22. > there has any info on additional status fields, please send me a e-mail.
  23.  
  24. Well, to put it bluntly, you've made a fairly fundamental cock-up.
  25.  
  26. $QIO and $QIOW (and other things that operate asynchronously) have an
  27. IOSB parameter.  It's optional, but ignore that.  Consider it mandatory.
  28.  
  29. There are two reasons for this:  The big one is that the status code
  30. returned is the status for _queueing the I/O_ (or $GETJPI or ...), not 
  31. for the whole job.  Sure, the I/O was queued, but did it _work_?
  32. To find out, you need to check the low-order word of the IOSB.
  33.  
  34. The second reason is very important for the 'W' forms of async calls
  35. ($QIOW, $GETJPIW & friends): the IOSB is checked for completion.  A 
  36. $QIOW is actually implemented as $QIO/$SYNCH, but only if you specify an
  37. IOSB (since $SYNCH takes asn IOSB as its parameter).  If you don't, the
  38. only indication that the service has completed is the event flag -- since
  39. you've not specified the efn parameter, it's using efn 0.  If anything
  40. else sets efn 0 (async QIOs etc), your $QIOW call will terminate
  41. prematurely.
  42.  
  43. So, to do your QIO properly, change your code to:
  44.  
  45. (somewhere else)
  46. iosb:        .blkw 4                    ; IOSB for QIOs
  47.  
  48. >         $qiow_s chan = indexf,-            ; Volume channel
  49. >             func = movfunc,-        ; MOVEFILE function
  50.             iosb = iosb,-
  51. >             p1 = fibdsc2            ; Our FIB pointer
  52. >         blbs    r0,30$
  53. > 35$:        $exit_s    r0
  54. > 30$:        
  55.         cvtwl iosb, R0                ; Status from I/O
  56.         blbc R0, 35$                ; OK?
  57. >         ret
  58.  
  59. Check out the I/O users guide for more infoi on IOSBs.
  60.  
  61. --
  62. Don Stokes, ZL2TNM (DS555)                        don@zl2tnm.gen.nz (home)
  63. Network Manager, Computing Services Centre            don@vuw.ac.nz (work)
  64. Victoria University of Wellington, New Zealand              +64-4-495-5052
  65.