MILC logo

IndexVorigeVolgendeLeeg

Disk cursus (2)
Genic Clubguide, 00-00-00


    
                      DISKCURSUS DEEL 2

In dit deel van de  cursus  disk-gebruik  bespreken  we  een
routine om uw eigen etiket te ontwerpen op de diskette. Nee,
geen etiket-maker voor Dynamic Publisher, een routine die uw
eigen kopregel in een hok plaatst en die U ziet  als  U  het
files commando geeft, met  daaronder  de  files  die  op  de
diskette staan. Zo kunt U uw diskettes nummeren, namen geven
etc. Het staat in ieder geval erg netjes  en  professioneel.
We proberen U zo wat meer inzicht te geven in de werking van
de directory-sectoren en die van de BOOT-sector.

Laten we eerst eens bekijken hoe we dit gaan doen. Op een PC
is het maken van een disk-etiket niet moeilijk, daar kunt  U
gewoon aangeven dat U een bepaald gedeelte in  de  directory
als etiket wilt gebruiken. Op de MSX echter  moeten  we  wat
omslachtiger te werk gaan. Het is mogelijk om, als we direct
in  de  directory  sectoren  poken,  alle  ASCII  tekens  te
gebruiken. Dat wil zeggen dat we ook kleine  letters  kunnen
neer zetten etc., terwijl we, als we een file saven, slechts
hoofdletters en een beperkt aantal tekens kunnen  gebruiken.
Maar het geeft nog een andere mogelijkheid. De ASCII-codes 0
t/m 31 zijn behalve tekens ook stuurcodes.

Wat wil dat dan zeggen, vrij simpel. Voorbeeldje: Als je  in
basic intypt "print CHR$(7)" krijg  je  een  beep.  chr$(13)
geeft een return, chr$(8) geeft een Backspace  etc.  En  met
name dit laatste is voor ons van belang. Als je het commando
files geeft komen de files op het scherm met een punt tussen
extensie en file-naam en een spatie tussen de  verschillende
files, ter illustratie:

FILE1   .EXT FILE2   .EXT

Als U het files commando geeft in BASIC, krijgt  U  ongeveer
het volgende resultaat,  als  er  tenminste  files  aanwezig
zijn. Als we nu een etiket willen maken moeten er natuurlijk
niet om de 12 tekens een spatie en een punt staan.  Dus  dan
moeten de punten en spaties weg worden gewerkt.  Dan  is  de
Backspace optie natuurlijk erg handig. Als het eerste  teken
van de extensie (EXT),  Backspace  is  dan  wordt  het  punt
gewist en gaat de cursor een positie naar  links.  Hetzelfde
is mogelijk bij de spatie als we het  eerste  teken  van  de
filenaam chr$(8)  maken,  dit  veroorzaakt  een  soortgelijk
effect. Ook dit zullen we even duidelijk laten zien.

Stel we willen de titel "DISKETTE NUMMER ZES" plaatsen in de
eerste twee files.We gaan dan als volgt te werk:

FILE1 : De filenaam wordt DISKETTE, dan volgt er als we  het
        files  commmando  geven  een  punt.  Dit  kunnen  we
        weghalen door CHR$(8) (Back-space) te  plaatsen  als
        eerste teken van de extensie. Dan hebben  we  nog  2
        posities  over  om  de  twee  volgende   tekens   te
        plaatsen:" N". Het komt er dan als volgt terecht  in
        de directory sector:

 FNAAM: 01:CHR$(&H44)   "D"        07:CHR$(&H54)   "T"
        02:CHR$(&H49)   "I"        08:CHR$(&H45)   "E"
        03:CHR$(&H53)   "S"   EXT: 09:CHR$(&H45)  Backspace
        04:CHR$(&H4B)   "K"        10:CHR$(&H20)   " "
        05:CHR$(&H45)   "E"        11:CHR$(&H4E)   "N"
        06:CHR$(&H54)   "T"

        Voor  een  file  zijn  in  de  directory  32  tekens
        gereserveerd, als we een etiket  maken  dan  is  het
        natuurlijk  niet   nodig   om   de   rest   van   de
        gereserveerde ruimte  te  vullen.  Immers,  de  file
        hoeft niet geladen te worden.  Op  de  plek  van  de
        datum, tijd, size enzovoort blijft gewoon nul staan.

