&&
------------------------------------------------------------------------------
                         CURSUS ASSEMBLER  -  TYPE
------------------------------------------------------------------------------

Type is een kommando dat het Type-kommando vervangt. Het voert een tekst uit
naar het scherm. Het voordeel is dat deze routine veel kleiner is dan de
normale Type.

De aanroep is eenvoudig :

Type Filenaam



De uitleg achter elke regel is vrij uitgebreid. Daarom weinig tekst tussen de
regels in.
&&
; We beginnen met de naam van het file op te slaan.

o:      cmp.b    #1,d0         ; Geen parameters?
        bls.l    Nofile        ; Ja > 'Bad Args' !
        lea      $60000,a1     ; Pointer naar de FileNaamBuffer.
search: move.b   (a0)+,d1      ; Karakter kopieeren.
        cmp.b    #$0a,d1       ; Return gevonden?
        beq.s    found         ; Ja.
        move.b   d1,(a1)+      ; Anders karakter kopieeren.
        bra.s    search        ; Verder zoeken naar de RETURN.
found:  move.b   #$0,(a1)+     ; Een 0 aan het einde.

; Dan openen we de DOS.library en het file.

        bsr.s    init          ; DOS.library openen.
        move.l   #$60000,d1    ; FileNaam naar D1.
        move.l   #1005,d2      ; Mode : OLD.
        jsr      -30(a5)       ; DosCall OPEN.
        move.l   d0,a4         ; FileBase opslaan voor later.
        beq.s    leesfo        ; Error?
&&
; 100 Bytes inlezen in de buffer.

nextt:  move.l   a4,d1         ; FileBase naar D1.
        move.l   #$60000,d2    ; Pointer naar de buffer.
        moveq    #100,d3       ; 100 Bytes lezen.
        jsr      -42(a5)       ; DosCall READ.
        beq.s    eotype        ; End-of-File bereikt.

; Nu moeten we kijken of we werkelijk 100 bytes gelezen hebben.

        move.l   #$60000,d2    ; Buffer naar D2.
        move.l   d0,d3         ; Lengte in D3.
        subq.b   #1,d0         ; Corrigeren met 1, lengte is al 1 verder.
        bsr.s    print         ; Tekst uitprinten.

; Even kijken of gevraagd wordt het programma te onderbreken via de toetsen.

        cmp.b    #$99,$bfec01  ; CRTL-C Gedrukt?
        beq.L    break         ; Ja > BREAK!
        bra.s    nextt         ; Nee > verder.
&&
; Na het afdrukken moeten we het file weer sluiten.

eotype: move.l   a4,d1         ; FileBase terughalen.
        jsr      -36(a5)       ; DosCall CLOSE.
close:  move.l   a5,a1         ; DosBase terughalen.
        jsr      -414(a6)      ; ExecCall CLOSELIBRARY.
        rts                    ; terug naar de CLI.

; De routine die de DOS.library opent.

init:   move.l   4,a6          ; ExecBase opslaan in A6.
        lea      dosname,a1    ; DosNaam naar A1.
        jsr      -408(a6)      ; ExecCall OPENLIBRARY.
        move.l   d0,a5         ; DosBase opslaan voor als we de lib. sluiten.
        rts                    ; Return.

; De routine die de tekst afdrukt.

print:  jsr      -60(a5)       ; DosCall OUTPUT.
        jsr      -48(a5)       ; DosCall WRITE.
        rts                    ; Terug.
&&
; Nu de boodschap die afgedrukt wordt bij het drukken van CTRL-C.

break:  move.l   #breakmsg,d2  ; Pointer naar de BREAK-boodschap.
        moveq    #6,d3         ; 6 Tekens.
        bsr.s    print         ; Afdrukken.
        move.l   a4,d1         ; FileBase terughalen.
        jsr      -36(a5)       ; DosCall CLOSE.
        bra.s    close         ; Naar het einde van het programma.

; Als er een lees/schrijf-fout opgetreden is moeten we ook wat doen.

leesfo: move.l   #nomsg,d2     ; Pointer naar de boodschap.
        moveq    #16,d3        ; 16 Tekens.
        bsr.s    print         ; Afdrukken.
        rts                    ; Naar het einde van het programma.

; En ook een waarschuwing die gegeven wordt als het file er niet is.

nofile: bsr.s    init          ; DOS.library initialiseren.
        move.l   #nonamemsg,d2 ; Pointer naar de boodschap.
        moveq    #9,d3         ; 9 Tekens.
        bsr.s    print         ; Afdrukken.
        bra.s    close         ; Naar het einde van het programma.
&&
; En nog wat labels aan het einde.

dosname:
        dc.b     'dos.library',0
nonamemsg:
        dc.b     "Bad Args",$a
nomsg:
        dc.b     "File not found.",$a
breakmsg:
        dc.b     "BREAK",$a














Het programma, en de source, staan in de directory Assembler op deze diskette.

- EINDE ----------------------------------------------------------------------
&&
