10 REM > SpoolOn/s
   20 REM *SPOOLON for the BBC
   30 REM Originally by Joe Abley, BAU Apr 1990
   40 REM Update by J.G.Harston 2017
   50 :
   60 zp=&A8
   70 OSARGS=&FFDA:OSFIND=&FFCE
   80 OSBYTE=&FFF4:OS_CLI=&FFF7
   90 DIM mcode% 256
  100 :
  110 FOR pass=4 TO 7 STEP 2
  120   P%=&900:O%=mcode%
  130   [OPT pass
  140   LDA #1:LDX #zp
  150   LDY #0:JSR OSARGS   :\ Read command line
  160   LDA (zp),Y          :\ Get start of command line
  170   CMP #13:BEQ close   :\ *SpoolOn <cr> - close
  180   LDX zp+0:LDY zp+1   :\ XY=>filename
  190   LDA #&C0:JSR OSFIND :\ OPENUP(filename)
  200   TAY:BNE spoolon     :\ File exists, use it
  210   .loop               :\ Otherwise, do *SPOOL
  220   LDA (zp),Y:STA filename,Y
  230   INY:CMP #13:BNE loop
  240   LDX #spool AND 255
  250   LDY #spool DIV 256
  260   JMP OS_CLI
  270   :
  280   .spoolon
  290   LDX #zp
  300   LDA #2:JSR OSARGS   :\ Read EXT
  310   LDA #1:JSR OSARGS   :\ Write PTR=EXT
  320   .close
  330   TYA:TAX             :\ X=handle
  340   LDY #0:LDA #&C7
  350   JSR OSBYTE          :\ Set SPOOL handle, gets old handle
  360   TXA:TAY:BEQ done    :\ Already closed
  370   LDA #0:JMP OSFIND   :\ Close previous SPOOL handle
  380   .done
  390   RTS
  400   :
  410   .spool
  420   EQUS "Spool "
  430   .filename
  440 ]NEXT
  450 A$="SAVE SpoolOn "+STR$~mcode%+" "+STR$~O%+" FFFF0900 FFFF0900"
  460 PRINT A$;:OSCLI A$:PRINT