FILE2 : De filenaam wordt  een  backspace  (CHR$(8))  om  de
        spatie  die  tussen  de  files  geplaatst  wordt  te
        verwijderen. De daaropvolgende tekens zijn "UMMER Z"
        , dan volgt er als we het files commando  geven  een
        punt. Dit  kunnen  we  weer  weghalen  door  chr$(8)
        (Backspace) als eerste  teken  van  de  extensie  te
        plaatsen. Dan hebben we nog twee posities over om de
        twee laatste tekens te plaatsen. Het  komt  dan  als
        volgt terecht in de directory-sektor:

 FNAAM: 33:CHR$(&H08)   Backspace  39:CHR$(&H41)   " "
        34:CHR$(&H55)   "U"        40:CHR$(&H5A)   "Z"
        35:CHR$(&H4D)   "M"   EXT: 41:CHR$(&H08)  Backspace
        36:CHR$(&H4D)   "M"        42:CHR$(&H45)   "E"
        37:CHR$(&H45)   "E"        43:CHR$(&H53)   "S"
        38:CHR$(&H52)   "R"

        De getallen beginnen nu op 33 om dat dat het  gebied
        is waarin de 2e file zich  in  de  directory  sector
        bevindt, zoals we in deel een besproken hebben.

Om toch nog maar even wat te herhalen:  Een  sector  bestaat
uit 512 bytes, zo ook een directory sector.  Hierin  is  het
grootste deel van de file gegevens opgenomen zoals naam,tijd
enzovoort. Deze gegevens nemen per file 32 bytes in  beslag,
er past dus 16 keer gegevens over een file in een  directory
sector. De naam en extensie van de file staan op de  2e  tot
en met de 12e byte. We beginnen in een sector te  tellen  op
0, zodat bij de eerste file de naam staat op byte 1 t/m  11,
bij de tweede file op byte 33 t/m 43 etc.

Nog maar even voor de duidelijkheid: De  files  zoals  boven
kunnen dus alleen maar rechtstreeks in  de  directory-sector
worden gepoked. Disk-basic accepteert niet alle  ASCII-codes
en dus kunnen tekens als chr$(8) (Backspace) niet in de file
naam worden geplaatst. Files  die  voor  dit  doel  gebruikt
worden, als etiket en dus niet om te laden, noemen  we  zgn.
Dummy-files.

Dan volgt nu het programma, dat natuurlijk ook  op  diskette
staat, maar zo is het wat handiger om een en ander nader  te
verklaren:

80  REM INITIALISTIE
90  REM
100 REM SCREEN 0:WIDTH 80:KEY OFF:CLEAR 5000:CLS

Om te zorgen dat er wat geheugen vrij is moeten we een clear
geven, anders volgt er een OUT  OF  MEMORY  error.

120 REM INPUT TEKST
130 REM
140 LOCATE 54,1:PRINT CHR$(219):LOCATE 0,0:LINE INPUT I$
150 IF LEN(I$)>54 THEN I$=LEFT$(I$,54) ELSE  S=27-LEN(I$)/2:
    I$=SPACE$(S)+I$+SPACE$(S)

REGEL 140: Er wordt eerst een vierkantje getekend, dit geeft
aan hoelang de tekst mag zijn (54 tekens), vervolgens  wordt
met line input de tekst ingelzezen die U intypt.

REGEL 150: Er wordt gekeken of de tekst  langer  is  dan  54
tekens. Zo ja, dan  worden  de  eerste  54  tekens  gebruikt
(LEFT$). Zo nee, dan wordt de tekst gecentreerd.

154 REM Etiket maken
155 REM
160 FOR I=1 TO 56:B$=B$+CHR$(220):C$=C$+CHR$(223):NEXT I
165 D$=SPACE$(6)
170 Q$=CHR$(32)+CHR$(9)+CHR$(219)+C$+CHR$(219)+D$+CHR$(9)+
    CHR$(219)+CHR$(32)+I$+CHR$(32)+CHR$(219)+D$+CHR$(9)+
    CHR$(9)+CHR$(219)+B$+CHR$(219)+D$
180 A$=LEFT$(Q$,144):B$=MID$(Q$,145,LEN(Q$)-144):B$=B$+
    SPACE$(143-LEN(B$))+CHR$(13)

REGEL 160: De onder en bovenkant van  het  etiket  wordt  in
elkaar gezet,waarbij C$ de onderkant is (een streep)  en  B$
de bovenkant (een streep).

REGEL 165: D$ wordt gedefinieerd als 6 spaties.

