home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 13 / MA_Cover_13.bin / source / asm / sfs / dos.asm < prev    next >
Encoding:
Assembly Source File  |  1999-12-01  |  6.6 KB  |  355 lines

  1. *-----------------------------------------------*
  2. *    @GetSomeVolumes                *
  3. *-----------------------------------------------*
  4.  
  5. GetSomeVolumes:
  6.     lea    LaiteLista(a4),a3
  7.     move.l    dos(a4),a6
  8.     move.l    #LDF_DEVICES!LDF_READ,d1
  9.     jsr    _LVOLockDosList(a6)
  10.     move.l    d0,d7
  11.  
  12. .loop1    move.l    dos(a4),a6
  13.     move.l    d7,d1
  14.     move.l    #LDF_DEVICES!LDF_READ,d2
  15.     jsr    _LVONextDosEntry(a6)
  16.     move.l    d0,a2
  17.     move.l    d0,d7
  18.     beq.b    .valmis
  19.  
  20.     tst.l    dol_Task(a2)
  21.     beq.b    .loop1
  22.  
  23.     move.l    dol_Name(a2),d1
  24.     lsl.l    #2,d1
  25.     jsr    _LVOIsFileSystem(a6)
  26.     tst.l    d0
  27.     beq.b    .loop1
  28.  
  29.     move.l    #Laite_SIZEOF,d0
  30.     bsr    AllocVecPooled
  31.     move.l    d0,(a3)
  32.     beq.b    .loop1
  33.     move.l    d0,a3
  34.     move.l    dol_Task(a2),ll_MsgPort(a3)
  35.     move.l    dol_Name(a2),a0
  36.     lea    ll_DeviceName(a3),a1
  37.     bsr    copy_name
  38.  
  39.     move.b    #':',(a1)+
  40.     clr.b    (a1)
  41.     bra.b    .loop1
  42.  
  43. .valmis    move.l    #LDF_DEVICES!LDF_READ,d1
  44.     jsr    _LVOUnLockDosList(a6)
  45.  
  46.     move.l    task(a4),a0
  47.     move.l    pr_WindowPtr(a0),d6
  48.     move.l    #-1,pr_WindowPtr(a0)
  49.  
  50.     lea    LaiteLista(a4),a3
  51. .loop3    move.l    (a3),d0
  52.     beq.b    .jatka
  53.     move.l    d0,a3
  54.  
  55.     bsr    HaeLaiteTiedot2
  56.     tst.l    d0
  57.     beq.b    .loop3
  58.  
  59.     move.l    a3,AddSorted-t(a5)
  60.     move.l    sfs_version-t(a5),ll_Version(a3)
  61.  
  62.     bsr    ResolveVolumeData
  63.     beq.b    .loop3
  64.  
  65.     addq.l    #1,LaiteLkm(a4)
  66.     TEE_METODI    LV_LaiteLista-t(a5),AddEntrySorted
  67.     bra.b    .loop3
  68.  
  69. .jatka    move.l    task(a4),a0
  70.     move.l    d6,pr_WindowPtr(a0)
  71.     rts
  72.  
  73. copy_name:
  74.     add.l    a0,a0
  75.     moveq    #0,d0
  76.     add.l    a0,a0
  77.     move.b    (a0)+,d0
  78.     beq.b    .x
  79.     subq.l    #1,d0
  80. .loop2    move.b    (a0)+,(a1)+
  81.     dbf    d0,.loop2
  82. .x    rts
  83.  
  84. *-----------------------------------------------*
  85. *    @ResolveVolumeData            *
  86. *-----------------------------------------------*
  87.  
  88. ResolveVolumeData:
  89.     lea    ll_DeviceName(a3),a1
  90.     move.l    #ACCESS_READ,d2
  91.     move.l    a1,d1
  92.     jsr    _LVOLock(a6)
  93.     move.l    d0,d7
  94.     beq.b    .x
  95.  
  96.     lea    MyInfoData(a4),a0
  97.     move.l    d0,d1
  98.     move.l    a0,d2
  99.     jsr    _LVOInfo(a6)
  100.  
  101.     move.l    MyInfoData+id_VolumeNode(a4),a2
  102.     lea    MyDateTime(a4),a1
  103.     add.l    a2,a2
  104.     lea    ll_CreationDate(a3),a0
  105.     add.l    a2,a2
  106.     move.l    a0,dat_StrDate(a1)
  107.     lea    ll_CreationTime(a3),a0
  108.     move.l    a0,dat_StrTime(a1)
  109.  
  110.     move.l    dol_VolumeDate+ds_Days(a2),ds_Days(a1)
  111.     move.l    dol_VolumeDate+ds_Minute(a2),ds_Minute(a1)
  112.     move.l    dol_VolumeDate+ds_Tick(a2),ds_Tick(a1)
  113.     move.l    a1,d1
  114.     jsr    _LVODateToStr(a6)
  115.  
  116.     lea    ll_VolumeName(a3),a1
  117.     move.l    dol_Name(a2),a0
  118.     bsr    copy_name
  119.     clr.b    (a1)
  120.  
  121.     move.l    d7,d1
  122.     jsr    _LVOUnLock(a6)
  123.  
  124.     move.l    a3,d3
  125.     move.l    MyInfoData+id_NumBlocksUsed(a4),d0
  126.     mulu.l    #100,d0
  127.     lea    putchar(pc),a2
  128.     divu.l    MyInfoData+id_NumBlocks(a4),d0
  129.     move.l    exec(a4),a6
  130.     move.w    d0,(a4)
  131.     lea    DiskUsageFormat-t(a5),a0
  132.     move.l    a4,a1
  133.     lea    ll_DiskUsage(a3),a3
  134.     jsr    _LVORawDoFmt(a6)
  135.     move.l    d3,a3
  136.  
  137.     moveq    #-1,d0
  138. .x    rts
  139.  
  140. *-----------------------------------------------*
  141. *    @LoadConfig                *
  142. *-----------------------------------------------*
  143.  
  144. LoadConfig:
  145.     clr.b    bfConfigExists(a4)
  146.     lea    EnvConfigName-t(a5),a1
  147.     bsr    GetConfig
  148.     bne.b    .x
  149.     lea    EnvarcConfigName-t(a5),a1
  150.     bra    GetConfig
  151. .x    rts
  152.  
  153. *-----------------------------------------------*
  154. *    @GetConfig                *
  155. *-----------------------------------------------*
  156.  
  157. GetConfig:
  158.     move.l    dos(a4),a6
  159.     move.l    a1,d1
  160.     move.l    #MODE_OLDFILE,d2
  161.     jsr    _LVOOpen(a6)
  162.     move.l    d0,d7
  163.     beq.b    .x
  164.     move.l    d0,d1
  165.     lea    ConfigData(a4),a2
  166.     move.l    #3*32,d3
  167.     move.l    a2,d2
  168.     jsr    _LVORead(a6)
  169.     move.l    d7,d1
  170.     jsr    _LVOClose(a6)
  171.  
  172.     lea    PenSpec1(a4),a3
  173.     moveq    #3,d0
  174. .loop    move.l    a2,(a3)+
  175.     lea    32(a2),a2
  176.     dbf    d0,.loop
  177.     st    bfConfigExists(a4)
  178.     moveq    #-1,d0
  179. .x    rts
  180.  
  181. *-----------------------------------------------*
  182. *    @SaveConfig                *
  183. *-----------------------------------------------*
  184.  
  185. SaveConfig:
  186.     move.l    dos(a4),a6
  187.     move.l    a1,d1
  188.     move.l    #MODE_NEWFILE,d2
  189.     jsr    _LVOOpen(a6)
  190.     move.l    d0,d7
  191.     beq.b    .x
  192.     lea    ConfigData(a4),a2
  193.     move.l    d0,d1
  194.     move.l    a2,d2
  195.     move.l    #3*32,d3
  196.     jsr    _LVOWrite(a6)
  197.     move.l    d7,d1
  198.     jmp    _LVOClose(a6)
  199. .x    rts
  200.  
  201. *-----------------------------------------------*
  202. *    @TyhjennäRoskakori            *
  203. *-----------------------------------------------*
  204.  
  205. TyhjennäRoskakori:
  206.     tst.l    lfEmptyRecycled(a4)
  207.     beq.b    .x
  208.     move.l    #ACTION_SFS_LOCATE_OBJECT,d2
  209.     move.l    #RECYCLEDNODE,d3
  210.     move.l    #SHARED_LOCK,d4
  211.     moveq    #0,d5
  212.     bsr    LähetäPaketti
  213.     beq.b    .x                ; (hakemistoa ei ole)
  214.     lsr.l    #2,d0
  215.     move.l    d0,d7
  216.     bsr    TyhjennäHakemisto
  217.     move.l    d7,d1
  218.     jmp    _LVOUnLock(a6)
  219. .x    rts
  220.  
  221. *-----------------------------------------------*
  222. *    @UpdateVolumeDate            *
  223. *-----------------------------------------------*
  224.  
  225. UpdateVolumeDate:
  226.     tst.l    lfSerialize(a4)
  227.     beq.b    .x
  228.     move.l    DefragEntry(a4),a3
  229.     move.l    #ACTION_SERIALIZE_DISK,d2
  230.     bra    LähetäPaketti
  231. .x    rts
  232.  
  233. *-----------------------------------------------*
  234. *    @LähetäPaketti                *
  235. *-----------------------------------------------*
  236.  
  237. LähetäPaketti:
  238.     move.l    dos(a4),a6
  239.     move.l    ll_MsgPort(a3),d1
  240.     moveq    #0,d6
  241.     moveq    #0,d7
  242.     jsr    _LVODoPkt(a6)
  243.     tst.l    d0
  244.     rts
  245.  
  246. *-----------------------------------------------*
  247. *    @TyhjennäHakemisto            *
  248. *                        *
  249. *    D7 - tyhjennettävä hakemisto (lock)    *
  250. *-----------------------------------------------*
  251.  
  252. TyhjennäHakemisto:
  253.     move.l    d7,d1
  254.     jsr    _LVOCurrentDir(a6)
  255.     move.l    d0,d6
  256.     moveq    #0,d5
  257.     move.l    d7,d1
  258.     move.l    a4,d2
  259.     jsr    _LVOExamine(a6)
  260.     tst.l    d0
  261.     beq.b    .end
  262.     lea    fib_FileName(a4),a2
  263.  
  264. .loop1    move.l    d7,d1
  265.     jsr    _LVOExNext(a6)
  266.     tst.l    d0
  267.     beq.b    .end            ; hakemisto tyhjä
  268.     move.l    a2,d1
  269.     jsr    _LVODeleteFile(a6)
  270.     addq.l    #1,d5
  271.     bra.b    .loop1
  272.  
  273. .end    move.l    d6,d1
  274.     jmp    _LVOCurrentDir(a6)
  275.  
  276. *-----------------------------------------------*
  277. *    @AddBuffers                *
  278. *-----------------------------------------------*
  279.  
  280. AddBuffers:
  281.     lea    ll_DeviceName(a3),a0
  282.     lea    ll_VolumeName(a3),a1
  283.     move.l    a0,DeviceName(a4)
  284.     move.l    a1,VolumeName(a4)
  285.  
  286.     move.l    intui(a4),a6
  287.     move.l    STR_Prefs_AddBuffers-t(a5),a0
  288.     lea    DAddBufs(a4),a1
  289.     move.l    #MUIA_String_Integer,d0
  290.     jsr    _LVOGetAttr(a6)
  291.  
  292.     move.l    DAddBufs(a4),d2
  293.     beq.b    .x
  294.     move.l    dos(a4),a6
  295.     move.l    DeviceName(a4),d1
  296.     jsr    _LVOAddBuffers(a6)
  297.     tst.l    d0
  298.     bne.b    .x
  299.     clr.l    DAddBufs(a4)
  300. .x    rts
  301.  
  302. *-----------------------------------------------*
  303. *    @RemBuffers                *
  304. *-----------------------------------------------*
  305.  
  306. RemBuffers:
  307.     move.l    DAddBufs(a4),d2
  308.     beq.b    .x
  309.     clr.l    DAddBufs(a4)
  310.     neg.l    d2
  311.     move.l    dos(a4),a6
  312.     move.l    DeviceName(a4),d1
  313.     jmp    _LVOAddBuffers(a6)
  314. .x    rts
  315.  
  316. *-----------------------------------------------*
  317. *    @LockDevice                *
  318. *-----------------------------------------------*
  319.  
  320. LockDevice:
  321.     move.l    dos(a4),a6
  322.     move.l    #100,d1
  323.     jsr    _LVODelay(a6)
  324.     move.l    SFSport(a4),d1
  325.     move.l    #ACTION_INHIBIT,d2
  326.     move.l    #DOSTRUE,d3        ; Inhibit
  327.     jsr    _LVODoPkt(a6)
  328.     tst.l    d0
  329.     beq.b    .virhe
  330.     st    bfInhibited(a4)
  331.     rts
  332.  
  333. .virhe    lea    ll_VolumeName(a3),a2
  334.     bsr    GetErrorString
  335.     move.l    a2,(a4)
  336.     GETSTR    MSG_CANT_LOCK
  337.     move.l    d0,a2
  338.     bsr    InfoRequester
  339.     bra    EnableStartDefrag
  340.  
  341. *-----------------------------------------------*
  342. *    @UnLockDevice                *
  343. *-----------------------------------------------*
  344.  
  345. UnLockDevice:
  346.     tst.b    bfInhibited(a4)
  347.     beq.b    .x
  348.     clr.b    bfInhibited(a4)
  349.     move.l    dos(a4),a6
  350.     move.l    SFSport_Abort(a4),d1
  351.     move.l    #ACTION_INHIBIT,d2
  352.     moveq    #DOSFALSE,d3            ; UnInhibit
  353.     jmp    _LVODoPkt(a6)
  354. .x    rts
  355.