# HG changeset patch # User boisy # Date 1263570893 0 # Node ID 82c9672489a0164ba8e39ed3192fc1c2ae6814b4 # Parent 5f17d6f4a5823a1cb8fbf819741239726a65359d Made change to workings of SHARE. bit to what I believe is the proper way. diff -r 5f17d6f4a582 -r 82c9672489a0 level2/modules/scf.asm --- a/level2/modules/scf.asm Thu Jan 14 17:41:15 2010 +0000 +++ b/level2/modules/scf.asm Fri Jan 15 15:54:53 2010 +0000 @@ -158,6 +158,10 @@ * * 16r4 2004/07/12 Boisy G. Pitre * 6809 version now calls the FAST TEXT entry point of GrfDrv. +* +* 17 2010/01/15 Boisy G. Pitre +* Fix for bug described in Artifact 2932883 on SF +* Also added Level 1 conditionals for eventual backporting nam SCF ttl NitrOS-9 Level 2 Sequential Character File Manager @@ -169,8 +173,8 @@ tylg set FlMgr+Objct atrv set ReEnt+rev -rev set 4 -edition equ 16 +rev set 0 +edition equ 17 mod eom,SCFName,tylg,atrv,SCFEnt,0 @@ -263,13 +267,17 @@ rola rorb rola + IFGT Level-1 pshs y Save path descriptor pointer temporarily ldy D.Proc Get current process pointer + ENDC leax P$Path,x Point to local path table clra Start path # = 0 (Std In) L0198 cmpb a,x Same path as one is process' local path list? @@ -448,7 +464,11 @@ bsr L01FA Execute driver setstat routine puls y Restore path pointer + IFGT Level-1 ldx D.Proc Get current process pointer + ENDC lda P$PID,x Get parent process ID sta ,s Save it os9 F$GProcP Get pointer to parent process descriptor @@ -527,9 +547,14 @@ IFEQ H6309 pshs u,y,x ENDC + IFGT Level-1 ldx D.Proc Get current process pointer + ENDC lda R$Y,u Get flag byte for CR/NO CR pshs a Save it + IFGT Level-1 lda P$Task,x Get task number ldb D.Proc Get current process + ENDC lda P$ID,x Get it's process ID ldx PD.DEV,y Get device table pointer from our path dsc. bsr L045D Check if it's busy @@ -793,7 +856,11 @@ tfr b,a Get process # busy using device os9 F$IOQu Put our process into the IO Queue inc PD.MIN,y Mark device as not mine + IFGT Level-1 ldx D.Proc Get current process + ENDC ldb P$Signal,x Get signal code lda ,s Get our process id # again for L046A beq L046A No signal go try again @@ -815,7 +882,12 @@ * Wait for device? L04A2 lda PD.PST,y Get path status (carrier) bne L04C4 If carrier was lost, hang up process -L04A7 ldx D.Proc Get current process ID + ENDC clra sta PD.MIN,y Flag device is mine lda P$ID,x Get process ID # @@ -894,6 +966,7 @@ tfr d,u Move it to U lda #C$CR Put a carriage return 1 byte before start sta -1,u of write portion of buffer + IFGT Level-1 ldy D.Flip1] flip to grfdrv and execute it + ENDC * GrfDrv will execute function, and then call [D.Flip0] to return here. It * will use an RTS to return to the code that called here in the first place