GfABASIC *xxx~TTU8UUUUUUUVhVpVpVpOCOWWINULLFFPMPUADFSUA1RBSECCLLENIDSNPSHBCSS1MPUDUMMYSUREOLJFRSIZFILSECOLDCLOLDMEDCOMDFDSUGO1GOGO2DSTAT1DSTAT2PSTATMPROGINITALLMENUEPINFODINFO2SETMLDOSUMDINFOINITINFODIRSAVLOAFMTSDFMTDDXSETDDIREKTPUFFERLISTPRPUFSHPUFCLPUFSAPUFSETPDSTSTDSET128SET256SHOWNRCLWSUREFILEFMTSUREFINDFREEFINDFRE2CLOSEWCLSECYFE#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 JFh(vLFFMenu proceduren initializeren.  BEp!!!!!! FBaudrate instellen op 19200 baud. u@!Ft<!F>pE G@Fk De menu items van het Disk 1 menu !FEuitschakelen.  NFi EF Disk 2: Aktief. k EF.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. , MFPrinter Status aangeven. MFDisk Status aangeven. n.MFMachinetaal subroutine initializeren. 0 |FF6! FaAlle aanwezige tekens uit modempoort Ea Fverwijderen. FNFF |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. L #  # 71   F  AND (c%<>ASC("2") OR d%(1)=0) >-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. LFEa 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 D * 71 FOR c%=ASC("2") !Is het gekozen device een drive? d:****************** Disk Routines ******************* (E 70 F* Gekozen disk bepalen. *&E!7A F ACKNOWLEDGE (ACK) sturen. .FE  FCSectornummer berekenen uit het commandoblok.  < r 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( F,M! B CFDSectorinhoud 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 @ jFeDe sectoren 1-3 zijn altijd 128 Bytes lang. * E_!M FD128 Bytes ophalen.  F4 E_!M FAnders kunnen het er ook 256 zijn.  FEa FChecksum ophalen. uE!7A FACK sturen. e2 HFMoet het sectornummer geprint worden? i ^F2Y! "Getting Sector $"n " ("") Fn F0M FeReken de checksum van de sector uit. 4 h 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 . R 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 ******************   r 7S F************ Printer Status ********** *"RF*Printer Statusblok sturen. .PEG`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.  4 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" P 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" H 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 Fl6 E z ! F~Bereken het met de ML-routine. $ E Fen de checksum opslaan. e.F + F ** Directory printen ** p ^FDYF "FEFF $  F * Single Density * .E4G8FeDirectory sectoren 0EGbHFrhelemaal doorlopen EFE: Z? @ @ B FEinde van de directory? n, ? @@ B FFile gewist? 8E? @ @0 F nee: Filename ophalen ?0;@ "."=@ WWW"F en afdrukken. e<7? @@ 7? @@ "Fefile lengte oEF lFF F,P "| "FScheidingsteken printen.  F F <F > Zdd? @ @ B FGeen files meer.  FFRE#7?4 @@ 7?4 @ @ Fvrije sectoren 4W Sectors =W# W Bytes freeF?printen!   pFS * Double Density * EG@F*2E# GbHF EFE Z? @@ B F ? @@ B FE? @@0 F6;@ "."=@ WWW7? @@@ "FEF FF FP "| "F F F F & Zdd? @@ B F FFjF@EGF" 6?@ @@ B~ F4F? F  F,WBlocks =WW Bytes freeF FF.F 4+FAllebei de disks initializeren en leegmaken.  FOR d%=0 TO 1 OEFMF NEXT d% .F"+FDe eigenlijke wis routine. TEGFn4 E! FSectoren 1-3 altijd 128 Bytes v  EF  FEG@ Fo, E! FDe hele string met 0 vullen 8( EFde checksum natuurlijk ook. l nF ^FYF.F "+ F* Een hele disk opslaan * j  FMFGeef een filenaam. żF}FMuis = Busy bee! ĶE@ IF 2 ĶZ ! FVanaf de eerste volle sector $ `Fvanaf het einde opslaan. 7R!M!!FtPM!l!lF6 EA DA LA Feerst alle parameters. E FNE FM!FF2ŞEGF daarna de inhoud van alle Sectoren NE F&EB Fen hun checksum opslaan. M!F XF8MF}F Muis = pijltje  F F.F + Fu * Een hele disk laden * mEF6 h 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 F8EGF" E_!M FnSektorinhoud en a2 E7_!M Fde checksum inlezen uit de file F7ȀEGFM0 E; @ FSectoren 1-3 inlezen. e FF;, 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. ˸F 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 2ˌE0GpFv!FE zF0$MFNieuwe instelling aangeven.  F F.F + F * Disk SD formatteren * e M F Weet je het wel zeker ? e0 jFj Ja, dan 707 vrije sectoren in VTOC :44 !!  EB BC B BC B F$44 !0! EBp F244 !@!2 E2! FB44 !`! EB B~ FDir. sectors zijn bezet ?64 E`FChecksum van VTOC goed zetten  EFDiskstatus: SD MFEen aangeven u F.F + F * Disk ED formatteren * kM F LFk. !p! EB| B% F EF"EGF@@ ! 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* xFt'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 0 Faangeven. d]! InactiveFn F h 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 vFh!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 EժEhGxFa*!FEde menu items weer inschakelen. k vFeEF F*MF De nieuwe printerstatus aangeven. k.F $+F List funktie in/uitschakelen TFf0x!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 nFB 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, n 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 ? ( zF.#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. 6 ڼ? @ @0 ? @@ CF6E7? @@ 7? @@ Fe F ZF LF ZF F& :FAls de file er niet is!! ,)! File not found! |!! CONTINUE !F F ݸFe EFFMaak de buffer leeg. F2E; @ FSector in de buffer inlezen. 2E#7? @@ 7? @@ F>hFGa door totdat de volgende te lezen sector 0 is. 8 8; @ YF Omzetting van CRLF in LF,CR nodig $ EB FBuffer kopieren EFEF44EG6 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  jF>** Double Density ** voor DD geldt hetzelfde verhaal als SD EFEG@F 2E# GbHFa6 ? @@00 ? @@ B FE7? @P@ F?<E7? @`@ 7? @pp@ F  F ZF TF ZF "F JF,)! File not found! |!! CONTINUE !F F fFeEFFFEHHF߮EG`FE; @ F ߎFE7?@ @@ F`}F@  *6 F&fBH  :\*.*!!F!z !F bF4)! 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 l# @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 ** N # #7?4 @@ 7?4 @ @ F:)!" File too large | for your disk!|!! CANCEL !F F j!F@E4G8Frvrije plaats in de directory zoeken. ZEGbHFi0 ZZ? @@ B ? @@ B F4FZ F0 Z? @@ B ? @@ B F FM! F%vrije sector zoeken.  !! EBFStatus 0 !! EB# }p FLengte LO < !! EB## }}p  FLengte HI " !! EB FSector LO 0 !! EB F Sector HI F4 ! !0 EF Filenaam invoegen n&M F'en de checksum berekenen. FEG# H# F( E_# !M Fsectoren inlesen. aEFE"M! F# Volgende vrije sector? 4 E B B B# F M F Checksum berekenen. F ,E # FDe rest in de laatste sector 2 E_!M #  B B B F M FChecksum berekenen. ** VTOC korrigieren ** eE44Fr)VTOC sector e> !! EB7? @@ ##  F@ ! ! 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 zF  F:)!" File too large | for your disk!|!! CANCEL !F F EFEG@Fr2E# GbHFL0 Z? @@ B ? @@ B F ZF0 Z? @@ B ? @@ B F (FM" F !! EB@ F !!0 EF?, !@! EB }p F !P! EB F !`! EB F$ !p! EB F M F EGH FEEF8EG`F F E_!M F! EF F E_!M F! F M F 8ZrM 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?44 @@ B Fvrij byte in VTOC zoeken. XFE`IF@B Z7?4 @@  FIn dit byte een vrij bit zoeken * F!%dit is nl. een vrijke sector. PE#0 #` Fbgeef nu aan dat de sector bezet is. 044 !! EB7?4 @@   Fi.F 4+" Feerstvolgende vrije cluster in ED vinden 4EGFe< 4Z?@@ @@ B~ FVrij cluster zoeken o F.FJ $<V°`ϦVT͒6Ѽ \"N8Ԉ `x