T) (THAWED? <>) (NO-REF? <>) "AUX" (NEW?: <>) (APP?: <>) MODE:FIX JFN: BINARY?: (BYTE?: <>) NNAME:STRING PTR:FIX (STOR: >) (STATUS 0) BUF) ; "THAWED? and NO-REF? are no-ops, due to the lossages of unix" >) (<=? .MODS "CREATE"> > >) (<=? .MODS "MODIFY"> > ) (<=? .MODS "APPEND"> >) (T .MODS X$DISK-OPEN>)> > >) (<=? .BYTES "8BIT"> > >) (<=? .BYTES "BINARY"> > ) (T .BYTES X$DISK-OPEN>)> T .STOR>> > >>> ; "Try to make shiny new file; come here if failed" ,EEXIST> ; "Failed because file already exists" > > >>)>)> )>)> >> > >> > <- ,BYTES/WORD >>)> > ,BYTES/WORD>>)> .PTR) ()> .PTR <>>)>> .BUF 0 0 <>] I$DISK-CHANNEL>)>> > .NAME>> <+ %>>> > .NLEN>>> .NNAME> %<+ 1>>>> >> )) > )) #DECL ((CHANNEL) T$CHANNEL (BIT) FIX (DATA) I$DISK-CHANNEL) T)>> )) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL) >)> > > ) (BUF ) (PT ,M$$TYSAT>) BYTE BC) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL (BUF) (BC) FIX) ,I$UBUF1) (,I$SBUF1)>>>> >> <1 .BUF>)>) (T )) #DECL ((ONCE?) ) >>> > 1>> >) (,M$$T-UVC >) (,M$$T-BYT >)>> > .BYTE) (.ONCE? <>) ( > )>>)>> ) CT (OB ) (BUF ) STS) #DECL ((DATA) I$DISK-CHANNEL (STS CT) (JFN) FIX (OB BUF) ) )> ) ( ) (<* ,BYTES/WORD >)>>>> .CT I$READ-BUFFER>)> > ,BYTES/WORD>>)> .CT>> > ) (IBUF ) (TIBUF ) (TRANS 0) BC RD RTRANS (PT ,M$$TYSAT>)) #DECL ((CHANNEL) T$CHANNEL (BUFFER) > (CT CONT) FIX (DATA) I$DISK-CHANNEL (IBUF) (BC) FIX (RD TRANS) ) ,M$$TYSAT> .PT>> ; "Can't use buffer, since wrong type" > )> > >) (,M$$T-UVC >) (,M$$T-BYT >)>>)> >>>> > 0 .TRANS .BUFFER:> .TRANS>> .TRANS>>) (,M$$T-BYT 0 .TRANS .BUFFER:> .TRANS>> .TRANS>>) (,M$$T-UVC 0 .TRANS .BUFFER:> .TRANS>> .TRANS>>)>)> > > > .TRANS>> > ;"Only use the buffer here if it might save a system call" >) (,M$$T-BYT >) (,M$$T-UVC >)>>> > )> >) ( .BUFFER <* .CT ,BYTES/WORD>) (.CT)>>> > ,BYTES/WORD>> )>)> .RTRANS>> .RTRANS>> ; "Don't get ACCESS confused--make sure he knows there's nothing in the channel buffer in this case." )> >) ()>) ()>>> ) (BUF ) (PT ,M$$TYSAT>) (TBUF )) #DECL ((CHANNEL) T$CHANNEL (BYTE) (DATA) I$DISK-CHANNEL (BUF) ) ,O-RDWR>> .CHANNEL X$DISK-WRITE-BYTE>)> <1 .BUF .BYTE>) (T <1 .BUF .BYTE>)> .BUF ,BYTES/WORD) (1)>> 1>> 1>> .BYTE) (T >) (,M$$T-BYT >) (,M$$T-UVC >)> >)> .BYTE> >>> <- > >>>>) (,M$$T-BYT <1 .BUF: .BYTE> >>> <- > >>>>) (,M$$T-UVC <1 .BUF: .BYTE> >>> <- > >>>>)> 1>> 1>>> .BYTE)>> ) LEN SP (JFN ) (PT ,M$$TYSAT>) TB) #DECL ((DATA) I$DISK-CHANNEL (BUF) (JFN SP LEN) FIX) > :STRING>> >>) (,M$$T-BYT <- :BYTES>> >>) (,M$$T-UVC <- :UVECTOR>> >>)>>> .SP> ,WHENCE-ABS>) ()> )> > ) (>)> >> > > <* ,BYTES/WORD .SP>) (.SP)> ,WHENCE-ABS>) ()> )>) (T > <* ,BYTES/WORD >) ()> ,WHENCE-ABS>)> > >)>)>> ) RVAL (IBUF ) (JFN ) VAL TIB (PT ,M$$TYSAT>)) #DECL ((CHANNEL) T$CHANNEL (BUFFER) > (JFN LEN) FIX (DATA) I$DISK-CHANNEL (IBUF) (VAL) (TIB) FIX) ,O-RDWR>> .CHANNEL X$DISK-WRITE-BYTE>)> > >) (,M$$T-BYT >) (,M$$T-UVC >)>>)> ,M$$TYSAT>>> )> <* ,BYTES/WORD .LEN>) (.LEN)>>> ; "If we wrote out a uvector, get length right" > ; "but if not a binary channel, pointer will still be in characters instead of words" )>)> .RVAL>> .RVAL>>)>) (T :STRING>>) (,M$$T-BYT :BYTES>>) (,M$$T-UVC :UVECTOR>>)> ) > >> ; "If buffer is empty, and long transfer, don't put any of it in buffer" >) (,M$$T-BYT >) (,M$$T-UVC >)>>> > 0 .TRANS .IBUF:> .TRANS>> .TRANS>>>>) (,M$$T-BYT > 0 .TRANS .IBUF:> .TRANS>> .TRANS>>>>) (,M$$T-UVC > 0 .TRANS .IBUF:> .TRANS>> .TRANS>>>>)> > > .TRANS>> .TRANS>>> <- .TIB .IL>>>)> > )> <* ,BYTES/WORD .LEN>) (.LEN)>>> >)> .TRANS>> .TRANS>> >) (>)>) ()>>)>> ) (JFN ) (OPTR ) (BUF ) INC TL L (PT ,M$$TYSAT>) TB) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL (TL L OPTR JFN INC) FIX (PTR) ) >> STRING>>>>) (,M$$T-BYT >> BYTES>>>>) (,M$$T-UVC >> UVECTOR>>>>)>)> > > ) (<==? .PTR .OPTR>) (>> >>> >>> .INC>>) (,M$$T-BYT .INC>>) (,M$$T-UVC .INC>>)>) (T >>> .INC>>)> ) (T ) ( <* ,BYTES/WORD .PTR>) (.PTR)> ,WHENCE-ABS>)>> >)> )> .PTR> )) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL (FORCE?) ) >)>> )) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL) >> ) BUF) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL) > > > > > > > > >>> >>) (> >>> >>)>) (T ">)> T> ) (JFN ) (STATUS ) ONM BCKNM) #DECL ((CHN) T$CHANNEL (DAT) I$DISK-CHANNEL) >)> > >> >> >> > ) (.CHN)>) (.CHN)>)>)>>