'===========================================================================
' Subject: READ/WRITE FILE ATTRIBUTES         Date: 08-08-93 (12:00)       
'  Author: Bob Perkins                        Code: QB, PDS                
'  Origin: QBTIPS_P.DOC                     Packet: DOS.ABC
'===========================================================================
'> Can anyone give me some code so that I can set the read/write
'> attribute on files. Preferably something so that I can just pass a

'  This ought to get you going.  Note that you cannot change a file's
'attributes to a directory or a volume label with this.  The interrupt
'routine will not allow it.  getfileattr% returns the file's attributes,
'or -1 if an error occured.  setfileattr% set's a file's attributes and
'returns 0 for success or -1 if there was an error.  You'll need to
'start QB with "/l" so it will load the interrupt quick-library.

 '$INCLUDE: 'qb.bi'
 DECLARE FUNCTION getfileattr% (filename$)
 DECLARE FUNCTION setfileattr% (filename$, attribute%)

  'bit
  ' 8 : shareable (Novell NetWare)
  ' 7 : unused
  ' 6 : unused
  ' 5 : archive
  ' 4 : directory
  ' 3 : volume label
  ' 2 : SYSTEM
  ' 1 : hidden
  ' 0 : read-only
 '
 'get file attributes
 '
 filename$ = "test.fil"     'Change this to an existing filename!
 t% = getfileattr%(filename$)
 IF t% = -1 THEN PRINT "Error" ELSE PRINT "Attribute="; t%
 '
 'set file attributes
 '
 filename$ = "test.fil"     'Change this to an existing filename!
 attribute% = 32            'set archive bit
 t% = setfileattr%(filename$, attribute%)
 IF t% THEN PRINT "Error"

 FUNCTION getfileattr% (filename$)
  DIM regsx AS regtypex
  regsx.ax = &H4300
  testname$ = filename$ + CHR$(0)
  regsx.ds = VARSEG(testname$)
  regsx.dx = SADD(testname$)
  interruptx &H21, regsx, regsx
  IF regsx.flags AND 1 THEN
    getfileattr% = -1
  ELSE
    getfileattr% = regsx.cx
  END IF
 END FUNCTION

 FUNCTION setfileattr% (filename$, attribute%)
  DIM regsx AS regtypex
  testname$ = filename$ + CHR$(0)
  regsx.ax = &H4301
  regsx.cx = attribute%
  regsx.ds = VARSEG(testname$)
  regsx.dx = SADD(testname$)
  interruptx &H21, regsx, regsx
  IF regsx.flags AND 1 THEN
    setfileattr% = -1
  ELSE
    setfileattr% = 0
  END IF
 END FUNCTION

'> ALSO....

'> Does anyone have any code for SETTING the DOS volume label of a floppy?

'  The only way I've successfully done it is with int 21 function 6c
'(extended open/create), which only works with DOS 4.0+.  There's got to
'be a better way and maybe someone else here knows it.
