GfABASIC *xxx~|&UUV*VVVVVVVWVW^W^W^OCOWWINULLFFPMPUADFSUA1RBSECCLLENIDSNPSHBCSS1MPUDUMMYSUREOLJFRSIZFILSECOLDCLOLDMEDCOMDFDSUGO1GOGO2DSTAT1DSTAT2PSTATMPROGINITALLMENUEPINFODINFO2SETMLDOSUMDINFOINITINFODIRSAVLOAFMTSDFMTDDXSETDDIREKTPUFFERLISTPRPUFSHPUFCLPUFSAPUFSETPDSTSTDSET128SET256SHOWNRCLWSUREFILEFMTSUREFINDFREEFINDFRE2CLSECYFE#H FEHHF(!!!FH@*  !pp !@@ ! ! !@@ F7!M!AUX:FE! FE! FEFMFRFEGpFFQ F Z ***FF F  EF  EFFDesk , ATARI ST/XL Interface ,----------------------,1,2,3,4,5,6,"" \Disk 1 , Directory, Save Disk, Load Disk, Format SD, Format ED,------------, Set,"" \Disk 2 , Directory, Save Disk, Load Disk, Format SD, Format ED,------------, Set,"" BPrinter , Direct, Buffer, List, Print Buffer, Show Buffer t8 Clear Buffer, Save Buffer,---------------, Set,"" TCopy , Disk 1 to ST , Disk 2 to ST,--------------, ST to Disk 1, ST to Disk 2,"" BSettings , 128 BpS, 256 BpS, Show Sector# ,----------------- H Clearw Disk 1, Clearw Printer , Clearw Disk 2, Clearw Status,"" oEnd, * Quit * ,*** l FMenubalk aanzetten. P [F"\!Disk 1FlWindow 1 = Disk 1 r]!-F[F"\!PrinterFWindow 2 = Printer ]!-F[F"\!Disk 2FFWindow 3 = Disk 2 ]!-F [F2.\!StatusFWindow 4 = Status window EGFW^FAlle windows openen YFen schoonmaken. p Fh(vLFFMenu proceduren initializeren.  BEp!!!!!! FBaudrate instellen op 19200 baud. u>E0GpF De menu items van het Disk 1 menu u!FEuitschakelen.  Fi EFDisk 2: Aktief. .EFShow sector# als default niet aktief. h:P!FeDisk 2: 'Set' het 'haakje' ervoor zetten. eEF Printer: Aktief. .!FrPrinter: 'Set' haakje ervoor. o@EFsh%=1 printer output naar window, sh%=0 niet naar window (x!FpPrinter: 'List' haakje. ,,<!FpSettings: '128 BpS' haakje. % MFPrinter Status aangeven. MFDisk Status aangeven. n.MFMachinetaal subroutine initializeren. 0 |FF6! FaAlle aanwezige tekens uit modempoort Ea Fverwijderen. FFF |FFF:! FdWachten op een teken aan de modempoort. wF Of op een menu keuze. F F |FF* Ea F 1 Byte van de modempoort halen. > #  # 71   # 72   Fs>-F# kijken of een van onze 'apparaten' aangesproken wordt s2 Fen of ze aktief zijn. Als dit zo is doorgaan 8 E Ffanders terug en wachten op andere informatie. wEGFsEa F Commandoblok halen. t. EFen opslaan om later te gebruiken. f E F6 E#  %  FChecksum uitrekenen. FEa F De checksum ophalen. 2  F als deze niet klopt met de berekende @^FF waarde. Een error boodschap op het scherm zetten. s Invalid Command-Frame !Fr:-Fn Dan terug en wachten op informatie van modempoort.  F : 71  72 FIs het gekozen device een drive? :****************** Disk Routines ******************* (E 70 F* Gekozen disk bepalen. *&E!7A F ACKNOWLEDGE (ACK) sturen. .FE  FCSectornummer berekenen uit het commandoblok.  < 7R FIs de opdracht een Leesopdracht (READ). m&********** Read Sector ********** E!7A F ACK sturen. o2 F Moet het sectornummer geprint worden? t,^F zo ja, window openen en printen. 2Y! "Sending Sector $"n " ("") F( F2M!@ B@ CF(Sectorinhoud en de &-Fbijbehorende checksum sturen. i* FDat was de leesopdracht (van de XL).  @ 7P  7W FEen schrijfopdracht (WRITE - PUT). ,********** Put/ Write Sector ********** rE!7A FACK sturen @ FeDe sectoren 1-3 zijn altijd 128 Bytes lang. ,@ E_!M Fr128 Bytes ophalen.  F6@ E_!M FAnders kunnen het er ook 256 zijn.  FEa FChecksum ophalen. uE!7A FACK sturen. e2 FMoet het sectornummer geprint worden? i ^F2Y! "Getting Sector $"n " ("") Fn F0M FeReken de checksum van de sector uit. 4 Fklopt deze met de opgehaalde van de XL >^FFIs dit niet zo, dan een error boodschap printen. : PUT: Checksum-Error in $"n " : $"n "<>$"n F(E!7E Fund ERROR sturen naar de XL -Fen weer wachten.  F4E!7C Fanders COMPLETE sturen om het einde aan $$-Fte geven van deze opdracht. m F . 7S Fn STATUS opdracht gevraagd? e&********** Disk Status ********** ^F* Window openen 2 Fp voor een bepaalde Sectorlengte ,RFhet bijbehorende statusblok sturen. l FhRFF F$EG@Fd 6 Statusbytes sQFData lezen E!Fa en naar de XL sturen. t Fn-FEn weer wachten. |F67,16,0,1,0,17 c|F667,48,0,1,0,49 c F 8 7!  FsFormatteer commando's. 0********** Format Disk SD of ED ********** mE!7A FACK sturen. s0 E Fs Disk op SD of ED zetten. MFEen aan gaan geven.  Formatting....FMFoDisk leegmaken. n0M!! F'alle Sectoren OK' sturen E!7C FCOMPLETE sturen. -Fop WRITE gaan wachten.  F 4^FROnbekend commando en dit ook aangeven. .Unknown Command : "n W("B ")Fv-Fk F , F Was de printer gekozen? ):***************** Printer Routines ******************   7S F************ Printer Status ********** *"RF*Printer Statusblok sturen. .EG`FbACK en de 6 Status bytes QFlezen. E!Feund sturen Fn|F65,67,128,78,5,0,211 K F & 7W F, Schrijf opdracht? u(********** Printer Write ********** E!7A F ACK sturen "E_ !M Fe 40 Bytes lezen $Ea Fen dan de checksum lezen. *E!7A F ACK sturen. k Ez FA2 E z !  FChecksum zelf berekenen.   FKlopt deze? C0^FFzo niet, error boodschap printen. n2 Printer: Checksum-Error : $"n "<>$"n F*E!7N F NO ACK (NACK) rE!7E F en ERROR sturen. -F FE*EC@B Ftzoek een CRLF ($9B) > FLE;@ B  BP Fen verander deze in CR en LF ($0C - $0A)  F F 'List' gekozen ? ^F("Fja: Tekst in het window printen!  F" F Buffer ingeschakeld ? i&EFja: Tekst naar de buffer! n F$ F Direct uitvoer gekozen ? 0;"Fdan ook meteen op de printer afdrukken! d FE!7C FCOMPLETE sturen.  F F F"-FKlaar dus nu weer wachten!  4***************** Procedures *****************  2+F*Hier komt het programma als een menu item *&E#  Fgeselecteerd is. w LF$w  L ! ! ! ! !!F$w L ! ! ! ! !!F*w `L!!!!!!!!Fw L!!!!F(w 8L!!!!!!!F F" dFEnd gekozen? F(!!!PF * QUIT * z<)!" Are you sure you | want to quit ?!! Yes | No !F 0 FoIs OK gekozen dan naar de desktop. `F F8(!!!FKAnders de menubalk weer inschakelen. vLF F.F 4+FF Copyright boodschap. A.U.B. NIET veranderen. V)!C ATARI ST/XL Interface | S.A.G.HARDWARE | FREAKS 1988 !! OK !F.F *+F Clear Window, Scherm schoonmaken. G^ HFnYF.F .+FMachinetaal subroutine initialisatie. R8RFDeze routine berekent heel snel de checksum van EFe van de ingelezen data. DEG@FeEen routine in basic is te langzaam hiervoor. 1QFEB5&H Fe F|FJ2a,6f,00,04,42,85,52,45,3a,2f,00,08,42,80,12,1d,d1,01,51,cd,ff,fa,4e,75 .F *********** Disk Procedures **********  $+F*128 Bytes/Sector instellen. * FcMFBent u er zeker van?  Fu OK 4E! FNull$ op de goede lengte brengen. 1 <!F '128 BpS' haakje *@!F '256 BpS' haakje weghalen. ,EF Lengtevariabele goed zetten. 2MF Disk opnieuw initializeren en leeg maken. . F F.F"+F 256 Bytes/sector instellen  FcMF FE! F(<!F De haakjes ook hier weer @!F goed zetten oEFMF F F.F<+F De zekerheidsvraag om de sectorlengte te veranderen. D)!) Changing Sector size| Erases ALL Data !|!! STOP | OK !F4 Fi:J !FBeide disks zijn hierna leeg voor het programma. MF en geef dit ook aan.  F.F $+F Sectornummer aan/uit zetten. $ Ftals deze ingeschakeld is "EFmoet het uitgezet worden. i FmEFanders inschakelen. r F,D!F Het haakje zetten/weghalen. h.F $+ FSector checksum bereken. FhSectors 1-3 k&EFaltijd 128 Bytes lang a F2EF een ander sectornummer krijgt de huidige  Fsectorlengte. s Ez Fl8 E z@ ! FBereken het met de ML-routine. (@ E F en de checksum opslaan. t.F + F ** Directory printen ** p ^FDYF "FEFF $  F * Single Density * .E4G8FeDirectory sectoren 0EGbHFrhelemaal doorlopen EFE> Z?@ @ @ B FEinde van de directory? K. ?@ @@ B FFile gewist? :E?@ @ @0 F nee: Filename ophalen r0;@ "."=@ WWW"F en afdrukken. eB7?@ @@ 7?@ @@ "Ffile lengte EF FF F,P "| "FScheidingsteken printen.  F F F B Zdd?@ @ @ B FGeen files meer. FFZE#7?@44 @@ 7?@4 @ @ Fvrije sectoren 4W Sectors =W# W Bytes freeF?printen!   FS * Double Density * EG@F*2E# GbHF EFE Z?@ @@ B F ?@ @@ B FE?@ @@0 F8;@ "."=@ WWW7?@ @@@ "FEF FF FP "| "F F F F * Zdd?@ @@ B F FFjFEGF& ?@@ @@ B~ F4F? F F,WBlocks =WW Bytes freeF FF.F 4+FAllebei de disks initializeren en leegmaken. EGF MF FG.F"+FDe eigenlijke wis routine. EGFn6@ E! FSectoren 1-3 altijd 128 Bytes @ EF FEG@ Fo0@ E! FDe hele string met 0 vullen B*@ EFde checksum natuurlijk ook. u F ^FYF.F "+ F* Een hele disk opslaan * j  FMFGeef een filenaam. F}FMuis = Busy bee! E@ IF 6 Z@ ! FaVanaf de eerste volle sector $ Fvanaf het einde opslaan. 7R!M!!FtPM!l!lF6 EA DA LA Feerst alle parameters. E FNE FM!FF2EGF daarna de inhoud van alle Sectoren NE@ F*EB@ Fnen hun checksum opslaan. M!F F8MF}F Muis = pijltje  F F.F + Fu * Een hele disk laden * mEF6  F Een boodschap als de disk al data bevat. @)!$ Loading clears | current contents |!! OK | CANCEL !F F FnMFGeef een filenaam. F}FMuis = busy bee, MFu 7I!M!F&E_!M FeParameters laden. n$E5 FAantal sectoren bepalen. @ E5?@C@D @ FnDiskette formaat terughalen. @ 5?@C@L @ Fekomt het BpS getal overeen * Fmet de huidige lengte? E_!M Fm FEGF$@ E_!M FSektorinhoud en e6@ E7_!M Ftde checksum inlezen uit de file a F7EGFM6@ E;@ @ FSectoren 1-3 inlezen. a F;, FWas de sectorlengte verschillend? .)! Invalid Sector Length |!! Stop !Fl F8MFMF  F}FMuis weer een pijltje hM Fu Directory printen e F.F 0+F Filenaam ingeven in een FileSelectorBox e(fBH  :\*.DSK!!F C@. FE.DSKF F.F $+F Drive activeren/deactiveren. EFa^F$  FAls de drive aktief is  EFF dan deaktiveren en 2!Fhet haakje verwijderen. e8]! InactiveFNieuwe status van de drive aangeven. 2E0GpFv!FE F0 F& EF Anders de drive activeren .!Fen het haakje zetten 2E0GpFv!FE F0$MFNieuwe instelling aangeven.  F.F + F * Disk SD formatteren * e M F Weet je het wel zeker ? e0 Fj Ja, dan 707 vrije sectoren in VTOC <@4 !!  EB BC B BC B F&@4 !0! EBp F4@4 !@!2 E2! FD@4 !`! EB B~ FDir. sectors zijn bezet :@4 E`FEChecksum van VTOC goed zetten i EFDiskstatus: SD MFEen aangeven u F.F + F * Disk ED formatteren * kM F Fk0@ !p! EB| B% F@ EFEEGF@@ ! EB~ F F@@ E~F  EFMFE F.F $+ FE Wilt u de disk formatteren? &E#  FBepaal drive nr. EF>  FAls de disk al geformatteerd is, nog een vraagje <)!! Formatting erases everything ! |!! OK | STOP !Fe F* Ft'OK' start het formatteren. !(MFRoep de procedure daarvoor aan. . F.F &+F De status van de beide drives .EGFu aangeven. eMF FG.F +F De status van n drive r  Faangeven. d]! InactiveFn F  F"]! Active : UnformattedFe F  F$]! Active : Single DensityF F&]! Active : Enhanced DensityF F F F.F .********** Printer procedures ********** O (+F*Direct uitvoer in/uitschakelen. * Fth!F EF Fh!F EF F MF Status opnieuw aangeven. .F +F Buffer in/uitschakelen ^FYF Frp!F  EFEF Fp!F  EF F MF Status opnieuw aangeven. .F (+F Bufferinhoud afdrukken op papier . Falleen als de buffer gevuld is. O>)!" Print buffer | Printer on-line ?|!! OK | CANCEL !F F .;Fclick OK om het zaakje uit te printen.  F F.F &+FBufferinhoud op disk opslaan. p. Fook alleen als er iets in staat &fBH  :\*.*!!F F7O!M!FOpen file. M!FSchrijf de buffer weg. 8MFClose file.  F F.F .+FBufferinhoud afdrukken op het scherm. ^FF.F +FBuffer leegmaken. kEFu.F *+FFPrinter routines in/uitschakelen. r& Fe Als ze ingeschakeld zijn !FAHaakje weg en eEhGxFn&!FEde menu items uitschakelen. FeEF F8!Feanders inschakelen,het haakje zetten en EEhGxFa*!FEde menu items weer inschakelen. k FeEF F*MF De nieuwe printerstatus aangeven. k.F $+F List funktie in/uitschakelen Ff0x!FuAfhankelijk van de situatie uit- EF F x!Fuof inschakelen. dEF F(MF De nieuwe status aan gaan geven. .F +F Printerstatus aangeven. nEFr FnDirect printen? eE Direct PrintingFn F Fe$E Buffer FNaar de buffer? v F FB E List FOp het scherm?  F FsE InactiveFInaktief? e F0]!Fn zet alle informatie op de statusregel. .F "**** Kopier procedures **** e +F *** Disk to ST Copy *** *"E  FoWelke drive ? e,  F Als de drive geformatteerd is g ^F .:Select file to copy:"F Filename ingeven >:$9B => 10,13 (y/n) " F Moet CRLF in LF en CR verandert FE F1worden? /$EC@. FeIs er een extender ? ( F.#zo ja, Filenaam formatteren. 6E;@  =@6  #6  F F@:E06 Fanders moeten er spaties achter.  F   F** Single Density ** EF.E4G8FdDirectory sectoren 6EGbHFr doorzoeken voor de file. < ?@ @ @0 ?@ @@ CF@<E7?@ @@ 7?@ @@ F@ F ZF F ZF F& FAls de file er niet is!! ,)! File not found! |!! CONTINUE !F F Fe EFFMaak de buffer leeg. F6E;@ @ F Sector in de buffer inlezen. :E#7?@ @@ 7?@ @@ F@>FGa door totdat de volgende te lezen sector 0 is. 8 ; @ YF Omzetting van CRLF in LF,CR nodig $ EB FBuffer kopieren EFEF4EG6 Fen dan zoeken naar de combinatie. d> ? @@ B FAls CRLF gevonden is omzetten naar 6E? @@ B  BP FLF en CR. t EF F F FBfBH  :\*.*!!FFilenaam voor het opslaan. F*!z !6 FOpslaan onder deze naam.  F F  F>** Double Density ** voor DD geldt hetzelfde verhaal als SD EFEG@F 2E# GbHFa< ?@ @@0 ?@ @@ B F E7?@ @PP@ FBE7?@ @``@ 7?@ @p@ FF F ZF F ZF F F,)! File not found! |!! CONTINUE !F F FeEFFFEHHFEG`FE;@ @ F FE7?@@ @@ FI}F@  6 F&fBH  :\*.*!!F!z !F F4)! Error: | File too short!|!! Tough! !F F F F F.F +F *** ST to Disk Copy *** t E ,,FDWelke disk? t*  FIs de disk geformatteerd? o.)! Disk not formatted!|!! CONTINUE !F FD ^Fk8fBH  :\*.*!!FFilenaam kiezen F ;@ \F&E=@6  F Filenaam corrigeren.  F7I!M!FFile openen. EsM FLengte ophalen. o6 # @FrIs de file te groot n8MFzo ja, file sluiten <)!$ File too large | for your ATARI !|!! CANCEL !F@ F jFF&EC@. FoFilenaam formatteren. R F.6E;@  =@6  #6  F F@E06 F F   F** Single Density ** V # #7?@4 @@ 7?@4 @ @ F:)!" File too large | for your disk!|!! CANCEL !F F j!F@E4G8Frvrije plaats in de directory zoeken. EGbHFi6 Z?@ @@ B ?@ @@ B F4FZ F6 Z?@ @@ B ?@ @@ B F FM! F%vrije sector zoeken. @ !! EBFkStatus 4@ !! EB# }p FLengte LO >@ !! EB## }p  FLengte HI .$@ !! EB FSector LO 4@ !! EB F Sector HI L8@ ! !0 EF Filenaam invoegen t&M F'en de checksum berekenen. FEG# H# F*@ E_# !M Fsectoren inlesen. nEFE"M! F# Volgende vrije sector? :@ E@ B B B# F M F Checksum berekenen. F ,E # FDe rest in de laatste sector 6@ E_!M #  B B B F M FChecksum berekenen. ** VTOC korrigieren ** eE44Fr)VTOC sector eD@ !! EB7?@ @@ ##  FF@ ! ! EB7?@ @ @ %#  F$M F%Checksum VTOC berekenen  FSD File zu gro T  F 8** Double Density ** ook hier weer hetzelfde verhaal. jFoEGF*& ?@@ @@ B~ F4F? F F  F:)!" File too large | for your disk!|!! CANCEL !F F EFEG@Fr2E# GbHFL6 Z?@ @@ B ?@ @@ B F F6 Z?@ @@ B ?@ @@ B F FM" F@ !! EB@ F@ !!0 EF?0@ !@! EB }p F @ !P! EB F @ !`! EB F(@ !p! EB F M F EGH FEEFEG`F F@ E_!M F EF F@ E_!M F F M F ZrM F F ZrM FEF4FF M" FF@@ !! EB F F"@@ !! EB} FE@@F M F  F FM FDirectory afdrukken 8MF F F F.F .+! Fceerstvolgende vrije sector zoeken. h!FjF E0GF< Z?@4 @@ B Fvrij byte in VTOC zoeken. FE`IF@F Z7?@4 @@  FIn dit byte een vrij bit zoeken * F%dit is nl. een vrijke sector. iPE#0 #` Fbgeef nu aan dat de sector bezet is. 6@4 !! EB7?@44 @@   Fd.F 4+" Feerstvolgende vrije cluster in ED vinden EGFe> Z?@@ @@ B~ FVrij cluster zoeken F.F