home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib31b.dsk / DISK.PREP.bas < prev    next >
BASIC Source File  |  2023-02-26  |  3KB  |  43 lines

  1. 10  REM  **********************
  2. 20  REM  *     DISK.PREP      *
  3. 30  REM  *   BY ANDY TUXEN    *
  4. 40  REM  * COPYRIGHT (C) 1987 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  REM  PREPARE DISK FOR ENHANCED COPYA BY BUILDING
  9. 90  REM  CATALOG ENTRY FOR DATE/TIME STAMP.
  10. 100  HOME : PRINT ADDBACKUPENTRY TO DIREC TO RY"
  11. 110 D$ =  CHR$(4)
  12. 120  FOR I = 768 TO 792: READ D: POKE I,D: NEXT : DATA  32,227,3,140,10,3,141,11,3,96,0,0,32,227,3,32,217,3,144,4,169,1,133,222,96: REM  POKE IN RWTS INTERFACE
  13. 130  CALL 768: REM  GET IOB ADDRESS
  14. 140 IOB =  PEEK(778) + PEEK(779) *256
  15. 150 I =  FRE(0): VTAB 10: CALL  -868: PRINT "ENTER DRIVE NUMBER OR ESC TO QUIT: ";: GET A$: IF A$ =  CHR$(27)  THEN  HOME : END 
  16. 160  IF A$ < >"1"  AND A$ < >"2"  THEN  PRINT  CHR$(7): GOTO 150
  17. 170  PRINT A$:DR =  ASC(A$) - ASC("0")
  18. 180  POKE IOB +2,DR: POKE IOB +3,0: POKE IOB +4,17: POKE IOB +5,0: POKE IOB +8,0: POKE INB +9, PEEK(110) +3: POKE IOB +12,1: GOSUB 370: REM  READ VTOC
  19. 190 BFR = ( PEEK(110) +3) *256
  20. 200 ST =  PEEK(BFR +1):SS =  PEEK(BFR +2): POKE IOB +4,ST: POKE IOB +5,SS: GOSUB 370: REM  READ 1ST CATALOG SECTOR
  21. 210  IF  PEEK(BFR +11) = 0  OR  PEEK(BFR +11) = 255  THEN 320: REM  1ST ENTRY UNUSED
  22. 220 N$ = "": FOR I = 1 TO 10:N$ = N$ + CHR$(( PEEK(BFR +13 +I) -128): NEXT : IF N$ = "@BACKED UP"  THEN 350: REM  CHECK IF ENTRY ALREADY EXISTS
  23. 230 SV$ = "": FOR I = 1 TO 35:SV$ = SV$ + CHR$( PEEK(BFR +10 +I)): NEXT : REM  SAVE 1ST DIRECTORY ENTRY
  24. 240 UN = 0: FOR I = 11 TO 221  STEP 35: IF  PEEK(BFR +I) = 0  OR  PEEK(BFR +I) = 255  THEN UN = I:I = 221: REM  SCAN SECTOR FOR UNUSED DIRECTORY ENTRY.
  25. 250  NEXT 
  26. 260  IF UN < >0  THEN 290: REM  BRANCH IF UNUSED ENTRY FOUND
  27. 270  IF  PEEK(BFR +1) = 0  AND  PEEK(BFR +2) = 0  THEN 410: REM  CHECK FOR END OF DIRECTORY
  28. 280  POKE IOB +4, PEEK(BFR +1): POKE IOB +5, PEEK(BFR +2): GOSUB 370: GOTO 240: REM  SEARCH NEXT SECTOR
  29. 290  FOR I = 1 TO 35: POKE BFR +UN +I -1, ASC( MID$ (SV$,I,1)): NEXT : POKE IOB +12,2: GOSUB 370: REM  MOVE 1ST ENTRY TO UNUSED ENTRY
  30. 300  POKE IOB +12,1: POKE IOB +4,ST: POKE IOB +5,SS: GOSUB 370: REM  READ 1ST DIRECTORY ENTRY AGAIN
  31. 310  POKE BFR +11,255: POKE IOB +12,2: GOSUB 370: REM  MARK 1ST ENTRY AS UNUSED
  32. 320  ONERR  GOTO 420
  33. 330 FI$ = "@BACKED UP DDD MMM NN HH:MM PM": PRINT D$;"OPEN";FI$;",D";DR: PRINT D$;"WRITE";FI$: PRINT D$;"CLOSE";FI$: POKE 216,0
  34. 340 MS$ = "DATE/TIME STAMP ENTRY ADDED TO DRIVE " +A$: GOTO 360
  35. 350 MS$ = "BACKUP ENTRY ALREADY EXISTS"
  36. 360  VTAB 16: CALL  -958: PRINT MS$: GOTO 150
  37. 370  POKE 222,0: CALL 780: IF  PEEK(222) = 0  THEN  RETURN : REM  INVOKE RWTS AND RETURN IF NO ERROR
  38. 380  POP : IF  PEEK(IOB +13) < >16  THEN 400
  39. 390 MS$ = "ERROR - DISK IS WRITE PROTECTED": GOTO 360
  40. 400 MS$ = "I/O ERROR TRYING TO UPDATE DISK": GOTO 360
  41. 410 MS$ = "ERROR - DIRECTORY IS FULL": GOTO 360
  42. 420  IF  PEEK(222) = 4  THEN 390
  43. 430  GOTO 400