Page 1 of 1

Searching for more information on Starlet.flush, starlet.rewind, & starlet.connect

Posted: Wed Jul 19, 2023 9:59 am
by miiichael410
I have searched the internet for the Ada spec package for Starlet and I have not found a document that lists it or gives some information about things like Starlet.Rab_Type_Init or Starlet.Rab_C_Seq. I am not familiar with VMS and pretty new to the Ada language, but I need to work on a legacy system and more information about Starlet would help me in figuring out the current systems functionality. Also, I specifically am working with indexed, sequential, and relative files through Starlet. There are some places where people use indexed files with the Indexed_Io package, but not in this instance I am working on currently. Anyone who could point me in the right direction would be a big help.

-Thanks for the help!

Re: Searching for more information on Starlet.flush, starlet.rewind, & starlet.connect

Posted: Wed Jul 19, 2023 11:41 am
by sms

Code: Select all

> [...] Starlet.Rab_Type_Init or Starlet.Rab_C_Seq. [...]

   While you wait for someone who knows something, here's some
guesswork...

   In C it's common to declare various RMS structures like the FAB and
RAB, and then initialize them with some basic/popular content, so:

#include <rms.h>                /* <fabdef.h>, <namdef.h>, <rabdef.h>, ... */
[...]
struct FAB my_fab;              /* File Access Block */
struct RAB my_rab;              /* Record Access Block */
[...]
my_rab = cc$rms_rab;            /* Initialize RAB. */
my_fab = cc$rms_fab;            /* Initialize FAB. */
my_rab.rab$l_fab = &my_fab;     /* Point RAB to FAB. */

   The cc$rms_XXX things are predefined, and I don't recall ever seeing
what's in one.

   I wouldn't bet a nickel on it, but if your code were creating a
STARLET.RAB_TYPE structure, and then setting it to whatever
Starlet.Rab_Type_Init might be, then my uneducated guess would be that
you're looking at the Ada equivalent of this kind of thing.

   As for Starlet.Rab_C_Seq, depending on the invisible details, I might
guess that it corresponds to one of these constants (from <rabdef.h>):

#define RAB$C_SEQ 0                     /* sequential access                */
#define RAB$C_KEY 1                     /* keyed access                     */
#define RAB$C_RFA 2                     /* rfa access                       */
#define RAB$C_STM 3                     /* stream access (valid only for sequential org) */

(The "$" -> "_" translation looks right.)

   It may be that this kind of "documentation" is confined to the text
libraries where the C header files (or other-language equivalents) are
supplied, and might be hard to obtain without having a C (or whatever)
compiler installed on a VMS system.

   For more details on the I/O details, you might try the RMS manual:
      https://docs.vmssoftware.com/docs/vsi-openvms-record-management-services-reference-manual.pdf


Edit:

> [...] Starlet.flush, starlet.rewind, & starlet.connect

   I'd guess that these are the system services, $FLUSH, $REWIND, and
$CONNECT.  See the RMS manual.

> [...] people use indexed files [...]

   That would be tougher if your target OS doesn't do that.  Plain-old
sequential I/O on VMS requires enough learning to satisfy my desire for
confusion.  It's not UNIX stream-of-bytes.

Re: Searching for more information on Starlet.flush, starlet.rewind, & starlet.connect

Posted: Fri Jul 21, 2023 6:38 am
by imiller
as those ADA packages are wrappers around the Record Management Services (RMS) then you may find the RMS manual useful https://docs.vmssoftware.com/vsi-openvm ... ce-manual/
and the Guide to OpenVMS File Applications for background https://docs.vmssoftware.com/guide-to-o ... lications/

The DEC ADA Runtime Reference Manual is here https://docs.vmssoftware.com/docs/ada_rtr.pdf