GFA-BASIC3 <//llmmmmmmmmmmnbnbnbnjnjooOCOWWINULLFFD2D1PMPUPU1PU2PU3ADFSUA1RBSECCLIDLENSNPSHBCSS1MPUDUMMYSURECHOICEOLJFRSIZFILSECOLDCLOLDALREXITMEDCOMDFDSUEBUSIGO1GOGO2DSTAT1DSTAT2PSTATMPROGMENUEINITPINFODINFO2SETMLDOSUMDINFOINFODIRSAVLOAFMTSDFMTDDXSETD CHANGE_DEVNRDIREKTPUFFERLISTPRPUFSHPUFCLPUFSAPUFSETPSETBUFFDSTSTDSET128SET256SHOWNRCLWSUREINITALLFILEFMTSUREFINDFREEFINDFRE2CLPUFFCLSECFF"E# F E߀Fp!!!FVH !? !! ! ! !! ! F$!M!AUX:F4! F4! FFXG?FF  F ***F F L9FL߀9FHDesk , ATARI ST/XL Interface ,----------------------,1,2,3,4,5,6,"" jDisk 1 , Directory, Save Disk, Load Disk, Format SD, Format ED,------------, Set, Change Nr,"" jDisk 2 , Directory, Save Disk, Load Disk, Format SD, Format ED,------------, Set, Change Nr,"" DPrinter , Direct, Buffer, List, Print Buffer, Show Buffer tH Clear Buffer, Save Buffer,---------------, Set, Buffer size,"" VCopy , Disk 1 to ST , Disk 2 to ST,--------------, ST to Disk 1, ST to Disk 2,"" DSettings , 128 BpS, 256 BpS, Show Sector# ,----------------- J Clearw Disk 1, Clearw Printer , Clearw Disk 2, Clearw Status,"" oEnd, * Quit * ,*** l, FMenubalk aanzetten. P (42FDefault device number disk 2 4FD*L!Disk FWindow 1 = Disk 1 lP!-Fs 4F*L!PrinterFFWindow 2 = Printer P!-Fi 4F*L!Disk FWindow 3 = Disk 2 P!-Fs 4F.L!StatusFWindow 4 = Status window XGFW(FAlle windows openen Fen schoonmaken. p Fh(FMenu procedures initializeren.  X8V!!!!!! FBaudrate instellen op 19200 baud. S8X GF De menu items van het Disk 1 menu u8!Fuitschakelen. i FF&P9FcDisk 2: Aktief. n8F8FFInitialize disk 2 : G FkP9F8FF 41FL!Disk F$F68FsShow sector# als default niet aktief. u>8!FoDisk 2: 'Set' het 'haakje' ervoor zetten. 8F Printer: Aktief. 28'!FiPrinter: 'Set' haakje ervoor. oH8Fsh%=1 printer output naar window, sh%=0 niet naar window ,8!!F%Printer: 'List' haakje. n0@FBuffer size 32 k, 2=64 k, 3=128k 082!FfSettings: '128 BpS' haakje. "FPrinter Status aangeven. FDisk Status aangeven. n0FMachinetaal subroutine initializeren.  |FHFJU! ߀FtAlle aanwezige tekens uit modempoort 8J Fverwijderen. $F F |FHFNU! ߀FtWachten op een teken aan de modempoort. 2$F Of op een menu keuze. F F |F28 J F 1 Byte van de modempoort halen. eJ # ݀ # C   # C   Fb@F# kijken of een van onze 'apparaten' aangesproken wordt 4$Fen of ze aktief zijn. Als dit zo is doorgaan :8 FFanders terug en wachten op andere informatie. wXGFu&8J F Commandoblok halen. 0P9Fen opslaan om later te gebruiken. f 8 F<8 #  % ݀ FChecksum uitrekenen. F&8J F De checksum ophalen. 4  F als deze niet klopt met de berekende @(F waarde. Een error boodschap op het scherm zetten. L Invalid Command-Frame !FF<Fn Dan terug en wachten op informatie van modempoort. $F < C  C FIs het gekozen device een drive? <****************** Disk Routines *******************  C F*8F $F C F*8F $F.!CA F ACKNOWLEDGE (ACK) sturen. *T8  FuSectornummer berekenen uit het commandoblok.  D  CR FIs de opdracht een Leesopdracht (READ). e(********** Read Sector ********** !CA F ACK sturen. *4 FCMoet het sectornummer geprint worden? p>(߀߀Fu zo ja, window openen en printen. <LY! "Sending Sector $" " ("7") F$F8PM!! B! CF"Sectorinhoud en de (Fbijbehorende checksum sturen. c,$FDat was de leesopdracht (van de XL).  N  CP  CW F Een schrijfopdracht (WRITE - PUT). .********** Put/ Write Sector ********** n!CA FACK sturen D ߀FsDe sectoren 1-3 zijn altijd 128 Bytes lang. T0L!9_!M F128 Bytes ophalen. 8F<L!9_!M FAnders kunnen het er ook 256 zijn. $F$8J FChecksum ophalen. n !CA FACK sturen. e4 FCMoet het sectornummer geprint worden? 5(߀߀Fu<LY! "Getting Sector $" " ("7") F$F2# FReken de checksum van de sector uit. 6 Fklopt deze met de opgehaalde van de XL >(FIs dit niet zo, dan een error boodschap printen. <L PUT: Checksum-Error in $" " : $" "<>$" F0!CE Fund ERROR sturen naar de XL Fen weer wachten. $F<!CC Fanders COMPLETE sturen om het einde aan F&Fte geven van deze opdracht. u$F 6  CS Fe STATUS opdracht gevraagd? e(********** Disk Status ********** ,(߀߀F* Window openen g6 ߀F voor een bepaalde Sectorlengte .Fhet bijbehorende statusblok sturen. o 8FhFF$F$XGFe 6 Statusbytes kFData lezen &!F en naar de XL sturen. s FFEn weer wachten. |F67,16,0,1,0,17 c|F67,48,0,1,0,49 c$F F  C!  FlFormatteer commando's. 2********** Format Disk SD of ED ********** r !CA FACK sturen. o8P9 F Disk op SD of ED zetten. F9en aan gaan geven. L Formatting....FFoDisk leegmaken. n<PM!߀! F'alle Sectoren OK' sturen o$!CC FCOMPLETE sturen. Fop WRITE gaan wachten. $F 4(F Onbekend commando en dit ook aangeven. :LUnknown Command : " W("B ")FFFk$F 0 ߀F Was de printer gekozen? <***************** Printer Routines ******************    CS Fi,********** Printer Status ********** *$F*Printer Statusblok sturen. .XGFuACK en de 6 Status bytes Flezen. !Fund sturen F|F65,67,128,78,5,0,211 $F .  CW F Schrijf opdracht? *********** Printer Write ********** !CA F ACK sturen &4_(!M F 40 Bytes lezen ,8J Fen dan de checksum lezen. ? !CA F ACK sturen. k 8 л F48 u л !( FChecksum zelf berekenen.   FKlopt deze? C0(Fzo niet, error boodschap printen. n4L Printer: Checksum-Error : $" "<>$" FF"!CN F NO ACK (NACK) $$!CE F en ERROR sturen. F 8F,8D!B FRzoek een CRLF ($9B) > FR4;!߀ B B Fen verander deze in CR en LF ($0C - $0A) $F F 'List' gekozen ? (F*L"Fja: Tekst in het window printen! $F$ F Buffer ingeschakeld ? i<F( B B  B FB(4Fja: Tekst naar de buffer! n 8F 0FF:<FF: B B  Ff 4F 8F<F$FF( B B  B FB 4F 8F( B B  B FB 4F 8F B B  F 4 F 8F<F$F$F$F4F F.! Buffer full !! Exit !Fr$F$F$F& F Direct uitvoer gekozen ? 2"Fdan ook meteen op de printer afdrukken! d$F$!CC FCOMPLETE sturen. $F$F$F$FKlaar dus nu weer wachten!  6***************** Procedures ***************** d 4F*Hier komt het programma als een menu item *:8#\  Fgeselecteerd is. \ LF2\ L! ! ! ! ! !!F 2\ L! ! ! ! ! !!F 8\ L!!!!!!! !!Fn(\ L!! !!F2\ L!!! !!!!Fn0F, \ FEnd gekozen? HF*p!!! F * QUIT * nH!" Are you sure you | want to quit ?!! Yes | No !F0: ߀FuIs OK gekozen dan naar de desktop. TF$FDp!!!FgAnders de menubalk weer inschakelen. F$FF 6F Copyright boodschap. A.U.B. NIET veranderen. b!C ATARI ST/XL Interface | S.A.G.HARDWARE | FREAKS 1988 !! OK !FeF ,FClear Window, Scherm schoonmaken. (\ FhFFF 0FMachinetaal subroutine initialisatie. .:FDeze routine berekent heel snel de checksum van E"4FF van de ingelezen data. DXGFeEen routine in basic is te langzaam hiervoor. F F4B5&H FF F|FL2a,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. * ߀FoFBent u er zeker van?  ߀Fr OK 84! FNull$ op de goede lengte brengen. 0$82!F '128 BpS' haakje .83!F '256 BpS' haakje weghalen. ,8F Lengtevariabele goed zetten.   Fe4 F Disks opnieuw initializeren en leeg maken. 8FD"8Fo of alleen 1 disk rF$F$F$FF$F256 Bytes/sector instellen  ߀FoF ߀Fo4! F,82!F De haakjes ook hier weer 83!F goed zetten o8F  Fn4 F Disks opnieuw initializeren en leeg maken. 8FD4! Not enough | Memory!!Sorry!F$F$F$FF>F De zekerheidsvraag om de sectorlengte te veranderen. N!) Changing Sector size| Erases ALL Data !|!! STOP | OK !F ߀FS<4 !FBeide disks zijn hierna leeg voor het programma. F en geef dit ook aan. $FF $F Verander het device nummer <FF (Fr*LY! "New drive number : "FFF \ Fu"  5 ߀F 4 FFL!Disk F<F$F 8F!"  5 ߀F 4 FFL!Disk F<F$F$F FF &FSectornummer aan/uit zetten. & Ftals deze ingeschakeld is *8Fsmoet het uitgezet worden. F 8F$8Fmanders inschakelen. r$F,84!F Het haakje zetten/weghalen. rF $ FSector checksum bereken. $ ߀FsSectors 1-3 &8Faltijd 128 Bytes lang a 8F48FF een ander sectornummer krijgt de huidige $Fsectorlengte. s 8 л F<8 u л! ! FBereken het met de ML-routine. *P!9 Fen de checksum opslaan. mF "F! ** Directory printen ** p(݀F FFL "FF0߀F 0  F * Single Density * (XiGpFDirectory sectoren 2`GHFshelemaal doorlopen 4 FFH?! !ߠ! B FEinde van de directory? O2 ?! !! B FFile gewist? <4 ?! !ߠ! F nee: Filename ophalen 4L; ! "."= ! WWW"Fen afdrukken. obL7C?! !! ߀C?! !! "Ffile lengte e 0F FLFF 8F,L "| "FScheidingsteken printen. $F$F FN?! !! B FGeen files meer. FLFF^8#C?!h !! ߀C?!h !! Fvrije sectoren @L7W Sectors =W7# W Bytes freeFprinten!  8F  * Double Density * XGFD<`#߀ GHF 4 FF.?! !߀! B F$ ?! !! B F$4 ?! !߀! FFL; ! "."= ! WWW7C?! !! "F 0F FLFF 8FL "| "F$F$F F<?! !! B F FLFFFXGF?( ?! !! B FF?$F F2L7WBlocks =W7߀W Bytes freeFF$FLFFF 6 FAllebei de disks initializeren en leegmaken. XGFiF FGF$FDe eigenlijke wis routine. XGFe:L!9! FSectoren 1-3 altijd 128 Bytes P!9F FXGF6L!9! FDe hele string met 0 vullen t2P!9Fde checksum natuurlijk ook. l F(߀߀FsFF*P9FDisk is geinitialiseerd jF $ F9* Een hele disk opslaan * s  F!FGeef een filenaam.  F\FMuis = Busy bee! \@ IFb:! ! FVanaf de eerste volle sector &F!vanaf het einde opslaan. $R!M! !߀FaM!l !߀l F84 D L Feerst alle parameters. 4  F  EFM!F4XGF daarna de inhoud van alle Sectoren  E! F,4 B! FFen hun checksum opslaan. M!݀F F 0MF\F Muis = pijltje $F$FF " F * Een hele disk laden * m0F 8  F Een boodschap als de disk al data bevat. L!$ Loading clears | current contents |!! OK | CANCEL !F$F ߀Fl!FGeef een filenaam.  F\FMuis = busy bee, F$I!M! F*4 _!M FParameters laden. n&85 FFAantal sectoren bepalen. JP95? !D !D ! F Diskette formaat terughalen. J 5? !D !L ݀! Fskomt het BpS getal overeen . ߀FLmet de huidige lengte? 4 _!M F$FXGF*L!9_!M FSektorinhoud en gBP!9C_!M Fude checksum inlezen uit de file FXGFM6L!9;! ! FSectoren 1-3 inlezen. u F;.8FWas de sectorlengte verschillend? n:! Invalid Sector Length |!! Stop !Fe$F 0MFF$F$\FMuis weer een pijltje F Directory printen p$FF 2!F Filenaam ingeven in een FileSelectorBox t*$BW  :\*.DSK!! F D !.  F4 .DSKF$FF &F Drive activeren/deactiveren. 0݀Fr(F&  FAls de drive aktief is $P9Fs dan deaktiveren en >8ߠ!F het haakje verwijderen. i:P! InactiveFNieuwe status van de drive aangeven. 8XݠGݠF 8!F FFG F 8F  F6! Not enough | memory |!!Sorry!F 8F,P9F Anders de drive activeren :8ߠ!Ften het haakje zetten 8XݠGݠF 8!F FF&FNieuwe instelling aangeven. $F$FF " F * Disk SD formatteren * e""F Weet je het wel zeker ? e: ߀Fl Ja, dan 707 vrije sectoren in VTOC F!h !! EB B B B B F&!h ! ! EB F,!h ! !Y EY! FH!h !8! EB B FDir. sectors zijn bezet n6P!h9FChecksum van VTOC goed zetten e P9FDiskstatus: SD F9en aangeven s$FF " F * Disk ED formatteren * a  F4! Not enough | Memory!!Sorry!F$F"F ߀Fh.! !! EB~ B FP!9$FXGF! ! EB F FP!9FP9FF9$FF &"F9 Wilt u de disk formatteren? :8#\  FBepaal drive nr. 8F@  FAls de disk al geformatteerd is, nog een vraagje F!! Formatting erases everything ! |!! OK | STOP !F$F4 ߀Fg'OK' start het formatteren. *FRoep de procedure daarvoor aan. m$FF (F De status van de beide drives . XGFn aangeven. F FGF "F De status van n drive r  Faangeven. d(P߀߀! InactiveFm 8F  F6P݀! Active : UnformattedF 8F  F6P߀߀! Active : Single DensityF 8F8P߀߀! Active : Enhanced DensityF$F$F$FF 0********** Printer procedures **********  *F*Direct uitvoer in/uitschakelen. * ߀F 8!F0F 8F!8!F0F$F"F Status opnieuw aangeven. F "F Buffer in/uitschakelen. (FfFF ߀Fc8 !F8 FFF Buffer leeg maken. 8FF8 !F8 F$F"F Status opnieuw aangeven. F *F Bufferinhoud afdrukken op papier 0 Falleen als de buffer gevuld is. J!" Print buffer | Printer on-line ?|!! OK | CANCEL !F ߀Ff8""" Fclick OK om het zaakje uit te printen. $F$FF (FBufferinhoud op disk opslaan. 0 Fook alleen als er iets in staat p($BW  :\*.*!! F F$O!M! FOpen file. 0PM!""" FeSchrijf de buffer weg. 0MFClose file. S$F$FF 0FBufferinhoud afdrukken op het scherm. (FfL""" FF FBuffer leegmaken. k 4FF 4FF 4FF 4 FFF ,FFPrinter routines in/uitschakelen. r0 ߀Fe Als ze ingeschakeld zijn "8'!FHaakje weg en eXG!Fa,8!Fde menu items uitschakelen. z FF8Fd 8F<8'!F anders inschakelen,het haakje zetten en KXG!Fd08!Fde menu items weer inschakelen. e FF8Fd$F,F De nieuwe printerstatus aangeven. eF &F List funktie in/uitschakelen  ߀Fn48!!FAfhankelijk van de situatie uit- 8F 8F$8!!Fof inschakelen. d8F$F*F De nieuwe status aan gaan geven. F "F Printerstatus aangeven. n 4 FF FnDirect printen? e4  Direct PrintingFF$F Fe&4  Buffer FNaar de buffer? v$F FB"4  List FOp het scherm? $F Fs4 InactiveFInaktief? e$F6P! F zet alle informatie op de statusregel. F FF! Give new buffer size !! 32 k | 64 k | 128 k !F 0FFi@FiFi G Fb@F 8F@F4! Not enough memory !! Sorry !F$FFo G Fh@F 8F@F4! Not enough memory !! Sorry !F$F4FF $**** Kopier procedures ****  "F *** Disk to ST Copy *** *,8\ F*Welke drive ? o.  F Als de drive geformatteerd is r(݀Fe0Select file to copy:" F Filename ingeven @$9B => 10,13 (y/n) "F Moet CRLF in LF en CR verandert 4  FFworden? /&8D !. FIs er een extender ? * F#zo ja, Filenaam formatteren. N4 ; !߀ ߐ = !B  #B  F 8F!>4 B Fanders moeten er spaties achter. $F   FF** Single Density ** F8Fe(XiGqF Directory sectoren 8`GHFs doorzoeken voor de file. B ?! !ߠ!  ?! !! CFT8C?! !! C?! !! ߀F$F F F F F( FAls de file er niet is!! 8! File not found! |!! CONTINUE !F$F F 4 FFMaak de buffer leeg. F@4 ;! ! FSector in de buffer inlezen. b8#C?! !!  C?! !! F@ F!Ga door totdat de volgende te lezen sector 0 is. > ; ! YF Omzetting van CRLF in LF,CR nodig s$4 B FBuffer kopieren 4 FF8F8XGB Ffen dan zoeken naar de combinatie. nB ?!! B FAls CRLF gevonden is omzetten naar 44 ?!! B B FLF en CR. 8߀F$F F$FD$BW  :\*.*!! FFilenaam voor het opslaan.  F.P !л !B FOpslaan onder deze naam. $F$F 8F@** Double Density ** voor DD geldt hetzelfde verhaal als SD 8FeXGF <`#߀ GHF F ?! !߀!  ?! !! B F(8C?! !! F T8C?! !! ߀C?! !! F $F F F F F F8! File not found! |!! CONTINUE !F!$F F 4 FFF 8݀FXGF4 ;! ! F F,8C?! !߀! FE F  B F($BW  :\*.*!! FP !л !F 8F@! Error: | File too short!|!! Tough! !F$F$F$F$FF "F*** ST to Disk Copy *** *8\ F*Welke disk? !,  FIs de disk geformatteerd? :! Disk not formatted!|!! CONTINUE !F 8F(݀Ft:$BW  :\*.*!! FFilenaam kiezen  F ; ! \F24 = !B  F Filenaam corrigeren. $F $I!M! FFile openen. "8O FLengte ophalen. n< #߀ @FoIs de file te groot !"0MF#zo ja, file sluiten H!$ File too large | for your ATARI !|!! CANCEL !F 8F FF(8D !. FFilenaam formatteren. r FV4 ? !!݀  = !B  #B  F 8F!4 B F$F   FF** Single Density ** Fb # #C?!h !! ߀C?!h !! FF!" File too large | for your disk!|!! CANCEL !F 8F !F:XiGqFovrije plaats in de directory zoeken. `GHFt@?! !! B ?! !! B FF? F@?! !! B ?! !! B F F$## F%vrije sector zoeken. $! !! EBFStatus N! !! EB# p < FLengte LO Z! !! EB## p <  FLengte HI 4! !! EB FSector LO >! !! EB݀ F Sector HI <:! !! E FFilenaam invoegen (# F'en de checksum berekenen. F0`G# H# F8L!9_# !M Fsectoren inlesen. n 8FF$## F# Volgende vrije sector? HL!9! B߀߀ B B# Ft"# F Checksum berekenen.  F 68 # FDe rest in de laatste sector JL!9_!M #  B B B Ft"# FChecksum berekenen. ** VTOC korrigieren ** e8hFr)VTOC sector eT! !! EBC?! !! ##  FV! !! EBC?! !! %#  F &# F%Checksum VTOC berekenen $FSD File zu gro T 8F :** Double Density ** ook hier weer hetzelfde verhaal. FoXGF ( ?! !! B FF?$F F  FF!" File too large | for your disk!|!! CANCEL !F 8F8FFXGFo<`#߀ GHFL@?! !! B ?! !! B F F@?! !! B ?! !! B F F$# F ! !! EB F&! !! E F<! !! EB݀ p < F(! !! EB F(! !! EB F2! !! EB݀ F # F `GHF 8FXGF FL!9_!M F 8F 8FL!9_!M F$F # FN F FN F 8FFFF $# F*! !߀! EB F F,! !߀! EB F8F! # F! $F$FFDirectory afdrukken 0MFr$F$F$FF .# Feerstvolgende vrije sector zoeken. !FF"X݀GFD?!h !! B Fvrij byte in VTOC zoeken. F\IFRC?!h !! ߀ FIn dit byte een vrij bit zoeken ,F%dit is nl. een vrijke sector. X8# # Fdgeef nu aan dat de sector bezet is. D!h !! EBC?!h !! ߀  F F 4$ Feerstvolgende vrije cluster in ED vinden XGFH?! !߀! B FVrij cluster zoeken FFT\dltz "&*.26:>?@FLRX^djl