home *** CD-ROM | disk | FTP | other *** search
/ Mods Anthology 2 / Music-AmigaModsAnthology-2of4-Psychodk.mcsteam.iso / Tools / Amiga / Misc / xList_v1.06 / xList_Sources / xlist106.123.asm next >
Assembly Source File  |  1996-02-22  |  31KB  |  1,543 lines

  1. ; ezasm!
  2.  
  3. ; xList.s v1.06 (23.02.96) rev. 123
  4. ; Needs OS v37+ (or v39? not tested on v37)
  5. ; freely distributable,modifiable,trashable ==> adapt it to your needs !
  6.  
  7. ; xList has been ported to ezasm in early February. Later in the year it will
  8. ; be ported to C (jumping to v1.10, probably in July-August 96 ,release: Sept.)
  9. ; big new features will be probably added to v1.10 
  10.  
  11. ; includes
  12.         incdir    include:
  13.         include    dos/dos.i
  14.  
  15. ; EQUATES *****************************************************
  16.  
  17. numfbuff    =    16
  18. VARSIZE        =    8
  19. FILE        =    1
  20. DIR        =    0
  21. FALSE        =    0
  22. TRUE        =    1
  23. GVF_GLOBAL_ONLY    =    $100
  24.  
  25. ;    STRUCTURE XpkHeader,0
  26. xh_CLen        =    4 ;4 Crunched size
  27. xh_Type        =    8 ;8 sublibrary (NUKE,SQSH,...)
  28. xh_ULen        =    12 ;12 Uncrunched size
  29. xh_Sample    =    16;16 (1st char of 16 bytes of the uncrunched file)
  30. xheadlen    =    20; old lenght of infos to be read (now read more datas)
  31.  
  32. ;STRUCTURE StcHeader,0
  33. stc_UnpackLen    =    8
  34. stc_CrunchLen    =    12
  35. dummysize1    =    16
  36.  
  37. ;STRUCTURE CrmHeader,0
  38. crm_UnpackLen    =    6
  39. crm_CrunchLen    =    10
  40. dummysize2    =    14
  41.  
  42. ;STRUCTURE LhaHeader,0
  43. lha_clen3    =    7 ;lenghts inverted. dunno why...
  44. lha_clen2    =    8
  45. lha_clen1    =    9
  46. lha_clen0    =    10
  47. lha_ulen3    =    11
  48. lha_ulen2    =    12
  49. lha_ulen1    =    13
  50. lha_ulen0    =    14
  51. lha_chksum    =    15 ; perhaps checksum? dunno
  52. lha_chksum2    =    19 ; =$2001 if done with lha on Unix
  53. lha_namesize    =    21 ; lenght of filename - last byte useful for lha
  54. lha_char1    =    22 ; first char of filename
  55. lha_size    =    32 ; the new lenght of data - useful for XPK (modname)
  56.  
  57. ;table offsets
  58. ;STRUCTURE Variables,0
  59. args_result_oldv    =    0
  60. ;dirs = 28; DIRS/M
  61. ;sw1 IT=INTROTEXT/K
  62. ;sw2 NT=NOTOTALS/S
  63. ;sw3 TR=TESTRIPP/S
  64. ;sw4 TD=TESTDURATION/S
  65. ;sw5 ET=ENDTEXT/K
  66. ;sw6 NS=NOSORT/S
  67. ;sw7 NH=NOHEADER/S
  68. ;sw8 FO=FILESONLY/S
  69. ;sw9 FP=FULLPATH/S
  70. ;sw10 H2=HEADER2/S
  71. ;sw11 LF/N/K
  72. ;sw12 DL=DRAWLIMITS/S
  73. ;sw13 COF=COUNTONLYFILES/S
  74. ;sw14 SN=SONGNAME/S
  75. ;sw15 SU=SHOWULEN/S
  76. ;sw16 LA=LINEASPECT/K
  77. ;sw17 NC=NOCRUNCHINFOS/S
  78. ;sw18 SF=SHORTFILENAMES/S
  79. ; /S switches are activated if <> 0
  80.  
  81. vars_sizeof    =    204; total size of the array above
  82.  
  83. ;output string structures
  84. ;STRUCTURE FileDatas,0
  85. Str_File    =    0; filename (null offset)
  86. Dec_ULen    =    4; unpacked
  87. Dec_CLen    =    8; packed
  88. Str_Type    =    12; compression format
  89. Dec_Ratio    =    16; compression ratio
  90. Str_Comment    =    20; file comments
  91. strlen        =    24; max lenght for the output string above
  92.  
  93. ;STRUCTURE Totals,0
  94. Tot_numf    =    0
  95. Tot_utot2    =    4
  96. Tot_ctot2    =    8
  97. Tot_ratio    =    12
  98. Tot_strlen2    =    16
  99.  
  100. MAXCHARS    =    160
  101.  
  102. ; START *********************************************
  103.  
  104.  
  105. ; vars
  106.  
  107. ; args
  108.  
  109. ; flags
  110.  
  111. _DOSBase    equ    -4
  112. _UtilityBase    equ    -8
  113. oldlock        equ    -12
  114. ofh        equ    -16
  115. acinq        equ    -20
  116. myhandle    equ    -24
  117. varfh        equ    -28
  118. pplast        equ    -32
  119. mylock        equ    -36
  120. sp1        equ    -40
  121. fh        equ    -44
  122. itbuffer    equ    -48
  123. itsize        equ    -52
  124. itlock        equ    -56
  125. itfh        equ    -60
  126. varlock        equ    -64
  127. sumvarbuff    equ    -68
  128. myseg        equ    -72
  129. rdargs        equ    -76
  130. lhafh        equ    -80
  131. tmpfh        equ    -84
  132. hbuffer        equ    -88
  133. dirsptr        equ    -92
  134. lh_utot        equ    -96
  135. numfiles    equ    -100
  136. numdirs        equ    -104
  137. ctot        equ    -108
  138. longsum        equ    -112
  139. numf_buff    equ    -116
  140. tmp_lhsize    equ    -120
  141. sp2        equ    -124
  142. delim_strptr    equ    -128
  143. strloc2        equ    -132
  144. utot        equ    -136
  145. dummy_null_string_dont_remove    equ    -140
  146. Packlib        equ    -144
  147. filename    equ    -148
  148. fib        equ    -152
  149. output_buffer    equ    -156
  150. membase        equ    -160
  151. sf_arg        equ    -164
  152. nc_arg        equ    -168
  153. la_arg        equ    -172
  154. su_arg        equ    -176
  155. sn_arg        equ    -180
  156. cof_arg        equ    -184
  157. dl_arg        equ    -188
  158. lf_arg        equ    -192
  159. h2_arg        equ    -196
  160. fp_arg        equ    -200
  161. fo_arg        equ    -204
  162. nh_arg        equ    -208
  163. ns_arg        equ    -212
  164. et_arg        equ    -216
  165. td_arg        equ    -220
  166. tr_arg        equ    -224
  167. nt_arg        equ    -228
  168. it_arg        equ    -232
  169. mdirs        equ    -236
  170. la_flag        equ    -238
  171. tmpdeleted    equ    -240
  172. entrytype    equ    -242
  173. spcecnt        equ    -244
  174. atleastone    equ    -246
  175. sortflag    equ    -248
  176. onlydirs    equ    -250
  177. namegiv_bool    equ    -252
  178. xpked        equ    -254
  179. lhsize        equ    -264
  180. newname        equ    -424
  181. fib_buf        equ    -840
  182. header_buf    equ    -872
  183. files_data    equ    -904
  184. total_data    equ    -936
  185. numf_data    equ    -968
  186. sum_buffer    equ    -1000
  187.  
  188.  
  189.  
  190.  
  191.         SECTION    text,CODE
  192.  
  193.         link    a5,#-1000
  194.  
  195.         movea.l    a5,a1
  196.         moveq    #0,d7
  197.         move.l    #249,d1
  198. _l1        move.l    d7,-(a1)
  199.         dbf    d1,_l1
  200.  
  201.         movea.l    $4.w,a6
  202.         lea    _c0(pc),a1
  203.         moveq    #37,d0
  204.         jsr    -552(a6)
  205.         move.l    d0,_DOSBase(a5)
  206.         beq    _l0
  207.  
  208.         lea    _c1(pc),a1
  209.         moveq    #0,d0
  210.         jsr    -552(a6)
  211.         move.l    d0,_UtilityBase(a5)
  212.         beq    _l0
  213.  
  214.         lea    fib_buf(a5),a0
  215.         move.l    a0,fib(a5)
  216.         lea    header_buf(a5),a0
  217.         move.l    a0,hbuffer(a5)
  218.         lea    files_data(a5),a0
  219.         move.l    a0,output_buffer(a5)
  220.         lea    total_data(a5),a0
  221.         move.l    a0,strloc2(a5)
  222.         lea    numf_data(a5),a0
  223.         move.l    a0,numf_buff(a5)
  224.         lea    sum_buffer(a5),a0
  225.         move.l    a0,sumvarbuff(a5)
  226.         movea.l    _DOSBase(a5),a6
  227.         jsr    -60(a6)
  228.         move.l    d0,ofh(a5)
  229. readargs
  230.         lea    args_template(pc),a0
  231.         lea    mdirs(a5),a1
  232.         movea.l    _DOSBase(a5),a6
  233.         move.l    a0,d1
  234.         move.l    a1,d2
  235.         moveq    #0,d3
  236.         jsr    -798(a6)
  237.         move.l    d0,rdargs(a5)
  238.         not.l    h2_arg(a5) ; Finally H2 becomes the def output !
  239.         lea    delim(pc),a0
  240.         move.l    a0,delim_strptr(a5)
  241.         clr.b    la_flag(a5)
  242.         movea.l    la_arg(a5),a0    ; LINEASPECT/K
  243.         move.l    a0,d7
  244.         beq    _l2
  245.         move.l    la_arg(a5),delim_strptr(a5)
  246.         move.b    #1,la_flag(a5)
  247. _l2
  248. test_tr        ;    TESTRIPP
  249.         move.l    tr_arg(a5),d7
  250.         beq    _l3
  251.         lea    tr.msg(pc),a0
  252.         movea.l    _DOSBase(a5),a6
  253.         move.l    a0,d1
  254.         jsr    -948(a6)
  255. _l3
  256. test_td        ;    TESTDURATION
  257.         move.l    td_arg(a5),d7
  258.         beq    _l4
  259.         lea    td.msg(pc),a0
  260.         movea.l    _DOSBase(a5),a6
  261.         move.l    a0,d1
  262.         jsr    -948(a6)
  263. _l4
  264. test_it_arg
  265.         move.l    it_arg(a5),d1    ; INTROTEXT
  266.         beq    testsort1
  267.         bsr    type ; write your intro text
  268. testsort1    ;    NOSORT/S - if specified, jumps to giveargs
  269.         move.l    ns_arg(a5),d7
  270.         bne    _l5
  271. ;findseg ; if Sort is not yet resident
  272.         lea    segname(pc),a0
  273.         movea.l    _DOSBase(a5),a6
  274.         move.l    a0,d1
  275.         moveq    #0,d2
  276.         moveq    #0,d3
  277.         jsr    -780(a6)
  278.         tst.l    d0
  279.         bne    _l6
  280.         lea    cmdname(pc),a0
  281.         move.l    a0,d1
  282.         jsr    -150(a6)
  283.         move.l    d0,myseg(a5)
  284.         bne    _l7
  285.         moveq    #1,d7
  286.         move.l    d7,ns_arg(a5)    ; unable to load c:Sort, activating NOSORT
  287.         bra.s    giveargs
  288. _l7
  289.         lea    segname(pc),a0
  290.         movea.l    _DOSBase(a5),a6
  291.         move.l    a0,d1
  292.         move.l    myseg(a5),d2
  293.         moveq    #1,d3
  294.         jsr    -774(a6)
  295. _l6
  296. _l5
  297. giveargs
  298.         move.l    mdirs(a5),d7
  299.         bne    _l9
  300.         movea.l    _DOSBase(a5),a6
  301.         pea    newname(a5)
  302.         move.l    (sp)+,d1
  303.         move.l    #MAXCHARS,d2
  304.         jsr    -564(a6)
  305.         tst.l    d0
  306.         beq    _l10    ; success ! very likely to append
  307.         lea    newname(a5),a0
  308.         move.l    a0,sp1(a5)
  309.         bra    _l11
  310. _l10
  311.         clr.l    sp1(a5)
  312. _l11
  313.         bra    _l12
  314. _l9
  315.         move.l    mdirs(a5),dirsptr(a5)    ; save dirs array
  316.         movea.l    dirsptr(a5),a0
  317.         move.l    (a0)+,sp1(a5)    ; if a4 is null, no arg -> current dir is locked
  318.         move.l    a0,dirsptr(a5)
  319.         move.l    sp1(a5),d7
  320.         bne    _l13
  321.         movea.l    dirsptr(a5),a0
  322.         move.l    d7,-(a0)    ; if no arg was given, back to the old state
  323.         move.l    a0,dirsptr(a5)
  324.         bra    _l14
  325. _l13
  326.         move.l    sp1(a5),d1
  327. _l14
  328. _l12
  329. lockfile    ;    lock for Examine().
  330.         movea.l    _DOSBase(a5),a6
  331.         move.l    sp1(a5),d1
  332.         move.l    #ACCESS_READ,d2
  333.         jsr    -84(a6)
  334.         move.l    d0,mylock(a5)
  335.         beq    _l15    ; branch to scan the dir, else...
  336.         move.l    nh_arg(a5),d7
  337.         beq    examine    ; NOHEADER
  338.         bra    testsort
  339. _l15
  340.         movea.l    _DOSBase(a5),a6
  341.         move.l    sp1(a5),d1
  342.         jsr    -948(a6)
  343.         lea    inter2(pc),a0
  344.         move.l    a0,d1
  345.         jsr    -948(a6)
  346.         jsr    -132(a6)
  347.         move.l    d0,d1
  348.         moveq    #0,d2
  349.         jsr    -474(a6)
  350. free_args
  351.         tst.b    tmpdeleted(a5)
  352.         beq    _l16    ; close+del tmpfile if break
  353.         move.l    tmpfh(a5),d7
  354.         beq    _l17
  355.         movea.l    _DOSBase(a5),a6
  356.         move.l    d7,d1
  357.         jsr    -36(a6)
  358. _l17
  359.         lea    tmpname(pc),a0
  360.         movea.l    _DOSBase(a5),a6
  361.         move.l    a0,d1
  362.         jsr    -72(a6)
  363. _l16
  364. free_args2
  365.         bsr    multi_lf
  366.         movea.l    _DOSBase(a5),a6
  367.         move.l    rdargs(a5),d1
  368.         jsr    -858(a6)
  369.         bra    closeall
  370.  
  371. ;--------------------------------------------
  372. examine        ;    to get the comments and the crunched size
  373.         move.l    delim_strptr(a5),d1
  374.         bsr    wdelim
  375.         clr.b    namegiv_bool(a5)
  376.         movea.l    sp1(a5),a0
  377.         move.l    a0,d7
  378.         bne    _l18    ; remove hit
  379.         move.b    #1,namegiv_bool(a5)
  380. _l18
  381.         movea.l    _DOSBase(a5),a6
  382.         move.l    mylock(a5),d1
  383.         move.l    fib(a5),d2
  384.         jsr    -102(a6)
  385.         tst.l    d0
  386.         beq    exnext
  387.         tst.b    namegiv_bool(a5)
  388.         bne    _l19
  389.         movea.l    sp1(a5),a0
  390. findend
  391.         tst.b    (a0)+
  392.         bne    findend    ; ENFORCER HIT ! offset $1A2
  393.         lea    -2(a0),a0
  394.         cmpi.b    #'/',(a0)
  395.         bne    _l20    ; ENFORCER HIT ! offset $1AA
  396.         clr.b    (a0)    ; erase last '/' for good filepart (only dirname)
  397. _l20
  398.         cmpi.b    #':',(a0)
  399.         bne    _l21    ; ENFORCER HIT ! offset $1B2
  400.         clr.b    (a0)
  401. _l21
  402.         move.l    fp_arg(a5),d7
  403.         bne    _l22
  404.         movea.l    _DOSBase(a5),a6
  405.         move.l    sp1(a5),d1
  406.         jsr    -870(a6)
  407.         move.l    d0,sp1(a5)
  408. _l22
  409.         move.l    h2_arg(a5),d7
  410.         bne    _l23
  411.         lea    stars(pc),a0
  412.         movea.l    _DOSBase(a5),a6
  413.         move.l    a0,d1
  414.         jsr    -948(a6)
  415. _l23
  416.         move.l    sp1(a5),d1
  417.         bra    _l24
  418. _l19
  419.         movea.l    fib(a5),a0
  420.         lea    fib_FileName(a0),a1
  421.         move.l    a1,d1
  422. _l24
  423.         move.l    h2_arg(a5),d7
  424.         beq    _l25    ; H2=HEADER2/S
  425.         bsr    centersub
  426. _l25
  427.         movea.l    _DOSBase(a5),a6
  428.         jsr    -948(a6)
  429.         movea.l    fib(a5),a0
  430.         lea    fib_Comment(a0),a0
  431.         move.l    a0,d7
  432.         beq    nodircomms
  433. sel_headerfmt
  434.         move.l    a0,sp1(a5)    ; save comments
  435.         move.l    h2_arg(a5),d7
  436.         beq    _l26    ; H2=HEADER2/S
  437.         bsr    linefeed
  438.         bra    _l27
  439. _l26
  440.         lea    inter(pc),a1
  441.         movea.l    _DOSBase(a5),a6
  442.         move.l    a1,d1
  443.         jsr    -948(a6)
  444. _l27
  445.         move.l    sp1(a5),d1
  446.         move.l    h2_arg(a5),d7
  447.         beq    _l28    ; H2=HEADER2/S
  448.         bsr    centersub
  449. _l28
  450. nocentercomms
  451.         movea.l    _DOSBase(a5),a6
  452.         jsr    -948(a6)
  453. nodircomms
  454.         move.l    ns_arg(a5),d7
  455.         beq    _l29    ; NOSORT/S
  456.         bsr    linefeed
  457.         bra    _l30
  458. _l29
  459.         move.l    h2_arg(a5),d7
  460.         bne    _l31    ; H2=HEADER2/S
  461.         bsr    linefeed
  462. _l31
  463. _l30
  464.         move.l    h2_arg(a5),d7
  465.         bne    _l32    ; H2=HEADER2/S
  466.         move.l    delim_strptr(a5),d1
  467.         bsr    wdelim
  468. _l32
  469.         bsr    linefeed
  470.         movea.l    _DOSBase(a5),a6
  471.         move.l    ofh(a5),d1
  472.         jsr    -360(a6)
  473.  
  474. ;------------------------------- NH
  475. testsort
  476.         move.l    ns_arg(a5),d7
  477.         bne    _l33    ; NOSORT/S
  478.         lea    tmpname(pc),a0
  479.         movea.l    _DOSBase(a5),a6
  480.         move.l    a0,d1
  481.         move.l    #MODE_NEWFILE,d2
  482.         jsr    -30(a6)
  483.         move.l    d0,tmpfh(a5)
  484.         beq    _l34
  485.         move.b    #1,tmpdeleted(a5)
  486.         bra.s    currentdir
  487. _l34
  488.         moveq    #1,d7
  489.         move.l    d7,ns_arg(a5)    ; NOSORT/S
  490. _l33
  491. currentdir
  492.         movea.l    sp1(a5),a0
  493.         movea.l    _DOSBase(a5),a6
  494.         move.l    mylock(a5),d1
  495.         jsr    -126(a6)
  496.         move.l    d0,oldlock(a5)
  497.         move.l    mylock(a5),d1
  498.         move.l    fib(a5),d2
  499.         jsr    -102(a6)
  500.         tst.l    d0
  501.         beq    _l35    ; if error, unlock and try next arg
  502.         movea.l    fib(a5),a0
  503.         move.l    fib_DirEntryType(a0),d0
  504.         bhi    exnext    ; scan only if d0 > 0 (entry is a dir)
  505. _l35
  506. loop
  507.         bsr.s    unlockdir
  508. loop2
  509.         move.l    mdirs(a5),d7
  510.         beq    _l36
  511.         movea.l    dirsptr(a5),a0
  512.         move.l    (a0)+,d1    ; get the next arg
  513.         move.l    a0,dirsptr(a5)
  514.         tst.l    d1
  515.         bne    gotonext    ; continue if arg found
  516. _l36
  517. nomore
  518.         move.l    et_arg(a5),d1    ; ET=ENDTEXT/K
  519.         beq    free_args
  520.         bsr    type
  521.         bra    free_args ; no more args, exit
  522.  
  523.  
  524. gotonext
  525.         move.l    d1,sp1(a5)
  526. lf_mdirs_gry    ;    added on 20.10.95 on request of gryzor
  527.         bsr    multi_lf
  528.         move.l    sp1(a5),d1
  529.         bra    lockfile
  530. unlockdir
  531.         movea.l    _DOSBase(a5),a6
  532.         move.l    oldlock(a5),d1
  533.         jsr    -126(a6)
  534.         move.l    d0,d1
  535.         jsr    -90(a6)
  536.         rts
  537.  
  538.  
  539. dirempty
  540.         move.l    delim_strptr(a5),d1
  541.         bsr    wdelim
  542.         lea    empty.msg(pc),a0
  543.         movea.l    _DOSBase(a5),a6
  544.         move.l    a0,d1
  545.         jsr    -948(a6)
  546.         move.l    tmpfh(a5),d7
  547.         beq    _l37
  548.         move.l    d7,d1
  549.         jsr    -36(a6)
  550.         clr.l    d7
  551. _l37
  552.  
  553. deltmp2
  554.         lea    tmpname(pc),a0
  555.         movea.l    _DOSBase(a5),a6
  556.         move.l    a0,d1
  557.         jsr    -72(a6)
  558.         bra    free_args2
  559.  
  560. noexnext
  561.         bsr.s    unlockdir
  562.         tst.b    atleastone(a5)
  563.         beq    dirempty
  564.  
  565. ins_totfiles
  566.         move.l    ns_arg(a5),d7
  567.         bne    notmpclose    ; NOSORT/S
  568.         move.l    h2_arg(a5),d7
  569.         beq    noftot    ; H2=HEADER2/S
  570.         move.l    nh_arg(a5),d7
  571.         bne    noftot    ; NH=NOHEADER/S
  572.         movea.l    strloc2(a5),a1
  573.         move.l    cof_arg(a5),d7
  574.         bne    _l38    ; COF=COUNTONLYFILES/S (not Jean-Pierre, you fool ! :)
  575.         move.l    numdirs(a5),d0
  576.         add.l    d0,numfiles(a5)
  577. _l38
  578.         tst.b    onlydirs(a5)
  579.         bne    _l39
  580.         lea    fmtdnum(pc),a0
  581.         bra    _l40
  582. _l39
  583.         lea    fmtnum(pc),a0
  584. _l40
  585. keepfmt
  586.         move.l    numfiles(a5),(a1)
  587.         move.l    cof_arg(a5),d7
  588.         beq    _l41
  589.         tst.b    onlydirs(a5)
  590.         bne    _l42
  591.         move.l    numdirs(a5),(a1)
  592. _l42
  593. _l41
  594.         movea.l    numf_buff(a5),a3
  595.         bsr    sprintf
  596.         move.l    numf_buff(a5),d1
  597.         bsr    centersub
  598.         movea.l    _DOSBase(a5),a6
  599.         jsr    -948(a6)
  600.         bsr    linefeed
  601. limafthead
  602.         move.l    delim_strptr(a5),d1
  603.         bsr    wdelim
  604. nolim1
  605.         bsr    linefeed
  606.         movea.l    _DOSBase(a5),a6
  607.         move.l    ofh(a5),d1
  608.         jsr    -360(a6)
  609. noftot
  610.         move.l    h2_arg(a5),d7
  611.         bne    _l43
  612.         movea.l    strloc2(a5),a1
  613.         move.l    cof_arg(a5),d7
  614.         bne    _l44
  615.         move.l    numdirs(a5),d0
  616.         add.l    d0,numfiles(a5)
  617. _l44
  618. _l43
  619.         move.l    tmpfh(a5),d7
  620.         beq    _l45
  621.         movea.l    _DOSBase(a5),a6
  622.         move.l    d7,d1
  623.         jsr    -36(a6)
  624.         clr.l    d7
  625.         tst.b    sortflag(a5)
  626.         beq    _l46
  627.         lea    comline(pc),a0
  628.         move.l    a0,d1
  629.         moveq    #0,d2
  630.         moveq    #0,d3
  631.         jsr    -222(a6)
  632.         lea    sortedname(pc),a0
  633.         move.l    a0,d1
  634.         bsr    type
  635.         tst.l    d0
  636.         bne    _l47
  637.         lea    sortedname(pc),a0
  638.         move.l    a0,d1
  639.         jsr    -72(a6)
  640.         lea    tmpname(pc),a0
  641.         move.l    a0,d1
  642.         jsr    -72(a6)
  643.         clr.b    tmpdeleted(a5)
  644. _l47
  645. _l46
  646. _l45
  647. notmpclose
  648.         move.l    nt_arg(a5),d7
  649.         bne    loop2
  650.         movea.l    strloc2(a5),a1
  651.         tst.b    onlydirs(a5)
  652.         bne    _l48
  653.         move.l    numdirs(a5),(a1)
  654.         lea    totdirfmt(pc),a0    ; the format
  655.         bra    _l49
  656. _l48
  657.         move.l    numfiles(a5),(a1)
  658.         move.l    utot(a5),Tot_utot2(a1)
  659.         move.l    ctot(a5),Tot_ctot2(a1)
  660.         move.l    utot(a5),d7
  661.         bne    _l50
  662.         moveq    #0,d2
  663.         bra    _l51
  664. _l50
  665.         move.l    utot(a5),d3
  666.         move.l    ctot(a5),d0
  667.         bsr    calc_ratio ; in: d3=utot,d0=ctot / out: d2=ratio
  668. _l51
  669.         move.l    d2,Tot_ratio(a1)    ; ratio=100-100*CLen/ULen
  670.         lea    totfmt(pc),a0    ; the format
  671.         move.l    su_arg(a5),d7
  672.         bne    _l52    ; SU=SHOWULEN/S
  673.         move.l    nc_arg(a5),d7
  674.         beq    _l53    ; NC=NOCRUNCHINFOS/S
  675.         lea    nctot(pc),a0
  676.         bra    _l54
  677. _l53
  678.         move.l    sf_arg(a5),d7
  679.         beq    _l55    ; SF=SHORTFILENAMES/S
  680.         lea    shorttot(pc),a0
  681.         bra    _l56
  682. _l55
  683.         move.l    Tot_ctot2(a1),(Tot_ctot2-4)(a1)    ; shift up struct (gry fmt)
  684.         move.l    Tot_ratio(a1),(Tot_ratio-4)(a1)
  685.         lea    grytot(pc),a0
  686. _l56
  687. _l54
  688. _l52
  689. _l49
  690.         movea.l    _DOSBase(a5),a6
  691.         move.l    a0,d1
  692.         move.l    a1,d2
  693.         jsr    -954(a6)
  694.         move.l    ofh(a5),d1
  695.         jsr    -360(a6)
  696. wxltot
  697.         lea    totvarname(pc),a1
  698.         movea.l    _DOSBase(a5),a6
  699.         move.l    a1,d1
  700.         move.l    #MODE_NEWFILE,d2
  701.         jsr    -30(a6)
  702.         move.l    d0,varfh(a5)
  703.         tst.b    onlydirs(a5)
  704.         bne    _l57
  705.         move.l    cof_arg(a5),d7
  706.         beq    _l58
  707.         movea.l    strloc2(a5),a0
  708.         clr.l    (a0)
  709. _l58
  710. _l57
  711.         lea    fmtvar(pc),a1
  712.         movea.l    _DOSBase(a5),a6
  713.         move.l    varfh(a5),d1
  714.         move.l    a1,d2
  715.         move.l    strloc2(a5),d3
  716.         jsr    -348(a6)
  717.         move.l    varfh(a5),d1
  718.         jsr    -36(a6)
  719.         bsr    dosumvar
  720.  
  721. clrintvars
  722.         moveq    #0,d0
  723.         clr.l    utot(a5)
  724.         clr.l    ctot(a5)
  725.         clr.l    numfiles(a5)
  726.         clr.l    numdirs(a5)
  727.         bra    loop2
  728.  
  729.  
  730. isdir        ;    called when filename was a dir
  731.         movea.l    fib(a5),a0
  732.         move.l    fib_DirEntryType(a0),d0
  733.         ble.s    exnext
  734.         move.l    fo_arg(a5),d7
  735.         bne    _l59    ; FO=FILESONLY/S (not Marc Blondel, you fool ! :)
  736.         move.b    #DIR,entrytype(a5)
  737.         lea    fib_FileName(a0),a1
  738.         movea.l    output_buffer(a5),a2
  739.         move.l    a1,(a2)
  740.         move.l    #'Dir ',Packlib(a5)
  741.         lea    Packlib(a5),a1
  742.         move.l    a1,Str_Type(a2)
  743.         clr.l    Dec_Ratio(a2)
  744.         addq.l    #1,numdirs(a5)
  745.         bra    testsort2
  746. _l59
  747.  
  748. ;************  mainloop
  749.  
  750. exnext
  751.         movea.l    _DOSBase(a5),a6
  752.         move.l    #SIGBREAKF_CTRL_C,d1
  753.         jsr    -792(a6)
  754.         tst.l    d0
  755.         beq    _l60
  756.         bsr    unlockdir
  757.         bra    free_args
  758. _l60
  759.         movea.l    _DOSBase(a5),a6
  760.         move.l    mylock(a5),d1
  761.         move.l    fib(a5),d2
  762.         jsr    -108(a6)
  763.         tst.l    d0
  764.         beq    noexnext    ; break if error (like no more entries)
  765.         movea.l    fib(a5),a0
  766.         lea    fib_FileName(a0),a1
  767.         move.l    a1,filename(a5)
  768.         movea.l    output_buffer(a5),a2
  769.         move.l    fib_Size(a0),Dec_CLen(a2)
  770.         move.l    fib_Size(a0),Dec_ULen(a2)    ; ulen=clen for normal files
  771.         lea    fib_Comment(a0),a1
  772.  
  773.         move.l    tr_arg(a5),d7
  774.         beq    _l61
  775.         tst.b    (a1)
  776.         beq    exnext
  777.         moveq    #25,d0
  778. rip
  779.         cmpi.l    #'Ripp',(a1,d0)
  780.         beq    _l62
  781.         dbra    d0,rip
  782.         bra    exnext
  783. _l62
  784. _l61
  785.  
  786.         move.l    td_arg(a5),d7
  787.         beq    _l63
  788.         tst.b    (a1)
  789.         beq    test_xfh
  790.         moveq    #3,d0
  791. dur
  792.         cmpi.b    #'[',(a1,d0)
  793.         beq    exnext
  794.         dbra    d0,dur
  795. _l63
  796.  
  797. test_xfh
  798.         cmpi.w    #'XF',(a1)
  799.         bne    _l64    ; detects XFH comments (by xScan). 'Erase' them.
  800.         clr.l    (a1)
  801. _l64
  802.  
  803. ; lets read the first 16 bytes
  804.         movea.l    output_buffer(a5),a2
  805.         move.l    a1,Str_Comment(a2)
  806.         movea.l    _DOSBase(a5),a6
  807.         move.l    filename(a5),d1
  808.         move.l    #MODE_OLDFILE,d2
  809.         jsr    -30(a6)
  810.         move.l    d0,myhandle(a5)
  811.         beq    isdir ; if error (dir) examine next entry
  812.         move.b    #FILE,entrytype(a5)
  813.         move.b    #1,onlydirs(a5)
  814.         movea.l    hbuffer(a5),a1    ; clear the readbuffer because old infos are...
  815.         clr.l    (a1)    ; ...still here. (Ex. if <.file> detected just before)
  816.         move.l    myhandle(a5),d1
  817.         move.l    hbuffer(a5),d2
  818.         move.l    #lha_size,d3
  819.         jsr    -42(a6)
  820.         move.l    myhandle(a5),d1
  821.         jsr    -36(a6)
  822.  
  823. testxpk__
  824.         movea.l    hbuffer(a5),a1    ;         a1=readbuffer
  825.         move.l    (a1),d1 ; =xh_Reco(a1)        d1=first 4 bytes of the file
  826.         cmpi.l    #'XPKF',d1
  827.         bne    testpp20
  828. hereisxpk__
  829.         move.l    sn_arg(a5),d7
  830.         beq    _l65
  831.         movea.l    output_buffer(a5),a2
  832.         lea    xh_Sample(a1),a0
  833.         move.l    a0,Str_File(a2)
  834.         moveq    #$1f,d0
  835.         moveq    #4,d1
  836. .loop
  837.         cmp.b    (a0,d1),d0
  838.         bge    nosong
  839.         dbra    d1,.loop
  840.         move.l    #$80,d0
  841.         moveq    #15,d1
  842. .loop2
  843.         cmp.b    (a0,d1),d0
  844.         bge    nosong
  845.         dbra    d1,.loop2
  846.         move.b    #1,xpked(a5)
  847. _l65
  848. nosong
  849.         move.l    xh_CLen(a1),d0
  850.         addq.l    #8,d0
  851.         movea.l    output_buffer(a5),a2
  852.         cmp.l    Dec_CLen(a2),d0
  853.         bne    _l66
  854.         move.l    xh_ULen(a1),Dec_ULen(a2) ; Unpacked lenght
  855.         move.l    xh_Type(a1),Packlib(a5)    ; Packing method
  856.         bra    print ; output to stdio
  857. _l66
  858.         move.l    #'!XPK',Packlib(a5)
  859.         bra    print
  860.  
  861. testpp20
  862.         move.l    d1,Packlib(a5)    ; Packlib=PP20,Crm2 or S404
  863.         cmpi.l    #'PP20',d1
  864.         bne    testcrm2
  865. hereispp20__    ;    reopen file for decrunched size
  866.         movea.l    _DOSBase(a5),a6
  867.         move.l    filename(a5),d1
  868.         move.l    #MODE_OLDFILE,d2
  869.         jsr    -30(a6)
  870.         move.l    d0,myhandle(a5)
  871.         beq    exnext
  872.         move.l    myhandle(a5),d1
  873.         moveq    #-4,d2
  874.         move.l    #OFFSET_END,d3
  875.         jsr    -66(a6)
  876.         lea    pplast(a5),a0
  877.         move.l    myhandle(a5),d1
  878.         move.l    a0,d2
  879.         moveq    #4,d3
  880.         jsr    -42(a6)
  881.         move.l    myhandle(a5),d1
  882.         jsr    -36(a6)
  883.         move.l    pplast(a5),d0    ; XXXXXXxx
  884.         lsr.l    #8,d0    ; calculating the PP-Decrunch-Info
  885.         movea.l    output_buffer(a5),a2
  886.         move.l    d0,Dec_ULen(a2)    ; 00XXXXXX
  887.         cmp.l    Dec_CLen(a2),d0 
  888.         blt    nopp
  889.         move.l    Dec_CLen(a2),d1
  890.         move.l    d1,d2
  891.         add.l    d1,d1    ; C*2
  892.         add.l    d1,d1    ; C*4
  893.         add.l    d1,d2    ; C*5
  894.         add.l    d2,d2    ; C*10
  895.         cmp.l    d2,d0
  896.         blt    print
  897. nopp
  898.         move.l    Dec_CLen(a2),Dec_ULen(a2)
  899.         move.l    #'!PP2',Packlib(a5)
  900.         bra    print
  901.  
  902. testcrm2
  903.         cmpi.l    #'Crm2',d1
  904.         beq    hereiscrm
  905.         cmpi.l    #'CrM2',d1
  906.         beq    hereiscrm
  907.         cmpi.l    #'CrM!',d1
  908.         beq    hereiscrm
  909.         cmpi.l    #'Crm!',d1
  910.         bne    teststc
  911.  
  912. hereiscrm
  913.         movea.l    output_buffer(a5),a2
  914.         move.l    crm_CrunchLen(a1),d0
  915.         add.l    #14,d0
  916.         cmp.l    Dec_CLen(a2),d0
  917.         bne.s    nocrm
  918.         move.l    crm_UnpackLen(a1),Dec_ULen(a2)
  919.         bra    print
  920. nocrm
  921.         move.l    #'!Crm',Packlib(a5)
  922.         bra    print
  923.  
  924. teststc
  925.         cmpi.l    #'S403',d1
  926.         beq    hereisstc
  927.         cmpi.l    #'S404',d1
  928.         bne    testlha
  929. hereisstc
  930.         movea.l    output_buffer(a5),a2
  931.         move.l    stc_CrunchLen(a1),d0
  932.         add.l    #20,d0
  933.         cmp.l    Dec_CLen(a2),d0
  934.         bne.s    nostc
  935.         move.l    stc_UnpackLen(a1),Dec_ULen(a2)
  936.         bra    print
  937. nostc
  938.         move.l    #'!S40',Packlib(a5)
  939.         bra    print
  940.  
  941. testlha
  942.         movea.l    hbuffer(a5),a1
  943.         move.w    3(a1),d1
  944.         cmpi.w    #'lh',d1
  945.         bne    nopacker
  946.         move.b    2(a1),d1
  947.         cmpi.b    #'-',d1
  948.         bne    nopacker
  949. hereislh5
  950.         bsr    getlhanfo
  951.         bra    print
  952.  
  953. nopacker
  954.         move.l    #'    ',Packlib(a5)
  955. print        ;    put the infos in the right places
  956.         movea.l    _DOSBase(a5),a6
  957.         move.l    filename(a5),d1
  958.         jsr    -870(a6)
  959.         move.l    sn_arg(a5),d7
  960.         beq    _l67    ; SN=SONGNAME/S
  961.         tst.b    xpked(a5)
  962.         bne    _l68
  963.         movea.l    output_buffer(a5),a2
  964.         move.l    d0,Str_File(a2)
  965. _l68
  966.         bra    _l69
  967. _l67
  968.         movea.l    output_buffer(a5),a2
  969.         move.l    d0,Str_File(a2)
  970. _l69
  971.  
  972. printbis
  973.         movea.l    d0,a1
  974.         cmpi.b    #'.',(a1)
  975.         beq    exnext    ; strip out the ".*" files (.EPDir)
  976.         addq.l    #1,numfiles(a5)
  977.         lea    Packlib(a5),a1
  978.         movea.l    output_buffer(a5),a2
  979.         move.l    a1,Str_Type(a2)
  980.         move.l    Dec_CLen(a2),d0
  981.         move.l    Dec_ULen(a2),d3
  982.         add.l    d0,ctot(a5)
  983.         add.l    d3,utot(a5)
  984.         bsr    calc_ratio
  985.         move.l    d2,Dec_Ratio(a2) ; ratio=100-100*CLen/ULen
  986.         move.l    nc_arg(a5),d7
  987.         bne    _l70
  988.         move.l    sf_arg(a5),d7
  989.         bne    _l71
  990.         move.l    su_arg(a5),d7
  991.         bne    _l72
  992. ;------- for Gry fmt -------------------
  993.         move.l    Dec_CLen(a2),(Dec_CLen-4)(a2)
  994.         move.l    Str_Type(a2),(Str_Type-4)(a2)
  995.         move.l    Dec_Ratio(a2),(Dec_Ratio-4)(a2)
  996.         move.l    Str_Comment(a2),(Str_Comment-4)(a2)
  997. _l72
  998.         bra    _l73
  999. _l71
  1000.         move.l    Str_Comment(a2),(Str_Comment-12)(a2)
  1001. _l73
  1002.         bra    _l74
  1003. _l70
  1004. ;------------- for nc fmt --------------------
  1005.         move.l    Str_Comment(a2),(Str_Comment-12)(a2)
  1006. _l74
  1007. testsort2
  1008.         move.l    ns_arg(a5),d7
  1009.         beq    _l75
  1010.         move.l    ofh(a5),fh(a5)
  1011.         bra    _l76
  1012. _l75
  1013.         move.l    tmpfh(a5),fh(a5)
  1014.         beq    _l77
  1015.         move.b    #1,sortflag(a5)
  1016.         bra    _l78
  1017. _l77
  1018.         move.l    ofh(a5),fh(a5)
  1019. _l78
  1020. _l76
  1021. vfprint
  1022.         movea.l    output_buffer(a5),a2
  1023.         cmpi.b    #1,entrytype(a5)
  1024.         bne    _l79
  1025. ;--------------- adjust file fmts ------------------
  1026.         lea    gryfmt(pc),a0
  1027.         move.l    su_arg(a5),d7
  1028.         beq    _l80    ; SU=SHOWULEN/S
  1029.         lea    cformat(pc),a0
  1030.         bra    _l81
  1031. _l80
  1032.         move.l    nc_arg(a5),d7
  1033.         beq    _l82    ; NC=NOCRUNCHINFOS/S
  1034.         lea    ncfmt(pc),a0
  1035.         bra    _l83
  1036. _l82
  1037.         move.l    sf_arg(a5),d7
  1038.         beq    _l84    ; SF=SHORTFILENAMES/S
  1039.         lea    shortfmt(pc),a0
  1040. _l84
  1041. _l83
  1042. _l81
  1043.         bra    _l85
  1044. _l79
  1045.         lea    dirfmt(pc),a0
  1046.         move.l    su_arg(a5),d7
  1047.         bne    _l86    ; SU=SHOWULEN/S
  1048.         move.l    nc_arg(a5),d7
  1049.         beq    _l87    ; NC=NOCRUNCHINFOS/S
  1050.         move.l    Str_Comment(a2),(Str_Comment-16)(a2)
  1051.         lea    ncdirfmt(pc),a0
  1052.         bra    _l88
  1053. _l87
  1054.         move.l    sf_arg(a5),d7
  1055.         beq    _l89    ; SF=SHORTFILENAMES/S
  1056.         move.l    Str_Comment(a2),(Str_Comment-16)(a2)
  1057.         lea    shortdirfmt(pc),a0
  1058.         bra    _l90
  1059. _l89
  1060. ;---------- gry dir fmt --------------------
  1061.         move.l    Dec_CLen(a2),(Dec_CLen-4)(a2)
  1062.         move.l    Str_Type(a2),(Str_Type-4)(a2)
  1063.         move.l    Dec_Ratio(a2),(Dec_Ratio-4)(a2)
  1064.         move.l    Str_Comment(a2),(Str_Comment-4)(a2)
  1065.         lea    grydirfmt(pc),a0
  1066. ;------------------------------------------
  1067. _l90
  1068. _l88
  1069. _l86
  1070. _l85
  1071.  
  1072. begin_print
  1073.         movea.l    _DOSBase(a5),a6
  1074.         move.l    fh(a5),d1
  1075.         move.l    a0,d2
  1076.         move.l    a2,d3
  1077.         jsr    -354(a6)
  1078.         move.l    fh(a5),d1
  1079.         jsr    -360(a6)
  1080.  
  1081.         movea.l    fib(a5),a0
  1082.         lea    fib_Comment(a0),a1
  1083.         moveq    #18,d0
  1084.  
  1085. clrcomm
  1086.         clr.l    (a1)+
  1087.         dbra    d0,clrcomm
  1088.         move.b    #1,atleastone(a5)
  1089.         clr.b    xpked(a5)
  1090.         bra    exnext ; next entry please
  1091.  
  1092. ;#########********** SUBROUTINES *************#############
  1093.  
  1094.  
  1095. calc_ratio    ;    in: d0=ctot,d3=utot / out: d2=ratio
  1096.         tst.l    d3
  1097.         beq    _l91
  1098.         tst.l    d0
  1099.         beq    _l92    ; test if clen = ulen ( => ratio = 0% )
  1100.         moveq    #100,d1
  1101.         move.l    d0,d5
  1102.         move.l    d3,d0
  1103.         cmpi.l    #1000000,d3
  1104.         bcs    _l93    ; change method at 1 Mb
  1105. ; 2nd method, for 1 Mb => 2 Gb (uncrunched) sizes
  1106. ; if d3 is big enough for the "bigsizes" ratio
  1107.         movea.l    _UtilityBase(a5),a6
  1108.         jsr    -156(a6)
  1109.         move.l    d0,d1
  1110.         move.l    d5,d0
  1111. div
  1112.         movea.l    _UtilityBase(a5),a6
  1113.         jsr    -156(a6)
  1114.         moveq    #100,d2
  1115.         sub.l    d0,d2 ; 100 - quotient = ratio
  1116.         rts
  1117. _l93
  1118.         move.l    d5,d0    ; classic method, for 0 => 21 Mo sizes
  1119.         movea.l    _UtilityBase(a5),a6
  1120.         jsr    -144(a6)
  1121.         move.l    d3,d1
  1122.         bra.s    div ; (clen * 100) / ulen
  1123. _l92
  1124. _l91
  1125.         moveq    #0,d2
  1126.         rts
  1127. ;**************** end (calc_ratio)
  1128.  
  1129. linefeed
  1130.         movea.l    _DOSBase(a5),a6
  1131.         move.l    ofh(a5),d1
  1132.         moveq    #10,d2
  1133.         jsr    -312(a6)
  1134.         rts
  1135.  
  1136.  
  1137. multi_lf
  1138.         move.l    lf_arg(a5),d7
  1139.         beq    _l94    ; LF
  1140.         movea.l    d7,a0    ; LF
  1141.         move.l    (a0),d0
  1142.         bls    _l95    ; LF<=0
  1143.         subq.l    #1,d0
  1144.         move.l    d0,d4
  1145. putlf
  1146.         bsr    linefeed
  1147.         dbra    d4,putlf
  1148. _l95
  1149. _l94
  1150.         rts
  1151.  
  1152.  
  1153. type        ;    d1: strptr on file to write to stdout
  1154.         move.l    d1,sp1(a5)
  1155.         movea.l    _DOSBase(a5),a6
  1156.         move.l    #ACCESS_READ,d2
  1157.         jsr    -84(a6)
  1158.         move.l    d0,itlock(a5)
  1159.         bne    _l96
  1160.         moveq    #-1,d0
  1161.         rts
  1162. _l96
  1163.         movea.l    _DOSBase(a5),a6
  1164.         move.l    itlock(a5),d1
  1165.         move.l    fib(a5),d2
  1166.         jsr    -102(a6)
  1167.         movea.l    fib(a5),a0
  1168.         move.l    fib_Size(a0),itsize(a5)
  1169.         move.l    sp1(a5),d1
  1170.         move.l    #MODE_OLDFILE,d2
  1171.         jsr    -30(a6)
  1172.         move.l    d0,itfh(a5)
  1173.         beq    _l98
  1174.         movea.l    $4.w,a6
  1175.         move.l    itsize(a5),d0
  1176.         move.l    #$10001,d1
  1177.         jsr    -684(a6)
  1178.         move.l    d0,itbuffer(a5)
  1179.         beq    _l99
  1180.         movea.l    _DOSBase(a5),a6
  1181.         move.l    itfh(a5),d1
  1182.         move.l    itbuffer(a5),d2
  1183.         move.l    itsize(a5),d3
  1184.         jsr    -42(a6)
  1185.         move.l    ofh(a5),d1
  1186.         move.l    itbuffer(a5),d2
  1187.         move.l    itsize(a5),d3
  1188.         jsr    -48(a6)
  1189.         movea.l    $4.w,a6
  1190.         movea.l    itbuffer(a5),a1
  1191.         jsr    -690(a6)
  1192. _l99
  1193.         movea.l    _DOSBase(a5),a6
  1194.         move.l    itfh(a5),d1
  1195.         jsr    -36(a6)
  1196. _l98
  1197.         movea.l    _DOSBase(a5),a6
  1198.         move.l    itlock(a5),d1
  1199.         jsr    -90(a6)
  1200.         moveq    #0,d0
  1201.         rts
  1202.  
  1203.  
  1204. centersub    ;    d1=strptr on string to center (80 cols display)
  1205.         move.l    d1,sp2(a5)
  1206.         movea.l    d1,a0
  1207.         moveq    #-1,d0
  1208. countlen
  1209.         addq.l    #1,d0
  1210.         tst.b    (a0)+
  1211.         bne    countlen
  1212.         moveq    #80,d1
  1213.         sub.l    d0,d1
  1214.         bls    _l100
  1215.         lsr.l    #1,d1
  1216.         move.b    d1,spcecnt(a5)
  1217.         beq    _l101
  1218. putspace
  1219.         movea.l    _DOSBase(a5),a6
  1220.         move.l    ofh(a5),d1
  1221.         move.l    #" ",d2
  1222.         jsr    -312(a6)
  1223.         subq.b    #1,spcecnt(a5)
  1224.         bne    putspace
  1225. _l101
  1226. _l100
  1227.         move.l    sp2(a5),d1
  1228.         rts
  1229.  
  1230.  
  1231. dosumvar    ;    env:xlsumtot, sumvarfname
  1232.         lea    sumvarfname(pc),a0
  1233.         movea.l    _DOSBase(a5),a6
  1234.         move.l    a0,d1
  1235.         move.l    #ACCESS_READ,d2
  1236.         jsr    -84(a6)
  1237.         move.l    d0,varlock(a5)
  1238.         bne    _l102
  1239.         lea    sumvarfname(pc),a0
  1240.         move.l    a0,d1
  1241.         move.l    #MODE_NEWFILE,d2
  1242.         jsr    -30(a6)
  1243.         move.l    d0,varfh(a5)
  1244.         beq    _l103
  1245.         lea    fmtvar(pc),a0
  1246.         move.l    varfh(a5),d1
  1247.         move.l    a0,d2
  1248.         move.l    strloc2(a5),d3
  1249.         jsr    -348(a6)
  1250. _l103
  1251.         bra    _l104
  1252. _l102
  1253.         movea.l    _DOSBase(a5),a6
  1254.         move.l    varlock(a5),d1
  1255.         jsr    -90(a6)
  1256.         lea    sumvarname(pc),a0
  1257.         move.l    a0,d1
  1258.         move.l    sumvarbuff(a5),d2
  1259.         move.l    #VARSIZE,d3
  1260.         move.l    #GVF_GLOBAL_ONLY,d4
  1261.         jsr    -906(a6)
  1262.         lea    longsum(a5),a0
  1263.         move.l    sumvarbuff(a5),d1
  1264.         move.l    a0,d2
  1265.         jsr    -816(a6)
  1266.         move.l    numfiles(a5),d0
  1267.         add.l    d0,longsum(a5)
  1268.         lea    sumvarfname(pc),a0
  1269.         move.l    a0,d1
  1270.         move.l    #MODE_NEWFILE,d2
  1271.         jsr    -30(a6)
  1272.         move.l    d0,varfh(a5)
  1273.         beq    _l105
  1274.         lea    longsum(a5),a0
  1275.         lea    fmtvar(pc),a1
  1276.         move.l    varfh(a5),d1
  1277.         move.l    a1,d2
  1278.         move.l    a0,d3
  1279.         jsr    -348(a6)
  1280. _l105
  1281. _l104
  1282.         move.l    varfh(a5),d7
  1283.         beq    _l106
  1284.         movea.l    _DOSBase(a5),a6
  1285.         move.l    d7,d1
  1286.         jsr    -36(a6)
  1287. _l106
  1288.         rts
  1289.  
  1290. sprintf        ;    a0 - format, a1 - data, a2 - PutChProc, a3 - buffer
  1291.         lea    stuffChar(pc),a2
  1292.         movea.l    $4.w,a6
  1293.         jsr    -522(a6)
  1294.         rts
  1295. stuffChar
  1296.         move.b    d0,(a3)+
  1297.         rts
  1298.  
  1299.  
  1300. wdelim        ;    d1 - strptr on line to write
  1301.         move.l    dl_arg(a5),d7
  1302.         beq    _l107    ; DRAWLIMITS/S
  1303.         bsr    centersub
  1304.         movea.l    _DOSBase(a5),a6
  1305.         jsr    -948(a6)
  1306.         move.l    ofh(a5),d1
  1307.         jsr    -360(a6)
  1308.         tst.b    la_flag(a5)
  1309.         beq    _l108
  1310.         bsr    linefeed
  1311. _l108
  1312. _l107
  1313.         rts
  1314.  
  1315.  
  1316. getlhanfo
  1317.         moveq    #0,d4    ; index
  1318.         bsr    getlh_clen
  1319.         move.l    tmp_lhsize(a5),d0
  1320.         cmp.l    Dec_CLen(a2),d0
  1321.         blt    goodlha
  1322.         move.l    #'!LHA',Packlib(a5)
  1323.         rts
  1324. goodlha
  1325.         moveq    #45,d7
  1326.         add.l    d7,d0
  1327.         cmp.l    Dec_CLen(a2),d0
  1328.         bgt    onefileinside
  1329. multiplelha
  1330.         move.l    #'LHAs',Packlib(a5)
  1331.         clr.l    lh_utot(a5)
  1332.         movea.l    _DOSBase(a5),a6
  1333.         move.l    filename(a5),d1
  1334.         move.l    #MODE_OLDFILE,d2
  1335.         jsr    -30(a6)
  1336.         move.l    d0,lhafh(a5)
  1337.         bne    _l109
  1338.         move.l    Dec_CLen(a2),Dec_ULen(a2)
  1339.         rts
  1340. _l109
  1341. refreshindex
  1342.         movea.l    hbuffer(a5),a1
  1343.         cmpi.w    #$2001,lha_chksum2(a1)
  1344.         bne    _l110    ; whaw! I was lucky to find this.
  1345.         addq.l    #3,d4
  1346. _l110
  1347.         moveq    #0,d0
  1348.         movea.l    hbuffer(a5),a1
  1349.         move.b    lha_namesize(a1),d0
  1350.         add.l    d0,d4
  1351.         moveq    #24,d7
  1352.         add.l    d7,d4    ; 24=size of checksum and other stuff.
  1353.         add.l    tmp_lhsize(a5),d4    ; tmp_lhsize=clen of an arc file
  1354.         move.l    d4,d0
  1355.         bsr    getlh_ulen
  1356.         move.l    Dec_ULen(a2),d0
  1357.         add.l    d0,lh_utot(a5)    ; lh_utot = total unpacked lenght of files
  1358.         move.l    lh_utot(a5),d0
  1359. readnextlha
  1360.         movea.l    _DOSBase(a5),a6
  1361.         move.l    lhafh(a5),d1
  1362.         move.l    d4,d2
  1363.         move.l    #OFFSET_BEGINNING,d3
  1364.         jsr    -66(a6)
  1365.         moveq    #-1,d7
  1366.         cmp.l    d7,d0
  1367.         bne    _l111
  1368.         move.l    lhafh(a5),d1
  1369.         jsr    -36(a6)
  1370.         move.l    Dec_ULen(a2),d1
  1371.         sub.l    d1,lh_utot(a5)
  1372.         move.l    lh_utot(a5),Dec_ULen(a2)
  1373.         tst.b    Dec_ULen(a2)
  1374.         bpl    _l112
  1375.         move.l    Dec_CLen(a2),Dec_ULen(a2)
  1376. _l112
  1377.         rts
  1378. _l111
  1379.         movea.l    _DOSBase(a5),a6
  1380.         move.l    lhafh(a5),d1
  1381.         move.l    hbuffer(a5),d2
  1382.         move.l    #lha_size,d3
  1383.         jsr    -42(a6)
  1384.         movea.l    hbuffer(a5),a1
  1385.         bsr    getlh_clen
  1386.         bra    refreshindex
  1387. ;*----------------------------------
  1388. onefileinside
  1389. ;    Dec_CLen(a2) = tmp_lhsize
  1390. ;this line above put the crunched size appearing in Lha. I choose not to
  1391. ;do this here but feel free to do it if you want.
  1392.         bsr    getlh_ulen
  1393.         move.l    #'LHA ',Packlib(a5)
  1394.         rts
  1395. getlh_clen    ;    d1=index -> clen in tmp_lhsize
  1396.         lea    lhsize(a5),a0
  1397.         move.b    lha_clen3(a1),3(a0)
  1398.         move.b    lha_clen2(a1),2(a0)
  1399.         move.b    lha_clen1(a1),1(a0)
  1400.         move.b    lha_clen0(a1),(a0)
  1401.         move.l    lhsize(a5),tmp_lhsize(a5)
  1402.         rts
  1403. getlh_ulen    ;    d1=index -> ulen in dec_ulen
  1404.         move.b    lha_ulen3(a1),(Dec_ULen+3)(a2)
  1405.         move.b    lha_ulen2(a1),(Dec_ULen+2)(a2)
  1406.         move.b    lha_ulen1(a1),(Dec_ULen+1)(a2)
  1407.         move.b    lha_ulen0(a1),Dec_ULen(a2)
  1408.         rts
  1409.  
  1410. closeall    ;    ezasm inserts its exit routine below  
  1411. _l0
  1412.         movea.l    $4.w,a6
  1413.         move.l    _DOSBase(a5),d7
  1414.         beq.s    _l114
  1415.         movea.l    d7,a1
  1416.         jsr    -414(a6)
  1417.  
  1418. _l114
  1419.         move.l    _UtilityBase(a5),d7
  1420.         beq.s    _l115
  1421.         movea.l    d7,a1
  1422.         jsr    -414(a6)
  1423.  
  1424. _l115
  1425.         unlk    a5
  1426.  
  1427.         moveq    #0,d0
  1428.         rts
  1429.  
  1430.  
  1431. _c0        dc.b    "dos.library",0
  1432. _c1        dc.b    "utility.library",0
  1433. _c2        dc.b    " ",0
  1434.  
  1435. ;---- datas ----
  1436. cformat
  1437.         dc.b    '%-26.26s %8ld %8ld (%s/%2ld%%) %s',$a,0
  1438. gryfmt
  1439.         dc.b    '%-30.30s %8ld (%s/%2ld%%) %s',$a,0
  1440. ncfmt
  1441.         dc.b    '%-32.32s %8ld %s',$a,0
  1442. shortfmt
  1443.         dc.b    '%-20.20s %8ld %s',$a,0
  1444. ;File                           Real   Packed Type/Ratio     Comment
  1445. dirfmt
  1446.         dc.b    ' %-25.25s %8ld %8ld (%s/%2ld%%) %s',$a,0
  1447. grydirfmt
  1448.         dc.b    ' %-29.29s %8ld (%s/%2ld%%) %s',$a,0
  1449. ncdirfmt
  1450.         dc.b    ' %-32.32s         %s',$a,0
  1451. shortdirfmt
  1452.         dc.b    ' %-20.20s         %s',$a,0
  1453. grytot
  1454.         dc.b    '                                ~~~~~~~      ~~~~~',10
  1455.         dc.b    '=> %5ld files                 %8ld       %2ld%%',10,0
  1456. totfmt
  1457.         dc.b    '                            ~~~~~~~  ~~~~~~~      ~~~~~',10
  1458.         dc.b    '=> %5ld files           %10ld %8ld       %2ld%%',10,0
  1459. nctot
  1460.         dc.b    '                                  ~~~~~~~',10
  1461.         dc.b    '=> %5ld files                   %8ld',10,0
  1462. shorttot
  1463.         dc.b    '                    ~~~~~~~',10
  1464.         dc.b    '=>%4ld files       %8ld',10,0
  1465. totdirfmt
  1466.         dc.b    '~~~~~~~~~~~~',10,'=> %ld dirs',10,0
  1467. dosname
  1468.         dc.b    'dos.library',0
  1469. uname
  1470.         dc.b    'utility.library',0
  1471. empty.msg
  1472.         dc.b    'Directory is empty!'
  1473. flush_string
  1474.         dc.b    10,0
  1475. tr.msg
  1476.         dc.b    '(Filtering mods WITH "Ripp" in DOS_Comment)',10,0
  1477. td.msg
  1478.         dc.b    '(Filtering mods WITHOUT duration in DOS_Comment)',10,0
  1479. stars
  1480.         dc.b    '********** ',0
  1481. delim
  1482.         dc.b    '============================================================'
  1483.         dc.b    '===================',10,0
  1484. inter
  1485.         dc.b    ' - ',0
  1486. inter2
  1487.         dc.b    ' : ',0
  1488. fmtvar
  1489.         dc.b    '%N',0
  1490. fmtnum
  1491.         dc.b    '%ld files',0
  1492. fmtdnum
  1493.         dc.b    '%ld dirs',0
  1494. totvarname
  1495.         dc.b    'ENV:xltotal',0
  1496. sumvarfname
  1497.         dc.b    'ENV:'
  1498. sumvarname
  1499.         dc.b    'xlsumtot',0
  1500. tmpname
  1501.         dc.b    'T:xltmp1',0
  1502. sortedname
  1503.         dc.b    'T:xltmp2',0
  1504. cmdname
  1505.         dc.b    'C:'
  1506. segname
  1507.         dc.b    'Sort',0
  1508. comline        ;    lame but true
  1509.         dc.b    'Sort >NIL: T:xltmp1 to T:xltmp2',0
  1510. version_string
  1511.         dc.b    '$VER: xList 1.06 (23.02.96) by Reez/Osmose',0
  1512. dummylabel
  1513.         dc.b    '(David Le Corfec, lecorfec@diva.univ-mlv.fr)',0
  1514. args_template
  1515.         dc.b    'DIR/M,IT=INTROTEXT/K,NT=NOTOTALS/S,TR=TESTRIPP/S,'
  1516.         dc.b    'TD=TESTDURATION/S,ET=ENDTEXT/K,NS=NOSORT/S,NH=NOHEADER/S,'
  1517.         dc.b    'FO=FILESONLY/S,FP=FULLPATH/S,H2=HEADER2/S,LF/N/K,'
  1518.         dc.b    'DL=DRAWLIMITS/S,COF=COUNTONLYFILES/S,SN=SONGNAME/S,'
  1519.         dc.b    'SU=SHOWUSIZE/S,LA=LINEASPECT/K,NC=NOCRUNCHINFOS/S,'
  1520.         dc.b    'SF=SHORTFILENAMES/S',0
  1521.  
  1522. ; Contact me for ANY reason ( I like to get (e)mails ! ) :
  1523. ;Snail:  David Le Corfec          Email:
  1524. ;        57 rue C.J. Romain        <lecorfec@diva.univ-mlv.fr>
  1525. ;        94170 Le Perreux
  1526. ;           - France -            
  1527. ;                     -=: 100% aNSWeR! :=-
  1528. ; on IRC : Reez
  1529.  
  1530. ; Special greets to The Cyborg / NGC, Gryzor,
  1531. ; and VoDkA/Saturne^Osmose (Many Thanx for adverts in ur list and in Dream :)
  1532. ; about the output formats:
  1533. ; originally I had a format called 'cfmt' (C-Formatting String)
  1534. ; lately I added the 'gryfmt' (Gryzor Format), which became the default output
  1535. ; the cfmt is called with SU, but it's the default output internally (!)
  1536. ; today I add the 'ncfmt' (with NC=NOCRUNCHINFOS) , so I had to rewrite the
  1537. ; quick&bad coded fmtchange-routines.
  1538. ; so dont worry for the mess with switches,offsets and formats at each printing.
  1539. ; let's add a 'shortfmt'
  1540.  
  1541.  
  1542.         END
  1543.