*** HANDLEIDING VAN MDL-LIB ***

- COPYRIGHT 1990 BY MDL-SOFT -

Als  u  dit  nog  niet  gedaan  heeft,  lees  dan  eerst  de
inleiding, in het bestand INLEIDNG.TXT!

Het bestand TAPE bevat  een  aantal  procedures  om  met  de
cassetterecorder te communiceren. Dit kan handig  zijn  voor
back-ups en dergelijke,  of  voor  gegevensuitwisseling  met
cassette-gebruikers. Er zitten namelijk  ook  routines  bij,
die MSX-BASIC compatibele ASCII-bestanden  kunnen  lezen  en
schrijven! Dat kan handig zijn als er  een  BASIC-versie  en
een Pascal-versie van hetzelfde programma bestaat, en als de
BASIC-versie alleen met cassette werkt.

----

Naam      : TapeWrite
Actie     : Schrijft blok naar tape
Soort     : Procedure
Declaratie: Procedure TapeWrite(var buffer; lengte:integer;
            var gelukt:boolean; header:boolean);

Deze procedure schrijft de inhoud van een variabele weg naar
tape.  Dit  is vooral handig om array's in n keer  weg  te
schrijven.  Het  formaat  is echter  met  geen  enkel  ander
programma  compatible, tenzij u dat zelf zo maakt. Maar  dan
moet u wel dat formaat kennen, natuurlijk.
'buffer'  is  een typeloze VAR-parameter, waarin de  weg  te
schrijven variabele staat.
'lengte'  is  de lengte van de variabele. Kan het beste  met
SIZEOF  worden berekend, dat bespaart een hoop rekenwerk  en
risico's.  Bovendien kan zo de variabele zonder risico's van
grootte veranderen.
'gelukt'  is een Boolean-VAR-parameter. Daarin komt TRUE  te
staan  als de operatie met succes voltooid is, en FALSE  als
er  een 'device I/O error' optreedt of als de  gebruiker  op
CTRL-STOP drukt.
Als  'header'  TRUE  is, wordt een  lange  header  gebruikt,
anders  een korte. Het is het beste om het eerste  blok  met
een  lange header te schrijven, en alle volgende blokken met
een  korte,  i.v.m.  de tijd die  de  cassetterecorder  moet
krijgen om zijn volume goed af te regelen.

----

Naam      : TapeRead
Actie     : Leest een blok van cassette
Soort     : Procedure
Declaratie: Procedure TapeRead(var buffer;
                      lengte:integer; var gelukt:boolean);

Deze  procedure werkt hetzelfde als TapeWrite, maar  dan  de
andere  kant op: deze leest van cassette. Een  header-lengte
hoeft  uiteraard niet opgegeven te worden. Zorg er wel  voor
dat de variabele 'buffer' niet kleiner is dan de in 'lengte'
opgegeven   waarde;   dit  leidt  tot hang-ups  of  tot  het
plaatsen van onzin in andere variabelen.

----

Naam      : Motor
Actie     : Zet cassette motor aan/uit
Soort     : Procedure
Declaratie: Procedure Motor(status:byte);
Basic     : MOTOR ON/MOTOR OFF/MOTOR

Met  deze  procedure  kunt u de cassette motor  aan  of  uit
zetten,  b.v. voor het terugspoelen. Als status 0 is gaat de
motor  uit, als status 1 is gaat hij aan, en als status  255
is wordt hij 'omgekeerd': uit wordt aan, en aan wordt uit.

----

Naam      : Baud
Actie     : Stelt cassette-baudrate in
Soort     : Procedure
Declaratie: Procedure Baud(rate:integer);

Met deze procedure kunt u de baudrate instellen waarmee naar
de cassette geschreven wordt. Voor lezen is dat niet  nodig:
de MSX stelt zelf zijn laadsnelheid in, ook in Basic.
De  waarde van 'rate' mag waarden van 600 tot 3600 aannemen,
steeds met stappen van 600. (Mag ik er u nog even op  wijzen
dat in Basic slechts 1200 en 2400 baud zijn toegestaan?)

----

Naam      : DriveOff
Actie     : Schakelt drive-motor uit
Soort     : Procedure
Declaratie: Procedure DriveOff;

Als  de  drivemotor aanstaat en een  cassette-routine  wordt
aangeroepen,  dan  blijft  die motor  tijdens  de  cassette-
operatie  doordraaien.  Deze procedure schakelt  die  drive-
motor  onmiddellijk  uit.  Als u hem even aanroept  aan  het
begin van een cassette-operatie, bent u ervan verzekerd  dat
de drive niet teveel slijt.

