From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,83d7c4caadb45100 X-Google-Attributes: gid103376,public From: Mats.Weber@elca-matrix.ch (Mats Weber) Subject: Re: DECAda/VMS - calling GETJPI Date: 1996/06/03 Message-ID: #1/1 X-Deja-AN: 158300249 references: <31B2AF74.668E@dial.eunet.ch> organization: ELCA Matrix SA newsgroups: comp.lang.ada Date: 1996-06-03T00:00:00+00:00 List-Id: In article <31B2AF74.668E@dial.eunet.ch>, Alan Paterson wrote: >Here's one for the VMS gurus (I can't post it to comp.os.vms, >'cos there's a psychopath there who throws abuse at me): > >I want to examine all processes currently active. The system >service to do this is, of course, GetJPI (either in Starlet or >Lib). To perform wildcard process search, this procedure >expects to receive a value of -1 for the process_id parameter. >Unfortunately, in the "official" spec-files for these >procedures, this parameter has the type UNSIGNED_LONGWORD. Ada, >quite correctly, objects to this kind of thing :-) The best way of doing this is by calling process_scan (in Starlet or lib). I have once written a program that does all this and displays all kinds of process info (much better than show system). If you want it, send me e-mail and I'll give you the source. >So, what I now do is the following: > > PID : UNSIGNED_LONGWORD; > PID0 : INTEGER; > for PID0 use at PID'address; This is erroneous in Ada 83, and at least dangerous without a pragma Volatile or something. You should prefer Unchecked_Conversion, which will work when Standard.Integer becomes 64 bits. >begin > PID0 := -1; > loop > GetJPI(..., Process_Id => PID, ...); > >This works, but I can't help but wonder if there isn't a more >elegant way to do it. Does anyone have experience with this? Yes, there is: PID : UNSIGNED_LONGWORD := -1; begin PID := -1; loop GetJPI(..., Process_Id => PID, ...); works because System.UNSIGNED_LONGWORD is -2**31 .. 2**31 - 1.