home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / UNDELETE.LBR / UNDELETE.ZZ0 / UNDELETE.Z80
Text File  |  2000-06-30  |  12KB  |  767 lines

  1. BDOS    EQU    5
  2. FCB    EQU    5CH
  3. DMA    EQU    80H
  4. ;
  5. CONIN        EQU    1
  6. CONOUT        EQU    2
  7. PRINTS        EQU    9
  8. GETVERSION    EQU    12
  9. SELDSK        EQU    14
  10. FINDFILE    EQU    17
  11. GETDISK        EQU    25
  12. GETALV        EQU    27
  13. GETDPB        EQU    31
  14. GETUSER        EQU    32
  15. ;
  16. BS    EQU    8
  17. TAB    EQU    9
  18. ;
  19. ;
  20. ;********************************
  21. ;*                *
  22. ;*    START            *    
  23. ;*                *
  24. ;********************************
  25. ;
  26. BEGIN:
  27.     JP    START
  28. HELLO:
  29.     DB    TAB,'Smart File Undelete',13,10
  30.     DB    TAB,' By  Guy Cousineau',13,10
  31.     DB    TAB,'  1989 - 08 - 25',13,10,10,'$'
  32. START:
  33.     LD    (OLDSP),SP
  34.     LD    SP,STACK
  35.     LD    DE,HELLO
  36.     LD    C,PRINTS
  37.     CALL    BDOS
  38. ;
  39. ;Protect from GO since self-modifying code used
  40. ;
  41.     LD    A,(PRET)    ;return pointer
  42.     LD    (BEGIN),A
  43.     LD    BC,16*3        ;number of vectors
  44.     LD    DE,BIOSTABLE
  45.     LD    HL,(1)        ;get BIOS start
  46.     LDIR
  47.     LD    BC,DMA
  48.     CALL    JSETDMA
  49.     LD    A,(FCB)
  50.     OR    A
  51.     JP    NZ,GOTDRV
  52.     LD    C,GETDISK
  53.     CALL    BDOS
  54.     INC    A
  55. GOTDRV:    
  56.     DEC    A
  57.     LD    E,A
  58.     LD    C,SELDSK
  59.     CALL    BDOS
  60.     LD    DE,BADDRV
  61.     JP    NZ,EXITM
  62. ;
  63. ;Check CP/M Version
  64. ;May work with CP/M 3.x but disabled here for safety
  65. ;change JP NZ,EXITM to JP C,EXITM if you want to test it on CP/M 3.x
  66. ;alternately, you can comment out this section of code entirely
  67. ;
  68.     LD    C,GETVERSION
  69.     CALL    BDOS
  70.     AND    0F0H
  71.     CP    20H        ;is it CP/M 2.x
  72.     LD    DE,NOT22
  73.     JP    NZ,EXITM    
  74. ;
  75. ;get disk info
  76. ;
  77.     LD    DE,READM
  78.     LD    C,PRINTS
  79.     CALL    BDOS
  80.     LD    C,GETDPB
  81.     CALL    BDOS
  82.     LD    A,(HL)
  83.     LD    (SECPERTRK),A
  84.     LD    DE,4
  85.     ADD    HL,DE
  86.     LD    A,(HL)
  87.     LD    (EXTMASK),A
  88.     INC    HL
  89.     LD    C,(HL)
  90.     INC    HL
  91.     LD    A,(HL)        ;high byte of total groups
  92.     LD    B,A        ;BC=disk size
  93.     OR    A
  94.     JR    Z,NOTBIG
  95.     LD    A,1
  96. NOTBIG:
  97.     LD    (BIGDISK),A    ;save 2-byte alv flag
  98.     INC    HL        ;max dir entry
  99.     LD    E,(HL)
  100.     INC    HL
  101.     LD    D,(HL)
  102.     INC    DE        ;adjust count
  103.     SRL    D
  104.     RR    E
  105.     SRL    D
  106.     RR    E
  107.     LD    (SECTOGO),DE    ;counter
  108.     LD    DE,5
  109.     ADD    HL,DE        ;system track offset
  110.     LD    A,(HL)
  111.     INC    HL
  112.     LD    H,(HL)
  113.     LD    L,A
  114.     LD    (CURTRK),HL    ;start reading here
  115.     SRL    B
  116.     RR    C
  117.     SRL    B
  118.     RR    C
  119.     SRL    B
  120.     RR    C        ;disk size/8
  121.     INC    BC        ;adjust count
  122.     PUSH    BC
  123.     LD    C,GETALV
  124.     CALL    BDOS
  125.     LD    DE,ALV
  126.     POP    BC        ;byte count
  127.     LDIR            ;copy ALV to RAM
  128.     LD    HL,FILEBUFF
  129.     LD    (BUFFPOS),HL
  130.     XOR    A
  131.     LD    (CURSEC),A
  132. ;
  133. ;********************************
  134. ;*                *    
  135. ;*   Read entire directory    *
  136. ;*   make table entry for E5's    *
  137. ;*                *
  138. ;********************************
  139. ;
  140.     LD    A,(CURSEC)
  141. READMORE:
  142.     LD    B,0
  143.     LD    C,A
  144.     CALL    JSECTRAN
  145.     LD    B,H
  146.     LD    C,L
  147.     CALL    JSELSEC
  148.     LD    BC,(CURTRK)
  149.     CALL    JSELTRK
  150.     CALL    JREAD    
  151.     OR    A
  152.     LD    DE,READERR
  153.     JP    NZ,EXITM
  154. ;
  155. ;scan for E5
  156. ;
  157.     LD    B,4        ;entries per record
  158.     LD    HL,DMA
  159. SCANSEC:
  160.     LD    A,(HL)
  161.     CP    0E5H
  162.     CALL    Z,MAKETABLE
  163.     LD    DE,20H
  164.     ADD    HL,DE
  165.     DJNZ    SCANSEC
  166.     LD    HL,(SECTOGO)
  167.     DEC    HL
  168.     LD    A,H
  169.     OR    L
  170.     JR    Z,READDONE
  171.     LD    (SECTOGO),HL
  172.     LD    A,(SECPERTRK)
  173.     LD    B,A
  174.     LD    A,(CURSEC)
  175.     INC    A
  176.     CP    B
  177.     JR    NZ,SAMETRK
  178.     LD    HL,(CURTRK)
  179.     INC    HL
  180.     LD    (CURTRK),HL
  181.     XOR    A
  182. SAMETRK:
  183.     LD    (CURSEC),A
  184.     JR    READMORE
  185. ;
  186. ;print status report so far
  187. ;
  188. READDONE:
  189.     LD    DE,DELFILES
  190.     LD    C,PRINTS
  191.     CALL    BDOS
  192.     CALL    SHOWFILES
  193. ;
  194. ;********************************
  195. ;*                *    
  196. ;*    Check ALV overlap    *
  197. ;*                *
  198. ;********************************
  199. ;
  200.     LD    HL,FILEBUFF
  201. CHECKALV:
  202.     PUSH    HL
  203.     LD    DE,20        ;point to ALV
  204.     ADD    HL,DE
  205.     LD    B,16
  206.     LD    A,(BIGDISK)
  207.     OR    A
  208.     JR    Z,CHECK1
  209.     LD    B,8
  210. CHECK1:
  211.     LD    E,(HL)
  212.     LD    D,0
  213.     LD    A,(BIGDISK)
  214.     OR    A
  215.     JR    Z,NOT2B
  216.     INC    HL
  217.     LD    D,(HL)
  218. NOT2B
  219.     LD    A,D
  220.     OR    E
  221.     JR    Z,NEXTALV    ;end of alv for this file
  222.     INC    HL
  223.     PUSH    HL        ;save current FILE allocation
  224.     LD    A,E        ;get BIT
  225.     AND    7
  226.     INC    A        ;may go around 8 times but who cares
  227.     LD    C,A        ;save here for loop
  228.     SRL    D
  229.     RR    E
  230.     SRL    D
  231.     RR    E
  232.     SRL    D
  233.     RR    E        ;DE/8=ALV byte to check
  234.     LD    HL,ALV
  235.     ADD    HL,DE
  236.     LD    A,(HL)
  237.     PUSH    BC
  238. GETBIT:    RLCA
  239.     DEC    C
  240.     JR    NZ,GETBIT
  241.     POP    BC        ;get bit counter back
  242.     EX    DE,HL        ;DISK ALV byte
  243.     POP    HL        ;FILE alv pointer
  244.     RRCA            ;test bit
  245.     JR    C,KILLFILE
  246.     RLCA            ;start going back
  247.     OR    1        ;set alv bit used
  248. SETBIT:    RRCA
  249.     DEC    C
  250.     JR    NZ,SETBIT
  251.     LD    (DE),A        ;update ALV
  252.     DJNZ    CHECK1
  253.     XOR    A        ;set to OK
  254.     JR    NEXTALV
  255. KILLFILE:
  256.     LD    A,1
  257. NEXTALV:
  258.     POP    HL
  259.     LD    (HL),A        ;update flag byte
  260.     CALL    INCREMENT
  261.     JR    NZ,CHECKALV
  262. ;
  263. ;Status report
  264. ;
  265.     LD    DE,NOALV
  266.     LD    C,PRINTS
  267.     CALL    BDOS
  268.     CALL    SHOWFILES
  269. ;
  270. ;********************************
  271. ;*                *    
  272. ;* Check if files exist in USER    *
  273. ;*                *
  274. ;********************************
  275. ;
  276.     LD    DE,CHECKM
  277.     LD    C,PRINTS
  278.     CALL    BDOS
  279.     LD    HL,FILEBUFF
  280. DUPLICATE:
  281.     LD    A,(HL)
  282.     OR    A
  283.     JR    NZ,NOCHECK    ;already killed
  284.     LD    DE,FCB2
  285.     LD    B,33
  286. ZEROFILL:
  287.     LD    (DE),A
  288.     INC    DE
  289.     DJNZ    ZEROFILL
  290.     PUSH    HL        ;save buffer pos
  291.     LD    DE,5
  292.     ADD    HL,DE        ;start of file name
  293.     LD    BC,11
  294.     LD    DE,FCB2+1
  295.     LDIR
  296.     LD    DE,FCB2
  297.     LD    C,FINDFILE
  298.     CALL    BDOS
  299.     INC    A        ;if A now zero then file not found
  300.     POP    HL        ;buffer pos
  301. NOCHECK:
  302.     LD    (HL),A        ;update flag
  303.     CALL    INCREMENT
  304.     JR    NZ,DUPLICATE
  305. ;
  306. ;status report
  307. ;
  308.     LD    DE,NODUPS
  309.     LD    C,PRINTS
  310.     CALL    5
  311.     CALL    SHOWFILES
  312.     CALL    PRESSKEY
  313. ;
  314. ;********************************
  315. ;*                *    
  316. ;*    Show files for tagging    *
  317. ;*                *
  318. ;********************************
  319. ;
  320.     LD    DE,MENU
  321.     LD    C,PRINTS
  322.     CALL    BDOS
  323.     LD    HL,FILEBUFF
  324. TAGMORE:
  325.     PUSH    HL
  326.     LD    A,(HL)
  327.     OR    A
  328.     JR    NZ,NSHOW
  329.     LD    DE,5+11        ;point to extent
  330.     ADD    HL,DE
  331.     LD    A,(EXTMASK)
  332.     CP    (HL)
  333.     JR    C,NSHOW        ;don't show a second extent        
  334.     LD    DE,-11
  335.     ADD    HL,DE        ;point to file name
  336.     CALL    CRLF
  337.     CALL    PRINTFILE
  338.     LD    E,' '
  339.     LD    C,CONOUT
  340.     CALL    5
  341.     CALL    GETKEY        ;does uppercase
  342.     CP    'U'
  343.     JR    NZ,NSHOW
  344.     POP    HL
  345.     LD    A,0FFH
  346.     LD    (HL),A
  347.     PUSH    HL
  348.     CALL    CHECKREST    ;check to end of directory for others
  349. NSHOW:
  350.     POP    HL
  351.     CALL    INCREMENT
  352.     JR    NZ,TAGMORE
  353.     JP    UNDELETE
  354. ;
  355. CHECKREST:
  356.     EX    DE,HL        ;DE=start of entry
  357.     LD    HL,19
  358.     ADD    HL,DE
  359.     LD    A,(HL)
  360.     CP    80H
  361.     RET    NZ        ;if this extent not full then no next
  362.     LD    HL,5
  363.     ADD    HL,DE        ;point to name
  364.     LD    A,(HL)        ;get first character for compare
  365.     LD    DE,FCB2
  366.     LD    BC,11        ;save name
  367.     LDIR
  368. ;
  369. ;set up CPIR from here to end of table
  370. ;    
  371.     EX    DE,HL        ;de=current position
  372.     LD    HL,(BUFFPOS)
  373.     OR    A
  374.     SBC    HL,DE        ;bytes to do
  375.     LD    B,H
  376.     LD    C,L
  377.     EX    DE,HL        ;HL=end of this name
  378. COMPARE:
  379.     CPIR
  380.     RET    NZ
  381.     EX    AF,AF'        ;save first character
  382.     PUSH    HL
  383.     EXX
  384.     POP    HL        ;get current position
  385.     LD    B,10        ;first char already checked
  386.     LD    DE,FCB2+1    ;start at second char
  387. CHECKSAME:
  388.     LD    A,(DE)
  389.     CP    (HL)
  390.     JR    NZ,NOMATCH
  391.     INC    DE
  392.     INC    HL
  393.     DJNZ    CHECKSAME
  394.     LD    DE,-16
  395.     ADD    HL,DE
  396.     LD    (HL),0FFH    ;tag this extent as well
  397. NOMATCH
  398.     EXX            ;note old HL and DE unchanged
  399.     EX    AF,AF'        ;get first character back
  400.     JR    COMPARE
  401. ;
  402. ;********************************
  403. ;*                *    
  404. ;*    SHOW and CONFIRM    *
  405. ;*                *
  406. ;********************************
  407. ;
  408. UNDELETE:
  409.     INC    A
  410.     LD    DE,DOTHESE
  411.     LD    C,PRINTS
  412.     CALL    BDOS
  413. ;
  414. ;change the status byte check
  415. ;
  416.     LD    A,(UNDELETE)
  417.     LD    (INCAPATCH),A
  418.     CALL    SHOWFILES
  419.     LD    DE,YESNO
  420.     LD    C,PRINTS
  421.     CALL    BDOS
  422. RETRY:
  423.     LD    E,BS
  424.     LD    C,CONOUT
  425.     CALL    BDOS
  426.     CALL    GETKEY
  427.     CP    'U'
  428.     JP    NZ,RETRY
  429. ;
  430. ;********************************
  431. ;*                *    
  432. ;*    FINALLY we're ready    *
  433. ;*                *
  434. ;********************************
  435. ;
  436.     LD    E,255
  437.     LD    C,GETUSER
  438.     CALL    BDOS
  439.     LD    (USER),A
  440.     LD    DE,UNDELMSG
  441.     LD    C,PRINTS
  442.     CALL    5
  443.     LD    HL,FILEBUFF
  444. UNDELMORE:
  445.     LD    A,(HL)
  446.     INC    A
  447.     JR    NZ,NO_UNDEL
  448.     PUSH    HL
  449.     INC    HL
  450.     LD    C,(HL)
  451.     INC    HL
  452.     LD    B,(HL)        ;TRACK
  453.     INC    HL
  454.     LD    A,(HL)        ;SECTOR & OFFSET
  455.     PUSH    AF
  456.     CALL    JSELTRK
  457.     POP    AF
  458.     PUSH    AF
  459.     AND    3FH        ;remove sector offset
  460.     LD    B,0
  461.     LD    C,A
  462.     CALL    JSECTRAN
  463.     LD    B,H
  464.     LD    C,L
  465.     CALL    JSELSEC
  466.     CALL    JREAD
  467.     OR    A
  468.     LD    DE,READERR
  469.     JP    NZ,EXITM
  470.     POP    AF        ;sector offset
  471.     RLCA            ;from top 2 bits
  472.     RLCA
  473.     AND    3
  474.     LD    B,A        ;dir entries to skip
  475.     LD    HL,DMA
  476.     LD    DE,20H
  477.     JR    Z,GOTOFFSET
  478. GETOFFSET:
  479.     ADD    HL,DE
  480.     DJNZ    GETOFFSET
  481. GOTOFFSET:
  482.     LD    A,(USER)
  483.     LD    (HL),A
  484.     INC    HL
  485.     CALL    PRINTFILE    ;echo file name
  486.     CALL    CRLF
  487.     LD    C,1
  488.     CALL    JWRITE
  489.     OR    A
  490.     LD    DE,WRTERR
  491.     JP    NZ,EXITM
  492.     POP    HL
  493. NO_UNDEL:
  494.     CALL    INCREMENT
  495.     JR    NZ,UNDELMORE
  496. ;
  497. ;Must exit with WARM BOOT to reset directory
  498. ;
  499.     JP    0
  500. ;
  501. ;EXITS
  502. ;
  503. EXITM:
  504.     LD    C,PRINTS
  505.     CALL    BDOS
  506. EXIT:
  507.     LD    SP,(OLDSP)
  508. PRET:
  509.     RET
  510. ;
  511. ;********************************
  512. ;*                *
  513. ;*    SUBROUTINES        *
  514. ;*                *
  515. ;********************************
  516. ;
  517. ;********************************
  518. ;*                *    
  519. ;    Make table entry      *
  520. ;*                *
  521. ;********************************
  522. ;
  523. MAKETABLE:
  524.     INC    HL
  525.     LD    A,(HL)
  526.     CP    0E5H        ;if E5 E5 then not a file
  527.     DEC    HL
  528.     RET    Z
  529.     PUSH    BC
  530.     PUSH    DE
  531.     PUSH    HL
  532.     LD    DE,(BUFFPOS)
  533.     XOR    A
  534.     LD    (DE),A
  535.     INC    DE
  536.     LD    A,(CURTRK)
  537.     LD    (DE),A
  538.     INC    DE
  539.     LD    A,(CURTRK+1)
  540.     LD    (DE),A
  541.     INC    DE
  542.     LD    A,4        ;entries/sector
  543.     SUB    B        ;Entry number
  544.     RRCA
  545.     RRCA            ;get in top 2 bits
  546.     AND    0F8H
  547.     LD    B,A
  548.     LD    A,(CURSEC)
  549.     OR    B
  550.     LD    (DE),A        ;save sector and offset
  551.     INC    DE
  552.     LD    BC,32        ;move in entire file name
  553.     LDIR
  554.     LD    (BUFFPOS),DE
  555.     POP    HL
  556.     POP    DE
  557.     POP    BC
  558.     RET
  559. ;
  560. ;********************************
  561. ;*                *    
  562. ;*Show files with matching flag    *
  563. ;*                *
  564. ;********************************
  565. ;
  566. SHOWFILES:
  567.     LD    DE,FILEBUFF
  568.     LD    HL,(BUFFPOS)
  569.     OR    A
  570.     SBC    HL,DE
  571.     EX    DE,HL
  572.     LD    DE,NOFILES
  573.     JP    Z,EXITM
  574.     XOR    A
  575.     LD    (GOTAFILE),A
  576. SHOWMORE:
  577.     PUSH    HL
  578.     LD    A,(HL)
  579. INCAPATCH:
  580.     OR    A
  581.     JR    NZ,NOSHOW
  582.     LD    DE,5+11        ;point to extent
  583.     ADD    HL,DE
  584.     LD    A,(EXTMASK)
  585.     CP    (HL)
  586.     JR    C,NOSHOW    ;don't show a second extent        
  587.     LD    DE,-11
  588.     ADD    HL,DE        ;point to file name
  589.     LD    A,(GOTAFILE)
  590.     LD    B,A
  591.     INC    A
  592.     LD    (GOTAFILE),A
  593.     LD    A,3
  594.     AND    B
  595.     CALL    Z,CRLF
  596.     CALL    PRINTFILE
  597.     LD    C,CONOUT
  598.     LD    E,TAB
  599.     CALL    BDOS
  600. NOSHOW:
  601.     POP    HL
  602.     CALL    INCREMENT
  603.     JR    NZ,SHOWMORE
  604.     LD    DE,NOFILES
  605.     LD    A,(GOTAFILE)
  606.     OR    A
  607.     JP    Z,EXITM
  608.     RET
  609. ;
  610. ;********************************
  611. ;*                *    
  612. ;*  increment table address    *
  613. ;*                *
  614. ;********************************
  615. ;
  616. INCREMENT:
  617.     LD    DE,BUFFLEN
  618.     ADD    HL,DE
  619.     EX    DE,HL
  620.     LD    HL,(BUFFPOS)
  621.     OR    A
  622.     SBC    HL,DE
  623.     EX    DE,HL
  624.     RET
  625. ;
  626. ;********************************
  627. ;*                *
  628. ;*    CHARACTER FUNCTIONS    *    
  629. ;*                *
  630. ;********************************
  631. ;
  632. CRLF:
  633.     PUSH    BC
  634.     PUSH    DE
  635.     PUSH    HL
  636.     LD    DE,CRLFMES
  637.     LD    C,PRINTS
  638.     CALL    BDOS
  639.     POP    HL
  640.     POP    DE
  641.     POP    BC
  642.     RET
  643. ;
  644. ;Print file name in (HL)
  645. ;
  646. PRINTFILE:
  647.     LD    B,8
  648.     LD    C,CONOUT
  649.     CALL    SHOWB
  650.     PUSH    HL
  651.     PUSH    BC
  652.     LD    E,'.'
  653.     CALL    BDOS
  654.     POP    BC
  655.     POP    HL
  656.     LD    B,3
  657.     LD    C,CONOUT
  658. SHOWB:
  659.     LD    A,(HL)
  660.     AND    7FH
  661.     CP    ' '
  662.     LD    E,A
  663.     PUSH    BC
  664.     PUSH    HL
  665.     CALL    NC,BDOS
  666.     POP    HL
  667.     POP    BC
  668.     INC    HL
  669.     DJNZ    SHOWB
  670.     RET
  671. ;
  672. ;Ask for keypress to continue
  673. ;
  674. PRESSKEY:
  675.     LD    DE,PRESSM
  676.     LD    C,PRINTS
  677.     CALL    BDOS
  678. GETKEY:
  679.     LD    C,CONIN
  680.     CALL    BDOS
  681.     AND    5FH
  682.     CP    3
  683.     LD    DE,ABORT
  684.     JP    Z,EXITM
  685.     RET
  686. ;
  687. ;********************************
  688. ;*                *    
  689. ;*    BIOS VECTOR MAP        *
  690. ;*                *
  691. ;********************************
  692. ;
  693. BIOSTABLE:    
  694.     DB    0,0,0    ;WARM BOOT
  695.     DB    0,0,0    ;CONSTA
  696.     DB    0,0,0    ;CONIN
  697.     DB    0,0,0    ;CONOUT
  698.     DB    0,0,0    ;LSTOUT
  699.     DB    0,0,0    ;PUNOUT
  700.     DB    0,0,0    ;READER
  701.     DB    0,0,0    ;HOME
  702.     DB    0,0,0    ;SELECT DISK
  703. JSELTRK: DB    0,0,0    ;SELECT TRACK
  704. JSELSEC: DB    0,0,0    ;SELECT SECTOR
  705. JSETDMA: DB    0,0,0    ;SELECT DMA
  706. JREAD:    DB    0,0,0    ;READ
  707. JWRITE:    DB    0,0,0    ;WRITE
  708.     DB    0,0,0    ;LIST STATUS
  709. JSECTRAN: DB    0,0,0    ;SECTOR TRANSALTE
  710. ;
  711. ;********************************
  712. ;*                *    
  713. ;*    MESSAGES        *
  714. ;*                *
  715. ;********************************
  716. ;
  717. NOT22    DB    'Not CP/M 2.x$'
  718. BADDRV    DB    'Invalid Drive$'
  719. READERR    DB    'Drive Read Error$'
  720. WRTERR    DB    'Drive Write Error$'
  721. READM    DB    13,10,'Reading Directory$'
  722. NOFILES    DB    13,10,7,'No Recoverable Files$'
  723. DELFILES DB    TAB,'-->',TAB,'Deleted files',13,10,'$'
  724. NOALV:    DB    13,10,10,'Files without allocation overlap',13,10,'$'
  725. CHECKM:    DB    13,10,10,'Checking for Duplicates$'
  726. NODUPS:    DB    13,10,'Files that don''t exist in this user'
  727. CRLFMES    DB    13,10,'$'
  728. PRESSM    DB    13,10,10,'Press a Key to Continue$'
  729. MENU    DB    13,10,10,'Press "U" to undelete'
  730.     DB    13,10,'Any other key skips'13,10,7,'$'
  731. DOTHESE    DB    13,10,10,'These files will be UNdeleted',13,10,'$'
  732. YESNO    DB    13,10,10,'Press "U" to undelete'
  733.     DB    13,10,'OR ^C to Abort',13,10,10,' $'
  734. UNDELMSG DB    13,'RECOVERING...',13,10,10,'$'
  735. ABORT:    DB    13,10,10,7,'ABORT',13,10,'$'
  736. ;
  737. ;********************************
  738. ;*                *    
  739. ;*    DATA            *
  740. ;*                *
  741. ;********************************
  742. ;
  743. SECPERTRK DS    1
  744. SECTOGO    DS    2
  745. CURTRK    DS    2
  746. CURSEC    DS    1
  747. BIGDISK    DS    1
  748. EXTMASK    DS    1
  749. GOTAFILE DS    1        ;got a deleted file flag
  750. USER:    DS    1
  751. OLDSP    DS    30
  752. STACK:
  753. FCB2:    DS    33
  754. ALV:    DS    2048        ;copy ALV here to work on
  755. ;
  756. ;UN-ERASABLE FILE BUFFER
  757. ;FORMAT    00   01 02  03  04..19        20..35
  758. ;       FLAG TRACK  SEC NAME,EXT,ETC  ALLOCATIONS
  759. ;FLAG IS 00 FOR GOOD
  760. ;        FF FOR TAGGED
  761. ;        ?? FOR NO GOOD (FILE EXISTS OR ALV OVERLAP)
  762. ;
  763. BUFFLEN    EQU    36
  764. BUFFPOS    DS    2
  765. FILEBUFF:
  766.     END
  767.