home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / disk / backup / a055_1 / !Backup / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1993-10-12  |  8KB  |  334 lines

  1.  > !RunImage for !Backup   Copyright 
  2.  Denis Howe 1992
  3.  You may copy this program freely as long as this
  4.  notice is retained and you don't charge for it.
  5.  0.00 16-Sep-1991 Written by Denis Howe <dbh@doc.ic.ac.uk>
  6.  1.01 13-Feb-1992 Fixed poll loop OpenWindow call
  7.  1.02 01-Jun-1992 Added Root$ variable
  8.  1.03 20-Dec-1992 Set list filetype to text.  Specify file
  9.                   sys for archive.  Add ArcDev$ variable.
  10. Error0
  11. 2Root$="adfs::4.$"      :
  12.  Directory to back up
  13. RootLen%=
  14. (Root$)+2
  15. 9ArcDev$="adfs::0.$"    :
  16.  Where to write the back-up.
  17.  Templates file:
  18. LevelWH%=99
  19. !prev_date_ih  = 0 :
  20.  indirect
  21. prev_level_ih = 1
  22. !this_date_ih  = 2 :
  23.  indirect
  24. this_level_ih = 3
  25. ok_ih         = 4
  26. TaskName$="Backup"
  27. buflen%=512:datelen%=50
  28.  buf% buflen%, ind% 100, indend% -1
  29.  date% datelen%, prevdate% 5, now% 5, Hex% 17, Caret% 24
  30. $Hex%="0123456789ABCDEF"
  31. LF=10:CR=13:ESC=27
  32.  "OS_SWINumberFromString",,"OS_GBPB" 
  33.  GBPB%
  34.  "OS_SWINumberFromString",,"OS_ConvertStandardDateAndTime" 
  35.  DateStr%
  36. !"Dir$=
  37. VarVal("Obey$Dir") + "."
  38. ">Dates$=Dir$+"Dates"           :
  39.  Dates of previous backups
  40. #4List$=Dir$+"List"             :
  41.  Files to backup
  42. $9Record$=Dir$+"Record"         :
  43.  New date file record
  44. %DLabelLeaf$="!!!Label"         :
  45.  First file to backup (leafname)
  46. &4Label$=Root$+"."+LabelLeaf$   :
  47.  Label file path
  48. Templates$=Dir$+"Templates"
  49. Level$="?"
  50. *4?now%=3:
  51.  "OS_Word",14,now% :
  52.  Get current time
  53.  "Wimp_Initialise", 200, &4B534154, TaskName$
  54. Error
  55. Exists(List$) 
  56. Exists(Label$) 
  57. Existing
  58. GetLevel
  59.  "Wimp_Poll", 1<<0 
  60.  3<<4 
  61.  3<<1, buf% 
  62.  reason%
  63.  reason% 
  64.  "Wimp_OpenWindow",,buf%
  65. Quit :
  66.  Close window => abort
  67.  Click
  68. 64    
  69.  buf%!12=LevelWH% 
  70.  buf%!16=ok_ih 
  71. GotLevel
  72.  buf%!24 
  73. GotLevel
  74.  ESC:
  75. ;&    
  76.  "Wimp_ProcessKey",buf%!24
  77. <        
  78.  17,18,19:
  79.  buf%!16=0 
  80. Exists(F$)
  81.  F%:F%=
  82.  F%>0 
  83. E    =F%>0
  84. Existing    :
  85.  Use existing list and label
  86.  K%,F%:F%=
  87. (Label$)
  88.  Read level from last char of 2nd line of label
  89. #F%  :
  90.  skip 1st line
  91. Level$=
  92. P-!buf%=0:$(buf%+4)="Use existing list?"+
  93.  "Wimp_ReportError",buf%,%10011,TaskName$ 
  94. Quit     :
  95.  No button click
  96. Write    :
  97.  2 = Cancel returns
  98. GetLevel
  99. [5Level$="":
  100. GetRec(Level$, prevdate%) :
  101.  Uses buf%
  102.  "Wimp_OpenTemplate",,Templates$
  103. $date%="level"
  104.  "Wimp_LoadTemplate",,buf%+4,ind%,indend%,-1,date%,0 
  105.  ,,ind%,,,,F%
  106.  "Wimp_CloseTemplate"
  107.  F%=0 
  108.  0,"Template not found"
  109.  Level$="" 
  110.   Level$="0"
  111. c.  $(buf%!(4+88+32*prev_date_ih+20))="None"
  112. d*  $(buf%+4+88+32*prev_level_ih+20)="-"
  113. f8  $(buf%!(4+88+32*prev_date_ih+20))=
  114. Date(prevdate%)
  115. g-  $(buf%+4+88+32*prev_level_ih+20)=Level$
  116. i1$(buf%!(4+88+32*this_date_ih+20))=
  117. Date(now%)
  118. j+$(buf%+4+88+32*this_level_ih+20)=Level$
  119. buf%!28=-1
  120.  "Wimp_CreateWindow",,buf%+4 
  121.  LevelWH%
  122. buf%!0=LevelWH%
  123.  "Wimp_OpenWindow",,buf%
  124.  "Wimp_GetCaretPosition",,Caret%
  125.  "Wimp_SetCaretPosition",LevelWH%,this_level_ih,,,-1,
  126. (Level$)
  127. GotLevel
  128. u1buf%!0=LevelWH%:
  129.  "Wimp_GetWindowInfo",,buf%
  130. v+Level$=$(buf%+4+88+32*this_level_ih+20)
  131. GetRec(Level$, prevdate%)
  132. MakeRec(Level$)
  133. MkLabel
  134. MkList
  135. Write
  136. MkLabel
  137.  Label%
  138. Label%=
  139. (Label$)
  140.  #Label%,"Dump  "+Root$
  141.  #Label%,"Level "+Level$
  142.  #Label%,"From  "+
  143. Date(prevdate%)
  144.  #Label%,"To    "+
  145. Date(now%)
  146.  #Label%
  147. MkList
  148.  List%
  149.  "Wimp_CommandWindow",TaskName$
  150.  "Creating list for level ";Level$
  151.  "From ";
  152. Date(prevdate%)'"To   ";
  153. Date(now%)
  154. List%=
  155. (List$)
  156.  #List%:
  157. Error
  158.  #List%,".c"            :
  159.  Create archive
  160.  #List%,".z"            :
  161.  Compress
  162.  #List%,".M"            :
  163.  Multi-disk archive
  164.  #List%,".v"            :
  165.  List files written
  166.  #List%,"-C"            :
  167.  Root of files in list
  168.  #List%,Root$
  169.  Level$="0" 
  170.  #List%, "*" 
  171. Dir(Root$, List%)
  172.  #List%
  173.  "Settype "+List$+" Text"
  174. MakeRec(Level$)
  175.  Make a record for current backup to append to dates file.
  176.  F%,I%
  177. (Record$)
  178.  #F%,
  179.  Level$:
  180.  #F%, 
  181.  read CMOS clock to 5 byte buf.
  182.  I%=4 
  183.  #F%,
  184. Hex((now%?I%)>>4)
  185.  #F%,
  186. Hex((now%?I%))
  187.  #F%," "+
  188. Date(now%)
  189. GetRec(
  190.  Level$, TP%)
  191.  Read dates file.  Each line contains the Level (char "0".."9")
  192.  followed by a space followed by the time as 10 hex digits.  Set 5 byte
  193.  time pointed to by TP% & Level$ to time and level of last backup at <
  194.  Level$.  If Level$="" return last backup if any.
  195.  F%,I%,L$
  196. !TP%=0:TP%?4=0
  197. (Dates$)
  198.     L$=
  199. /    
  200.  #F%<>
  201.  0,"Bad dates file"
  202. 4    
  203.  I%=4 
  204.  -1:buf%?I%=
  205. ("&"+
  206. #F%):
  207.     comment$=
  208. 7    
  209.  Level$="" 
  210.  L$<Level$ !TP%=!buf%:TP%?4=buf%?4
  211.  Level$="" Level$=L$
  212. Write
  213.  "Filer_OpenDir "+ArcDev$
  214. BArcBase$=ArcDev$+".L"+Level$  :
  215.  Start of tar output file name
  216. ;Archive$=ArcBase$+"/"+
  217. Today :
  218.  Name after today's date
  219. Wipe(ArcBase$+"*", 
  220.  No confirm for same level
  221. Wipe(ArcDev$+".*", 
  222.  Confirm other files
  223. Task("Tar -fl "+Archive$+" "+List$) 
  224. AppendRec
  225.  "Copy "+List$+" "+Dir$+"OList DF~V"
  226.  "Remove "+Label$
  227. AppendRec
  228.  FR%,FD%
  229. 9FR%=
  230. (Record$):
  231.  FR%=0 
  232.  0,"No date record to append"
  233. (Dates$)
  234.  FD%=0 FD%=
  235. (Dates$) 
  236.  #FD%=
  237.  #FD%
  238.  FD%=0 
  239.  0,"Can't append date record"
  240.  #FD%,
  241. # FR%
  242.  #FD%:
  243.  #FR%
  244.  "Remove "+Record$
  245. Hex(X%)=Hex%?(X% 
  246. Date(P%):
  247.  DateStr%,P%,date%,datelen% 
  248.  ,P%:?P%=13:=$date%
  249. GetEntry(D$,
  250.  Offset%)
  251.  GBPB%,11,D$,buf%,1,Offset%,buflen%,0 
  252.  ,,,,Offset%:=Offset%<>-1
  253. After(t1%,t2%)
  254.  t1% & t2% point to 5 byte unsigned datestamps, lsb 1st.
  255.  t1% points to the file datestamp, t2% to the previous dump date.
  256.  To always backup unstamped files -> IF t1%?4=0 AND !t1%=0 THEN=TRUE
  257.  I%:I%=4
  258.  I%>0 
  259.  t1%?I%=t2%?I%:I%-=1:
  260. =t1%?I%>t2%?I%
  261. Dir(D$,List%) :
  262.  D$ has no trailing "."
  263.  F$,G$,P%,Offset%:Offset%=0
  264. GetEntry(D$,Offset%)
  265. )  P%=buf%+29:
  266.  ?P%>32:P%+=1:
  267. :?P%=13
  268.   F$=D$+"."+$(buf%+29)
  269.  PRINT F$;" type ";buf%!16
  270.  buf%!16 
  271.  file - check date
  272. &    
  273. After(buf%+24, prevdate%) 
  274. 0      G$=
  275. F$,RootLen%) :
  276.  Strip "adfs::4.$."
  277. $      
  278. Date(buf%+24)
  279.       
  280.  #List%, G$
  281.         
  282.  recurse on directory (reuses buf)
  283. Dir(F$, List%)
  284. >    
  285.  0,"Unknown object type: "+
  286. (buf%!16)+" for <"+F$+">"
  287. Task(Cmd$)
  288.  Next%,Free%
  289.  "Wimp_SlotSize",-1,-1 
  290.  ,Next%,Free%
  291.  "Wimp_SlotSize",-1,Next%+Free%     :
  292.  Set next
  293.  "Wimp_StartTask",Cmd$+
  294. (Cmd$)," ")
  295.  "Wimp_SlotSize",-1,Next%           :
  296.  Restore old next slot size
  297. VarVal("Sys$ReturnCode")="0"
  298. VarVal(VarName$) :
  299.  Variable name without "< >"
  300.  "XOS_ReadVarVal",VarName$,buf%,buflen%,0,3 
  301.  ,,L%
  302.  L%<0 L%=0
  303. buf%?L%=13
  304. =$buf%
  305. Today
  306.  "OS_ConvertDateAndTime",now%,buf%,buflen%,"%DY%MN%YR"+
  307. ?P%=CR
  308. =$buf%
  309. Wipe(Spec$, Confirm%)
  310.  Flags$
  311.  Confirm% 
  312.  Errors to cmd window, request confirm, verbose
  313. '!  $buf%="Other files on disk"
  314.  "Wimp_CommandWindow",buf%
  315.   Flags$="CV"
  316. +,  Flags$="~C~V" :
  317.  no confirm or verbose
  318.  Don't display errors
  319.  "Wipe "+Spec$+" "+Flags$
  320. Error0
  321. $;" @ "+
  322. Error
  323. 9%buf%!0=
  324. :$(buf%+4)=
  325. $+" ("+
  326.  "Wimp_ReportError",buf%,1,TaskName$
  327. =&108C2 
  328.  "Wimp_CloseTemplate"
  329.  Restore the caret if we have it.
  330.  "Wimp_GetCaretPosition",,buf%
  331.  !buf%=LevelWH% 
  332.  "Wimp_SetCaretPosition",Caret%!0,Caret%!4,Caret%!8,Caret%!12,Caret%!16,Caret%!20
  333.  "Wimp_CloseDown"
  334.