$SYSPROG ON$
PROGRAM modifydrivers(INPUT,OUTPUT);
IMPORT  iodeclarations,general_1,general_2;
VAR     newkbd : drv_table_type;
        oldkbd : ^drv_table_type;
        i      : INTEGER;
  
  { new driver procedure }
  PROCEDURE MYPROC(mytemp : ANYPTR ;
                    mychar : CHAR);  
  BEGIN
    WRITELN('write byte of character value ',ORD(mychar):3,
            ' is <',mychar,'>');
  END;

BEGIN 
  { set up new drivers }
  newkbd := isc_table[1].io_drv_ptr^;      { to copy some drivers }
  oldkbd := ADDR(isc_table[1].io_drv_ptr^);{ to keep the old ones }
  newkbd.iod_wtb := MYPROC;                { add new procedures   }
  isc_table[1].io_drv_ptr := ADDR(newkbd); { set up isc table [1] }
  
  
  { use new drivers }
  writenumberln(1,12.345);
  
  { remove new drivers }
  isc_table[1].io_drv_ptr := ADDR(oldkbd^);
                                           { restore isc table [1] }
END.
