I created a netopen() function that also opens index files if they do not exist.
The typical call would use the IF but I get a dos error using HMG when I test the function with a bad file name.
Do I need to set up error trapping for dos errors?
What is the correct way to try/catch a file open error?
I promised myself i would not stay up til 5:00 am tonight so I will look for a reply in the morning.
Code: Select all
IF NETOPEN(DRIVECCDATA+'badfilename')
MSGBOX('SUCCESS')
ENDIF
Converted to HMG.
Code: Select all
FUNCTION NETOPEN
local tmpscr
PARAMETERS FIL,NTX1,FLD1,NTX2,FLD2,NTX3,FLD3,NTX4,FLD4
if .not.net_use(FIL,.f.,3)
err('Unable to open '+FIL)
RETURN(.F.)
endif
DO CASE
CASE PCOUNT()>2
if .not.file(NTX1+'.NTX')
if fil_lock(3)
SHOWINDEX(FLD1,NTX1)
index on &FLD1 to &NTX1
unlock
CLRMYMSGBOX()
else
err('Unable to create index file',NTX1)
close
RETURN(.F.)
endif
endif
CASE PCOUNT()>4
if .not.file(NTX2+'.NTX')
if fil_lock(3)
SHOWINDEX(FLD1,NTX1)
index on &FLD1 to &NTX1
SHOWINDEX(FLD2,NTX2)
index on &FLD2 to &NTX2
unlock
CLRMYMSGBOX()
else
err('Unable to create index file',NTX2)
close
RETURN(.F.)
endif
endif
CASE PCOUNT()>6
if .not.file(NTX3+'.NTX')
if fil_lock(3)
SHOWINDEX(FLD1,NTX1)
index on &FLD1 to &NTX1
SHOWINDEX(FLD2,NTX2)
index on &FLD2 to &NTX2
SHOWINDEX(FLD3,NTX3)
index on &FLD3 to &NTX3
unlock
CLRMYMSGBOX()
else
err('Unable to create index file',NTX3)
close
RETURN(.F.)
endif
endif
CASE PCOUNT()>8
if .not.file(NTX4+'.NTX')
if fil_lock(3)
SHOWINDEX(FLD1,NTX1)
index on &FLD1 to &NTX1
SHOWINDEX(FLD2,NTX2)
index on &FLD2 to &NTX2
SHOWINDEX(FLD3,NTX3)
index on &FLD3 to &NTX3
SHOWINDEX(FLD4,NTX4)
index on &FLD4 to &NTX4
unlock
CLRMYMSGBOX()
else
err('Unable to create index file',NTX4)
close
RETURN(.F.)
endif
endif
ENDCASE
UNLOCK
DO CASE
CASE PCOUNT()>8
set index to &NTX1,&NTX2,&NTX3,&NTX4
CASE PCOUNT()>6
set index to &NTX1,&NTX2,&NTX3
CASE PCOUNT()>4
set index to &NTX1,&NTX2
CASE PCOUNT()>2
set index to &NTX1
OTHERWISE
SET INDEX TO
ENDCASE
RETURN(.T.)
FUNCTION NET_USE
PARAMETERS file, ex_use, wait
Private forever
forever = (wait = 0)
DO WHILE (forever .OR. wait > 0)
IF ex_use && exclusive
USE &file EXCLUSIVE
ELSE
USE &file && shared
ENDIF
IF .NOT. NETERR() && USE succeeds
RETURN (.T.)
ENDIF
INKEY(1) && wait 1 second
wait = wait - 1
ENDDO
RETURN (.F.) && USE fails
FUNCTION FIL_LOCK
PARAMETERS wait
PRIVATE forever
IF FLOCK()
RETURN (.T.) && locked
ENDIF
forever = (wait = 0)
DO WHILE (forever .OR. wait > 0)
INKEY(.5) && wait 1/2 second
wait = wait - .5
IF FLOCK()
RETURN (.T.) && locked
ENDIF
ENDDO
RETURN (.F.) && not locked
FUNCTION REC_LOCK
PARAMETERS wait
PRIVATE forever
IF RLOCK()
RETURN (.T.) && locked
ENDIF
forever = (wait = 0)
DO WHILE (forever .OR. wait > 0)
IF RLOCK()
RETURN (.T.) && locked
ENDIF
INKEY(.5) && wait 1/2 second
wait = wait - .5
ENDDO
RETURN (.F.) && not locked
FUNCTION ERR
PARAMETERS S1,S2,S3,S4
msgbox(S1+s2+s3+s4,'Error')
RETURN NIL
FUNCTION SHOWINDEX
PARAMETERS FLD,FIL
main.mymsgbox.value := 'Indexing on '+fld+' to '+fil+'.NTX'
RETURN NIL
FUNCTION CLRMYMSGBOX()
MAIN.MYMSGBOX.VALUE := NUL
RETURN NIL