[fa.info-vax] writing readable files

info-vax@ucbvax.ARPA (07/20/85)

From: Kevin Carosso <engvax!KVC@cit-vax>

I don't know what language your using or what the rules are in it,
but I do this from Pascal (either V2 or V3) all the time.  I just
specify:

   HISTORY := NEW, SHARING := READWRITE, ORGANIZATION := SEQUENTIAL

in the Pascal OPEN statement.  In Pascal, "sequential" is the default
file organization, EXCEPT when you specify "readwrite" sharing.  Then
for some reason it changes the default organization to indexed (or
something).  I don't know why it does that, but remember:  it is a
change of DEFAULT, not something that says sequential files cannot
be shared.

In any case, this seems to work fine.  If it can be done in Pascal, it
can be done in any language, though you may need a useropen routine to
set the right bits in the FAB if the language doesn't give you enough
control.

One other thing...  Due to RMS buffering, things you write won't
neccessarily make into the file right away for someone else to see.
What I do is a $FLUSH after I write anything significant to the file.
The Pascal code looks something like:  (please note that references to
SYS$OUTPUT are NOT referring to a PPF, but rather to whatever file I did
a logical name assignment just before running the daemon this code came
from.  This is to allay any fears that this only works to a PPF.)

(*---------------------------------------------------------------------------*)
(*
 * "Log" writes an entry into the current log file (SYS$OUTPUT).
 * We use $FLUSH to update the log file after every message is written.
 *)

  procedure Log (Message : varying [maxlen] of Char);

  type
    Unsafe_file = [UNSAFE] text;
    RAB_ptr = ^RAB$TYPE;

  var
    sys_output_RAB : RAB_ptr;

    function PAS$RAB (var F : [volatile] Unsafe_file) : RAB_ptr; extern;

  begin (* Log *)
    writeln (sys_output, Message);
    sys_output_RAB := PAS$RAB (sys_output);
    status := $FLUSH (sys_output_RAB^);
    if not odd (status) then LIB$SIGNAL (status);
  end;



	/Kevin Carosso           engvax!kvc @ CIT-VAX.ARPA
	 Hughes Aircraft Co.

ps.  Yeah, I really do write all my system-type code in Pascal...
     Not exactly standard Pascal, but then things I do are far
     from standard...  VMS Pascal is pretty neat.

info-vax@ucbvax.ARPA (07/22/85)

From: Provan@LLL-MFE.ARPA


Ah!  I distinctly remember being able to write readable files, and now
both of you have reminded me how.  Unfortunately, I'd really like to
protect the file against other writers.  Unless RMS rejects subsequent
opens with less sharability, it would seem that the log file writer
would end up out in the cold if a casual writer, like a text editor,
came along and read the file without any sharability options.  Does RMS
reject such opens?  The manual says nothing about it.  If it does, I
guess I can put up with other programs, like multiple invocations of
the same program, writing the same log file at the same time, although
this isn't really desirable.

Also, the manual says

	RMS supports file sharing for relative files, for indexed
	files, and for sequential files with 512-byte fixed-length
	records.

Does this just mean that the support for other sequential files is only
half ass?