head     56.3;
access   paws bayes jws quist dew jwh;
symbols  ;
locks    ; strict;
comment  @# @;


56.3
date     93.01.27.13.20.48;  author jwh;  state Exp;
branches ;
next     56.2;

56.2
date     93.01.27.12.01.19;  author jwh;  state Exp;
branches ;
next     56.1;

56.1
date     91.11.05.09.40.16;  author jwh;  state Exp;
branches ;
next     55.1;

55.1
date     91.08.25.10.18.48;  author jwh;  state Exp;
branches ;
next     54.3;

54.3
date     91.08.21.12.36.07;  author jwh;  state Exp;
branches ;
next     54.2;

54.2
date     91.08.21.09.47.28;  author jwh;  state Exp;
branches ;
next     54.1;

54.1
date     91.03.18.15.24.09;  author jwh;  state Exp;
branches ;
next     53.1;

53.1
date     91.03.11.19.25.20;  author jwh;  state Exp;
branches ;
next     52.1;

52.1
date     91.02.19.09.09.03;  author jwh;  state Exp;
branches ;
next     51.1;

51.1
date     91.01.30.16.08.27;  author jwh;  state Exp;
branches ;
next     50.1;

50.1
date     90.10.29.16.23.31;  author jwh;  state Exp;
branches ;
next     49.1;

49.1
date     90.08.14.14.07.50;  author jwh;  state Exp;
branches ;
next     48.2;

48.2
date     90.08.14.09.38.06;  author jwh;  state Exp;
branches ;
next     48.1;

48.1
date     90.07.26.11.13.49;  author jwh;  state Exp;
branches ;
next     1.1;

1.1
date     90.07.24.14.54.17;  author jwh;  state tmp;
branches ;
next     ;


desc
@Base file for PWS 3.3 release.

@


56.3
log
@
pws2rcs automatic delta on Wed Jan 27 13:14:25 MST 1993
@
text
@{****************************************************************************
 * +----------------------------------------------------------------------+ *
 * |                                                                      | *
 * |        G A N G L I A   M E S S A G E   F O R M A T S                 | *
 * |                                                                      | *
 * |        A N D   R E L A T E D   D E F I N I T I O N S                 | *
 * |                                                                      | *
 * +----------------------------------------------------------------------+ *
 ****************************************************************************}

