home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 1 / Mecomp-CD.iso / amiga / tools / cd / indexcd / bin / sources.lha / sources / IndexAG.s < prev    next >
Text File  |  1997-02-15  |  18KB  |  914 lines

  1.  
  2.     OPT     P=68000,AMIGA,CASE,O+,NOWARN,NODEBUG
  3.  
  4.     bra  _main
  5.         dc.b "$VER: "
  6. Title:  dc.b "IndexAG v1.0 (15-02-1997) © by Claudio Buraglio",10,0
  7.  
  8. _main:    lea    IndexName,a1
  9.     bsr    ReadArg        ; Legge il primo argomento
  10.     lea    GuideName,a1
  11.     bsr    ReadArg        ; Legge il II argomento
  12.     lea    FindText,a1
  13.     bsr    ReadArg        ; Legge il III argomento
  14.     lea    Switch,a1
  15.     bsr    ReadArg        ; Legge il IV argomento
  16.     lea    Short,a1
  17.     bsr    ReadArg        ; Legge il V argomento
  18.  
  19.     lea    Switch+1,a1
  20.     cmp.b    #"D",(a1)
  21.     bne    .OpenDos    
  22.  
  23.     lea    FindText,a1    ; Il testo da cercare quanto e' lungo ?
  24.     moveq.l    #0,d0
  25. .Loop:    addq.l    #1,d0
  26.     tst.b    (a1)+
  27.     bne    .Loop
  28.     move.l    d0,FindLen    
  29.  
  30. .OpenDos:
  31.     move.l    #0,d0        ; Version
  32.     lea    DosName,a1
  33.     move.l    4,a6
  34.     jsr    -552(a6)    ; OpenLibrary
  35.     tst.l    d0    
  36.     beq    rts
  37.     move.l    d0,DosBase
  38.  
  39.     move.l    #Title,d1
  40.     move.l    DosBase,a6
  41.     jsr    -$3b4(a6)    ; PutStr
  42.  
  43.     lea    IndexName,a0    ; se non e' stato specificato un file
  44.     tst.b    (a0)        ; .indice esce
  45.     beq    NoArgs
  46.  
  47.     lea    FindText,a1    ; Testo da cercare
  48.     tst.b    (a1)
  49.     beq    .NoFindArg    ; se esiste un testo da cercare lo
  50.     bsr    StrToUpper    ; porta in uppercasae
  51.  
  52.  
  53. ;--------------------------------------------------------
  54. .NoFindArg:    lea    GuideName,a1    ; se esiste il nome con cui
  55.         tst.b    (a1)        ; salvare il file .guide
  56.         bne    CercaSuff2    ; salta a CercaSuff2
  57.  
  58. .CopiaNome:    move.b    (a0)+,(a1)+    ; copia IndexName(a0) in GuideName(a1)
  59.         tst.b    (a0)
  60.         bne    .CopiaNome
  61.  
  62. CercaSuff:    cmp.b    #".",(a1)    ; se trova il punto di .indice
  63.         beq    .Punto        ; lo riscrive in .guide
  64.  
  65.         cmp.l    #GuideName,a1    ; se non e' stato trovato nessun punto
  66.         beq    NoSuff        ; esce segnalando l'errore altrimenti...
  67.         subq.l    #1,a1        ; decrementa a1
  68.         bra    CercaSuff    ; e luppa.
  69.  
  70. .Punto:        move.b    #".",(a1)+    ; scrive .guide
  71.         move.b    #"g",(a1)+
  72.         move.b    #"u",(a1)+
  73.         move.b    #"i",(a1)+
  74.         move.b    #"d",(a1)+
  75.         move.b    #"e",(a1)+
  76.         move.b    #$00,(a1)
  77.  
  78. ;--------------------------------------------------------
  79.  
  80. CercaSuff2:    lea    IndexName,a1
  81.  
  82. .Cerca:        cmp.b    #".",(a1)    ; se trova il punto
  83.         beq    .LabelCD    ; salta..
  84.         tst.b    (a1)+        ; se trova uno zero
  85.         beq    NoSuff        ; segnala l'errore
  86.         bra    .Cerca
  87.  
  88. .LabelCD:    lea    NrDisco,a2
  89.         cmp.b    #"T",-2(a1)    ; AMINE(T)n.
  90.         beq    CercaDisco
  91.         cmp.b    #"T",-3(a1)    ; AMINE(T)nn.
  92.         beq    CercaDisco
  93.         bra    NoSuff        ; segnala l'errore
  94.  
  95. CercaDisco:    cmp.b    #"T",-1(a1)    ; se siamo alla fine di AMINET
  96.         beq    CopiaNrDisco    ; copia il nr. disco
  97.         subq.l    #1,a1        ; Decrementa il ptr di 1
  98.         bra    CercaDisco    ; altrimenti continua la ricerca
  99.  
  100. CopiaNrDisco:    move.b    (a1)+,(a2)+
  101.         cmp.b    #".",(a1)    ; se arriviamo al punto il nr del CD
  102.         bne    CopiaNrDisco    ; e' finito, quindi...
  103.         move.b    #" ",(a2)+    ; aggiunge uno spazio e
  104.         move.b    #$00,(a2)    ; un terminatore NULL
  105.  
  106. FineNrDisco:    lea    Switch+1,a3    ; se come Switch e' specificato
  107.         cmp.b    #"A",(a3)    ; (A)ppend
  108.         beq    .CaricaCounter    ; carica un possibile index.tmp
  109.  
  110.         bra    OpenLoadIndex    ; altrimenti salta la routine
  111.  
  112. .CaricaCounter:    move.l    #CounterFile,d1
  113.         move.l    #1005,d2    ; OldFile
  114.         move.l    DosBase,a6
  115.         jsr    -30(a6)        ; Open
  116.         tst.l    d0
  117.         beq    OpenLoadIndex
  118.         move.l    d0,File
  119.  
  120.         move.l    d0,d1        ; File Handle
  121.         move.l    #FileCounter,d2    ; Buffer
  122.         move.l    #4,d3
  123.         move.l    DosBase,a6
  124.         jsr    -42(a6)        ; Read
  125.  
  126.         move.l    File,d1
  127.         move.l    DosBase,a6
  128.         jsr    -36(a6)        ;Close
  129.  
  130. OpenLoadIndex:
  131.         move.l    #IndexName,d1    ; Nome
  132.         move.l    #-2,d2        ; Access_Read
  133.         move.l    DosBase,a6
  134.         jsr    -84(a6)        ; Lock
  135.         move.l    d0,d1
  136.         beq    NoFile
  137.         move.l    d0,Lock
  138.  
  139.         move.l    #FIB,d2
  140.         move.l    DosBase,a6
  141.         jsr    -102(a6)    ; Examine
  142.         tst.l    d0        ; zero se directory o empty file
  143.         beq    UnLock
  144.         move.l    FIB+$7c,d0
  145.         move.l    d0,FileLen
  146.  
  147.         add.l    #16,d0
  148.         move.l    #0,d1        ; Request
  149.         move.l    4,a6
  150.         jsr    -198(a6)    ; AllocMem
  151.         tst.l    d0
  152.         beq    UnLock
  153.  
  154.         add.l    #8,d0
  155.         move.l    d0,a0
  156.         add.l    FileLen,a0
  157.         move.l    0,(a0)
  158.  
  159.         move.l    d0,MemBase
  160.  
  161.         move.l    #IndexName,d1    ; Name
  162.         move.l    #1005,d2    ; OldFile
  163.         move.l    DosBase,a6
  164.         jsr    -30(a6)        ; Open
  165.         tst.l    d0
  166.         beq    FreeMem
  167.         move.l    d0,File
  168.  
  169.         move.l    d0,d1
  170.         move.l    MemBase,d2
  171.         move.l    FileLen,d3
  172.         move.l    DosBase,a6
  173.         jsr    -42(a6)        ; Read
  174.  
  175.         move.l    File,d1
  176.         move.l    DosBase,a6
  177.         jsr    -36(a6)        ;Close
  178.  
  179. ;    Programma...
  180.  
  181.         move.l    MemBase,a0
  182.         move.l    #0,-4(a0)
  183.         move.l    a0,d0
  184.         add.l    FileLen,d0
  185.         subq.l    #4,d0
  186.         move.l    d0,EndFile
  187.  
  188. ; Apre il file di destinazione
  189.  
  190. SkipOpenSource:    lea    Switch+1,a3
  191.         cmp.b    #"A",(a3)
  192.         beq    .Append
  193.         bra    .NewFile
  194.  
  195. .Append:    move.l    #GuideName,d1
  196.         move.l    #1004,d2    ; ReadWrite
  197.         move.l    DosBase,a6
  198.         jsr    -30(a6)        ; Open
  199.         tst.l    d0
  200.         beq    NoDest
  201.         move.l    d0,File
  202.  
  203.         move.l    d0,d1        ; File Handle
  204.         move.l    #0,d2        ; Posizion
  205.         move.l    #1,d3        ; OFFSET_END
  206.         move.l    DosBase,a6
  207.         jsr    -66(a6)        ; Seek
  208.  
  209.         bra    .Guide
  210.  
  211. .NewFile:    move.l    #GuideName,d1
  212.         move.l    #1006,d2    ; NewFile
  213.         move.l    DosBase,a6
  214.         jsr    -30(a6)        ; Open
  215.         tst.l    d0
  216.         beq    NoDest
  217.         move.l    d0,File
  218.  
  219. ; Tutto Ok. Creo .guide
  220.  
  221. .Guide:        move.l    #18,FileWidth
  222.         move.l    #10,DirWidth
  223.  
  224.         lea    Switch+1,a3
  225.         cmp.b    #"A",(a3)
  226.         beq    NoHeaderGuide
  227.  
  228. WriteHeadGuide:    move.l    File,d1        ; File Handle
  229.         move.l    #AGHead1,d2    ; Buffer
  230.         move.l    #AGEndA,d3
  231.         move.l    DosBase,a6
  232.         jsr    -48(a6)        ; Write
  233.  
  234.         lea    IndexName,a0
  235.         lea    Path,a1
  236.         moveq.l    #0,d0
  237.  
  238. .loop1:        tst.b    (a0)+
  239.         bne    .loop1
  240.  
  241. .loop2        cmp.b    #"_",-(a0)
  242.         bne    .loop2
  243.         addq.l    #1,a0
  244.  
  245. .loop3:        move.b    (a0)+,(a1)+
  246.         addq.l    #1,d0
  247.         cmp.b    #".",(a0)
  248.         bne    .loop3
  249.  
  250.         move.b    #" ",(a1)+
  251.         move.b    #" ",(a1)+
  252.         move.b    #"-",(a1)+
  253.         move.b    #" ",(a1)+
  254.         move.b    #" ",(a1)+
  255.         addq.l    #5,d0
  256.  
  257.         lea    FindText,a0
  258. .loop4:        move.b    (a0)+,(a1)+
  259.         addq.l    #1,d0
  260.         tst.b    (a0)
  261.         bne    .loop4
  262.  
  263.         move.l    File,d1        ; File Handle
  264.         move.l    #Path,d2    ; Buffer
  265.         move.l    d0,d3
  266.         move.l    DosBase,a6
  267.         jsr    -48(a6)        ; Write
  268.  
  269.         cmp.b    #"S",Short
  270.         beq    HeaderShort
  271.  
  272.         move.l    File,d1        ; File Handle
  273.         move.l    #AGHead2,d2    ; Buffer
  274.         move.l    #AGEndB,d3
  275.         move.l    DosBase,a6
  276.         jsr    -48(a6)        ; Write
  277.         bra    NoHeaderGuide
  278.  
  279. HeaderShort:    move.l    File,d1        ; File Handle
  280.         move.l    #AGHead3,d2    ; Buffer
  281.         move.l    #AGEndC,d3
  282.         move.l    DosBase,a6
  283.         jsr    -48(a6)        ; Write
  284.  
  285. NoHeaderGuide:
  286.         move.l    MemBase,a0
  287.         move.l    a0,PtFile
  288.         move.l    a0,a5
  289.  
  290. CicloProgramma:
  291.  
  292.         lea    FindText,a1    ; Testo da cercare
  293.         tst.b    (a1)
  294.         beq    FillAree
  295.  
  296.         move.l    a5,a0        ; Buffer di ricerca
  297.  
  298.         lea    Switch+1,a3
  299.         cmp.b    #"D",(a3)
  300.         bne    .CercaTesto
  301.         bsr    CercaDir
  302.         bra    .Continua
  303.  
  304. .CercaTesto:    bsr    CercaTesto
  305. .Continua:    tst.b    d0        ; -1 = errore, 0 = OK
  306.         bne    FineProg
  307.         move.l    a0,a5
  308.  
  309. FillAree:    lea    AGLine,a1
  310.         move.l    #254,d0
  311. .Fill1:        move.b    #$00,(a1)+
  312.         dbra    d0,.Fill1
  313.  
  314.         lea    AGLine,a1
  315.         move.l    FileWidth,d0
  316.         addq.l    #2,d0
  317. .Fill:        move.b    #" ",(a1)+
  318.         dbra    d0,.Fill
  319.         move.b    #$00,(a1)
  320.  
  321.         move.l    a5,a0
  322.  
  323.         move.l    a0,PtFile
  324.         lea    AGLine,a1
  325.         move.b    #"@",(a1)+
  326.         move.b    #"{",(a1)+
  327.         move.b    #'"',(a1)+
  328.  
  329. CopiaFile:    move.b    (a0)+,(a1)+
  330.         tst.b    (a1)
  331.         beq    FineNome
  332.         cmp.b    #"~",(a0)
  333.         beq    FindFine
  334.         bra    CopiaFile
  335.  
  336. FindFine    tst.b    (a1)+
  337.         bne    FindFine
  338.         subq.l    #1,a1
  339.  
  340. FineNome:    move.b    #'"',(a1)+
  341.         move.b    #' ',(a1)+
  342.  
  343.         move.l    a0,PtDir
  344.  
  345.         lea    AGCommand,a2
  346. CopiaComm:    move.b    (a2)+,(a1)+
  347.         tst.b    (a2)
  348.         bne    CopiaComm
  349.  
  350.         lea    NrDisco,a2
  351. CopiaNumDisk1:    move.b    (a2)+,(a1)+
  352.         tst.b    (a2)
  353.         bne    CopiaNumDisk1
  354.  
  355. .FindDir:    cmp.b    #"~",(a0)+
  356.         beq    CopiaDir1
  357.         bra    .FindDir
  358.  
  359. CopiaDir1:    move.l    a1,PtPath
  360. .CopiaDir:    move.b    (a0)+,(a1)+
  361.         cmp.b    #"~",(a0)
  362.         bne    .CopiaDir
  363.         move.b    #"/",(a1)+
  364.  
  365.         move.l    PtFile,a0
  366. .CopiaFile:    move.b    (a0)+,(a1)+
  367.         cmp.b    #"~",(a0)
  368.         bne    .CopiaFile
  369.         move.b    #'"',(a1)+
  370.         move.b    #'}',(a1)+
  371.         move.b    #' ',(a1)+
  372.  
  373.         move.l    a1,a5
  374.  
  375.         move.l    DirWidth,d0
  376.         subq.l    #1,d0
  377. .Fill:        move.b    #" ",(a1)+
  378.         dbra    d0,.Fill
  379.         move.b    #$00,(a1)
  380.         move.l    a5,a1
  381.  
  382. .FindDirArea:    cmp.b    #"~",(a0)+
  383.         beq    CopiaDir
  384.         bra    .FindDirArea
  385.  
  386. CopiaDir:    cmp.b    #"S",Short
  387.         beq    FinePathArea
  388.  
  389. .CopiaDir:    move.b    (a0)+,(a1)+
  390.         tst.b    (a1)
  391.         beq    FinePathArea
  392.         cmp.b    #"~",(a0)
  393.         beq    FinePath
  394.         bra    .CopiaDir
  395.  
  396. FinePath:    tst.b    (a1)+
  397.         bne    FinePath
  398.         subq.l    #1,a1
  399.  
  400. FinePathArea:    move.b    #" ",(a1)+
  401.  
  402.  
  403. FindSize:    cmp.b    #"~",(a0)+
  404.         bne    FindSize
  405.  
  406. CopiaSize:    cmp.b    #"~",2(a0)
  407.         beq    .CopiaSizeS2
  408.         cmp.b    #"~",3(a0)
  409.         beq    .CopiaSizeS1
  410.         bra    .CopiaSize
  411.  
  412. .CopiaSizeS2:    move.b    #" ",(a1)+
  413. .CopiaSizeS1:    move.b    #" ",(a1)+
  414. .CopiaSize:    move.b    (a0)+,(a1)+
  415.         cmp.b    #"~",(a0)
  416.         bne    .CopiaSize
  417.  
  418.         move.b    (a0)+,(a1)
  419.         move.b    #" ",(a1)+    ; spazio dopo size
  420. ; Numero Disco
  421.         cmp.b    #"S",Short
  422.         beq    .finedisco
  423.  
  424.         lea    NrDisco,a2
  425.  
  426.         tst.b    2(a2)
  427.         beq    .uno
  428.         move.b    (a2)+,(a1)+
  429.         move.b    (a2)+,(a1)+
  430.         bra    .finedisco
  431. .uno:        move.b    #" ",(a1)+
  432.         move.b    (a2)+,(a1)+
  433. .finedisco:    move.b  #" ",(a1)+
  434.         move.b    #'@',(a1)+
  435.         move.b    #'{',(a1)+
  436.         move.b    #'"',(a1)+
  437.  
  438. CopiaCommento:    move.b    (a0)+,(a1)+
  439.         cmp.b    #10,(a0)
  440.         bne    CopiaCommento
  441.         move.b    #'"',(a1)+
  442.         move.b    #" ",(a1)+
  443.  
  444.         cmp.b    #"~",-3(a0)
  445.         bne    .go
  446.         cmp.b    #"N",-2(a0)
  447.         bne    .go
  448.         cmp.b    #"C",-1(a0)
  449.         bne    .go
  450.         cmp.b    #$0a,-0(a0)
  451.         bne    .go
  452.  
  453.         lea    AGNoComment,a2
  454. .CopyNoComment:    move.b    (a2)+,(a1)+
  455.         tst.b    (a2)
  456.         bne    .CopyNoComment
  457.         bra    FineCommento
  458.  
  459. .go:        lea    AGCommand,a2
  460. .CopiaComm:    move.b    (a2)+,(a1)+
  461.         tst.b    (a2)
  462.         bne    .CopiaComm
  463.  
  464.         lea    NrDisco,a2
  465. CopiaNumDisk2:    move.b    (a2)+,(a1)+
  466.         tst.b    (a2)
  467.         bne    CopiaNumDisk2
  468.  
  469.         move.l    PtPath,a2
  470. .CopiaPath:    move.b    (a2)+,(a1)+
  471.         cmp.b    #" ",(a2)
  472.         bne    .CopiaPath
  473.  
  474. .FindEnd:    cmp.b    #'"',-(a1)
  475.         bne    .FindEnd
  476.  
  477.         move.b    #" ",(a1)+
  478.         move.b    #"C",(a1)+    ; Identifica il commento
  479.         move.b    #'"',(a1)+
  480.         move.b    #"}",(a1)+
  481.  
  482. FineCommento:    move.b    (a0)+,(a1)+    ; LF
  483.         move.b    #$00,(a1)+    ; Fine riga
  484.         move.l    a0,a5
  485.  
  486. ;        move.l    #AGLine,d1
  487. ;        move.l    DosBase,a6
  488. ;        jsr    -$3b4(a6)    ; PutStr
  489.  
  490.         lea    AGLine,a1
  491.         moveq.l    #0,d3
  492. conta:        addq.l    #1,d3
  493.         tst.b    (a1)+
  494.         bne    conta
  495.         subq.l    #1,d3
  496.  
  497.         move.l    File,d1        ; File Handle
  498.         move.l    #AGLine,d2    ; Buffer header IFF
  499.         move.l    DosBase,a6
  500.         jsr    -48(a6)        ; Write
  501.  
  502.         addq.l    #1,FileCounter
  503.  
  504.         move.l    EndFile,d0
  505.         cmp.l    d0,a5
  506.         bge    FineProg
  507.         bra    CicloProgramma
  508.  
  509. ;--------------------------------------------------------------
  510. FineProg:    lea    Switch+1,a3
  511.         cmp.b    #"A",(a3)
  512.         beq    CloseDestFile
  513.  
  514. Footer:        lea    NrEntry,a1
  515.         move.b    #$0a,(a1)+
  516.  
  517.         move.l    FileCounter,d2
  518.         tst.b    d2
  519.         beq    AddStringa0
  520.         cmp.b    #1,d2
  521.         beq    AddStringa1
  522.         move.l    A1,-(SP)
  523.         bsr    Decl
  524.         move.l    (SP)+,A1
  525.  
  526.         lea    ConBinDec+2,a0
  527. Uguale:        cmp.b    #"0",(a0)+
  528.         beq    Uguale
  529.         subq.l    #1,a0
  530.  
  531. CopiaLenght:    move.b    (a0)+,(a1)+
  532.         cmp.b    #"0",(a0)
  533.         blt    AddStringa
  534.         cmp.b    #"9",(a0)
  535.         bhi    AddStringa
  536.         bra    CopiaLenght
  537.  
  538. AddStringa0:    lea    TxNote0,a0
  539.         bra    CopiaNota
  540. AddStringa1:    lea    TxNote1,a0
  541.         bra    CopiaNota
  542. AddStringa:    lea    TxNote2,a0
  543. CopiaNota:    move.b    (a0)+,(a1)+
  544.         tst.b    (a0)
  545.         bne    CopiaNota
  546.  
  547.         lea    AGEnd,a0
  548. CopiaEnd:    move.b    (a0)+,(a1)+
  549.         tst.b    (a0)
  550.         bne    CopiaEnd
  551.  
  552.         lea    NrEntry,a1
  553.         moveq.l    #0,d3
  554. ContaLenght:    addq.l    #1,d3
  555.         tst.b    (a1)+
  556.         bne    ContaLenght
  557.         subq.l    #1,d3
  558.  
  559.         move.l    File,d1        ; File Handle
  560.         move.l    #NrEntry,d2    ; Buffer
  561.         move.l    DosBase,a6
  562.         jsr    -48(a6)        ; Write
  563.  
  564.         move.l    File,d1        ; File Handle
  565.         move.l    #AGEnd,d2    ; Buffer
  566.         move.l    #10,d3
  567.         move.l    DosBase,a6
  568.         jsr    -48(a6)        ; Write
  569.  
  570. CloseDestFile:    move.l    File,d1
  571.         move.l    DosBase,a6
  572.         jsr    -36(a6)        ;Close
  573.  
  574.         lea    Switch+1,a3
  575.         cmp.b    #"A",(a3)
  576.         beq    .SalvaCounter
  577.         bra    Print
  578.  
  579. .DeleteCounter:    move.l    #CounterFile,d1
  580.         move.l    DosBase,a6
  581.         jsr    -72(a6)        ; DeleteFile
  582.         bra    CloseDosBase
  583.  
  584. .SalvaCounter:    move.l    #CounterFile,d1
  585.         move.l    #1006,d2    ; NewFile
  586.         move.l    DosBase,a6
  587.         jsr    -30(a6)        ; Open
  588.         tst.l    d0
  589.         beq    Print
  590.         move.l    d0,File
  591.  
  592.         move.l    d0,d1        ; File Handle
  593.         move.l    #FileCounter,d2    ; Buffer
  594.         move.l    #4,d3
  595.         move.l    DosBase,a6
  596.         jsr    -48(a6)        ; Write
  597.  
  598.         move.l    File,d1
  599.         move.l    DosBase,a6
  600.         jsr    -36(a6)        ;Close
  601.  
  602. ;=================================================================
  603.  
  604. Print:    move.l    #GuideName,d1
  605.     move.l    DosBase,a6
  606.     jsr    -$3b4(a6)    ; PutStr
  607.  
  608.     move.l    #TxtSuccess,d1
  609.     move.l    DosBase,a6
  610.     jsr    -$3b4(a6)    ; PutStr
  611.  
  612. FreeMem:
  613.     move.l    FileLen,d0
  614.     add.l    #16,d0
  615.     move.l    MemBase,a1
  616.     sub.l    #8,a1
  617.     move.l    4,a6
  618.     jsr    -210(a6)    ; FreeMem
  619.  
  620. UnLock:    move.l    Lock,d1
  621.     move.l    DosBase,a6
  622.     jsr    -90(a6)        ; UnLOck
  623.  
  624. CloseDosBase:
  625.     move.l    DosBase,a1
  626.     move.l    4,a6
  627.     jsr    -414(a6)    ; CloseLibrary
  628.     clr.l    d0
  629. rts:    rts
  630.  
  631. ;------------------------------------------------------------
  632. MakeUpperCase:
  633.     cmp.b    #"a",d0
  634.     blt    .rts
  635.     cmp.b    #"z",d0
  636.     bhi    .rts
  637.     bclr    #5,d0
  638. .rts:    rts
  639.  
  640. ;------------------------------------------------------------
  641. ; Gestione Errori
  642.  
  643. NoFile:    move.l    #TxtSourceErr,d1
  644.     move.l    DosBase,a6
  645.     jsr    -$3b4(a6)    ; PutStr
  646.     bra    CloseDosBase
  647.  
  648. NoSuff:    move.l    #TxtSuffErr,d1
  649.     move.l    DosBase,a6
  650.     jsr    -$3b4(a6)    ; PutStr
  651.     bra    CloseDosBase
  652.  
  653. NoDest:    move.l    #TxtDestErr,d1
  654.     move.l    DosBase,a6
  655.     jsr    -$3b4(a6)    ; PutStr
  656.     bra    FreeMem
  657.  
  658. NoArgs:    move.l    #TxtUsage,d1
  659.     move.l    DosBase,a6
  660.     jsr    -$3b4(a6)    ; PutStr
  661.     bra    CloseDosBase
  662.  
  663. ;-------------------------------------------------------------
  664. CercaTesto:    movem.l A1-A2,-(SP)    ; a0 = buffer, a1 = testo
  665.         move.l    a1,a2
  666.  
  667. .Loop:        tst.b    (a1)
  668.         beq    .Trovato
  669.  
  670.         move.b    (a0),d0
  671.         tst.b    d0
  672.         beq    .NoMatch
  673.  
  674.         cmp.b    #"a",d0
  675.         blt    .Upper        ; e' inferiore
  676.         cmp.b    #"z",d0
  677.         bhi    .Upper        ; e' superiore
  678.         bclr    #5,d0        ; Force Uppercase
  679.  
  680. .Upper:        cmp.b    (a1),d0
  681.         beq    .Next
  682.  
  683.         move.l    a2,a1        ; Ripristina il ptr del testo
  684.         addq.l    #1,a0
  685.         bra    .Loop
  686.  
  687. .Next:        addq.l    #1,a1
  688.         addq.l    #1,a0
  689.         bra    .Loop
  690.  
  691. .NoMatch:    move.l    #-1,d0
  692.         movem.l (SP)+,A1-A2
  693.         rts
  694.  
  695. .Trovato:    tst.b    -1(a0)
  696.         beq    .Inizio
  697.         cmp.b    #$0a,-1(a0)
  698.         beq    .Inizio
  699.         subq.l    #1,a0
  700.         bra    .Trovato
  701.  
  702. .Inizio:    moveq.l    #0,d0
  703.         movem.l (SP)+,A1-A2
  704.         rts
  705.  
  706. ;-------------------------------------------------------------
  707. CercaDir:    movem.l A1-A2,-(SP)    ; a0 = buffer, a1 = testo
  708.         move.l    a1,a2
  709.  
  710. .CercaDir:    cmp.b    #"~",(a0)+
  711.         bne    .CercaDir
  712.  
  713. .Loop:        tst.b    (a1)
  714.         beq    .Trovato
  715.  
  716.         move.b    (a0),d0
  717.         tst.b    d0
  718.         beq    .NoMatch
  719.  
  720.         cmp.b    #"~",d0
  721.         beq    .FineDirArea
  722.  
  723.         cmp.b    #"a",d0
  724.         blt    .Upper        ; e' inferiore
  725.         cmp.b    #"z",d0
  726.         bhi    .Upper        ; e' superiore
  727.         bclr    #5,d0        ; Force Uppercase
  728.  
  729. .Upper:        cmp.b    (a1),d0
  730.         beq    .Next
  731.  
  732. .NextR:        move.l    a2,a1        ; Ripristina il ptr del testo
  733.         addq.l    #1,a0
  734.         bra    .Loop
  735.  
  736. .Next:        addq.l    #1,a1
  737.         addq.l    #1,a0
  738.         bra    .Loop
  739.  
  740. .NoMatch:    move.l    #-1,d0
  741.         movem.l (SP)+,A1-A2
  742.         rts
  743.  
  744. .FineDirArea:    cmp.b    (a1),d0
  745.         beq    .Trovato
  746.  
  747.         cmp.b    #$0a,(a0)+
  748.         bne    .FineDirArea
  749.         move.l    a2,a1        ; Ripristina il ptr del testo
  750.         bra    .CercaDir
  751.  
  752. .Trovato:    cmp.b    #"~",(a0)
  753.         bne    .NextR
  754.         move.l    FindLen,d1
  755.         sub.l    d1,a0
  756.         cmp.b    #"~",(a0)
  757.         bne    .FalsoAllarme
  758.  
  759. .Trovato2:    tst.b    -1(a0)
  760.         beq    .Inizio
  761.         cmp.b    #$0a,-1(a0)
  762.         beq    .Inizio
  763.         subq.l    #1,a0
  764.         bra    .Trovato2
  765.  
  766. .Inizio:    moveq.l    #0,d0
  767.         movem.l (SP)+,A1-A2
  768.         rts
  769.  
  770. .FalsoAllarme:    add.l    d1,a0
  771.         bra    .FineDirArea
  772.  
  773. StrToUpper:    movem.l a1,-(SP)
  774. .NextChar:    cmp.b    #"a",(a1)
  775.         blt    .TestFine    ; e' inferiore
  776.         cmp.b    #"z",(a1)
  777.         bhi    .TestFine    ; e' superiore
  778.         bclr    #5,(a1)        ; Force Uppercase
  779. .TestFine:    tst.b    (a1)+
  780.         bne    .NextChar
  781.         movem.l (SP)+,a1
  782.         rts
  783.  
  784. ;-------------------------------------------------------------
  785. ReadArg:cmp.b    #$0a,(a0)    ; se Line Feed...
  786.     beq    .Exit        ; esce.
  787.     cmp.b    #$00,(a0)    ; se Nullo...
  788.     beq    .Exit        ; esce.
  789.     cmp.b    #'"',(a0)    ; Se incontra le virgolette "
  790.     beq    .Virg        ; usa l'apposita routine
  791.     cmp.b    #"'",(a0)    ; Se incontra le virgolette '
  792.     beq    .Virg        ; usa l'apposita routine
  793.     cmp.b    #" ",(a0)    ; Cerca inizio testo
  794.     bne    .loop        ; se si loop
  795.     addq    #1,a0
  796.     bra    ReadArg        ; se no, cicla.
  797. .loop:    cmp.b    #$0a,(a0)    ; se Line Feed
  798.     beq    .Exit
  799.     cmp.b    #$20,(a0)    ; o un'altro spazio
  800.     beq    .Exit        ; esce
  801.     move.b    (a0)+,(a1)+    ; copia lettera
  802.     bra    .loop        ; e cicla
  803. .Virg:    addq.l    #1,a0
  804. .V:    cmp.b    #$0a,(a0)    ; se Line Feed
  805.     beq    .Exit
  806.     cmp.b    #'"',(a0)    ; o un'altra virgoletta
  807.     beq    .ExV        ; esce
  808.     cmp.b    #"'",(a0)
  809.     beq    .ExV
  810.     move.b    (a0)+,(a1)+    ; copia lettera
  811.     bra    .V        ; e cicla
  812. .ExV:    addq    #1,a0
  813. .Exit:    rts
  814.  
  815. NL:    move.l    #NewLineChar,d1
  816.     move.l    DosBase,a6
  817.     jsr    -$3b4(a6)    ; PutStr
  818.     rts
  819. *----------------------------------------------------------
  820. * --  Conversione di d2.l -> Dec-String a partire da (a4) - (d0,d1,d2-a4,a5)
  821.  
  822. Decl:    moveq    #7,d0        Conversione di 8 Cifre
  823.     lea    ConBinDec+1,a4    +1 per spazio per segno
  824.     lea    .Table,a5    Tabella
  825.  
  826. .Next:    moveq    #'0',d1        Inizio con cifra '0'
  827. .Dec:    addq    #1,d1        Cifra + 1
  828.     sub.l    (a5),d2        c'e' ancora qualcosa?
  829.     bcc.s    .Dec        se si
  830.     subq    #1,d1        correggi cifra
  831.     add.l    (a5),d2        quindi anche
  832.     move.b    d1,(a4)+    Cifra -> Buffer
  833.     lea    4(a5),a5    next power_10
  834.     dbra    d0,.Next    for 8 Digits
  835.     rts
  836.  
  837.     cnop    0,4
  838. .Table:    dc.l    10000000
  839.     dc.l    1000000
  840.     dc.l    100000
  841.     dc.l    10000
  842.     dc.l    1000
  843.     dc.l    100
  844.     dc.l    10
  845.     dc.l    1
  846.  
  847. AGCommand:    dc.b    'system "ICD:Bin/E ',0
  848. AGNoComment:    dc.b    "LINK ICD:Bin/Help.guide/NOCOM}",0
  849. AGEnd:        dc.b    "@ENDNODE",10,10,0
  850. TxNote0:    dc.b    "There is no archive to list.",10,10,0
  851. TxNote1:    dc.b    "One file listed.",10,10,0
  852. TxNote2:    dc.b    " files listed",10,10,0
  853.  
  854. AGHead1:    dc.b    '@database Archive',10
  855. AGHa:        dc.b    '@node main "'
  856. AGEndA:    EQU    *-AGHead1
  857.  
  858. AGHead2:    dc.b    '"',10,10,'@{"Filename          " LINK ICD:Bin/Help.guide/FILENAME} Directory  Size CD @{"Description" LINK ICD:Bin/Help.guide/DESCRIPTION }',10
  859. AGb:        dc.b    '-----------------------------------------------------------',10
  860. AGEndB:    EQU    *-AGHead2
  861. AGHead3:    dc.b    '"',10,10,'@{"Filename          " LINK ICD:Bin/Help.guide/FILENAME}  Size  @{"Description" LINK ICD:Bin/Help.guide/DESCRIPTION }',10
  862. AGc:        dc.b    '-----------------------------------------------',10
  863. AGEndC:    EQU    *-AGHead3
  864.  
  865.  
  866. * * *  Campo dati
  867.     cnop 0,8
  868.  
  869.  
  870. DosName:    dc.b    "dos.library",0
  871. NewLineChar:    dc.b    10,0
  872.  
  873. TxtUsage:    dc.b    10,"Uso: IndiceAG <File.indice> [file.guide] [cercare] [-D,-A,]",10,10
  874.         dc.b    "Questo comando crea un indice in formato AmigaGuide, se come parametro",10
  875.         dc.b    "gli viene passato un file EARSANCDx.indice creato con CreaIndice.",10,10,0
  876. TxtSourceErr:    dc.b    10,"ERROR! Can't find Source File!",10,10,0
  877. TxtSuffErr:    dc.b    10,"ERROR! The Source file Must be have the suffix .index .",10,10,0
  878. TxtDestErr:    dc.b    10,10,"ERROR! Can't open destination file!",10,10,0
  879.  
  880. TxtSuccess:    dc.b    " maked!",10,10,0
  881.  
  882. CounterFile:    dc.b    "T:Counter.temp",0
  883.  
  884.     section AreaDati,BSS
  885.  
  886. FIB:        ds.b    $104
  887.  
  888. DosBase:    ds.l    1
  889. Lock:        ds.l    1
  890. FileLen:    ds.l    1
  891. MemBase:    ds.l    1
  892. File:        ds.l    1
  893. EndFile:    ds.l    1
  894. PtFile:        ds.l    1
  895. PtDir:        ds.l    1
  896. PtPath:        ds.l    1
  897. FileWidth:    ds.l    1
  898. DirWidth:    ds.l    1
  899. FileCounter:    ds.l    1
  900. FindLen:    ds.l    1
  901.  
  902. NrDisco        ds.b    8
  903. ConBinDec:    ds.b    12
  904. NrEntry:    ds.b    80
  905. Switch:        ds.b    80
  906. Path:        ds.b    80
  907. Short:        ds.b    4
  908.  
  909. IndexName:    ds.b    256
  910. GuideName:    ds.b    256
  911. FindText:    ds.b    256
  912.  
  913. AGLine:        ds.b    512
  914.