"I/O for non-paged disk: may or may not use buffers (according to user desires), never uses pmap. Note that input and output use the same buffer, so this is not suitable for devices that don't random-access (chaos net, tty, ...)." "Possible modes: READ, CREATE, MODIFY, APPEND/ASCII, BINARY, 8BIT" )) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL) > )) #DECL ((CHANNEL) T$CHANNEL (BIT) FIX (DATA) I$DISK-CHANNEL) T)>> ) (NO-REF? <>) "AUX" (NEW? <>) MODE JFN BSZ (APP? <>) PTR BUF) #DECL ((NAME MODS BYTES) STRING (NO-REF? THAWED? NEW?) (PTR MODE BSZ) FIX (JFN) (BUF?) (APP?) ) FIX>>) ( FIX>>) ( FIX>>) ( FIX>>) (T .MODS I$DISK-OPEN>)> ) ( ) ( ) (T .BYTES I$DISK-OPEN>)> >)> >)> > >) ()> .PTR T$STRING <>>) (<==? .BSZ 8> T$BYTES <>>) (T T$UVECTOR <>>)>)>> 0 0 <> .BUF] I$DISK-CHANNEL>)>> ) VAL) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL) >>> >)> > > > ) VAL) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL) >)> > > >> > \ ) (BUF ) BYTE BC) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL (BUF) (BC) FIX) '(RETURN 2)>> 1>> > 7> ) (.BYTE)>)>) (T )) #DECL ((ONCE?) ) >>> > 1>> ) ( ) ( )>> > .BYTE) (.ONCE? <>) ( > )>>)>> 0) (>> <- :FIX :FIX>)>> 0) (>> <- :FIX :FIX>) (T > >> <- :FIX .START>) (.VAL)>)>> ) CT (OB ) (BUF ) STS) #DECL ((DATA) I$DISK-CHANNEL (STS CT) (JFN) FIX (OB BUF) ) )> ) () ()> >>> .CT I$READ-BUFFER>)> .CT>> > ) (IBUF ) TRANS BC RD PT) #DECL ((CHANNEL) T$CHANNEL (BUFFER) > (CT CONT) FIX (DATA) I$DISK-CHANNEL (IBUF) (BC) FIX (TRANS RD) ) >> > .PT>> I$DISK-READ-BUFFER>)> > ) (,M$$T-UVC ) (,M$$T-BYT )>>)> :FIX>> 0) (T >>>> > > > > > > .TRANS>>) (,M$$T-UVC > > > > > .TRANS>>) (,M$$T-BYT > > > > > .TRANS>>)>)> > ;"Only use the buffer here if it might save a system call" :STRING>) (,M$$T-UVC :UVECTOR>) (,M$$T-BYT :BYTES>)>>> > )> >) ( .BUFFER .CT >> .TRANS>> .TRANS>> >)> >) ()>) ()>>)>> \ ) (BUF ) (PT ,M$$TYSAT>)) #DECL ((CHANNEL) T$CHANNEL (BYTE) (DATA) I$DISK-CHANNEL (BUF) ) %<+ ,OF-WR ,OF-APP>>> .CHANNEL I$DISK-WRITE-BYTE>)> .BYTE> 1>> 1>> .BYTE) (T ) (,M$$T-UVC ) (,M$$T-BYT )> >)> >> <- :STRING> >>>) (,M$$T-UVC <1 .BUF:UVECTOR .BYTE> >> <- :UVECTOR> >>>) (,M$$T-BYT <1 .BUF:BYTES .BYTE> >> <- :BYTES> >>>)> 1>> 1>>> .BYTE)>> ) LEN SP (JFN ) TB (PT ,M$$TYSAT>)) #DECL ((DATA) I$DISK-CHANNEL (BUF) (JFN SP LEN) FIX) > :STRING>> >) (,M$$T-UVC <- :UVECTOR>> >) (,M$$T-BYT <- :BYTES>> >)>>> .SP> )> >>> >)> >> > > ) ()> )>) (T > >)> > >)>)>> ,M$$TYSAT>) (DATA ) (IBUF ) (JFN ) VAL TIB) #DECL ((CHANNEL) T$CHANNEL (JFN LEN) FIX (DATA) I$DISK-CHANNEL (IBUF) (VAL) (TIB) FIX (BUFFER) >) > ) (,M$$T-UVC ) (,M$$T-BYT )>>)> :FIX>> %<+ ,OF-WR ,OF-APP>>> .CHANNEL I$DISK-WRITE-BUFFER>)> 0) ( > .VAL>> .VAL>> .VAL)>) ( ,M$$TYSAT>> I$DISK-WRITE-BUFFER>) (T :STRING>) (,M$$T-UVC :UVECTOR>) (,M$$T-BYT :BYTES>)>> ) ) (,M$$T-UVC ) (,M$$T-BYT )>> >> > > > >> .TRANS>> .TRANS>>> <- .TIB >>>) (,M$$T-UVC >> > > > >> .TRANS>> .TRANS>>> <- .TIB >>>) (,M$$T-BYT >> > > > >> .TRANS>> .TRANS>>> <- .TIB >>>)>)> > > .TRANS>> .TRANS>> >) (>)>) ()>>)>> \ ) (JFN ) (OPTR ) (BUF ) INC TL L (PT ,M$$TYSAT>)) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL (TL L OPTR JFN INC) FIX (PTR) ) > :STRING>>) (,M$$T-UVC > :UVECTOR>>) (,M$$T-BYT > :BYTES>>)>)> > > ) (<==? .PTR .OPTR>) (>> >>> >>> >) (,M$$T-BYT >) (,M$$T-UVC >)>) (T >>> .INC>>)> ) (T >)> )> .PTR> )) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL (FORCE?) ) )> >)> ,OF-APP>> >)> .CHANNEL> <>) (BSZ:FIX 7) "AUX" (DATA:I$DISK-CHANNEL )) '(RETURN 3)>> > >>)> > ,FB-BSZ > ,/FBSIZ> -1 .NEW-SIZE> .NEW-SIZE) (T >)>> \ ) BUF) #DECL ((CHANNEL) T$CHANNEL (DATA) I$DISK-CHANNEL) > > > > > > > > >>> >>) (> >>> >>)>) (T ">)> T>