CONST

   name_type_len = 16;

   {+----------------------------------------------------------------------+
    | Message Packet Sizes For Messages That Are Sent To Ganglia           |
    +----------------------------------------------------------------------+}
   size_to_are_you_alive =    12;
   size_to_cat =             128;   (* plus 36 *`# file name sets *)
   size_to_catprotect =      128;   (* plus 36 * # file name sets *)
   size_to_changeprotect =   116;   (* plus (36 * # file name sets) +
					    (24 * # file name sets) *)
   size_to_change_vol_label= 132;
   size_to_close =            56;
   size_to_copy =             32;
   size_to_create =          152;   (* plus (36 * # file name sets) +
					    (24 * # protect code sets)  *)
   size_to_createlink =      144;   (* plus 36 * # file name sets *)
   size_to_flock =            20;
   size_to_funlock =          20;
   size_to_gang_cleanup =     16;
   size_to_info =             20;
   size_to_init_vol =        172;   (* plus 24 * # protect code sets *)
   size_to_open =            132;   (* plus 36 * # file name sets *)
   size_to_position =         28;
   size_to_purge =           112;   (* plus 36 * # file name sets *)
   size_to_read =             40;
   size_to_set_eof =          28;
   size_to_set_date =         44;
   size_to_volstatus =        84;
   size_to_write =            48;   (* plus the size of the record <= 512 *)
   size_to_xchg_data =       140;   (* plus 36 * # file name sets *)
   size_to_xchg_open =        20;
{INTERNAL ONLY BEGIN}
   { srm_ux only }
   size_to_rmt_exec  =       120;   { plus cmd length }
   size_to_hfs_chmod =       132;   (* plus 36 * # file name sets *)
   size_to_hfs_chown =       132;   (* plus 36 * # file name sets *)
   size_to_hfs_chgrp =       132;   (* plus 36 * # file name sets *)
{INTERNAL ONLY END}


   {+----------------------------------------------------------------------+
    | Message Packet Sizes For Messages Ganglia Will Send Back             |
    +----------------------------------------------------------------------+}

   size_from_are_you_alive  = 16;
   size_from_cat =            24; (* plus 68 * # entries returned *)
   size_from_catprotect =     24; { plus 20 * # prot code entries returned }
   size_from_changeprotect =  16;
   size_from_change_vol_label=16;
   size_from_close =          16;
   size_from_copy =           20;
   size_from_create =         16;
   size_from_createlink =     16;
   size_from_flock =          20;
   size_from_funlock =        16;
   size_from_gang_cleanup =   16;
   size_from_gang_error =     16;
   size_from_info =           88;
   size_from_init_vol =       16;
   size_from_open =           52;
   size_from_position =       16;
   size_from_purge =          16;
   size_from_read =           36;   (* plus the size of the record <= 512 *)
   size_from_set_eof =        16;
   size_from_set_date =       16;
   size_from_volstatus =      40;
   size_from_write =          20;
   size_from_xchg_data =      16;
   size_from_xchg_open =      16;
{INTERNAL ONLY BEGIN}
   { srm_ux only }
   size_from_rmt_exec  =      20;
   size_from_hfs_chmod =      16;
   size_from_hfs_chown =      16;
   size_from_hfs_chgrp =      16;
{INTERNAL ONLY END}

   {+----------------------------------------------------------------------+
    | Ganglia Message Request Types, Modes, And Codes                      |
    +----------------------------------------------------------------------+}

   {*** File Access Method Requests ***}
   req_old_read          =0;  {Old read packet}
   req_write             =1;  {Write a record to an open file.}
   req_position          =2;  {Position an open file.}
   req_read              =3;  {Read a record from an open file.}
   req_set_eof           =4;

   {*** Sharing Requests ***}
   req_flock             =8;  {Lock an open file for exclusive use.}
   req_funlock           =9;  {Unlock an open file.}
   req_info              =10;
   req_close             =13; {Close an open file.}

   {*** Directory Access Requests ***}
   req_open              =14;
   req_purgelink         =15;
   req_catalog           =16; {List all the files in a directory.}
   req_create            =17;
   req_createlink        =18;
   req_changeprotect     =19; {Change the passwords on a file.}
   req_catprotect        =20; {List all the passwords on a file.}
   req_xchg_data         =21;

   {*** Volume Access Requests ***}
   req_volstatus         =22;
   req_init_vol          =23;
   req_label             =24;

   {*** File Transfer Requests ***}
   req_xchg_open         =29;
   req_copy              =30;

   {*** HFS Permissions Requests ***}
   req_hfs_chmod         =31;        { added for SRM-UX }
   req_hfs_chown         =32;        { added for SRM-UX }
   req_hfs_chgrp         =33;        { added for SRM-UX }

{ changed for SRM-UX; (this constant is never used anywhere?!) }
   req_HIGHEST_IOS_req   =33;

   {*** Ganglia Requests ***}
   req_gang_cleanup      =1000;
   req_are_you_alive     =1001;
{INTERNAL ONLY BEGIN}
   {*** srm_ux           ***}
   req_rmt_exec          =1200;
{INTERNAL ONLY END}


   {*** Record Modes ***}
   data_records =         0;
   directory_records =    1;

   {*** Share Codes ***}
   exclusive_share_code = 0;
   shared_share_code    = 1;
   closed_share_code    = 2;
   corrupt_share_code   = 3;

   {*** Access Codes ***}
   random_access =        0;
   sequential_access =    1;
   primitive_access =     2;


TYPE

   {+----------------------------------------------------------------------+
    | Enumerated Types And Minor Structures Used To Make Up More           |
    | Major Structures Described In The Next Section                       |
    +----------------------------------------------------------------------+}

   { Changed for SRM-UX : }
   { modified for SRM-UX; last 12 bits now have HP-UX mode
     from stat structure in SRM-UX CAT return packets;
     (Basic CAT stmt will only output last 9 bits)
     these bits still unused in other structures                }

   { access_code_type =
      (ac_manager,
       ac_read,
       ac_write,
       ac_search,
       ac_purgelink,
       ac_createlink,
       ac_execute,
       ac_generic1,ac_generic09,ac_generic17,
       ac_generic2,ac_generic10,ac_generic18,
       ac_generic3,ac_generic11,ac_generic19,
       ac_generic4,ac_generic12,ac_generic20,
       ac_generic5,ac_generic13,ac_generic21,
       ac_generic6,ac_generic14,ac_generic22,
       ac_generic7,ac_generic15,ac_generic23,
       ac_generic8,ac_generic16,ac_generic24,
       ac_generic25); }

      access_code_type =
	 (ac_manager,
	  ac_read,
	  ac_write,
	  ac_search,
	  ac_purgelink,
	  ac_createlink,
	  ac_execute,
	  ac_generic1, ac_generic09,ac_generic17,ac_generic2, ac_generic10,
	  ac_generic18,ac_generic3, ac_generic11,ac_generic19,ac_generic4,
	  ac_generic12,ac_generic20,ac_generic5,
	  ac_setuid,  ac_setgid,  ac_sticky,
	  ac_owner_r, ac_owner_w, ac_owner_x,
	  ac_group_r, ac_group_w, ac_group_x,
	  ac_other_r, ac_other_w, ac_other_x);

   file_id_type = integer;

   {*** Filler Definitions Used In Padding Out Message Packet Layouts ***}
   gang_boolean_filler = boolean;
   gang_32bit_filler = integer;
   gang_16bit_filler = -32768..32767;

   long_boolean = record case integer of
	1:      (i    : integer);
	2:      (fill1: gang_16bit_filler;
		 fill2: gang_boolean_filler;
		 value: boolean);
	end;

   gang_file_codes = packed record
      case integer of
      0 :  (i: integer);
      1 :  (si1: shortint;
	    si2: shortint);
      2 : (firstword: -32768..32767;
	   division_code: 0..63;
	   dcd_system_type: 0..15;
	   dcd_file_type: 0..63);

   end;

   gang_open_type =
      (open_data,                {Normal data file}
       open_protected_directory, {Directory not closed on cleanup}
       open_directory            {Directory closed on cleanup}
      );

   name_type = packed array [1..name_type_len] of char;

   path_start_type =
      (start_root,             {Start search at root directory}
       start_alternate         {Start search at a working directory.}
      );

   position_type =
      (pos_absolute,      {Position at absolute location in file}
       pos_seq            {Position relative to current record}
      );


   {+----------------------------------------------------------------------+
    | Data Structures Which Are Part Of Message Packet Layouts             |
    +----------------------------------------------------------------------+}

   access_capabilities = packed array [ access_code_type ] of boolean;

	{ modified for SRM-UX; id field now has owner or group id
	  in CAT return packets; still treated as fill (don't care)
	  in other data structures }

   date_type = record
      { fill: gang_16bit_filler; }
       id : shortint;           { was fill : gang_16bit_filler; }
      date: packed record
	      month: 0..12;
	      day  : 0..31;
	      year : 0..127; {LAF 880101 range is now 0..127, not 0..100}
	    end;
      seconds_since_midnight : integer
   end;

   device_address_type = record
      address1   : integer;
      haddress   : integer;
      unit_num   : integer;
      volume_num : integer
   end;

   file_header_type = record
      num_file_name_sets : integer;
      working_directory  : file_id_type;
      filler1            : gang_16bit_filler;
      path_type          : path_start_type;
      root_password      : name_type;
   end;

      { Modified for SRM-UX }
   file_info_type = record
      file_name           : name_type;
      open_flag           : long_boolean;
      share_code          : integer;
      file_code           : gang_file_codes;
      record_mode         : integer;
      max_record_size     : integer;
      max_file_size       : integer;
		{ owner uid is in id field if SRM-UX CAT return packet }
      creation_date       : date_type;
		{ group uid is in id field if SRM-UX CAT return packet }
      last_access_date    : date_type;
      capabilities        : access_capabilities;
      logical_eof         : integer;
      physical_size       : integer;
   end;

   file_name_set = record
      file_name : name_type;
      password  : name_type;
      filler    : gang_32bit_filler
   end;

   linkfillertype = packed record
      requeue:          boolean;
      zit1:             byte;       { unused }
      zit2:             integer;    { unused }
      oddbytefiller:    byte;       { unused }
      destaddr:         byte;
      sourceaddr:       byte;   { These three bytes     }
      len_lobyte:       byte;   { are filled in by      }
      len_hibyte:       byte;   { the transmitting card }
      level:            byte;
   end;

   msg_packet_type = packed array [1..800 {or so} ] of char;
   msg_packet_ptr = ^msg_packet_type;

   owner_id_type = record
      id : integer;
   end;

   protect_code_set = record
      capabilities   : access_capabilities;
      password       : name_type;
      filler         : gang_32bit_filler
   end;

   return_header_type = record
      linkfiller            : linkfillertype;
      message_length        : integer;
      return_request_type   : integer;
      user_sequencing_field : integer;
      status                : integer
   end;

   send_header_type = record
      linkfiller            : linkfillertype;
      message_length        : integer;
      send_request_type     : integer;
      user_sequencing_field : integer
   end;

   volume_header_type = record
      filler1                : gang_32bit_filler;
      driver_name            : name_type;
      catalogue_organization : name_type;
      device_address_present : long_boolean;
      device_address         : device_address_type;
      volume_name            : name_type;
   end;

   volume_info_type = record
      free_blocks   : integer;
      bad_blocks    : integer;
      media_origin  : integer;
      interleave    : integer;
      volume_label  : name_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Are You Alive ?!         |
    +----------------------------------------------------------------------+}

   send_are_you_alive = record
      send_mess_header   : send_header_type;
   end;

   return_are_you_alive = record
      return_mess_header : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Catalogue                |
    +----------------------------------------------------------------------+}

   send_catalogue = record
      send_mess_header   : send_header_type;
      max_num_files      : integer;
      file_index         : integer;
      filler1            : gang_32bit_filler; {actual_num_files}
      volume_name_header : volume_header_type;
      file_name_header   : file_header_type;
      filler2            : gang_32bit_filler;
      start_name_sets    : integer
   end;

   return_catalogue = record
      return_mess_header : return_header_type;
      filler1            : gang_32bit_filler; {file_index}
      actual_num_files   : integer;
      cat_info           : array [1..7] of file_info_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Catalogue Protect Codes  |
    +----------------------------------------------------------------------+}

   send_cat_passwords = record
      send_mess_header        : send_header_type;
      max_num_passwords       : integer;
      filler1                 : gang_32bit_filler;  {actual_passwords}
      password_index          : integer;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      filler2                 : gang_32bit_filler;
      start_name_sets         : integer
   end;

   return_cat_passwords = record
      return_mess_header   : return_header_type;
      actual_num_passwords : integer;
      filler1              : gang_32bit_filler;
      password_info        : array [1..24] of record
				password     : name_type;
				capabilities : access_capabilities
			     end
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Change Protect Codes     |
    +----------------------------------------------------------------------+}

   send_change_protect_codes = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      num_protect_code_sets   : integer;
      start_name_sets         : integer
   end;

   return_change_protect_codes = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Change Volume Label      |
    +----------------------------------------------------------------------+}

   send_change_volume_label = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      password                : name_type;
      new_volume_name         : name_type;
      new_vol_password        : name_type;
   end;

   return_change_volume_label = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Close A File             |
    +----------------------------------------------------------------------+}

   send_closeafile = record
      send_mess_header   : send_header_type;
      file_id            : file_id_type;
      directory_password : name_type;
      file_password      : name_type;
      filler5            : long_boolean;
      nodeallocate       : long_boolean;
   end;

   return_closeafile = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Copy File To File        |
    +----------------------------------------------------------------------+}

   send_copy = record
      send_mess_header       : send_header_type;
      source_file_id         : file_id_type;
      source_offset          : integer;
      destination_file_id    : file_id_type;
      destination_offset     : integer;
      requested              : integer;
   end;

   return_copy = record
      return_mess_header   : return_header_type;
      actual               : integer;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Create A File            |
    +----------------------------------------------------------------------+}

   send_createafile = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      file_code               : gang_file_codes;
      record_mode             : integer;
      max_record_size         : integer;
      first_extent            : integer;    {Size in logical records.}
      contiguous_first_extent : long_boolean;
      secondary_extent        : integer;
      max_file_size           : integer;
      boot_start_address      : integer;
      num_protect_code_sets   : integer;
      label_included_flag     : long_boolean;
      start_name_sets         : integer
   end;

   return_createafile = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Create A Link (Rename)   |
    +----------------------------------------------------------------------+}

   send_createlink = record
      send_mess_header     : send_header_type;
      volume_name_header   : volume_header_type;
      old_file_name_header : file_header_type;
      new_file_name_header : file_header_type;
      purge_old_link       : long_boolean;
      start_name_sets      : integer
   end;

   return_createlink = record
      return_mess_header   : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Exchange files           |
    +----------------------------------------------------------------------+}

   send_xchg_data = record
      send_mess_header     : send_header_type;
      volume_name_header   : volume_header_type;
      file_name_header1    : file_header_type;
      file_name_header2    : file_header_type;
      start_name_sets      : integer;
   end;

   return_xchg_data = record
      return_mess_header   : return_header_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Exchange open files      |
    +----------------------------------------------------------------------+}

   send_xchg_open = record
      send_mess_header     : send_header_type;
      file_id_1            : file_id_type;
      file_id_2            : file_id_type;
   end;

   return_xchg_open = record
      return_mess_header   : return_header_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: File Information         |
    +----------------------------------------------------------------------+}

   send_fileinfo = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type
   end;

   return_fileinfo = record
      return_mess_header : return_header_type;
      current_record     : integer;
      file_info          : file_info_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Ganglia Cleanup          |
    +----------------------------------------------------------------------+}

   send_gang_cleanup = record
      send_mess_header          : send_header_type;
      keep_protected_directories: long_boolean;
   end;

   return_gang_cleanup = record
      return_mess_header : return_header_type
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Initialize A Volume      |
    +----------------------------------------------------------------------+}

   send_initialize = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      password                : name_type;
      num_protect_code_sets   : integer;
      new_volume_name         : name_type;
      new_cat_organization    : name_type;
      sectors_per_block       : integer;
      format_media            : long_boolean;
      interleave_factor       : integer;
      filler3                 : gang_32bit_filler;
      physical_sector_size    : integer;
      new_password            : {global_}name_type;
      start_protect_code_sets : integer;
      init_root_password      : {global_}name_type;
   end;

   return_initialize = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Lock A File              |
    +----------------------------------------------------------------------+}

   send_lockafile = record
      send_mess_header : send_header_type;
      file_id          : file_id_type;
      wait_for_lock    : long_boolean
   end;

   return_lockafile = record
      return_mess_header : return_header_type;
      success            : long_boolean
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Open A File              |
    +----------------------------------------------------------------------+}

   send_openafile = record
      send_mess_header       : send_header_type;
      volume_name_header     : volume_header_type;
      file_name_header       : file_header_type;
      filler2                : integer;
      filler3                : integer;
      share_code             : integer;
      filler4                : owner_id_type;
      filler1                : gang_16bit_filler;
      open_type              : gang_open_type;
      start_name_sets        : integer
   end;

   return_openafile = record
      return_mess_header : return_header_type;
      file_id            : file_id_type;
      record_mode        : integer;
      max_record_size    : integer;
      max_file_size      : integer;
      file_code          : gang_file_codes;
      open_logical_eof   : integer;
      sharebits          : integer;
      sec_ext_size       : integer;
      boot_start_address : integer;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Position To A Record     |
    +----------------------------------------------------------------------+}

   send_positiontoarecord = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      filler3          : gang_16bit_filler;
      type_of_position : position_type;
      byte_offset      : integer
   end;

   return_positiontoarecord = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Purge Link               |
    +----------------------------------------------------------------------+}

   send_purgelink = record
      send_mess_header   : send_header_type;
      volume_name_header : volume_header_type;
      file_name_header   : file_header_type;
      start_name_sets    : integer
   end;

   return_purgelink = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request:  Read A Record           |
    +----------------------------------------------------------------------+}

   send_readarecord = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type;
      access_code       : integer;
      filler3           : array [1..2] of gang_32bit_filler;
      requested         : integer;
      offset            : integer
   end;

   return_readarecord = record
      return_mess_header  : return_header_type;
      actual              : integer;
      filler1             : array [1..4] of gang_32bit_filler;
      data                : packed array[1..512] of char;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Set Date                 |
    +----------------------------------------------------------------------+}

   send_set_date = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      set_access_date  : long_boolean;
      access_date      : date_type;
      set_creation_date: long_boolean;
      creation_date    : date_type
   end;

   return_set_date = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Set Eof                  |
    +----------------------------------------------------------------------+}

   send_set_eof = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      use_current_ptr  : long_boolean;
      byte_offset      : integer
   end;

   return_set_eof = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Unlock A File            |
    +----------------------------------------------------------------------+}

   send_unlockafile = record
      send_mess_header : send_header_type;
      file_id          : file_id_type;
      explicit_unlock  : long_boolean;
   end;

   return_unlockafile = record
      return_mess_header : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Volume Status            |
    +----------------------------------------------------------------------+}

   send_volume_status = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
   end;

	  { Modified for SRM-UX }
   return_volume_status = record
      return_mess_header   : return_header_type;
      fill1                : gang_16bit_filler;
      srm_ux_flag          : boolean;     { FALSE if SRM ; TRUE if SRM-UX }
      exist                : boolean;
      interleave           : integer;
      volume_name          : name_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Write A Record           |
    +----------------------------------------------------------------------+}

   send_writearecord = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type;
      access_code       : integer;
      filler3           : array [1..2] of gang_32bit_filler;
      requested         : integer;
      offset            : integer;
      filler8           : long_boolean;
      flush_buffer      : long_boolean;
      data              : packed array [1..512] of char
   end;

   return_writearecord = record
      return_mess_header  : return_header_type;
      actual              : integer;
   end;

{INTERNAL ONLY BEGIN}
   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: remote execute           |
    +----------------------------------------------------------------------+}
   send_rmt_exec = record
      send_mess_header  : send_header_type;
      volume_name_header: volume_header_type;
      cmd_size          : integer;
      directory_id      : file_id_type;
      filler1           : gang_16bit_filler;
      path_type         : path_start_type;
      volume_pword      : name_type;
      spare1            : integer;
      spare2            : integer;
      cmd               : packed array [1..512] of char;
   end;

   return_rmt_exec = record
      return_mess_header  : return_header_type;
      file_id             : file_id_type;
   end;
{INTERNAL ONLY END}

{^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^}

	{ the following definitions were added for SRM-UX }

     {+----------------------------------------------------------------------+
      | Send and return record layouts for request: HFS chmod                |
      +----------------------------------------------------------------------+}

	{ use build_volname_header on old_header variant 1st;
	  then fill in fields specific to chmod }
       volume_header_chmod = record case boolean of
	  false: ( old_header             : volume_header_type);
	  true:  ( filler1                : gang_32bit_filler;
		   driver_name            : name_type;
		   catalogue_organization : name_type;
		   device_address_present : long_boolean;
		   actual_device_address  : integer;
		   delta_mask             : integer;  { specific for chmod }
		   ordinary_perm          : integer;  { specific for chmod }
		   dir_perm               : integer;  { specific for chmod }
		   volume_name            : name_type; );
       end;

       send_hfs_chmod = record
	  send_mess_header       : send_header_type;
	  volume_name_header     : volume_header_chmod;
	  file_name_header       : file_header_type;
	  filler1                : integer;
	  filler2                : integer;
	  filler3                : integer;
	  filler4                : integer;
	  filler5                : integer;
	  start_name_sets        : integer       { dummy field }
       end;

       return_hfs_chmod = record
	  return_mess_header  : return_header_type;
       end;

     {+----------------------------------------------------------------------+
      | Send and return record layouts for requests: HFS chown and HFS chgrp |
      +----------------------------------------------------------------------+}

	{ use build_volname_header on old_header variant 1st;
	  then fill in fields specific to chown and chgrp }
       volume_header_chown = record case boolean of
	  false: ( old_header             : volume_header_type);
	  true:  ( new_owner              : integer;   { specific for chown and
				  chgrp; will be new group for chgrp }
		   driver_name            : name_type;
		   catalogue_organization : name_type;
		   device_address_present : long_boolean;
		   device_address         : device_address_type;
		   volume_name            : name_type; );
       end;


       send_hfs_chown = record
	  send_mess_header       : send_header_type;
	  volume_name_header     : volume_header_chown;
	  file_name_header       : file_header_type;
	  filler1                : integer;
	  filler2                : integer;
	  filler3                : integer;
	  filler4                : integer;
	  filler5                : integer;
	  start_name_sets        : integer       { dummy field }
       end;

       return_hfs_chown = record
	  return_mess_header  : return_header_type;
       end;

@


56.2
log
@
pws2rcs automatic delta on Wed Jan 27 11:57:27 MST 1993
@
text
@d1 931
@


56.1
log
@Automatic bump of revision number for PWS version 3.25
@
text
@a0 931
{****************************************************************************
 * +----------------------------------------------------------------------+ *
 * |                                                                      | *
 * |        G A N G L I A   M E S S A G E   F O R M A T S                 | *
 * |                                                                      | *
 * |        A N D   R E L A T E D   D E F I N I T I O N S                 | *
 * |                                                                      | *
 * +----------------------------------------------------------------------+ *
 ****************************************************************************}

CONST

   name_type_len = 16;

   {+----------------------------------------------------------------------+
    | Message Packet Sizes For Messages That Are Sent To Ganglia           |
    +----------------------------------------------------------------------+}
   size_to_are_you_alive =    12;
   size_to_cat =             128;   (* plus 36 *`# file name sets *)
   size_to_catprotect =      128;   (* plus 36 * # file name sets *)
   size_to_changeprotect =   116;   (* plus (36 * # file name sets) +
					    (24 * # file name sets) *)
   size_to_change_vol_label= 132;
   size_to_close =            56;
   size_to_copy =             32;
   size_to_create =          152;   (* plus (36 * # file name sets) +
					    (24 * # protect code sets)  *)
   size_to_createlink =      144;   (* plus 36 * # file name sets *)
   size_to_flock =            20;
   size_to_funlock =          20;
   size_to_gang_cleanup =     16;
   size_to_info =             20;
   size_to_init_vol =        172;   (* plus 24 * # protect code sets *)
   size_to_open =            132;   (* plus 36 * # file name sets *)
   size_to_position =         28;
   size_to_purge =           112;   (* plus 36 * # file name sets *)
   size_to_read =             40;
   size_to_set_eof =          28;
   size_to_set_date =         44;
   size_to_volstatus =        84;
   size_to_write =            48;   (* plus the size of the record <= 512 *)
   size_to_xchg_data =       140;   (* plus 36 * # file name sets *)
   size_to_xchg_open =        20;
{INTERNAL ONLY BEGIN}
   { srm_ux only }
   size_to_rmt_exec  =       120;   { plus cmd length }
   size_to_hfs_chmod =       132;   (* plus 36 * # file name sets *)
   size_to_hfs_chown =       132;   (* plus 36 * # file name sets *)
   size_to_hfs_chgrp =       132;   (* plus 36 * # file name sets *)
{INTERNAL ONLY END}


   {+----------------------------------------------------------------------+
    | Message Packet Sizes For Messages Ganglia Will Send Back             |
    +----------------------------------------------------------------------+}

   size_from_are_you_alive  = 16;
   size_from_cat =            24; (* plus 68 * # entries returned *)
   size_from_catprotect =     24; { plus 20 * # prot code entries returned }
   size_from_changeprotect =  16;
   size_from_change_vol_label=16;
   size_from_close =          16;
   size_from_copy =           20;
   size_from_create =         16;
   size_from_createlink =     16;
   size_from_flock =          20;
   size_from_funlock =        16;
   size_from_gang_cleanup =   16;
   size_from_gang_error =     16;
   size_from_info =           88;
   size_from_init_vol =       16;
   size_from_open =           52;
   size_from_position =       16;
   size_from_purge =          16;
   size_from_read =           36;   (* plus the size of the record <= 512 *)
   size_from_set_eof =        16;
   size_from_set_date =       16;
   size_from_volstatus =      40;
   size_from_write =          20;
   size_from_xchg_data =      16;
   size_from_xchg_open =      16;
{INTERNAL ONLY BEGIN}
   { srm_ux only }
   size_from_rmt_exec  =      20;
   size_from_hfs_chmod =      16;
   size_from_hfs_chown =      16;
   size_from_hfs_chgrp =      16;
{INTERNAL ONLY END}

   {+----------------------------------------------------------------------+
    | Ganglia Message Request Types, Modes, And Codes                      |
    +----------------------------------------------------------------------+}

   {*** File Access Method Requests ***}
   req_old_read          =0;  {Old read packet}
   req_write             =1;  {Write a record to an open file.}
   req_position          =2;  {Position an open file.}
   req_read              =3;  {Read a record from an open file.}
   req_set_eof           =4;

   {*** Sharing Requests ***}
   req_flock             =8;  {Lock an open file for exclusive use.}
   req_funlock           =9;  {Unlock an open file.}
   req_info              =10;
   req_close             =13; {Close an open file.}

   {*** Directory Access Requests ***}
   req_open              =14;
   req_purgelink         =15;
   req_catalog           =16; {List all the files in a directory.}
   req_create            =17;
   req_createlink        =18;
   req_changeprotect     =19; {Change the passwords on a file.}
   req_catprotect        =20; {List all the passwords on a file.}
   req_xchg_data         =21;

   {*** Volume Access Requests ***}
   req_volstatus         =22;
   req_init_vol          =23;
   req_label             =24;

   {*** File Transfer Requests ***}
   req_xchg_open         =29;
   req_copy              =30;

   {*** HFS Permissions Requests ***}
   req_hfs_chmod         =31;        { added for SRM-UX }
   req_hfs_chown         =32;        { added for SRM-UX }
   req_hfs_chgrp         =33;        { added for SRM-UX }

{ changed for SRM-UX; (this constant is never used anywhere?!) }
   req_HIGHEST_IOS_req   =33;

   {*** Ganglia Requests ***}
   req_gang_cleanup      =1000;
   req_are_you_alive     =1001;
{INTERNAL ONLY BEGIN}
   {*** srm_ux           ***}
   req_rmt_exec          =1200;
{INTERNAL ONLY END}


   {*** Record Modes ***}
   data_records =         0;
   directory_records =    1;

   {*** Share Codes ***}
   exclusive_share_code = 0;
   shared_share_code    = 1;
   closed_share_code    = 2;
   corrupt_share_code   = 3;

   {*** Access Codes ***}
   random_access =        0;
   sequential_access =    1;
   primitive_access =     2;


TYPE

   {+----------------------------------------------------------------------+
    | Enumerated Types And Minor Structures Used To Make Up More           |
    | Major Structures Described In The Next Section                       |
    +----------------------------------------------------------------------+}

   { Changed for SRM-UX : }
   { modified for SRM-UX; last 12 bits now have HP-UX mode
     from stat structure in SRM-UX CAT return packets;
     (Basic CAT stmt will only output last 9 bits)
     these bits still unused in other structures                }

   { access_code_type =
      (ac_manager,
       ac_read,
       ac_write,
       ac_search,
       ac_purgelink,
       ac_createlink,
       ac_execute,
       ac_generic1,ac_generic09,ac_generic17,
       ac_generic2,ac_generic10,ac_generic18,
       ac_generic3,ac_generic11,ac_generic19,
       ac_generic4,ac_generic12,ac_generic20,
       ac_generic5,ac_generic13,ac_generic21,
       ac_generic6,ac_generic14,ac_generic22,
       ac_generic7,ac_generic15,ac_generic23,
       ac_generic8,ac_generic16,ac_generic24,
       ac_generic25); }

      access_code_type =
	 (ac_manager,
	  ac_read,
	  ac_write,
	  ac_search,
	  ac_purgelink,
	  ac_createlink,
	  ac_execute,
	  ac_generic1, ac_generic09,ac_generic17,ac_generic2, ac_generic10,
	  ac_generic18,ac_generic3, ac_generic11,ac_generic19,ac_generic4,
	  ac_generic12,ac_generic20,ac_generic5,
	  ac_setuid,  ac_setgid,  ac_sticky,
	  ac_owner_r, ac_owner_w, ac_owner_x,
	  ac_group_r, ac_group_w, ac_group_x,
	  ac_other_r, ac_other_w, ac_other_x);

   file_id_type = integer;

   {*** Filler Definitions Used In Padding Out Message Packet Layouts ***}
   gang_boolean_filler = boolean;
   gang_32bit_filler = integer;
   gang_16bit_filler = -32768..32767;

   long_boolean = record case integer of
	1:      (i    : integer);
	2:      (fill1: gang_16bit_filler;
		 fill2: gang_boolean_filler;
		 value: boolean);
	end;

   gang_file_codes = packed record
      case integer of
      0 :  (i: integer);
      1 :  (si1: shortint;
	    si2: shortint);
      2 : (firstword: -32768..32767;
	   division_code: 0..63;
	   dcd_system_type: 0..15;
	   dcd_file_type: 0..63);

   end;

   gang_open_type =
      (open_data,                {Normal data file}
       open_protected_directory, {Directory not closed on cleanup}
       open_directory            {Directory closed on cleanup}
      );

   name_type = packed array [1..name_type_len] of char;

   path_start_type =
      (start_root,             {Start search at root directory}
       start_alternate         {Start search at a working directory.}
      );

   position_type =
      (pos_absolute,      {Position at absolute location in file}
       pos_seq            {Position relative to current record}
      );


   {+----------------------------------------------------------------------+
    | Data Structures Which Are Part Of Message Packet Layouts             |
    +----------------------------------------------------------------------+}

   access_capabilities = packed array [ access_code_type ] of boolean;

	{ modified for SRM-UX; id field now has owner or group id
	  in CAT return packets; still treated as fill (don't care)
	  in other data structures }

   date_type = record
      { fill: gang_16bit_filler; }
       id : shortint;           { was fill : gang_16bit_filler; }
      date: packed record
	      month: 0..12;
	      day  : 0..31;
	      year : 0..127; {LAF 880101 range is now 0..127, not 0..100}
	    end;
      seconds_since_midnight : integer
   end;

   device_address_type = record
      address1   : integer;
      haddress   : integer;
      unit_num   : integer;
      volume_num : integer
   end;

   file_header_type = record
      num_file_name_sets : integer;
      working_directory  : file_id_type;
      filler1            : gang_16bit_filler;
      path_type          : path_start_type;
      root_password      : name_type;
   end;

      { Modified for SRM-UX }
   file_info_type = record
      file_name           : name_type;
      open_flag           : long_boolean;
      share_code          : integer;
      file_code           : gang_file_codes;
      record_mode         : integer;
      max_record_size     : integer;
      max_file_size       : integer;
		{ owner uid is in id field if SRM-UX CAT return packet }
      creation_date       : date_type;
		{ group uid is in id field if SRM-UX CAT return packet }
      last_access_date    : date_type;
      capabilities        : access_capabilities;
      logical_eof         : integer;
      physical_size       : integer;
   end;

   file_name_set = record
      file_name : name_type;
      password  : name_type;
      filler    : gang_32bit_filler
   end;

   linkfillertype = packed record
      requeue:          boolean;
      zit1:             byte;       { unused }
      zit2:             integer;    { unused }
      oddbytefiller:    byte;       { unused }
      destaddr:         byte;
      sourceaddr:       byte;   { These three bytes     }
      len_lobyte:       byte;   { are filled in by      }
      len_hibyte:       byte;   { the transmitting card }
      level:            byte;
   end;

   msg_packet_type = packed array [1..800 {or so} ] of char;
   msg_packet_ptr = ^msg_packet_type;

   owner_id_type = record
      id : integer;
   end;

   protect_code_set = record
      capabilities   : access_capabilities;
      password       : name_type;
      filler         : gang_32bit_filler
   end;

   return_header_type = record
      linkfiller            : linkfillertype;
      message_length        : integer;
      return_request_type   : integer;
      user_sequencing_field : integer;
      status                : integer
   end;

   send_header_type = record
      linkfiller            : linkfillertype;
      message_length        : integer;
      send_request_type     : integer;
      user_sequencing_field : integer
   end;

   volume_header_type = record
      filler1                : gang_32bit_filler;
      driver_name            : name_type;
      catalogue_organization : name_type;
      device_address_present : long_boolean;
      device_address         : device_address_type;
      volume_name            : name_type;
   end;

   volume_info_type = record
      free_blocks   : integer;
      bad_blocks    : integer;
      media_origin  : integer;
      interleave    : integer;
      volume_label  : name_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Are You Alive ?!         |
    +----------------------------------------------------------------------+}

   send_are_you_alive = record
      send_mess_header   : send_header_type;
   end;

   return_are_you_alive = record
      return_mess_header : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Catalogue                |
    +----------------------------------------------------------------------+}

   send_catalogue = record
      send_mess_header   : send_header_type;
      max_num_files      : integer;
      file_index         : integer;
      filler1            : gang_32bit_filler; {actual_num_files}
      volume_name_header : volume_header_type;
      file_name_header   : file_header_type;
      filler2            : gang_32bit_filler;
      start_name_sets    : integer
   end;

   return_catalogue = record
      return_mess_header : return_header_type;
      filler1            : gang_32bit_filler; {file_index}
      actual_num_files   : integer;
      cat_info           : array [1..7] of file_info_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Catalogue Protect Codes  |
    +----------------------------------------------------------------------+}

   send_cat_passwords = record
      send_mess_header        : send_header_type;
      max_num_passwords       : integer;
      filler1                 : gang_32bit_filler;  {actual_passwords}
      password_index          : integer;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      filler2                 : gang_32bit_filler;
      start_name_sets         : integer
   end;

   return_cat_passwords = record
      return_mess_header   : return_header_type;
      actual_num_passwords : integer;
      filler1              : gang_32bit_filler;
      password_info        : array [1..24] of record
				password     : name_type;
				capabilities : access_capabilities
			     end
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Change Protect Codes     |
    +----------------------------------------------------------------------+}

   send_change_protect_codes = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      num_protect_code_sets   : integer;
      start_name_sets         : integer
   end;

   return_change_protect_codes = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Change Volume Label      |
    +----------------------------------------------------------------------+}

   send_change_volume_label = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      password                : name_type;
      new_volume_name         : name_type;
      new_vol_password        : name_type;
   end;

   return_change_volume_label = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Close A File             |
    +----------------------------------------------------------------------+}

   send_closeafile = record
      send_mess_header   : send_header_type;
      file_id            : file_id_type;
      directory_password : name_type;
      file_password      : name_type;
      filler5            : long_boolean;
      nodeallocate       : long_boolean;
   end;

   return_closeafile = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Copy File To File        |
    +----------------------------------------------------------------------+}

   send_copy = record
      send_mess_header       : send_header_type;
      source_file_id         : file_id_type;
      source_offset          : integer;
      destination_file_id    : file_id_type;
      destination_offset     : integer;
      requested              : integer;
   end;

   return_copy = record
      return_mess_header   : return_header_type;
      actual               : integer;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Create A File            |
    +----------------------------------------------------------------------+}

   send_createafile = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      file_code               : gang_file_codes;
      record_mode             : integer;
      max_record_size         : integer;
      first_extent            : integer;    {Size in logical records.}
      contiguous_first_extent : long_boolean;
      secondary_extent        : integer;
      max_file_size           : integer;
      boot_start_address      : integer;
      num_protect_code_sets   : integer;
      label_included_flag     : long_boolean;
      start_name_sets         : integer
   end;

   return_createafile = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Create A Link (Rename)   |
    +----------------------------------------------------------------------+}

   send_createlink = record
      send_mess_header     : send_header_type;
      volume_name_header   : volume_header_type;
      old_file_name_header : file_header_type;
      new_file_name_header : file_header_type;
      purge_old_link       : long_boolean;
      start_name_sets      : integer
   end;

   return_createlink = record
      return_mess_header   : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Exchange files           |
    +----------------------------------------------------------------------+}

   send_xchg_data = record
      send_mess_header     : send_header_type;
      volume_name_header   : volume_header_type;
      file_name_header1    : file_header_type;
      file_name_header2    : file_header_type;
      start_name_sets      : integer;
   end;

   return_xchg_data = record
      return_mess_header   : return_header_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Exchange open files      |
    +----------------------------------------------------------------------+}

   send_xchg_open = record
      send_mess_header     : send_header_type;
      file_id_1            : file_id_type;
      file_id_2            : file_id_type;
   end;

   return_xchg_open = record
      return_mess_header   : return_header_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: File Information         |
    +----------------------------------------------------------------------+}

   send_fileinfo = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type
   end;

   return_fileinfo = record
      return_mess_header : return_header_type;
      current_record     : integer;
      file_info          : file_info_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Ganglia Cleanup          |
    +----------------------------------------------------------------------+}

   send_gang_cleanup = record
      send_mess_header          : send_header_type;
      keep_protected_directories: long_boolean;
   end;

   return_gang_cleanup = record
      return_mess_header : return_header_type
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Initialize A Volume      |
    +----------------------------------------------------------------------+}

   send_initialize = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      password                : name_type;
      num_protect_code_sets   : integer;
      new_volume_name         : name_type;
      new_cat_organization    : name_type;
      sectors_per_block       : integer;
      format_media            : long_boolean;
      interleave_factor       : integer;
      filler3                 : gang_32bit_filler;
      physical_sector_size    : integer;
      new_password            : {global_}name_type;
      start_protect_code_sets : integer;
      init_root_password      : {global_}name_type;
   end;

   return_initialize = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Lock A File              |
    +----------------------------------------------------------------------+}

   send_lockafile = record
      send_mess_header : send_header_type;
      file_id          : file_id_type;
      wait_for_lock    : long_boolean
   end;

   return_lockafile = record
      return_mess_header : return_header_type;
      success            : long_boolean
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Open A File              |
    +----------------------------------------------------------------------+}

   send_openafile = record
      send_mess_header       : send_header_type;
      volume_name_header     : volume_header_type;
      file_name_header       : file_header_type;
      filler2                : integer;
      filler3                : integer;
      share_code             : integer;
      filler4                : owner_id_type;
      filler1                : gang_16bit_filler;
      open_type              : gang_open_type;
      start_name_sets        : integer
   end;

   return_openafile = record
      return_mess_header : return_header_type;
      file_id            : file_id_type;
      record_mode        : integer;
      max_record_size    : integer;
      max_file_size      : integer;
      file_code          : gang_file_codes;
      open_logical_eof   : integer;
      sharebits          : integer;
      sec_ext_size       : integer;
      boot_start_address : integer;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Position To A Record     |
    +----------------------------------------------------------------------+}

   send_positiontoarecord = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      filler3          : gang_16bit_filler;
      type_of_position : position_type;
      byte_offset      : integer
   end;

   return_positiontoarecord = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Purge Link               |
    +----------------------------------------------------------------------+}

   send_purgelink = record
      send_mess_header   : send_header_type;
      volume_name_header : volume_header_type;
      file_name_header   : file_header_type;
      start_name_sets    : integer
   end;

   return_purgelink = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request:  Read A Record           |
    +----------------------------------------------------------------------+}

   send_readarecord = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type;
      access_code       : integer;
      filler3           : array [1..2] of gang_32bit_filler;
      requested         : integer;
      offset            : integer
   end;

   return_readarecord = record
      return_mess_header  : return_header_type;
      actual              : integer;
      filler1             : array [1..4] of gang_32bit_filler;
      data                : packed array[1..512] of char;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Set Date                 |
    +----------------------------------------------------------------------+}

   send_set_date = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      set_access_date  : long_boolean;
      access_date      : date_type;
      set_creation_date: long_boolean;
      creation_date    : date_type
   end;

   return_set_date = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Set Eof                  |
    +----------------------------------------------------------------------+}

   send_set_eof = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      use_current_ptr  : long_boolean;
      byte_offset      : integer
   end;

   return_set_eof = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Unlock A File            |
    +----------------------------------------------------------------------+}

   send_unlockafile = record
      send_mess_header : send_header_type;
      file_id          : file_id_type;
      explicit_unlock  : long_boolean;
   end;

   return_unlockafile = record
      return_mess_header : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Volume Status            |
    +----------------------------------------------------------------------+}

   send_volume_status = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
   end;

	  { Modified for SRM-UX }
   return_volume_status = record
      return_mess_header   : return_header_type;
      fill1                : gang_16bit_filler;
      srm_ux_flag          : boolean;     { FALSE if SRM ; TRUE if SRM-UX }
      exist                : boolean;
      interleave           : integer;
      volume_name          : name_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Write A Record           |
    +----------------------------------------------------------------------+}

   send_writearecord = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type;
      access_code       : integer;
      filler3           : array [1..2] of gang_32bit_filler;
      requested         : integer;
      offset            : integer;
      filler8           : long_boolean;
      flush_buffer      : long_boolean;
      data              : packed array [1..512] of char
   end;

   return_writearecord = record
      return_mess_header  : return_header_type;
      actual              : integer;
   end;