----

Naam      : OpenCasOutput
Actie     : Opent ASCII-bestand voor uitvoer
Soort     : Procedure
Declaratie: Procedure OpenCasOutput(naam:libstr;
                                    var gelukt:boolean);
Basic     : OPEN "CAS:naam" FOR OUTPUT AS #1

Deze  procedure opent een MSX-BASIC compatible ASCII-bestand
voor  uitvoer. Er kan maar n ASCII-bestand  tegelijk  open
zijn.  Een  lange  header wordt naar  tape  geschreven,  met
daarin de naam (max. 6 tekens).
Is  het  openen mislukt, dan komt er FALSE  in  'gelukt'  te
staan, anders TRUE.

----

Naam      : WriteToCas
Actie     : Schrijft naar ASCII-bestand
Soort     : Procedure
Declaratie: Procedure WriteToCas(wrstr:libstr;
                                 var gelukt:boolean);
Basic     : PRINT #1,"wrstr";

Deze  procedure schrijft de string 'wrstr' naar het  huidige
open   ASCII-bestand. Er wordt gn CR-LF code achter gezet,
dit  moet u zelf doen. Hieronder is  een  voorbeeldprocedure
geplaatst, die dit demonstreert. (CR-LF heeft ASCII-codes 13
en 10).
Is  het schrijven mislukt, dan komt er FALSE in 'gelukt'  te
staan, anders TRUE.

Procedure WriteLnToCas(wrstr:libstr; var gelukt:boolean);
Begin
  WriteToCas(wrstr+#13#10,gelukt)
end;

----

Naam      : CloseCasOutput
Actie     : Sluit uitvoer ASCII-bestand
Soort     : Procedure
Declaratie: Procedure CloseCasOutput(var gelukt:boolean);
Basic     : CLOSE #1

Deze  procedure sluit een uitvoer ASCII-bestand. Dit sluiten
is echt nodig, als u dat niet doet, loopt u groot risico dat
het bestand niet volledig op de tape komt te staan.
Is  het  sluiten  gelukt, dan komt er TRUE  in  'gelukt'  te
staan, anders FALSE.

----

Naam      : OpenCasInput
Actie     : Opent ASCII-bestand voor invoer
Soort     : Procedure
Declaratie: Procedure OpenCasInput(var naam:libstr;
                                   var gelukt:boolean);
Basic     : OPEN "CAS:" FOR INPUT AS #1

Deze procedure opent het eerstvolgende MSX-BASIC  compatible
ASCII-bestand,  dat op de tape gevonden wordt. De naam wordt
uitgelezen,  en in de VAR-parameter 'naam' gezet. Dit  geeft
de  mogelijkheid  naar bestanden te zoeken, zoals  hieronder
gedemonstreerd wordt.
Is het openen gelukt, dan komt er TRUE in 'gelukt' te staan,
anders FALSE.

Procedure ZoekBestand(naam:libstr; var gelukt:boolean);
{ Zoekt naar tape ASCII-bestand met de naam 'naam'.
  Als het gevonden wordt, wordt het automatisch geopend. }
Var gevonden_naam:libstr;
Begin
  Repeat
    OpenCasInput(gevonden_naam,gelukt)
    If gelukt then
      If gevonden_naam<>naam then
        write('Skip :') else write('Found:');
    WriteLn(gevonden_naam)
  until gevonden_naam=naam) or (not gelukt)
end;

----

Naam      : ReadFromCas
Actie     : Leest uit ASCII-bestand
Soort     : Procedure
Declaratie: Procedure ReadFromCas(var rdstr:libstr;
                                  var gelukt:boolean;
                                  var eof:boolean);
Basic     : LINE INPUT #1,rdstr$

Deze  procedure leest een string uit het open ASCII-bestand,
tot  aan  de  eerstvolgende CR-LF code. De  string  komt  in
'rdstr'  te  staan (zorg wel dat LibStr in  MDLLIB.LIB  lang
genoeg is!)
Is het lezen gelukt, dan komt er TRUE in 'gelukt' te  staan,
anders FALSE.
Als  het  einde van het bestand is bereikt, krijgt 'eof'  de
waarde TRUE, anders FALSE.

----

NOOT: Invoer ASCII-bestanden sluiten is niet nodig.  Vandaar
dat er geen procedure hiervoor aanwezig is.

----

**** EINDE TAPE.TXT ****
                                                                                                                              