home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / various / file_inf.amos / file_inf.amosSourceCode
AMOS Source Code  |  1993-01-08  |  3KB  |  89 lines

  1. Screen Open 0,640,200,2,Hires : Colour 1,$FFF : Curs Off 
  2. Reserve As Work 5,260
  3. Global FILEINFOBLOCK
  4. FILEINFOBLOCK=Start(5)
  5. GTDR["sys:"]
  6. Procedure GTDR[DR$]
  7. PATH$=DR$
  8. LOCK[PATH$,-2]
  9. LOCK=Param
  10. If LOCK=0
  11. 'if we continue without the lock we will get a very nasty guru 
  12. Print 
  13. Centre "Warning!! Unable to obtain lock for "+PATH$
  14. Print 
  15. Direct 
  16. End If 
  17. EXAMINE[LOCK,FILEINFOBLOCK]
  18. STATUS=Param
  19. While STATUS<>0
  20. 'is entry file or another directory
  21. If Leek(FILEINFOBLOCK+4)>0
  22. TYPE$="Dir" : Else TYPE$="File" : End If 
  23. ' the file name is a null terminated string
  24. FILE$=String$(Chr$(0),108)
  25. Copy FILEINFOBLOCK+8,FILEINFOBLOCK+116 To Varptr(FILE$)
  26. FILE$=Left$(FILE$,Instr(FILE$,Chr$(0))-1)
  27. ' same for comment 
  28. COMMENT$=String$(Chr$(0),80)
  29. Copy FILEINFOBLOCK+144,FILEINFOBLOCK+224 To Varptr(COMMENT$)
  30. COMMENT$=Left$(COMMENT$,Instr(COMMENT$,Chr$(0))-1)
  31. ' file size in bytes & blocks
  32. SIZE=Leek(FILEINFOBLOCK+124)
  33. NUMBLOCKS=Leek(FILEINFOBLOCK+128)
  34. ' get date & format it 
  35. DAYS=Leek(FILEINFOBLOCK+132)
  36. N=DAYS-2251 : Y=(4*N+3)/1461 : NN=N-(1461*Y)/4 : YY=Y+1984 : M=(5*NN+2)/153
  37. D=NN-(153*M+2)/5+1 : MM=M+3
  38. If MM>12 : Inc YY : MM=MM-12 : End If 
  39. DATE$=Str$(D)+"/"
  40. If D<10 : DATE$="0"+DATE$ : End If 
  41. If MM<10
  42. DATE$=DATE$+"0"+Str$(MM)+"/"+Right$(Str$(YY),2)
  43. Else 
  44. DATE$=DATE$+Str$(MM)+"/"+Right$(Str$(YY),2)
  45. End If 
  46. DATE$=DATE$-" "
  47. ' get the time and format it 
  48. MM=Leek(FILEINFOBLOCK+136) : HH=MM/60 : MM=MM mod 60
  49. If HH<10 : TIME$="0"+Str$(HH)-" "+":" : Else TIME$=Str$(HH)-" "+":" : End If 
  50. If MM<10 : TIME$=TIME$+"0"+Str$(MM)-" " : Else TIME$=TIME$+Str$(MM)-" " : End If 
  51. ' get file protection bits 
  52. PB$="____RWED" : PB=Leek(FILEINFOBLOCK+116)
  53. For I=0 To 3
  54. If Btst(I,PB) : Mid$(PB$,8-I,1)="_" : End If 
  55. Next I
  56. If Btst(4,PB) Then Mid$(PB$,4)="A"
  57. If Btst(5,PB) Then Mid$(PB$,3)="P"
  58. If Btst(6,PB) Then Mid$(PB$,2)="S"
  59. If Btst(7,PB) Then Mid$(PB$,1)="H"
  60. EXNEXT[LOCK,FILEINFOBLOCK]
  61. STATUS=Param : Rem a status of 0 indicates that there are no more files 
  62. If STATUS<>0
  63. Print "Filename:-";FILE$;"(";TYPE$;")"
  64. Print "Size:-";SIZE;"  Number of blocks:-";NUMBLOCKS
  65. Print "Protection bits:-";PB$
  66. Print "Date:-";DATE$;"  Time:-";TIME$
  67. Print "Comment:-";COMMENT$
  68. Print 
  69. Wait Key 
  70. End If 
  71. Wend 
  72. UNLOCK[LOCK]
  73. End Proc
  74. Procedure LOCK[NAME$,MOAD]
  75. ' moad takes the value -2 for read -1 for write
  76. ' the name$ must be nul terminated 
  77. NAME$=NAME$+Chr$(0) : Dreg(1)=Varptr(NAME$) : Dreg(2)=MOAD
  78. End Proc[Doscall(-84)]
  79. Procedure EXAMINE[LOCK,FILEINFOBLOCK]
  80. 'parameters are pointers to the lock & pointers to the fileinfoblock 
  81. Dreg(1)=LOCK : Dreg(2)=FILEINFOBLOCK
  82. End Proc[Doscall(-102)]
  83. Procedure EXNEXT[LOCK,FILEINFOBLOCK]
  84. 'parameters are pointers to the lock & pointers to the fileinfoblock 
  85. Dreg(1)=LOCK : Dreg(2)=FILEINFOBLOCK
  86. End Proc[Doscall(-108)]
  87. Procedure UNLOCK[LOCK]
  88. Dreg(1)=LOCK
  89. End Proc[Doscall(-90)]