{INTERNAL ONLY BEGIN}
   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: remote execute           |
    +----------------------------------------------------------------------+}
   send_rmt_exec = record
      send_mess_header  : send_header_type;
      volume_name_header: volume_header_type;
      cmd_size          : integer;
      directory_id      : file_id_type;
      filler1           : gang_16bit_filler;
      path_type         : path_start_type;
      volume_pword      : name_type;
      spare1            : integer;
      spare2            : integer;
      cmd               : packed array [1..512] of char;
   end;

   return_rmt_exec = record
      return_mess_header  : return_header_type;
      file_id             : file_id_type;
   end;
{INTERNAL ONLY END}

{^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^}

	{ the following definitions were added for SRM-UX }

     {+----------------------------------------------------------------------+
      | Send and return record layouts for request: HFS chmod                |
      +----------------------------------------------------------------------+}

	{ use build_volname_header on old_header variant 1st;
	  then fill in fields specific to chmod }
       volume_header_chmod = record case boolean of
	  false: ( old_header             : volume_header_type);
	  true:  ( filler1                : gang_32bit_filler;
		   driver_name            : name_type;
		   catalogue_organization : name_type;
		   device_address_present : long_boolean;
		   actual_device_address  : integer;
		   delta_mask             : integer;  { specific for chmod }
		   ordinary_perm          : integer;  { specific for chmod }
		   dir_perm               : integer;  { specific for chmod }
		   volume_name            : name_type; );
       end;

       send_hfs_chmod = record
	  send_mess_header       : send_header_type;
	  volume_name_header     : volume_header_chmod;
	  file_name_header       : file_header_type;
	  filler1                : integer;
	  filler2                : integer;
	  filler3                : integer;
	  filler4                : integer;
	  filler5                : integer;
	  start_name_sets        : integer       { dummy field }
       end;

       return_hfs_chmod = record
	  return_mess_header  : return_header_type;
       end;

     {+----------------------------------------------------------------------+
      | Send and return record layouts for requests: HFS chown and HFS chgrp |
      +----------------------------------------------------------------------+}

	{ use build_volname_header on old_header variant 1st;
	  then fill in fields specific to chown and chgrp }
       volume_header_chown = record case boolean of
	  false: ( old_header             : volume_header_type);
	  true:  ( new_owner              : integer;   { specific for chown and
				  chgrp; will be new group for chgrp }
		   driver_name            : name_type;
		   catalogue_organization : name_type;
		   device_address_present : long_boolean;
		   device_address         : device_address_type;
		   volume_name            : name_type; );
       end;


       send_hfs_chown = record
	  send_mess_header       : send_header_type;
	  volume_name_header     : volume_header_chown;
	  file_name_header       : file_header_type;
	  filler1                : integer;
	  filler2                : integer;
	  filler3                : integer;
	  filler4                : integer;
	  filler5                : integer;
	  start_name_sets        : integer       { dummy field }
       end;

       return_hfs_chown = record
	  return_mess_header  : return_header_type;
       end;

