home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / disks / disk415.lzh / FileTypes / FileTypes.asm < prev    next >
Assembly Source File  |  1990-12-15  |  16KB  |  491 lines

  1.  
  2. *FileTypes
  3. *erkennt einige File-Typen in einem bestimmten Verzeichnis
  4. *geschrieben von Sebastian Leske im November 1989
  5. *V1.2 12./13./23. Dezember 1989
  6. *Farbmarkierung bei Erkannt-Meldungen, Prg. arbeitet mit CD
  7. *V1.21 30. Dezember 1989
  8. *Arbeitet jetzt anders mit CD (keine Sonderbehandlung f. leere
  9. *Kommandozeile), entfernt angefordertes Lock auch wieder
  10. *V2.0 September 1990
  11. *es können nach Wahl nur bestimmte Dateitypen ausgegeben werden,
  12. *die Typangabe steht jetzt hinter dem Dateinamen,
  13. *bei einem Lesefehler bricht das Programm nicht mehr ab,
  14. *es wird die Unterroutine Kommandozeilenauswertung verwendet
  15. *verschiedene interne Änderungen, einige Kleinigkeiten
  16. *V2.1 1.-3. Dezember 1990
  17. *Angabe der Programmdateilänge als Virusschutz
  18. *Fehlerkorrektur: CurrOut v. erster Fehlermöglichkeit (unbek.
  19. *Schlüsselbuchstabe) holen, sonst Absturz bei Fehlermeldung
  20. *Programm an Fred FISH geschickt
  21.  
  22.  
  23.     incdir ":Include/"
  24.     include "libraries/dos_lib.i"
  25.     include "exec/exec_lib.i"
  26.  
  27. *Anfangskram
  28.  
  29.     move.l    d0,ParZL        ;Parameterzeile sichern...
  30.     move.l    a0,ParZAdr        
  31.  
  32.     move.l    #0,OldCD        ;Speicher f. altes CD auf Null
  33.  
  34.     move.l    #DOSName,a1        ;DOS-Lib öffnen...
  35.     moveq    #0,d0
  36.     move.l    4,a6
  37.     jsr    _LVOOpenLibrary(a6)
  38.     tst.l    d0
  39.     beq    Ende
  40.     move.l    d0,DOSBase
  41.  
  42.     move.l    DOSBase,a6        ;Output-Handle holen...
  43.     jsr    _LVOOutput(a6)
  44.     move.l    d0,CurrOut        ;...und speichern
  45.  
  46.     jsr    PZAusw            ;Parameterzeile auswerten lassen
  47.     tst.l    d0            ;Fehler bei der Auswertung ?
  48.     bne    KAuswF            ;nein, dann weiter    
  49.     moveq.l    #3,d0            ;Fehler Nr. 3...
  50.     jsr    Fehler            ;melden
  51.     rts                ;und Programm beenden
  52.  
  53. KAuswF    jsr    EtwasAusg        ;testen: kein Schalter auf Ausgabe?
  54.  
  55. KEAnf    
  56. *Auskunft gewünscht ?
  57.     cmpi.l    #2,ParZL        ;Länge der Parmzeile gleich 1 ?
  58.     bne    DateiZugr        ;nein, dann normaler Zugriff
  59.     move.l    ParZAdr,a0        ;Anfangsadresse d. Parz. holen
  60.     cmpi.b    #"?",(a0)
  61.     bne    DateiZugr        ;nein, dann normaler Zugriff
  62.     bra    Auskunft        ;ja, dann Auskunft geben
  63.                     
  64. DateiZugr
  65.     lea    Par1,a0            ;Adresse d. ersten Parameters holen
  66.     move.l    Par1L,d0        ;Länge holen (1. Par.=Dateiname)
  67.     move.b    #0,0(a0,d0.l)        ;Leerzeichen hinters Namensende(f.DOS)
  68.     move.l    a0,DatName        ;Zeiger auf Namen speichern
  69.     move.l    a0,d1            ;Zeiger auf Namen nach d1
  70.     moveq    #-2,d2            ;Lesezugriff
  71.     move.l    DOSBase,a6        ;DOSBase nach a6
  72.     jsr    _LVOLock(a6)        ;und auf Verzeichnis zugreifen
  73.     tst.l    d0            ;gefunden ?
  74.     bne    VzGef            ;ja, dann weiter
  75.     moveq    #0,d0            ;sonst Fehlermeldung nach d0
  76.     jsr    Fehler            ;Fehler melden
  77.     bra    DOSzu            ;und Programm beenden
  78. VzGef    move.l    d0,DirLock        ;Directory-Lock speichern
  79.     move.l    d0,d1            ;Lock nach d1
  80.     move.l    #InfoBlock,d2        ;Zeiger auf Block f. Daten nach d2
  81.     jsr    _LVOExamine(a6)        ;und Infos holen
  82.     tst.l    d0            ;Fehler aufgetreten ?
  83.     bne    ÜbOK            ;nein, dann weiter
  84.     moveq    #0,d0            ;sonst Fehlermeldung nach d0
  85.     jsr    Fehler            ;Fehler melden
  86.     bra    DOSzu            ;und Programm beenden
  87. ÜbOK    lea    InfoBlock,a0        ;Adresse d. InfoBlocks holen
  88.     tst.l    4(a0)            ;und Eintragstyp prüfen
  89.     bpl    Dir            ;Typ positiv=Unterverzeichnis
  90.  
  91. Datei1    move.l    DatName,d1        ;Zeiger auf Dateinamen nach d1
  92.     jsr    DatPrüf            ;Dateityp prüfen
  93.     bra    DOSzu            ;und Programm beenden
  94.  
  95. Dir    move.l    DirLock,d1        ;Directory-Lock nach d1
  96.     jsr    _LVOCurrentDir(a6)    ;und Unterdirectory=aktuelles Dir
  97.     move.l    d0,OldCD        ;vorheriges akt. Directory speichern
  98. DirLoop    move.l    DirLock,d1        ;Directory-Lock nach d1
  99.     move.l    #InfoBlock,d2        ;Adresse d. InfoBlocks holen
  100.     jsr    _LVOExNext(a6)        ;und nächsten Eintrag laden
  101.     tst.l    d0            ;noch Einträge da ?
  102.     beq    DirEnde            ;nein, dann Überprüfung beenden
  103.     lea    InfoBlock,a0        ;Adresse d. InfoBlocks holen
  104.     tst.l    4(a0)            ;und auf Unterverzeichnis prüfen
  105.     bmi    Datei2            ;kein Unterverzeichnis, dann weiter
  106.     tst.b    DirS            ;Schalter prüfen: U.verz. ausgeben?
  107.     beq    VznAusg            ;nein, dann zum Schleifenende
  108.     jsr    NamAusg            ;Namen ausgeben lassen
  109.     move.l    CurrOut,d1        ;Ausgabe-Handle nach d1
  110.     move.l    #DirText,d2        ;zu schreibender Text nach d2
  111.     move.l    #12,d3            ;Textlänge nach d3
  112.     jsr    _LVOWrite(a6)        ;und Verzeichnis-Kennung ausgeben
  113. VznAusg    bra    DirLoop            ;und weiter lesen
  114.  
  115. Datei2    move.l    #InfoBlock,d1        ;Adresse d. InfoBlocks holen
  116.     add.l    #8,d1            ;Zeiger auf Eintragsnamen nach d1,
  117.     jsr    DatPrüf            ;Dateityp prüfen
  118.     bra    DirLoop            ;und nächsten Eintrag lesen
  119.  
  120. DirEnde    jsr    _LVOIoErr(a6)        ;Fehlernummer holen
  121.     cmpi.l    #232,d0            ;Fehler No_More_Entries ?
  122.     beq    DOSzu            ;ja, dann weiter
  123.     moveq    #2,d0            ;sonst Fehlermeldung nach d0
  124.     jsr    Fehler            ;Fehler melden
  125.     bra    DOSzu            ;und Programm beenden
  126.  
  127. DOSzu    move.l    DOSBase,a6
  128.     move.l    OldCD,d1        ;altes aktuelles Verzeichnis holen
  129.     tst.l    d1            ;wurde es überhaupt abgespeichert?
  130.     beq    KOldCD            ;nein, dann weiter
  131.     jsr    _LVOCurrentDir(a6)    ;sonst wieder setzen
  132. KOldCD    move.l    DirLock,d1        ;Lock holen
  133.     tst.l    d1            ;Lock da ?
  134.     beq    DZ            ;nein, dann weiter
  135.     jsr    _LVOUnLock(a6)        ;sonst Lock entfernen    
  136. DZ    move.l    DOSBase,a1        ;DOS-Library schließen...
  137.     move.l    4,a6
  138.     jsr    _LVOCloseLibrary(a6)
  139. Ende    rts                ;und ENDE
  140.  
  141.  
  142. *Auskunft über das Programm geben
  143. Auskunft
  144.     move.l    DOSBase,a6        ;DOSBase nach a6
  145.     move.l    CurrOut,d1        ;Ausgabe-Handle nach d1
  146.     move.l    #AuskunftText,d2    ;zu schreibender Text nach d2
  147.     move.l    AuskunftTextL,d3    ;Textlänge nach d3
  148.     jsr    _LVOWrite(a6)        ;und Auskunfts-Text ausgeben
  149.     bra    DOSzu            ;Programm beenden
  150.  
  151. *Fehler melden
  152. Fehler
  153.     asl.l    #3,d0            ;Fehlernr. *8 (wg. Offsetgebrauch)
  154.     lea    FTabelle,a0        ;Adresse der Tabelle f. FMeldungen
  155.     move.l    0(a0,d0.l),d2        ;Fehlertextadresse nach d2
  156.     move.l    4(a0,d0.l),d3        ;Textlänge nach d3
  157.     move.l    DOSBase,a6        ;DOSBase nach a6
  158.     move.l    CurrOut,d1        ;Ausgabe-Handle nach d1
  159.     jsr    _LVOWrite(a6)        ;und Fehlermeldung ausgeben
  160.     rts                ;wieder zurück
  161.  
  162. *Prüfen, ob kein Typ ausgegeben werden soll; wenn ja, alle auf
  163. *Ausgabe setzen
  164. EtwasAusg
  165.     tst.b    DirS            ;die drei Schalter für Verzeichnisse,
  166.     bne    EtwGes            ;unbekannte Dateien und IFF-Dateien
  167.     tst.b    UnbS            ;prüfen; wenn einer auf Ausgeben
  168.     bne    EtwGes            ;steht, beenden
  169.     tst.b    IFFS
  170.     bne    EtwGes
  171.     lea    PrüfTabelle,a0        ;Adresse d. Prüftabelle holen
  172. PrüSchl    tst.l    20(a0)            ;Schalter f. Ausgabe auf 1?
  173.     bne    EtwGes            ;ja, dann beenden
  174.     adda.l    #24,a0            ;Zeiger auf nächsten Eintrag
  175.     tst.l    0(a0)            ;Tabelle zu Ende?
  176.     bne    PrüSchl            ;nein, dann nächsten Eintrag bearbeiten
  177.  
  178.     move.b    #1,DirS            ;Alle Schalter auf Ausgabe:
  179.     move.b    #1,UnbS
  180.     move.b    #1,IFFS
  181.     lea    PrüfTabelle,a0        ;Adresse d. Prüftabelle holen
  182. SetSchl    move.l    #1,20(a0)        ;Schalter f. Ausgabe auf 1
  183.     adda.l    #24,a0            ;Zeiger auf nächsten Eintrag
  184.     tst.l    0(a0)            ;Tabelle zu Ende?
  185.     bne    SetSchl            ;nein, dann nächsten Eintrag bearbeiten
  186. EtwGes    rts                ;und zurück
  187.  
  188. *Datei öffnen und Typ prüfen
  189. DatPrüf
  190.     move.l    #1005,d2        ;Modus=Lesen aus bestehender Datei
  191.     jsr    _LVOOpen(a6)        ;und Datei öffnen
  192.     tst.l    d0            ;Fehler aufgetreten ?
  193.     bne    ÖffnOK            ;nein, dann weiter    
  194.     moveq    #1,d0            ;Fehlermeldung nach d0
  195.     jsr    Fehler            ;und Fehler melden...
  196.     rts                ;und Auswertung abbrechen
  197. ÖffnOK    move.l    d0,DatHand        ;Handle der Datei speichern
  198.     move.l    d0,d1            ;Datei-Handle nach d1
  199.     move.l    #DateiPuffer,d2        ;Zeiger auf Puffer nach d2
  200.     move.l    #50,d3            ;Anzahl der zu lesenden Zeichen
  201.     jsr    _LVORead(a6)        ;und in den Puffer lesen
  202.     tst.l    d0            ;Fehler aufgetreten ?
  203.     bpl    LesOK            ;nein, dann weiter
  204.     jsr    NamAusg            ;Dateinamen ausgeben
  205.     moveq    #1,d0            ;Fehlermeldung nach d0
  206.     jsr    Fehler            ;und Fehler melden...
  207.     move.l    DatHand,d1        ;Datei-Handle nach d1
  208.     jsr    _LVOClose(a6)        ;und Datei wieder schließen
  209.     rts                ;und Auswertung abbrechen
  210. LesOK    lea    DateiPuffer,a0        ;Zeiger auf Puffer nach a0
  211.     jsr    CheckDat        ;prüfen auf bekanntes Format
  212.     move.l    DOSBase,a6
  213.     move.l    DatHand,d1        ;Datei-Handle nach d1
  214.     jsr    _LVOClose(a6)        ;und Datei wieder schließen
  215. DatEnd    rts                ;und Rückkehr
  216.  
  217. *Prüfen, ob Dateianfang im Puffer zu einer IFF-Datei gehört
  218. CheckIFF
  219.     moveq    #1,d0            ;Rückgabewert für "IFF-Datei"
  220.     cmpi.b    #"F",0(a0)        ;Beginnt die Datei mit "FORM" ?
  221.     bne    NoIFF            ;Nein, dann ist es keine IFF-Datei
  222.     cmpi.b    #"O",1(a0)        ;
  223.     bne    NoIFF            ;
  224.     cmpi.b    #"R",2(a0)        ;
  225.     bne    NoIFF            ;
  226.     cmpi.b    #"M",3(a0)        ;
  227.     bne    NoIFF            ;
  228.     rts                ;Es ist eine IFF-Datei; zurück
  229. NoIFF    moveq    #0,d0            ;Rückgabewert für "keine IFF-Datei"
  230. IFFDat    rts                ;und zurück
  231.     
  232. *Auf bekannte Dateitypen (incl. IFF) prüfen
  233. CheckDat
  234.     lea    PrüfTabelle,a1        ;Zeiger auf Tabelle nach a1
  235. PrüLoop    move.l    (a1),a2            ;Zeiger auf gesp. Daten nach a2
  236.     cmp.l    #0,a2            ;nichts mehr zu vergleichen ?
  237.     beq    TestIFF            ;dann abbrechen
  238.     move.l    4(a1),d1        ;Länge der gesp. Daten nach d1 
  239.     move.l    a0,a3            ;Anfang des Dateipuffers nach a3
  240.     add.l    8(a1),a3        ;Lage der zu vergl. Daten nach a3
  241. Vergl    move.b    0(a3,d1.l),d0        ;Byte aus Puffer nach d0
  242.     cmp.b    0(a2,d1.l),d0        ;mit gesp. Daten vergleichen
  243.     bne    Ungl            ;falls ungleich, Vergleichen beenden
  244.     sub.l    #1,d1            ;nächstes Byte
  245.     tst.l    d1            ;Fertig ?
  246.     bne    Vergl            ;nein, dann weiter vergleichen
  247.  
  248.     tst.l    20(a1)            ;soll Typ ausgegeben werden?
  249.     beq    TnAusg            ;nein, dann Ausgabe überspringen
  250.     move.l    a1,-(sp)        ;a1 zwischenspeichern
  251.     jsr    NamAusg            ;Dateinamen ausgeben
  252.     move.l    (sp)+,a1        ;a1 zurückholen
  253.     move.l    CurrOut,d1        ;gefundenen Typ ausgeben:
  254.     move.l    12(a1),d2        ;Zeiger auf Text
  255.     move.l    16(a1),d3        ;Textlänge
  256.     jsr    _LVOWrite(a6)        ;und Typ ausgeben
  257. TnAusg    rts                ;Rückkehr
  258.  
  259. Ungl    add.l    #24,a1            ;nächster Eintrag
  260.     bra    PrüLoop            ;und vergleichen
  261. TestIFF    bsr    CheckIFF        ;auf IFF-Datei testen
  262.     tst.l    d0            ;Rückgabewert=0 ?
  263.     beq    Unbek            ;ja, dann auch keine IFF-Datei
  264.     tst.b    IFFS            ;IFF-Dateien aufführen?
  265.     beq    kIFF            ;nein, dann nichts ausgeben
  266. IFFTest    move.l    a0,a1            ;Zeiger auf Dateipufferanf. kopieren
  267.     add.l    #12,a1            ;Zeiger +12 (Ende der Typkennung)
  268.     lea    IFFLücke,a2        ;Zeiger auf Lücke im Ausgabetext
  269.     moveq    #3,d0            ;Schleifenzähler auf 3
  270. IFFloop    move.b    -(a1),-(a2)        ;und Kennung...
  271.     dbra    d0,IFFloop        ;...kopieren
  272.     jsr    NamAusg            ;Dateinamen ausgeben
  273.     move.l    CurrOut,d1        ;gefundenen Typ ausgeben:
  274.     move.l    #IFFText,d2        ;Zeiger auf Text
  275.     move.w    #IFFTextE-IFFText,d3    ;Textlänge
  276.     jsr    _LVOWrite(a6)        ;und Typ ausgeben
  277. kIFF    rts                ;Rückkehr
  278.  
  279. Unbek    tst.b    UnbS            ;unbekannte Dateien aufführen?
  280.     beq    KUnbek            ;nein, dann nichts ausgeben
  281.     jsr    NamAusg            ;Dateinamen ausgeben
  282.     move.l    CurrOut,d1        ;Ausgabe-Handle nach d1
  283.     move.l    #UnbekText,d2        ;zu schreibender Text nach d2
  284.     move.l    #20,d3            ;Textlänge nach d3
  285.     jsr    _LVOWrite(a6)        ;und Auskunfts-Text ausgeben
  286. KUnbek    rts                ;und Rückkehr
  287.  
  288. *Eintragsnamen ausgeben und Zeile bis in Spalte 30 auffüllen
  289. NamAusg    lea.l    InfoBlock,a5        ;Adresse d. InfoBlocks holen
  290.     add.l    #8,a5            ;Zeiger auf Eintragsnamen nach a5,
  291.     move.l    a5,a0            ;und nach a0
  292. LZähl    tst.b    (a0)+            ;End-Nullbyte gefunden ?
  293.     bne    LZähl            ;nein, dann weiterzählen
  294.     sub.l    #1,a0            ;Zähler korrigieren
  295.     suba.l    a5,a0            ;und Namenslänge ausrechnen
  296.     move.l    a0,d4            ;Namenslänge zwischenspeichern
  297.     move.l    CurrOut,d1        ;aktuelle Ausgabe setzen
  298.     move.l    a0,d3            ;Textlänge setzen
  299.     move.l    a5,d2            ;Textadresse setzen
  300.     move.l    DOSBase,a6
  301.     jsr    _LVOWrite(a6)        ;und Eintragsnamen ausgeben
  302.     move.l    #30,d3            ;so viele Leerzeichen fehlen noch...
  303.     sub.l    d4,d3            ;bis Spalte 30
  304.     move.l    #LeerZ,d2        ;Textadresse setzen
  305.     move.l    CurrOut,d1        ;aktuelle Ausgabe setzen
  306.     jsr    _LVOWrite(a6)        ;und Zeile auffüllen
  307.     rts                ;und zurück
  308.  
  309.  
  310. *CLI-Parameterzeilen-Auswertung V1.0
  311. *wertet CLI-Parameter im Format Befehl Parameter1 aParameter2  
  312. *bParameter3 cParameter4 etc. aus
  313. *geschrieben von Sebastian Leske im August/September 1990
  314.  
  315. PZAusw    move.l    ParZAdr,a6        ;Zeiger auf Anf d. P.zeile in a6
  316.     move.l    a6,d7
  317.     add.l    ParZL,d7        ;Endadresse d. Zeile ausrechnen
  318.     subq.l    #1,d7            ;Endadresse korr. (wg. CR am Ende)
  319.  
  320. * 1. Parameter kopieren (ggf. diesen Teil streichen)
  321. LZSpr1    cmpi.b    #32,(a6)+        ;Leerzeichen?
  322.     beq    LZSpr1            ;ja: weiterlesen
  323.     subq    #1,a6            ;Anf.adresse korrigieren
  324.     cmp.l    d7,a6            ;Ende der Eingabe erreicht ?
  325.     bge    AEnde            ;ja, dann beenden
  326.     lea    Par1,a0            ;Pufferadresse holen
  327.     jsr    ParKop            ;Parameter in Puffer kopieren
  328.     move.l    d0,Par1L        ;Länge des 1. Parameters speichern
  329. **??**    jsr    Par1Bearb        ;1. Par. bearbeiten lassen
  330.     cmp.l    d7,a6            ;Ende der Eingabe erreicht ?
  331.     bge    AEnde            ;ja, dann beenden
  332.     
  333. * restliche Parameter (mit Kennbuchstaben) holen
  334. ParSu
  335. LZSpr2    cmpi.b    #32,(a6)+        ;Leerzeichen ?
  336.     beq    LZSpr2            ;ja: weiterlesen
  337.     subq    #1,a6            ;Anf.adresse korrigieren
  338.     cmp.l    d7,a6            ;Ende der Eingabe erreicht ?
  339.     bge    AEnde            ;ja, dann beenden
  340.     move.b    (a6),d0            ;gefundenes Zeichen nach d0
  341. **??**    bclr.l    #5,d0            ;Umwandlung in Großbuchstaben
  342.     lea    KennLis,a0        ;Adr. d. Kennbuchstabenliste holen
  343. SuchAP    tst.w    (a0)            ;Listenende erreicht?
  344.     beq    PZFehler        ;ja -> Fehler
  345.     cmp.w    (a0)+,d0        ;Zeichen aus Liste vergleichen
  346.     beq    KennGef            ;Kennbuchstabe gefunden
  347.     addq.l    #4,a0            ;Zeiger auf nächstes Zeichen setzen
  348.     bra    SuchAP            ;weitersuchen
  349. KennGef    move.l    (a0),a5            ;Adresse d. zuständigen UPs holen
  350.     lea    Par,a0            ;Pufferadresse holen
  351.     jsr    ParKop            ;Parameter kopieren
  352.     move.l    d0,ParL            ;Länge des Parameters speichern
  353.     jsr    (a5)            ;AuswertungsUP aufrufen
  354.     cmp.l    d7,a6            ;Ende der Eingabe erreicht ?
  355.     bge    AEnde            ;ja, dann beenden
  356.     bra    ParSu            ;und nächstes Parameter suchen
  357.  
  358. AEnde    moveq.l    #-1,d0            ;kein Fehler aufgetreten (für's HP)
  359.     rts                ;und ENDE
  360.  
  361.  
  362. ***Unterprogramme***
  363. *der PZ-Auswertung
  364.  
  365. ParKop    move.l    #" ",d5            ;Standardtrennzeichen=Leerzeichen
  366.     cmpi.b    #34,(a6)        ;1. Zeichen=Anführungszeichen?
  367.     bne    KAnfz            ;Nein
  368.     move.l    #34,d5            ;ja, Trennzeichen=Anführungszeichen
  369.     addq.l    #1,a6            ;und Zeiger auf nächstes Zeichen
  370. KAnfz    moveq    #-1,d0            ;Längenz. auf 0 (-1 wg. Aufbau d. Schleife)
  371. KopP    move.b    (a6),(a0)+        ;Byte in Puffer kopieren
  372.     addq.l    #1,d0            ;mitzählen...
  373.     cmp.l    d7,a6            ;Ende der Eingabe erreicht?
  374.     bge    ParAE            ;ja, dann Ende
  375.     cmp.b    (a6)+,d5        ;Trennzeichen erreicht?
  376.     bne    KopP            ;nein, dann weiter kopieren        
  377. ParAE    rts                ;und wieder zurück
  378.  
  379. PZFehler
  380.     clr.l    d0            ;0 nach d0 heißt Fehler (für's HP)
  381.     rts                ;und ENDE
  382.  
  383. PZDir    move.b    #1,DirS
  384.     rts
  385.  
  386. PZaP    move.l    #1,PrüfTabelle+20
  387.     rts
  388.  
  389. PZUnb    move.b    #1,UnbS
  390.     rts
  391.  
  392. PZIFF    move.b    #1,IFFS
  393.     rts
  394.  
  395. ***Daten-Bereich***
  396.     SECTION DATA,DATA
  397.  
  398. DOSName    dc.b "dos.library",0
  399.  
  400. FT1    dc.b "Konnte nicht auf Directory/Datei zugreifen.",10
  401.     dc.b "Stimmt der Pfadname?",10
  402. FT2    dc.b "Kann nicht aus dieser Datei lesen!",10
  403. FT3    dc.b "Fehler aufgetreten beim Auslesen des Directory!",10
  404. FT4    dc.b "Unbekannter Kennbuchstabe in der Parameterzeile!",10
  405. FTEnde
  406.     cnop 0,4
  407. FTabelle
  408.     dc.l FT1,FT2-FT1
  409.     dc.l FT2,FT3-FT2
  410.     dc.l FT3,FT4-FT3
  411.     dc.l FT4,FTEnde-FT4
  412.  
  413. AuskunftText
  414.     dc.b "FileTypes [Directoryname|Dateiname] [a i d u]",10
  415.     dc.b "FileTypes V2.1",10
  416.     dc.b "© by Sebastian Leske",10
  417.     dc.b "Bergerhauserstr.17a, D-4300 Essen 1",10
  418.     dc.b "Dieses Programm ist frei kopierbar!",10
  419.     dc.b "Länge der Programmdatei: 2476 Bytes.",10
  420.     cnop 0,4
  421. AuskunftTextL    dc.l *-AuskunftText
  422.  
  423. DirText        dc.b "*Directory*",10
  424.  
  425.     cnop 0,4
  426. PrüfTabelle    dc.l    aP,3,0,aPText,aPTE-aPText,0
  427.         dc.l    0            ;Endkennung
  428.  
  429. ;Tabellenformat (alles LW): 
  430. ;Zeiger auf zu vergleichende Daten,
  431. ;Länge derselben minus 1, Lage derselben in der Datei,
  432. ;Zeiger auf auszugebenden Text mit Typbeschreibung, Länge des Textes,
  433. ;Langwort das entscheidet, ob Typ ausgegeben wird
  434.  
  435. aP    dc.l $3F3
  436.  
  437. aPText    dc.b $9B,"0;32;40m"
  438.     dc.b "Ausführbares Programm.",10
  439.     dc.b $9B,"0;31;40m"
  440. aPTE
  441.  
  442. IFFText    dc.b "IFF-Datei, Typ ",$9B,"0;33;40m"     ;4 Bytes Lücke zum Ein-
  443.     ds.b 4                    ;setzen der Typkennung
  444. IFFLücke dc.b ".",$9B,"0;31;40m",10
  445. IFFTextE
  446.  
  447. UnbekText    dc.b "Dateityp unbekannt.",10
  448.  
  449.     cnop 0,4
  450.  
  451. KennLis    
  452.     dc.w "d"            ;Kennbuchstabe
  453.     dc.l PZDir            ;Adresse des entsprechenden UPs
  454.     dc.w "a"
  455.     dc.l PZaP
  456.     dc.w "u"
  457.     dc.l PZUnb
  458.     dc.w "i"
  459.     dc.l PZIFF
  460.     dc.w 0                ;Ende der Liste
  461.  
  462. LeerZ    dc.b "                             "
  463.  
  464. ***Platzbedarfs-Bereich***
  465.     SECTION SPACE,BSS
  466. DOSBase    ds.l 1
  467. ParZAdr    ds.l 1
  468. ParZL    ds.l 1
  469. CurrOut    ds.l 1
  470. DirLock    ds.l 1
  471. OldCD    ds.l 1
  472. DatName    ds.l 1
  473. DatHand    ds.l 1
  474. TestFl    ds.l 1
  475.  
  476. InfoBlock    ds.l 260
  477.  
  478. DateiPuffer    ds.b 50
  479.  
  480. Par1    ds.b 256        ;Speicher für erstes Parameter
  481. Par1L    ds.l 1            ;dessen Länge
  482.  
  483. Par    ds.b 256        ;Zwischenspeicher für sonstige Parameter
  484. ParL    ds.l 1            ;deren jeweilige Länge
  485.         
  486. *Schalter für ausgeben/nicht ausgeben
  487. DirS    ds.b 1
  488. UnbS    ds.b 1
  489. IFFS    ds.b 1
  490.  
  491.