home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / disks / tools / bfc / bfc.asm < prev    next >
Assembly Source File  |  1996-08-25  |  13KB  |  714 lines

  1. **********************************************************************
  2.     Section    BFC,Code
  3. **********************************************************************
  4.  
  5.     Include    System.gs
  6.     Include    Macros.i
  7.  
  8. **********************************************************************
  9.  
  10. ;TaskPriority    Equ    0
  11. NOWBCD
  12.     Include    Start.i
  13.  
  14. **********************************************************************
  15.  
  16.     Dc.B    '$VER: Big File Copy (BFC) V1.0 by Shamus Husheer',0
  17.     Even
  18.  
  19. RESTORE    EQU    0    ;(BFC DEV: Filename)
  20. BACKUP    EQU    1    ;(BFC Filename DEV:)
  21.  
  22. NUMCYLS    EQU    80
  23. CYLSIZE    EQU    512*11*2
  24.  
  25. **********************************************************************
  26. *
  27. * Disk Structure created with BFC: (Not a DOS readable structure)
  28. * Every cyl (11k) has the following structure:
  29. * 11260 bytes of data
  30. * 4 bytes checksum
  31. * On track0 the last 2 bytes of data (before checksum) is the disk number
  32. * On the disk 0, track 0 the last 4 bytes before disknum is filesize.
  33. * All other data is file data.
  34. * Thus each disk holds 900798 bytes of file data at most, with
  35. * disk 1 holding 900798 bytes at most.
  36. *
  37. **********************************************************************
  38.  
  39. Main:
  40.     Lea.L    VBase,A5
  41.     Clr.B    -1(A0,D0.L)
  42.     Move.L    A0,ArgsPtr-VBase(A5)
  43.  
  44.     Lea.L    MessagePort-VBase(A5),A0
  45.     Move.B    #4,LN_TYPE(A0)
  46.     Lea.L    MP_MSGLIST+LH_TAIL(A0),A1
  47.     Move.L    A1,-4(A1)
  48.     Subq.L    #4,A1
  49.     Move.L    A1,MP_MSGLIST+LH_TAILPRED(A0)
  50.  
  51.     Sub.L    A1,A1
  52.     EXEC    FindTask
  53.     Move.L    D0,MP_SIGTASK+MessagePort-VBase(A5)
  54.  
  55.     Moveq.L    #-1,D0
  56.     EXEC    AllocSignal
  57.     Move.B    D0,MP_SIGBIT+MessagePort-VBase(A5)
  58.     Bmi    .exit
  59.  
  60.     Lea.L    IORequest-VBase(A5),A1
  61.     Move.B    #5,LN_TYPE(A1)
  62.     Move.L    A0,MN_REPLYPORT(A1)
  63.     Move.W    #IOSTD_SIZE,MN_LENGTH(A1)
  64.  
  65.     Lea.L    DOSLibName(PC),A1
  66.     Moveq.L    #0,D0
  67.     EXEC    OpenLibrary
  68.     Move.L    D0,_DOSBase
  69.     Beq    .freesig
  70.  
  71.     DOS    Output
  72.     Move.L    D0,OutputHD-VBase(A5)
  73.  
  74.     Move.L    D0,D1
  75.     Lea.L    IntroStr(PC),A0
  76.     Move.L    A0,D2
  77.     Move.L    #IntroStrLen,D3
  78.     DOS    Write
  79.  
  80.     Bsr    ParseArgs
  81.     Tst.L    D0
  82.     Bne    .badargs
  83.  
  84.     Move.L    DevName-VBase(A5),A0
  85.     Bsr    GetDevName
  86.     Tst.L    D0
  87.     Beq    .nodev
  88.  
  89.     Move.L    D0,A0
  90.     Move.L    DevUnit-VBase(A5),D0
  91.     Move.L    DevFlags-VBase(A5),D1
  92.     Lea.L    IORequest-VBase(A5),A1
  93.     EXEC    OpenDevice
  94.     Tst.L    D0
  95.     Bne    .nodevopen
  96.  
  97.     Move.L    #CYLSIZE,D0
  98.     Move.L    #MEMF_CHIP|MEMF_CLEAR,D1
  99.     EXEC    AllocMem
  100.     Move.L    D0,Buffer-VBase(A5)
  101.     Beq    .nomem
  102.  
  103.     Tst.B    Operation-VBase(A5)
  104.     Beq.S    .restore01
  105.     Move.L    #MODE_OLDFILE,D2
  106.     Bra.S    .openfile
  107. .restore01
  108.     Move.L    #MODE_NEWFILE,D2
  109. .openfile
  110.     Move.L    FileName-VBase(A5),D1
  111.     DOS    Open
  112.     Move.L    D0,FileHD-VBase(A5)
  113.     Beq    .nofile
  114.  
  115.     Tst.B    Operation-VBase(A5)
  116.     Beq.S    .restore02
  117.     Bsr    DoBackup
  118.     Bra.S    .freeallocs
  119. .restore02
  120.     Bsr    DoRestore
  121. .freeallocs
  122.  
  123.     Move.L    D0,D7
  124.  
  125.     Move.L    OutputHD-VBase(A5),D1
  126.     Tst.L    D7
  127.     Beq.S    .noerrors
  128.     Lea.L    ErrorsStr(PC),A0
  129.     Move.L    A0,D2
  130.     Move.L    #ErrorsStrLen,D3
  131.     Bra.S    .dofinal
  132. .noerrors
  133.     Lea.L    NoErrorsStr(PC),A0
  134.     Move.L    A0,D2
  135.     Move.L    #NoErrorsStrLen,D3
  136. .dofinal
  137.     DOS    Write
  138.  
  139. .closefile
  140.     Move.L    FileHD-VBase(A5),D1
  141.     DOS    Close
  142. .freemem
  143.     Move.L    Buffer-VBase(A5),A1
  144.     Move.L    #CYLSIZE,D0
  145.     EXEC    FreeMem
  146. .closedev
  147.     Lea.L    IORequest-VBase(A5),A1
  148.     EXEC    CloseDevice
  149. .closedos
  150.     Move.L    _DOSBase(PC),A1
  151.     EXEC    CloseLibrary
  152. .freesig
  153.     Moveq    #0,D0
  154.     Move.B    MessagePort+MP_SIGBIT-VBase(A5),D0
  155.     EXEC    FreeSignal
  156. .exit
  157.     Moveq.L    #0,D0
  158.     Rts
  159.  
  160. .badargs
  161.     Move.L    OutputHD-VBase(A5),D1
  162.     Lea.L    ArgStr(PC),A0
  163.     Move.L    A0,D2
  164.     Move.L    #ArgStrLen,D3
  165.     DOS    Write
  166.     Bra.S    .closedos
  167.  
  168. .nodev
  169.     Move.L    OutputHD-VBase(A5),D1
  170.     Lea.L    NoDevStr(PC),A0
  171.     Move.L    A0,D2
  172.     Move.L    #NoDevStrLen,D3
  173.     DOS    Write
  174.     Bra.S    .closedos
  175.  
  176. .nodevopen
  177.     Move.L    OutputHD-VBase(A5),D1
  178.     Lea.L    NoDevOpenStr(PC),A0
  179.     Move.L    A0,D2
  180.     Move.L    #NoDevOpenStrLen,D3
  181.     DOS    Write
  182.     Bra.S    .closedos
  183.  
  184. .nomem
  185.     Move.L    OutputHD-VBase(A5),D1
  186.     Lea.L    NoMemStr(PC),A0
  187.     Move.L    A0,D2
  188.     Move.L    #NoMemStrLen,D3
  189.     DOS    Write
  190.     Bra    .closedev
  191.  
  192. .nofile
  193.     Move.L    OutputHD-VBase(A5),D1
  194.     Lea.L    NoFileStr(PC),A0
  195.     Move.L    A0,D2
  196.     Move.L    #NoFileStrLen,D3
  197.     DOS    Write
  198.     Bra    .freemem
  199.  
  200. **********************************************************************
  201.  
  202. DoBackup:
  203.     Move.B    #-1,Operation-VBase(A5)
  204.     Move.L    #WritingStr,OpType-VBase(A5)
  205.     Clr.W    DiskCounter-VBase(A5)
  206.     Bsr    GetFileSize
  207.     Move.L    D0,FileSize-VBase(A5)
  208.     Beq    .error
  209.     Bsr    DevClear
  210. .diskloop
  211.     Bsr    PromptDisk
  212.     Tst.L    D0
  213.     Beq    .error
  214.     Moveq.L    #1,D0
  215.     Bsr    Motor
  216.     Clr.W    TrackCounter-VBase(A5)
  217.     Move.L    Buffer-VBase(A5),A0
  218.     Lea.L    11258(A0),A0
  219.     Move.W    DiskCounter-VBase(A5),D0
  220.     Move.W    D0,(A0)
  221.     Tst.W    D0
  222.     Bne.S    .datadisk
  223.     Move.L    FileSize-VBase(A5),-4(A0)    ;File Size if disk0
  224.     Move.L    #CYLSIZE-10,D7
  225.     Bra.S    .read
  226. .datadisk
  227.     Move.L    #CYLSIZE-6,D7
  228.     Bra.S    .read
  229. .trackloop
  230.     Move.L    #CYLSIZE-4,D7
  231. .read
  232.     Move.L    FileSize-VBase(A5),D0
  233.     Sub.L    FileDone-VBase(A5),D0
  234.     Cmp.L    D0,D7
  235.     Blo.S    .readfile
  236.     Move.L    D0,D7
  237.     Clr.B    Operation-VBase(A5)
  238. .readfile
  239.     Move.L    D7,D0
  240.     Bsr    ReadFileToBuffer
  241.     Cmp.L    D7,D0
  242.     Bne.S    .error
  243.     Bsr    CheckSumData
  244.     Move.L    Buffer-VBase(A5),A0
  245.     Move.L    D0,11260(A0)
  246.     Bsr    PrintProgress
  247.     Move.W    #CMD_WRITE,D0
  248.     Bsr    DoTrack
  249.     Tst.L    D0
  250.     Bne.S    .diskerror
  251.     Add.L    D7,FileDone-VBase(A5)
  252.     Cmp.W    #79,TrackCounter-VBase(A5)
  253.     Bhs.S    .endtrackloop
  254.     Addq.W    #1,TrackCounter-VBase(A5)
  255.     Tst.B    Operation-VBase(A5)
  256.     Bne.S    .trackloop
  257. .endtrackloop
  258.     Bsr    DevUpdate
  259.     Moveq.L    #0,D0
  260.     Bsr    Motor
  261.     Tst.B    Operation-VBase(A5)
  262.     Beq.S    .trackloopend
  263.     Addq.W    #1,DiskCounter-VBase(A5)
  264.     Bra    .diskloop
  265. .trackloopend
  266.     Move.L    FileDone-VBase(A5),D0
  267.     Cmp.L    FileSize-VBase(A5),D0
  268.     Bne.S    .error
  269. .finished
  270.     Moveq.L    #0,D0
  271.     Rts
  272. .error
  273.     Moveq.L    #-1,D0
  274.     Rts
  275. .diskerror
  276.     Bsr    PrintDiskError    ;Remove the amount of file done so far
  277.     Bra.S    .endtrackloop
  278.  
  279.  
  280.  
  281. DoRestore:
  282.     Move.B    #-1,Operation-VBase(A5)
  283.     Move.L    #ReadingStr,OpType-VBase(A5)
  284.     Clr.W    DiskCounter-VBase(A5)
  285.     Bsr    DevClear
  286. .diskloop
  287.     Bsr    PromptDisk
  288.     Tst.L    D0
  289.     Beq    .error
  290.     Moveq.L    #1,D0
  291.     Bsr    Motor
  292.     Clr.W    TrackCounter-VBase(A5)
  293. .trackloop
  294.     Bsr    PrintProgress
  295.     Move.W    #CMD_READ,D0
  296.     Bsr    DoTrack
  297.     Tst.L    D0
  298.     Bne    .diskerror
  299.     Bsr    CheckSumData
  300.     Move.L    Buffer-VBase(A5),A0
  301.     Lea.L    11260(A0),A0
  302.     Cmp.L    (A0),D0
  303.     Bne    .diskerror
  304.     Tst.W    TrackCounter-VBase(A5)
  305.     Bne.S    .datatrack
  306.     Move.W    DiskCounter-VBase(A5),D0
  307.     Cmp.W    -2(A0),D0
  308.     Bne.S    .diskloop            ;Disks out of order
  309.     Tst.W    -2(A0)
  310.     Bne.S    .datadisk
  311.     Move.L    -6(A0),FileSize-VBase(A5)
  312.     Move.L    #CYLSIZE-10,D7
  313.     Bra.S    .write
  314. .datadisk
  315.     Move.L    #CYLSIZE-6,D7
  316.     Bra.S    .write
  317. .datatrack
  318.     Move.L    #CYLSIZE-4,D7
  319. .write
  320.     Move.L    FileSize-VBase(A5),D0
  321.     Sub.L    FileDone-VBase(A5),D0
  322.     Cmp.L    D0,D7
  323.     Blo.S    .writefile
  324.     Move.L    D0,D7
  325.     Clr.B    Operation-VBase(A5)
  326. .writefile
  327.     Move.L    D7,D0
  328.     Bsr    WriteBufferToFile
  329.     Cmp.L    D7,D0
  330.     Bne.S    .error
  331.     Add.L    D7,FileDone-VBase(A5)
  332.     Cmp.W    #79,TrackCounter-VBase(A5)
  333.     Bhs.S    .endtrackloop
  334.     Addq.W    #1,TrackCounter-VBase(A5)
  335.     Tst.B    Operation-VBase(A5)
  336.     Bne    .trackloop
  337. .endtrackloop
  338.     Moveq.L    #0,D0
  339.     Bsr    Motor
  340.     Tst.B    Operation-VBase(A5)
  341.     Beq.S    .trackloopend
  342.     Addq.W    #1,DiskCounter-VBase(A5)
  343.     Bra    .diskloop
  344. .trackloopend
  345.     Move.L    FileDone-VBase(A5),D0
  346.     Cmp.L    FileSize-VBase(A5),D0
  347.     Bne.S    .error
  348. .finished
  349.     Moveq.L    #0,D0
  350.     Rts
  351. .error
  352.     Moveq.L    #-1,D0
  353.     Rts
  354. .diskerror
  355.     Bsr    PrintDiskError    ;Remove the amount of file done so far
  356.     Bra.S    .endtrackloop
  357.  
  358. **********************************************************************
  359.  
  360. CheckSumData:
  361.     Move.L    Buffer-VBase(A5),A0
  362.     Moveq.L    #0,D0
  363.     Move.L    #2816,D1
  364. .loop
  365.     Subq.L    #1,D1
  366.     Beq.S    .fin
  367.     Add.L    (A0)+,D0
  368.     Bcc.S    .loop
  369.     Addq.L    #1,D0
  370.     Bra.S    .loop
  371. .fin
  372.     Rts
  373.  
  374. DoTrack:
  375.     Move.W    D0,IO_COMMAND+IORequest-VBase(A5)
  376.     Move.W    TrackCounter-VBase(A5),D0
  377.     Mulu    #44,D0
  378.     Lsl.L    #8,D0
  379.     Move.L    D0,IO_OFFSET+IORequest-VBase(A5)
  380.     Move.L    #CYLSIZE,IO_LENGTH+IORequest-VBase(A5)
  381.     Move.L    Buffer-VBase(A5),IO_DATA+IORequest-VBase(A5)
  382.     Lea.L    IORequest-VBase(A5),A1
  383.     EXEC    DoIO
  384.     Moveq.L    #0,D0
  385.     Move.B    IO_ERROR+IORequest-VBase(A5),D0
  386.     Rts
  387.  
  388. ReadFileToBuffer:
  389.     Move.L    FileHD-VBase(A5),D1
  390.     Move.L    Buffer-VBase(A5),D2
  391.     Move.L    D0,D3
  392.     DOS    Read
  393.     Rts
  394.  
  395. WriteBufferToFile:
  396.     Move.L    FileHD-VBase(A5),D1
  397.     Move.L    Buffer-VBase(A5),D2
  398.     Move.L    D0,D3
  399.     DOS    Write
  400.     Rts
  401.  
  402. Motor:
  403.     Move.W    #TD_MOTOR,IO_COMMAND+IORequest-VBase(A5)
  404.     Move.L    D0,IO_LENGTH+IORequest-VBase(A5)
  405.     Lea.L    IORequest-VBase(A5),A1
  406.     EXEC    DoIO
  407.     Rts
  408.  
  409. DevClear:
  410.     Move.W    #CMD_CLEAR,IO_COMMAND+IORequest-VBase(A5)
  411.     Lea.L    IORequest-VBase(A5),A1
  412.     EXEC    DoIO
  413.     Rts
  414.  
  415. DevUpdate:
  416.     Move.W    #CMD_UPDATE,IO_COMMAND+IORequest-VBase(A5)
  417.     Lea.L    IORequest-VBase(A5),A1
  418.     EXEC    DoIO
  419.     Rts
  420.  
  421. ParseArgs:
  422.     Move.L    ArgsPtr-VBase(A5),A0
  423. .find1starg
  424.     Move.B    (A0)+,D0
  425.     Tst.B    D0
  426.     Beq.S    .badargs
  427.     Cmp.B    #' ',D0
  428.     Bne.S    .find1starg
  429.     Lea.L    -2(A0),A1
  430.     Cmp.B    #':',(A1)
  431.     Bne.S    .write
  432.     Clr.W    (A1)+
  433.     Move.L    ArgsPtr-VBase(A5),DevName-VBase(A5)
  434.     Move.L    A1,FileName-VBase(A5)
  435.     Move.B    #RESTORE,Operation-VBase(A5)
  436.     Bra.S    .doneargs
  437. .write
  438.     Clr.B    1(A1)
  439.     Move.L    ArgsPtr-VBase(A5),FileName-VBase(A5)
  440.     Move.L    A0,DevName-VBase(A5)
  441.     Move.B    #BACKUP,Operation-VBase(A5)
  442. .find2ndarg
  443.     Cmp.B    #':',(A0)
  444.     Beq.S    .found
  445.     Tst.B    (A0)+
  446.     Bne.S    .find2ndarg
  447.     Bra.S    .badargs
  448. .found
  449.     Clr.W    (A0)
  450. .doneargs
  451.     Moveq.L    #0,D0
  452.     Rts
  453. .badargs
  454.     Moveq.L    #-1,D0
  455.     Rts
  456.  
  457.  
  458. GetDevName:        ;In:  A0 - Dev Name (eg FF0) Out: D0 = aptr Device
  459.     Move.L    A0,A2
  460.     Moveq.L    #-1,D1
  461. .lenloop
  462.     Cmp.B    #'a',(A0)
  463.     Blo.S    .noand
  464.     Cmp.B    #'z',(A0)
  465.     Bhi.S    .noand
  466.     And.B    #$DF,(A0)
  467. .noand
  468.     Tst.B    (A0)+
  469.     DBeq    D1,.lenloop
  470.     Neg.L    D1
  471.     Subq.L    #1,D1
  472.     Beq.S    .notfound
  473.     Move.L    _DOSBase(PC),A0
  474.     EXEC    Forbid
  475.     Move.L    34(A0),A0
  476.     Move.L    24(A0),D0
  477.     Lsl.L    #2,D0
  478.     Move.L    D0,A0
  479.     Addq.L    #4,A0
  480. .loop
  481.     Move.L    (A0),D0
  482.     Beq.S    .notfound
  483.     Lsl.L    #2,D0
  484.     Move.L    D0,A0
  485.     Tst.L    dol_Type(A0)
  486.     Bne.S    .loop
  487.     Move.L    dol_Name(A0),D0
  488.     Lsl.L    #2,D0
  489.     Move.L    D0,A1
  490.     Cmp.B    (A1)+,D1
  491.     Bne.S    .loop
  492.     Move.L    D1,D0
  493.     Subq.L    #1,D0
  494.     Move.L    A2,A3
  495. .cmploop
  496.     Cmp.B    (A1)+,(A3)+
  497.     Bne.S    .loop
  498.     DBra    D0,.cmploop
  499.     Move.L    dol_Startup(A0),D0
  500.     Beq.S    .loop
  501.     Lsl.L    #2,D0
  502.     Move.L    D0,A1
  503.     Move.L    4(A1),D0
  504.     Beq.S    .loop
  505.     Move.L    (A1),DevUnit-VBase(A5)
  506.     Move.L    12(A1),DevFlags-VBase(A5)
  507.     Lsl.L    #2,D0
  508.     Addq.L    #1,D0
  509.     Move.L    D0,DeviceName-VBase(A5)
  510.     Bra.S    .permit
  511. .notfound
  512.     Moveq.L    #0,D0
  513. .permit
  514.     EXEC    Permit
  515.     Rts
  516.  
  517. PrintDiskError:
  518.     Lea.L    DiskErrorStr(PC),A0
  519.     Lea.L    OpType-VBase(A5),A1
  520.     Bsr.S    PrintF
  521.     Move.W    DiskCounter-VBase(A5),D0
  522.     Move.W    D0,D1
  523.     Mulu    #55,D0
  524.     Lsl.L    #7,D0
  525.     Lsl.L    #7,D0                ;Number of bytes assuming full disk
  526.     Mulu    #328,D1                ;Number of non-data bytes per disk
  527.     Sub.L    D1,D0
  528.     Move.L    D0,FileDone-VBase(A5)
  529.     Move.L    FileHD-VBase(A5),D1
  530.     Moveq.L    #OFFSET_BEGINNING,D2
  531.     Move.L    D0,D3
  532.     DOS    Seek
  533.     Subq.W    #1,DiskCounter-VBase(A5)
  534.     Moveq.L    #0,D0
  535.     Bsr    Motor
  536.     Rts
  537.  
  538. PromptDisk:
  539.     Lea.L    PromptDiskStr(PC),A0
  540.     Lea.L    DiskCounter-VBase(A5),A1
  541.     Bsr.S    PrintF
  542.     Move.L    OutputHD-VBase(A5),D1
  543.     Lea.L    TextBuffer-VBase(A5),A0
  544.     Move.L    A0,D2
  545.     Moveq.L    #1,D3
  546.     DOS    Read
  547.     Cmp.B    #'!',TextBuffer-VBase(A5)
  548.     Beq.S    .ctlc
  549.     Moveq.L    #-1,D0
  550.     Rts
  551. .ctlc
  552.     Moveq.L    #0,D0
  553.     Rts
  554.  
  555. PrintProgress:
  556.     Lea.L    ProgressStr(PC),A0
  557.     Lea.L    OpType-VBase(A5),A1
  558.     Bsr.S    PrintF
  559.     Rts
  560.  
  561. PrintF:                    ;A0/A1 as rawdofmt
  562.     Lea.L    .stuffchar(PC),A2
  563.     Lea.L    TextBuffer-VBase(A5),A3
  564.     EXEC    RawDoFmt
  565.  
  566.     Move.L    OutputHD-VBase(A5),D1
  567.     Lea.L    TextBuffer-VBase(A5),A0
  568.     Move.L    A0,D2
  569.     Moveq.L    #-1,D3
  570. .lenloop
  571.     Tst.B    (A3)+
  572.     DBeq    D3,.lenloop
  573.     Not.L    D3
  574.     DOS    Write
  575.     Rts
  576.  
  577. .stuffchar
  578.     Move.B    D0,(A3)+
  579.     Rts
  580.  
  581. GetFileSize:
  582.     Move.L    FileName-VBase(A5),D1
  583.     Moveq.L    #ACCESS_READ,D2
  584.     DOS    Lock
  585.     Move.L    D0,D1
  586.     Beq.S    .error
  587.     Move.L    D0,D7
  588.     Lea.L    FileInfo-VBase(A5),A0
  589.     Move.L    A0,D2
  590.     DOS    Examine
  591.     Move.L    D7,D1
  592.     Move.L    D0,D7
  593.     DOS    UnLock
  594.     Move.L    D7,D0
  595.     Beq.S    .error
  596.     Move.L    fib_Size+FileInfo-VBase(A5),D0
  597. .error
  598.     Rts
  599.  
  600. **********************************************************************
  601.  
  602. IntroStr:
  603.     Dc.B    'Big File Copy V1.0 by Shamus Husheer',10
  604. IntroStrLen    Equ    *-IntroStr
  605.  
  606. ArgStr:
  607.     Dc.B    'Command Line Parameters INCORRECT.  Try:',10
  608.     Dc.B    'BFC <source> <dest>',10
  609.     Dc.B    'Where, for backing up, <source> is a file and <dest> is a device, eg DF0,',10
  610.     Dc.B    'or for restoring <source> is a device, and <dest> is a file.',10
  611. ArgStrLen    Equ    *-ArgStr
  612.  
  613. NoDevStr:
  614.     Dc.B    'Unable to locate the device you have requested.',10
  615. NoDevStrLen    Equ    *-NoDevStr
  616.  
  617. NoDevOpenStr:
  618.     Dc.B    'The device you have requested failed allocation.',10
  619. NoDevOpenStrLen    Equ    *-NoDevOpenStr
  620.  
  621. NoMemStr:
  622.     Dc.B    'Unable to allocate 11KB of memory for track buffer.',10
  623. NoMemStrLen    Equ    *-NoMemStr
  624.  
  625. NoFileStr:
  626.     Dc.B    'Unable to open your requested file.',10
  627. NoFileStrLen    Equ    *-NoFileStr
  628.  
  629. ErrorsStr:
  630.     Dc.B    13,'There were errors in the operation.',10
  631. ErrorsStrLen    Equ    *-ErrorsStr
  632.  
  633. NoErrorsStr:
  634.     Dc.B    13,'No errors were encountered.',10
  635. NoErrorsStrLen    Equ    *-NoErrorsStr
  636.  
  637. ProgressStr:
  638.     Dc.B    13,'%s disk %d, cyl %d',0
  639.  
  640. DiskErrorStr:
  641.     Dc.B    13,'Error %s disk %d, cyl %d',10,0
  642.  
  643. ReadingStr:
  644.     Dc.B    'Reading',0
  645. WritingStr:
  646.     Dc.B    'Writing',0
  647.  
  648. PromptDiskStr:
  649.     Dc.B    13,'Please Insert disk %d in drive and press return. ! = Abort',0
  650.  
  651. DOSLibName:
  652.     DOSNAME
  653.  
  654.     EVEN
  655.  
  656. _DOSBase
  657.     Dc.L    0        ;Frequently used, so PC relative.
  658.  
  659. *******
  660.  
  661.     Section    Variables,BSS
  662.  
  663. VBase:
  664.  
  665. ArgsPtr:
  666.     Ds.L    1
  667.  
  668. OutputHD:
  669.     Ds.L    1
  670.  
  671. DevName:
  672.     Ds.L    1
  673. DeviceName:
  674.     Ds.L    1
  675. DevUnit:
  676.     Ds.L    1
  677. DevFlags:
  678.     Ds.L    1
  679.  
  680. Buffer:
  681.     Ds.L    1
  682.  
  683. FileName:
  684.     Ds.L    1
  685. FileHD:
  686.     Ds.L    1
  687. FileSize:
  688.     Ds.L    1
  689. FileDone:
  690.     Ds.L    1
  691.  
  692. OpType:            ;Do not separate
  693.     Ds.L    1
  694. DiskCounter:        ;Do not separate
  695.     Ds.W    1
  696. TrackCounter:        ;Do not separate
  697.     Ds.W    1
  698.  
  699. TextBuffer:
  700.     Ds.B    40
  701.  
  702.     Ds.L    0    ;Long Align
  703. FileInfo:
  704.     Ds.B    fib_SIZEOF
  705.  
  706. MessagePort:
  707.     Ds.B    MP_SIZE
  708.  
  709. IORequest:
  710.     Ds.B    IOSTD_SIZE
  711.  
  712. Operation:
  713.     Ds.B    1
  714.