@


55.1
log
@Automatic bump of revision number for PWS version 3.25A
@
text
@@


54.3
log
@
pws2rcs automatic delta on Wed Aug 21 12:27:56 MDT 1991
@
text
@@


54.2
log
@
pws2rcs automatic delta on Wed Aug 21 09:35:48 MDT 1991
@
text
@d1 931
@


54.1
log
@Automatic bump of revision number for PWS version 3.24
@
text
@a0 931
{****************************************************************************
 * +----------------------------------------------------------------------+ *
 * |                                                                      | *
 * |        G A N G L I A   M E S S A G E   F O R M A T S                 | *
 * |                                                                      | *
 * |        A N D   R E L A T E D   D E F I N I T I O N S                 | *
 * |                                                                      | *
 * +----------------------------------------------------------------------+ *
 ****************************************************************************}

CONST

   name_type_len = 16;

   {+----------------------------------------------------------------------+
    | Message Packet Sizes For Messages That Are Sent To Ganglia           |
    +----------------------------------------------------------------------+}
   size_to_are_you_alive =    12;
   size_to_cat =             128;   (* plus 36 *`# file name sets *)
   size_to_catprotect =      128;   (* plus 36 * # file name sets *)
   size_to_changeprotect =   116;   (* plus (36 * # file name sets) +
					    (24 * # file name sets) *)
   size_to_change_vol_label= 132;
   size_to_close =            56;
   size_to_copy =             32;
   size_to_create =          152;   (* plus (36 * # file name sets) +
					    (24 * # protect code sets)  *)
   size_to_createlink =      144;   (* plus 36 * # file name sets *)
   size_to_flock =            20;
   size_to_funlock =          20;
   size_to_gang_cleanup =     16;
   size_to_info =             20;
   size_to_init_vol =        172;   (* plus 24 * # protect code sets *)
   size_to_open =            132;   (* plus 36 * # file name sets *)
   size_to_position =         28;
   size_to_purge =           112;   (* plus 36 * # file name sets *)
   size_to_read =             40;
   size_to_set_eof =          28;
   size_to_set_date =         44;
   size_to_volstatus =        84;
   size_to_write =            48;   (* plus the size of the record <= 512 *)
   size_to_xchg_data =       140;   (* plus 36 * # file name sets *)
   size_to_xchg_open =        20;
{INTERNAL ONLY BEGIN}
   { srm_ux only }
   size_to_rmt_exec  =       120;   { plus cmd length }
   size_to_hfs_chmod =       132;   (* plus 36 * # file name sets *)
   size_to_hfs_chown =       132;   (* plus 36 * # file name sets *)
   size_to_hfs_chgrp =       132;   (* plus 36 * # file name sets *)
{INTERNAL ONLY END}


   {+----------------------------------------------------------------------+
    | Message Packet Sizes For Messages Ganglia Will Send Back             |
    +----------------------------------------------------------------------+}

   size_from_are_you_alive  = 16;
   size_from_cat =            24; (* plus 68 * # entries returned *)
   size_from_catprotect =     24; { plus 20 * # prot code entries returned }
   size_from_changeprotect =  16;
   size_from_change_vol_label=16;
   size_from_close =          16;
   size_from_copy =           20;
   size_from_create =         16;
   size_from_createlink =     16;
   size_from_flock =          20;
   size_from_funlock =        16;
   size_from_gang_cleanup =   16;
   size_from_gang_error =     16;
   size_from_info =           88;
   size_from_init_vol =       16;
   size_from_open =           52;
   size_from_position =       16;
   size_from_purge =          16;
   size_from_read =           36;   (* plus the size of the record <= 512 *)
   size_from_set_eof =        16;
   size_from_set_date =       16;
   size_from_volstatus =      40;
   size_from_write =          20;
   size_from_xchg_data =      16;
   size_from_xchg_open =      16;
{INTERNAL ONLY BEGIN}
   { srm_ux only }
   size_from_rmt_exec  =      20;
   size_from_hfs_chmod =      16;
   size_from_hfs_chown =      16;
   size_from_hfs_chgrp =      16;
{INTERNAL ONLY END}

   {+----------------------------------------------------------------------+
    | Ganglia Message Request Types, Modes, And Codes                      |
    +----------------------------------------------------------------------+}

   {*** File Access Method Requests ***}
   req_old_read          =0;  {Old read packet}
   req_write             =1;  {Write a record to an open file.}
   req_position          =2;  {Position an open file.}
   req_read              =3;  {Read a record from an open file.}
   req_set_eof           =4;

   {*** Sharing Requests ***}
   req_flock             =8;  {Lock an open file for exclusive use.}
   req_funlock           =9;  {Unlock an open file.}
   req_info              =10;
   req_close             =13; {Close an open file.}

   {*** Directory Access Requests ***}
   req_open              =14;
   req_purgelink         =15;
   req_catalog           =16; {List all the files in a directory.}
   req_create            =17;
   req_createlink        =18;
   req_changeprotect     =19; {Change the passwords on a file.}
   req_catprotect        =20; {List all the passwords on a file.}
   req_xchg_data         =21;

   {*** Volume Access Requests ***}
   req_volstatus         =22;
   req_init_vol          =23;
   req_label             =24;

   {*** File Transfer Requests ***}
   req_xchg_open         =29;
   req_copy              =30;

   {*** HFS Permissions Requests ***}
   req_hfs_chmod         =31;        { added for SRM-UX }
   req_hfs_chown         =32;        { added for SRM-UX }
   req_hfs_chgrp         =33;        { added for SRM-UX }

{ changed for SRM-UX; (this constant is never used anywhere?!) }
   req_HIGHEST_IOS_req   =33;

   {*** Ganglia Requests ***}
   req_gang_cleanup      =1000;
   req_are_you_alive     =1001;
{INTERNAL ONLY BEGIN}
   {*** srm_ux           ***}
   req_rmt_exec          =1200;
{INTERNAL ONLY END}


   {*** Record Modes ***}
   data_records =         0;
   directory_records =    1;

   {*** Share Codes ***}
   exclusive_share_code = 0;
   shared_share_code    = 1;
   closed_share_code    = 2;
   corrupt_share_code   = 3;

   {*** Access Codes ***}
   random_access =        0;
   sequential_access =    1;
   primitive_access =     2;


TYPE

   {+----------------------------------------------------------------------+
    | Enumerated Types And Minor Structures Used To Make Up More           |
    | Major Structures Described In The Next Section                       |
    +----------------------------------------------------------------------+}

   { Changed for SRM-UX : }
   { modified for SRM-UX; last 12 bits now have HP-UX mode
     from stat structure in SRM-UX CAT return packets;
     (Basic CAT stmt will only output last 9 bits)
     these bits still unused in other structures                }

   { access_code_type =
      (ac_manager,
       ac_read,
       ac_write,
       ac_search,
       ac_purgelink,
       ac_createlink,
       ac_execute,
       ac_generic1,ac_generic09,ac_generic17,
       ac_generic2,ac_generic10,ac_generic18,
       ac_generic3,ac_generic11,ac_generic19,
       ac_generic4,ac_generic12,ac_generic20,
       ac_generic5,ac_generic13,ac_generic21,
       ac_generic6,ac_generic14,ac_generic22,
       ac_generic7,ac_generic15,ac_generic23,
       ac_generic8,ac_generic16,ac_generic24,
       ac_generic25); }

      access_code_type =
	 (ac_manager,
	  ac_read,
	  ac_write,
	  ac_search,
	  ac_purgelink,
	  ac_createlink,
	  ac_execute,
	  ac_generic1, ac_generic09,ac_generic17,ac_generic2, ac_generic10,
	  ac_generic18,ac_generic3, ac_generic11,ac_generic19,ac_generic4,
	  ac_generic12,ac_generic20,ac_generic5,
	  ac_setuid,  ac_setgid,  ac_sticky,
	  ac_owner_r, ac_owner_w, ac_owner_x,
	  ac_group_r, ac_group_w, ac_group_x,
	  ac_other_r, ac_other_w, ac_other_x);

   file_id_type = integer;

   {*** Filler Definitions Used In Padding Out Message Packet Layouts ***}
   gang_boolean_filler = boolean;
   gang_32bit_filler = integer;
   gang_16bit_filler = -32768..32767;

   long_boolean = record case integer of
	1:      (i    : integer);
	2:      (fill1: gang_16bit_filler;
		 fill2: gang_boolean_filler;
		 value: boolean);
	end;

   gang_file_codes = packed record
      case integer of
      0 :  (i: integer);
      1 :  (si1: shortint;
	    si2: shortint);
      2 : (firstword: -32768..32767;
	   division_code: 0..63;
	   dcd_system_type: 0..15;
	   dcd_file_type: 0..63);

   end;

   gang_open_type =
      (open_data,                {Normal data file}
       open_protected_directory, {Directory not closed on cleanup}
       open_directory            {Directory closed on cleanup}
      );

   name_type = packed array [1..name_type_len] of char;

   path_start_type =
      (start_root,             {Start search at root directory}
       start_alternate         {Start search at a working directory.}
      );

   position_type =
      (pos_absolute,      {Position at absolute location in file}
       pos_seq            {Position relative to current record}
      );


   {+----------------------------------------------------------------------+
    | Data Structures Which Are Part Of Message Packet Layouts             |
    +----------------------------------------------------------------------+}

   access_capabilities = packed array [ access_code_type ] of boolean;

	{ modified for SRM-UX; id field now has owner or group id
	  in CAT return packets; still treated as fill (don't care)
	  in other data structures }

   date_type = record
      { fill: gang_16bit_filler; }
       id : shortint;           { was fill : gang_16bit_filler; }
      date: packed record
	      month: 0..12;
	      day  : 0..31;
	      year : 0..127; {LAF 880101 range is now 0..127, not 0..100}
	    end;
      seconds_since_midnight : integer
   end;

   device_address_type = record
      address1   : integer;
      haddress   : integer;
      unit_num   : integer;
      volume_num : integer
   end;

   file_header_type = record
      num_file_name_sets : integer;
      working_directory  : file_id_type;
      filler1            : gang_16bit_filler;
      path_type          : path_start_type;
      root_password      : name_type;
   end;

      { Modified for SRM-UX }
   file_info_type = record
      file_name           : name_type;
      open_flag           : long_boolean;
      share_code          : integer;
      file_code           : gang_file_codes;
      record_mode         : integer;
      max_record_size     : integer;
      max_file_size       : integer;
		{ owner uid is in id field if SRM-UX CAT return packet }
      creation_date       : date_type;
		{ group uid is in id field if SRM-UX CAT return packet }
      last_access_date    : date_type;
      capabilities        : access_capabilities;
      logical_eof         : integer;
      physical_size       : integer;
   end;

   file_name_set = record
      file_name : name_type;
      password  : name_type;
      filler    : gang_32bit_filler
   end;

   linkfillertype = packed record
      requeue:          boolean;
      zit1:             byte;       { unused }
      zit2:             integer;    { unused }
      oddbytefiller:    byte;       { unused }
      destaddr:         byte;
      sourceaddr:       byte;   { These three bytes     }
      len_lobyte:       byte;   { are filled in by      }
      len_hibyte:       byte;   { the transmitting card }
      level:            byte;
   end;

   msg_packet_type = packed array [1..800 {or so} ] of char;
   msg_packet_ptr = ^msg_packet_type;

   owner_id_type = record
      id : integer;
   end;

   protect_code_set = record
      capabilities   : access_capabilities;
      password       : name_type;
      filler         : gang_32bit_filler
   end;

   return_header_type = record
      linkfiller            : linkfillertype;
      message_length        : integer;
      return_request_type   : integer;
      user_sequencing_field : integer;
      status                : integer
   end;

   send_header_type = record
      linkfiller            : linkfillertype;
      message_length        : integer;
      send_request_type     : integer;
      user_sequencing_field : integer
   end;

   volume_header_type = record
      filler1                : gang_32bit_filler;
      driver_name            : name_type;
      catalogue_organization : name_type;
      device_address_present : long_boolean;
      device_address         : device_address_type;
      volume_name            : name_type;
   end;

   volume_info_type = record
      free_blocks   : integer;
      bad_blocks    : integer;
      media_origin  : integer;
      interleave    : integer;
      volume_label  : name_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Are You Alive ?!         |
    +----------------------------------------------------------------------+}

   send_are_you_alive = record
      send_mess_header   : send_header_type;
   end;

   return_are_you_alive = record
      return_mess_header : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Catalogue                |
    +----------------------------------------------------------------------+}

   send_catalogue = record
      send_mess_header   : send_header_type;
      max_num_files      : integer;
      file_index         : integer;
      filler1            : gang_32bit_filler; {actual_num_files}
      volume_name_header : volume_header_type;
      file_name_header   : file_header_type;
      filler2            : gang_32bit_filler;
      start_name_sets    : integer
   end;

   return_catalogue = record
      return_mess_header : return_header_type;
      filler1            : gang_32bit_filler; {file_index}
      actual_num_files   : integer;
      cat_info           : array [1..7] of file_info_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Catalogue Protect Codes  |
    +----------------------------------------------------------------------+}

   send_cat_passwords = record
      send_mess_header        : send_header_type;
      max_num_passwords       : integer;
      filler1                 : gang_32bit_filler;  {actual_passwords}
      password_index          : integer;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      filler2                 : gang_32bit_filler;
      start_name_sets         : integer
   end;

   return_cat_passwords = record
      return_mess_header   : return_header_type;
      actual_num_passwords : integer;
      filler1              : gang_32bit_filler;
      password_info        : array [1..24] of record
				password     : name_type;
				capabilities : access_capabilities
			     end
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Change Protect Codes     |
    +----------------------------------------------------------------------+}

   send_change_protect_codes = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      num_protect_code_sets   : integer;
      start_name_sets         : integer
   end;

   return_change_protect_codes = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Change Volume Label      |
    +----------------------------------------------------------------------+}

   send_change_volume_label = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      password                : name_type;
      new_volume_name         : name_type;
      new_vol_password        : name_type;
   end;

   return_change_volume_label = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Close A File             |
    +----------------------------------------------------------------------+}

   send_closeafile = record
      send_mess_header   : send_header_type;
      file_id            : file_id_type;
      directory_password : name_type;
      file_password      : name_type;
      filler5            : long_boolean;
      nodeallocate       : long_boolean;
   end;

   return_closeafile = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Copy File To File        |
    +----------------------------------------------------------------------+}

   send_copy = record
      send_mess_header       : send_header_type;
      source_file_id         : file_id_type;
      source_offset          : integer;
      destination_file_id    : file_id_type;
      destination_offset     : integer;
      requested              : integer;
   end;

   return_copy = record
      return_mess_header   : return_header_type;
      actual               : integer;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Create A File            |
    +----------------------------------------------------------------------+}

   send_createafile = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      file_name_header        : file_header_type;
      file_code               : gang_file_codes;
      record_mode             : integer;
      max_record_size         : integer;
      first_extent            : integer;    {Size in logical records.}
      contiguous_first_extent : long_boolean;
      secondary_extent        : integer;
      max_file_size           : integer;
      boot_start_address      : integer;
      num_protect_code_sets   : integer;
      label_included_flag     : long_boolean;
      start_name_sets         : integer
   end;

   return_createafile = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Create A Link (Rename)   |
    +----------------------------------------------------------------------+}

   send_createlink = record
      send_mess_header     : send_header_type;
      volume_name_header   : volume_header_type;
      old_file_name_header : file_header_type;
      new_file_name_header : file_header_type;
      purge_old_link       : long_boolean;
      start_name_sets      : integer
   end;

   return_createlink = record
      return_mess_header   : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Exchange files           |
    +----------------------------------------------------------------------+}

   send_xchg_data = record
      send_mess_header     : send_header_type;
      volume_name_header   : volume_header_type;
      file_name_header1    : file_header_type;
      file_name_header2    : file_header_type;
      start_name_sets      : integer;
   end;

   return_xchg_data = record
      return_mess_header   : return_header_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Exchange open files      |
    +----------------------------------------------------------------------+}

   send_xchg_open = record
      send_mess_header     : send_header_type;
      file_id_1            : file_id_type;
      file_id_2            : file_id_type;
   end;

   return_xchg_open = record
      return_mess_header   : return_header_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: File Information         |
    +----------------------------------------------------------------------+}

   send_fileinfo = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type
   end;

   return_fileinfo = record
      return_mess_header : return_header_type;
      current_record     : integer;
      file_info          : file_info_type;
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Ganglia Cleanup          |
    +----------------------------------------------------------------------+}

   send_gang_cleanup = record
      send_mess_header          : send_header_type;
      keep_protected_directories: long_boolean;
   end;

   return_gang_cleanup = record
      return_mess_header : return_header_type
   end;



   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Initialize A Volume      |
    +----------------------------------------------------------------------+}

   send_initialize = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
      password                : name_type;
      num_protect_code_sets   : integer;
      new_volume_name         : name_type;
      new_cat_organization    : name_type;
      sectors_per_block       : integer;
      format_media            : long_boolean;
      interleave_factor       : integer;
      filler3                 : gang_32bit_filler;
      physical_sector_size    : integer;
      new_password            : {global_}name_type;
      start_protect_code_sets : integer;
      init_root_password      : {global_}name_type;
   end;

   return_initialize = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Lock A File              |
    +----------------------------------------------------------------------+}

   send_lockafile = record
      send_mess_header : send_header_type;
      file_id          : file_id_type;
      wait_for_lock    : long_boolean
   end;

   return_lockafile = record
      return_mess_header : return_header_type;
      success            : long_boolean
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Open A File              |
    +----------------------------------------------------------------------+}

   send_openafile = record
      send_mess_header       : send_header_type;
      volume_name_header     : volume_header_type;
      file_name_header       : file_header_type;
      filler2                : integer;
      filler3                : integer;
      share_code             : integer;
      filler4                : owner_id_type;
      filler1                : gang_16bit_filler;
      open_type              : gang_open_type;
      start_name_sets        : integer
   end;

   return_openafile = record
      return_mess_header : return_header_type;
      file_id            : file_id_type;
      record_mode        : integer;
      max_record_size    : integer;
      max_file_size      : integer;
      file_code          : gang_file_codes;
      open_logical_eof   : integer;
      sharebits          : integer;
      sec_ext_size       : integer;
      boot_start_address : integer;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Position To A Record     |
    +----------------------------------------------------------------------+}

   send_positiontoarecord = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      filler3          : gang_16bit_filler;
      type_of_position : position_type;
      byte_offset      : integer
   end;

   return_positiontoarecord = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Purge Link               |
    +----------------------------------------------------------------------+}

   send_purgelink = record
      send_mess_header   : send_header_type;
      volume_name_header : volume_header_type;
      file_name_header   : file_header_type;
      start_name_sets    : integer
   end;

   return_purgelink = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request:  Read A Record           |
    +----------------------------------------------------------------------+}

   send_readarecord = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type;
      access_code       : integer;
      filler3           : array [1..2] of gang_32bit_filler;
      requested         : integer;
      offset            : integer
   end;

   return_readarecord = record
      return_mess_header  : return_header_type;
      actual              : integer;
      filler1             : array [1..4] of gang_32bit_filler;
      data                : packed array[1..512] of char;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Set Date                 |
    +----------------------------------------------------------------------+}

   send_set_date = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      set_access_date  : long_boolean;
      access_date      : date_type;
      set_creation_date: long_boolean;
      creation_date    : date_type
   end;

   return_set_date = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Set Eof                  |
    +----------------------------------------------------------------------+}

   send_set_eof = record
      send_mess_header : send_header_type;
      implicit_unlock  : long_boolean;
      file_id          : file_id_type;
      use_current_ptr  : long_boolean;
      byte_offset      : integer
   end;

   return_set_eof = record
      return_mess_header : return_header_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Unlock A File            |
    +----------------------------------------------------------------------+}

   send_unlockafile = record
      send_mess_header : send_header_type;
      file_id          : file_id_type;
      explicit_unlock  : long_boolean;
   end;

   return_unlockafile = record
      return_mess_header : return_header_type;
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Volume Status            |
    +----------------------------------------------------------------------+}

   send_volume_status = record
      send_mess_header        : send_header_type;
      volume_name_header      : volume_header_type;
   end;

	  { Modified for SRM-UX }
   return_volume_status = record
      return_mess_header   : return_header_type;
      fill1                : gang_16bit_filler;
      srm_ux_flag          : boolean;     { FALSE if SRM ; TRUE if SRM-UX }
      exist                : boolean;
      interleave           : integer;
      volume_name          : name_type
   end;


   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: Write A Record           |
    +----------------------------------------------------------------------+}

   send_writearecord = record
      send_mess_header  : send_header_type;
      implicit_unlock   : long_boolean;
      file_id           : file_id_type;
      access_code       : integer;
      filler3           : array [1..2] of gang_32bit_filler;
      requested         : integer;
      offset            : integer;
      filler8           : long_boolean;
      flush_buffer      : long_boolean;
      data              : packed array [1..512] of char
   end;

   return_writearecord = record
      return_mess_header  : return_header_type;
      actual              : integer;
   end;

{INTERNAL ONLY BEGIN}
   {+----------------------------------------------------------------------+
    | Send and return record layouts for request: remote execute           |
    +----------------------------------------------------------------------+}
   send_rmt_exec = record
      send_mess_header  : send_header_type;
      volume_name_header: volume_header_type;
      cmd_size          : integer;
      directory_id      : file_id_type;
      filler1           : gang_16bit_filler;
      path_type         : path_start_type;
      volume_pword      : name_type;
      spare1            : integer;
      spare2            : integer;
      cmd               : packed array [1..512] of char;
   end;

   return_rmt_exec = record
      return_mess_header  : return_header_type;
      file_id             : file_id_type;
   end;
{INTERNAL ONLY END}

{^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^}

	{ the following definitions were added for SRM-UX }

     {+----------------------------------------------------------------------+
      | Send and return record layouts for request: HFS chmod                |
      +----------------------------------------------------------------------+}

	{ use build_volname_header on old_header variant 1st;
	  then fill in fields specific to chmod }
       volume_header_chmod = record case boolean of
	  false: ( old_header             : volume_header_type);
	  true:  ( filler1                : gang_32bit_filler;
		   driver_name            : name_type;
		   catalogue_organization : name_type;
		   device_address_present : long_boolean;
		   actual_device_address  : integer;
		   delta_mask             : integer;  { specific for chmod }
		   ordinary_perm          : integer;  { specific for chmod }
		   dir_perm               : integer;  { specific for chmod }
		   volume_name            : name_type; );
       end;

       send_hfs_chmod = record
	  send_mess_header       : send_header_type;
	  volume_name_header     : volume_header_chmod;
	  file_name_header       : file_header_type;
	  filler1                : integer;
	  filler2                : integer;
	  filler3                : integer;
	  filler4                : integer;
	  filler5                : integer;
	  start_name_sets        : integer       { dummy field }
       end;

       return_hfs_chmod = record
	  return_mess_header  : return_header_type;
       end;

     {+----------------------------------------------------------------------+
      | Send and return record layouts for requests: HFS chown and HFS chgrp |
      +----------------------------------------------------------------------+}

	{ use build_volname_header on old_header variant 1st;
	  then fill in fields specific to chown and chgrp }
       volume_header_chown = record case boolean of
	  false: ( old_header             : volume_header_type);
	  true:  ( new_owner              : integer;   { specific for chown and
				  chgrp; will be new group for chgrp }
		   driver_name            : name_type;
		   catalogue_organization : name_type;
		   device_address_present : long_boolean;
		   device_address         : device_address_type;
		   volume_name            : name_type; );
       end;


       send_hfs_chown = record
	  send_mess_header       : send_header_type;
	  volume_name_header     : volume_header_chown;
	  file_name_header       : file_header_type;
	  filler1                : integer;
	  filler2                : integer;
	  filler3                : integer;
	  filler4                : integer;
	  filler5                : integer;
	  start_name_sets        : integer       { dummy field }
       end;

       return_hfs_chown = record
	  return_mess_header  : return_header_type;
       end;

@


53.1
log
@Automatic bump of revision number for PWS version 3.24B
@
text
@@


52.1
log
@Automatic bump of revision number for PWS version 3.24A
@
text
@@


51.1
log
@Automatic bump of revision number for PWS version 3.24d
@
text
@@


50.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


49.1
log
@Automatic bump of revision number for PWS version 3.24b
@
text
@@


48.2
log
@
pws2rcs automatic delta on Tue Aug 14 09:29:26 MDT 1990
@
text
@@


48.1
log
@Automatic bump of revision number for PWS version 3.24a
@
text
@d47 3
d85 3
d126 8
d166 7
a172 1
   access_code_type =
d188 1
a188 1
       ac_generic25);
d190 16
d257 4
d262 2
a263 1
      fill: gang_16bit_filler;
d287 1
d296 1
d298 1
d803 1
d806 3
a808 1
      exist                : long_boolean;
d860 71
@


1.1
log
@Initial revision
@
text
@@
