home *** CD-ROM | disk | FTP | other *** search
/ Mods Anthology 2 / Music-AmigaModsAnthology-2of4-Psychodk.mcsteam.iso / Tools / Amiga / Misc / xList_v1.06 / xList_Sources / xlistgui.63.s < prev   
Text File  |  1996-02-11  |  12KB  |  635 lines

  1. ; xList-GUI v1.06 (12.02.96), an user-friendly (and cheap) GUI frontend for
  2. ; xList (allow recursivity...)
  3. ; revision 63 - recoded in ezasm
  4.     incdir    include:
  5.     include    dos/dos.i
  6.     include    reqtools/reqtools.i
  7.     include    exec/execbase.i
  8.  
  9. GOOD_FILE    equ    1
  10. NOT_PICKED    equ    0
  11. VARSIZE        equ    8
  12. GVF_GLOBAL_ONLY = $100
  13.  
  14.     OPT4
  15.  
  16.     LVER    dos.library 37
  17.  
  18. ;STRUCTURE xListGUI_Vars,0
  19. LONG xl_wbstartup xl_filereq xl_membase xl_fib xl_size xl_lock xl_oldlock
  20. LONG xl_tmplock xl_txtdirlock xl_txtlock xl_introfile xl_introdir xl_seg
  21. LONG xl_endfile xl_enddir xl_txtfh xl_txtbuffer xl_oldlock2 xl_rdargs
  22. LONG xl_dirptr xl_testlock
  23.  
  24. LONG xl_noroot xl_append xl_endtxt xl_introtxt xl_argsarray
  25.  
  26. LONG xl_listfh
  27. LONG xl_varbuff xl_dirtoscan
  28. LONG xl_prvarargv xl_bigtotal
  29. LONG xl_onedirtot xl_varfh xl_bigvarbuff xl_statfh xl_slavelock
  30. BYTE xl_switch[4]
  31. BYTE xl_typecom_buff[256] xl_rtbuffer[128] xl_fibstruct[416]
  32. BYTE xl_vbuf[32] xl_bvbuf[32]
  33.  
  34. progstart
  35.     bra.b    pstart
  36. version
  37.     dc.b    '$VER:'
  38. title
  39.     dc.b    ' xList-GUI v1.06 (12.02.96)',0
  40.     even
  41. pstart
  42.     moveq    #0,d0
  43.     bsr    getwbmsg
  44.     a0 = &xl_rtbuffer
  45.     xl_membase = a0
  46.     a0 = &xl_fibstruct
  47.     xl_fib = a0
  48.     a0 = &xl_vbuf
  49.     xl_varbuff = a0
  50.     a0 = &xl_bvbuf
  51.     xl_bigvarbuff = a0
  52. testprg
  53.     a0 = &xlistname
  54.     xl_slavelock = Lock( a0 #ACCESS_READ )
  55.     xl_slavelock = 0 {
  56.         a0 = &segname
  57.         xl_slavelock = Lock( a0 #ACCESS_READ )
  58.         xl_slavelock != 0 ulockprg
  59.         a0 = &prgdir
  60.         xl_lock = Lock( a0 #ACCESS_READ )
  61.         xl_lock != 0 {
  62.             xl_oldlock = CurrentDir( xl_lock )
  63.             a0 = &segname
  64.             xl_slavelock = Lock( a0 #ACCESS_READ )
  65.             xl_slavelock != 0 ulockprg
  66.         }
  67.         a1 = &body8
  68.         a2 = &button8
  69.         bsr    disp_req
  70.         bra    replymsg
  71.     }
  72. ulockprg
  73.     UnLock( xl_slavelock )
  74. findseg ; if xList is not yet resident
  75.     a0 = &segname
  76.     FindSegment( a0 #0 #0 ) ; search
  77.     d0 = 0 {
  78.         a0 = &xlistname
  79.         xl_seg = LoadSeg( a0 ) ; load code
  80.         xl_seg = 0 {
  81.             a0 = &segname
  82.             xl_seg = LoadSeg( a0 ) ; load code
  83.             CurrentDir( xl_oldlock )
  84.         }
  85.         xl_seg != 0 {
  86.             a0 = &segname
  87.             AddSegment( a0 xl_seg #1 ) ; make resident
  88.         }
  89.     }
  90. readargs
  91.     a0 = &stattxt
  92.     xl_statfh = Open( a0 #MODE_NEWFILE )
  93.     bsr    deletebigvar
  94.     bsr    getbig
  95.     a0 = &template
  96.     a1 = &xl_argsarray
  97.     xl_rdargs = ReadArgs( a0 a1 #0 )
  98.     xl_rdargs = 0 replymsg
  99.     xl_argsarray != 0 {
  100.         xl_switch = #1
  101.         a0 = xl_argsarray
  102.         xl_dirtoscan = (a0)+
  103.         xl_dirptr = a0
  104.         bra    phase2
  105.     }
  106.  
  107. req1
  108.     xl_filereq = rtAllocRequestA( #RT_FILEREQ #0 )
  109.     xl_filereq = 0 {
  110.         a1 = &body1 ; out of memory
  111.         a2 = &button1
  112.         bsr    disp_req
  113.         bra    freeargs
  114.     }
  115.  
  116. frallocated
  117.     xl_txtdirlock = 0
  118.     xl_txtlock = 0
  119.     xl_introfile = 0
  120.     xl_introdir = 0
  121.     xl_endfile = 0
  122.     xl_enddir = 0
  123. welcome
  124.     a1 = &body2
  125.     a2 = &button2
  126.     bsr    disp_req
  127.     d0 = 0 freereq2 ;     quit
  128.     d0 = #1 req4txt ;    proceed
  129. ;    d0 = #1 popupfr
  130.     a1 = &body6 ;         about
  131.     a2 = &button6
  132.     bsr    disp_req
  133.     a1 = &body7 ; `        about2
  134.     a2 = &button7
  135.     bsr    disp_req
  136.     bra.b    welcome
  137.  
  138. req4txt
  139.     a1 = &body9 ; proceed, intro, end
  140.     a2 = &button9
  141.     bsr    disp_req
  142.     d0 = #1 popupfr ;      dir req
  143.     d0 = #2 reqintro ;     intro
  144.  
  145. reqend ;             end
  146.     bsr    choose
  147.     d0 = 0 req4txt
  148.     xl_enddir = xl_txtdirlock
  149.     xl_endfile = xl_txtlock
  150.     bra.b    req4txt
  151.  
  152. reqintro
  153.     bsr    choose
  154.     d0 = 0 req4txt
  155.     xl_introdir = xl_txtdirlock
  156.     xl_introfile = xl_txtlock
  157.     bra    req4txt
  158.  
  159. popupfr
  160.     a2 = xl_membase
  161.     clr.l    (a2)
  162.     rtFileRequestA( xl_filereq * &text1 &tags1 )
  163.     d0 != 0 picked
  164.     a1 = &body3
  165.     a2 = &button3
  166.     bsr    disp_req
  167.     d0 != 0 welcome
  168.     xl_introfile != 0 {
  169.         UnLock( xl_introfile )
  170.     }
  171.     xl_endfile != 0 {
  172.         UnLock( xl_endfile )
  173.     }
  174.     bra    freereq2
  175.  
  176. choose
  177.     a2 = xl_membase
  178.     (a2) = 0 l
  179.     rtFileRequest( xl_filereq * &text2 #TAG_DONE )
  180.     d0 != 0 {
  181.         a1 = xl_filereq
  182.         Lock( rtfi_Dir(a1) #ACCESS_READ )
  183.         xl_txtdirlock = d0
  184.         d0 != 0 {
  185.             xl_oldlock2 = CurrentDir( xl_txtdirlock )
  186.             xl_txtlock = Lock( xl_membase #ACCESS_READ )
  187.             xl_txtlock = 0 {
  188.                 CurrentDir( xl_oldlock2 )
  189.                 UnLock( d0 )
  190.                 moveq    #NOT_PICKED,d0
  191.                 rts
  192.             }
  193.             CurrentDir( xl_oldlock2 )
  194.             UnLock( d0 )
  195.             moveq    #GOOD_FILE,d0
  196.             rts
  197.         }
  198.         moveq    #NOT_PICKED,d0
  199.         rts
  200.     }
  201.     moveq    #NOT_PICKED,d0
  202.     rts
  203.  
  204. picked
  205.     a0 = xl_filereq
  206.     xl_dirtoscan = rtfi_Dir(a0)
  207.     a1 = xl_dirtoscan
  208.     (a1) = 0 l {
  209.         GetCurrentDirName( xl_membase #128 )
  210.         d0 != 0 { ; success ! very likely to append
  211.             xl_dirtoscan = xl_membase
  212.         }
  213.     }
  214. phase2
  215.     xl_lock = Lock( xl_dirtoscan #ACCESS_READ )
  216.     xl_lock = 0 {
  217.         xl_switch != 0 befloop
  218.         a1 = &body4
  219.         a2 = &button4
  220.         bsr    disp_req
  221.         d0 = 0 freereq2
  222.         bra    req1
  223.     }
  224. dirlocked
  225.     xl_oldlock = CurrentDir( xl_lock )
  226.     a0 = &outname
  227.     Lock( a0 #ACCESS_READ )
  228.     d0 = 0 noprev
  229.     UnLock( d0 )
  230.     xl_switch != 0 {
  231.         xl_append != 0 noprev
  232.         bra.b    testdest
  233.     }
  234. append_req
  235.     a1 = &body5
  236.     a2 = &button5
  237.     bsr    disp_req
  238.     d0 = 0 current
  239.     d0 = #1 noprev
  240. testdest
  241.     a0 = &outname2
  242.     xl_testlock = Lock( a0 #ACCESS_READ )
  243.     xl_testlock != 0 {
  244.         UnLock( xl_testlock )
  245.         a0 = &outname2
  246.         add.b    #1,14(a0)
  247.         bra.b    testdest
  248.     }
  249. rename
  250.     a0 = &outname
  251.     a1 = &outname2
  252.     Rename( a0 a1 )
  253.  
  254. noprev ; ****** Beginning of the serious stuff ******\\\\\\\\\\\\\\\\\\\\\
  255.     bsr    printintro
  256.     xl_introfile = 0
  257.     a0 = &comline1 ; List >T:xltmp1 lformat "xList >>RAM:xList_out
  258.     Execute( a0 #0 #0 )
  259.     a0 = &tmpname
  260.     xl_tmplock = Lock( a0 #ACCESS_READ )
  261.     xl_tmplock = 0 current
  262.     Examine( d0 xl_fib )
  263.     a0 = xl_fib
  264.     fib_Size(a0) = 0 l {
  265.         UnLock( xl_tmplock )
  266.         a0 = &dummycom
  267.         Execute( a0 #0 #0 )
  268.         bsr    printend
  269.         xl_endfile = 0
  270.         bra    current
  271.     }
  272. nonull
  273.     UnLock( xl_tmplock )
  274.     xl_switch = 0 rootreq
  275.     xl_noroot = 0 root
  276.     bra.b    com2
  277.  
  278. rootreq
  279.     a1 = &body11
  280.     a2 = &button11
  281.     bsr    disp_req
  282.     d0 = 0 com2
  283.  
  284. root
  285.     a0 = &dummycom
  286.     Execute( a0 #0 #0 )
  287. com2
  288.     a0 = &comline2
  289. ;    dc.b    'Sort >NIL: T:xl_tmp1 to T:xl_tmp4',10,'Execute >NIL:'
  290. ;    dc.b    ' T:xl_tmp4',0
  291.     Execute( a0 #0 #0 )
  292.     bsr    printend
  293.     a0 = &tmpname
  294.     DeleteFile( a0 )
  295.     a0 = &sortedname
  296.     DeleteFile( a0 )
  297. current
  298.     CurrentDir( xl_oldlock )
  299.     UnLock( d0 )
  300. befloop ; scanning finished, next dir (CLI) or mainmenu (GUI)
  301.     bsr    gettotal ; stats stuff
  302.     xl_switch = 0 frallocated
  303.     a0 = xl_dirptr
  304.     xl_dirtoscan = (a0)+
  305.     beq    freeargs
  306.     xl_dirptr = a0
  307.     bra    phase2 ; scan the next dir
  308.  
  309. ;************************** misc subroutines
  310. getwbmsg
  311.     move.l    4.w,a6
  312.     a2 = ThisTask(a6)
  313.     pr_CLI(a2) = 0 l {
  314.         WaitPort( &pr_MsgPort(a2) )
  315.         xl_wbstartup = GetMsg( &pr_MsgPort(a2) )
  316.     }
  317.     rts
  318.  
  319. disp_req ; subroutine for RT requesters
  320.     d0 = rtEZRequestA( * * #0 #0 &tags2)
  321.     rts
  322.  
  323. printintro ; unlock, currentdir
  324.     xl_introtxt != 0 {
  325.         Lock( xl_introtxt #ACCESS_READ )
  326.         d0 != 0 {
  327.             UnLock( d0 )
  328.             a2 = xl_introtxt
  329.             a0 = &comline3
  330.             bsr    appendcom
  331.         }
  332.         rts
  333.     }
  334. itfromgui
  335.     xl_txtlock = xl_introfile
  336.     xl_txtlock = 0 {
  337.         rts
  338.     }
  339.     bra    printtxt2
  340.  
  341. printend
  342.     xl_endtxt != 0 {
  343.         Lock( xl_endtxt #ACCESS_READ )
  344.         d0 != 0 {
  345.             UnLock( d0 )
  346.             a2 = xl_endtxt
  347.             a0 = &comline3
  348.             bsr    appendcom
  349.         }
  350.         rts
  351.     }
  352. etfromgui
  353.     xl_txtlock = xl_endfile
  354.     xl_txtlock = 0 {
  355.         rts
  356.     }
  357.  
  358. printtxt2 ; lock in xl_txtlock
  359.     a0 = &comline3
  360.     bsr    appendsub
  361.     move.l    #255,d3
  362.     sub.l    d0,d3
  363.     NameFromLock( xl_txtlock a1 * )
  364.     a0 = &xl_typecom_buff
  365.     Execute( a0 #0 #0 )
  366.     UnLock( xl_txtlock )
  367.     rts
  368.  
  369. appendcom ; a0 - beg  a2 - end
  370.     bsr    appendsub
  371.     move.l    a2,a0 ; append argument
  372. .loop2
  373.     move.b    (a0)+,(a1)+
  374.     bne.b    .loop2
  375.     a0 = &xl_typecom_buff
  376.     Execute( a0 #0 #0 )
  377.     rts
  378.  
  379. appendsub
  380.     a1 = &xl_typecom_buff
  381.     moveq    #-1,d0
  382. .loop
  383.     addq    #1,d0
  384.     move.b    (a0)+,(a1)+ ; copy beginning of command in memory
  385.     bne.b    .loop
  386.     tst.b    -(a1)
  387. return
  388.     rts
  389.  
  390.  
  391. **************************************
  392.  
  393.  
  394. gettotal
  395. ; check if env:xltotal is here - if yes: get it - add to maintotal - del it -
  396. ; (maintotal's will be added to have the real total, in case of multiple dirs)
  397.     a0 = &varfname
  398.     xl_slavelock = Lock( a0 #ACCESS_READ ) 
  399.     xl_slavelock != 0 {
  400.         UnLock( xl_slavelock )
  401.         a0 = &varname
  402.         GetVar( a0 xl_varbuff #VARSIZE #GVF_GLOBAL_ONLY )
  403.         a0 = &xl_onedirtot
  404.         StrToLong( xl_varbuff a0 )
  405.         a0 = &mtotfmt
  406.         a1 = &xl_dirtoscan
  407.         VFPrintf( xl_statfh a0 a1 )
  408.         Seek( xl_statfh #0 #OFFSET_END )
  409.         bsr    getbig
  410.         a0 = &varfname
  411.         DeleteFile( a0 )
  412.         a0 = &basevar
  413.         DeleteFile( a0 )
  414.     }
  415.     rts
  416.  
  417. deletebigvar
  418.     a0 = &bigvfname
  419.     DeleteFile( a0 )
  420.     rts
  421.  
  422. getbig
  423.     a0 = &bigvfname
  424.     Lock( a0 #ACCESS_READ )
  425.     d0 = 0 {
  426.         a0 = &bigvname
  427.         SetVar( a0 xl_varbuff #VARSIZE #GVF_GLOBAL_ONLY )
  428.         rts
  429.     }
  430.  
  431. gzdh
  432.     UnLock( d0 )
  433.     a0 = &bigvname
  434.     GetVar( a0 xl_bigvarbuff #VARSIZE #GVF_GLOBAL_ONLY )
  435.     a0 = &xl_bigtotal
  436.     StrToLong( xl_bigvarbuff a0 )
  437.     d0 = xl_onedirtot
  438.     xl_bigtotal += d0
  439.     a0 = &bigvfname
  440.     xl_varfh = Open( a0 #MODE_NEWFILE )
  441.     xl_varfh != 0 {
  442.         a1 = &xl_bigtotal
  443.         a0 = &fmtvar
  444.         VFWritef( xl_varfh a0 a1 )
  445.         Close( xl_varfh )
  446.     }
  447.     rts
  448.  
  449. freereq2
  450.     xl_filereq != 0 {
  451.         rtFreeRequest( xl_filereq )
  452.     }
  453. freeargs
  454.     xl_rdargs != 0 {
  455.         FreeArgs( xl_rdargs )
  456.     }
  457. replymsg
  458.     xl_statfh != 0 {
  459.         ExamineFH( xl_statfh xl_fib )
  460.         a0 = xl_fib
  461.         fib_Size(a0) != 0 l {
  462.             xl_bigtotal != 0 {
  463.                 a0 = &totstat
  464.                 a1 = &xl_bigtotal
  465.                 VFPrintf( xl_statfh a0 a1 )
  466.             }
  467.             Close( xl_statfh )
  468.         } else {
  469.             Close( xl_statfh )
  470.             a0 = &stattxt
  471.             DeleteFile( a0 )
  472.         }
  473.     }
  474.     xl_wbstartup != 0 {
  475.         Forbid()
  476.         ReplyMsg( xl_wbstartup )
  477.     }
  478. CLIExit
  479.     end
  480.  
  481. ;-----------------------------------------------------------------------
  482. tags1
  483.     dc.l    RTFI_Flags,FREQF_NOFILES
  484.     dc.l    TAG_END
  485.  
  486. tags2
  487.     dc.l    RT_Underscore,'_'
  488.     dc.l    RTEZ_ReqTitle,title
  489.     dc.l    RTEZ_Flags,4 ; centertext
  490.     dc.l    TAG_END
  491.  
  492. prgdir
  493.     dc.b    'PROGDIR:',0
  494. xlistname
  495.     dc.b    'c:'
  496. segname
  497.     dc.b    'xList',0
  498. tmpname
  499.     dc.b    'T:xl_tmp1',0
  500. sortedname
  501.     dc.b    'T:xl_tmp4',0
  502. stattxt
  503.     dc.b    'RAM:xl_stats.txt',0
  504. ;stattxt2
  505. ;    dc.b    'RAM:xl_stats.txt.a',0 ; 17(an)
  506. outname
  507.     dc.b    'RAM:xList_out',0
  508. outname2
  509.     dc.b    'RAM:xList_out.a',0 ; 14(an)
  510. dummycom
  511.     dc.b    'xList >>RAM:xList_out LF=4 DL COF',0
  512. comline1
  513.     dc.b    'List >T:xl_tmp1 lformat "xList >>RAM:xList_out *"%s%s*" '
  514.     dc.b    'LF=4 DL COF" dirs all',0
  515.     dc.b    '                  '
  516. comline2
  517.     dc.b    'Sort >NIL: T:xl_tmp1 to T:xl_tmp4',10,'Execute >NIL:'
  518.     dc.b    ' T:xl_tmp4',0
  519. comline3
  520.     dc.b    'Type >>RAM:xList_out ',0
  521. varfname
  522.     dc.b    'ENV:'
  523. varname
  524.     dc.b    'xlsumtot',0
  525. bigvfname
  526.     dc.b    'ENV:'
  527. bigvname
  528.     dc.b    'xlbigtot',0
  529. basevar
  530.     dc.b    'ENV:xltotal',0
  531. mtotfmt
  532.     dc.b    '                   %-30s %5s files',10,0
  533. totstat
  534.     dc.b    '                   ------------------------------------------',10
  535.     dc.b    '                   TOTAL:                         %5ld files'
  536. flush
  537.     dc.b    10,0
  538. fmtvar
  539.     dc.b    '%N',0
  540. dosname
  541.     dc.b    'dos.library',0
  542. rtname
  543.     dc.b    'reqtools.library',0
  544.  
  545. body1
  546.     dc.b    'Out of memory!',0
  547. button1
  548.     dc.b    '_!?!',0
  549.  
  550. body2
  551.     dc.b    'Welcome to the xList-GUI !',10,10
  552.     dc.b    'You''ll have to choose a',10
  553.     dc.b    'directory to be recursively',10
  554.     dc.b    'scanned, like a "MODS:" partition.',10,10
  555.     dc.b    'Then you''ll have to wait until',10
  556.     dc.b    'this requester is poped up again,',10
  557.     dc.b    'allowing you to scan several dirs.',10
  558.     dc.b    'The last created list is always',10
  559.     dc.b    '''RAM:xList_out'', other lists are',10
  560.     dc.b    'named like ''xList_out.a'',''.b'',...',0
  561. button2
  562.     dc.b    '_Let''s go!| About... |_Quit',0
  563.  
  564. body3
  565.     dc.b    'Bad luck! Nothing selected.',0
  566. button3
  567.     dc.b    '_Main menu|_Bye',0
  568.  
  569. body4
  570.     dc.b    'Unable to lock your dir.',0
  571. button4
  572.     dc.b    '_Try another one|_Quit this lame prog',0
  573. button4b
  574.     dc.b    '_Sorry',0
  575.  
  576. body5
  577.     dc.b    'Do you want to:',10
  578.     dc.b    '- append this dir to the existing file ?',10
  579.     dc.b    '- write to a new file, by renaming the existing file',10
  580.     dc.b    'to a new name ?',10
  581.     dc.b    '(of course, your previous lists WON''T be overwritten!)',0
  582. button5
  583.     dc.b    '_Append|_New file|A_bort',0
  584.  
  585. body6
  586.     dc.b    'This tool belongs to the xList project,',10
  587.     dc.b    'started by Reez/Osmose on July 1995,',10
  588.     dc.b    'with the BiG help of the followings:',10
  589.     dc.b    'The Cyborg/NGC & Gryzor',10,10
  590.     dc.b    'And thanx to these great guys:',10
  591.     dc.b    'U.D. Mueller, for (especially) the XPK package',10
  592.     dc.b    'Nico F. & Magnus H., for the ReqTools stuff',10
  593.     dc.b    'Joe Siebenmann, for EZAsm',0
  594. button6
  595.     dc.b    'I wanna ctc _you!',0
  596.  
  597. body7
  598.     dc.b    'Feel free to write me at: (Answer Guaranteed!!!)',10,10
  599.     dc.b    'David Le Corfec',10
  600.     dc.b    '57 rue C.J. Romain',10
  601.     dc.b    '94170  Le Perreux / Marne',10
  602.     dc.b    'FRANCE',10,10
  603.     dc.b    'Email:  <lecorfec@diva.univ-mlv.fr>',10,10
  604.     dc.b    'On IRC: Reez, mainly on #amigafr  (Hi Net-mates!)',0
  605. button7
  606.     dc.b    '_OK I see...',0
  607.  
  608. body8
  609.     dc.b    'Cannot find ''xList'' in C: or',10
  610.     dc.b    'in the current directory.',10
  611.     dc.b    'Be sure to install it properly !',0
  612.  
  613. button8
  614.     dc.b    '_Be right back...',0
  615.  
  616. body9
  617.     dc.b    'Here you can choose intro and end texts for your list',0
  618. button9
  619.     dc.b    '_Next step!|Choose _Intro|Choose _End',0
  620.  
  621. button10
  622.     dc.b    '_Uh?',0
  623. body11
  624.     dc.b    'Add a listing of the root directory ?',10
  625.     dc.b    '(the directory you selected)',0
  626. button11
  627.     dc.b    'Oh _yeah!|_No, thanx.',0
  628.  
  629. text1
  630.     dc.b    'Select a directory to list:',0
  631. text2
  632.     dc.b    'Select text:',0
  633. template
  634.     dc.b    'DIR(S)/M,IT=INTROTEXT/K,ET=ENDTEXT/K,APPEND/S,NOROOT/S',0
  635.