REGEL 170: Hier wordt het hele etiket in een  string  gezet.
We zullen het geheel even vertalen : Spatie, Tab,  Vierkant,
bovenkant,  vierkant,  6  spaties,  Tab,  vierkant,  spatie,
tekst,   spatie,   vierkant,   6    spaties,    Tab,    Tab,
vierkant,onderkant,vierkant, 6  spaties.  Zo  zit  het  hele
etiket in een string.

REGEL 180: In A$ komen de eerste 144 tekens van het  etiket,
dit past precies in een directory  sector.  In  B$  komt  de
andere helft, aangevuld met spaties en een return om aan het
begin van de regel uit te komen.

200 REM CHECK OF ER NOG NIKS OP DE DISK STAAT EN OF DEZE
        GEFORMATTEERD IS
210 REM
220 ON ERROR GOTO 250
230 FILES"A:"
240 END
250 IF ERR<>53 THEN END

Dit spreekt voor zich, als er niks op de disk staat en  deze
is geformateerd (Fout is File not Found (53)) dan  gaat  het
programma door anders  stopt  het.  Als  er  al  wat  op  de
diskette zou staan, dan zouden de  eerste  32  files  gewist
worden (de eerste 2 directory sectoren).

270 REM ZET ETIKET IN EERSTE TWEE DIRECTORY SECTOREN
280 REM
290 I$=DSKI$ (1,0):Q=PEEK (&HF351)+ 256 * PEEK (&HF352)
291 AF=PEEK (Q+16):SF=PEEK (Q+22)+ 256 * PEEK (Q+23)
292 S1=AF * SF + 1:I$=DSKI$(1,S1):X=0
300 FOR I=0 TO 15: POKE Q + (32*I),8
301 FOR J=1 TO  7:  A=ASC ( MID$ (A$,J+(I*9),1) ): POKE
    Q+J+(32*I),A: NEXT J
302 POKE Q+8+(32*I),8
303 FOR J=9 TO 10: A=ASC ( MID$ (A$,(J-1)+(I*9),1)): POKE
    Q+J+(32*I),A: NEXT J
304 NEXT I
310 X=X+1: IF X=2 THEN DSKO$ 1,(S1+1):FILES:END  ELSE  DSKO$
    1,S1: I$=DSKI$(1,S1+1): A$=B$: GOTO 300

Een heel aantal commando's die we maar een  beetje  gespreid
hebben over de regels.

REGEL 290: Laad de BOOT-sektor, zet in Q het adres  waar  de
           informatie uit de sektor in het geheugen staat.
REGEL 291: Bepaal Aantal Fats en Aantal sektoren per FAT.
REGEL 292: Bepaal eerste directory sektor en lees deze in.
REGEL 300: Dit is een geheel tot regel 304,  hierin  gebeurt
           het volgende:
         - I is het nummer van de file die we beschrijven in
           de directory sector.
         - Er wordt vervolgens de  tekst  uitgelezen,  eerst
           een Backspace gepoked (8)  dan  de  eerste  zeven
           tekens, dan (inde extensie) weer  een  backspace,
           en dan de laatste twee tekens.
REGEL 310: Hier wordt gekeken of de tweede directory  sector
           ( de files  17  t/m  32  )  nog  beschreven  moet
           worden. Zo ja dan wordt de eerste  weggeschreven,
           B$ wordt A$ (Het tweede deel van de tekst) en  de
           routine begint opnieuw. Zo  niet,  dan  wordt  de
           tweede  directory   sector   weggeschreven,   het
           resultaat wordt getoond en het programma eindigt.

Er valt natuurlijk veel te experimenteren met deze  routine,
U kunt ook zelf de buitenkant van het etiket ontwerpen.  Ook
is het mogelijk beeps tussen de tekst te plaatsen, dit geeft
ook  wel  een  leuk  effect  (  Gebruik  hiervoor  chr$(7)).
Natuurlijk geeft het alleen een goed effect in screen  0  op
80 kolommen, probeer maar eens een aanpassing te maken  voor
40 kolommen. Dit programma staat ook op deze Clubguide onder
de naam ETIKET.MSX. Veel plezier met de routine  en  tot  de
volgende keer, waarin we een routine bespreken om te  kijken
op welke sectoren een file staat. Hierbij wordt ook  de  FAT
nader toegelicht.

Voor suggesties, vragen, opmerkingen of toevoegingen,

Ronald Egas
De Blauwe Wereld 53
1398 EP Muiden
Tel.02942-3813 ( s'avonds en in de weekends)

    

Index

Vorige

Volgende