home *** CD-ROM | disk | FTP | other *** search
/ C64 Fever 92 #1 / C64_Fever_92-01_1992_-_de.d64 / utility.txt < prev    next >
Text File  |  2023-02-26  |  10KB  |  66 lines

  1.             Disc Utility 
  2.        {SHIFT-+}nderungen im Directory
  3.  
  4. Schreibschutz, Leseschutz und Umbenennung von Programmtypen - das alles l{CBM-F}{CBM-V}t sich mit dem Programm Disc Utility V2 vornehmen.
  5.  
  6. Das Programm Disc Utility V2 erlaubt das Setzen und Aufheben eines Schreibschutzes sowohl f{CBM-X}r die ganze Diskette als auch f{CBM-X}r einzelne Files. Weiterhin k{CBM-C}nnen Filetypen umbenannt, zus{CBM-F}tzliche Directoryeintr{CBM-F}ge geschaffen sowie der Diskettenname und die ID umge{CBM-F}ndert werden. Au{CBM-V}erdem lassen sich nat{CBM-X}rlich s{CBM-F}mtliche Floppybefehle eingeben.
  7. Das Programm ist einfach und klar geschrieben. Die Auswahl der einzelnen Optionen erfolgt {CBM-X}ber ein Men{CBM-X} durch Bet{CBM-F}tigung der Funktionstasten. Die Handhabung ist einfach. Die Auswahl einzelner Files, etwa zum Umbennen des Filetyps, erfolgt in konventionellem BASIC-Programmierstil, eines nach dem anderen. Hier h{CBM-F}tte eine professionellere Fileauswahl zwar f{CBM-X}r mehr Komfort sorgen k{CBM-C}nnen. So aber ist das Programm {CBM-X}bersichtlicher und daher besonders gut nachzuverfolgen. Der Programmierstil und die Gliederung in kurze, {CBM-X}berschau bare Routinen machen das Programm besonders f{CBM-X}r denjenigen als Studienobjekt interessant, der selbst programmiert und gerne wissen m{CBM-C}chte, wie sich solche {SHIFT-+}nderungen im Directory realisieren lassen. Daher wird im folgenden nicht nur auf die Programmbedienung, sondern detailliert auch auf das Programm als solches eingegangen.
  8.  
  9. Wie bereits angesprochen, erfolgt die Auswahl {CBM-X}ber ein Men{CBM-X} durch Funktionstastendruck.
  10.  
  11. F1: Schreibschutz setzen f{CBM-X}r die
  12.     ganze Diskette
  13.  
  14. F2: Diskettenschreibschutz aufheben
  15.  
  16. F3: Schreibschutz f{CBM-X}r einzelne Files
  17.     setzen und l{CBM-C}schen
  18.  
  19. F4: Floppybefehle eingeben
  20.  
  21. F5: Filetyp festlegen. Es kann zwischen
  22.     PRG, REL, SEQ, DEL und USR gew{CBM-F}hlt
  23.     werden
  24.  
  25. F6: File offen/geschlossen (Leseschutz)
  26.  
  27. F7: ID {CBM-F}ndern. Bis zu f{CBM-X}nf Buchstaben
  28.     sind m{CBM-C}glich
  29.  
  30. F8: Disknamen {CBM-F}ndern
  31.  
  32. In den Zeilen 90 bis 195 erfolgt die Ausgabe des Men{CBM-X}s auf den Bildschirm. Daran schlie{CBM-V}en sich in den Zeilen 200 bis 220 die Tastaturabfrage und die Tastenauswertung an. Der Ansprung der gew{CBM-F}hlten Option erfolgt {CBM-X}ber eine Sprungleiste in Zeile 220.
  33.  
  34. Diskette schreibsch{CBM-X}tzen:
  35. -------------------------
  36. Die Routine dazu befindet sich in den Programmzeilen 850 bis 910. F{CBM-X}r den Fall, da{CBM-V}, was anzunehmen ist, ein Diskettenwechsel stattgefunden hat, besonders wenn die ID dieser Diskette dieselbe ist, sorgt der Initialize-Befehl OPEN15,8,15,"I" daf{CBM-X}r, da{CBM-V} die BAM der neuen Diskette auch wirklich in den BAM-Pufferspeicher der Diskettenstation gelangt.
  37. F{CBM-X}r {SHIFT-+}nderungen des Directories gibt es keinerlei spezielle Befehle, so da{CBM-V} mit Direktzugriffen auf Spuren und Sektoren gearbeitet werden mu{CBM-V}. Bevor dies geschehen kann, ist ein Datenkanal f{CBM-X}r den Direktzugriff zu {CBM-C}ffnen. Das erfolgt hier durch OPEN8,8,8,"#". Angaben {CBM-X}ber das Diskettenformat, Diskettennamen und ID sowie die BAM-Belegungtabelle finden sich in Spur 18 Sektor 0.
  38. F{CBM-X}r das Schreibsch{CBM-X}tzen einer Diskette ist besonders das Byte Nummer zwei aus diesem Sektor interessant. Normaler weise handelt es sich bei diesem Byte um den Buchstaben A, der das richtige Format f{CBM-X}r unsere Diskettenstation kennzeichnet. Wenn dieser Buchstabe durch einen anderen ausgetauscht wird, etwa durch X, verweigert die Diskettenstation Schreibzugriffe auf die Diskette. Zum direkten Lesen und Beschreiben von Diskettenbl{CBM-C}cken mu{CBM-V} die Information erst in einen Pufferspeicher der Diskettenstation gebracht werden, bevor sie vom Computer eingelesen oder auf die Diskette geschrieben werden kann.
  39.  
  40. User-Befehle U1 und U2:
  41. -----------------------
  42. Das Lesen und Schreiben von der Diskette in den Pufferspeicher geschieht mit dem User-Befehl U1, das Schreiben des Pufferspeichers auf die Diskette mit dem User-Befehl U2. In Zeile 860 wird Spur 18, Sektor 0 von Laufwerk 0 in den Pufferspeicher f{CBM-X}r den Kanal 8 gebracht. Diese Kanalnummer ist nicht die logische Ger{CBM-F}teadresse, sondern entspricht der Sekund{CBM-F}radresse, die beim Befehl OPEN8,8,8,"#" verwendet wurde. Dies wird hier im Programm nicht ganz deutlich. Ein solcher Pufferspeicher braucht vom Computer nicht als ganzes gelesen oder beschrieben werden, es kann der Zugriff auch auf einzelne Bytes darin erfolgen. Das geschieht mit Hilfe eines Pufferzeigers, der mit dem Befehl B-P nach Belieben positioniert werden kann.
  43. In Zeile 870 wird der Pufferzeiger von Datenkanal 8 auf Byte Nummer zwei gesetzt. In Zeile 880 wird dieses Byte mit dem Buchstaben X f{CBM-X}r falsches Format {CBM-X}berschrieben. Danach braucht in Zeile 890 der Pufferinhalt nurmehr auf die Diskette in Spur 18 und Sektor 0 zur{CBM-X}ck geschrieben werden. Der erneute Initialize-Befehl in Zeile 900 sorgt daf{CBM-X}r, da{CBM-V} die BAM neu eingelesen wird und dadurch der Schreibschutz sogleich wirksam ist. Die beiden ge{CBM-C}ffneten Kan{CBM-F}le sind jetzt nur noch zu schlie{CBM-V}en, und das Werk ist vollbracht. Das Aufheben des Diskettenschreibschutzes vollzieht sich analog zum Set zen. Allerdings gibt es dabei eine Schwierigkeit. Da die Diskette schreibgesch{CBM-X}tzt ist, kann das ver{CBM-F}nderte Formatbyte nicht so einfach wieder durch den richtigen Wert ersetzt werden. Um dies dennoch bewerkstelligen zu k{CBM-C}nnen, m{CBM-X}ssen wir wissen, da{CBM-V} eine ganz bestimmte Speicherzelle im RAM der Diskettenstation 1541 das Formatkennzeichen enth{CBM-F}lt. Bevor die Diskette wieder berichtigt werden kann, mu{CBM-V} erst in die Speicherstelle $101 die richtige Formatkennung A oder chr$(65) geschrieben werden. Das geschieht durch den Memory-Write-Befehl in Zeile 980. Danach ist das L{CBM-C}schen des Schreibschutzes kein Problem mehr.
  44.  
  45. {SHIFT-+}nderung von Diskettenname
  46. und Disketten-ID:
  47. --------------------------
  48. Der Diskettenname und die Disketten-ID sind wie die Formatkennung in Spur 18, Sektor 0 vorzufinden. Der Diskettenname ist sechzehn Zeichen lang. Bei k{CBM-X}rzeren Namen wird der Rest mit geshifteten Leerzeichen aufgef{CBM-X}llt. Der Diskettenname belegt die Bytes von Nummer 144 bis 159, die Disketten-ID die Bytes Nummer 162 bis 166. Die beiden Routinen finden Sie im Programm von Zeile 620 bis 810.
  49.  
  50. Directory-Eintr{CBM-F}ge:
  51. -------------------
  52. Die Eintr{CBM-F}ge des Disketteninhaltsverzeichnisses befinden sich auf der Spur 18. Der Sektor 0 enth{CBM-F}lt dabei keine Eintr{CBM-F}ge, jedoch zwei Eintr{CBM-F}ge, die uns sagen, wo das Inhaltsverzeichnis beginnt. Byte Nummer null gibt die Spur an, Byte Nummer eins den Sektor. Die Sektoren des Inhaltsverzeichnisses enthalten in den ersten beiden Bytes ebenfalls einen Zeiger auf die Fortsetzung in den anderen Sektoren. Wenn uns weiterhin bekannt ist, da{CBM-V} ein Directoryeintrag aus 32 Bytes besteht und ein Sektor acht solcher Eintr{CBM-F}ge enth{CBM-F}lt, sollte die Position eines Direktoryeintrages leicht auffindbar sein.
  53. Zuerst mu{CBM-V} der richtige Sektor gefunden werden. Dies erreichen wir, indem wir die Nummer des Direktoryeintrages um eins erniedrigen und durch acht teilen. Das geschieht in Zeile 280. Danach wird in Zeile 290 der Sektor 0 von Spur 18 in den Puffer gelesen. Entsprechend unserem Rechenergebnis m{CBM-X}ssen wir anhand der ersten beiden Verweisbytes die erforderliche Anzahl von Sektoren, deren Reihenfolge beliebig sein kann, nach vorne bl{CBM-F}ttern, bis wir schlie{CBM-V}lich den richtigen Sektor in Zugriff haben. Das wird durch die Schleife von Zeile 350 verursacht.
  54. In diesem Sektor mu{CBM-V} sodann der gew{CBM-X}nschte Direktoryeintrag ausfindig gemacht werden. Hierzu wird der beim Teilen entstandene Rest ben{CBM-C}tigt. Dieser ist mit der L{CBM-F}nge 32 eines Directoryeintrages zu multiplizieren. Au{CBM-V}erdem ist der Wert Zwei zu addieren, da die Eintr{CBM-F}ge erst nach den beiden Verweisbytes beginnen. Die Positionierung des Pufferzeigers erfolgt in Zeile 370.
  55. Auch wenn wir vorher gesagt haben, die L{CBM-F}nge eines Directoryeintrages sei 32 Bytes, so ist dies nur halb richtig. Es ist der Abstand, der 32 Bytes betr{CBM-F}gt. Die L{CBM-F}nge eines Eintrages betr{CBM-F}gt 30 Bytes, die beiden restlichen Bytes sind uninteressant.
  56. In den Programmzeilen 380 bis 400 wird der Directoryeintrag in die Variable DD$ eingelesen. F{CBM-X}r das Sch{CBM-X}tzen von Files und das {SHIFT-+}ndern der Filetypen ist das erste Byte oder Byte Nummer null des Eintrages interessant. Ein Wert von 0 bis 127 kennzeichnet eine nicht ordnungsgem{CBM-F}{CBM-V} abgeschlossene Datei, ein Wert von 128 bis 191 eine normal abgeschlossene, h{CBM-C}here Werte eine schreib- und l{CBM-C}schgesch{CBM-X}tze Datei. Zu diesen Werten 0, 128 oder 192 ist der Dateityp zu addieren:
  57.  
  58. 0 = DEL
  59. 1 = SEQ
  60. 2 = PRG
  61. 3 = USR
  62. 4 = REL
  63.  
  64. Scratchschutz und Typ{CBM-F}nderungen k{CBM-C}nnen somit bewerkstelligt werden. Nach den {SHIFT-+}nderungen wird der Directoryeintrag in den Zeilen 460 bis 610 wieder zur{CBM-X}ckgeschrieben. Eine Information ist noch wichtig, damit wir die Filenamen am Bildschirm anzeigen k{CBM-C}nnen: Der Dateiname steckt in den Bytes drei bis 18, das hei{CBM-V}t im vierten bis 19ten Byte der Variablen DD$. Beim Scratchschutz-Setzen wird in Zeile 1130 mit 64 geodert, beim Schratchschutz-L{CBM-C}schen werden 64 wieder subtrahiert. In der Zeile 1400 wird der Programmtyp addiert. Vorher h{CBM-F}tte er nicht so umst{CBM-F}ndlich zu r{CBM-X}ckgesetzt zu werden brauchen. HI=HI AND 15 h{CBM-F}tte dasselbe vollbracht wie die Zeilen 1370 bis 1390.
  65. Beim Verwandeln von ordnungsgem{CBM-F}{CBM-V} abgeschlossenen Files in nicht abgeschlossene und umgekehrt scheint im Programm etwas schiefgelaufen zu sein. Statt OR 64 m{CBM-X}{CBM-V}te es in Programmzeile 1540 richtig hei{CBM-V}en: OR 128. In Zeile 1560 sollten wir die IF-Anweisung weglassen und nur schreiben: HH$=CHR$(ASC(HH$)AND15). Nicht ordnungsgem{CBM-F}{CBM-V} geschlossene Files k{CBM-C}nnen nicht geladen werden, so da{CBM-V} sie lesegesch{CBM-X}tzt und so vor neugierigen Blicken sicher sind.
  66. Zus{CBM-F}tzlich zu unseren Informationen sollten Sie Ihr Floppyhandbuch zu Rate ziehen, da wir im Hinblick auf dieses Buch unsere Ausf{CBM-X}hrungen etwas knapp gehalten haben.