home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / developmen / oplexamp / ATTRIB.OPL < prev    next >
Text File  |  1993-01-12  |  3KB  |  178 lines

  1. /*        The following OPL code shows how one might alter the settings
  2.         of the file attributes of any file from within an OPL program
  3.  
  4.         It uses the EPOC System Services: FilStatusGet & FilStatusSet
  5.         as described on pp. 39 of both the old manual and the new one.
  6.  
  7.         This code written for Support by A.M.
  8.         Copyright Psion Plc. 1992
  9.  
  10. */
  11.  
  12.  
  13. #define FileManager  $0087
  14. #define FilStatusGet $0800
  15. #define FilStatusSet $0900
  16.  
  17. PROC attrib:
  18.  
  19.     LOCAL err%,file$(128)
  20.     LOCAL rdo%,mod%,hid%,sys%
  21.     LOCAL mask%
  22.     LOCAL option%
  23.  
  24.     file$ = "m:\*.*"
  25.     
  26.     dINIT "File attributes"
  27.     dFILE file$,"File:",16
  28.     dCHOICE option%,"Action","Get,Set"
  29.  
  30.     err% = DIALOG
  31.     IF err% = 0
  32.         STOP
  33.     ENDIF
  34.  
  35.     IF option% = 1
  36.         err% = attget%:(file$)            /*  get the current attributes  */
  37.         
  38.         IF err% < 0
  39.             showerr:(err%)
  40.         ENDIF
  41.  
  42.         CLS
  43.  
  44.         IF err% AND $01
  45.             PRINT "Is file read only        : No"
  46.         ELSE
  47.             PRINT "Is file read only        : Yes"
  48.         ENDIF
  49.  
  50.         IF err% AND $20
  51.             PRINT "Is file modified         : Yes"
  52.         ELSE
  53.             PRINT "Is file modified         : No"
  54.         ENDIF
  55.  
  56.         IF err% AND $02
  57.             PRINT "Is file hidden           : Yes"
  58.         ELSE
  59.             PRINT "Is file hidden           : No"
  60.         ENDIF
  61.  
  62.         IF err% AND $04
  63.             PRINT "Is file a system file    : Yes"
  64.         ELSE
  65.             PRINT "Is file a system file    : No"
  66.         ENDIF
  67.  
  68.     ELSE
  69.  
  70.         dINIT "Set file attributes"
  71.         dCHOICE rdo%,"Is file read only","No,Yes"
  72.         dCHOICE mod%,"Is file modified","No,Yes"
  73.         dCHOICE hid%,"Is file hidden","No,Yes"
  74.         dCHOICE sys%,"Is file a system file","No,Yes"
  75.  
  76.         err% = DIALOG
  77.  
  78.         IF err% = 0
  79.             STOP
  80.         ENDIF
  81.  
  82.         IF rdo%    = 1                /*  These few lines make up  */
  83.             mask%   = mask% + $01        /*  the bit value which is   */
  84.         ENDIF                            /*  passed in DI when doing  */
  85.                                         /*  the OS() to FilStatusSet */
  86.         IF mod%    = 2
  87.             mask%   = mask% + $20
  88.         ENDIF
  89.  
  90.         IF hid%    = 2
  91.             mask%   = mask% + $02
  92.         ENDIF
  93.         
  94.         IF sys%    = 2
  95.             mask%   = mask% + $04
  96.         ENDIF
  97.         
  98.         err%  = attset%:(file$,mask%)
  99.         
  100.         IF err% < 0
  101.             showerr:(err%)
  102.         ENDIF
  103.  
  104.         PRINT "Attributes set successfully"
  105.  
  106.     ENDIF
  107.  
  108.     PRINT
  109.     PRINT "Press any key to stop."
  110.     GET
  111.  
  112. ENDP
  113.     
  114.  
  115. PROC attget%:(f$)
  116.  
  117.     LOCAL ax%,bx%,cx%,dx%,si%,di%
  118.     LOCAL flags%
  119.  
  120.     LOCAL fname$(25),pfname%
  121.     LOCAL buff%(8),pbuff%
  122.  
  123.     fname$  = f$ + CHR$(0)            /*  Make the name a ZTS  */
  124.     pfname% = ADDR(fname$) + 1        /*  Skip the LCB  */
  125.     pbuff% = ADDR(buff%())
  126.  
  127.     ax% = FilStatusGet
  128.     bx% = pfname%
  129.     cx% = pbuff%
  130.  
  131.     flags% = OS(FileManager,ADDR(ax%))
  132.  
  133.     IF flags% AND 1                /*  if carry set = error occured */
  134.         RETURN ax% OR $ff00            /*  so return that error number  */
  135.     ELSE
  136.         RETURN buff%(2)            /*  Return the value of the bits */
  137.     ENDIF
  138.     
  139. ENDP
  140.  
  141.  
  142. PROC attset%:(f$,m%)
  143.  
  144.     LOCAL ax%,bx%,cx%,dx%,si%,di%
  145.     LOCAL flags%
  146.  
  147.     LOCAL fname$(128),pfname%
  148.  
  149.     fname$  = f$ + CHR$(0)
  150.     pfname% = ADDR(fname$) + 1
  151.  
  152.     ax% = FilStatusSet
  153.     bx% = pfname%
  154.     cx% = $27                        /*  mask the read-only, mod, */
  155.     di% = m%                            /*  hidden and system bits   */
  156.  
  157.     flags% = OS(FileManager,ADDR(ax%))
  158.  
  159.     IF flags% AND 1                /* if carry set = error occured */
  160.         RETURN ax% OR $ff00            /* so return that error number  */
  161.     ELSE
  162.         RETURN 0                        /*  Return success  */
  163.     ENDIF
  164.     
  165. ENDP
  166.  
  167.  
  168. PROC showerr:(e%)
  169.         
  170.     PRINT "An error has occurred =",e%
  171.     PRINT ERR$(e%)
  172.     GET
  173.     STOP
  174.  
  175. ENDP
  176.  
  177.  
  178.