HPlogo 900 Series HP 3000 Computer Systems: MPE/iX Architected Interface Facility: Operating System Reference Manual > Appendix C Programming Examples

Example 7 - Using Magneto-Optical AIFs

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

Below is a sample program illustrating the usage of the Magneto-Optical AIFs. It allocates the first available drive that can access the media labeled MYMEDIA, mounts the media MYMEDIA on this drive, accesses files on the media and then dismounts the media and deallocates the drive.

$standard_level 'ext_modcal'$

Program MO_Sample (input, output);



Type

  media_label_type = record

                       media_name : packed array [1..32] of char;

                       subname1   : packed array [1..16] of char;

                       subname2   : packed array [1..16] of char;

                     end;



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



  status_type = record

                  case boolean of

                    true   : (all:    integer);

                    false  : (info:   shortint;

                              subsys: shortint );

                  end;



  item_status_array_type = array [1..4] of status_type;



Var

  drive_ldev        : integer;

  itemnum_array     : packed array [1..4] of integer;

  item_array        : packed array [1..4] of globalanyptr;

  item_status_array : item_status_array_type;

  media_id          : media_label_type;

  overall_status    : status_type;

  user_id           : integer;

  volume_set        : packed array[1..8] of char;



procedure GETPRIVMODE;      intrinsic;

procedure QUIT;             intrinsic;



$sysintr 'aifintr.pub.sys'$

procedure AIFMOALLOCATE;    intrinsic;

procedure AIFMODEALLOCATE;  intrinsic;

procedure AIFMOMOUNT;       intrinsic;

procedure AIFMODISMOUNT;    intrinsic;




{------------------------ Print error and bail out --------------------}



procedure ERROR_IN_CALL ( status            : status_type;

                          name              : name_type;

                          item_status_array : item_status_array_type);

Var

  local_status : status_type;



begin

  writeln('Error in ', name);

  if (status.all < 0) then

    writeln('Overall status info = ', status.info, ' subsys= ', status.subsys)

  else

    begin

      local_status.all := item_status_array[status.info].all;

      writeln('Item #: ', status.info:1, ' status info = ',

              local_status.info:1, ' subsys = ', local_status.subsys:1);

    end;

  QUIT(999);

end;





begin



{---------------------------- Get AIF user ID -------------------------}

GETPRIVMODE;

writeln('Enter a valid user id:');

readln(user_id);





{----- Allocate a drive that can access the media labeled MYMEDIA -----}

itemnum_array[1] := 17103;              { Allocate by media name }

media_id.media_name := 'MYMEDIA';

media_id.subname1 := '@';               { Ignore subname1 }

media_id.subname2 := '@';               { Ignore subname2 }

item_array[1] := addr(media_id);

item_status_array[1].all := 0;

itemnum_array[2] := 0;



AIFMOALLOCATE (overall_status,

               drive_ldev,     { The allocated drive is returned in drive_ldev }

               itemnum_array,

               item_array,

               item_status_array,

               user_id);



if overall_status.all <> 0 then

  ERROR_IN_CALL(overall_status, 'AIFMOALLOCATE', item_status_array);




{------- Mount the media labeled MYMEDIA in the allocated drive -------}

{------- and return the volume set name for this media. ---------------}

itemnum_array[1] := 17303;              { Return volume set name }

item_array[1] := addr(volume_set);

item_status_array[1].all := 0;

itemnum_array[2] := 0;



AIFMOMOUNT (overall_status,

            drive_ldev,

            media_id,

            itemnum_array,

            item_array,

            item_status_array,

            user_id);



if overall_status.all <> 0 then

  ERROR_IN_CALL(overall_status, 'AIFMOMOUNT', item_status_array);



{----------------------------------------------------------------------}

{----------------------------------------------------------------------}

{  At this point, the media (volume set) is mounted and can be used    }

{  like any other user volume set.  Groups and accounts can be created }

{  programmatically or through commands (for example, NEWGROUP ;ONVS=) }

{  and files can also be created on the media (for example, HPFOPEN,   }

{  BUILD).                                                             }

{----------------------------------------------------------------------}

{----------------------------------------------------------------------}



{----------------------- Dismount the media ----------------------------}

AIFMODISMOUNT (overall_status,

               drive_ldev,

               ,

               ,

               ,

               user_id);

if overall_status.all <> 0 then

  ERROR_IN_CALL(overall_status, 'AIFMODISMOUNT', item_status_array);



{--------------------- Deallocate the drive ---------------------------}

AIFMODEALLOCATE (overall_status,

                 drive_ldev,

                 ,

                 ,

                 ,

                 user_id);

if overall_status.all <> 0 then

  ERROR_IN_CALL(overall_status, 'AIFMODEALLOCATE', item_status_array);



end.
Feedback to webmaster