X-Git-Url: https://jxself.org/git/?p=pdp10-muddle.git;a=blobdiff_plain;f=mim%2Fdevelopment%2Fmim%2Fvax%2Fdisk.mud;fp=mim%2Fdevelopment%2Fmim%2Fvax%2Fdisk.mud;h=8321eb317966ec842bea1c8272fefcbe93b132d8;hp=0000000000000000000000000000000000000000;hb=d73ace3f3292e320b461b8fcd2e9f5dc5d9684d7;hpb=d530283ea60fb0ddcc28e9c5bd072456afe06e07 diff --git a/mim/development/mim/vax/disk.mud b/mim/development/mim/vax/disk.mud new file mode 100644 index 0000000..8321eb3 --- /dev/null +++ b/mim/development/mim/vax/disk.mud @@ -0,0 +1,624 @@ + 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)>)>)>>