123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- %
- % RDS-WRS.RED - Switch the current input or output channel
- %
- % Author: Eric Benson
- % Symbolic Computation Group
- % Computer Science Dept.
- % University of Utah
- % Date: 28 August 1981
- % Copyright (c) 1981 University of Utah
- %
- global '(SpecialRDSAction!* % possibly apply to old and new channel
- SpecialWRSAction!* % ditto
- IN!* % Current input channel
- OUT!*); % Current output channel
- fluid '(StdIN!* % Standard input - may be rebound
- StdOUT!*); % Standard output - may be rebound
- on SysLisp;
- syslsp procedure RDS Channel; %. Switch input channels, return old
- begin scalar OldIN, ReadFn;
- if LispVar SpecialRDSAction!* then
- Apply(LispVar SpecialRDSAction!*, list(LispVar IN!*, Channel));
- OldIN := LispVar IN!*;
- if null Channel then Channel := LispVar StdIN!*;
- ReadFn := ReadFunction[IntInf Channel];
- if ReadFn eq 'ChannelNotOpen or ReadFn eq 'WriteOnlyChannel then return
- ChannelError(Channel, "Channel not open for input in RDS");
- LispVar IN!* := Channel;
- return OldIN;
- end;
- syslsp procedure WRS Channel; %. Switch output channels, return old
- begin scalar OldOUT, WriteFn;
- if LispVar SpecialWRSAction!* then
- Apply(LispVar SpecialWRSAction!*, list(LispVar OUT!*, Channel));
- OldOUT := LispVar OUT!*;
- if null Channel then Channel := LispVar StdOUT!*;
- WriteFn := WriteFunction[IntInf Channel];
- if WriteFn eq 'ChannelNotOpen or WriteFn eq 'ReadOnlyChannel then return
- ChannelError(Channel, "Channel not open for output in WRS");
- LispVar OUT!* := Channel;
- return OldOUT;
- end;
- off SysLisp;
- END;
|