* PrintBBLib von E.Hambuch
* Version 1.0
* Listing für A68k
  CODE
  include 'exec.i'  ;eigene Include-Files !
  include 'dos.i'
  include 'startup.i'
_main:
  lea dosname,a1           ;Dos-Library öffnen
  CALLEXEC OldOpenLibrary
  move.l d0,_DOSBase
  beq ende
  tst.l _WBenchMsg         ;von der Workbench
  beq.s clistart           ;nein !
  move.l #fenster,d1       ;sonst Fenster öffnen
  move.l #MODE_NEWFILE,d2
  CALLDOS Open
  move.l d0,Output
  beq closedos
  bra.s start
clistart:
  CALLDOS Output         ;Output-Handle
  move.l d0,Output
  beq closedos
start:
  move.l #filename,d1     ;Lib öffnen
  move.l #MODE_OLDFILE,d2
  jsr _LVOOpen(a6)
  move.l d0,FilePtr
  bne.s weiter1
  lea text1,a0          ;nicht gefunden
  bsr print
  bra closefen
weiter1:
  move.l d0,d1         ;Anzahl einlesen
  move.l #BootAnz,d2
  moveq #4,d3
  jsr _LVORead(a6)
  lea text3,a0
  move.l BootAnz,d3
  bsr dez              ;in Dezimal umwandeln
  lea text2,a0
  bsr print            ;und ausgeben
  tst.l BootAnz        ;Anzahl=0 ? -> Ende
  beq closefile
loop:                  ;Hauptschleife
  move.l FilePtr,d1
  move.l #Buffer,d2
  move.l #1012+20,d3   ;Bootblock (1012 Bytes) und Namen (20) einlesen
  jsr _LVORead(a6)
  tst.l d0             ;schon Dateiende oder Fehler ?
  beq closefile
  lea text5,a0
  bsr print            ;Tabs ausgeben (Zentrieren)
  lea Buffer,a0        ;Name ausgeben
  bsr print
  lea text4,a0
  bsr print           ;und Linefeed
  subq.l #1,BootAnz
  bne.s loop
closefile:             ;Datei schließen
  move.l FilePtr,d1
  CALLDOS Close
closefen:
  tst.l _WBenchMsg
  beq.s closedos
  move.l Output,d1    ;Falls von Workbench
  move.l #Buffer,d2
  moveq #2,d3
  CALLDOS Read        ;warte auf RETURN
  move.l Output,d1
  jsr _LVOClose(a6)   ;Fenster schließen
closedos:
  move.l _DOSBase,a1
  CALLEXEC CloseLibrary
ende: rts
print:            ;Text ausgeben (muß mit $00-Byte enden !)
  move.l a0,a1
s00: tst.b (A1)+
  bne.s s00
  suba.l a0,a1
  move.l Output,d1
  move.l a0,d2
  move.l a1,d3
  jmp _LVOWrite(a6)
dez:             ;in 5 stellige Dezimalzahl umwandeln
  lea deztab,a1
  moveq #0,d1
dez2: moveq #'0'-1,d2
  move.l d1,d4
  lsl.l #2,d4
  move.l d3,d5
dez3: addq.b #1,d2
  sub.l 0(a1,d4.w),d3
  bcc.s dez3
  move.l d5,d3
  move.b d2,0(a0,d1.w)
  addq.b #1,d1
  cmp.b #5,d1
  bne dez2
  rts
  DATA
deztab:
  dc.l 10000
  dc.l 1000
  dc.l 100
  dc.l 10
  dc.l 1
dosname: dc.b 'dos.library',0
fenster: dc.b 'CON:0/0/640/256/PrintBBLib Version 1.0 von E.Hambuch',0
filename: dc.b 'S:BBLib',0
text1: dc.b '"BBLib" nicht gefunden !',10,0
text2: dc.b 'Anzahl der Bootblöcke: '
text3: dc.b 'xxxxx',10
text4: dc.b 10,0
text5: dc.b 9,9,9,0
  BSS
_DOSBase:   ds.l 1
Output:     ds.l 1
FilePtr:    ds.l 1
BootAnz:    ds.l 1
Buffer:     ds.b 20+1012
  END
