$ title ('Attach Console MP/M-86 2.0')
$ compact

attach:
do;

/* Attach the console assigned to this program by the CLI
   to the process specified in the command line.  Make sure
   the specified process has the same console number in its PD. */

$include(copyrt.lit)

$include (vaxcmd.lit)
 
$include (comlit.lit)
$include (proces.lit)

dcl fcb (36) byte external;         /* use upper case for PD name */

dcl cpm$terminate      lit '0',
    mpm$print$con$buf  lit '9',
    mpm$version        lit '12',
    mpm$terminate      lit '143',
    mpm$conassign      lit '149',
    mpm$get$con        lit '153',
    mpm$getpdadr       lit '156';

mon1: procedure(f,a) external;
  dcl f byte, a address;
end mon1;

mon2: procedure(f,a) byte external;
  dcl f byte, a address;
end mon2;

mon3: procedure(f,a) address external;
  dcl f byte, a address;
end mon3;

mon4: procedure(f,a) pointer external;
  dcl f byte, a address;
end mon4;

dcl acb structure(
    cns byte,
    match byte,
    pd address,
    name (8) byte);

dcl pd$pointer pointer;
dcl pd based pd$pointer pd$structure;
dcl mpm$86 lit '1130H';
  
plmstart: procedure public;
  dcl ret address;

  if mon3(mpm$version,0) <> mpm$86 then
  do;
     call mon1(mpm$print$con$buf,.(cr,lf,'Requires MP/M-86 $'));
     call mon1(cpm$terminate,0);
  end;

  acb.cns = mon2(mpm$get$con,0);      /* get console number this program is */
  acb.match = 0ffh;                  /* running at                         */
  acb.pd = 0;
  call move(8,.fcb(1),.acb.name);

  if (ret := mon3(mpm$conassign, .acb)) = 20 then
    call mon1(mpm$print$con$buf,.(cr,lf,'Can''t Find PD $'));
  else if ret <> 0 then
    call mon1(mpm$print$con$buf,.(cr,lf,'Attach Failed $'));

  call mon1(mpm$terminate,0);

end plmstart;

end attach;
