Contributor: LARS HELLSTEN =========================================================================== BBS: Canada Remote Systems Date: 06-16-93 (16:14) Number: 26531 From: LARS HELLSTEN Refer#: NONE To: RITO SALOMONE Recvd: NO Subj: Re: Novell/File Locking/S Conf: (1221) F-PASCAL --------------------------------------------------------------------------- RS> Does anyone have any samples of network file sharing/access code for Turbo RS> Pascal/Borland Pascal 6-7. Here's some source that I use. I haven't had a chance to test it out as much as I'd like to, but so far, it appears to work quite nicely: --- 8< -------------------------------------------------------------------- Unit Share; INTERFACE Uses DOS; Var ShareInstalled : Boolean; Function LockRec(Var Untyped; pos, size : LongInt) : Boolean; Function UnLockRec(Var Untyped; pos, size : LongInt) : Boolean; Procedure FMode(Mode : Byte); Function Share : Boolean; IMPLEMENTATION Function LockRec(Var Untyped; pos, size : LongInt) : Boolean; Var Regs : Registers; f : File absolute Untyped; Begin pos := pos * FileRec(f).RecSize; size := size * FileRec(f).RecSize; Regs.AH := $5C; Regs.AL := $00; Regs.BX := FileRec(f).Handle; Regs.CX := Hi(pos); Regs.DX := Lo(pos); Regs.SI := Hi(size); Regs.DI := Lo(size); Intr($21,Regs); LockRec := (Regs.Flags AND FCarry) = 0; End; { LockRec } Function UnLockRec(Var Untyped; pos, size : LongInt) : Boolean; Var Regs : Registers; f : File absolute Untyped; Begin pos := pos * FileRec(f).RecSize; size := size * FileRec(f).RecSize; Regs.AH := $5C; Regs.AL := $01; Regs.BX := FileRec(f).Handle; Regs.CX := Hi(pos); Regs.DX := Lo(pos); Regs.SI := Hi(size); Regs.DI := Lo(size); Intr($21,Regs); UnlockRec := (Regs.Flags AND FCarry) = 0; End; { UnLockRec } Procedure FMode(Mode : Byte); Begin If ShareInstalled then If (mode in [0..2,23..24,48..50,64..66]) then FileMode := Mode; End; function Share : boolean; var regs : registers; begin with regs do begin AH := 16; AL := 0; Intr($2f, regs); Share := AL = 255; end; end; { IsShare } Begin ShareInstalled := Share; End. { MyShare } --- 8< --------------------------------------------------------------------- By the way, the unit name should be "MyShare", there's duplicate identifiers in there by accident. All you do, is call the lock/unlock routines, passing the file variable, the record number, and the number of records (you'll see it determines the size itself, using the FileRec.RecSize variable). The FMode procedure doesn't do much, I just use it instead of constantly putting "If ShareInstalled then FileMode :=..." inside the program(s). You should call this to set the FileMode variable to a sharing method, before you reset the file. Here's a table of values you can pass: Sharing Method Access Method Compatibility Deny Write Deny Read Deny None ------------------------------------------------------------------- Read Only 0 32 48 64 Write Only 1 33 49 65 Read/Write 2 34 50 66 ------------------------------------------------------------------- --- GEcho 1.00 * Origin: Access-PC BBS þ Scarborough, ON þ (416)491-9249 (1:250/320)