Spot #upr CR&Hugo!ReadMe AGSm}DAbacus A)m Ace Ae-mDAcorn A.m\Avp A5mDCamMicro A'6mTClares A6mlColton A59mDabs_PressA9mDixonDixonAH:mEmmerich A;mGem_Elect A;mII_Ltd AmLLingenuityA3?mTMagenta A@mlMaze A@mMeadow A%AmMinerva AAmMitre ACmOak_PDT ADmSilicon AFm$Watford A)Gm,!ReadMe AGSm}DAbacus A)m Ace Ae-mDAcorn A.m\Avp A5mDCamMicro A'6mTClares A6mlColton A59mDabs_PressA9mDixonDixonAH:mEmmerich A;mGem_Elect A;mII_Ltd AmLLingenuityA3?mTMagenta A@mlMaze A@mMeadow A%AmMinerva AAmMitre ACmOak_PDT ADmSilicon AFm$Watford A)Gm,0283,027-01$&Hugo[HugoDumpLQ A_*m Election87Ab+m EpBas A+m$ FpAss A+m, Info umpFXA8hA \MiniDumpFXAC,m4 RSComms A,m< DumpLQ A_*m Election87Ab+m EpBas A+m$ FpAss A+m, Info umpFXA8hA \MiniDumpFXAC,m4 RSComms A,m< Abacus Abacus HugoHugoReadMe ABhLReadMe ABhL DumpLQ DumpLQ HugoHugoReadMe AJhPReadMe AJhP Election87Election87HugoHugoReadMe A\UhTReadMe A\UhT EpBas EpBas HugoHugoReadMe AI\hXReadMe AI\hX FpAss FpAss HugoHugoReadMe A dh hReadMe A dh h MiniDumpFXMiniDumpFXHugoHugoReadMe AjhXlReadMe AjhXl RSComms RSComms HugoHugoInfo ctor AghpProjector A-mLInfo ctor AghpProjector A-mLAce Ace HugoJHugo!ProjectorA-mTLogos Aj_I][U!ProjectorA-mTLogos Aj_I][UDProjector Projector Hugo Hugo!Boot AO[hx!Run A懶[|!RunImage A[ !Sprites Aʚ[ Colours AzX- EuclidX AZ4!Boot AO[hx!Run A懶[|!RunImage A[ !Sprites Aʚ[ Colours AzX- EuclidX AZ4L!Projector!ProjectorHugoHugo1stWord+ Aj.mdCopySetup Aze2LEmulationsA/mHFORM ix AamVLogistix A04mPCEmulatorA4m,ReadMe Am1stWord+ Aj.mdCopySetup Aze2LEmulationsA/mHFORM ix AamVLogistix A04mPCEmulatorA4m,ReadMe AmAcorn Acorn HugoHugo!1stDMergeA.ml!1stInstalA.mt!1stMail A/m|!1stWord+ AX/m!Boot Aolg0<ReadMe A5~i @!1stDMergeA.ml!1stInstalA.mt!1stMail A/m|!1stWord+ AX/m!Boot Aolg0<ReadMe A5~i @\1stWord+ 1stWord+ HugoHugo!Boot A@qgD !Run Ahg!Sprites Ag$!Boot A@qgD !Run Ahg!Sprites Ag$d!1stDMerge!1stDMergeHugo&Hugo!Boot ADqgD!Run AEhg!Sprites Ag$ !Boot ADqgD!Run AEhg!Sprites Ag$ d!1stInstal!1stInstalHugoHugo!Boot AHqgB$!Run Ahg(!Sprites AI g$,!Boot AHqgB$!Run Ahg(!Sprites AI g$,d!1stMail !1stMail HugoHugo!Boot AMqgC0!Run Ahg4!Sprites A[Y g$8!Boot AMqgC0!Run Ahg4!Sprites A[Y g$8d!1stWord+ !1stWord+ Hugo2HugoReadMe AĽfBPView A/mViewSheet A0mViewSpell AE1mViewStore A2mReadMe AĽfBPView A/mViewSheet A0mViewSpell AE1mViewStore A2m\EmulationsEmulationsHugoHugo!Boot Alg$T!View A0mLibrary AP0mReadMe Adi h!Boot Alg$T!View A0mLibrary AP0mReadMe Adi hView View Hugo)Hugo!Boot AhgDX!Run APiga\!Sprites A[g$`!Boot AhgDX!Run APiga\!Sprites A[g$`!View !View HugoHugoWord A;jddWord A;jddLibrary Library HugoHugo!Boot heetARmg1t!ViewSheetA0mLibrary A 1mReadMe @e !Boot heetARmg1t!ViewSheetA0mLibrary A 1mReadMe @e ViewSheet ViewSheet HugoRHugo!Boot AU5igIx!Run Ahf|!Sprites A/Cg$!Boot AU5igIx!Run Ahf|!Sprites A/Cg$!ViewSheet!ViewSheetHugoHugoSheet AGjaSheet AGjaLibrary Library HugoHugo!Boot pellA!mg-!ViewSpellA1mLibrary A1mReadMe @nH !Boot pellA!mg-!ViewSpellA1mLibrary A1mReadMe @nH ViewSpell ViewSpell HugoHugo!Boot AXigI!Run Amfigg!Sprites Ag$!Boot AXigI!Run Amfigg!Sprites Ag$!ViewSpell!ViewSpellHugoHugoSpell ALQj`Spell ALQj`Library Library Hugo Hugo!Boot toreABng3!ViewStoreAL2mD A2mF A2mI A3mLibrary Ad3mR A3m ReadMe A8j S A3m!Boot toreABng3!ViewStoreAL2mD A2mF A2mI A3mLibrary Ad3mR A3m ReadMe A8j S A3mViewStore ViewStore HugoHugo!Boot ApigI!Run AAhh!Sprites Ang$!Boot ApigI!Run AAhh!Sprites Ang$!ViewStore!ViewStoreHugoHugoD D HugoHugoF F HugoHugoI I HugoHugoStore Afj`Store Afj`Library Library HugoHugoR R HugoEHugoS S Hugo%Hugo!Boot tix Aalg,,!Logistix Aa4m$ReadMe Ai @!Boot tix Aalg,,!Logistix Aa4m$ReadMe Ai @\Logistix Logistix HugoHugo!Boot Aig_0!Run Aig4!Sprites Ackg<8!Boot Aig_0!Run Aig4!Sprites Ackg<8!Logistix !Logistix HugowHugo!Boot A3Vng(L!PC A4m4ReadMe A[f!Boot A3Vng(L!PC A4m4ReadMe A[f\PCEmulatorPCEmulatorHugo;Hugo!Boot t AƮh=P!Run ot Ai lgT!Sprites Au0`\XGenBoot A15m<!Boot t AƮh=P!Run ot Ai lgT!Sprites Au0`\XGenBoot A15m<,!PC !PC HugoHugo!Config AoZ[g_\!Modules AjXgF`!Run2 AmXgh!RunImage Ay[gd l!RunImage2A [g xMemAlloc A]W0 !Config AoZ[g_\!Modules AjXgF`!Run2 AmXgh!RunImage Ay[gd l!RunImage2A [g xMemAlloc A]W0 4GenBoot GenBoot HugoHugoPixPerfectA5mLPixPerfectA5mLAvp Avp HugoHugoReadMe AݮhUpgrade A@\ReadMe AݮhUpgrade A@\DPixPerfectPixPerfectHugoHugoInfo x-3 A)f!Matrix-3 As6m\Info x-3 A)f!Matrix-3 As6m\CamMicro CamMicro HugoHugo!Matrix3 A6mdReadMe Afk!Matrix3 A6mdReadMe AfkTMatrix-3 Matrix-3 HugoHugo!Boot A×Z!Run AZ=!SPRITES AKZ, !Boot A×Z!Run AZ=!SPRITES AKZ, \!Matrix3 !Matrix3 HugoHugoAlphabase A:7mtArtisan A7m|Demo A7mGwriter A8mInfo t Anٟl ProArt A8mSupport A8mAlphabase A:7mtArtisan A7m|Demo A7mGwriter A8mInfo t Anٟl ProArt A8mSupport A8mClares Clares HugoyHugoReadMe A%e'ReadMe A%e'lAlphabase Alphabase Hugo`Hugo!RUN A6[^Art1 A"[)Art3 Aj [ReadMe A,eUPGRADE Al!RUN A6[^Art1 A"[)Art3 Aj [ReadMe A,eUPGRADE AllArtisan Artisan HugoLHugo!Run A- [ReadMe A3eTUPGRADE Aĥ \l!Run A- [ReadMe A3eTUPGRADE Aĥ \llDemo Demo HugoEHugo!Gwriter AS8m!Run Awƫ[?Gra3 A6[>Graph1 A[ReadMe AJeUPGRADE A] \X!Boot A>[!Gwriter AS8m!Run Awƫ[?Gra3 A6[>Graph1 A[ReadMe AJeUPGRADE A] \X!Boot A>[lGwriter Gwriter HugoHugoGraph5b Ad'Graph6b AdGraph5b Ad'Graph6b Ad!Gwriter !Gwriter HugoHugo!Boot Ah X($!Run AvA (Pro3 Aؐ[,Readme A+\4UPGRADE A \8!Boot Ah X($!Run AvA (Pro3 Aؐ[,Readme A+\4UPGRADE A \8lProArt ProArt HugoHugo!RUN AK[N<ReadMe AУe@SUP1 At\)[DSup3 A]%\zHUPGRADE A,\P!RUN AK[N<ReadMe AУe@SUP1 At\)[DSup3 A]%\zHUPGRADE A,\PlSupport Support HugoHugoInfo ream AdfTPipeDream Ak9mInfo ream AdfTPipeDream Ak9mColton Colton HugoNHugo!Boot reamAí f`!PipeDreamA9mReadMe At4'jx|!Boot reamAí f`!PipeDreamA9mReadMe At4'jx|PipeDream PipeDream HugoHugo!Boot Aid!Run A ibh!Sprites A*i`lReadMe ACixt!Boot Aid!Run A ibh!Sprites A*i`lReadMe ACixt!PipeDream!PipeDreamHugoHugoInfo A)fInfo A)fDabs_PressDabs_PressHugohHugoFarmcash A:mFieldfile A:mFPlanner A!;mMilkman A];mreadme Aef<Farmcash A:mFieldfile A:mFPlanner A!;mMilkman A];mreadme Aef<DixonDixonDixonDixonHugoHugo!Run A őX-!RunImage A0mX7readme A![!Run A őX-!RunImage A0mX7readme A![Farmcash Farmcash HugoxHugo!Run AX-!RunImage A~X7readme AT "[!Run AX-!RunImage A~X7readme AT "[Fieldfile Fieldfile Hugo@Hugo!Run AX-!RunImage A~X7readme A'+"[!Run AX-!RunImage A~X7readme A'+"[FPlanner FPlanner HugolHugo!Run A[!RunImage AXh!sprites AXreadme A>"[!Run A[!RunImage AXh!sprites AXreadme A>"[Milkman Milkman HugoHugoInfo AQfInfo AQfEmmerich Emmerich HugoHugoDesk_GamesA9m4DISTIT AS>m<GRAPHDATA A>mDInfo A4f3DIGIT A=m$DIGIT A=m,DISMAP A>m4DISTIT AS>m<GRAPHDATA A>mDInfo A4fInst_OphthInst_OphthHugoBHugoReadMe AjHfReadMe AjHf3DIGIT 3DIGIT HugoHugoReadMe ARf:ReadMe ARf:DIGIT DIGIT Hugo HugoReadMe A;\fReadMe A;\fDISMAP DISMAP HugoHugoReadMe AdfReadMe AdfDISTIT DISTIT Hugo6HugoReadMe Amf ReadMe Amf GRAPHDATA GRAPHDATA HugoHugoInfo A<*fInfo A<*fLendac_DS Lendac_DS HugoHugoInfo nter Al>Presenter A?m\Info nter Al>Presenter A?m\LingenuityLingenuityHugoHugo!Boot nterA܉l !PresenterA?mdReadMe Ap\l0!Boot nterA܉l !PresenterA?mdReadMe Ap\l0TPresenter Presenter HugoHugo!Boot A0l5$!RUN A1$l(!Sprites A&l,!Boot A0l5$!RUN A1$l(!Sprites A&l,\!Presenter!PresenterHugo?HugoInfo nect A*f8U_Connect AI@mtInfo nect A*f8U_Connect AI@mtMagenta Magenta HugoUHugo!U_ConnectA@m|ReadMe Ag"*fL!U_ConnectA@m|ReadMe Ag"*fLlU_Connect U_Connect HugoHugo!Run Ae,3Z@!sprites AZDREADME A3ZH!Run Ae,3Z@!sprites AZDREADME A3ZHt!U_Connect!U_ConnectHugo3HugoInfo ABePInfo ABePMaze Maze Hugo]HugoInfo r AMeMXTrader AtAmInfo r AMeMXTrader AtAmMeadow Meadow HugoHugoReadMe Acǡe`ReadMe Acǡe`Trader Trader HugoHugoAccounts ABmDelta AlBmGamma ABmInfo lAdmnAE,[T SchoolAdmnA CmSigma AYCmAccounts ABmDelta AlBmGamma ABmInfo lAdmnAE,[T SchoolAdmnA CmSigma AYCmMinerva Minerva HugoHugoIN-Lib ASTOtFhNL-Lib AEJVKPL-Lib AxVMReadMe AZVGLSL-Lib A(V`MTSM-Lib A BVDIN-Lib ASTOtFhNL-Lib AEJVKPL-Lib AxVMReadMe AZVGLSL-Lib A(V`MTSM-Lib A BVDAccounts Accounts HugoHugoDeltaConv A%_k2ReadMe A^ DeltaConv A%_k2ReadMe A^ Delta Delta HugovHugoGammaConv A~_+$ ReadMe AC^P GammaConv A~_+$ ReadMe AC^P Gamma Gamma HugoyHugoReadMe AP"Vw\ S-Lib A[V-` ReadMe AP"Vw\ S-Lib A[V-` SchoolAdmnSchoolAdmnHugo!HugoReadMe AK^ SigmaConv Ao\ ( ReadMe AK^ SigmaConv Ao\ ( Sigma Sigma HugoHugoFlyngStartACmInfo A ee FlyngStartACmInfo A ee Mitre Mitre HugoHugo!FlyImportA Set Alias$@RunType_D6A Run %%*0 IconSprites .!Sprites Set Projector$Dir Set Alias$@RunType_D6A Run %%*0 IconSprites .!Sprites RMEnsure Euclid 0.98 RMLoad .EuclidX RMEnsure ColourTrans 0 RMLoad .Colours Run .!RunImage %*0 !>$.!Ace.!Projector.!RunImage 8 (C) Tony Cheal/Ace Computing Nov 1988 Version 0.99 < Should be with version 1.00 Euclid or EuclidX or above (@ Plays back a film in Ace Film format using either the full 26 blown Euclid Module or the Public Domain EuclidX !B%=W%:ș"Wimp_GetWindowState",,B%:ș"Wimp_OpenWindow",,B%   NewSprite !șSO,&13C,S%,"X" R0,R1,R2,R3 :ș"Euclid_Expand",M%!32,DPTR%,SCR%,M%!40 ,DPTR%,SCR% &(M%!363)=0SCR%=0 0șSO,R0,R1,R2,R3 :2B%!4=-3E4:B%!8=-3E4:B%!12=3E4:B%!16=3E4:!B%=W% D"ș"Wimp_UpdateWindow",,B% F% N3ȕF%:X%=B%!4-B%!20:Y%=B%!16-B%!24:RedrawSprite X$ș"Wimp_GetRectangle",,B% F%: b l vMakeSprite 2ș"OS_SWINumberFromString",,"OS_SpriteOp" SO )ș"OS_ReadModeVariable",FM%,4 ,,XR% )ș"OS_ReadModeVariable",FM%,5 ,,YR% *ș"OS_ReadModeVariable",FM%,10 ,,LB% 0SS%=(((FW%>>XR%)*(FH%>>YR%)>>3-LB%)+1000)3 7S%SS%:!S%=SS%:S%!4=0:S%!8=16:S%!12=16:șSO,&109,S% ,șSO,&10F,S%,"X",0,FW%>>XR%,FH%>>YR%,FM%   $RedrawSprite:X%-=FW2%:Y%-=FH2% <<>CM%ș"ColourTrans_SelectTable",FM%,0,-1,-1,CT%:CM%=  CM%=FM%  șSO,&122,S%,"X",X%,Y%   % șSO,&134,S%,"X",X%,Y%,0,0,CT%    * 4+LoadFilm(F$):ȕF$,1)=" ":F$=F$,2): >1F$=""1,"Double Click on a Film to watch it" H-:: 1,"Unable to load film '"+F$+"'" R!ș"OS_File",5,F$ O%,,T%,,L% \+(T%>>8)<>-6621,"Not an Ace Film file" fM%L%:ș"OS_File",&FF,F$,M% p7FW%=M%!20:FH%=M%!24:FM%=M%!28:FW2%=FW%2:FH2%=FH%2 z  file_d6a,, wwwwwwwwwwwwwwwwwpwwpww wwpw wpww wwpw wpwwwwpwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwpwwpwwwwpwwpwwwwpwwpwwwwpwwpwwwwwwwwwwwwwwwwwsmall_d6a ,, wwwwwwwwwGDDGDDw wGDD GDDwwwwwwwwwGDDGDDwwGDDGDDwwwwwwwwwGDD!mogul, qwwwwwwqwwzzzwzqwzwqwqwwwwwqwwww|qwwww|ww|qw|qw|qwwwwwwwwwwwppwwsm!mogul , wGDwzwGDwwGDwwwwGDwwGDwwGDwwGDwwGwGwwwwGDpp@D!projector, wwwwwwwwwpwpw@DDpADqADDDDqDGtwwwGDtDDqGtzwwwJDGDDqqwzwwzzwwDDqwwwwwwwwzwwwwqwwwwwzzzqwwwwz qwwwwwwwwwww qwwww qwwwww wwww qww qwy qwwwwwwwww ww sm!projector , wwww@DwDtwwDDGDwGtzDDw@Dwwwwwww@Dw@Dww@Dw@Dw@Dwwwwwwwww@DX(4@WColourTransColour Selector 0.40 (15 Sep 1988)ColourTransSelectTableSelectGCOLTableReturnGCOLSetGCOLReturnColourNumberReturnGCOLForModeReturnColourNumberForModeReturnOppGCOLSetOppGCOLReturnOppColourNumberReturnOppGCOLForModeReturnOppColourNumberForModeGCOLToColourNumberColourNumberToGCOLReturnFontColoursSetFontColoursInvalidateCacheThe colour module needs RISC OS 1.82 or greater@-" @-;h "sxOb-ikh 5 @PPZFQ@- 5 @@-?C- "4Cc@XW5fx}-SWI not knownBad MODE@- `@- [@-WC-  Hbjj-НP-P-0-j R  q 0rsp qrFd@c@-C- jQP >@-2-  jQH  *@-9{@cC-  Hbj-WНC- ?P`q0{РadChc- C SН@-d@hc 5R QZp@- 5R@      !01"#23$%45&'67()89*+:;,-<=./>?   !$%(),-014589<="#&'*+./2367:;>? @-" " " p`& ^nBP& ^nB^%&d `V`fBV% U1 G2W B"! @-" " " p`& NP& N^%&d `FV% U! G"W B"!  5@O" @"_# a[谏!{ R   @  @P M { -IϏ⼥ ! .^Z---"PH/!wzStack overflow(h 000@P` p00@P `00p@@PP` `p0p@@@@!! Z墤ᢩ*ࢮ* ⊡" @-d@c[0@-@P  --sd?@cC-  -    -  Su Ssʮ H.a^࠱^0 * + ^$nB * +^DnB)* + ^nBរ)-q P`V`VUPE `V*PPeBpWpWUPE pW*RlPPeBpWpW UPE  pW*P bPPeBpWpWUPE pW*T`  ( %X @$pq pW p*@TР0c B %X @pQq pp@T0c0SXb%XȌL+h,l`X+l,d`\P-%h' `V`fB %l'lV`fB,%d't`V`fBp, \ X @- P/_-YZ- p0pl,@lEuclid 1.00 (13 Dec 1988) Public domain Film expander onlyEuclidInitialiseDrawLoadSaveAppendFindCreateDestroySetShowInsertDeleteTranslateZoomRotateListBoundSCloseDownMiscOpCompressExpand(C) Ace Computing 1988eEuclid SWI out of rangeFile not found2Bad picture structureObject not foundnumInvalid object entry numberNo room in picture blockdenUnrecognised object identifierWrong object identifier~Vane sizes do not matchvBad digit in named&o Unknown Euclid_MiscOpalg Screen edges not byte alignedil]Public domain Euclid Film expander onlyQInternal errorR0@-xs,uBQ QO jQB Ace Film_ꡐ_Ꞑ_̏@-#[ 0`  "0" " 0P  "0" " "0" "?C-&`P622 P- 9@ P9 8 ੐!4 X E K02 @ ) Y  2(IY 2@A(.AY Y*Y2(Y 2(YT :&&&H2&(P; T:h @-h@@@ @ h@p`pPpFh@-h  2 P1p l xB|t0@hlp @@A dA@@d3h $ B0 r 0S d  (М@#@UEuclid Logo @@05 aa aaa a aa a a aa(aaa a aaaaaBa aaa&Laaa ) KaXaaaaA(a aa6aaa  aAaa a @aaa0Caa a  @aaaaEaaa aa aaaGa aaa a aaaK a aa a aaa2M a0a&  aaa&Q$a$a&a aaaY$a a aa a a *a a&a aa a a 8ai0aa a &a au"a$a a"ay&a a aa  a&a a aa  aa(aa aa  a0a aaa(aa$a aa B*a aaa*4aaa aaaaaaa aaaaaaaaaa $ aa a a*aa a<a a4a a,(a"2a2a2a  2a,a10' aa a;aa a aa a;ga a$aaaa-i*aaaaa<akBaaaa@iNa a aaaCa a(aa9 aaaa0a8a;*a aa\aa;Baaa a ,aa?\a aa^a?taa a$aAa0a& aAaHaEa,aMaaWaaaaka{aaaaaaaala ajahadaXaLaBa6a,a a+a7a10 a/a%a,a 8aFaPaaXaaa Ja0aa6aDaa `a a&aybaaaakfaaaaePaaaaacJa aaa8a0aaaaa 6_$a(aaaa a[aaaa aaa+aY*a aaaa;a]a aaa;ca a)aa aAaaEa&aa4&a.a4a a aa&a*a aa(a a &a$2a&a a5a$a" a a(a(a"a a aa,a{.aaaa aa.awtaaBasvaaDam`aa a(o,a&aa a(s,a&a aaa awa a a aa a a{a a a aa a&a a aa a a&a a )a aCa )a aG -a(aG / &W44a#"a&a&a&a&a&a&a$ a*a aa a aaa aaaaa a$aa aa&aa a aaaaaa(aa aaa aa a"a aa aaaaaaaaa a a$aaa aa;a"a&aaa.a"a a0aaa.a.a a0aa &a aaaxa.apa a&Taa aaa ,aa a a aa a a a a a a a a aa a a a a  a7aa  aAa aa!a3a 4a;a/a#aa aaa aaaaaa aaa a aa aa a a a a a a a a a aaa aaaaaaaaa a"aaa aaaa aaaa aa a  aQa"a;a a.a)a a 0aa aaaha ada abaaaaTaaa2&a aaaa aa a aa a a a a,aaa aa aa aaaa#aa aa" a a&a7i ga5a%aa aaaaa a a aa aaaaa aaa aaa a aaa aa aaa aaaaaa aa Za)a aaaa aaaa a}a aa a |aaa aaa aa aa a aa aa a a a "a aa aa" a  a"'3  a#aa aa aaa a a a a ! aa$aaea a a8aa ag$a a"ba a eaa aza aea,aaexa a aaeva aaa a aeraa a a aakZa-a a 4aa3aa a4aaAa a ,aGa a aa aSaa aa a_aa a a a a aaa aaaa aa aa aaa a aaa a aa aaa a a a '1 ;a3a/a+ a'a'*aaa a aaaa,aaaaaaa aaaa.aaa .aa' a@aa!a a Bawa a Laqaa aHay"aa &aa aaaaaaaa a,aaaa a aaaaaaaaaa (aa7aqaa0a a=ak,a0aKa k"a*aGai,aaMaa ai 6aaQaagBaaWaaaa k>a_aam0acaaaaasaka aaaawaoaaa a aaa a a a aaaa a aa aa aaa a a aa a aa aaa  a a a a a aa a aaa a a a a !)1 ; } a a`a aaV a aaN&a aaD0a}a aa:8awa aa0Baqa aa&Laka aaRaga aa\a5a%a aada/ aaa a|a+ a aa ara/a aa aja7 a aa a "aBa?a a a aa a*a4aG a a aa aa a_ a a a aHa ak aa a a \a}a a a aka e 8asaac8a}aaa}aaa aaaaaaaaaaaa aaaa a a aaaaaaa a aaa a a a a a aaa aa a a aa aa  a aaa aaa aa aaa!a)/a 7 oa)a)a)a)a)a)a)a)a)a)a)a)aaaaaaaaaaaaa aaa aaa aaaa aa aa aa aaa aa aaa aa aaa aa aaa aa aaa aa aaa aaaaa aaaaama aaaaaia aaaaaia aaa a ia aaaaaia aaaaaaia aaaaaa ia aaa}aaaaia aaa{aaaaaka aaa}aaaawa aauaa}a aasaaa}a aaqaa a{a aaama aa{a aaoaa aa akaaa aeaaa acaaa aa_aaa a]aaa ]aa _a aa aa aaa e aaaai aaam aaaaq aau aa{a 5aaA a5a !a!""$$ aaaaaa$a"a a" aaaaaaaaauaauaauaaauaaauaaawa aaaawaaaaaaaaaa aaaaaaa aaaaaaaaaaaaaaaaaaaaaaaa!a) a /a9aw?;9 53/-)%#"$(a a aaaaaaaaaa aaaaaaaa!aa!aaaaaaaaaaaaaaa aaaaaa aaaaaaaaaaa!a %a+a5a94a= a7a1a+a%"a(a.a2a *a"aa aa" aa auaayaaaa aa aa'a'a'a'a'a#a#a#a#a#a#a%a#a#a!a!a!a!a!"a"aaa!a#aa#aa)a5 a4 Aa9a-a!*a6a 8a 8a 6a 6a 4a .a aaiaaaa aia-a+a-a+a+a+a+a+a)a)a)a'a)a'a'a'a'a'a%a'a%a%a#a%a#a#a#a#a!a!a#a#a'a5a x#) a a aaa aa aaaa aaaa a*a(aaFaBa@a>a:a8a 6aYa,aYa)a)a)a'a)a+a)a)a'a'a'a'a'a'a'a%a'a%a%a'a'a%a%a%a%a a'a#a#a!a#a#a!a!a!a!axaaa aaaa aa(aa aa aaaaaaa aaa "aBaa aaa $aa aa &a a$a"&a(a(a@a>aaa>aa>aa>aa a &a &a&aa aaa a aaaa *a &a  aaaa*a&aa"aaaaa a $aa$aa(a$a$a$aaa aaa$a a$aa$a a$a aGa'a%a#a# a!"a$a$a&a(a*a*a,a*aa.a0a0a0a.a,a.a.a,a,a*aaaaaa a  a a &a aa(a*a (a a a,aaa0aa a aaaa a a aa  &aa(aaaa aa aa&aa aa a aaaaa a a $aa &aa a,a aa&a aa&a a a a#*a0a0a0a.a0a.a0a.a.a.a.a,a.a,a.a,a,a a#aa#a( a aa aaa& aa aaaaaa aaaaa&aaa"aaaa aaaaa aaaa aa aaaaaaa a aaa aa a a aaa aaaa  a T a3$a0a0a0a0a0a.a.a.a.a.a.a,a,a,a,a,a,a*a*aa5-a)a'a%#$a!a aaaa a&a aaa aaaa aa a aaaaaa a aaaa aT(a1a+a%"a&a,a0a.a*a(a&a$a"aa#a%a'a)a-a/a1a3 a5a9a oa7 a/ a+ a' a%a%# a aaa aaa aa aa aa"a aaaaa a aaaa (A 5'aa a(a(a*a,a.a0a.a(a a!a)a/ a7a; a1 a+ a% a%a  a a a a a aa a a aaa a aaa a aaaa a a aTa3 a3-a+a)'a#a!aa!aaaa.24 a, 8a 8a 6a 6a 4a 4a 2a2a 5a/a'a'aa aa aa  a aa aaaa a aaaaa aa a aaa aTaaaaa a aaaa$&a,aa&aa$aaa a(a a(a& a(a0aJ a>a6a*&a .a8a  6a&a%a7a a3 a-a' aaaaaa aaaaaaaaaaaaa a!a aa!aaaa aa$a5a aa aa-a aa aa"#aa aa a*%aaaaa.)aaa,aaaa(aaa" aaaa%aaaa/ aaa1aa a aa"a a($a a"@ aB a a< a a 2 a a*a*a* a(aa: 2* %/99a1a) a%aaaaaaaaaaaaaaaa aaaa!aaaa a a aaaa a$ a+&a aC aa= a"a3 a aa1a + awa1aHau a/ aNau a/a.aas a/a a8aq a2aD as a aa a a>a a1aaa>a>a>a@a@a@aBaDaDaBaDaBaBa2a2a2a2aa>aa6a (aa a a!a(a 8aDaDaDaa aEDaqa a a?8a5a+a!&a0a :aBaJaFaDaBa>aa@a@a8a 2a*a"aa%a- a5a# a1a% a,a,,a..aa aa a.a.a2 a"aa"aa"aa"aa(a0a22a  a 4a 4a 4a 4a *aa a9 a3a+a#"a(a0a 9(a:::aaa aa a 4 a4 a4 6 aaaaa 8 8 8 8 a3a%a&a(a(a(a (a (a *a&a @a@@@@aa"a"a a& a, a,a,a a a(a(aa"a0a21&a*;$aE&aQ&a]&a(a(a(a(a*a*a*a,a`()a) a0a6aa8a0a&a"aa,a4 a aaa aaa a aaa a&a  aa a a a &a,a (a(a (a"a(aa*aaa(a a(aa *aa *aa *aa $aaaaaaaaaa aa a $a 0a 0a`|(/a9a+ a$a$a  $a$a&a&a$a&aaa"a a aaa$aaaa&aaa a&a aa6aa4aa 2aa *a aa a a a& a aa*aa aaa a aa a a aa!a a 'aaa#aa aaa a aa aa aaa (aa0a a 2a |8)oa%a aaaa&a(aa&aa a aa aaa aa a a a a" aaaa aaaaa a aaaa aaaa&a"a(a&a( a$aaaa"aaa "a aa aaa(a*a* a*a a4a a:a(a+aa"a-aa"a-aa1aaa3aa(3aa7a09a;a'a'a%a'aTa%"a(a.a6a a8a 4aa .a a *a1aa &a)a aa &a'a  a$a'aa a$a%aaa "a%aa a%a aa%aa aa)aaa a a/aaaaa a5aaaa aa;a aaaa a aaa "aaaa/aT -a)a)a%a%a#a%a%a%a*a,a(aa.a,aa.a9aa0a+a*aa)a*aa%a,a%aa,a#a a*a#a*aa(aa aa(aa aa&aa aa a&aaaaaaaa aaaaaa aa1a aaaaaaaaaaaaaaaaaaaaaaa %a1aaa a a aaaa a a aaaa a aaaaa a aa aa a aa aaa aaaa a a aaa a aaaa aa a aa aa aaaaaaaa aaaa aaaaaaaaa a)aaaaaa;a a aaaaaa aaaaa aaaaaaaaaaaaaa#a -ac ; a7aa#a(aaa. a a, a aa a a aa aa a a a a aa a a a a a aaa a a aaa aaaa a a a aaa a aa aaaa aa a a a aaa a,a a aaa aa a.aaaaaa ay a.aa aaaa a aaa a aa aaaaaaaaa aaaa aa aaa#a+a 9-aaaa a aa6 a@ aa  aa  a aa a !a2aaa a (.a  a (a aa aa a aaa aa aaaaa a#aeaaaa a a Yaaa a aa a a a aW0 a a a aaa a aa ] a*  aa aa aa"aaaa a aa aa a aiaaa aa aa a ua,aa a aa a aa$aaa a a a$aa a a a aaaa a aaaaa a a aa aa a a aa a a a aaaa a a aaa"a$a!a - aW| !Boot for !1stDMerge version 0.01 IconSprites .!Sprites| !Run for !1stDmerge version 0.01 IconSprites .!Sprites Wimpslot -min 300k set FirstWordPlus$Resources $.Resources.1wp. set FirstWordPlus$Docs &.1wp. run "1dm" (!1stdmerge,, ABDDBAB$DADDBADDBDBADB$DADBDBABDABDADBD$ADBDABD$ABD$AB$DADD$ADBDDABDADBD$DABD$sm!1stdmerge ,, $BDDAD$$DBB$DBBDB$BDBBD$DDD| !Boot for !1stInstal version 0.01 IconSprites .!Sprites| !Run for !1stInstal version 0.01 IconSprites .!Sprites Wimpslot -min 300k set FirstWordPlus$Resources $.Resources.1wp. set FirstWordPlus$Docs &.1wp. run "1pr" (!1stinstal,, @B$BD$D̻@DB$$DD̼̻@"D$@$$DD$D@BB̻@BDB$$D@DB$Dpsm!1stinstal ,,   ̻| !Boot for !1stMail version 0.01 IconSprites .!Sprites| !Run for !1stMail version 0.01 IconSprites .!Sprites Wimpslot -min 300k set FirstWordPlus$Resources $.Resources.1wp. set FirstWordPlus$Docs &.1wp. run "1ml" (!1stmail,,   DB$DDDD@DBDD"D$@DD"DDD@BDD"DDsm!1stmail ,, DDDAAD| !Boot for !1stWord+ version 0.01 IconSprites .!Sprites| !Run for !1stword+ version 0.01 IconSprites .!Sprites WimpSlot -min 400K set FirstWordPlus$Resources $.Resources.1wp. set FirstWordPlus$Docs &.1wp. run "1wp" (!1stword+,, @B$B$D$$D@D$DDBDDD@"D$DD@$$DB$DBB@DD$$D$D@BDB$$D $D$DBDBD@$DB$$BDB@BDDD$DBD@D$Bsm!1stword+ ,, @DADD@DDD@ADDA@| ADFS::0.$.!Boot for 1st WordPlus $.!1stWord+ Using 1st Word Plus under RISC OS This directory contains the components necessary to make existing copies of the Acornsoft 1st Word Plus package (SKB68) operate from the RISC OS Desktop. 1. Floppy disc users Create a new, RISC OS 1st Word Plus word processing disc and a new 1st Word Plus utilities disc by carrying out the steps below: a. Format two new floppy discs. Use one disc to make a backup copy of your current 1st Word Plus word processing disc and the other to make a backup of your 1st Word Plus Utilities disc. (You should use your original 1st Word Plus issue disc if you do not wish to copy any of your current 1st Word Plus files.) Name the word-processing disc New1wp and the utilities disc New1wpUtil. b. Copy the !Boot file, the !1stWord+ application and the !1stMail application from the Support disc to the root directory of disc New1wp. c. Copy the !1stDmerge and !1stInstal directories from the Support disc to the root directory of disc New1wpUtil. To use any of 1st Word Plus, 1stMail, 1stDMerge or 1stInstall, insert the appropriate disc into drive 0 or 1, click on the corresponding floppy disc icon and, when the directory viewer appears, double click on the required icon. In the specific case of 1st Word Plus, you may auto-boot the disc provided that it is loaded in drive 0. As under Arthur 1.2, you may also type one of: 1stWord+ 1stMail 1stDMerge 1stInstall at the Supervisor prompt (*). 2. Hard disc users a. If you have not already installed 1st Word Plus on your hard disc, do so now, using the HDInstall utility provided on your 1st Word Plus Utilities disc. The utility will create directory $.1wp on the hard disc and, if they do not exist already, directories $.Library and $.Resources. b. Copy the !1stWord+, !1stMail, !1stDMerge and !1stInstal applications from the Support Disc to the desired position in your hard disc directory structure. To use any of 1st Word Plus, 1stMail, 1stDMerge or 1stInstall, simply open the directory viewer containing the application(s) and double click on the required icon. As under Arthur 1.2, you may also type one of: 1stWord+ 1stMail 1stDMerge 1stInstall at the Supervisor prompt (*). *SET Copy$Options A ~C ~D F ~L ~N ~P Q R ~S ~T ~V Using Archimedes 6502 Emulation products under RISC OS All Archimedes 6502 emulation products are compatible with RISC OS and may be used in exactly the same manner as under Arthur 1.2. Anyone using original, 640K format discs is, however, advised to produce new working discs in 800K, RISC OS E format. The four major components of the View Family: View ViewSpell ViewSheet ViewStore are also suitable for execution from the RISC OS Desktop, and instructions for creating RISC OS specific versions are provided in the directory for each product. Note that whilst the instructions describe the production of a disc for each component, two or more applications (for example, View and ViewSpell) may be placed on a single disc if required. | ADFS::0.$.!Boot for View $.!View | !Boot file for !View version 0.01 IconSprites .!Sprites| !Run for !View version 0.01 IconSprites .!Sprites WimpSlot -min 100K $.Library.Word (!view,, wwwwwwwwwwwwwwwww||||ݪݪ|ݪ||ݪڪڪڭ|ݪݪݪ||ݪ|ݪݭ||||wwwwwwwwwwwwwwwwwsm!view ,, ݭڭ ݭڭ ݭڭ ݭڭ ݭڭ ݪ ݭ Quit RMensure Tube6502Emulator RMload $.Library.65Tube *EmulateTube *$.Library.VIEW MODE 3 SETUP FJ Using 6502 View under RISC OS This directory contains the components necessary to make existing copies of the Acornsoft View Emulation product (SKM31) operate from the RISC OS Desktop. 1. Floppy disc users Create a new, RISC OS View Emulation disc by carrying out the steps below: a. Format a new floppy disc and name it NewView. b. Copy the !Boot file, the !View application, and the Library directory from the Support Disc to the root directory on disc NewView. c. Copy the VIEW ROM image file from your original View emulation disc to the Library directory on disc NewView. Copy the new 6502 Emulator module to the Library directory on disc NewView. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. d. Set the Auto-boot option on the new disc to RUN by using the command: *OPT 4 2 To use View, insert the new disc into drive 0 and either: auto-boot the disc by pressing SHIFT+BREAK or: click on the floppy disc icon and, when the directory viewer appears, double click on the !View icon. You may also type: Word at the Supervisor prompt (*). 2. Hard disc users a. If you do not have one already, create a Library directory in your hard disc root directory. b. Copy the contents of the Library directory on the Support Disc to the Library directory on your hard disc. Copy the VIEW ROM image file from its current location on the hard disc (or the original View disc) into the hard disc Library directory. Copy the 6502 Emulator module to the hard disc Library directory. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. c. Copy the !View application into the desired position in your hard disc directory heirarchy. To use View: Click on the hard disc icon, open the appropriate directory and, when the directory viewer appears, double click on the !View icon. You may also type: Word at the Supervisor prompt (*). | ADFS::0.$.!Boot for !ViewSheet $.!ViewSheet | !Boot file for !ViewSheet version 0.01 IconSprites .!Sprites| !Run for !Viewsheet version 0.01 IconSprites .!Sprites WimpSlot -min 100K $.Library.Sheet(!viewsheet,, wwwwwwwwwwwwwwwww||ݭݪݪݪ|ݭݭݪݭ|ݪݪݭݪ|ݭݪݭ|ݪݪݭ|ݭݭݭݪ|ݪݪݭݭ|ݭݭݪ|ݪݭݭݭ|ݪݭݪ|ݭڭݪݭ|||wwwwwwwwwwwwwwwwwsm!viewsheet ,, ݪݪ ݭڭڪ ݭݪ ݪݪݪ ݭڪݪ ݭڭڪݪ ݪݪݪ Quit RMensure Tube6502Emulator RMload $.Library.65Tube *EmulateTube *$.Library.ViewSheet MODE 3 Using 6502 ViewSheet under RISC OS This directory contains the components necessary to make existing copies of the Acornsoft ViewSheet Emulation product (SKM07) operate from the RISC OS Desktop. 1. Floppy disc users Create a new, RISC OS ViewSheet Emulation disc by carrying out the steps below: a. Format a new floppy disc and name it NewSheet. b. Copy the !Boot file, the !ViewSheet application, and the Library directory from the Support Disc to the root directory on disc NewSheet. c. Copy the ViewSheet ROM image file from your original ViewSheet emulation disc to the Library directory on disc NewSheet. Copy the new 6502 Emulator module to the Library directory on disc NewSheet. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. d. Set the Auto-boot option on the new disc to RUN by using the command: *OPT 4 2 To use ViewSheet, insert the new disc into drive 0 and either: auto-boot the disc by pressing SHIFT+BREAK or: click on the floppy disc icon and, when the directory viewer appears, double click on the !ViewSheet icon. You may also type: Sheet at the Supervisor prompt (*). 2. Hard disc users a. If you do not have one already, create a Library directory in your hard disc root directory. b. Copy the contents of the Library directory on the Support Disc to the Library directory on your hard disc. Copy the ViewSheet ROM image file from its current location on the hard disc (or the original ViewSheet disc) into the hard disc Library directory. Copy the 6502 Emulator module to the hard disc Library directory. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. c. Copy the !ViewSheet application into the desired position in your hard disc directory heirarchy. To use ViewSheet: Click on the hard disc icon, open the appropriate directory and, when the directory viewer appears, double click on the !ViewSheet icon. You may also type: Sheet at the Supervisor prompt (*). | ADFS::0.$.!Boot for ViewSpell $.ViewSpell | !Boot file for !ViewSpell version 0.01 IconSprites .!Sprites| !Run for !ViewSpell version 0.01 IconSprites .!Sprites WimpSlot -min 100k $.Library.Spell (!viewspell,, wwwwwwwwwwwwwwwww||||ݪ|ݪ||ݪڪڪڭ|ݪ ݪ||ݪ |ݪݭ||||wwwwwwwwwwwwwwwwwsm!viewspell ,, ݪ ݭڭ ݭݪ ݪݪݪ ݭڪݪ ݭڭڪ ݪݪ ݪ Quit RMensure Tube6502Emulator RMload $.Library.65Tube *EmulateTube *$.Library.ViewSpell MODE 3 Using 6502 ViewSpell under RISC OS This directory contains the components necessary to make existing copies of the Acornsoft ViewSpell Emulation product (SKM28) operate from the RISC OS Desktop. Ensure that you have created a RISC OS version of the View word processor before following these instructions. 1. Floppy disc users Create a new, RISC OS ViewSpell Emulation disc by carrying out the steps below: a. Format a new floppy disc and name it NewSpell. b. Copy the !Boot file, the !ViewSpell application, and the Library directory from the Support disc to the root directory on disc NewSpell. c. Copy the ViewSpell ROM image file from your original ViewSpell emulation disc to the Library directory on disc NewSpell. d. Copy the dictionary files: O.Master1 T.Master1 W.Master1 from your original ViewSpell emulation disc to the root directory on disc NewSpell. e. Copy the Word and VIEW files from the Library directory of your RISC OS View disc into the Library directory on disc NewSpell. Copy the new 6502 Emulator module to the Library directory on disc NewSpell. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. To use ViewSpell, insert the new disc into drive 0 and either: auto-boot the disc by pressing SHIFT+BREAK or: click on the floppy disc icon and, when the directory viewer appears, double click on the !ViewSpell icon. You may also type: Spell at the Supervisor prompt (*). 2. Hard disc users a. If you do not have one already, create a Library directory in your hard disc root directory. b. Copy the contents of the Library directory on the Support Disc to the Library directory on your hard disc. Copy the ViewSpell ROM image file from its current location on the hard disc (or the original ViewSpell disc) into the hard disc Library directory. The Library directory should already contain the Word and VIEW files necessary to run the View word processor. Copy the 6502 Emulator module to the hard disc Library directory. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. c. Copy the !ViewSpell application into the desired position in your hard disc directory heirarchy. To use ViewSpell: Click on the hard disc icon, open the applications directory and, when the directory viewer appears, double click on the !ViewSpell icon. You may also type: Spell at the Supervisor prompt (*). | | ADFS::0.$.!Boot for !ViewStore $.!ViewStore | !Boot file for !ViewStore version 0.01 IconSprites .!Sprites| !Run for !ViewStore version 0.01 IconSprites .!Sprites WimpSlot -min 100K $.Library.Store (!viewstore,, wwwwwwwwwwwwwwwww||ݪݪݪڭݪ||ݪݪݪڭݪ|ݪݭݪڭݪ|ݪݪݭݪ| |ݭݪڭ|ݪݭݪڭݪ|ݪݪݪڭݪ|ݪݪڭݪ|ݪݪݪڭݪ|||wwwwwwwwwwwwwwwwwsm!store ,, ݪݭ ݭڭڭ ݭݪ ݪݭ ݭڭ ݭڭڭ ݪݪ Quit RMensure Tube6502Emulator RMload $.Library.65Tube *EmulateTube *$.Library.ViewStore MODE 3 Using 6502 ViewStore under RISC OS This directory contains the components necessary to make existing copies of the Acornsoft ViewStore Emulation product (SKM27) operate from the RISC OS Desktop. 1. Floppy disc users Create a new, RISC OS ViewStore Emulation disc by carrying out the steps below: a. Format a new floppy disc and name it NewStore. b. Copy the !Boot file, the !ViewStore application directory, the Library directory and the empty D, F, I, R, and S directories from the Support Disc to disc NewStore. c. Copy the ViewStore ROM image file from your original ViewStore emulation disc to the Library directory on disc NewStore. Copy the new 6502 Emulator module to the Library directory on disc NewStore. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. d. Copy the ViewStore utilities directory ($.U) from your original ViewStore emulation disc to the root directory on disc NewStore. It is also suggested that the IMPORT utility on the original disc be placed in directory U. e. Set the Auto-boot option on the new disc to RUN by using the command: *OPT 4 2 To use ViewStore, insert the new disc into drive 0 and either: auto-boot the disc by pressing SHIFT+BREAK or: click on the floppy disc icon and, when the directory viewer appears, double click on the !ViewStore icon. You may also type: Store at the Supervisor prompt (*). 2. Hard disc users a. If you do not have one already, create a Library directory in your hard disc root directory. b. Copy the contents of the Library directory on the Support Disc to the Library directory on your hard disc. Copy the ViewStore ROM image file from its current location on the hard disc (or the original ViewStore disc) into the hard disc Library directory. Copy the 6502 Emulator module to the hard disc Library directory. This module is called 65Tube and will be found in directory $.Modules on RISC OS Applications Disc 2. c. Copy the !ViewStore application into the desired position in your hard disc directory heirarchy. If you currently use ViewStore PREFIX commands to access your data files, add them to the commands contained in file $.Library.Store. To use ViewStore: Click on the hard disc icon, open the applications directory and, when the directory viewer appears, double click on the !ViewStore icon. You may also type: Store at the Supervisor prompt (*).  >HFORM V 1.72 18-Jan-89  0  Init ( GetShape 2DisableEscape < Format F Verify PStructure ZRestoreEscape d*RMREINIT ADFS n x: Init MakeParams%=6 VerifyRetries%=1 DefectRetries%=5 Verify%=0 Read%=1 Write%=2 WriteTrack%=4 Restore%=6 Specify%=&F AltDefectBit%=&10 DiscStruc%=&14 Log2SecSize%=8 SecSize%=2^Log2SecSize% OldMapAdd%=0 OldMapSize%=&200 "DirSize%=&800 ,BootAdd%=&C00 6BootSize%=&200 @%MaxDefects%=(BootSize%-64-&C-4)4 JEndDefect%=1 << 29 TOldLWM%=&E00 ^FreeLink%=1 hCrossCheck%=3 rAdfsSwi%=&40240 |AdfsDiscErr%=&108C7 MaxVerifyBad%=16 Patterns%=8 z Buf% &8000, DiscRec% 64+BootSize%, Defect% BootSize%, DirMark% 5, Bad%(MaxVerifyBad%),mc% 100, Pattern%(Patterns%-1) Boot%=DiscRec%+64 BootRec%=Boot%+BootSize%-64 Pattern%(2)=&FFFFFF Pattern%(3)=&6DB6DB Pattern%(4)=0 Pattern%(5)=&2CB2CB Pattern%(6)=&5A5A5A Pattern%(7)=&4D34D3 ; ''"H A R D D I S C F O R M A T T E R (V 1.72)"' 2 Drive%=Ask("Format which drive (4 or 5)",4)  Drive%=4 Drive%=5 MSecsPerTrk%=32:Heads%=1:Cyls%=1:LowCurrentCyl%=1:PreCompCyl%=1:ParkCyl%=1 "RootDirAdd%=&400:Log2Alloc%=10 &IndRootDirAdd%=RootDirAdd% 0/DiscSize%=SecSize%*SecsPerTrk%*Heads%*Cyls% : DNB D!("-ADFS-%DISMOUNT "+Drive%) N XAsm b l: v GetShape InitBootDefects InitDiscRec MoanOp(Restore%,0,0,0) 'Op(Read%,BootAdd%,Boot%,BootSize%) ( Result%<>0 GoodDefects dPB  OldShape )Op(Verify%,0,0,SecSize%*SecsPerTrk%)  ConfirmMake TBC  AskMake  I%=0 BootSize%-4  Boot%!I%=0  I% InitBootDefects Formatted%=(Result%=0)  AskShape A "Do you want to soak test the hard disc for defects (Y/N)";  SoakFlag%=Choose("YN")="Y" *B "Are you certain you want to format drive ";Drive%;" (Y/N)"; 4 Choose("YN")="N" >MoanOp(Specify%,0,0,0) H R: \ OldShape fSecsPerTrk%=BootRec%?1 pHeads%=BootRec%?2 zLog2Alloc%=BootRec%?5 DiscSize%=BootRec%!&10 3Cyls%=DiscSize% (SecSize%*SecsPerTrk%*Heads%) 'LowCurrentCyl%=(BootRec%!-8) &3FF $PreCompCyl%=(BootRec%!-6) &3FF 8ParkCyl%=(BootRec%!-4)(SecSize%*SecsPerTrk%*Heads%) InitDiscRec  :  AskMake   Makes%=0   Make$  Makes%+=1  ;Makes%;". ";Make$  I%=1 MakeParams% $ A$ . I% 8 Make$="OTHER" B8Make%=InputDec("Which make of hard disc ",1,Makes%) L V I%=(Make%-1)*(MakeParams%+1) ` ȕ I%>0 j A$ t I%-=1 ~ N Make$, SecsPerTrk%, Heads%, Cyls%, LowCurrentCyl%, PreCompCyl%, ParkCyl%  Make$;" chosen"  :  ConfirmMake  ) Make$, P1%, P2%, P3%, P4%, P5%, P6% μ Make$="OTHER" "The shape written on the disc does not match any of the standard drive shapes": "known by this program. Do you wish to retain this shape (Y/N)";:=Choose("YN")="Y" q P1%<>SecsPerTrk% P2%<>Heads% P3%<>Cyls% P4%<>LowCurrentCyl% P5%<>PreCompCyl% P6%<>ParkCyl% dDD p "The shape written on the disc matches that of a ";Make$;" disc"'"Do you wish to retain this shape (Y/N)"; =Choose("YN")="Y" :  AskShape  9 : : =&1E6 NewMap%=: DFE :;" @ ";: ș "XFileCore_Create", 0  (> char%=(StrAsk("Old or New map format (O/N)","N")) &DF 2 char%="O" char%="N" <NewMap%=(char%="N") F5SecsPerTrk%=Ask("Sectors per track",SecsPerTrk%) PDiscRec%?1=SecsPerTrk% ZHeads%=Ask("Heads",Heads%) dDiscRec%?2=Heads% n!Cyls%=Ask("Cylinders",Cyls%) x/DiscSize%=SecSize%*SecsPerTrk%*Heads%*Cyls% DiscRec%!&10=DiscSize% >LowCurrentCyl%=Ask("Low current cylinder",LowCurrentCyl%) =0  sector%=sector% 320   sector%=-sector%  A defect%=((cyl%*Heads%+head%)*SecsPerTrk%+sector%)*SecSize%  opt$="B" & AddPhysDefect(defect%) 0 :" RemovePhysDefect(defect%) D N "C": X NewMap% b: AddPhysDefect(InputHex("Disc address in bytes")) l v "If the ADFS gives an error such as 'Disc error 13 at :4/00012A00' then 00012A00 is a logical disc address. The logical to physical disc address mapping depends on the defect list. ";  " When these defects are added to the defect list, it is important that they are added in DESCENDING order BEFORE the list is changed in any other way!" N AddPhysDefect(LogToPhys(InputHex("Logical disc address in bytes")))    opt$="A"  I%=0 DiscStruc%-4 4  BootRec%!I%=DiscRec%!I%  I% InitHardDesc  :  Format =0  I%,J%,cyl%,head%  MoanOp(Specify%,0,0,0) MoanOp(Restore%,0,0,0)   "Formatting" ** I%=0 512-4 4:Buf%!I%=&077F03FF: 4 cyl%=0 Cyls%-1 > 13:cyl%; H head%=0 Heads%-1 R, cyl%=0 head%=0 Formatted% tDH \ J%=cyl% (head%<<24) f< I%=0 (SecsPerTrk%-1)*4 4:Buf%!I%=J% (I%<<14): pH Op(WriteTrack%,(cyl%*Heads%+head%)*SecsPerTrk%*SecSize%,Buf%,512) z0 Result% ;" format error on this track"     :  Verify d SoakFlag% '"PRESSING THE SPACE BAR WILL CAUSE THE SOAK TEST TO END AT THE END OF THAT CYCLE" " add%,ptr%,sector%,head%,cyl% Cycle%=1:ErrorCycle%=-100 (CylSize%=SecSize%*SecsPerTrk%*Heads% !suspects%=0:MaxSuspects%=1000 G CylBuf% CylSize%+4, SusAdd%(MaxSuspects%), SusCount% MaxSuspects%   Cycle%>1  I%=Cycle% Patterns%  I%>1 $ J%=Pattern%(I%) .# J%=(J%>>>1) ((J% 1)<<23) 8 Pattern%(I%)=J% B L J%=(&1000000)-1 V `/ SoakFlag% "Writing pattern &";~J% j2 I%=CylBuf% CylBuf%+CylSize% 3:!I%=J%: t ptr%=0 ~5 Formatted% add%=SecSize%*SecsPerTrk% add%=0  2 CylEnd%=add% - (add% CylSize%) + CylSize%  defect%=Defect%!ptr%  defect%>CylEnd%  length%=CylEnd%-add%   length%=defect%-add%  ! Op(Write%,add%,0,length%)  Result% / add%=(ErrDiscAdd% &1FFFFF00)+SecSize%   add%+=length%  . add%=defect% add%+=SecSize%:ptr%+=4  add%>=DiscSize% ( 2" SoakFlag% "Verifying" < add%=0:ptr%=0 F MoanOp(Restore%,0,0,0) P Z ȕ Defect%!ptr%DiscSize%  length%=DiscSize%-add%   length%=defect%-add%  ! Op(Verify%,add%,0,length%)  Result% # add%=ErrDiscAdd% &1FFFFF00 Try%=0   Try%+=1  MoanOp(Restore%,0,0,0) Op(Verify%,add%,0,&100)  Result%=0 Try%=5  Result% Try%+=1  sector%=add% SecSize% "" head%=sector% SecsPerTrk% ,$ sector%=sector% SecsPerTrk% 6 cyl%=head% Heads% @ head%=head% Heads% J; "Cyl=";cyl%;" Head=";head%;" Sector=";sector%;" "; T sus%=0 ^8 ȕ sus%add%:sus%+=1: h sus%=suspects% r" suspects%=MaxSuspects% | sus%=(MaxSuspects%)-1  suspects%+=1  SusAdd%(sus%)=add%  SusCount%?sus%=0   score%=2^(Try%-1)-1 $ SoakFlag% score%=score%*4  SusCount%?sus%+=score%  SusCount%?sus%>30  "defect ";  SoakFlag%  ("TIME")    & AddPhysDefect(add%) 0 ErrorCycle%=Cycle% : D SoakFlag% N' =0: >500: 13:(39);:13 X b" ;Try%;" retries needed" l v  add%=add%+SecSize%  ! add%=add%+length%+SecSize%   add%>defect%  ptr%+=4   add%>=DiscSize%  SoakFlag%   Key%=(0)  Key%=-1 Key%=32  done%=(Key%=32)  done%=Cycle%>ErrorCycle%+2   Cycle%+=1 * done% 4 >: H Structure R NewMap% \ NewStructure f p OldStructure z  :  OldStructure WriteDefectList WriteOldFsMap WriteRootDir  :  NewStructure Zone0Bits%=60*8 ZoneBits%=SecSize%*8 2 Log2Alloc%<8 Log2Alloc%>12 Log2Alloc%=10 : allocation size loop ; Alloc%=Ask("Large file allocation unit",2^Log2Alloc%)  Log%=7  $ Log%+=1 . Alloc%=2^Log% Log%=13 8, Log%=13 : restart alloc size loop B Log2Alloc%=Log% L MapBits%=DiscSize% Alloc% V! RoundSize%=MapBits% * Alloc% `4 BestZones%=1 << 30 : init to rogue values j BestCylOff%=1 << 30 t DummySpare%=1 1 ~2 SpareBits% = 4*8 ZoneBits%-Zone0Bits%-8*8  CalcZones  LinkBits%=10  LinkBits%+=1  CalcIds  Ids%<=2^LinkBits% A SpareBits%-4*8>0 SpareBits%-4*8<=LinkBits% SpareBits% 5 OddBits%>0 OddBits%<=LinkBits% SpareBits% # LinkBits%>15 Zones%>127 $ "Allocation unit too small"  Log2Alloc%+=1  DummySpare% & : restart alloc size loop    Zones% <= BestZones% * Crucial%=Zones%*SecSize%*2+DirSize% / MapZone%=0 Crucial%=BootAdd%+BootSize% (D Crucial%=EndDefect% (defect%>=MapAdd% defect%=EndDefect% CylOff%0 Crucial%+=Alloc%-Crucial% Alloc% J MapZone%=0 T# RootDirAdd%=BootAdd%+BootSize% ^> IndRootDirAdd%=&200 + (BootAdd%+BootSize%) SecSize% + 1 h r" RootDirAdd%=MapAdd%+MapLen%*2 |# IndRootDirAdd%=&200+Zones%*2+1  DiscRec%?4=LinkBits% DiscRec%?5=Log2Alloc% DiscRec%?9=Zones%  DiscRec%?&A=SpareBits% 256  DiscRec%?&B=SpareBits% 256 DiscRec%!&C=IndRootDirAdd% BootRec%!4=DiscRec%!4 BootRec%!8=DiscRec%!8 BootRec%!&C=DiscRec%!&C " I%=0 Zones%*SecSize%-4 4  Buf%!I%=0  I%  I%=0 60-4 4  Buf%!(I%+4)=DiscRec%!I%  I% &WriteDefectList 0 "Creating Map" : ptr%=0 DDefectStart%=0 N%DiscEndBit%=DiscToMap(DiscSize%) XZoneStart%=Buf% bZoneStartBit%=0 l zone%=0 Zones%-1 v$ !ZoneStart%=1<<(15+FreeLink%*8) ( ZoneEndBit%=ZoneStartBit%+ZoneBits% / UsedZoneEndBit%=ZoneEndBit%-SpareBits%+4*8 $ UsedZoneEndBit%>DiscEndBit% ! UsedZoneEndBit%=DiscEndBit%  ' PreFree%=ZoneStartBit%+FreeLink%*8  ZoneBit%=ZoneStartBit%+4*8  zone%=0 " ZoneBit%=ZoneBit%+Zone0Bits% + length%=(BootAdd%+BootSize%) Alloc% / length% ZoneBit%=ZoneBit%+length% H R \ f ZoneBit%>DefectStart% p, DefectStart%=DiscToMap(Defect%!ptr%) z( DefectStart%>=UsedZoneEndBit%  DefectStart%=ZoneEndBit%  ! DefectEnd%=DefectStart%+1  ptr%+=4   done1%=   done2%= . NextDefect%=DiscToMap(Defect%!ptr%) ) NextDefect%ZoneEndBit%-(LinkBits%+1) . NextDef%=ZoneEndBit%-(LinkBits%+1)   NextDef%=NextDefect%  . NextDef%-DefectEnd%DefectEnd% .% DefectEnd%=NextDefect%+1 8 B ptr%+=4 L done2%= V ` j done2% t0 DefectEnd%-DefectStart%ZoneEndBit% ! DefectEnd%=ZoneEndBit%   done1%=  K DefectEnd%>ZoneEndBit%-(LinkBits%+1) DefectEnd%<>ZoneEndBit%  DefectEnd%=ZoneEndBit%  done1%=  0 DefectEnd%-DefectStart%DefectStart% "PROGRAM ERROR 1": (B DefectStart%-ZoneBit% <= LinkBits% DefectStart%=ZoneBit% 2 DefectStart%>ZoneBit% <- WriteLink(PreFree%,ZoneBit%-PreFree%) F( DefectStart%>=UsedZoneEndBit% P7 WriteLength(ZoneBit%,UsedZoneEndBit%-ZoneBit%) Z' ZoneEndBit%>UsedZoneEndBit% d& WriteLink(UsedZoneEndBit%,1) nB WriteLength(UsedZoneEndBit%,ZoneEndBit%-UsedZoneEndBit%) x  4 WriteLength(ZoneBit%,DefectStart%-ZoneBit%)   PreFree%=ZoneBit%  " DefectStart%UsedZoneEndBit%-(LinkBits%+1)  DefectEnd%=ZoneEndBit%  ! WriteLink(DefectStart%,1) 9 WriteLength(DefectStart%,DefectEnd%-DefectStart%)  ZoneBit%=DefectEnd%   ZoneBit%=ZoneEndBit%   ZoneBit%=ZoneEndBit% " WriteLink(PreFree%,0) , zone%=0 6 ZoneStart%?CrossCheck%=&FF @ J ZoneStart%?CrossCheck%=0 T ^2 ?ZoneStart%=NewMapCheck(ZoneStart%,SecSize%) h# ZoneStart%=ZoneStart%+SecSize% r ZoneStartBit%=ZoneEndBit% | zone%  "Writing map" (MoanOp(Write%,MapAdd%,Buf%,MapLen%) 0MoanOp(Write%,MapAdd%+MapLen%,Buf%,MapLen%) WriteRootDir  :  CalcZones #UsedBits%=SecSize%*8-SpareBits% 1WholeZones%=(MapBits%+Zone0Bits%) UsedBits% .OddBits%=(MapBits%+Zone0Bits%) UsedBits% 8 OddBits% Zones%=WholeZones%+1 Zones%=WholeZones% MapZone%=Zones% 2  MapZone%=0  MapAdd%=0  3 MapAdd%=(UsedBits%*MapZone%-Zone0Bits%)*Alloc% & 0MapLen%=Zones%*SecSize% : D: N CalcIds X)IdsPerZone%=UsedBits% (LinkBits%+1) b=Ids%=IdsPerZone% * WholeZones% + OddBits% (LinkBits%+1) l v:  DiscToMap(discadd%)  bit%,zone% 'bit%=(discadd% Alloc%)+Zone0Bits% zone%=bit% UsedBits% /bit%=bit%+(bit% UsedBits%)*SpareBits%+4*8  = bit% :  WriteLink(off%,link%) . link%>=2^LinkBits% "PROGRAM ERROR 2":  bit%,add%,mask% bit%=off% 8 add%=Buf%+off% 8 mask%=2^LinkBits%-1 1!add%=(!add% (mask%<Buf%?(off%8)+=2^(off%8) H R: \ WriteDefectList f "Writing defect list" p ptr%=0 z check%=0 ȕ Defect%!ptr%>>16) 'check%=(check% (check%>>>8)) &FF "Boot%!ptr%=EndDefect% check% Sum(Boot%,BootSize%) ,MoanOp(Write%,BootAdd%,Boot%,BootSize%)  :  WriteOldFsMap  "Writing free space map"  s%,I% s%=OldMapSize% 2 $* I%=0 OldMapSize%-4 4:Buf%!I%=0: .!Buf%=OldLWM% &100 88Buf%!s%=(DiscSize%-OldLWM%-Defects%*SecSize%) &100 B!!(Buf%+s%-4)=DiscSize% &100 L%!(Buf%+OldMapSize%-5)=(&10000)-1 V!(Buf%+OldMapSize%-2)=3 `Sum(Buf%,s%) jSum(Buf%+s%,s%) t/MoanOp(Write%,OldMapAdd%,Buf%,OldMapSize%) ~ :  WriteRootDir  "Writing root directory"  BF% ' I%=0 DirSize%-4 4:Buf%!I%=0:  NewMap%  $DirMark%="Hugo"   $DirMark%="Hugo"  Buf%!1=!DirMark% BF%=Buf%+DirSize%  NewMap%   BF%!-38=IndRootDirAdd%  " BF%!-38=IndRootDirAdd% &100 ( 2BF%?-35="$" <BF%?-16="$" FBF%!-5=!DirMark% P check%=0 ZCheckPut(!Buf%) dCheckPut(Buf%?4) n I%=BF%-40 x ȕ I%3  CheckPut(?I%)  I%=I%+1  ȕ I%>>16) 'check%=(check% (check%>>>8)) &FF BF%?-1=check% -MoanOp(Write%,RootDirAdd%,Buf%,DirSize%)  :  LogToPhys(add%)  ptr%  ptr%=0 "ȕ add%>=Defect%!ptr% , ptr%=ptr%+4 6 add%=add%+SecSize% @ J =add% T: ^ AddPhysDefect(add%) h ptr%,ptr2%,defect% r Defects%=ptr% & Defect%!(ptr2%+4)=Defect%!ptr2%  ptr2%=ptr2%-4   Defect%!ptr%=add%  Defects%=Defects%+1    "Defect list full" & 0 :: D RemovePhysDefect(add%) N ptr%,ptr2%,defect% Xȕ Defect%!ptr% defect%<=last% good%= H last%=defect% R, defect%= EndDefect%) good% fDefects%=ptr%4 p!check%=check% (check%>>>16) z'check%=(check% (check%>>>8)) &FF T= good% ((defect%&FF) = check%) (sum(Boot%,BootSize%)=Boot%?(BootSize%-1)) :  InitDiscRec  I%=0 64-4 4  DiscRec%!I%=0  I% ?DiscRec%=Log2SecSize% DiscRec%?1=SecsPerTrk% DiscRec%?2=Heads% DiscRec%!&C=IndRootDirAdd% DiscRec%!&10=DiscSize% DiscRec%!&14=(&10000)-1 &$(DiscRec%+&16)="HardDisc"+Drive% DiscRec%?&22=Drive%  : $ InitBootDefects .!Boot%=EndDefect% 8Defects%=0 BInitHardDesc L V: ` InitHardDesc j.BootRec%!-&10= &00000000 : SL xxxxxx t6BootRec%!-&C = &0D0C200A : GPL2 GPL3 SH GPL1 ~9 BootRec%!-&10= &16000000 slow stepping alternative 9 BootRec%!-&C = &0D0CA80A slow stepping alternative 5BootRec%!-8 = LowCurrentCyl% (PreCompCyl%<<16) 7BootRec%!-4 = SecSize%*SecsPerTrk%*Heads%*ParkCyl%  :  Ask(String$,Default%)  X,Y,reply$,value%  :11  String$;" ?"; X= Y=  X,Y);Default%;X,Y);  *FX 15,1  ""reply$  reply$=""  value%=Default% ( 2 value%=(reply$) < F X,Y);value%;3 P = value% Z: d StrAsk(String$,Default$) n X,Y,reply$ x String$;" ?"; X= Y=  X,Y);Default$;X,Y);  ""reply$ # reply$="" reply$ = Default$  X,Y);reply$;3  = reply$ : " InputDec(String$,min%,max%)  reply$,value% * String$;" (";min%;" to ";max%;" ) ";  reply$  value%=(reply$) ! value%>=min% value%<=max%  = value% : " InputHex(String$) , reply$,value% 6 String$;" &"; @ ""reply$ J=("&"+reply$) T: ^ Choose(opt$) h reply$ r | reply$  (reply$)=1 reply$=((reply$)&DF)  opt$,reply$)  =reply$ :  CheckPut(I%) Bcheck%=(check% >>> 13) ((check% (2^13-1)) << (32-13)) I%  :  sum(base%,len%) sum%=0:c%=0  I%=len%-2 0 -1 sum%=sum%+base%?I%+c% + sum%<&100 c%=0 sum%=sum% &FF:c%=1  I%  =sum% &: 0 Sum(base%,len%) :#base%?(len%-1)=sum(base%,len%) D N: X& NewMapCheck(B%,C%)=(NewCheck%) b: l Asm v opt%=0 2 2 P%=mc%  [ OPT opt% .NewCheck%  MOV R0,#0  ADDS R2,R1,R2 \C=0 .loop%  LDR R3,[R2,#-4]!  ADCS R0,R0,R3  TEQS R2,R1  BNE loop%  R3,R3,#&FF  SUB R0,R0,R3  R0,R0,R0,LSR #16 ! R0,R0,R0,LSR #8 !  R0,R0,#&FF ! MOVS PC,R14 !  ] !* opt% !4 !>: !H DisableEscape !R+ș "XOS_Byte",200,1,0 R0,OldEscState% !\5ș "XOS_Byte",247,%10101010,0 R0,OldBreakState% !f !p: !z RestoreEscape !$ș "XOS_Byte",200,OldEscState%,0 !&ș "XOS_Byte",247,OldBreakState%,0 ! !: ! MoanOp(b%, C%, D%, E%) !Pș AdfsSwi%, 0, b% AltDefectBit% (DiscRec%<<6), C% Drive%<< 29, D%, E% ! !: ! Op(b%, C%, D%, E%) !vș AdfsSwi% (1<<17), 0, b% AltDefectBit% (DiscRec%<<6), C% Drive%<< 29, D%, E% Result%, R1%, ErrDiscAdd% ! Result% ! Result% (1 << 31) !( "Error &";~Result% &3FFFFFFF: " "- ((!Result%) &FFFFFF)=AdfsDiscErr% " Result%=Result%?3 "$ ".! "Error &";~!Result%;" "; "8 I%=4 "B ȕ Result%?I% "L Result%?I% "V I%=I%+1 "` "j "t "~ " " " ": "y Manufacturer, Sectors per track, heads, cylinders, low current cylinder, precompensation cylinder, parking cylinder "> 20Mb Western Digital/Tandon, 32, 4, 615, &3FF, &3FF, 663 "> 20Mb Miniscribe, 32, 4, 615, &3FF, 128, 663 "> 20Mb NEC, 32, 4, 612, &3FF, 256, 672 "> 20Mb Olivetti, 32, 4, 612, &3FF, 128, 670 "> 53Mb Rodime, 32, 7, 872, &3FF, 650, 871 "O OTHER, 32, 4, 612, &3FF, 128, 611:REM MUST BE LAST "[ For slow stepping drives you will need to use the alternate lines in PROCInitHardDesc | ADFS::0.$.!Boot for Logistix $.!Logistix | !Boot for !Logistix version 0.01 IconSprites .!Sprites Set File$Type_DFF Logistix | !Run for !Logistix version 0.01 IconSprites .!Sprites WimpSlot -min 500k RMEnsure FPEmulator RMLoad $.Logistix.FPEmulator Dir $.Logistix LGX Desktop @!logistix,, p(wwwwwwwwwwwwwwpwwws73sw3swwwwp(wwwwwwsw7swwwwpw73sw3swwswwwwp(ww7sw7sw7swwwwpww3swww733sp(w73s73sw7swwwwpww7sw7sw3swwwwp(wwwww3s73swwwwpw73swwww7swwwwp(wwwsw3sw3swwwwww3swwsw7swwww(ww7sw3s33swwww"(("("pwwwwwwwwwwwwwwwwwsm!logistix ,, XU%UU%"UXU"UUU%UX%"UU%"U[U"UUX""UU""UX%"UUU"UXU%UU""Ufile_dff,, wwwwwwwwwwwwwwwwwpwwpwwpwwpwHDDDDDDDDDDwpwHDDDDDDDDDDwpwHDDDDDDDDDDwpwHDDDDDDDDDDwpwHDDDDDDDDDDwpwHDDDDDDDDDDwpwKDDDIDDDwpwHDDDDDDDDDDwwHDDDDDDDDDDwwHDDDDDDDDDDwwHDDDDDDDDDDwwwpwwwwwwwwwwwwwwwwwsmall_dff ,, wwwwwwwww3333333933333wwwwwwwww Using Logistix under RISC OS This directory contains the components necessary to make existing copies of the Acornsoft Logistix package (SKB20) operate from the RISC OS Desktop. 1. Floppy disc users Create a new, RISC OS Logistix disc by carrying out the steps below: a. Format a floppy disc and use it to make a backup copy of your current Logistix work disc. (You should use your original Logistix disc 1 if you do not wish to copy any of your current Logistix files). Name the new disc NewLgx. b. Copy the !Boot file and the !Logistix application from the support disc to the root directory of disc NewLgx. c. Delete the floating point emulator module (fpe) from directory $.Logistix on disc NewLgx and replace it with a copy of the new emulator module. The new emulator module is called FPEmulator and it can be found in directory $.!System.Modules on RISC OS applications disc 1. To use Logistix, insert disc NewLgx into drive 0 or 1, click on the corresponding floppy disc icon and, when the directory viewer appears, double click on the !Logistix icon. Logistix will allocate you the largest workspace it can, given the current status of your machine. If you require more workspace, you must use the Task Manager to free more as appropriate. You may also auto-boot the disc provided that it is loaded in drive 0. As under Arthur 1.2, you may also type: Logistix at the Supervisor prompt (*). 2. Hard disc users (with default drive configured as 4) a. If you have not already installed Logistix on your hard disc, do so now, using the HDInstall utility provided on your your original Logistix disc 1. b. Copy the !Logistix application from the Support Disc to the desired position in your hard disc directory structure. c. Delete the floating point emulator module (fpe) from directory $.Logistix on the hard disc and replace it with a copy of the new emulator module. The new emulator module is called FPEmulator and it can be found in directory $.!System.Modules on RISC OS applications disc 1. To use Logistix, simply open the directory viewer containing the application and double click on the Logistix icon. Logistix will allocate you the largest workspace it can, given the current status of your machine. If you require more workspace, you must use the Task Manager to free more memory before you enter Logistix. As under Arthur 1.2, you may also type: Logistix at the Supervisor prompt (*). | ADFS::0.$.!Boot for PCEmulator $.!PC | !Boot for !PC version 0.1 IconSprites .!Sprites | !Run for !PC version 0.02 | RMEnsure MemAlloc 0 RMLoad .GenBoot.MemAlloc WimpSlot -min 16k -max 16k IconSprites .!Sprites Run .GenBoot.!RunImage `L!pc,< wwwwwwwwwwwwwwwwpppppwwwwppppwwppppwwpppwwwwwwwwwwwwp'$$$$$$$$$$rp'$$$$$$tww'rpqpwwwwwwwwwwwwppqpw""""""""""wppwwwwwwwwwwwwwwwsm!pc , qwwwwwwwwqqwwwwqwqwwwqwqwwqqwwwwwwww| This file controls how the application is started. Lines not beginning with | "|" may be edited. Do *NOT* add or remove any lines. | | Application root directory (can be set to AppRoot$Dir) $ | Application start command PC.Emulate | Quit desktop to maximise memory available (Y/N) ? Y | If N, what is minimum amount of memory required in Kbytes ? 0 | This file controls which modules will be killed if the application is | leaving the desktop & is running on a 310/410. | | At the time of release, the list contains *ALL* modules present in RISC OS. | Obviously, some of these cannot be killed and therefore have "|" in front | of them. | | The list can be amended to include any additional modules you may wish to | be removed when the application is run. Remember that the module name is | case sensitive. | | Module names preceeded with "|" will not be killed. It is advised that you | do not delete lines from this file, but simply preceed the module name to be | ignored with "|". | | UtilityModule | FileSwitch Desktop | BASIC SystemDevices FileCore%RAM | FileCore%ADFS | FileCore%Base | ADFS Econet NetFS NetPrint BBCEconet | International InternationalKeyboard Debugger | IIC | SoundDMA | SoundChannels SoundScheduler | WaveSynth StringLib Percussion SpriteExtend Draw FontManager | Obey WindowManager TaskManager PaletteUtil Filer ADFSFiler RAMFSFiler NetFiler ShellCLI Hourglass NetStatus | SpriteUtils | Podule ARMBasicEditor RamFS | This file goes between !RunImage and !RunImage2 in terms of execution. It is | run after the desktop has been quit. | | Do *NOT* change the following line Echo <22><0> | | The following lines can be amended to set the required size or free space | as required. Do *Help MemAlloc for more information on the available | commands and their parameters. If you do not want a particular part of | memory changed, prefix the line with "|" rather than deleting the line. | ScreenSize 80 SystemSize 0 RMASize 0 FontSize 0 SpriteSize 0 RAMFSSize 0 | | The 12 in the next line can be changed to enter the screen mode of your own | choice. | Echo <22><12> | | Do *NOT* change the following line Run .!RunImage2 @@@ 00PBASIC -quit @00009000,00009910 d  > !RunImage  initialise (&i%=(".GenBoot.!Config") 2t$=#i% : Copyright <t$=#i% : Version Ft$=#i% : blank line Pt$=#i% : descriptor Zar$=#i%: application root dt$=#i% : descriptor n(as$=#i%: application start command xt$=#i% : descriptor aq$=#i%: quit desktop flag t$=#i% : descriptor aw$=#i%: wimpslot value #i% aq$="N" . ș"Wimp_SlotSize",-1,-1 ,,f%:f%=f%/1024  f%<(aw$) f%=(aw$) 3 ("%WimpSlot -min "+(f%)+"k -max "+(f%)+"k") % ("%Set AppRoot$Dir ")  ("%Dir ")  ("%Dir "+ar$) (as$)  ,ș"Wimp_Initialise",200,&4B534154,"Boot"  error  ramfs "check_tasks , prequit 6 @! ș"Wimp_Poll",1,message r% J Ȏ r% T 17,18: receive ^ 19 : ack h r quit% |2stuff("%Run "+path$+".GenBoot.!Run2"+12+13) ș"Wimp_CloseDown"  : initialise  b%  quitblk 20  message 256 quit%=:quitref=0 7ș"OS_ReadVarVal","Obey$Dir",message,255,0,3 ,,b%  message?b%=13:path$=$message  :  ramfs "ș"OS_ReadRAMFsLimits" s%,e%  s%<>e% . ș"OS_FSControl",28,"RAM::0.*",,1 ,,,s% & s%<>0 0F w("Continuing will result in the loss of data in the RAM disc") :) ș"OS_FSControl",27,"RAM::0.*",,%11 D N X b: lcheck_tasks v tasks%,task_max% task_max%=5 )ș"OS_FSControl",13,"net"+0,1 ,,i% i%<>0 task_max%+=1 )ș"OS_FSControl",13,"ram"+0,1 ,,i% i%<>0 task_max%+=1 #ș"Wimp_ReadSysInfo",0 tasks% tasks%>task_max% P w("Continuing will result in the loss of any unsaved data in the desktop")   :  prequit !quitblk=20 quitblk!12=0  quitblk!16=0 &ș "Wimp_SendMessage",18,quitblk,0  quitref = quitblk!8 * 4: > ack HȎ message!16 R$0: message!8=quitref quit%= \ f p: z receive Ȏ message!16 %0: message!8<>quitref quit%=   :  error  !message=0 ( $(message+4)=$+" at line "+()+0 & ș"Wimp_ReportError",message,2,""  ș"Wimp_CloseDown"   : stuff(s$)  i%=1s$ # ș"OS_Byte",138,0,(s$,i%,1)) $ . 8: B w(s$) L!message=0 V$(message+4)=s$+0 `7ș"Wimp_ReportError",message,%10111,"WARNING" ,r% jr%=2 ș"Wimp_CloseDown": t "+@@@ 00PBASIC -quit @00009000,0000996Cp l  > !RunImage2   setup ( finalise 2 <: F setup PZ%=2 Z init dadjust_directory ni%=(path$+".!Config") xt$=#i% : Copyright t$=#i% : Version t$=#i% : blank line t$=#i% : descriptor )ar$=#i%: application root directory t$=#i% : descriptor (as$=#i%: application start command t$=#i% : descriptor page_size=8 adjust_modules page_size=8 tidy_modules  : init C% 2048 %ș"OS_UpdateMEMC",0,0 page_size page_size=page_size &C Ȏ page_size " 4: page_size=8 , 8: page_size=16 612: page_size=32 @ J P%=C% T ^: hadjust_directory r buff%,b% | buff% 256 5ș"OS_ReadVarVal","Obey$Dir",buff%,255,0,3 ,,b% buff%?b%=13:path$=$buff% b%=path$,".") root$=path$,b%)+"$" *("Set AppRoot$Dir "+path$,path$-8))  : adjust_modules  mn%,in%,z%,cont%,c$ "mn%=0:in%=0:z%=0:cont%=:c$=""  ȕ cont% 2 ș"XOS_Module",12,mn%,in% ,mn%,in%,p%,w%;f%  cont%=((f% 1)=0)  (w%<>0)  x% 8  !x%=z%:z%=x%:x%!4=p% & 0 : ȕ z%<>0 D s%=z%!4 N s%+=s%!16 X n$="" b ȕ ?s%<>0 l n$+=?s% v s%+=1  ! okay_to_kill(n$) kill(n$)  z%=!z%   : ݤokay_to_kill(n$)  i%,f%,m$ i%=(path$+".!Modules") f%= ȕ #i% (f%)  m$=#i%  m$=n$ f%=   #i% =f%  : *kill(n$) 4 p%,i%,text,code > p%=P% Hi%=0 Z% Z% R P%=p% \ [ OPT i% f B code p .text z EQUS n$+0  ALIGN  .code  MOV R0, #4  ADR R1, text " SWI "XOS_Module" ]   : tidy_modules  [ OPT Z%  MOV R0, #8 " SWI "XOS_Module" ]  : $finalise . i%,t$ 8command("%DIR "+root$) Bcommand("%DIR "+ar$) Lexit(as$) V `: jcommand(n$) t p%,i%,text,code ~ p%=P% i%=0 Z% Z%  P%=p%  [ OPT i%  B code  .text  EQUS n$+(13)  ALIGN  .code  ADR R0, text  SWI "XOS_CLI" ]    : exit(s$)  i%,p% ( p%=P% 2i%=0 Z% Z% < P%=p% F [ OPT i% P! ADR R0, command Z SWI "XOS_CLI" d .command n EQUS s$+0 x]  s$="GO "+~(C%)+12+13  i%=1s$ # ș"OS_Byte",138,0,(s$,i%,1))  Ș  (LMemAlloc MemAlloc util 0.11 (06 Dec 1988)esiSystemSizeeD\RMASize$<ScreenSizeB SpriteSizefFontSizeDMFgRAMFSSize_hBRMAFreelCSpriteFreeup]FontFree tho @-+(*SystemSize allows you to set the system heap size in Kbytes. If it is not possible to obtain this amount of memory, the optional * command will be executed. Syntax: *SystemSize [<*command>]e @-**RMASize allows you to set the RMA size in Kbytes. If it is not possible to obtain this amount of memory, the optional * command will be executed. Syntax: *RMASize [<*command>]@-.*ScreenSize allows you to set the screen memory size in Kbytes. If it is not possible to obtain this amount of memory, the optional * command will be executed. Syntax: *ScreenSize [<*command>]@-*n*SpriteSize allows you to set the system sprite size in Kbytes. If it is not possible to obtain this amount of memory, the optional * command will be executed. Syntax: *SpriteSize [<*command>]@-+6L*FontSize allows you to set the font cache size in Kbytes. If it is not possible to obtain this amount of memory, the optional * command will be executed. Syntax: *FontSize [<*command>] ge@-**RAMFSSize allows you to set the RAM disc size in Kbytes. If it is not possible to obtain this amount of memory, the optional * command will be executed. Syntax: *RAMFSSize [<*command>]fre@-*-QJ -\ *RMAFree allows you to set the free space in the RMA in Kbytes. If it is not possible to do this, the optional * command will be executed. Syntax: *RMAFree [<*command>]on@-*-. BQJ -\ *SpriteFree allows you to set the free space in the system sprite area in Kbytes. If it is not possible to do this, the optional * command will be executed. Syntax: *SpriteFree [<*command>] @-+@- BQJ -\ H*FontFree allows you to set the free space in the font cache in Kbytes. If it is not possible to do this, the optional * command will be executed. Syntax: *FontFree [<*command>]a@-!%P P P PP P P P @-\ @a@-*@q@-0 Using the PC Emulator under RISC OS This directory contains the components necessary to make existing copies of the Acorn PC Emulator (AKA42) operate under RISC OS. The new start-up sequence employs a memory optimisation technique designed to free the maximum amount of RAM on 1Mb systems. As a result, the application will not start if there is unsaved data in the Desktop or in the RAM Filing System. Note that there is no mechanism for returning to the RISC OS environment once the PC Emulator has been entered - you must reset the machine at the end of each session. 1. Floppy disc users Create a new, RISC OS PC Emulator disc by carrying out the steps below: a. Format a new floppy disc and use to make a backup copy of your PC Emulator disc. Name the backup NewPCEm. b. Copy the !PC application and the !Boot file from the Support Disc to the root directory of disc NewPCEm. To use the PC Emulator, insert the new disc into drive 0 and either: auto-boot the disc by pressing SHIFT+BREAK or: click on the floppy disc icon and, when the directory viewer appears, double click on the !PC icon. As under Arthur 1.2 you may also type: PC.Emulate at the Supervisor Prompt (*) if you wish to run the PC Emulator without any memory optimisation. In each case, insert your original MS-DOS boot disc when prompted to do so. 2. Hard disc users a. If you have not already installed the PC Emulator on your hard disc, do so now, following the instructions supplied in the original package. b. Copy the !PC application from the Support Disc to the desired position in your hard disc directory heirarchy. To use the PC Emulator, click on the hard disc icon, bring up the appropriate directory viewer and double click on the !PC icon. As with floppy disc, you may also start the PC emulator without memory optimisation by typing: PC.Emulate at the Supervisor prompt (*). GENERAL INFORMATION The subdirectories in this branch of the Support Disc relate to the following Acorn / Acornsoft products: First Word Plus Logistix PC Emulator and the following 6502 Emulation products: View ViewSpell ViewSheet ViewStore In each case, it is important to read the instructions contained in file ReadMe in each directory; this file contains instructions for both floppy disc and hard disc users. In addition, you should note the following general points: 1. All references to files on the Support Disc relate to the directory you are currently viewing, except where explicitly stated. 2. It is assumed that all operations described for each product will be carried out using the facilities provided in the RISC OS Desktop - users with a particular preference can achieve the same results using the *COPY command. Regardless of the method chosen, it is suggested that system variable Copy$Options be set as follows: *SET Copy$Options A ~C ~D F ~L ~N ~P Q R ~S ~T ~V The command may be typed at the Supervisor prompt but, for convenience, the variable may be set by double clicking on file CopySetup in this directory. 3. New discs, where required, should be formatted in the new ADFS E format. 4. A copy of the hard disc formatting program HFORM is included in this directory. Hard disc owners should use this latest version in preference to any previous versions of HFORM. Instructions for using HFORM are included in the User Guide. AVP's Desktop Publishing package : PIXEL PERFECT Current version - 1.04 (Dec.88) Version 1.04 functions correctly under RISC_OS with no modification. To execute 1.04 click the left mouse button over the PixPerfect icon but be sure to exit using the 'Exit' option in the 'Desk' menu to restore CMOS RAM. Lesser versions than 1.04 need to be modified in the following manner : Click the middle mouse button on the Archimedes logo and select the 'Exit' option by clicking the left button of the mouse over the word 'Exit'. Type the word BASIC to the '*' prompt and then type : 10*EXEC :0.!BOOT SAVE ":0.PixPerfect" with the Pixel Perfect master disc in drive 0. The program will now execute from the RISC_OS Desktop environment by double clicking the left button of the mouse over the 'PixPerfect' icon. We strongly advise that you upgrade to 1.04 if you have not done so, a list of the extra features appears in the edit file 'Upgrade'. AVP's Desktop Publishing package : PIXEL PERFECT UPGRADE INFORMATION - Current Version : 1.04 (Dec.88) The following features have been added since version 1.01 was released : 1. Scolling option in 'View page' allows complete page to be viewed. 2. Mannesmann Tally printer dump. 3. Option to choose which drive to access for data. 4. Finer control over scrolling. 5. Option to enter CLI commands. 6. Greater control with importing text. 7. Current CMOS RAM settings saved to disc and set back on exit. 8. General improvements throughout the program. We advise that you take advantage of this FREE upgrade serice. Contact AVP : 02912 625439 EXT. 408 Cambridge Microsystems - Product Information Current Products MATRIX-3 - This is a very powerful package based on the spreadsheet concept. The package provides the usual facilities together with some more advanced facilities opening up a wide new range of possible applications. Firstly, Matrix-3 provides a three dimensional array of cells. All the cell range type of functions (e.g. SUM,MAX etc) can be used on three dimensional cell ranges. Similarly, the manipulative commands such as REPLICATE can also be used on three dimensional ranges of cells. The provision of three dimensions does simplify the modelling of all sorts of applications from simple accounting through statistical analysis to complex engineering. Secondly, the concept of the simple cell formula has been extended in to provide large cell programs using a simple language syntax. This facility enables very powerful data manipulation procedures to be quickly developed. The current version will operate under Risc OS (see ReadMe file in directory Matrix-3) and is available from the address shown below. The price is 109.25 (including VAT, post and packing). Future Products A new version of Matrix-3 is under development which will be fully compatible with the Risc OS Multi-tasking Wimp. As well as having a new 'desktop look' it will provide a number of new facilites. The new version will be fully compatible with files created with the current version and will be available at the same price. Users of the current version will be offered an upgrade (including a manual update) in return for their original issue disc and the sum of 20.00. Cambridge Microsystems intends to launch a range of Podule based Logic Analysers during 1989. The first version will an entry level product aimed at the education market. It will provide 16 channels with a 6MHz maximum sample rate. For further information on any of our products please contact Neil Johnson on 0223 66553 or write to: Cambridge Microsystems, 19 Panton Street, Cambridge. CB2 1HL IconSprites .!Sprites Set Alias$@RunType_D69 /.!Run -load %0 Set Alias$@RunType_D68 /.!Run -exec %0 Set Alias$@RunType_D67 /.!Run -config %0 Set File$Type_D69 "M3Spread" Set File$Type_D68 "M3Exec" Set File$Type_D67 "M3Conf" | > !Matrix3.!Run | | Task description for Matrix3 version 2.15 under Risc OS | RMEnsure FPEmulator 2.70 RMLoad System:Modules.FPEmulator RMEnsure FPEmulator 2.70 Error You need FPEmulator 2.70 or later | Set Matrix3$Dir Set Matrix3$Lib Wimpslot -min 300K Run ".!RunImage" %0 %1 0 file_d68,, wwwwwwwwwwwwwwwwwwwwwwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwwwwwww wwww wwwwwwwwwwwwwwwwwwwwwwwww!matrix3, ݪݪwwݭݪwwݪݪwwݭݭݪwwݭݪݭݪwwݭݭݪݪwwݭݭݪwwݭݭݪwwݭݪwwݭݪwwݭݪwwݭݪwwݭݪwwݭݪwwݭݪwwݭݪwwݭݪwsmall_d67 ,, wwwwwwwww      wwwwwwwwwsm!matrix3, ݭݭݭݭݭݪݪݭݭݭݭݭݭݭݭݭݭݭݭݭݭfile_d69,, wwwwwwwwwwwwwwwwwwwwwwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwwwwwwwwwwwwwwwwwwwwwwwẁfile_d67,, wwwwwwwwwwwwwwwwwwwwwwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwwwwwww wwww wwwwwwwwwwwwwwwwwwwwwwwww̘small_d69 ,, wwwwwwwww      wwwwwwwwwsmall_d68 ,, wwwwwwwww      wwwwwwwww Using Matrix-3 under Risc OS By implementing the following procedure you can run your existing version of Matrix-3 from the Wimp. Matrix-3 will 'take over' the screen and operate in dedicated mode. By performing a Matrix-3 exit command you can return to the Wimp. What you need to do Copy the directory !Matrix3, with its contents, to a point in your filing system where you want to see Matrix-3 as an application. This can be on floppy, hard disc or Econet. You should also arrange for the directory !System to be present so that the FPEmulator is available for Matrix-3. The next stage is to copy the following Matrix-3 files from the directory Matrix3Lib in your existing structure, to the directory !Matrix3:- Logo M3Conf M3Help Mat3 Matrix3 The file Matrix3 should be renamed as !RunImage. The directory !Matrix3 will now behave as a standard application directory. If you double click SELECT on the !Matrix3 directory icon then Matrix-3 is loaded using the default configuration file M3Conf. The file !Sprites contains icons for three new file types which have been allocated to Matrix-3 as follows: Type D69 (M3Spread) - Spreadsheet file Type D68 (M3Exec) - Execute file Type D67 (M3Conf) - Configuration file If you assign these types to your Matrix-3 files you can double click on the file icon to load Matrix-3 and automatically action the file. e.g. Double click on a type 'D69' file 'abc' will load Matrix-3 containing the spreadsheet file 'abc'. Once loaded, Matrix-3 is operated normally, i.e. as under Arthur 1.2 AlphaBase RISCOS conversion Due to undocumented alterations in the way RISCOS operates, it is not possible to give a simple conversion routine. Registered users of Alphabase should contact us for further information. ECHO <22><&8C> WIMPSLOT -MIN 200K -MAX 200K SET ART$PATH DIR BASIC ART4 QUIT *WIMPSLOT -MIN 200K -MAX 200K *ART3   26::" at line ";: ș 26,0,0 A% B%=(A% %1100 ) >> 2 ( Ȏ B% 2 0 :pagesize%=4 < 1 :pagesize%=8 F 2 :pagesize%=16 P 3 :pagesize%=32 Z dș 6,161,16 A,B,B n (B %10000 )<>0 x Z%="!oldCMOS"  I%=0 255  A%=#Z%  ș 6,162,I%,A%  #Z%  *DELETE !oldCMOS  *SET art$path :0.!Artisan @# ".ART4" T ^ ensure hZ%="!oldCMOS" r I%=0 255 | ș 6,161,I% A%,A%,A%  #Z%,A%  #Z% B%=B %10000 ș 6,162,16,B% ș 6,161,134 A,A,font% ș 6,161,143 A,A,screen% ș 6,161,145 A,A,system% ș 6,161,146 A,A,rma% ș 6,161,147 A,A,sprite% font%=(font% 2)*pagesize% &screen%=screen%*pagesize% 0system%=system%*pagesize% :rma%=rma%*pagesize% Dsprite%=sprite%*pagesize% N screen%=0 X. pagesize% =8 screen%=80 screen%=160 b v*CONFIGURE LANGUAGE 0 1("CONFIGURE SCREENSIZE "+(160 pagesize%)) /("CONFIGURE SYSTEMSIZE "+(0 pagesize%)) ("CONFIGURE FONTSIZE 0") ("CONFIGURE RMASIZE 0") ("CONFIGURE DRIVE 0") A%=(--(95*1024))/1024 A%=A%-(160-screen%) A%=A%-(40-system%) A%=A%+sprite% A%=( A% pagesize%)  A%>63 A%=63 $("CONFIGURE SPRITESIZE "+(A%))  (-52)    ensure   *^ =67785 26::3,10)"Please ensure disc is NOT write protected and reboot disc": 4 *OPT 4 3 > *OPT 4 2 H 7** ?******** Artisan RISCOS conversion To convert your ARTISAN disc for use with RISCOS, Take the following steps using a backup copy of your ARTISAN disc. 1) Using the desktop, delete the files ART1 and ART3 from the ARTISAN disc 2) Copy the contents of this directory onto the ARTISAN disc. 3) Double click on the file UPGRADE on the ARTISAN disc. Your ARTISAN disc can now be run either by pressing as normal or in the standard RISCOS manner fron the desktop. If you wish to install ARTISAN on a hard disc, use the desktop to copy the directories ARTISAN and !Artisan. N.B When you run ARTISAN from the desktop, it is up to you to allocate the amount of sprite space required by using the task manager and adjusting the sliders. *DIR :0 *CDIR !Artisan *BASIC LOAD"Art5" 85HIMEM=PAGE+(150*1024):REM BBB 20140IFRES%=1 MODE12:OSCLI"FX4":OSCLI"FX200":QUIT:REM BBB 20150MODE12:OSCLI"FX4":P%=LOMEM:[:OPT 2:MOV R0,#&C8:MOV R1,#&03:MOV R2,#&00:SWI "XOS_Byte":MOV R0,#&03800000:LDR R1,[R0]:STR R1,[R1,-R1]:SWI "XOS_EnterOS":TEQP PC,#&FC000003:MOV PC,#0:]:CALLLOMEM SAVE"Art5" LOAD"Art4" RENUMBER 105 END=(HIMEM-(32*1024)):REM BBB 2950 REM BBB 2960 W%=PAGE+(150*1024):!W%=&6880:REM BBB SAVE"Art4" *RENAME !Run !Artisan.!Run *RENAME !Palette !Artisan.!palette *RENAME Art4 !Artisan.Art4 *RENAME Art5 !Artisan.Art5 *RENAME Art6 !Artisan.Art6 *RENAME Articons !Artisan.Articons *RENAME CursorDefs !Artisan.CursorDefs QUIT QUIT ECHO <22><&8C> WIMPSLOT -MIN 200K -MAX 200K RMENSURE FASTLOADSAVE 1.00 RMLOAD .FASTRM SET ALIAS$SCREENLOAD FASTLOAD %0 SET ALIAS$SCREENSAVE FASTSAVE %0 RMENSURE DISPLAY 1.00 RMLOAD .DISPLAY DIR URD @ BASIC .DEMOCODE Artisan Support Demo disc RISCOS conversion To create a RISCOS compatible version of the ARTISAN SUPPORT disc demo, Take the following steps using a backup copy of your SUPPORT disc. 1) Create a demo disc by running INSTALL on the Support disc 2) Copy the contents of this directory onto this Demo disc. 3) Double click on the file UPGRADE on the Demo disc. Your Demo disc can now be run either by pressing as normal or in the standard RISCOS manner from the desktop. If you wish to install the SUPPORT disc on a hard disc, use the desktop to copy the directory !Support DIR :0 QUIT CDIR !Demo RENAME !Run !Demo.!Run DELETE !BOOT RENAME CRUSADE !Demo.Crusade RENAME DATA1 !Demo.Data1 RENAME DATA2 !Demo.Data2 RENAME Dem3 !Boot SETTYPE DEMO FFE RENAME DEMO !Demo.Demo RENAME DEMOCODE !Demo.DemoCode RENAME DISPLAY !Demo.Display RENAME EAGLE !Demo.Eagle RENAME ESCHER !Demo.Escher RENAME ESCHER1 !Demo.Escher1 RENAME FASTRM !Demo.FastRM BASIC LOAD "!BOOT" 195*DIR !Demo 410*CONFIGURE DRIVE 0 SAVE "!Boot" LOAD "!Demo.DemoCode" 5ONERROR QUIT 3000QUIT SAVE "!Demo.DemoCode" QUIT QUIT K N%-=1 L E%= =E%-(24*1024) K N%-=1 L E%= =E%-(24*1024) A HARD% P%=:[:OPT 2:MOV R0,#&C8:MOV R1,#&03:MOV R2,#&00:SWI "XOS_Byte":MOV R0,#&03800000:LDR R1,[R0]:STR R1,[R1,-R1]:SWI "XOS_EnterOS":TEQP PC,#&FC000003:MOV PC,#0:]:֒ 12:Ș ECHO <22><&8C> WIMPSLOT -MIN 640K DIR BASIC Graph5b *  26::" at line ";: ș 26,0,0 C% (B%=(C% %1100 ) >> 2 2 Ȏ B% < 0 :pagesize%=4 F 1 :pagesize%=8 P 2 :pagesize%=16 Z 3 :pagesize%=32 d nș 6,161,16 A,B,B x(B %10000 )<>0  Z%="!oldCMOS"  I%=0 255  B%=#Z%  ș 6,162,I%,B%  #Z%  *DELETE !oldCMOS  *DIR !Gwriter *URD @  "GRAPH5B"  ensure Z%="!oldCMOS"  I%=0 255  ș 6,161,I% A%,A%,A%  #Z%,A% " ,#Z% 6 erflag%= @B%=B %10000 Jș 6,162,16,B% Tș 6,161,134 A,A,font% ^ș 6,161,143 A,A,screen% hș 6,161,145 A,A,system% rș 6,161,146 A,A,rma% |ș 6,161,147 A,A,sprite% ș 6,161,144 A,A,ramfs% font%=(font% 2)*pagesize% screen%=screen%*pagesize% system%=system%*pagesize% rma%=rma%*pagesize% sprite%=sprite%*pagesize% ramfs%=ramfs%*pagesize%  screen%=0 - pagesize% =8 screen%=80 screen%=160  A%=(-)/1024 A%=A%-(160-screen%) A%=A%+system% Q%< 12A%=A%+rma% A%=A%+ramfs%  A%<208 &>26,12:13,15)"Please reduce sprite size and reboot disc" 0*CONFIGURE NOBOOT : D N*CONFIGURE LANGUAGE 0 X1("CONFIGURE SCREENSIZE "+(160 pagesize%)) b*CONFIGURE SYSTEMSIZE 0 l*CONFIGURE FONTSIZE 0 v*CONFIGURE RMASIZE 0 *CONFIGURE RAMFSSIZE 0 *CONFIGURE DRIVE 0  (-52)   ensure  ^ =67785 26::3,10)"Please ensure disc is NOT write protected and reboot disc":  *OPT 4 3  *OPT 4 2  7** ?******** QUIT  *BASIC VDU28,0,0,0,0 SYS "XOS_Module",4,"Fontmanager" SYS "XOS_Module",4,"Debugger" SYS "XOS_Module",4,"Stringlib" SYS "XOS_Module",4,"Soundscheduler" SYS "XOS_Module",4,"Percussion" SYS "XOS_Module",4,"ARMBasicEditor" SYS "XOS_Module",4,"SystemDevices" SYS "XOS_Module",4,"Econet" SYS "XOS_Module",4,"Netfs" SYS "XOS_Module",4,"Netprint" SYS "XOS_Module",4,"Podule" QUIT RMLOAD ArcBuffer *WIMPSLOT -MIN 500k *gra3 Graphic Writer RISCOS conversion To convert your Graphic Writer disc for use with RISCOS, Take the following steps using a backup copy of your Graphic Writer disc. If you have an early copy of Graphic Writer before 1.05, This sequence may not work. Contact us for further information. 1) Using the desktop, delete the files Graph1 and gra3 from the Graphic Writer disc 2) Copy the contents of this directory onto the Graphic Writer disc. 3) Double click on the file UPGRADE on the Graphic Writer disc. Your Graphic Writer disc can now be run either by pressing as normal or in the standard RISCOS manner fron the desktop. If you wish to install Graphic Writer on a hard disc, use the desktop to copy the directory !GWriter N.B If you run Graphic Writer from the desktop, It is your responsibility to allocate as much application workspace as you require. You should do this in the normal way using the task manager. *DIR :0 *BASIC LOAD"GRAPH5B" 75 N%-=1 76 E%=HIMEM 215END=E%-(24*1024) SAVE"Graph5b" LOAD"Graph6b" 16820IF HARD% P%=LOMEM:[:OPT 2:MOV R0,#&C8:MOV R1,#&03:MOV R2,#&00:SWI "XOS_Byte":MOV R0,#&03800000:LDR R1,[R0]:STR R1,[R1,-R1]:SWI "XOS_EnterOS":TEQP PC,#&FC000003:MOV PC,#0:]:CALLLOMEM ELSE MODE12:QUIT SAVE"Graph6b" *CDIR !Gwriter *ACCESS * WR *RENAME X!Boot !GWriter.!Boot *RENAME !Run !GWriter.!Run *RENAME !Default !GWriter.!Default *RENAME !Default !GWriter.!Default *RENAME !Default !GWriter.!Default *RENAME Blankdoc !GWriter.Blankdoc *RENAME Graph5b !GWriter.Graph5b *RENAME Graph6b !GWriter.Graph6b *RENAME GWI2 !GWriter.GWI2 *RENAME NewModeCd4 !GWriter.NewModeCd4 *RENAME NewRelCodb !GWriter.NewRelCodb *RENAME NOEMBEDS !GWriter.NOEMBEDS *RENAME NOEMBEDS !GWriter.NOEMBEDS *RENAME NOEMBEDS !GWriter.NOEMBEDS *RENAME TREES !GWriter.TREES *RENAME WESTERN !GWriter.WESTERN QUIT QUIT SET File$Type_400 GwText SET File$Type_401 GwGraph SET File$Type_402 GwMaster SET File$Type_403 GwVdu SET File$Type_404 GwMulti Using Clares products under RISC OS The directories in this section of the Support disc relate to Clares products for Archimedes computer systems. With the exception of Alphabase, all products can be upgraded so that they can be used from the RISC OS Desktop and each directory contains a ReadMe file giving the necessary instructions. Whilst we have made every effort ensure that the instructions are accurate, we cannot guarantee that they will function for every version of each package. Users who experience any difficulty should contact us direct - where appropriate, we will provide an upgrade to the latest version of a product for a small handling charge. Clares Micro Supplies 98 Middlewich Road Northwich Cheshire CW9 7DA Tel: 0606 48511 ICONSPRITES .!Sprites SET FILE$TYPE_DE2 ProArt SET FILE$TYPE_ECF ECFData SET FILE$TYPE_DDA ColSet SET FILE$TYPE_DD9 MagicPen SET FILE$TYPE_DD8 ProFont SET FILE$TYPE_DD7 Bezier SET RUNFILE "" SET BLOGGS SET ALIAS$@RUNTYPE_DE2 SET RUNFILE <37>0<13>RUN .!RUN|WimpSlot -min 0 -max 0 Set Art$Prefix SET Art$Resource .Resources RMENSURE ProArtisan 1.00 RMLOAD .ProArtSLDR RMENSURE Bezier 1.00 RMLOAD .Bezrm ECHO <22><&8F> Wimpslot -min 432K OBEY .CONFIGSYS  > :ProArtisan.Pro3  26::" at line ";: ș 26,0,0 A% (B%=(A% %1100 ) >> 2 2 Ȏ B% < 0 :pagesize%=4 F 1 :pagesize%=8 P 2 :pagesize%=16 Z 3 :pagesize%=32 d nș 6,161,16 A,B,B x (B %10000 )<>0 ș 6,162,16,B%  Z%="!oldCMOS"  I%=0 255  C%=#Z%  ș 6,162,I%,C%  #Z%  *DELETE !oldCMOS  *SET runfile "" 3 *SET Art$Prefix adfs::ProArtisan.$.!ProArt = *SET Art$Resource adfs::ProArtisan.$.!ProArt.Resources f *IF os$="1.20" THEN EXEC :ProArtisan.!ProArt.CONFIGSYS ELSE OBEY :ProArtisan.!ProArt.CONFIGSYS    ensure Z%="!oldCMOS"  I%=0 255 " ș 6,161,I% A%,A%,A% , #Z%,A% 6 @#Z% JB%=B %10000 Tș 6,162,16,B% ^ș 6,161,134 A,A,font% hș 6,161,143 A,A,screen% rș 6,161,145 A,A,system% |ș 6,161,146 A,A,rma% ș 6,161,147 A,A,sprite% font%=(font% 2)*pagesize% screen%=screen%*pagesize% system%=system%*pagesize% rma%=rma%*pagesize% sprite%=sprite%*pagesize%  screen%=0 . pagesize% =8 screen%=80 screen%=160  *CONFIGURE LANGUAGE 0 1("CONFIGURE SCREENSIZE "+(320 pagesize%)) ("CONFIGURE FONTSIZE 0") ("CONFIGURE RMASIZE 0") ("CONFIGURE DRIVE 0") ("CONFIGURE SPRITESIZE 0") "("CONFIGURE FILESYSTEM ADFS") &A%=(--(180*1024))/1024 0A%=A%-(320-screen%) :A%=A%+system% DA%=A% +sprite% NA%=( A% pagesize%) X("CONFIGURE SYSTEMSIZE 0") b (-52) l v ensure  ^ =67785 26::3,10)"Please ensure disc is NOT write protected and reboot disc":  *OPT 4 3  *OPT 4 2  7** ?******** > ReadMe ProArtisan RISCOS conversion ProArtisan is already RISCOS compatible. If you have version 1.05, you can gain the extra feature of version 1.06 by performing the following actions. 1) Using the desktop, delete the files $.Pro3 !ProArt.!Run and !ProArt.!Boot on the ProArtisan disc 2) Copy the files !Run and !Boot in this directory to directory !ProArt on the ProArtisan disc and UPGRADE and Pro3 into the $ directory. 3) Double click on the file UPGRADE on the ProArtisan disc. 4) Delete UPGRADE Clicking on a ProArtisan picture file will now cause ProArtisan to be run with the picture already loaded. N.B If you run ProArtisan from the desktop, It is your responsibility to allocate as much application workspace as you require. You should do this in the normal way using the task manager. *DIR :0 *BASIC LOAD"!PROART.PRO5" 831*IF runfile <> "" THEN PROLOAD 832*SET runfile "" 25756*FX200 32640PROCA(16,-128,364,-80,&301D,0,0,"Version 1.06") SAVE"!ProArt.Pro5" QUIT QUIT ECHO <22><&8C> WIMPSLOT -MIN 200K -MAX 200K DIR URD @ OBEY LOADER > ReadMe Artisan Support disc RISCOS conversion To convert your ARTISAN SUPPORT disc for use with RISCOS, Take the following steps using a backup copy of your SUPPORT disc. 1) Using the desktop, delete the files SUP1 and SUP3 from the SUPPORT disc 2) Copy the contents of this directory onto the SUPPORT disc. 3) Double click on the file UPGRADE on the SUPPORT disc. 4) If you do not have our ArcBuffer, use ArcEdit to remove the reference to 'Buffer' from the file !Support.Loader ( or buy ArcBuffer!! ) Your SUPPORT disc can now be run either by pressing as normal or in the standard RISCOS manner fron the desktop. If you wish to install the SUPPORT disc on a hard disc,use the desktop to copy the directory !Support QUIT SET ALIAS$SCREENLOAD FASTLOAD %0 SET ALIAS$SCREENSAVE FASTSAVE %0 RMLOAD !Support.Buffer RMLOAD !Support.FASTRM RMLOAD !Support.IntFix *sup3   26::" at line ";: ș 26,0,0 C% (B%=(C% %1100 ) >> 2 2 Ȏ B% < 0 :pagesize%=4 F 1 :pagesize%=8 P 2 :pagesize%=16 Z 3 :pagesize%=32 d nș 6,161,16 A,B,B x(B %10000 )<>0  Z%="!oldCMOS"  I%=0 255  B%=#Z%  ș 6,162,I%,B%  #Z%  *DELETE !oldCMOS  *DIR !Support  *URD @  "Support"  ensure Z%="!oldCMOS"  I%=0 255  ș 6,161,I% A%,A%,A%  #Z%,A%  #Z% " erflag%= ,B%=B %10000 6ș 6,162,16,B% @ș 6,161,134 A,A,font% Jș 6,161,143 A,A,screen% Tș 6,161,145 A,A,system% ^ș 6,161,146 A,A,rma% hș 6,161,147 A,A,sprite% rș 6,161,144 A,A,ramfs% |sprite%=sprite%*pagesize% *CONFIGURE LANGUAGE 0 1("CONFIGURE SCREENSIZE "+(160 pagesize%)) *CONFIGURE DRIVE 0 1("CONFIGURE SPRITESIZE "+(32 pagesize%))  (-52)   ensure  ^ =67785 26::3,10)"Please ensure disc is NOT write protected and reboot disc":  *OPT 4 3  *OPT 4 2  7** ?******** *DIR :0 *NAMEDISC 0 Support BASIC LOAD"SUPPORT" 106END=HIMEM-(32*1024) 7590IF larE% THEN OSCLI"FX200":MODE12:QUIT ELSE P%=LOMEM:[:OPT 2:MOV R0,#&C8:MOV R1,#&03:MOV R2,#&00:SWI "XOS_Byte":MOV R0,#&03800000:LDR R1,[R0]:STR R1,[R1,-R1]:SWI "XOS_EnterOS":TEQP PC,#&FC000003:MOV PC,#0:]:CALLLOMEM SAVE QUIT CDIR !Support ACCESS * WR RENAME CRUSADE !Support.CRUSADE RENAME DATA1 !Support.DATA1 RENAME DATA2 !Support.DATA2 RENAME Dem2 !Support.Dem2 RENAME Dem3 !Support.Dem3 RENAME DEMO !Support.Demo RENAME DISPLAY !Support.Display RENAME EAGLE !Support.Eagle RENAME ESCHER !Support.Escher RENAME ESCHER1 !Support.Escher1 RENAME FASTRM !Support.FastRM RENAME Fonts !Support.Fonts RENAME intfix !Support.Intfix RENAME LOADER !Support.Loader RENAME OBJSUPPORT !Support.ObjSupport RENAME PRINTPAT !Support.PrintPat RENAME SUPICONS !Support.Supicons RENAME SUPPORT !Support.Support RENAME !RUN !Support.!Run QUIT QUIT PipeDream PipeDream provides powerful word processing, spreadsheet and database facilities in a simple, easily learnt manner. PipeDream is available for the Acorn Archimedes, the IBM PC and compatibles and is built into the Z88 computer. PipeDream is also file compatible with View Professional on the BBC Computer. Features load file, insert file save file, save selected columns or rows load/save LOTUS 1-2-3 files 536,870,912 columns by 536,870,912 rows sort in ascending/descending order, alphabetically, numerically, chronologically search and replace with wild cards linking files to pass numbers between documents user defined colour displays foreign character editing and printing copy, move, delete blocks word count save cursor position, go to old cursor position redefine keys swap case insert/delete column/row page breaks on screen multi-file documents print mail-shots printer drivers, microspacing, foreign characters highlights load/save files directly to Z88 filing system on-screen Bold, underlined and italics on-screen superscripts and subscripts Display formats leading and trailing characters left alignment centre alignment right alignment /left/centre/right/ English/American date formats fixed rows and columns decimal places, minus/brackets SpellCheck PipeDream SpellCheck is the spelling checker for use with PipeDream. SpellCheck links in with PipeDream so that all features are available from an extra PipeDream menu. Automatic checking as you are typing can be switched and off. Complete documents can be checked at any time. Other features include: 93,000 word main dictionary checking at 40,000 words per minute user dictionaries anagrams browse facility with wildcards dump (spool) words with wildcards merge word list with user dictionary If you would like more complete information please phone us on 0954 211472 or write to us at: Colton Software Broadway House 149-151 St Neots Road Cambridge CB3 7QJ %$.!Pipedream | > !PipeDream.!Boot Set PipeDream$Dir Set Alias$@RunType_DDE Run .!Run %%*0 Set File$Type_DDE PDream IconSprites .!Sprites | > !PipeDream.!Run Set PipeDream$Dir WimpSlot -min 450k RMReInit InternationalKeyboard RMKill InternationalKeyboard RMEnsure FPEmulator 2.60 RMLoad .FPEmulator Set Alias$@RunType_DDE Run .!Run %%*0 Set File$Type_DDE PDream IconSprites .!Sprites Load $.Library.pd 8000 Echo <26> Pointer 0 Go 8000 ; %*0 d!pipedream, file_dde,, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww Using PipeDream under RISC OS The contents of this directory can be used to create a version of PipeDream which can be executed from the RISC OS Desktop. 1. Floppy disc users a. Format a new floppy disc and make a backup copy of your current PipeDream working disc. Name the new disc NewPd. b. Copy the !PipeDream application from the Support disc to the root directory of disc NewPd. c. Copy the Floating Point Emulator module from directory !System.Modules on Applications disc 1 into directory !PipeDream on disc NewPd. To use PipeDream from the Desktop, simply insert disc NewPd into drive 0 or drive 1, click on the corresponding disc drive icon and, when the directory viewer appears, double click on the !PipeDream icon. You may also auto-boot disc NewPd provided that it is loaded in drive 0. 2. Hard disc users a. If you have not already installed PipeDream onto your hard disc, do so now, using the instructions supplied with the original package. b. Copy the !PipeDream application from the Support disc to the desired location in the hard disc directory hierarchy. Copy the Floating Point Emulator module into the !PipeDream application as described in paragraph c. above. To use PipeDream from the Desktop, open the appropriate hard disc directory viewer and double click on the !PipeDream icon. Using PipeDream under RISC OS The contents of this directory can be used to create a version of PipeDream which can be executed from the RISC OS Desktop. 1. Floppy disc users a. Format a new floppy disc and make a backup copy of your current PipeDream working disc. Name the new disc NewPd. b. Copy the !PipeDream application from the Support disc to the root directory of disc NewPd. c. Copy the Floating Point Emulator module from directory !System.Modules on Applications disc 1 into directory !PipeDream on disc NewPd. To use PipeDream from the Desktop, simply insert disc NewPd into drive 0 or drive 1, click on the corresponding disc drive icon and, when the directory viewer appears, double click on the !PipeDream icon. You may also auto-boot disc NewPd provided that it is loaded in drive 0. 2. Hard disc users a. If you have not already installed PipeDream onto your hard disc, do so now, using the instructions supplied with the original package. b. Copy the !PipeDream application from the Support disc to the desired location in the hard disc directory hierarchy. Copy the Floating Point Emulator module into the !PipeDream application as described in paragraph c. above. To use PipeDream from the Desktop, open the appropriate hard disc directory viewer and double click on the !PipeDream icon. Dabs Press : General Information All Dabs Press Archimedes products have been tested for compatibility with RISC OS, as shown in the table below: Product: Runs from Desktop Runs from SHIFT+BREAK Arcendium Yes Yes Alerion No No Instigator Yes Yes Archimedes Basic Compiler Yes No Assembly Language Progs Disc No Yes The Alerion Game has copy protection incompatible with RISC OS and a modified version will is planned to be available from March 1989. Queries and Dabs Press Technical support to 061 766 8423. SET FC$Dir RUN .!RunImage >:4.$.!FC.!RunImage *EXEC $.LIBRARY.FARMCASH :RISC-OS Farmcash: FLOPPY USERS: Format a new blank disc and create the directory !FC Use the procedures as outlined in your manual. Copy the contents of this directory into the new directory on your new disc then press the function key 12 For single drive users enter COPY :0.$.Farmcash.* :0.$.!FC.* PQ and follow the instructions on the screen, your destination disc being the newly formatted disc. Then place your working disc in the drive and enter COPY :0.$.* :0.!FC.* RQP the destination disc being the newly formatted disc. For twin drive users, place your newly formatted disc in drive 1 and copy the contents of this directory to :1.!FC Place your working Farmcash disc in drive 0 and the newly formatted disc in drive 0 and copy everything to :1.!FC HARD DISC USERS: Create a directory !FC on the hard disc. Copy the contents of this directory into the new directory. SET FF$Dir RUN .!RunImage >:4.$.!FF.!RunImage *EXEC $.LIBRARY.FieldFile :RISC-OS Fieldfile: FLOPPY USERS: Format a new blank disc and create the directory !FF Use the procedures as outlined in your manual. Copy the contents of this directory into the new directory on your new disc then press the function key 12 For single drive users enter COPY :0.$.Fieldfile.* :0.$.!FF.* PQ and follow the instructions on the screen, your destination disc being the newly formatted disc. Then place your working disc in the drive and enter COPY :0.$.* :0.!FF.* RQP the destination disc being the newly formatted disc. For twin drive users, place your newly formatted disc in drive 1 and copy the contents of this directory to :1.!FF Place your working Farmcash disc in drive 0 and the newly formatted disc in drive 0 and copy everything to :1.!FF HARD DISC USERS: Create a directory !FF on the hard disc. Copy the contents of this directory into the new directory. SET FF$Dir RUN .!RunImage >:4.$.!FF.!RunImage *EXEC $.LIBRARY.FieldFile :RISC-OS Farmplanner: FLOPPY USERS: Format a new blank disc and create the directory !FP Use the procedures as outlined in your manual. Copy the contents of this directory into the new directory on your new disc then press the function key 12 For single drive users enter COPY :0.$.Fplanner.* :0.$.!FP.* PQ and follow the instructions on the screen, your destination disc being the newly formatted disc. Then place your working disc in the drive and enter COPY :0.$.* :0.!FP.* RQP the destination disc being the newly formatted disc. For twin drive users, place your newly formatted disc in drive 1 and copy the contents of this directory to :1.!FP Place your working Farmplanner disc in drive 0 and the newly formatted disc in drive 0 and copy everything to :1.!FP HARD DISC USERS: Create a directory !FP on the hard disc. Copy the contents of this directory into the new directory. SET Milkman$Dir WimpSlot -min 160k SET MM$DT SET MM$PROGS IconSprites .!Sprites Run .!RunImage  G%=-2 S%=0 (Z%=0 2Ț"MMPROCS" 7*DIR &.!MILKMAN LIBRARY.MILKLOGO"   Dsprite2,, pwwwwwwwwwwwwwwww@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dt@Dtwwwwwwwwwwwwwwww!milkman,, wwwwwwwwwwwwwwwwww"!"!"!!"!sm!milkman ,, ~pwwww :RISC-OS Milkman: FLOPPY USERS: Format a new blank disc and create the directory !Milkman Use the procedures as outlined in your manual. Copy the contents of this directory into the new directory on your new disc then press the function key 12 For single drive users enter COPY :0.$.Milkman.* :0.$.!Milkman.* PQ and follow the instructions on the screen, your destination disc being the newly formatted disc. Then place your working disc in the drive and enter COPY :0.$.* :0.!Milkman.* RQP the destination disc being the newly formatted disc. For twin drive users, place your newly formatted disc in drive 1 and copy the contents of this directory to :1.!Milkman Place your working Milkman disc in drive 0 and the newly formatted disc in drive 0 and copy everything to :1.!Milkman HARD DISC USERS: Create a directory !Milkman on the hard disc. Copy the contents of this directory into the new directory. DIXON & DIXON Farming Programs: Farmcash An accounts program specifically for farmers. With simple entry of transactions, stock control, audit trail, cash flow, enterprises. Data can be passed to Fieldfile and Farmplanner. Fieldfile A data base for fields enabling complete maintainance of fields and the monitoring of crop performances with commodity control. Can be linked with Farmcash and Farmplanner. Farmplanner For complete business planning up to three years ahead. Instant recalculations based on changing circumstances. Budgets, Gross margins, capital, labour Can be linked with Farmcash and Fieldfile. Milkman A complete program for profesional milk roundsmen. Features include standing orders and variations. Roundsbook and daily loads, individual pricing, Sorting and printing on delivery or collection Detailed or summary receipts with personal messages and display of promotional stock. Weave Design Programs The Weave Design Programs link to the Harris NC LOOM. In cloth design you find the ideal application of the principles of CAD/CAM. The production of a textile involves the selection and control of thousands of yarns to produce a fabric of particular appearance, strength and 'feel'. The program can analyse the structure of a cloth and calculate how the loom should be set up to produce it. The plans can be edited or entered conventionally and communicated to the loom. Colour pictures of cloth simulation at various scales can be viewed and printed out along with documentation. Weave sampling can be monitored and designs recorded by the system. The textile designer and student are given full rein to develop their ideas with ease through Archimedes graphics. Operates unchanged under RISC OS; available from HARRIS LOOMS division of Emmerich (Berlon) Ltd, Wotton Road, Ashford, Kent TN23 2JY. Tel: (0233) 622684 Fax: (0233) 45801 Mbx: LNK 94012612. >!Run ! Run file for Wimpy Invaders  (C)1988 GEM Electronics ( code &2090 2)"LOAD $.!WimpyInv.!RunImage "+~code 3!(code+&DA0)=&EA00002E 4?(code+&1FBA)="Q" 5?(code+&1FBB)="U" 6?(code+&1FBC)="I" 7?(code+&1FBD)="T" 8?(code+&1FBE)="!" < code+&7E0 sm!wimpyinv ,  Oe̙Oe̜ !wimpyinv, wwwwwwwwwwwwwwwwwwww{wwwwwwwwwxwwww{ww{ww{xwTvww뾈xwTvxwTvw̌wwTv̈xwGTfww̈wwwwwww{wwwwwzwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww{wwwwwwwwwwwwwwwTvwwwwwwwwwwwwwwwTvwwwwww Desktop Games Unfortunately "Desktop Games" will not work under RISC OS as it relies on the original, Arthur 1.2 Desktop. We are currently considering writing an enhanced, RISC OS version, which will be available at a discount to existing owners. As a consolation, however, the hidden game - Wimpy Invaders - will not only work but will also return you to the RISC OS desktop! To install Wimpy Invaders, format a new clean disc, and drag the !WimpyInv icon onto it. Now type: *LOAD $.Desktop.Sprites.PegSprites 9000 from your Desktop Games disc *SAVE $.!WimpyInv.!RunImage 9000 +2090 from the Support disc The game should now be installed. Double click on the "!WimpyInv" icon to run the game.GEM ELECTRONICS Word Up Word Down A new concept in word games, Word Up Word Down has game play similar to that other famous word game, but is played on a 3-dimensional board game, where letter tiles can be stacked on top of each other, as well as in the familiar crossword fashion. To add another strategy element to the game, the game board contains base squares of different strengths - if the stack of letters is greater than the strength of the base square they are on, the stack will collapse. The program also features digitised sound and speech, a 33000+ word dictionary, 1 to 6 players with computer play, rotating 3-dimensional board plus many user-definable options. There is also a hidden game! Word Up Word Down functions under RISC OS without modification, both by means of auto-boot and from the Desktop. Star Trader A strategic space adventure of epic proportions. It is your mission to search the universe for the nine segments of a deactivation code to save your star system. These segments are scattered on planets throughout the universe, with your objective being to trade between neighbouring star systems in order to fund your mission, whilst still being wary of the enemy convoys frequenting certain areas of the universe. There are 800 unique planets to search, spanning 112 star systems. The program also features digitised speech and sound, 20 different types of spacecraft, real-time combat and docking sequences and realistic trading with market fluctuations. Star Trader is NOT for the arcade button-blasting freak. Early versions of Star Trader will occasionally produce an error during execution under RISC OS on a 1Mb machine. DeskTop Games Current versions of DeskTop Games will not operate under RISC OS, although a RISC OS version is being considered. Directory Desk_Games contains instructions for extracting the 'hidden game' from your original DeskTop Games disc. Word Up Word Down and Star Trader retail for 17.95 inclusive. For further information please write to: GEM Electronics, 17, Tandragee Road, Portadown, Craigavon, United Kingdom. BT62 3BQINTELLIGENT INTERFACES EXPANSION CARDS The Intelligent Interfaces range of IEEE488 Interface, 16 Bit Parallel I/O, Dual RS423 Serial and 12 Bit Analogue I/O Expansion Cards for the Archimedes Computer System can be used with either the Arthur 1.2 or RISC OS Operating Systems. No modifications or upgrades are required. IEEE488 INTERFACE An Archimedes Computer System fitted with an IEEE488 Interface Expansion Card can communicate with up to 14 test and measurement instruments eg DVM's (digital voltmeters), plotters, digital oscilloscopes, spectrum analysers, function generators, counters, logic analysers, programmable power supplies etc. Areas of application in test and measurement include industrial and academic research and development laboratories. ATE (automatic test equipment) systems, control systems, production test systems, data exchange with Hewlett Packard Computers, connecting peripherals eg plotters and printers. The combination of Acorn 32-bit RISC Technology and Intelligent Interfaces hardware and software design results in an extremely fast data transfer rate (around 250 Kbyte/s). The computer can be configured as system controller or as a simple talker/listener. As the system controller the computer can send REN (remote enable)and IFC (interface clear) and then operate as the controller in charge. It can then address itself and other devices to talk and listen and input and output data. All addressed commands eg GTL (Go To Local) and all universal commands eg LLO (Local Lockout) can be sent. The computer can conduct both serial and parallel polls and pass control to another device. As a talker/listener the computer can, when addressed by the controller in charge, input and output data. It can specify the serial poll STB (status byte) and RQS (request service) from the controller in charge by sending SRQ (service request). The computer can take part in a serial poll and be remotely configured to take part in a parallel poll. It can become controller in charge if control is passed to it by the controller in charge. Software in ROM on the Expansion Card extends the operating system to enable IEEE488 interface operation and presents a simple low level software interface for assembler programmers. For those programming in BASIC an ultra high level software interface is provided by a library of BBC BASIC Procedures and Functions supplied on disc. Libraries of procedures for FORTRAN 77, ISO Pascal and ANSI C are available separately. 16 BIT PARALLEL I/O The 16 Bit Parallel I/O Expansion Card provides two separate 16 bit input/output ports. Each port can be configured as either one 16 bit input or output port with two handshake lines or as two separate 8 bit input or output ports each with two handshake lines. All the data and handshake lines are fully buffered. Other facilities include four 16 bit counter/timers and two 8 bit shift registers. A relocatable module extends the operating system to enable data input and output and presents a simple low level software interface for assembler programmers. To simplify the use of the Expansion Card from BASIC, a library of procedures and functions is supplied on disc. A similar library is supplied to enable the use of the Expansion Card from FORTRAN 77. DUAL RS423 SERIAL INTERFACE The Dual RS423 Serial Interface Expansion Card provides two additional RS423 serial interfaces for communicating with RS423 or RS232 devices eg printers, plotters, instruments, etc. Each interface has independently programmable transmit and receive baud rates from 50 to 38400 baud and independently programmable data formats (5,6,7 or 8 data bits plus parity - odd, even, no or force parity - 1, 1.5 or two stop bits). The two standard 9-pin D type connectors used have the same pin assignments as the built-in RS423 Serial Interface of the computer. Software in ROM on the Expansion Card extends the operating system to enable the use of the additional RS423 serial interfaces. 12 BIT ANALOGUE I/O In development INTELLIGENT INTERFACES LTD 43b WOOD STREET STRATFORD-UPON-AVON WARWICKSHIRE CV37 6JQ TEL: 0789 415876 FAX: 0789 299600 TELEX: 312242 MIDTLX G Index RISC OS directory names are limited to a maximum of 10 characters; this file gives the full company name for each of the contributors to the content of this support disc. Directory name Company Name Abacus Abacus Training Limited Ace Ace Computing Acorn Acorn Computers Limited / Acornsoft Avp AVP Computing CamMicro Cambridge Micro Systems Limited Clares Clares Micro Supplies Limited Colton Colton Software Dabs_Press Dabs Press DixonDixon Dixon and Dixon Emmerich Emmerich (Berlon) Ltd Gem_Elect GEM Electronics II_Ltd Intelligent Interfaces Limited Inst_Ophth Institute of Ophthalmologists Lendac_DS Lendac Data Systems Limited Lingenuity Lingenuity (Lindis International Limited) Magenta Magenta Research Limited Maze Maze Technology Meadow Meadow Computers Minerva Minerva Systems Limited Mitre Mitre Software Limited Oak_PDT Oak Professional Software Limited Silicon Silicon Vision Limited Watford Watford Electronics Limited Using 3DIGIT under RISCOS No changes are needed to run 3DIGIT under RISCOS. 3DIGIT may be run by pressing SHIFT/BREAK, or selecting the !BOOT or 3DIGIT programs using the Filer. You may either permanently reconfigure the computer as described in the 3DIGIT instruction manual,or use the task manager to allocate a minimum of: 80K screen memory (or 160K for multi-sync mode 20 reconstructions). 48K system sprites. Remember to reserve some extra sprite space for 3D animation. 3DIGIT 3Dshape files appear as Data in the Filer display. 3D reconstruction screens appear as Sprites. Using DIGIT under RISCOS No changes are needed to run DIGIT under RISCOS. DIGIT may be run by pressing SHIFT/BREAK, or selecting the !BOOT or DIGIT programs using the Filer. You may either permanently reconfigure the computer as described in the DIGIT instruction manual,or use the task manager to allocate a minimum of: 80K screen memory (or 160K for multi-sync mode 20 video pictures). 48K system sprites. DIGIT shape or data files appear as Data in the Filer display. Video screens appear as Sprites. Using DISMAP under RISCOS No changes are needed to run DISMAP under RISCOS. DISMAP may be run by pressing SHIFT/BREAK, or selecting the !BOOT or MENU programs using the Filer. You may either permanently reconfigure the computer as described in the DISMAP instruction manual,or use the task manager to allocate a minimum of: 80K screen memory. 48K system sprites. DISMAP data files appear as Data in the Filer display. DISMAP screens appear as Sprites. Using DISTIT under RISCOS No changes are needed to run DISTIT under RISCOS. DISTIT may be run by pressing SHIFT/BREAK, or selecting the !BOOT or MENU programs using the Filer. You may either permanently reconfigure the computer as described in the DISTIT instruction manual,or use the task manager to allocate a minimum of: 80K screen memory. 48K system sprites. DISTIT data files appear as Data in the Filer display. Using GRAPHDATA under RISCOS No changes are needed to run GRAPHDATA under RISCOS. GRAPHDATA may be run by pressing SHIFT/BREAK, or selecting the !BOOT or MENU programs using the Filer. You may either permanently reconfigure the computer as described in the GRAPHDATA instruction manual,or use the task manager to allocate a minimum of: 80K screen memory. 48K system sprites. GRAPHDATA data files appear as Data in the Filer display. GRAPHDATA screens appear as Sprites. Image Analysis Software from the Institute of Ophthalmology The Institute provides a number of software packages for digitisation, measurement and display from images: DIGIT is used to digitise and measure objects traced on a digitiser tablet or recorded in video with the Watford Video Digitiser. A full range of measurements is provided e.g. counts, linear distances, and area, perimeter, line length, maximum, minimum and mean Feret (caliper) diameters, and shape factors of irregular objects. Objects are recorded as files which may be edited, displayed, zoomed and printed. Measurements may be printed, saved, edited, and displayed as histograms with mean and standard deviation. DIGIT disc, manual and connecting lead: 150 (no VAT). 3DIGIT provides 3D reconstruction of objects traced with DIGIT, e.g. from microscope sections or map contours, with section alignment. The reconstruction may be rotated around the x,y,z axes with control of magnification, position and perspective, and depth shading or red/green stereo display. Reconstructions may be printed, or edited with a digitiser art program. Measurements of surface area, volume and volume density are made. 3DIGIT disc and manual: 50 (no VAT). DISTIT is used to quantify 2 dimensional arrays of objects recorded with DIGIT (e.g. cells or particles in microscope sections) to show whether they are regularly or randomly arrayed. DISTIT disc and manual: 50 (no VAT). DISMAP draws contour maps of the 2 dimensional distribution of objects recorded with DIGIT, e.g. cells or particles across sections or cell sheets. A digitiser art program is used to edit the maps. DISMAP disc and manual: 50 (no VAT). GRAPHDATA is a general purpose package for rapid recording, reading, display and editing of graphs using the digitiser tablet. GRAPHDATA disc and manual: 30 (no VAT). Institute of Ophthalmology, Judd Street, London, WC1H 9QS. Tel.01-387 9621 extn. 224 (Dr B.P.Hayes). PlutArch The PlutArch podule from Lendac Data Systems connects an Archimedes to a high-resolution Pluto graphics board. PlutArch combines the power of an Archimedes with the broadcast-quality graphics of a Pluto board. PlutArch works with Pluto 2 and Pluto 2i boards. Pluto boards have a resolution of 768H x 576V, 256 colours on-screen from a palette of 16.7 million, a real-time video digitising input, hardware zoom and pan, and up to 1 MByte of frame buffer memory. The PlutArch podule is connected to Pluto through an 8-bit parallel interface and contains an onboard module ROM which takes care of all the details of controlling Pluto. The PlutArch module also contains extensions to the Pluto command set which give the user anti-aliased fonts, and fast loading and saving of screens and sprites. PlutArch comes with BASIC, C and ARM assembler libraries. PlutArch is available from: Lendac Data Systems Ltd, Unit 31, IDA Enterprise Centre, Pearse St., Dublin 2, IRELAND Phone: 0001 710796 Lingenuity Lingenuity is the product division of Lindis International Limited. We produce a range of software and hardware products for Archimedes computer systems. For further information, please contact us at: Wood Farm Linstead Magna Halesworth Suffolk IP19 0DU Tel: 098 685 476 *!Presenter| > !Presenter.!Boot IconSprites .!Sprites | > $.!Presenter.!run WimpSlot -min 128k -max 192k IconSprites .!Sprites SET Presenter$Resources $.Resources.Presenter SET Presenter$Data $.Graphs SET Presenter$Screens $.Artisan RUN $.Graphs.Presenter sm!presenter, ww w w w w w{zw wwwwwwwww!presenter, ww wpw ww wpw w wp{ w wpz ww wpw wwwwwwwwwwwwwwwwwwpw wwUUUUUUUUUU wwwwwwwwwwwwwwwww@ Using Presenter under RISC OS The contents of this directory can be used to create a version of Presenter which can be executed from the RISC OS Desktop. 1. Floppy disc users a. Format a new floppy disc and make a backup copy of your current Presenter disc. Name the new disc NewPresent. b. Copy the !Boot file and the !Presenter application from the Support disc to the root directory of disc NewPresent. To use Presenter from the Desktop, insert disc NewPresent in drive 0 or drive 1, click on the corresponding disc drive icon and, when the directory viewer appears, double click on the !Presenter icon. You may also auto-boot disc NewPresent provided that it is loaded in drive 0. 2. Hard disc users a. If you have not already installed Presenter onto your hard disc, do so now, using the instructions supplied with the original package. b. Copy the !Presenter application from the Support disc to the desired location in the hard disc directory hierarchy. To use Presenter from the Desktop, open the appropriate hard disc directory viewer and double click on the !Presenter icon. Magenta Research produced the first commercial communications package for the Archimedes: U_Connect. U_Connect II will be released in a RISC-OS compatible form, after considerable re-design of the user interface, to meet the requirements of, and take advantage of, the new multi-tasking WIMP environment. We view RISC-OS as the best thing to happen in Acorn since sliced Hovis, and we are considering a variety of new applications for the Archimedes, under the general category of system maintenance and productivity tools. First will be a Back-Up Utility, especially important for Hard-Disk and Network users, supporting file compression, and flexible specification options. Another product is a Telephone Book, with all the normal features of an address book database, plus dialling the number via a suitable modem connected to the RS423 port. We are also hoping to produce several programmers aids, including an interactive Help system for C and Assembler programmers. Magenta is always interested to here from anyone who has written software for the Archimedes - especially WIMP based, using assembler or 'C'. Magenta Research Ltd AMP House Dingwall Road CROYDON CR0 9XA Tel: 01-680-7179 | > !U_Connect.!Run | *unset Con$Flag Set UC$Path Set UF$Path .Data WimpSlot -min 250K -max 250K Run ".ConStart" !u_connect, wwwwwwwwwwww wwww wwwwww wwwwww wwwwwsm!u_connect, xwwwxwwwxwwxxw{w{wwwwxwwwwwU_Connect 1.02 will function under RISC-OS, with the following restrictions: * Multi-tasking is not available when running U_Connect. * DCD & DSR status is not seen correctly by the software - you may need to alter your modem driver(s), or go Online manually. * ALT-key combinations no longer function. * RS423Fix module is NOT required to be loaded. To 'see' U_Connect as a RISC-OS application, take these steps: * Rename your U_Connect Resources directory to '!U_Connect'. * Create a subdirectory !U_Connect.Data and move all the 'UserData' files (ie .*) to it - easiest from the DeskTop. * From the Desktop, the !U_Connect directory should appear as a large blue capital U. If you have problems running the program, check that the contents of the !Run file match your setup. * If you get an 'Out of Memory' error increase the 'wimpslot' allocation in the !Run file. Version 2 of U_Connect will be 100% RISC-OS compatible, and significantly re-designed. U_Connect 1.02 will function under RISC-OS, with the following restrictions: * Multi-tasking is not available when running U_Connect. * DCD & DSR status is not seen correctly by the software - you may need to alter your modem driver(s), or go Online manually. * ALT-key combinations no longer function. * RS423Fix module is NOT required to be loaded. To 'see' U_Connect as a RISC-OS application, take these steps: * Rename your U_Connect Resources directory to '!U_Connect'. * Create a subdirectory !U_Connect.Data and move all the 'UserData' files (ie .*) to it - easiest from the DeskTop. * From the Desktop, the !U_Connect directory should appear as a large blue capital U. If you have problems running the program, check that the contents of the !Run file match your setup. * If you get an 'Out of Memory' error increase the 'wimpslot' allocation in the !Run file. Version 2 of U_Connect will be 100% RISC-OS compatible, and significantly re-designed. MAZE TECHNOLOGY MAZE Technology's first product for the Archimedes is the SideFAX-II Desktop utility Set. This set is an enchanced version of that supplied with the Sideset(D) Task-switching system, which is currently available for the Master 128 and Model-B BBC microcomputers. The utilities have, however, been re-designed to complement and/or replace those desktop utilities supplied as standard with the Archimedes and have had new facilites added to take advantage of the extra power of the Archimedes. SideFAX-II provides ;- - A 9999 yr Calendar/Diary - An Address book - A notepad-editor - A user-extendible context-sensitive HELP-book. - A full-function scientific calculator with HEX operation - Additional User Data-books Each of these utilities is available from the RISC OS desktop and Pops-up with an easy-to-use interface, permitting the mouse and/or the keyboard to be used. The Diary, Address-book, Notepad and Help-book are in fact special forms of 'Data-books': These are free-format, general purpose, card-index type databases; the 'User Data-book' facility enables the user to have any number of these databases accessible from the RISC OS desktop. Extensive facilities such as searching, data-transfer, file-locking, and password protection are available for use on these 'Data-books'. Powerful printing facilites are also included, so that, for example, information may be printed out in a variety of user-determined formats, such as ; Filofax type pages, telephone lists, address labels, etc. SideFAX-II can also be used for such things as mailing-lists, pupil records, computerised subject guides and application specific pop-up Help files etc., without the need for programming skills. for Archimedies 305 and above, available 2nd Quarter 1989, Price - TBA MAZE Technology, 20 Woodlands Rd, Walthamstow. E17 3LE Telephone : 01-520-9753 MEADOW COMPUTERS 11, London Street, Whitchurch, Hants, RG28 7LH Tel: (0256) 892008 Small Business Systems 'MICRO-TRADER' Fully integrated professional accounts program consisting of Sales Purchase and Nominal ledgers. Prints Invoices and Statements. Includes facilities for audit trail, trial balance, profit & loss account and balance sheet. Designed by a businessman to meet the needs of the businessman, the program uses the advanced RISC OS facilities to provide a fast and easy to use program that covers all the day to day requirements of your business. This large capacity complete accounts program is only 200 + VAT. 'MICRO-STOCK' Stock control program that can be run stand alone or integrated with 'Micro-Trader' accounts. Stores prices, descriptions and and quantities held on up to 4000 stock items each accessed by a user defined stock code. The Archimedes' power ensures astonishingly fast access and searching times. Prints Invoices and Credit Notes, and povides detailed reports on stock holdings and valuation. 75 + VAT. 'MICRO-MAILER' Mail-Merge program allows access to the 'Micro-Trader' ledgers to print label runs and circular letters. Includes a user defined database for storing additional names and addresses. Frequently used lists of names and addresses can be stored on disc for future use. 30 + VAT. EXTENDED PAYROLL Micro-Aid Extended Payroll is fully integrated with 'Micro-Trader' accounts. All tax and N.I. codes (except M.O.D personnel) are covered for up to 400 employees. prints payslips from the payroll run and weekly/monthly summaries. Cash and cheque payments are updated directly to the 'Micro-Trader' ledgers. 49.95 + VAT. Phone or write for a FREE FACT SHEET with full details of these programs MEADOW COMPUTERS 11, London Street, Whitchurch, Hants, RG28 7LH Tel: (0256) 892008 Small Business Systems 'MICRO-TRADER' 'MICRO-STOCK' 'MICRO-MAILER' The 'Micro-Trader' range of products requires some modification to run correctly under RISC OS. Due to compatibility problems with the Mode 7 screen, corruption will occur with some screens, but the program will perform correctly. Limited use of the program is possible, but it is not possible to create an Invoice in the Sales, Purchase or Stock ledgers. In order to overcome the problems, a new range of programs is being provided which not only overcome the problems but also offer substan- tially improved facilities. This upgrade is available to all existing users free of charge. When you wish to upgrade your program, please return your latest Main Program Disc and Data Disc to the address above and they will be upgraded to the latest standard. It is recommended that the upgrade should be carried out as close as possible to the RISC OS upgrade. Please contact Meadow Computers for further information on the programs and upgrades. 6 > IN-Lib - Invoicing library - see PROCprinthelp printhelp ( cls1 2" PROCEDURES" F0'" Name Description" ZK'" vars Sets up de%,CALC,calc$,rmswi%,mode%,scrh% & back%" d@" define Sets up character definitions for boxes" nE" h(INT) Displays header. INT gives which sub-heading" xJ" menu(INT) Displays option menu. INT gives no. of lines down" (" start of menu" H" mcheck(STR,INT) Checks ext$ for STR. Returns modified STR & INT" ?" and INT if that option not available" =" w Sets up scrw%, wid%, colours 128 & 7" " b Bleeps" &" p(STR) Does a *(STR)" @" graph Displays no.of records available & used" " graph1 " " graph2 " D" cls Clears screen leaving heading & bottom line" 9" calc Carries out calculation of calc$" @" ch(STR) Chains program STR in correct directory" 8" help Displays help strings on screen" 2" pl(STR) Prints STR on bottom line" :" chmode Allows user to change screen mode" >" iddir Sets Invoicing DATA directory current" ,'" Functions" @0'" Name Description" T:'" ipdir Returns prefix for program files" ^3" default is &.INVOICING." h6" iddir Returns prefix for data files" r8" default is &.INVOICING.DATA." |4" locate(STR) Checks for file STR on disc" 2" ArfVar(STR) Reads Arthur variable STR" F" ofile Returns name of opened file or no file string" G" date(INT) If INT=0 then date returned in **/**/** format" E" if INT=1 then date returned as dd mmm yyyy" 1" case(STR) Forces STR to upper case" <" spc_strip(STR) Removes all leading spaces from STR" ," e(STR,INT,STR) Asks for user input" ''':genhelp ''"Press any key";:A%=:   vars ș &80301 sd% ade%=0:CALC=0:calc$="":rmswi%=900:f$="":mode%=12:scrh%=31:back%=136:find$="":pr$="#1":proff:  define !23,136,0,24,56,127,56,24,0,0 &!23,137,0,24,28,254,28,24,0,0 0#23,138,24,24,24,24,126,60,24,0 :#23,139,0,24,60,126,24,24,24,24 D 23,161,0,0,0,24,24,24,24,24 N23,162,0,0,0,31,0,0,0,0 X 23,163,0,0,0,31,24,24,24,24 b23,164,0,0,0,248,0,0,0,0 l!23,165,0,0,0,248,24,24,24,24 v23,166,0,0,0,255,0,0,0,0 !23,167,0,0,0,255,24,24,24,24 23,168,24,24,24,24,0,0,0,0 #23,169,24,24,24,24,24,24,24,24 23,170,24,24,24,31,0,0,0,0 #23,171,24,24,24,31,24,24,24,24  23,172,24,24,24,248,0,0,0,0 $23,173,24,24,24,248,24,24,24,24  23,174,24,24,24,255,0,0,0,0 $23,175,24,24,24,255,24,24,24,24 $23,228,60,96,48,60,102,102,60,0 '23,255,0,126,126,126,126,126,126,0   ch(a$)  a$=pdir+a$ a$ *ݤipdir:T$ 48T$=ArfVar("Delta$IPPrefix"):T$="":T$="&.INVOICING" >T$,1)<>"."T$=T$+"." H=T$ \ݤiddir:T$ f=T$=ArfVar("Delta$IDPrefix"):T$="":T$="&.INVOICING.DATA" pT$,1)<>"."T$=T$+"." z=T$ ݤsddir:T$ 9T$=ArfVar("Delta$SDPrefix"):T$="":T$="&.SALES.DATA" T$,1)<>"."T$=T$+"." =T$ ݤmddir:T$ >T$=ArfVar("Delta$MDPrefix"):T$="":T$="&.STOCKFILES.DATA" T$,1)<>"."T$=T$+"." =T$ iddir:"dir "+iddir): sddir:"dir "+sddir): mddir:"dir "+mddir): +ssetdir(T$):T$=""T$="*":sddir:T$ $+msetdir(T$):T$=""T$="*":mddir:T$ .+isetdir(T$):T$=""T$="*":iddir:T$ 8 Lݤlocate(f$) Vc% `c%=(f$):c%>0#c%:= j= ~ݤArfVar(A$) sd%,L%:sd%-1  =292:=""::,$ ș&23,A$,sd%,200,0,3,,L%  sd%?L%=13  =$sd%  h(z%):w:cls:h2  pl(""): ;z%<99userdate(0):back%:0:28*wid%-(A$/2),3);date$  a$="" centre(a$) /vdu20:0,3)(16*wid%)9*wid%-(a$/2),3)a$ ( <menu(I%) =menu2(I%) > menu3 ? @ Amenu2(I%) BI%=2 Fp("Select Option ")::26 H3dbox2(19,24,40,16,255) IGmenu4(I%):I%=2:p("Select Option ")::26:3dbox2(4,24,40,16,255) PJ%=I%:menu$="":A$ Z A$<>64 dB$=A$,2):A$=A$:C%=A$ nB$,"?")>0mcheck(B$,C%) xB$=A$,2):A$="Esc":C%=27  C%<>323*wid%,I%)A$"."; 6*wid%,I%)B$; menu$=menu$+C% O%=-C%O%=I% I%=I%+1:C%=42    menu3  31,0,O% #("SD10 "+(1+O%-J%)+","+menu$)   'ݤofile:A$="No File Open":S%=0:=A$  *SDstat ="File="+$sd% *mcheck( B$, C%):B$=B$,B$,"?")-1) &ext$,C%)=0:C%=32:B$=B$+" (N/A)" " , 6Ow:26,10,8:scrw%=:28,0,scrh%-1,scrw%,3:wid%=1:scrw%>44wid%=2:128:7: Jb T *SDbeep ^ h rp(A$):SD03(A$) |   graph3 *SD13 1,transfl  back% )scrw%-20,scrh%-7)" Transactions " 128 (scrw%-18,scrh%-6)"Free :";recs%-R% "scrw%-18,scrh%-5)"Used :";R% 4R%>0(recs%-R%)/R%*100<5scrw%-19,scrh%-6)"";  Ecls:vdu20:26:0:ȓȐ0,80,1279,25*32-4:28,0,scrh%-3,scrw%,5: cls1:128:7:26,12: $calc:SD08("Eval: ",200,calc$) &&a$="0":calc$=$sd%:calc$<>""calc2 0:w:cls:3dbox2(1,28,78,24,8):5,6);:*SDdh calc$,wid% :.5,10);:$sd%="= "+a$,16):*SDdh $sd%,wid% D SD06("") N$G%=G%&DF:G%=80cls:calc$"="a$ X3:w:cls:O%=-"?":  calc2  .=6::a$=calc$:CALC=a$:: :,$ CALC=calc$:a$=CALC:  graph /m%(0)=-:ș rmswi%,10 I%,,T%:m%(1)=T%-I% $m%(2)=-:ș rmswi%,10 ,,m%(3) $b%=0:I%=02:b% H R pl(a$) \ p(a$) f back%:7 p ݤe(A$,len%,B$) SD08(A$,len%,B$)  =$sd%   chmode *mode%=e("New mode (9,12) ",2,mode%) !setmode(mode%):13,8:scrw%=   disp 26::back%:7 0,Z%-1)(scrw%+1) $81,Z%-1)"Accounts used :";R%" (";recs%-R%-1" Left)" .graph2(24,scrh%-Z%+1,1) 8*SDwindow ,,,Z% Bpl("Select option") L: `findac(a$):pl("") j found=: t;a$<>"":$sd%=a$: D%=0:pr$=case(e("Account ",20,pr$)) ~pr$="END OF BATCH"G%=255 xG%=27:("SDgrec 1") $sd%>R% $(sd%+1)>R% mess("Account not open"):A%=0 ?sd%="#":A%=facnum A%=facname  A%=1 G%=27 G%=255 A%=1found=  ݤfacname *SDselectkey Adr0 find$=pr$:*SDdup D%,pr$ G%D%=0:b:=0 text:*SDgfield acno al$=$sd% *SD33 N% 8 G%&80 mess("Account has been deleted"):=0::=1 ݤfacnum $sd%=case($(sd%+1)) Bal$=$sd%,1):al$<"A"al$>"Z" al$="":ac%=$sd% ac%=$(sd%+1) (,ac%=0mess("Invalid account number"):=0 2*SDlocate ac% <text:*SDgfield acno FKal$<>""al$<>?sd% ("SDview 18,7"):mess("Invalid account letter"):=0 P al$=$sd% Z *SD33 N% d8 G%&80 mess("Account has been deleted"):=0::=1 xmess(a$):pl(a$) b:*SD05 SD03("")  7ݤstring(temp):@%:@%=&1020200:temp=temp/100:=temp ݤrev(a$):b$,i% 'b$="":i%=14:b$=a$,i%,1)+b$::=b$ valid flag%= *SD13 &36 G%1:flag%=  flag% G%=G%1:*SD14 G%,&36  *SD43 " 6 fix @ *SD13 &36 J G%=G%1 T*SD14 G%,&36 ^ *SD43 h |ok(a$):*SD13 &36,a$ G%=G%254:*SD14 G%,&36,a$  0ݤrd:X%,A%:X%=252:A%=128:=&FF (&FFF4/256) ptest:G%=0 ȕ pr=0 G%<>27 *mess("Reset Printer, Press ") G%=19flushit & SD03("") 0 :G%=27:*FX21,3 D X flushit b *FX21,3 l*FX5 v pron:28,78,30,78,30,2  proff:3,26,31,78,30  pcode(P%) 2 P%=11,18,1,27,1,69 P%=21,27,1,70 P%=3 1,27,1,70,1,15 P%=41,27,1,70,1,18 P%=5 1,27,1,45,1,1 P%=61,27,1,45,1,0 P%=7 1,27,1,87,1,1 P%=8 1,27,1,87,1,0 * > getp H f%,i% Rf%=(":0.SM-pval") \ i%=119 f#f%,P$(i%) p z#f%  zzz *SDclose ? *SDopen Acfile ok("Acfile") *SDopen Invoice $ok("Invoice") .*SDopen Transfl 8ok("Transfl") B*SDclose ? L `3graph2(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) j0:*SDfile acfile ,*SDlocate t% 6 J throw T 1,12 ^lc%=0:line%=0: r getnum(pr$,len%,def$,real) |@% pr$=pr$+" " @%=&102020A  SD08(pr$,len%,def$) $sd%=spc_strip($sd%) ) ?sd%="-" mess("Negative number!")  L%=$sd% G%=27(L%>0?sd%<>"-")  G%=27 $sd%=($sd%) Rreal $sd%=string(.5+ival($sd%)):C%=$sd%,"."):$sd%=$sd%,C%-1)+$sd%,C%+1)  userdate(z%) Z$,X$,M%,M$,D%,D$ 'z%=1Z$=$,5,11)date$=date(Q%): &X$=Z$,4,3) 0 Z$,1)="0" Z$=Z$,10) :7M%="***JanFebMarAprMayJunJulAugSepOctNovDec",X$)/3 DM%<10M$="0"+M% M$=M% N"D%=Z$:D%<10D$="0"+D%D$=D% Xdate$=D$+"/"+M$+"/"+Z$,2) b"SD08("Enter date : ",8,date$) ldate$=$sd% vQ%=chdate(date$)  @ݤchdate(a$):d%=a$:m%=a$,4,2):y%=a$,2):*SDdays d%,m%,y% =G% ݤdate(F%):date$ date$=strdate(F%) m%=3*date$,4,2) R=date$,2)+" "+"**JanFebMarAprMayJunJulAugSepOctNovDec",m%,3)+" 19"+date$,2) ݤstrdate(a%) *SDdate a%  =$sd%  d2(z%) *SDdate z%  day%=$sd% *mon%=$sd%,4,2) 4year%=$sd%,2) > R vars1 \recs%=0:lastF%=0:disctot=0 ffix%=:vaton%=:oncard%= p7calc$="":CALC=0:com$(5),vat%(5,2),top$(3),di$(3,3) z2F%=(iddir+"I-Parms"):I%=05:#F%,com$(I%): I%=03:#F%,top$(I%):  pl%=z I%=04:#F%,a$: 'I%=05:#F%,a$:a$=""vat%(I%,0)=-1 6:I%=05:#F%,a$:vat%(I%,0)=0:vat%(I%,0)=100*a$ :vx%=z:vy%=z I%=18:#F%,a$: #F%,d1$,d2$ 'I%=03:J%=03:#F%,di$(I%,J%):: cols%=z:col$(cols%) I%=0cols%:#F%,col$(I%): I%=cols%6:lin%=z: #F%,pr$:st%=z:tel%=z #F%:ed%=:raise%=:*fx12,1  *SD24 1  *SD27 $)inv$=$sd%:com$(2)=""G%=0:acadr%=G%: .*SD24 0,acfile 8*SD25 acfile BG%>Z%G%=Z% Lacadr%=G%: V `ݤz:#F%,a$:=a$ H ------------------------------------------------------------------  genhelp <'"General procedures for System DeltaPlus Applications" <"----------------------------------------------------"' "1.General" '"PROCsdreset" G"Behaves as *SDreset but with nicer messages if in >80 col. mode." '"FNnumer(int%)" C"Formats int% into string for numeration (eg 1st,2nd,7th etc)" '"FNzpadt(int%,wid%)" 5"Zeropads ABSint% to wid% chars, returns string" ''"2.Date Handling" '"FNdays(day%,mon%,year%)"  L"Returns 'date number' for given date (No. days since arbitrary point)" <'"PROCdate(date%,RETURN day%,RETURN mon%,RETURN year%)" 4"Converts 'date number' to day, month and year" ('"FNdayw(date%)" 2:"Returns 3 char. day of week for given 'date number'" <'"FNformdate(date%,type%)" F6"Converts 'date number' to string of type type%:" P" Type 1 = 01/01/1980" Z" 2 = 1st Jan 1980" d!" 3 = Tue 1st Jan 1980" n" 4 = Jan 1st 1980" x!" 5 = Tue Jan 1st 1980" " Others are all 01/01/80" '"FNday(date%)" ."Returns day of month from 'date number'" '"FNmonth(date%)" ."Returns month (1-12) from 'date number'" '"FNyear(date%)" +"Returns year (AD) from 'date number'" '"FNtoday" 1"Returns 'date number' read from CMOS clock"   sdreset ș&80301sd%:colours T%,X%,Y%,A%:X%=:Y%= :26,10,8  <79  *SDreset   T%=:ș"OS_Byte",229,1,A%  T%= T%  *SDbeep JSD06("Insert original DeltaPlus disk in drive :0 and press any key ") %G%=27:1:0,"Protection Failure" " SD03("") , 6 @*SDreset E B colours JT% T *SDbeep ^GSD06("OK - Remove disk (replace if necessary) and press any key ") h SD03("") r |ș"OS_Byte",229,A%  X%,Y%);:: +ݤdays(D%,M%,Y%):"SDdays D%,M%,Y%":=G% (date(Z%, D%, M%, Y%):*SDdate Z% #D%=sd%!40:M%=sd%!44:Y%=sd%!48: ݤnumer(T%):T%=T% ;(T%10)<1(T%10)>3((T%100)>9(T%100)<15):=T%+"th"  =T%+"*stndrd",(T%10)*2,2) $ݤzpad(N%,T%)=T%,"0")+ÔN%,T%) 5ݤdayw(Z%)="FriSatSunMonTueWedThu",(Z%7)*3+1,3) &ݤformdate(Z%,T%) 0=0Z%>1E6Y%+=1900 D ȎT% N31:=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,4) X22:=numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) b@3:=dayw(Z%)+" "+numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) l24:=T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4) v@5:=dayw(Z%)+" "+T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4)  0=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,2) "ݤday(Z%):"SDdate Z%":=sd%!40 $ݤmonth(Z%):"SDdate Z%":=sd%!44 ݤyear(Z%):"SDdate Z%" 6Z%<1E6ORsd%!48>100sd%!48<0:=sd%!48:=sd%!48+1900 ݤtoday:?sd%=1:ș7,14,sd% %=days(~sd%?2,~sd%?1,~?sd%)  4setmode(T%) >T1% H7ș "OS_ReadModeVariable",T%,2 ,,T1%:T1%<>31T%=12 R T1%= \ f p T1%= z:<>25:,$  T1% #T%>15T%=12:T%>11T%=9:T%=1   T1%= T%  mode%=T%  30,10,8 T%=12:T1%=  >30  palset  Bvdu20:128:7 L 7:128 V j palset t19,0,16,0,0,0 ~19,1,16,240,0,0 19,2,16,0,240,0 19,3,16,240,240,0 19,4,16,0,0,240 19,5,16,240,0,240 19,6,16,0,240,240 19,7,16,240,240,240 19,8,16,240,240,0 19,9,16,192,192,0 19,10,16,160,160,0 19,11,16,128,128,0 19,12,16,96,96,0 19,13,16,64,64,0 19,14,16,32,32,0  19,15,16,0,0,0  (3dbox(X1,Y1,X2,Y2,C) 2 F <"C>127C<255 F=0:C-=128 F=1 FB=12 P B2=14 Z F 10 13 d" X1,Y2:X1,Y1:&55,X1+B2,Y2-B nX1+B2,Y1+B:&55,X1,Y1 x F 13 10 !X2,Y2:X2,Y1:&55,X2-B2,Y2-B X2-B2,Y1+B:&55,X2,Y1  F 11 12 !X1,Y2:X2,Y2:&55,X1+B2,Y2-B X2-B2,Y2-B:&55,X2,Y2  F 12 11 &X1,Y1:X1+B2,Y1+B:&55,X2-B2,Y1+B X2,Y1:&55,X1,Y1  C<>-1 #C=256vers=9:C=1: C=256:C=8 3C=255vers=9:C=0:7:128: C=255:C=8:0:136  C 3ȓȐX1+B2+2,Y1+B+4,X2-X1-(B2*2+4),Y2-Y1-(B*2+8)   r comm2 |cls:3dbox2(1,28,78,24,8) 2ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% SD06(""):cls:vdu20   commbox 3dbox(0,16,1279,76,256) 28,1,30,78,30  SD08(P$,L%,D$)  commbox *SD08 P$,L%,D$,w  :26  SD03(P$) &X% 0 commbox :*SD03 P$,w D X%=: N26:X%+1,30);: bSD06(P$) l commbox v*SD06 P$,w  26:: SD09(P$) P$="":P$="Sure (Y/N) ? " SD03(P$):::*SD05 #G%<>89 G%<>78G%<>27:*SDbeep G%=89G%=78G%=27  SD03("")  26: 3dbox2(x1,y1,w,h,c) O3dbox((x1*8*2)-16,((31-y1)*8*4)-16,((x1+w)*8*2)+15,((31-(y1-h))*8*4)+15,c) 28,x1,y1,x1+w-1,y1-h+1 c=80:136    colours *vers=9: 4*SDcolour 1,0 >*SDcolour 2,8 H*SDcolour 3,8 J*SDcolour 4,0 R*SDcolour 5,7 \*SDcolour 6,4 f zݤvers:$sd%,a:*SD55  a=("&"+$(sd%+2)): a<10:a=9 =a   report  @%=&907:6,3,4,15::*fx229,1 ( 255)=17:  h(99) %3dbox2(1,28,78,24,8):0:136:30 ::60,22)"Line "; SD06(""):G%<>27-2: A$="Program Terminated" 19*wid%-A$,6);:*SDdh A$ *SDclose ? '  *fx229 *fx4   %filcol:vers>9:*SDcolour 103,8 vers>9:*SDcolour 104,7   h2 3dbox(0,928,574,1023,8) (3dbox2(33,3,46,1,8):26 2ȓȐ528,924,30,30 <$13:574,942:BY-14,-14:81,0,14 F$12:526,942:BY-14,-14:81,0,14 P$10:526,938:BY-14,-14:81,14,0 Z*0:ȓȐ0,880,508,44:ȓȐ576,944,703,79 d,22,948:ș"OS_SpriteOp",256+28,,"dpa",0 n-802,944:ș"OS_SpriteOp",256+28,,"inv",0 x 26:  delta(A$)  0<0  T%:T%=   :T%= T% "ArfVar("Delta$Boot")=A$ )*unset Delta$Boot ,-1:"Cannot load System DeltaPlus module" 6'"This module must be on the disk." @'"Please re-try.": J T:"set Delta$Boot "+A$:"Exec "+ipdir+"!IN-Start":*gos ^ h r *SDbbc |*unset Delta$Boot   comm:I% 28,1,30,78,1  O%=-"*" SD08("*",200,"") $sd%="": .SD03("Press SHIFT"):3dbox2(1,28,78,24,8)  vers>9 (T$:T$=28+1+28+78+5:*SDvdu 3,T$ 28,1,30,78,30 *SD47 $sd%,w 26  &614:ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% 015:SD06("") : Dcls:vdu20: l vݤpr:X%,Y%:G%=27:=0 ,rd>3:Y%=rd-3:2,1,0,1,0,1,0,3:Y%=rd X%=:=0::>750 rd>Y% =X%+:=rd>Y%  evaluation *SD55 *SDupper $sd%,"EVALUATION")=0: !3dbox2(20,23,40,17,8):1 ! 13,1);:*SDdh "WARNING" !40:1,4)"The System DeltaPlus you are using is" ! ," an EVALUATION copy only and has some" !*-" features restricted. This is suitable" !4," for an over-view of this application" !>+" but you MUST install a full version" !H+" (by using the !COPY utility on your" !R-" System DeltaPlus disk) if you wish to" !\'" make proper use of the package." !f !p-" This evaluation version will time-out" !z," after a sensible period has elapsed," !})" which may corrupt your test data." ! SD06("") ! cls: ; > NL-Lib - Nominal Ledger library - see PROCprinthelp  printhelp ( cls1 2" PROCEDURES" < F0'" Name Description" P ZK'" vars Sets up de%,CALC,calc$,rmswi%,mode%,scrh% & back%" d@" define Sets up character definitions for boxes" nE" h(INT) Displays header. INT gives which sub-heading" xJ" menu(INT) Displays option menu. INT gives no. of lines down" (" start of menu" H" mcheck(STR,INT) Checks ext$ for STR. Returns modified STR & INT" ?" and INT if that option not available" =" w Sets up scrw%, wid%, colours 128 & 7" " b Bleeps" &" p(STR) Does a *(STR)" @" graph Displays no.of records available & used" " graph1 " " graph2 " D" cls Clears screen leaving heading & bottom line" 9" calc Carries out calculation of calc$" @" ch(STR) Chains program STR in correct directory" 8" help Displays help strings on screen" 2" pl(STR) Prints STR on bottom line" :" chmode Allows user to change screen mode"  "'" Functions" , 60'" Name Description" @ J3'" pdir Returns drive & directory" T4" locate(STR) Checks for file STR on disc" ^2" ArfVar(STR) Reads Arthur variable STR" hF" ofile Returns name of opened file or no file string" rG" date(INT) If INT=0 then date returned in **/**/** format" |E" if INT=1 then date returned as dd mmm yyyy" 1" case(STR) Forces STR to upper case" <" spc_strip(STR) Removes all leading spaces from STR" ':genhelp ''"Press any key";:A%=:    vars ș &80301 sd% ade%=0:CALC=0:calc$="":rmswi%=900:f$="":mode%=12:scrh%=31:back%=136:find$="":pr$="#1":proff:   define %23,135,24,&66,96,248,96,96,254,0 !23,136,0,24,56,127,56,24,0,0 !23,137,0,24,28,254,28,24,0,0 #23,138,24,24,24,24,126,60,24,0 #23,139,0,24,60,126,24,24,24,24 & 23,161,0,0,0,24,24,24,24,24 023,162,0,0,0,31,0,0,0,0 : 23,163,0,0,0,31,24,24,24,24 D23,164,0,0,0,248,0,0,0,0 N!23,165,0,0,0,248,24,24,24,24 X23,166,0,0,0,255,0,0,0,0 b!23,167,0,0,0,255,24,24,24,24 l23,168,24,24,24,24,0,0,0,0 v#23,169,24,24,24,24,24,24,24,24 23,170,24,24,24,31,0,0,0,0 #23,171,24,24,24,31,24,24,24,24  23,172,24,24,24,248,0,0,0,0 $23,173,24,24,24,248,24,24,24,24  23,174,24,24,24,255,0,0,0,0 $23,175,24,24,24,255,24,24,24,24 $23,228,60,96,48,60,102,102,60,0 '23,255,0,126,126,126,126,126,126,0    ch(a$) a$=npdir+a$ a$   ݤpdir:T$ 1T$=ArfVar("Delta$SLPrefix"):T$="":T$=":0.$"  T$,1)<>"."T$=T$+"." *=T$ 4 >ݤlocate(f$) H C%,T% RNT%=::C%=(f$):#C%:C%>0T%= "Mount <"+f$+">, Press a key...";:G%=: \ T%= f=T% p zݤArfVar(A$) sd%,L%:sd%-1  =292:=""::,$ ș&23,A$,sd%,200,0,3,,L%  sd%?L%=13  =$sd%  h(z%):w:cls1 h2 *PRINTTAB(18*wid%-1,2)SPC(scrw%-POS+1)  Ȏ z%  1:A$="Main menu"  2:A$="Audit Trails"  3:A$="Journal List"  4:A$="Reports"  5:A$="Balance Sheet/P&L" $ 6:A$="Analysis" . 7:A$="Entries" 8 8:A$="Parameters" B 9:A$="" L 10:A$="Processing" V 11,99:A$="Checking System" ` 12:A$="Cash Book" j 13:A$="Balance Sheet" t 14:A$="Profit & Loss" ~ 15:A$="Trial Balance"  16:A$="Integration"  17:A$="Account Masks"  18:A$="Period End"  19:A$="Accounts"  20:A$="Spreadsheet" :A$=ofile  centre(A$) A$="Nominal Ledger" :PRINTTAB(28*wid%-(LENA$/(3-wid%)),0);:*SDdh A$,wid%-1 Az%<99userdate(0):0:back%:36+11*wid%-(date$/2),3);date$    centre(a$) 3vdu20:26:0,3)(16*wid%)8*wid%-(a$/2),3)a$  ( 2menu(I%) <menu2(I%) F menu3 P Z dmenu2(I%) nI%=2 xp("Select Option ")::26 3dbox2(19,24,40,16,255) J%=I%:menu$="":A$  A$<>64 B$=A$,2):A$=A$:C%=A$ B$,"?")>0mcheck(B$,C%) B$=A$,2):A$="Esc":C%=27  C%<>323*wid%,I%)A$"."; 6*wid%,I%)B$; menu$=menu$+C% O%=-C%O%=I% I%=I%+1:C%=42    menu3  31,0,O% "#("SD10 "+(1+O%-J%)+","+menu$) , 6 @'ݤofile:A$="No File Open":S%=0:=A$ J *SDstat T="File="+$sd% ^ h*mcheck( B$, C%):B$=B$,B$,"?")-1) r&ext$,C%)=0:C%=32:B$=B$+" (N/A)" |  Nw:26,10,8:scrw%=:28,0,scrh%-3,scrw%,5:wid%=1:scrw%>44wid%=2:vdu20:  b:*SDbeep   p(A$):SD03(A$)    graph3 *SD13 1,ntrans  128:7 1,3)" Transactions " )136:0:R%>0(L%-R%)/R%*100<5129:7 $2,4)" Free :";L%-R%" ":0:136 2,5)" Used :";R% & 0 :Icls:15:vdu20:26:0:ȓȐ0,80,1279,25*32-4:28,0,scrh%-3,scrw%,5: D Ncls1:vdu20:26,12: X b$calc:SD08("Eval: ",200,calc$) l calc1 v&a$="0":calc$=$sd%:calc$<>""calc2 :w:cls:3dbox2(1,28,78,24,8):5,6);:*SDdh calc$,wid% .5,10);:$sd%="= "+a$,16):*SDdh $sd%,wid%  SD06("") $G%=G%&DF:G%=80cls:calc$"="a$ 3:w:cls:O%=-"?":    calc2  .=6::a$=calc$:CALC=a$:: :,$ CALC=calc$:a$=CALC:   graph /m%(0)=-:ș rmswi%,10 I%,,T%:m%(1)=T%-I%  $m%(2)=-:ș rmswi%,10 ,,m%(3) $b%=0:I%=02:b%# BY 180,0: BY 0,12: BY 0,-24 H 0,I%*2+1 R/ȓ Ȑ 1052,100-32*I%,180*m%(I%)/m%(I%+2),24 \33*wid%-6,I%+28)A$; f p z ݤcase(a$) a$="":=a$ $sd%=a$:*SDupper  =$sd%  ݤspc_strip(a$) $sd%=a$:*SDstrip  =$sd%   pl(a$)  p(a$)  back%:7   ݤe(a$,len%,b$) SD08(a$,len%,b$) $ =$sd% . 8 chmode B L*mode%=e("New mode (9,12) ",2,mode%) V mode%=9 mode%=12 `$setmode(mode%):26,10,8:scrw%= j t ~ disp 26::136:0 =2,10)"Accounts used :";R%-del%" (";L%-R%+del%-1" Left)" graph4(24,21,1) *SDwindow 1,28,78,Z% *SDgfield acno D%=0:*SD38 255 text :vers>9:3dbox2(1,28,78,17,8) 3dbox2(1,28,78,17,0) G%<>12:*SDscroll 18,7 G%=12:*SDview 18,7 :  findac(a$):pl("") *SDwindow  found=: :a$<>""$sd%=a$: D%=0:pr$=case(e("Account ",20,pr$)) (pr$="END OF BATCH"G%=255 2xG%=27:("SDgrec 1") $sd%>R% $(sd%+1)>R% mess("Account not open"):A%=0 ?sd%="#":A%=facnum A%=facname < A%=1 G%=27 G%=255 FA%=1found= P Z d ݤfacname nfind$=pr$:*SDdup D%,pr$ xG%D%=0:b:=0 text:*SDgfield acno al$=$sd% *SD33 N% 8 G%&80 mess("Account has been deleted"):=0::=1  ݤfacnum $sd%=case($(sd%+1)) ?al$=?sd%:al$<"A"al$>"Z" al$="":ac%=$sd% ac%=$(sd%+1) ,ac%=0mess("Invalid account number"):=0 *SDlocate ac% text:*SDgfield acno Kal$<>""al$<>?sd% ("SDview 18,7"):mess("Invalid account letter"):=0 al$=$sd%  *SD33 N% 8 G%&80 mess("Account has been deleted"):=0::=1  "mess(a$):pl(a$) , b:*SD05 6 SD03("") @ J T7ݤstring(temp):@%:@%=&1020200:temp=temp/100:=temp ^ hݤrev(a$):b$,i% r)b$="":i%=1a$:b$=a$,i%,1)+b$::=b$ | valid(a$) flag%= *SD13 &35 :G%=2valid1 A$="Not a Nominal Ledger file!":flag%= G%=G%1:*SD14 G%,&36 *SD43   valid1:*SD13 &36 *G%1A$=a$+" files corrupted.":flag%=   ok(a$):*SD13 &36,a$ G%=G%&FE:*SD14 G%,&36,a$   &0ݤrd:X%,A%:X%=252:A%=128:=&FF (&FFF4/256) 0 :ptest:G%=0 Dȕ pr=0 G%<>27 N*mess("Reset Printer, Press ") XG%=19flushit b SD03("") l vG%=27:*FX21,3   flushit *FX21,3 *FX5   pron:28,78,30,78,30,2 -1 -3:3,26,12   proff:3,26,31,30,scrh%   pcode(P%) P%=11,18,1,27,1,69 P%=21,27,1,70 *P%=3 1,27,1,70,1,15 4P%=41,27,1,70,1,18 >P%=5 1,27,1,45,1,1 HP%=61,27,1,45,1,0 RP%=7 1,27,1,87,1,1 \P%=8 1,27,1,87,1,0 fP%=9 1,27,1,70,1,14 pP%=10 1,27,1,70,1,20 zP%=11 1,27,1,"4" P%=12 1,27,1,"5"   >getp:F%=(nddir+"nparms"):I%=124:#F%,p$(I%)::#F%:  >putp:F%=(nddir+"nparms"):I%=124:#F%,p$(I%)::#F%:  zzz *SDclose ? *SDopen naccs ok("naccs") *SDopen ntrans ok("ntrans") *SDclose ?   $3graph2(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) .3vdu20:ȓ D%+180*R%/L%,32*y%+12,180-180*R%/L%,4 8D%+180,32*y%+6: BY 0,20 B4 L!ȓ Ȑ D%,32*y%+4,180*R%/L%,20 V5z%vdu20:N%<=R% D%+180*N%/L%,32*y%+8: BY 0,12 ` j t3graph4(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) ~6vdu20:0:ȓ D%+180*R%/L%,32*y%+12,180-180*R%/L%,4 D%+180,32*y%+6: BY 0,20 4 !ȓ Ȑ D%,32*y%+4,180*R%/L%,20 5z%vdu20:N%<=R% D%+180*N%/L%,32*y%+8: BY 0,12    help  *SDstat  Z%=12 3dbox2(1,Z%-2,78,6,8) 0:136:I%=0:X%,Y%   Z$  #X%=20*(I%4)+3*(I%8):Y%=(I%4) X%<=scrw%help1 A$="*"  A$,"*")>0 (SD03("Enter option ") 2 < F help1 P*A$=Z$,1):B$=Z$,2):A$="@"A$="escape" ZA$="!"A$="Del" dKA$>135:A$="SHFT-"+A$ A$>"Z"A$=(A$-32)+A$,2)A$>"@"A$="CTRL-"+A$ n)A$=17+132+17+8+A$+17+136+17+0 xx1%=-7*(mode%>9) 7X%+x1%,Y%)A$X%+x1%+7+2*(I%8),Y%)B$,scrw%-+1);  I%=I%+1   .text:ac$="0000"+D%,4):*SDtext ac$,17,1   :pval(val,len,brkt,real,just): temp,minus,@%:@%=&900 =minus=(val<0):val=val:temp=(val):real val<100 temp=3 % just (len+2*real-temp+minus);  minus "-(",1+brkt,1); .real (val/100)".""00"+val,2);: val; ") ",2+minus*brkt,1);   ݤread:*SDgfield day "d%=$sd%:*SDgfield mnth ,m%=$sd%:*SDgfield year 6y%=$sd%:*SDdays d%,m%,y% @ =G%-2E6 J TBݤchdate(a$):d%=a$:m%=a$,4,2):y%=a$,7,2):*SDdays d%,m%,y% ^ =G%-2E6 h rݤdate(F%):date$ |date$=strdate(F%) m%=3*date$,4,2) R=date$,2)+" "+"**JanFebMarAprMayJunJulAugSepOctNovDec",m%,3)+" 19"+date$,2)  ݤstrdate(a%) *SDdate a%+2000000  =$sd%  ݤival(a$) a$,".")=0a$=a$+".00" a$=a$+2-a$+a$,"."),"0") =(a$,a$-3)+a$,2))  messwind(x%,y%) cls 53dbox2((80-x%)2-1,((24-y%)2)+5+y%,x%+1,y%+1,8)  & 0 :grec(t%,z%) Dz%>0:*SDfile naccs Nt%>0:*SDlocate t% Xt%=0:*SDgrec 0 b l v throw p$(13)="TEST":1,12  lc%=0:   getnum(pr$,len%,def$,real) @% pr$=pr$+" " @%=&102020A  SD08(pr$,len%,def$) $sd%=spc_strip($sd%) ) ?sd%="-" mess("Negative number!")  L%=$sd% G%=27(L%>0?sd%<>"-")  G%=27  $sd%=($sd%) Rreal $sd%=string(.5+ival($sd%)):C%=$sd%,"."):$sd%=$sd%,C%-1)+$sd%,C%+1)   * 4userdate(z%) >Z$,X$,M%,M$,D%,D$ H'z%=1Z$=$,5,11)date$=date(Q%): RX$=Z$,4,3) \ Z$,1)="0" Z$=Z$,10) f7M%="***JanFebMarAprMayJunJulAugSepOctNovDec",X$)/3 pM%<10M$="0"+M% M$=M% z"D%=Z$:D%<10D$="0"+D%D$=D% date$=D$+"/"+M$+"/"+Z$,2) "SD08("Enter date : ",8,date$) date$=$sd% Q%=chdate(date$)      H ------------------------------------------------------------------  genhelp <'"General procedures for System DeltaPlus Applications" <"----------------------------------------------------"' "1.General" '"PROCsdreset" G"Behaves as *SDreset but with nicer messages if in >80 col. mode." $'"FNnumer(int%)" .C"Formats int% into string for numeration (eg 1st,2nd,7th etc)" 8'"FNzpadt(int%,wid%)" B5"Zeropads ABSint% to wid% chars, returns string" L''"2.Date Handling" V'"FNdays(day%,mon%,year%)" `L"Returns 'date number' for given date (No. days since arbitrary point)" j<'"PROCdate(date%,RETURN day%,RETURN mon%,RETURN year%)" t4"Converts 'date number' to day, month and year" ~'"FNdayw(date%)" :"Returns 3 char. day of week for given 'date number'" '"FNformdate(date%,type%)" 6"Converts 'date number' to string of type type%:" " Type 1 = 01/01/1980" " 2 = 1st Jan 1980" !" 3 = Tue 1st Jan 1980" " 4 = Jan 1st 1980" !" 5 = Tue Jan 1st 1980" " Others are all 01/01/80" '"FNday(date%)" ."Returns day of month from 'date number'" '"FNmonth(date%)" ."Returns month (1-12) from 'date number'"  '"FNyear(date%)" +"Returns year (AD) from 'date number'" '"FNtoday" (1"Returns 'date number' read from CMOS clock" 2 < F sdreset PT%,X%,Y%,A%:X%=:Y%= Z:26,10,8 d <79 n *SDreset x colours   T%=:ș"OS_Byte",229,1,A%  T%= T%  *SDbeep JSD06("Insert original DeltaPlus disk in drive :0 and press any key ") %G%=27:1:0,"Protection Failure"  SD03("")   *SDreset E  colours T%  *SDbeep GSD06("OK - Remove disk (replace if necessary) and press any key ") " SD03("") , 6ș"OS_Byte",229,A% @ Jș&80301sd% TX%,Y%);: ^ h r/ݤdays(D%,M%,Y%):"SDdays D%,M%,Y%":=G%-2E6 | 0date(Z%, D%, M%, Y%):*SDdate Z%+2000000 #D%=sd%!40:M%=sd%!44:Y%=sd%!48:  ݤnumer(T%):T%=T% ;(T%10)<1(T%10)>3((T%100)>9(T%100)<15):=T%+"th"  =T%+"*stndrd",(T%10)*2,2)  $ݤzpad(N%,T%)=T%,"0")+ÔN%,T%)  5ݤdayw(Z%)="FriSatSunMonTueWedThu",(Z%7)*3+1,3)  ݤformdate(Z%,T%) =0Z%>1E6Y%+=1900  ȎT% 31:=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,4) &22:=numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) 0@3:=dayw(Z%)+" "+numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) :24:=T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4) D@5:=dayw(Z%)+" "+T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4) N X0=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,2) b l*ݤday(Z%):"SDdate Z%+2000000":=sd%!40 v,ݤmonth(Z%):"SDdate Z%+2000000":=sd%!44 #ݤyear(Z%):"SDdate Z%+2000000" 6Z%<1E6ORsd%!48>100sd%!48<0:=sd%!48:=sd%!48+1900  ݤtoday:?sd%=1:ș7,14,sd% %=days(~sd%?2,~sd%?1,~?sd%)  sdopen(T$) "SDopen "+T$:"SDfile "+T$  *SDfirst  *sd13 &36  *SDinit 6T%:SD06("OK. Insert your backup, press any key") :vdu20::  setmode(T%)  T1% 7ș "OS_ReadModeVariable",T%,2 ,,T1%:T1%<>31T%=12  T1%= * 4 > T1%= H:<>25:,$ R T1% \#T%>15T%=12:T%>11T%=9:T%=1 f p T1%= zT%  mode%=T%  30,10,8 T%=12:T1%=  >30  palset   ݤnpdir:T$ 6T$=ArfVar("Delta$NPPrefix"):T$="":T$="&.NOMINAL" T$,1)<>"."T$=T$+"." =T$  ݤpddir:T$ "."T$=T$+"." =T$ $ .ݤsddir:T$ 89T$=ArfVar("Delta$SDPrefix"):T$="":T$="&.SALES.DATA" BT$,1)<>"."T$=T$+"." L=T$ V `ݤnddir:T$ j;T$=ArfVar("Delta$NDPrefix"):T$="":T$="&.NOMINAL.DATA" tT$,1)<>"."T$=T$+"." ~=T$  pddir:"dir "+pddir): sddir:"dir "+sddir): nddir:"dir "+nddir):  +ssetdir(T$):T$=""T$="*":sddir:T$ +nsetdir(T$):T$=""T$="*":nddir:T$ +psetdir(T$):T$=""T$="*":pddir:T$  vdu20:128:7  7:128    palset  19,0,16,0,0,0  19,1,16,240,0,0 ( 19,2,16,0,240,0 2 19,3,16,240,240,0 < 19,4,16,0,0,240 F 19,5,16,240,0,240 P 19,6,16,0,240,240 Z 19,7,16,240,240,240 d 19,8,16,240,240,0 n 19,9,16,192,192,0 x 19,10,16,160,160,0  19,11,16,128,128,0  19,12,16,96,96,0  19,13,16,64,64,0  19,14,16,32,32,0  19,15,16,0,0,0    3dbox(X1,Y1,X2,Y2,C)  F # C>127C<255 F=0:C-=128 F=1  B=12  B2=14  F 10 13 # X1,Y2:X1,Y1:&55,X1+B2,Y2-B  X1+B2,Y1+B:&55,X1,Y1  F 13 10 "" X2,Y2:X2,Y1:&55,X2-B2,Y2-B , X2-B2,Y1+B:&55,X2,Y1 6 F 11 12 @" X1,Y2:X2,Y2:&55,X1+B2,Y2-B J X2-B2,Y2-B:&55,X2,Y2 T F 12 11 ^' X1,Y1:X1+B2,Y1+B:&55,X2-B2,Y1+B h X2,Y1:&55,X1,Y1 r$ C=256vers=9:C=1: C=256:C=8 |4 C=255vers=9:C=0:7:128: C=255:C=8:0:136  C 4 ȓȐX1+B2+2,Y1+B+4,X2-X1-(B2*2+4),Y2-Y1-(B*2+8)    commbox 3dbox(0,16,1279,76,256) 28,1,30,78,30   SD08(P$,L%,D$)  commbox *SD08 P$,L%,D$,w  :26   SD03(P$) &X% 0 commbox :*SD03 P$,w D NX%= X26:X%+1,30);: b lSD06(P$) v commbox *SD06 P$,w  :26:  SD09(P$) vers>9 commbox:*SD09 P$,w    P$="":P$="Sure (Y/N) ? " SD03(P$):::*SD05 (G%<>"Y" G%<>"N" G%<>27:*SDbeep  G%="N" G%="Y" G%=27  SD03("")  26:   3dbox2(x1,y1,w,h,c):15 *O3dbox((x1*8*2)-16,((31-y1)*8*4)-16,((x1+w)*8*2)+15,((31-(y1-h))*8*4)+15,c) 428,x1,y1,x1+w-1,y1-h+1 >c=80:136 H R \ colours fvers=9: p*SDcolour 1,0 z*SDcolour 2,8 *SDcolour 3,8 *SDcolour 4,0 *SDcolour 5,7 *SDcolour 6,4    ݤvers:$sd%,a:*SD55 ! a=("&"+$(sd%+2)): a<10:a=9  =a  delta(A$)  0<0  T%:T%=   :T%= T% ArfVar("Delta$Boot")=A$ $*unset Delta$Boot .-1:"Cannot load System DeltaPlus module" 8'"This module must be on the disk." B'"Please re-try.": L V:"set Delta$Boot "+A$:"Exec "+npdir+"!NL-Start":*gos ` j t *SDbbc ~*unset Delta$Boot   ݤstrac(T$):T$=T$,2) ȕT$=48:T$=T$,2): =T$  h2 3dbox(0,928,574,1023,8) 3dbox2(33,3,46,1,8):26 ȓȐ528,924,30,30 $13:574,942:BY-14,-14:81,0,14 $12:526,942:BY-14,-14:81,0,14 $10:526,938:BY-14,-14:81,14,0  *0:ȓȐ0,880,508,44:ȓȐ576,944,703,79 ,22,948:ș"OS_SpriteOp",256+28,,"dpa",0 -702,944:ș"OS_SpriteOp",256+28,,"nom",0 ( 26: 2 <comm:I% F28,1,30,78,1 P O%=-"*" ZSD08("*",200,"") dcomm2:$sd%=$(sd%+1) n$sd%="": x.SD03("Press SHIFT"):3dbox2(1,28,78,24,8)  vers>9 (T$:T$=28+1+28+78+5:*SDvdu 3,T$ 28,1,30,78,30 *SD47 $sd%,w 26  614:ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% 15:SD06("")  cls:vdu20:  ݤpr:X%,Y%:G%=27:=0 ,rd>3:Y%=rd-3:2,1,0,1,0,1,0,3:Y%=rd X%=:=0::>750 rd>Y% =X%+:=rd>Y%  "sort(s%,e%,d%,t%) ,I%,J%,K%,M%,P%,I$,L$ 6M%=(e%-s%)2 @ ȕM%>0 JJ%=s%:K%=e%-M% T ȕJ%<=K% ^ I%=J% h P%=I%+M% r ȕI%>=s% |I$=sort(I%,t%) L$=sort(P%,t%)  I$<>L$ (I$+" but you MUST install a full version" !H+" (by using the !COPY utility on your" !R-" System DeltaPlus disk) if you wish to" !\'" make proper use of the package." !f !p-" This evaluation version will time-out" !z," after a sensible period has elapsed," !|)" which may corrupt your test data." ! SD06("") ! cls: ! !filcol:vers<10: !*SDcolour 103,8 !*SDcolour 104,0 ! < > PL-Lib - Purchase Ledger library - see PROCprinthelp  printhelp ( cls1 2" PROCEDURES" < F0'" Name Description" P ZK'" vars Sets up de%,CALC,calc$,rmswi%,mode%,scrh% & back%" d@" define Sets up character definitions for boxes" nE" h(INT) Displays header. INT gives which sub-heading" xJ" menu(INT) Displays option menu. INT gives no. of lines down" (" start of menu" H" mcheck(STR,INT) Checks ext$ for STR. Returns modified STR & INT" ?" and INT if that option not available" =" w Sets up scrw%, wid%, colours 128 & 7" " b Bleeps" &" p(STR) Does a *(STR)" @" graph Displays no.of records available & used" " graph1 " " graph2 " D" cls Clears screen leaving heading & bottom line" 9" calc Carries out calculation of calc$" @" ch(STR) Chains program STR in correct directory" 8" help Displays help strings on screen" 2" pl(STR) Prints STR on bottom line" :" chmode Allows user to change screen mode"  "'" Functions" , 60'" Name Description" @ J3'" pdir Returns drive & directory" T4" locate(STR) Checks for file STR on disc" ^2" ArfVar(STR) Reads Arthur variable STR" hF" ofile Returns name of opened file or no file string" rG" date(INT) If INT=0 then date returned in **/**/** format" |E" if INT=1 then date returned as dd mmm yyyy" 1" case(STR) Forces STR to upper case" <" spc_strip(STR) Removes all leading spaces from STR" ':genhelp ''"Press any key";:A%=:    vars ș &80301 sd% ade%=0:CALC=0:calc$="":rmswi%=900:f$="":mode%=12:scrh%=31:back%=136:find$="":pr$="#1":proff:   define %23,135,24,&66,96,248,96,96,254,0 !23,136,0,24,56,127,56,24,0,0 !23,137,0,24,28,254,28,24,0,0 #23,138,24,24,24,24,126,60,24,0 #23,139,0,24,60,126,24,24,24,24 & 23,161,0,0,0,24,24,24,24,24 023,162,0,0,0,31,0,0,0,0 : 23,163,0,0,0,31,24,24,24,24 D23,164,0,0,0,248,0,0,0,0 N!23,165,0,0,0,248,24,24,24,24 X23,166,0,0,0,255,0,0,0,0 b!23,167,0,0,0,255,24,24,24,24 l23,168,24,24,24,24,0,0,0,0 v#23,169,24,24,24,24,24,24,24,24 23,170,24,24,24,31,0,0,0,0 #23,171,24,24,24,31,24,24,24,24  23,172,24,24,24,248,0,0,0,0 $23,173,24,24,24,248,24,24,24,24  23,174,24,24,24,255,0,0,0,0 $23,175,24,24,24,255,24,24,24,24 $23,228,60,96,48,60,102,102,60,0 '23,255,0,126,126,126,126,126,126,0    ch(a$) a$=ppdir+a$ a$   ݤpdir:T$ 1T$=ArfVar("Delta$SLPrefix"):T$="":T$=":0.$"  T$,1)<>"."T$=T$+"." *=T$ 4 >ݤlocate(f$) H C%,T% RNT%=::C%=(f$):#C%:C%>0T%= "Mount <"+f$+">, Press a key...";:G%=: \ T%= f=T% p zݤArfVar(A$) sd%,L%:sd%-1  =292:=""::,$ ș&23,A$,sd%,200,0,3,,L%  sd%?L%=13  =$sd%  h(z%):w:cls1 h2  Ȏ z%  1:A$="Main Menu"  2:A$="Accounts"  3:A$="Aged Creditors"  4:A$="Reports"  5:A$="Allocation"  6:A$="Batch Print" $ 7:A$="Entries" . 8:A$="Parameters" 8 9:A$="Transactions" B 10:A$="Month End" L 11,99:A$="Checking System" V 12:A$="Payments" W 13:A$="Remittances" ` 14:A$="File Creation" j 15:A$="VAT Report" t:A$=ofile ~ centre(A$) Az%<99userdate(0):0:back%:36+11*wid%-(date$/2),3);date$   centre(a$) 3vdu20:26:0,3)(16*wid%)8*wid%-(a$/2),3)a$   menu(I%) menu2(I%)  menu3    menu2(I%) I%=2 p("Select Option ")::26 (3dbox2(19,24,40,16,255) 2J%=I%:menu$="":A$ < A$<>64 FB$=A$,2):A$=A$:C%=A$ PB$,"?")>0mcheck(B$,C%) ZB$=A$,2):A$="Esc":C%=27 d nC%<>323*wid%,I%)A$"."; x6*wid%,I%)B$; menu$=menu$+C% O%=-C%O%=I% I%=I%+1:C%=42    menu3  31,0,O% #("SD10 "+(1+O%-J%)+","+menu$)   'ݤofile:A$="No File Open":S%=0:=A$  *SDstat ="File="+$sd%  *mcheck( B$, C%):B$=B$,B$,"?")-1) &ext$,C%)=0:C%=32:B$=B$+" (N/A)" " , 6Nw:26,10,8:scrw%=:28,0,scrh%-3,scrw%,5:wid%=1:scrw%>44wid%=2:vdu20: @ Jb:*SDbeep T ^ hp(A$):SD03(A$) r | graph3:my=3  graph5:my=1  *SD13 1,transfl  128:7 1,my)" Transactions " )136:0:R%>0(L%-R%)/R%*100<5129:7 )2,my+1)" Free :";L%-R%-1" ":0:136 2,my+2)" Used :";R%   Gcls:15:vdu20:26,28,0,scrh%-3,scrw%,5: 0:ȓ Ȑ 0,80,1279,796:  cls1:vdu20:26,12:  &$calc:SD08("Eval: ",200,calc$) 0 calc1 :&a$="0":calc$=$sd%:calc$<>""calc2 D:w:cls:3dbox2(1,28,78,24,8):5,6);:*SDdh calc$,wid% N.5,10);:$sd%="= "+a$,16):*SDdh $sd%,wid% X SD06("") b$G%=G%&DF:G%=80cls:calc$"="a$ l3:w:cls:O%=-"?": v   calc2  .=6::a$=calc$:CALC=a$:: :,$ CALC=calc$:a$=CALC:   graph /m%(0)=-:ș rmswi%,10 I%,,T%:m%(1)=T%-I% $m%(2)=-:ș rmswi%,10 ,,m%(3) $b%=0:I%=02:b% Hݤcase(a$) Ra$="":=a$ \$sd%=a$:*SDupper f =$sd% p zݤspc_strip(a$) $sd%=a$:*SDstrip  =$sd%   pl(a$)  p(a$)  COLOURback%:COLOUR7   ݤe(a$,len%,b$) SD08(a$,len%,b$)  =$sd%   chmode  *mode%=e("New mode (9,12) ",2,mode%)  mode%=9 mode%=12 $$setmode(mode%):26,10,8:scrw%= . 8 B disp L26::136:0 V=2,10)"Accounts used :";R%-del%" (";L%-R%+del%-1" Left)" `graph4(24,21,1) j*SDwindow 1,28,78,Z% t*SDgfield acno ~D%=0:*SD38 255 text G%<>12:*SDscroll 18,7 G%=12:*SDview 18,7 :  findac(a$):pl("") *SDwindow found=: :a$<>""$sd%=a$: D%=0:pr$=case(e("Account ",20,pr$)) pr$="END OF BATCH"G%=255 xG%=27:("SDgrec 1") $sd%>R% $(sd%+1)>R% mess("Account not open"):A%=0 ?sd%="#":A%=facnum A%=facname  A%=1 G%=27 G%=255 A%=1found=    ݤfacname (find$=pr$:*SDdup D%,pr$ 2G%D%=0:b:=0 <delac:=0 Ftext:*SDgfield acno Pal$=$sd%:=1 Z d ݤfacnum n$sd%=case($(sd%+1)) x?al$=?sd%:al$<"A"al$>"Z" al$="":ac%=$sd% ac%=$(sd%+1) ,ac%=0mess("Invalid account number"):=0 *SDlocate ac% delac:=0 text:*SDgfield acno Kal$<>""al$<>?sd% ("SDview 18,7"):mess("Invalid account letter"):=0 al$=$sd%:=1   ݤdelac *SD33 7 G%&80 mess("Account has been deleted"):=:=  mess(a$):pl(a$)  b:*SD05  SD03("")  " ,7ݤstring(temp):@%:@%=&1020200:temp=temp/100:=temp 6 @ݤrev(a$):b$,i% J)b$="":i%=1a$:b$=a$,i%,1)+b$::=b$ T ^valid(a$) h flag%= r *SD13 &35 |8G%=2valid1 A$="Not a Sales Ledger file!":flag%= G%=G%1:*SD14 G%,&36 *SD43   valid1:*SD13 &36 *G%1A$=a$+" files corrupted.":flag%=   ok(a$):*SD13 &36,a$ G%=G%&FE:*SD14 G%,&36,a$   0ݤrd:X%,A%:X%=252:A%=128:=&FF (&FFF4/256)  ptest:G%=0 ȕ pr=0 G%<>27 &*mess("Reset Printer, Press ") 0G%=19flushit : SD03("") D NG%=27:*FX21,3 X b l flushit v *FX21,3 *FX5   pron:28,78,30,78,30,2 -1 -3:3,26,12   proff:3,26,31,30,scrh%   pcode(P%) P%=11,18,1,27,1,69 P%=21,27,1,70 P%=3 1,27,1,70,1,15 P%=41,27,1,70,1,18 P%=5 1,27,1,45,1,1 P%=61,27,1,45,1,0 *P%=7 1,27,1,87,1,1 4P%=8 1,27,1,87,1,0 >P%=9 1,27,1,70,1,14 HP%=10 1,27,1,70,1,20 RP%=11 1,27,1,"4" \P%=12 1,27,1,"5" f p z>getp:F%=(pddir+"pparms"):I%=140:#F%,p$(I%)::#F%:  >putp:F%=(pddir+"pparms"):I%=139:#F%,p$(I%)::#F%:  zzz *SDclose ? *SDopen suppl ok("suppl") *SDopen ptrans ok("ptrans") *SDclose ?   3graph2(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) 3vdu20:ȓ D%+180*R%/L%,32*y%+12,180-180*R%/L%,4 D%+180,32*y%+6: BY 0,20 4 $!ȓ Ȑ D%,32*y%+4,180*R%/L%,20 .5z%vdu20:N%<=R% D%+180*N%/L%,32*y%+8: BY 0,12 8 B L3graph4(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) V6vdu20:0:ȓ D%+180*R%/L%,32*y%+12,180-180*R%/L%,4 `D%+180,32*y%+6: BY 0,20 j4 t!ȓ Ȑ D%,32*y%+4,180*R%/L%,20 ~5z%vdu20:N%<=R% D%+180*N%/L%,32*y%+8: BY 0,12    help  *SDstat  Z%=12 3dbox2(1,Z%-2,78,6,8) 0:136:I%=0:X%,Y%   Z$ #X%=20*(I%4)+3*(I%8):Y%=(I%4) X%<=scrw%help1 A$="*"  A$,"*")>0 3dbox2(1,28,78,17,255)  SD03("Enter option ")   ( help1 2*A$=Z$,1):B$=Z$,2):A$="@"A$="escape" <A$="!"A$="Del" FKA$>135:A$="SHFT-"+A$ A$>"Z"A$=(A$-32)+A$,2)A$>"@"A$="CTRL-"+A$ P)A$=17+132+17+7+A$+17+136+17+0 Zx1%=-7*(mode%>9) d7X%+x1%,Y%)A$X%+x1%+7+2*(I%8),Y%)B$,scrw%-+1); n I%=I%+1 x  .text:ac$="0000"+D%,4):*SDtext ac$,17,1   :pval(val,len,brkt,real,just): temp,minus,@%:@%=&900 =minus=(val<0):val=val:temp=(val):real val<100 temp=3 % just (len+2*real-temp+minus);  minus "-(",1+brkt,1); .real (val/100)".""00"+val,2);: val; ") ",2+minus*brkt,1);   ;mpval(val,len,brkt,real,just): temp,minus,@%:@%=&900 EMJW$="":minus=(val<0):val=val:temp=(val):real val<100 temp=3 - just MJW$=(len+2*real-temp+minus)," ") ! minus MJW$+="-(",1+brkt,1) ">real MJW$+=((val/100))+"."+"00"+val,2): MJW$+=(val) ,MJW$+=") ",2+minus*brkt,1) 6 @ Jݤread:*SDgfield day Td%=$sd%:*SDgfield mnth ^m%=$sd%:*SDgfield year hy%=$sd%:*SDdays d%,m%,y% r =G%-2E6 | Bݤchdate(a$):d%=a$:m%=a$,4,2):y%=a$,7,2):*SDdays d%,m%,y%  =G%-2E6  ݤdate(F%):date$ date$=strdate(F%) m%=3*date$,4,2) R=date$,2)+" "+"**JanFebMarAprMayJunJulAugSepOctNovDec",m%,3)+" 19"+date$,2)  ݤstrdate(a%) *SDdate a%+2000000  =$sd%  ݤival(a$) a$,".")=0a$=a$+".00" a$=a$+2-a$+a$,"."),"0") =(a$,a$-3)+a$,2)) & 0messwind(x%,y%) :cls D Nmesswind1(x%,y%) X53dbox2((80-x%)2-1,((24-y%)2)+5+y%,x%+1,y%+1,8) b l v grec(t%,z%) z%>0:*SDfile acfile t%>0:*SDlocate t% t%=0:*SDgrec 0    throw p$(13)="TEST":1,12  lc%=0:   getnum(pr$,len%,def$,real) @% pr$=pr$+" " @%=&102020A   SD08(pr$,len%,def$)  $sd%=spc_strip($sd%) *) ?sd%="-" mess("Negative number!") 4 L%=$sd% >G%=27(L%>0?sd%<>"-") H G%=27 R$sd%=($sd%) \Rreal $sd%=string(.5+ival($sd%)):C%=$sd%,"."):$sd%=$sd%,C%-1)+$sd%,C%+1) f p zuserdate(z%) Z$,X$,M%,M$,D%,D$ 'z%=1Z$=$,5,11)date$=date(Q%): X$=Z$,4,3)  Z$,1)="0" Z$=Z$,10) 7M%="***JanFebMarAprMayJunJulAugSepOctNovDec",X$)/3 M%<10M$="0"+M% M$=M% "D%=Z$:D%<10D$="0"+D%D$=D% date$=D$+"/"+M$+"/"+Z$,2)  "SD08("Enter date : ",8,date$) date$=$sd% Q%=chdate(date$)  Q%>0      $H ------------------------------------------------------------------ . genhelp 8<'"General procedures for System DeltaPlus Applications" B<"----------------------------------------------------"' L"1.General" V'"PROCsdreset" `G"Behaves as *SDreset but with nicer messages if in >80 col. mode." j'"FNnumer(int%)" tC"Formats int% into string for numeration (eg 1st,2nd,7th etc)" ~'"FNzpadt(int%,wid%)" 5"Zeropads ABSint% to wid% chars, returns string" ''"2.Date Handling" '"FNdays(day%,mon%,year%)" L"Returns 'date number' for given date (No. days since arbitrary point)" <'"PROCdate(date%,RETURN day%,RETURN mon%,RETURN year%)" 4"Converts 'date number' to day, month and year" '"FNdayw(date%)" :"Returns 3 char. day of week for given 'date number'" '"FNformdate(date%,type%)" 6"Converts 'date number' to string of type type%:" " Type 1 = 01/01/1980" " 2 = 1st Jan 1980" !" 3 = Tue 1st Jan 1980"  " 4 = Jan 1st 1980" !" 5 = Tue Jan 1st 1980" " Others are all 01/01/80" ('"FNday(date%)" 2."Returns day of month from 'date number'" <'"FNmonth(date%)" F."Returns month (1-12) from 'date number'" P'"FNyear(date%)" Z+"Returns year (AD) from 'date number'" d'"FNtoday" n1"Returns 'date number' read from CMOS clock" x   sdreset T%,X%,Y%,A%:X%=:Y%= :26,10,8  <79  *SDreset  colours   T%=:ș"OS_Byte",229,1,A%  T%= T%  *SDbeep JSD06("Insert original DeltaPlus disk in drive :0 and press any key ") %G%=27:1:0,"Protection Failure"  SD03("") " , 6*SDreset E @ colours JT% T *SDbeep ^GSD06("OK - Remove disk (replace if necessary) and press any key ") h SD03("") r |ș"OS_Byte",229,A%  ș&80301sd% X%,Y%);:   /ݤdays(D%,M%,Y%):"SDdays D%,M%,Y%":=G%-2E6  0date(Z%, D%, M%, Y%):*SDdate Z%+2000000 #D%=sd%!40:M%=sd%!44:Y%=sd%!48:  ݤnumer(T%):T%=T% ;(T%10)<1(T%10)>3((T%100)>9(T%100)<15):=T%+"th"  =T%+"*stndrd",(T%10)*2,2)  $ݤzpad(N%,T%)=T%,"0")+ÔN%,T%)  &5ݤdayw(Z%)="FriSatSunMonTueWedThu",(Z%7)*3+1,3) 0 :ݤformdate(Z%,T%) D=0Z%>1E6Y%+=1900 X ȎT% b31:=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,4) l22:=numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) v@3:=dayw(Z%)+" "+numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) 24:=T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4) @5:=dayw(Z%)+" "+T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4)  0=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,2)  *ݤday(Z%):"SDdate Z%+2000000":=sd%!40 ,ݤmonth(Z%):"SDdate Z%+2000000":=sd%!44 #ݤyear(Z%):"SDdate Z%+2000000" 6Z%<1E6ORsd%!48>100sd%!48<0:=sd%!48:=sd%!48+1900  ݤtoday:?sd%=1:ș7,14,sd% %=days(~sd%?2,~sd%?1,~?sd%)  sdopen(T$)  "SDopen "+T$:"SDfile "+T$  *sd13 &36  *SDinit *6T%:SD06("OK. Insert your backup, press any key") 4:vdu20:: > Hsetmode(T%) RT1% \7ș "OS_ReadModeVariable",T%,2 ,,T1%:T1%<>31T%=12 f T1%= p z  T1%= :<>25:,$  T1% #T%>15T%=12:T%>11T%=9:T%=1   T1%= T%  mode%=T%  30,10,8 T%=12:T1%=  >30  palset   ݤppdir:T$ 7T$=ArfVar("Delta$PPPrefix"):T$="":T$="&.PURCHASE" $T$,1)<>"."T$=T$+"." .=T$ 8 Bݤpddir:T$ L"."T$=T$+"." `=T$ j tݤsddir:T$ ~9T$=ArfVar("Delta$SDPrefix"):T$="":T$="&.SALES.DATA" T$,1)<>"."T$=T$+"." =T$  ݤnddir:T$ ;T$=ArfVar("Delta$NDPrefix"):T$="":T$="&.NOMINAL.DATA" T$,1)<>"."T$=T$+"." =T$  pddir:"dir "+pddir): sddir:"dir "+sddir): nddir:"dir "+nddir):  +ssetdir(T$):T$=""T$="*":sddir:T$  +nsetdir(T$):T$=""T$="*":nddir:T$ +psetdir(T$):T$=""T$="*":pddir:T$  (vdu20:128:7 2 7:128 < F P palset Z 19,0,16,0,0,0 d 19,1,16,240,0,0 n 19,2,16,0,240,0 x 19,3,16,240,240,0  19,4,16,0,0,240  19,5,16,240,0,240  19,6,16,0,240,240  19,7,16,240,240,240  19,8,16,240,240,0  19,9,16,192,192,0  19,10,16,160,160,0  19,11,16,128,128,0  19,12,16,96,96,0  19,13,16,64,64,0  19,14,16,32,32,0  19,15,16,0,0,0    3dbox(X1,Y1,X2,Y2,C)  F,G% "# C>127C<255 F=0:C-=128 F=1 , B=12 6 B2=14 @ F 10 13 J# X1,Y2:X1,Y1:&55,X1+B2,Y2-B T X1+B2,Y1+B:&55,X1,Y1 ^ F 13 10 h" X2,Y2:X2,Y1:&55,X2-B2,Y2-B r X2-B2,Y1+B:&55,X2,Y1 | F 11 12 " X1,Y2:X2,Y2:&55,X1+B2,Y2-B  X2-B2,Y2-B:&55,X2,Y2  F 12 11 ' X1,Y1:X1+B2,Y1+B:&55,X2-B2,Y1+B  X2,Y1:&55,X1,Y1 $ C=256vers=9:C=1: C=256:C=8 4 C=255vers=9:C=0:7:128: C=255:C=8:0:136  C 4 ȓȐX1+B2+2,Y1+B+4,X2-X1-(B2*2+4),Y2-Y1-(B*2+8)    commbox 3dbox(0,16,1279,76,256) 28,1,30,78,30   &SD08(P$,L%,D$) 0 commbox :*SD08 P$,L%,D$,w D :26 N X bSD03(P$) l X%,G% v commbox *SD03 P$,w  X%= 26:X%+1,30);:  SD06(P$)  commbox *SD06 P$,w  :26:  SD09(P$) vers>9 commbox:*SD09 P$,w       *P$="":P$="Sure (Y/N) ? " 4SD03(P$):::*SD05 >(G%<>"Y" G%<>"N" G%<>27:*SDbeep H G%="N" G%="Y" G%=27 R SD03("") \ 26: f p3dbox2(x1,y1,w,h,c) zO3dbox((x1*8*2)-16,((31-y1)*8*4)-16,((x1+w)*8*2)+15,((31-(y1-h))*8*4)+15,c) 28,x1,y1,x1+w-1,y1-h+1 c=80:136    colours vers=9: *SDcolour 1,0 *SDcolour 2,8 *SDcolour 3,8 *SDcolour 4,0 *SDcolour 5,7 *SDcolour 6,4    ݤvers:$sd%,a:*SD55 ! a=("&"+$(sd%+2)): a<10:a=9 $ =a . 8 report B@%=&907:6,3,15:*fx229,1 L( 255)=17: Vh(0):centre("Error") `%3dbox2(1,28,78,24,8):0:136:30 j::60,22)"Line "; tSD06(""):G%<>27-2: ~A$="Program Terminated" 19*wid%-A$,6);:*SDdh A$ *SDclose ? '  *fx229 *fx4   comm:I% 28,1,30,78,1  O%=-"*" SD08("*",200,"")  comm2:I%  $sd%="": .SD03("Press SHIFT"):3dbox2(1,28,78,24,8)  vers>9 ((T$:T$=28+1+28+78+5:*SDvdu 3,T$ 228,1,30,78,30 <*SD47 $sd%,w F26 P Z614:ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% d15:SD06("") n xcls:vdu20: h2 G% 3dbox(0,928,574,1023,8) 3dbox2(33,3,46,1,8):26 ȓȐ528,924,30,30 $13:574,942:BY-14,-14:81,0,14 $12:526,942:BY-14,-14:81,0,14 $10:526,938:BY-14,-14:81,14,0 *0:ȓȐ0,880,508,44:ȓȐ576,944,703,79 ,22,948:ș"OS_SpriteOp",256+28,,"dpa",0 -682,944:ș"OS_SpriteOp",256+28,,"pur",0  26:  delta(A$)  0<0  T%:T%= " , :T%= 6T% @ArfVar("Delta$Boot")=A$ J*unset Delta$Boot T-1:"Cannot load System DeltaPlus module" ^'"This module must be on the disk." h'"Please re-try.": r |:"set Delta$Boot "+A$:"Exec "+ppdir+"!PL-Start":*gos    *SDbbc *unset Delta$Boot   ݤpr:X%,Y%:G%=27:=0 ,rd>3:Y%=rd-3:2,1,0,1,0,1,0,3:Y%=rd X%=:=0::>750 rd>Y% =X%+:=rd>Y%  evaluation  *SD55  *SDupper $sd%,"EVALUATION")=0: 3dbox2(20,23,40,17,8):1 &13,1);:*SDdh "WARNING" 040:1,4)"The System DeltaPlus you are using is" :," an EVALUATION copy only and has some" D-" features restricted. This is suitable" N," for an over-view of this application" X+" but you MUST install a full version" b+" (by using the !COPY utility on your" l-" System DeltaPlus disk) if you wish to" v'" make proper use of the package."  -" This evaluation version will time-out" ," after a sensible period has elapsed," )" which may corrupt your test data." SD06("") cls:  mk_chkac *SD33 (G%128) text:*SDtab ! *SDview ! %al$="""SDgfield acno":al$=$sd% !!"SDgfield acno":?sd%<>al$ ! 9SD06("Invalid account letter! Press any key "):G%=78 !* !4%SD09("Correct account (Y/N) ? ") !> !H27 ! T%=: ! :T%= !T% ! pr$=35 !0al$=case(pr$,2,1)):al$<"A"al$>"Z":al$="" !)"SDlocate "+ûpr$,2+al$):mk_chkac !find$=pr$ ! D%=0: !G%=0:*SDdup D%,pr$ !+G%=0:mk_chkac:99,"Record Not Found" "G%=89G%=27 " "7SD06("No such account! Press any key "):*SDgrec 1 "$ ".found=T%(G%=89) "8 "Bfound G%=27 "L Users of the Minerva Accounts Suite should find operation to be as normal when using RISC OS, although we do not normally recommend starting from the Desktop. However, you will soon discover that the printing functions are inoperative! To overcome this, the libraries for each of the packages should be replaced by the corresponding library from this directory to the correct directory on your working disks. Module Library Normal directory ------ ------- ---------------- Sales SL-Lib $.SALES Purchase PL-Lib $.PURCHASE Nominal NL-Lib $.NOMINAL Invoicing IN-Lib $.INVOICING Stock SM-Lib $.STOCKFILES This table shows the information for a default setup. Thus you might copy the Sales Ledger library by (eg): *copy :0.Minerva.Accounts.SL-Lib :0.$.SALES.SL-Lib f~c~vp ~~~~~~ ~~~~~~~~ (the underlines show which parts to change for other modules). As an alternative, the relevant library may be dragged into the relevant ledger module's directory using the Desktop. 9 > SL-Lib - Sales Ledger library - see PROCprinthelp  printhelp ( cls1 2" PROCEDURES" < F0'" Name Description" P ZK'" vars Sets up de%,CALC,calc$,rmswi%,mode%,scrh% & back%" d@" define Sets up character definitions for boxes" nE" h(INT) Displays header. INT gives which sub-heading" xJ" menu(INT) Displays option menu. INT gives no. of lines down" (" start of menu" H" mcheck(STR,INT) Checks ext$ for STR. Returns modified STR & INT" ?" and INT if that option not available" =" w Sets up scrw%, wid%, colours 128 & 7" " b Bleeps" &" p(STR) Does a *(STR)" @" graph Displays no.of records available & used" " graph1 " " graph2 " D" cls Clears screen leaving heading & bottom line" 9" calc Carries out calculation of calc$" @" ch(STR) Chains program STR in correct directory" 8" help Displays help strings on screen" 2" pl(STR) Prints STR on bottom line" :" chmode Allows user to change screen mode"  "'" Functions" , 60'" Name Description" @ J3'" pdir Returns drive & directory" T4" locate(STR) Checks for file STR on disc" ^2" ArfVar(STR) Reads Arthur variable STR" hF" ofile Returns name of opened file or no file string" rG" date(INT) If INT=0 then date returned in **/**/** format" |E" if INT=1 then date returned as dd mmm yyyy" 1" case(STR) Forces STR to upper case" <" spc_strip(STR) Removes all leading spaces from STR" ':genhelp ''"Press any key";:A%=:    vars ș &80301 sd% ade%=0:CALC=0:calc$="":rmswi%=900:f$="":mode%=12:scrh%=31:back%=136:find$="":pr$="#1":proff:   define %23,135,24,&66,96,248,96,96,254,0 !23,136,0,24,56,127,56,24,0,0 !23,137,0,24,28,254,28,24,0,0 #23,138,24,24,24,24,126,60,24,0 #23,139,0,24,60,126,24,24,24,24 & 23,161,0,0,0,24,24,24,24,24 023,162,0,0,0,31,0,0,0,0 : 23,163,0,0,0,31,24,24,24,24 D23,164,0,0,0,248,0,0,0,0 N!23,165,0,0,0,248,24,24,24,24 X23,166,0,0,0,255,0,0,0,0 b!23,167,0,0,0,255,24,24,24,24 l23,168,24,24,24,24,0,0,0,0 v#23,169,24,24,24,24,24,24,24,24 23,170,24,24,24,31,0,0,0,0 #23,171,24,24,24,31,24,24,24,24  23,172,24,24,24,248,0,0,0,0 $23,173,24,24,24,248,24,24,24,24  23,174,24,24,24,255,0,0,0,0 $23,175,24,24,24,255,24,24,24,24 $23,228,60,96,48,60,102,102,60,0 '23,255,0,126,126,126,126,126,126,0    ch(a$) a$=spdir+a$ a$   ݤpdir:T$ 1T$=ArfVar("Delta$SLPrefix"):T$="":T$=":0.$"  T$,1)<>"."T$=T$+"." *=T$ 4 >ݤlocate(f$) H C%,T% RNT%=::C%=(f$):#C%:C%>0T%= "Mount <"+f$+">, Press a key...";:G%=: \ T%= f=T% p zݤArfVar(A$) sd%,L%:sd%-1  =292:=""::,$ ș&23,A$,sd%,200,0,3,,L%  sd%?L%=13  =$sd%  h(z%):w:cls1 h2  Ȏ z%  1:A$="Main Menu"  2:A$="Accounts"  3:A$="Aged Debtors"  4:A$="Reports"  5:A$="Allocation"  6:A$="Batch Print" $ 7:A$="Entries" . 8:A$="Parameters" 8 9:A$="" B 10:A$="Processing" L 11,99:A$="Checking System" V 12:A$="Statements" ` 13:A$="Transactions" j 14:A$="File Creation" t 15:A$="VAT Report" ~:A$=ofile  centre(A$) A$="Nominal Ledger" :PRINTTAB(28*wid%-(LENA$/(3-wid%)),0);:*SDdh A$,wid%-1 Az%<99userdate(0):0:back%:36+11*wid%-(date$/2),3);date$   centre(a$) 3vdu20:26:0,3)(16*wid%)8*wid%-(a$/2),3)a$   menu(I%) menu2(I%)  menu3   (menu2(I%) 2I%=2 <p("Select Option ")::26 F3dbox2(19,24,40,16,255) PJ%=I%:menu$="":A$ Z A$<>64 dB$=A$,2):A$=A$:C%=A$ nB$,"?")>0mcheck(B$,C%) xB$=A$,2):A$="Esc":C%=27  C%<>323*wid%,I%)A$"."; 6*wid%,I%)B$; menu$=menu$+C% O%=-C%O%=I% I%=I%+1:C%=42    menu3  31,0,O% #("SD10 "+(1+O%-J%)+","+menu$)   'ݤofile:A$="No File Open":S%=0:=A$  *SDstat ="File="+$sd% " ,*mcheck( B$, C%):B$=B$,B$,"?")-1) 6&ext$,C%)=0:C%=32:B$=B$+" (N/A)" @ J TNw:26,10,8:scrw%=:28,0,scrh%-3,scrw%,5:wid%=1:scrw%>44wid%=2:vdu20: ^ hb:*SDbeep r | p(A$):SD03(A$)   graph3:my=3  graph5:my=1  *SD13 1,transfl  128:7 1,my)" Transactions " )136:0:R%>0(L%-R%)/R%*100<5129:7 )2,my+1)" Free :";L%-R%-1" ":0:136 2,my+2)" Used :";R%   Gcls:15:vdu20:26,28,0,scrh%-3,scrw%,5: 0:ȓ Ȑ 0,80,1279,796: & 0cls1:vdu20:26,12: : D$calc:SD08("Eval: ",200,calc$) N calc1 X&a$="0":calc$=$sd%:calc$<>""calc2 b:w:cls:3dbox2(1,28,78,24,8):5,6);:*SDdh calc$,wid% l.5,10);:$sd%="= "+a$,16):*SDdh $sd%,wid% v SD06("") $G%=G%&DF:G%=80cls:calc$"="a$ 3:w:cls:O%=-"?":    calc2  .=6::a$=calc$:CALC=a$:: :,$ CALC=calc$:a$=CALC:   graph /m%(0)=-:ș rmswi%,10 I%,,T%:m%(1)=T%-I% $m%(2)=-:ș rmswi%,10 ,,m%(3) $b%=0:I%=02:b%33*wid%-6,I%+28)A$; H R \ fݤcase(a$) pa$="":=a$ z$sd%=a$:*SDupper  =$sd%  ݤspc_strip(a$) $sd%=a$:*SDstrip  =$sd%   pl(a$)  p(a$)  COLOURback%:COLOUR7   ݤe(a$,len%,b$) SD08(a$,len%,b$)  =$sd%   chmode $ .*mode%=e("New mode (9,12) ",2,mode%) 8 mode%=9 mode%=12 B$setmode(mode%):26,10,8:scrw%= L V ` disp j26::136:0 t=2,10)"Accounts used :";R%-del%" (";L%-R%+del%-1" Left)" ~graph4(24,21,1) *SDwindow 1,28,78,Z% *SDgfield acno D%=0:*SD38 255 text G%<>12:*SDscroll 18,7 G%=12:*SDview 18,7 :  findac(a$):pl("") *SDwindow found=: :a$<>""$sd%=a$: D%=0:pr$=case(e("Account ",20,pr$)) pr$="END OF BATCH"G%=255 G%=27:("SDgrec 1") $sd%>R% $(sd%+1)>R% mess("Account not open"):A%=0 ?sd%="#":A%=facnum A%=facname:a$=find$  A%=1 G%=27 G%=255 A%=1found= ( 2 < ݤfacname Ffind$=pr$:*SDdup D%,pr$ PG%D%=0:b:=0 Zdelac:=0 dtext:*SDgfield acno nal$=$sd%:=1 x ݤfacnum $sd%=case($(sd%+1)) ?al$=?sd%:al$<"A"al$>"Z" al$="":ac%=$sd% ac%=$(sd%+1) ,ac%=0mess("Invalid account number"):=0 *SDlocate ac% delac:=0 text:*SDgfield acno Kal$<>""al$<>?sd% ("SDview 18,7"):mess("Invalid account letter"):=0 al$=$sd%:=1  ݤdelac *SD33 8 G%&80 mess("Account has been deleted "):=:=  mess(a$):pl(a$)  b:*SD05 " SD03("") , 6 @7ݤstring(temp):@%:@%=&1020200:temp=temp/100:=temp J Tݤrev(a$):b$,i% ^)b$="":i%=1a$:b$=a$,i%,1)+b$::=b$ h rvalid(a$) | flag%= *SD13 &35 8G%=2valid1 A$="Not a Sales Ledger file!":flag%= G%=G%1:*SD14 G%,&36 *SD43   valid1:*SD13 &36 *G%1A$=a$+" files corrupted.":flag%=   ok(a$):*SD13 &36,a$ G%=G%&FE:*SD14 G%,&36,a$   0ݤrd:X%,A%:X%=252:A%=128:=&FF (&FFF4/256)  &ptest:G%=0 0ȕ pr=0 G%<>27 :*mess("Reset Printer, Press ") DG%=19flushit N SD03("") X bG%=27:*FX21,3 l v flushit *FX21,3 *FX5   pron:28,78,30,78,30,2 -1 -3:3,26,12   proff:3,26,31,30,scrh%   pcode(P%) P%=11,18,1,27,1,69 P%=21,27,1,70 P%=3 1,27,1,70,1,15 P%=41,27,1,70,1,18 *P%=5 1,27,1,45,1,1 4P%=61,27,1,45,1,0 >P%=7 1,27,1,87,1,1 HP%=8 1,27,1,87,1,0 RP%=9 1,27,1,70,1,14 \P%=10 1,27,1,70,1,20 fP%=11 1,27,1,"4" pP%=12 1,27,1,"5" z  >getp:F%=(sddir+"params"):I%=140:#F%,p$(I%)::#F%:  >putp:F%=(sddir+"params"):I%=140:#F%,p$(I%)::#F%:  zzz *SDclose ? *SDopen acfile ok("acfile") *SDopen transfl ok("transfl") *SDclose ?   3graph2(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) 3vdu20:ȓ D%+180*R%/L%,32*y%+12,180-180*R%/L%,4 $D%+180,32*y%+6: BY 0,20 .4 8!ȓ Ȑ D%,32*y%+4,180*R%/L%,20 B5z%vdu20:N%<=R% D%+180*N%/L%,32*y%+8: BY 0,12 L V `3graph4(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) j6vdu20:0:ȓ D%+180*R%/L%,32*y%+12,180-180*R%/L%,4 tD%+180,32*y%+6: BY 0,20 ~4 !ȓ Ȑ D%,32*y%+4,180*R%/L%,20 5z%vdu20:N%<=R% D%+180*N%/L%,32*y%+8: BY 0,12    help  *SDstat  Z%=12 3dbox2(1,Z%-2,78,6,8) 0:136:I%=0:X%,Y%   Z$ #X%=20*(I%4)+3*(I%8):Y%=(I%4) X%<=scrw%help1 A$="*"   A$,"*")>0 3dbox2(1,28,78,17,255) SD03("Select Option") ( 2 < help1 F*A$=Z$,1):B$=Z$,2):A$="@"A$="escape" PA$="!"A$="Del" ZKA$>135:A$="SHFT-"+A$ A$>"Z"A$=(A$-32)+A$,2)A$>"@"A$="CTRL-"+A$ d)A$=17+132+17+7+A$+17+136+17+0 nx1%=-7*(mode%>9) x7X%+x1%,Y%)A$X%+x1%+7+2*(I%8),Y%)B$,scrw%-+1);  I%=I%+1   .text:ac$="0000"+D%,4):*SDtext ac$,17,1   :pval(val,len,brkt,real,just): temp,minus,@%:@%=&900 =minus=(val<0):val=val:temp=(val):real val<100 temp=3 % just (len+2*real-temp+minus);  minus "-(",1+brkt,1); .real (val/100)".""00"+val,2);: val; ") ",2+minus*brkt,1);   ݤread:*SDgfield day d%=$sd%:*SDgfield mnth "m%=$sd%:*SDgfield year ,y%=$sd%:*SDdays d%,m%,y% 6=G%-2E6: SHOULD HAVE -2E6 @ JBݤchdate(a$):d%=a$:m%=a$,4,2):y%=a$,7,2):*SDdays d%,m%,y% T=G%-2E6: SHOULD HAVE -2E6 ^ hݤdate(F%):date$ rdate$=strdate(F%) |m%=3*date$,4,2) R=date$,2)+" "+"**JanFebMarAprMayJunJulAugSepOctNovDec",m%,3)+" 19"+date$,2)  ݤstrdate(a%)  SHOULD BE +2000000 *SDdate a%+2000000  =$sd%  ݤival(a$) a$,".")=0a$=a$+".00" a$=a$+2-a$+a$,"."),"0") =(a$,a$-3)+a$,2))  messwind(x%,y%) cls  messwind1(x%,y%) &53dbox2((80-x%)2-1,((24-y%)2)+5+y%,x%+1,y%+1,8) 0 : D Ngrec(t%,z%) Xz%>0:*SDfile acfile bt%>0:*SDlocate t% lt%=0:*SDgrec 0 v   throw p$(13)="TEST":1,12  lc%=0:   getnum(pr$,len%,def$,real) @% pr$=pr$+" " @%=&102020A  SD08(pr$,len%,def$) $sd%=spc_strip($sd%) ) ?sd%="-" mess("Negative number!")  L%=$sd%  G%=27(L%>0?sd%<>"-")  G%=27  $sd%=($sd%) *Rreal $sd%=string(.5+ival($sd%)):C%=$sd%,"."):$sd%=$sd%,C%-1)+$sd%,C%+1) 4 > Huserdate(z%) RZ$,X$,M%,M$,D%,D$ \'z%=1Z$=$,5,11)date$=date(Q%): fX$=Z$,4,3) p Z$,1)="0" Z$=Z$,10) z7M%="***JanFebMarAprMayJunJulAugSepOctNovDec",X$)/3 M%<10M$="0"+M% M$=M% "D%=Z$:D%<10D$="0"+D%D$=D% date$=D$+"/"+M$+"/"+Z$,2) "SD08("Enter date : ",8,date$) date$=$sd% Q%=chdate(date$)      H ------------------------------------------------------------------  genhelp <'"General procedures for System DeltaPlus Applications" <"----------------------------------------------------"' "1.General" $'"PROCsdreset" .G"Behaves as *SDreset but with nicer messages if in >80 col. mode." 8'"FNnumer(int%)" BC"Formats int% into string for numeration (eg 1st,2nd,7th etc)" L'"FNzpadt(int%,wid%)" V5"Zeropads ABSint% to wid% chars, returns string" `''"2.Date Handling" j'"FNdays(day%,mon%,year%)" tL"Returns 'date number' for given date (No. days since arbitrary point)" ~<'"PROCdate(date%,RETURN day%,RETURN mon%,RETURN year%)" 4"Converts 'date number' to day, month and year" '"FNdayw(date%)" :"Returns 3 char. day of week for given 'date number'" '"FNformdate(date%,type%)" 6"Converts 'date number' to string of type type%:" " Type 1 = 01/01/1980" " 2 = 1st Jan 1980" !" 3 = Tue 1st Jan 1980" " 4 = Jan 1st 1980" !" 5 = Tue Jan 1st 1980" " Others are all 01/01/80" '"FNday(date%)" ."Returns day of month from 'date number'"  '"FNmonth(date%)" ."Returns month (1-12) from 'date number'" '"FNyear(date%)" (+"Returns year (AD) from 'date number'" 2'"FNtoday" <1"Returns 'date number' read from CMOS clock" F P Z sdreset dT%,X%,Y%,A%:X%=:Y%= nș&80301 sd% x:26,10,8  <79  *SDreset  colours   T%=:ș"OS_Byte",229,1,A%  T%= T%  *SDbeep JSD06("Insert original DeltaPlus disk in drive :0 and press any key ") %G%=27:1:0,"Protection Failure"  SD03("")   *SDreset E  colours "T% , *SDbeep 6GSD06("OK - Remove disk (replace if necessary) and press any key ") @ SD03("") J Tș"OS_Byte",229,A% ^ hș&80301sd% rX%,Y%);: |  /ݤdays(D%,M%,Y%):"SDdays D%,M%,Y%":=G%-2E6  0date(Z%, D%, M%, Y%):*SDdate Z%+2000000 #D%=sd%!40:M%=sd%!44:Y%=sd%!48:  ݤnumer(T%):T%=T% ;(T%10)<1(T%10)>3((T%100)>9(T%100)<15):=T%+"th"  =T%+"*stndrd",(T%10)*2,2)  $ݤzpad(N%,T%)=T%,"0")+ÔN%,T%)  5ݤdayw(Z%)="FriSatSunMonTueWedThu",(Z%7)*3+1,3)  ݤformdate(Z%,T%) =0Z%>1E6Y%+=1900 0 ȎT% :31:=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,4) D22:=numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) N@3:=dayw(Z%)+" "+numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) X24:=T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4) b@5:=dayw(Z%)+" "+T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4) l v0=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,2)  *ݤday(Z%):"SDdate Z%+2000000":=sd%!40 ,ݤmonth(Z%):"SDdate Z%+2000000":=sd%!44 #ݤyear(Z%):"SDdate Z%+2000000" 6Z%<1E6ORsd%!48>100sd%!48<0:=sd%!48:=sd%!48+1900  ݤtoday:?sd%=1:ș7,14,sd% %=days(~sd%?2,~sd%?1,~?sd%)  sdopen(T$) "SDopen "+T$:"SDfile "+T$  *sd13 &36  *SDinit 6T%:SD06("OK. Insert your backup, press any key")  :vdu20::   setmode(T%) *T1% 47ș "OS_ReadModeVariable",T%,2 ,,T1%:T1%<>31T%=12 > T1%= H R \ T1%= f:<>25:,$ p T1% z#T%>15T%=12:T%>11T%=9:T%=1   T1%= T%  mode%=T%  30,10,8 T%=12:T1%=  >30  palset   ݤspdir:T$ 4T$=ArfVar("Delta$SPPrefix"):T$="":T$="&.SALES" T$,1)<>"."T$=T$+"." =T$  ݤpddir:T$ $"."T$=T$+"." 8=T$ B Lݤsddir:T$ V9T$=ArfVar("Delta$SDPrefix"):T$="":T$="&.SALES.DATA" `T$,1)<>"."T$=T$+"." j=T$ t ~ݤnddir:T$ ;T$=ArfVar("Delta$NDPrefix"):T$="":T$="&.NOMINAL.DATA" T$,1)<>"."T$=T$+"." =T$  pddir:"dir "+pddir): sddir:"dir "+sddir): nddir:"dir "+nddir):  +ssetdir(T$):T$=""T$="*":sddir:T$ +nsetdir(T$):T$=""T$="*":nddir:T$ +psetdir(T$):T$=""T$="*":pddir:T$  vdu20:128:7  7:128   ( palset 2 19,0,16,0,0,0 < 19,1,16,240,0,0 F 19,2,16,0,240,0 P 19,3,16,240,240,0 Z 19,4,16,0,0,240 d 19,5,16,240,0,240 n 19,6,16,0,240,240 x 19,7,16,240,240,240  19,8,16,240,240,0  19,9,16,192,192,0  19,10,16,160,160,0  19,11,16,128,128,0  19,12,16,96,96,0  19,13,16,64,64,0  19,14,16,32,32,0  19,15,16,0,0,0    3dbox(X1,Y1,X2,Y2,C)  F # C>127C<255 F=0:C-=128 F=1  B=12  B2=14  F 10 13 "# X1,Y2:X1,Y1:&55,X1+B2,Y2-B , X1+B2,Y1+B:&55,X1,Y1 6 F 13 10 @" X2,Y2:X2,Y1:&55,X2-B2,Y2-B J X2-B2,Y1+B:&55,X2,Y1 T F 11 12 ^" X1,Y2:X2,Y2:&55,X1+B2,Y2-B h X2-B2,Y2-B:&55,X2,Y2 r F 12 11 |' X1,Y1:X1+B2,Y1+B:&55,X2-B2,Y1+B  X2,Y1:&55,X1,Y1 $ C=256vers=9:C=1: C=256:C=8 4 C=255vers=9:C=0:7:128: C=255:C=8:0:136  C 4 ȓȐX1+B2+2,Y1+B+4,X2-X1-(B2*2+4),Y2-Y1-(B*2+8)   comm:I% 28,1,30,78,1  O%=-"*" SD08("*",200,"") $sd%="": .SD03("Press SHIFT"):3dbox2(1,28,78,24,8)  vers>9 (T$:T$=28+1+28+78+5:*SDvdu 3,T$ 28,1,30,78,30 &*SD47 $sd%,w 026 : D614:ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% N15:SD06("") X bcls:vdu20: l v comm2 "cls:3dbox2(1,28,78,24,8):14 2ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% 15:SD06(""):cls:vdu20    commbox 3dbox(0,16,1279,76,256) 28,1,30,78,30   SD08(P$,L%,D$)  commbox *SD08 P$,L%,D$,w  :26     SD03(P$) *X% 4 commbox >*SD03 P$,w H RX%= \26:X%+1,30);: f pSD06(P$) z commbox *SD06 P$,w  :26:  SD09(P$) vers>9 commbox:*SD09 P$,w    P$="":P$="Sure (Y/N) ? " SD03(P$):::*SD05 (G%<>"Y" G%<>"N" G%<>27:*SDbeep  G%="N" G%="Y" G%=27  SD03("")  26:  $3dbox2(x1,y1,w,h,c) .O3dbox((x1*8*2)-16,((31-y1)*8*4)-16,((x1+w)*8*2)+15,((31-(y1-h))*8*4)+15,c) 828,x1,y1,x1+w-1,y1-h+1 Bc=80:136 L V ` colours jvers=9: t*SDcolour 1,0 ~*SDcolour 2,8 *SDcolour 3,8 *SDcolour 4,0 *SDcolour 5,7 *SDcolour 6,4    ݤvers:$sd%,a:*SD55 ! a=("&"+$(sd%+2)): a<10:a=9  =a   report @%=&907:6,3,15:*fx229,1 ( 255)=17:  h(0):centre("Error") %3dbox2(1,28,78,24,8):0:136:30 ::60,22)"Line "; (SD06(""):G%<>27-2: 2A$="Program Terminated" <19*wid%-A$,6);:*SDdh A$ F*SDclose ? P' Z *fx229 d*fx4 n xh2 3dbox(0,928,574,1023,8) 3dbox2(33,3,46,1,8):26 ȓȐ528,924,30,30 $13:574,942:BY-14,-14:81,0,14 $12:526,942:BY-14,-14:81,0,14 $10:526,938:BY-14,-14:81,14,0 *0:ȓȐ0,880,508,44:ȓȐ576,944,703,79 ,22,948:ș"OS_SpriteOp",256+28,,"dpa",0 -732,944:ș"OS_SpriteOp",256+28,,"sal",0  26:  delta(A$)  0<0  T%:T%=   :T%= "T% ,ArfVar("Delta$Boot")=A$ 6*unset Delta$Boot @-1:"Cannot load System DeltaPlus module" J'"This module must be on the disk." T'"Please re-try.": ^ h:"set Delta$Boot "+A$:"Exec "+spdir+"!SL-Start":*gos r |  *SDbbc *unset Delta$Boot   ݤpr:X%,Y%:G%=27:=0 ,rd>3:Y%=rd-3:2,1,0,1,0,1,0,3:Y%=rd X%=:=0::>750 rd>Y% =X%+:=rd>Y%  evaluation  *SD55  *SDupper $sd%,"EVALUATION")=0: 3dbox2(20,23,40,17,8):1 13,1);:*SDdh "WARNING" 40:1,4)"The System DeltaPlus you are using is" &," an EVALUATION copy only and has some" 0-" features restricted. This is suitable" :," for an over-view of this application" D+" but you MUST install a full version" N+" (by using the !COPY utility on your" X-" System DeltaPlus disk) if you wish to" b'" make proper use of the package." l v-" This evaluation version will time-out" ," after a sensible period has elapsed," )" which may corrupt your test data." SD06("") cls:  mk_chkac *SD33 (G%128) text:*SDtab *SDview %al$="""SDgfield acno":al$=$sd% !"SDgfield acno":?sd%<>al$ 9SD06("Invalid account letter! Press any key "):G%=78  %SD09("Correct account (Y/N) ? ")  27 !4 T%=: !> :T%= !HT% !R pr$=35 !T0al$=case(pr$,2,1)):al$<"A"al$>"Z":al$="" !\)"SDlocate "+ûpr$,2+al$):mk_chkac !ffind$=pr$ !p D%=0: !zG%=0:*SDdup D%,pr$ !+G%=0:mk_chkac:99,"Record Not Found" !G%=89G%=27 ! !7SD06("No such account! Press any key "):*SDgrec 1 ! !found=T%(G%=89) ! !found G%=27 " = > SM-Lib - Stock Management library - see PROCprinthelp  printhelp ( cls1 2" PROCEDURES" < F0'" Name Description" P ZK'" vars Sets up de%,CALC,calc$,rmswi%,mode%,scrh% & back%" d@" define Sets up character definitions for boxes" nE" h(INT) Displays header. INT gives which sub-heading" xJ" menu(INT) Displays option menu. INT gives no. of lines down" (" start of menu" H" mcheck(STR,INT) Checks ext$ for STR. Returns modified STR & INT" ?" and INT if that option not available" =" w Sets up scrw%, wid%, colours 128 & 7" " b Bleeps" &" p(STR) Does a *(STR)" @" graph Displays no.of records available & used" " graph1 " " graph2 " D" cls Clears screen leaving heading & bottom line" 9" calc Carries out calculation of calc$" @" ch(STR) Chains program STR in correct directory" 8" help Displays help strings on screen" 2" pl(STR) Prints STR on bottom line" :" chmode Allows user to change screen mode"  "'" Functions" , 60'" Name Description" @ J3'" pdir Returns drive & directory" T4" locate(STR) Checks for file STR on disc" ^2" ArfVar(STR) Reads Arthur variable STR" hF" ofile Returns name of opened file or no file string" rG" date(INT) If INT=0 then date returned in **/**/** format" |E" if INT=1 then date returned as dd mmm yyyy" 1" case(STR) Forces STR to upper case" <" spc_strip(STR) Removes all leading spaces from STR" ," e(STR,INT,STR) Asks for user input" ':genhelp ''"Press any key";:A%=:    vars ș &80301 sd% ade%=0:CALC=0:calc$="":rmswi%=900:f$="":mode%=12:scrh%=31:back%=136:find$="":pr$="#1":proff:   define %23,135,24,&66,96,248,96,96,254,0 !23,136,0,24,56,127,56,24,0,0 !23,137,0,24,28,254,28,24,0,0 #23,138,24,24,24,24,126,60,24,0 ,139,0,24,60,126,24,24,24,24 0 23,161,0,0,0,24,24,24,24,24 :23,162,0,0,0,31,0,0,0,0 D 23,163,0,0,0,31,24,24,24,24 N23,164,0,0,0,248,0,0,0,0 X!23,165,0,0,0,248,24,24,24,24 b23,166,0,0,0,255,0,0,0,0 l!23,167,0,0,0,255,24,24,24,24 v23,168,24,24,24,24,0,0,0,0 #23,169,24,24,24,24,24,24,24,24 23,170,24,24,24,31,0,0,0,0 #23,171,24,24,24,31,24,24,24,24  23,172,24,24,24,248,0,0,0,0 $23,173,24,24,24,248,24,24,24,24  23,174,24,24,24,255,0,0,0,0 $23,175,24,24,24,255,24,24,24,24 $23,228,60,96,48,60,102,102,60,0 '23,255,0,126,126,126,126,126,126,0    ch(a$) a$=mpdir+a$ a$   ݤpdir:T$  9T$=ArfVar("Delta$MPPrefix"):T$="":T$="&.STOCKFILES" *T$,1)<>"."T$=T$+"." 4=T$ > Hݤlocate(f$) Rc% \c%=(f$):#c%:c%>0:= f= p zݤArfVar(A$) sd%,L%:sd%-1  =292:=""::,$ ș&23,A$,sd%,200,0,3,,L%  sd%?L%=13  =$sd%  !h(z%):w:cls:pl("")::h2 *z%<99userdate(0):back%:42,3)date$  a$=""  centre(a$) "vdu20:0,3)3115-a$/2,3)a$   manu(I%) $&p("Select Option ")::26:7:128 .J%=I%:menu$="":A$ 8 A$<>64 BB$=A$,2):A$=A$:C%=A$ LB$,"?")>0mcheck(B$,C%) VB$=A$,2):A$="Esc":C%=27 ` jC%<>320,I%)7*wid%A$"."; t7*wid%+5,I%)B$; ~menu$=menu$+C% O%=-C%O%=I% I%=I%+1:C%=42 26,31,0,O% #("SD10 "+(1+O%-J%)+","+menu$)   'ݤofile:A$="No File Open":S%=0:=A$  *SDstat ="File="+$sd%  *mcheck( B$, C%):B$=B$,B$,"?")-1) &ext$,C%)=0:C%=32:B$=B$+" (N/A)"    Ow:26,10,8:scrw%=:28,0,scrh%-1,scrw%,3:wid%=1:scrw%>44wid%=2:128:7:  (b 2 *SDbeep < F Pp(A$):SD03(A$) Z d n graph3 x*SD13 1,transfl  back% )scrw%-20,scrh%-7)" Transactions " 128 (scrw%-18,scrh%-6)"Free :";maxr%-R% "scrw%-18,scrh%-5)"Used :";R% 4R%>0(maxr%-R%)/R%*100<5scrw%-19,scrh%-6)"";   Ecls:vdu20:26:0:ȓȐ0,80,1279,25*32-4:28,0,scrh%-3,scrw%,5:  cls1:128:7:26,12:   graph /m%(0)=-:ș rmswi%,10 I%,,T%:m%(1)=T%-I% $m%(2)=-:ș rmswi%,10 ,,m%(3) $b%=0:I%=02:b%"":$sd%=a$: D%=0:pr$=case(e("Account ",20,pr$)) pr$="END OF BATCH"G%=255 xG%=27:("SDgrec 1") $sd%>R% $(sd%+1)>R% mess("Account not open"):A%=0 ?sd%="#":A%=facnum A%=facname  A%=1 G%=27 G%=255 A%=1found=    ݤfacname find$=pr$:*SDdup D%,pr$ G%D%=0:b:=0 text:*SDgfield acno  al$=$sd%  *SD33 N% 8 G%&80 mess("Account has been deleted"):=0::=1   * ݤfacnum 4$sd%=case($(sd%+1)) >Bal$=$sd%,1):al$<"A"al$>"Z" al$="":ac%=$sd% ac%=$(sd%+1) H,ac%=0mess("Invalid account number"):=0 R*SDlocate ac% \text:*SDgfield acno fKal$<>""al$<>?sd% ("SDview 18,7"):mess("Invalid account letter"):=0 p al$=$sd% z *SD33 N% 8 G%&80 mess("Account has been deleted"):=0::=1  mess(a$):pl(a$) b::*SD05  SD03("")   7ݤstring(temp):@%:@%=&1020200:temp=temp/100:=temp  ݤrev(a$):b$,i% 'b$="":i%=14:b$=a$,i%,1)+b$::=b$  valid(a$)  flag%= *SD13 &36,a$ *G%1A$=a$+" files corrupted.":flag%= $G%=G%1:*SD14 G%,&36 . *SD43 8 B L fix V *SD13 &36 ` G%=G%1 j*SD14 G%,&36 t *SD43 ~  ok(a$):*SD13 &36,a$ G%=G%254:*SD14 G%,&36,a$   0ݤrd:X%,A%:X%=252:A%=128:=&FF (&FFF4/256)  ptest:G%=0 ȕ pr=0 G%<>27 (*mess("Reset Printer, Press ") 2G%=19flushit < SD03("") F PG%=27:*FX21,3 Z d n flushit x *FX21,3 *FX5   pron:28,78,30,78,30,2   proff:3,26,31,30,scrh%   pcode(P%) P%=11,18,1,27,1,69 P%=21,27,1,70 P%=3 1,27,1,70,1,15 P%=41,27,1,70,1,18 P%=5 1,27,1,45,1,1 P%=61,27,1,45,1,0 "P%=7 1,27,1,87,1,1 ,P%=8 1,27,1,87,1,0 6 @ J getp T f%,i% ^f%=(mddir+"SM-pval") h i%=119 r#f%,P$(i%) | #f%   putp f%,i% f%=(mddir+"SM-Pval") i%=119 #f%,P$(i%)  #f%   zzz *SDclose ? *SDopen suppl ok("suppl") &*SDopen stock 0ok("stock") :*SDclose ? D N X3graph2(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) b=G% H Rݤival(a$) \a$,".")=0a$=a$+".00" fa$=a$+2-a$+a$,"."),"0") p=(a$,a$-3)+a$,2)) z grec(t%,z%) z%>0:*SDfile acfile *SDlocate t%   throw p$(13)="TEST":1,12 lc%=0:  getnum(pr$,len%,def$,real) @% pr$=pr$+" " @%=&102020A  SD08(pr$,len%,def$) $sd%=spc_strip($sd%) $) ?sd%="-" mess("Negative number!") . L%=$sd% 8G%=27(L%>0?sd%<>"-") B G%=27 L$sd%=($sd%) VRreal $sd%=string(.5+ival($sd%)):C%=$sd%,"."):$sd%=$sd%,C%-1)+$sd%,C%+1) ` j tuserdate(z%) ~Z$,X$,M%,M$,D%,D$ 'z%=1Z$=$,5,11)date$=date(Q%): X$=Z$,4,3)  Z$,1)="0" Z$=Z$,10) 7M%="***JanFebMarAprMayJunJulAugSepOctNovDec",X$)/3 M%<10M$="0"+M% M$=M% "D%=Z$:D%<10D$="0"+D%D$=D% date$=D$+"/"+M$+"/"+Z$,2) "SD08("Enter date : ",8,date$) date$=$sd% Q%=chdate(date$)   @ݤchdate(a$):d%=a$:m%=a$,4,2):y%=a$,2):*SDdays d%,m%,y%  =G%  ݤdate(F%):date$ (date$=strdate(F%) 2m%=3*date$,4,2) 80 col. mode." ,'"FNnumer(int%)" 6C"Formats int% into string for numeration (eg 1st,2nd,7th etc)" @'"FNzpadt(int%,wid%)" J5"Zeropads ABSint% to wid% chars, returns string" T''"2.Date Handling" ^'"FNdays(day%,mon%,year%)" hL"Returns 'date number' for given date (No. days since arbitrary point)" r<'"PROCdate(date%,RETURN day%,RETURN mon%,RETURN year%)" |4"Converts 'date number' to day, month and year" '"FNdayw(date%)" :"Returns 3 char. day of week for given 'date number'" '"FNformdate(date%,type%)" 6"Converts 'date number' to string of type type%:" " Type 1 = 01/01/1980" " 2 = 1st Jan 1980" !" 3 = Tue 1st Jan 1980" " 4 = Jan 1st 1980" !" 5 = Tue Jan 1st 1980" " Others are all 01/01/80" '"FNday(date%)" ."Returns day of month from 'date number'" '"FNmonth(date%)" ."Returns month (1-12) from 'date number'" '"FNyear(date%)" +"Returns year (AD) from 'date number'" &'"FNtoday" 01"Returns 'date number' read from CMOS clock" : D N/ݤdays(D%,M%,Y%):"SDdays D%,M%,Y%":=G%-2E6 X b0date(Z%, D%, M%, Y%):*SDdate Z%+2000000 l#D%=sd%!40:M%=sd%!44:Y%=sd%!48: v ݤnumer(T%):T%=T% ;(T%10)<1(T%10)>3((T%100)>9(T%100)<15):=T%+"th"  =T%+"*stndrd",(T%10)*2,2)  $ݤzpad(N%,T%)=T%,"0")+ÔN%,T%)  5ݤdayw(Z%)="FriSatSunMonTueWedThu",(Z%7)*3+1,3)  ݤformdate(Z%,T%) =0Z%>1E6Y%+=1900  ȎT% 31:=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,4) 22:=numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4)  @3:=dayw(Z%)+" "+numer(D%)+" "+T$,M%*3,3)+" "+zpad(Y%,4) 24:=T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4)  @5:=dayw(Z%)+" "+T$,M%*3,3)+" "+numer(D%)+" "+zpad(Y%,4) * 40=zpad(D%,2)+"/"+zpad(M%,2)+"/"+zpad(Y%,2) > H*ݤday(Z%):"SDdate Z%+2000000":=sd%!40 R,ݤmonth(Z%):"SDdate Z%+2000000":=sd%!44 \#ݤyear(Z%):"SDdate Z%+2000000" f6Z%<1E6ORsd%!48>100sd%!48<0:=sd%!48:=sd%!48+1900 p zݤtoday:?sd%=1:ș7,14,sd% %=days(~sd%?2,~sd%?1,~?sd%)  ݤmpdir:T$ 9T$=ArfVar("Delta$MPPrefix"):T$="":T$="&.STOCKFILES" T$,1)<>"."T$=T$+"." =T$  ݤpddir:T$ "."T$=T$+"." =T$  ݤsddir:T$ 9T$=ArfVar("Delta$SDPrefix"):T$="":T$="&.SALES.DATA" T$,1)<>"."T$=T$+"." =T$ $ .ݤmddir:T$ 8>T$=ArfVar("Delta$MDPrefix"):T$="":T$="&.STOCKFILES.DATA" BT$,1)<>"."T$=T$+"." L=T$ V `pddir:"dir "+pddir): jsddir:"dir "+sddir): tmddir:"dir "+mddir): ~ +ssetdir(T$):T$=""T$="*":sddir:T$ +msetdir(T$):T$=""T$="*":mddir:T$ +psetdir(T$):T$=""T$="*":pddir:T$   setmode(T%) T1% 7ș "OS_ReadModeVariable",T%,2 ,,T1%:T1%<>31T%=12  T1%=    T1%= :<>25:,$  T1% #T%>15T%=12:T%>11T%=9:T%=1  ( T1%= 2T% < mode%=T% F 30,10,8 PT%=12:T1%= Z >30 d palset n xvdu20:128:7  7:128   palset 19,0,16,0,0,0 19,1,16,240,0,0 19,2,16,0,240,0 19,3,16,240,240,0 19,4,16,0,0,240 19,5,16,240,0,240 19,6,16,0,240,240 19,7,16,240,240,240 19,8,16,240,240,0 19,9,16,192,192,0 19,10,16,160,160,0 19,11,16,128,128,0 19,12,16,96,96,0 "19,13,16,64,64,0 ,19,14,16,32,32,0 619,15,16,0,0,0 @ J3dbox(X1,Y1,X2,Y2,C) T F ^"C>127C<255 F=0:C-=128 F=1 hB=12 r B2=14 | F 10 13 " X1,Y2:X1,Y1:&55,X1+B2,Y2-B X1+B2,Y1+B:&55,X1,Y1  F 13 10 !X2,Y2:X2,Y1:&55,X2-B2,Y2-B X2-B2,Y1+B:&55,X2,Y1  F 11 12 !X1,Y2:X2,Y2:&55,X1+B2,Y2-B X2-B2,Y2-B:&55,X2,Y2  F 12 11 &X1,Y1:X1+B2,Y1+B:&55,X2-B2,Y1+B X2,Y1:&55,X1,Y1  C<>-1 #C=256vers=9:C=1: C=256:C=8 3C=255vers=9:C=0:7:128: C=255:C=8:0:136  C 3ȓȐX1+B2+2,Y1+B+4,X2-X1-(B2*2+4),Y2-Y1-(B*2+8) & 0 : comm2 Dcls:3dbox2(1,28,78,24,8) N2ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% XSD06(""):cls:vdu20 b l commbox v3dbox(0,16,1279,76,256) 28,1,30,78,30  SD08(P$,L%,D$)  commbox *SD08 P$,L%,D$,w  :26  SD03(P$) X%  commbox *SD03 P$,w  X%=: 26:X%+1,30);: SD06(P$)  commbox *SD06 P$,w  26:: *SD09(P$) 4P$="":P$="Sure (Y/N) ? " >SD03(P$):::*SD05 H#G%<>89 G%<>78G%<>27:*SDbeep RG%=89G%=78G%=27 \ SD03("") f 26: p3dbox2(x1,y1,w,h,c) zO3dbox((x1*8*2)-16,((31-y1)*8*4)-16,((x1+w)*8*2)+15,((31-(y1-h))*8*4)+15,c) 28,x1,y1,x1+w-1,y1-h+1 c=80:136   colours vers=9: *SDcolour 1,0 *SDcolour 2,8 *SDcolour 3,8 *SDcolour 4,0 *SDcolour 5,7 *SDcolour 6,4  ݤvers:$sd%,a:*SD55  a=("&"+$(sd%+2)): a<10:a=9 =a   report $ @%=&907:6,3,4,15::*fx229,1 .( 255)=17: 8h(99):centre("Error") B%3dbox2(1,28,78,24,8):0:136:30 L::60,22)"Line "; VSD06(""):G%<>27-2: `A$="Program Terminated" j19*wid%-A$,6);:*SDdh A$ t*SDclose ? ~'  *fx229 *fx4   %filcol:vers>9:*SDcolour 103,8 vers>9:*SDcolour 104,7   h2 3dbox(0,928,574,1023,8) 3dbox2(33,3,46,1,8):26 ȓȐ528,924,30,30 $13:574,942:BY-14,-14:81,0,14 $12:526,942:BY-14,-14:81,0,14  $10:526,938:BY-14,-14:81,14,0 *0:ȓȐ0,880,510,44:ȓȐ576,944,703,79 ,22,948:ș"OS_SpriteOp",256+28,,"dpa",0 (-650,944:ș"OS_SpriteOp",256+28,,"stk",0 2 26: < Fdelta(A$) P 0<0 Z T%:T%= d n :T%= xT% ArfVar("Delta$Boot")=A$ *unset Delta$Boot -1:"Cannot load System DeltaPlus module" '"This module must be on the disk." '"Please re-try.":  :"set Delta$Boot "+A$:"Exec "+mpdir+"!SM-Start":*gos    *SDbbc *unset Delta$Boot    sdreset ș&80301sd%:colours T%,X%,Y%,A%:X%=:Y%= ":26,10,8 , <79 6 *SDreset @ J TT%=:ș"OS_Byte",229,1,A% ^ T%= hT% r *SDbeep |JSD06("Insert original DeltaPlus disk in drive :0 and press any key ") %G%=27:1:0,"Protection Failure"  SD03("")   *SDreset E  colours T%  *SDbeep GSD06("OK - Remove disk (replace if necessary) and press any key ")  SD03("")  ș"OS_Byte",229,A%  X%,Y%);::  messwind(x%,y%) &cls 0messwind1(x%,y%) :93dbox2((scrw%+1-x%)2,y%+(scrh%+1-y%)2,x%+1,y%+1,8) D N Xmenu(I%) bmenu2(I%) l menu3 v  menu2(I%) I%=2 p("Select Option ")::26 3dbox2(19,24,40,16,255) J%=I%:menu$="":A$  A$<>64 B$=A$,2):A$=A$:C%=A$ B$,"?")>0mcheck(B$,C%) B$=A$,2):A$="Esc":C%=27  C%<>323*wid%,I%)A$"."; 6*wid%,I%)B$; menu$=menu$+C%  O%=-C%O%=I% I%=I%+1:C%=42   * 4 menu3 > 31,0,O% H#("SD10 "+(1+O%-J%)+","+menu$) R \ f$calc:SD08("Eval: ",200,calc$) p calc1 z&a$="0":calc$=$sd%:calc$<>""calc2 :w:cls:3dbox2(1,28,78,24,8):5,6);:*SDdh calc$,wid% .5,10);:$sd%="= "+a$,16):*SDdh $sd%,wid%  SD06("") $G%=G%&DF:G%=80cls:calc$"="a$ 3:w:cls:O%=-"?":    calc2  .=6::a$=calc$:CALC=a$:: :,$ CALC=calc$:a$=CALC:  comm:I% 28,1,30,78,1  O%=-"*" SD08("*",200,"") $$sd%="": ..SD03("Press SHIFT"):3dbox2(1,28,78,24,8) 8 vers>9 B(T$:T$=28+1+28+78+5:*SDvdu 3,T$ L28,1,30,78,30 V*SD47 $sd%,w `26 j t614:ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% ~15:SD06("")  cls:vdu20:  ݤpr:X%,Y%:G%=27:=0 ,rd>3:Y%=rd-3:2,1,0,1,0,1,0,3:Y%=rd X%=:=0::>750 rd>Y% =X%+:=rd>Y%  evaluation ( *SD55 2 *SDupper <$sd%,"EVALUATION")=0: F3dbox2(20,23,40,17,8):1 P13,1);:*SDdh "WARNING" Z40:1,4)"The System DeltaPlus you are using is" d," an EVALUATION copy only and has some" n-" features restricted. This is suitable" x," for an over-view of this application" +" but you MUST install a full version" +" (by using the !COPY utility on your" -" System DeltaPlus disk) if you wish to" '" make proper use of the package."  -" This evaluation version will time-out" ," after a sensible period has elapsed," )" which may corrupt your test data."  SD06("")  cls: ,> :4.RISCOSSupp.Minerva.Delta.DeltaConv  )"This utility will convert a BACKUP" (*"of your System DeltaPlus disk (with" 2)"or without Mailshot/Reporter) into" <)"a disk which may be BOOTed or used" F'"from the Desktop, under RISC OS." P Z :::7:( 255)=17-3: d;"Mount System DeltaPlus BACKUP to convert in drive :0" nspc x""Converting, Please wait...." convert(":0") '"Done!":7   convert(dir$) "Dir "+dir$ *rename !Delta !Delta1 *cdir !Delta #dir$=":0" *namedisc :0 RDelta TtC  A$,F$ "."; dofile(A$,F$) A$="*****" *rename !Boot !Delta.Init "X%="!Boot" ,#X%,"*!Delta" 6#X%:*settype !Boot FFE @(dXD:makefile("!Delta.!Run"):"."; J)DZE:makefile("!Delta.!Boot"):"."; T*t~E:makefile("!Delta.!Start"):"."; ^3D@F:makefile1("!Delta.!Sprites","FF9"):"."; h3TXF:makefile1("!Delta.!Startex","FFC"):"."; r2tZK:makefile1("!Delta.!Screen","FFC"):"."; |  dofile(A$,F$) A$="*****":   : :  Ȏ , A$,"D")>0:"rename "+F$+" !Delta."+F$  A$,"R")>0:"remove "+F$ 3 A$,"C")>0:"copy "+F$+" !Delta."+F$+" f~c~v" & A$,"T")>0:"settype "+F$+" DE8" & A$,"F")>0:"settype "+F$+" DE7" & A$,"S")>0:"settype "+F$+" D7B"     spc &1"Press SPACE or click mouse to continue *"; 0 :ȗX%,Y%,B% D B%0=32 N 127 X b lmakefile(A$) v X%=A$  B$ B$<>"*****":#X%,B$ B$="*****" #X% "settype "+A$+" FEB"   makefile1(A$,C$)  X%=A$  B$ B$<>"*":#X%,("&"+B$)  B$="*"  #X% "settype "+A$+" "+C$   * 4"R ",!Copy >" ",!Delta H"D ",!Start R"C ",!Configure \" ",Agraph f"D ",Banner_Spr p"D ",Delta+ z"T ",Demo " ",Graph " ",ibascii "D ",Info "F ",Label " ",List "T ",Products "D ",RAMManager "D ",Util "D ",WIMP "D ",WimpCIA "D ",WimpCIAFrm "D ",WimpCIASpr "D ",WimpCopier "D ",WimpCreate "D ",WimpSort "D ",WimpMR $"D ",WimpRepFrm ." ",Segment 8"T ",Pupils B"T ",Exams L"T ",Teachers V"S ",Setup_1 `"S ",Setup_2 j"S ",Setup_3 t"S ",PD_FX80 ~"S ",PD_Blank "R ",Delta+E "D ",TextUtils "D ",WimpReport "D ",WimpMail "*****","*"    & "*| > !Run for system deltaplus" & "*set Delta$Path .,%." ( "*iconsprites .!Sprites"  "/Delta:!Screen" & "*set Delta$WPPrefix "  " "*set file$type_de8 SD+Data" " "*set file$type_de7 SD+Form" # "*set file$type_d7b SD+Setup" (; "*set alias$@runtype_de8 obey .!Run " 2; "*set alias$@runtype_de7 obey .!Run " < "BASIC Delta:Init" F "*****" P Z' "*| > !Boot for system deltaplus" d( "*iconsprites .!Sprites" n& "*set Delta$WPPrefix " x" "*set file$type_de8 SD+Data" " "*set file$type_de7 SD+Form" # "*set file$type_d7b SD+Setup" ; "*set alias$@runtype_de8 obey .!Run " ; "*set alias$@runtype_de7 obey .!Run "  "*****"  ( "*| > !Start for system DeltaPlus"  "*/Delta:!startex" 3 "*RMensure RAMManager 1.09 /Delta:RAMManager" ( "*RMensure Delta 0 /Delta:Delta+*" / "*RMensure charsutils 0 /Delta:textutils"  "*BASIC "  "*****"  F ----DATA for !Startex------------------------------------------- E5,0,A0,E3,1E,0,0,EF,A,9,53,E3,E,F0,A0,A1,A,19,63,E2,1,0,A0,E3,2A "0,0,EF,E,F0,A0,E1,* , 6F ----DATA for !Sprites------------------------------------------- @C8,0,0,0,10,0,0,0,78,C,0,0,D4,2,0,0,21,64,65,6C,74,61,0,0,0,0,0 JD0,4,0,0,0,10,0,0,0,0,0,0,0,7,0,0,0,2C,0,0,0,80,1,0,0,C,0,0,0,77 TC77,77,77,7F,77,78,77,77,77,77,77,FF,77,77,77,77,0,0,0,77,0,0,0 ^C0,87,78,99,99,77,0,FF,88,FF,0,70,77,0,0,0,77,0,0,0,70,88,97,77 hC97,79,FF,88,88,88,FF,97,77,0,0,0,77,0,0,0,87,78,79,37,77,FF,88 rC33,33,33,88,FF,77,0,0,0,77,0,0,0,77,88,97,79,FF,88,88,33,33,33 |E88,88,FF,0,0,0,77,0,70,77,77,87,78,77,77,FF,88,11,11,11,88,FF,77 E0,0,0,77,0,47,74,78,77,88,47,4B,44,FF,88,88,88,FF,97,77,0,0,0,77 C70,44,87,88,97,88,78,77,77,44,FF,88,FF,33,7B,77,0,0,0,77,47,7B C88,87,78,89,97,99,77,4B,44,FF,33,3B,B3,77,0,0,0,77,77,87,78,77 C88,77,77,77,77,77,77,77,77,77,77,77,0,0,0,77,72,88,44,47,87,78 C3,3,3,23,40,44,44,44,34,70,0,0,0,77,87,C8,7C,88,7C,88,47,44,44 D4,73,CC,44,CC,7,73,0,0,0,77,88,47,87,78,74,87,78,AA,AA,27,70,44 D44,44,37,70,0,0,0,87,88,77,88,C7,88,88,88,A7,AA,7,73,CC,44,CC,7 D73,0,0,0,77,2,87,78,44,44,3,77,AA,AA,27,40,44,44,44,34,70,0,0,0 C77,70,88,37,30,30,30,A7,AA,AA,7,3,3,3,3,3,73,0,0,0,77,77,77,77 C77,77,77,77,77,77,77,77,77,77,77,77,77,0,0,40,0,0,0,0,0,F0,F,0 C0,0,0,0,FF,0,0,0,0,FF,FF,FF,0,0,0,0,0,FF,FF,0,0,0,0,FF,FF,FF,0 C0,0,FF,FF,FF,0,0,0,0,F0,FF,F,0,0,0,FF,FF,FF,FF,FF,0,0,FF,FF,FF C0,0,0,0,FF,FF,0,0,0,FF,FF,FF,FF,FF,FF,FF,0,FF,FF,FF,0,0,0,0,F0 CFF,F,0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,0,0,0,0,0,FF,FF,0,0 EFF,FF,FF,FF,FF,FF,FF,0,FF,FF,FF,0,0,0,F0,FF,F0,FF,F,0,0,FF,FF,FF CFF,FF,0,0,FF,FF,FF,0,0,0,FF,FF,F,FF,FF,0,0,0,FF,FF,FF,0,0,0,FF &DFF,FF,0,0,F0,FF,FF,FF,F0,F,0,0,0,0,FF,0,0,0,0,FF,FF,FF,0,0,FF,F 0CF0,FF,F,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,0,F0,FF,0,F,FF,FF,0,0,0,0 :C0,0,0,0,0,0,FF,FF,FF,0,FF,F,F0,FF,F0,FF,F,0,0,0,0,0,0,0,0,0,FF DDFF,FF,F0,FF,0,FF,FF,0,FF,FF,0,0,0,0,0,0,0,0,0,FF,FF,FF,FF,FF,F0 NCFF,F,FF,FF,FF,F,0,0,0,0,0,0,0,0,FF,FF,FF,0,0,FF,FF,0,0,0,0,0,0 XE0,0,0,0,0,0,0,FF,FF,FF,0,F0,FF,F,0,0,0,0,0,0,0,0,0,0,0,0,0,FF,FF bEFF,0,0,FF,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,CC,1,0,0,73,6D,21 lC64,65,6C,74,61,0,0,0,0,3,0,0,0,8,0,0,0,10,0,0,0,B,0,0,0,AC,0,0 vD0,3C,1,0,0,C,0,0,0,10,F0,F0,F0,10,F0,F0,F0,10,D0,D0,D0,10,D0,D0 CD0,10,B0,B0,B0,10,B0,B0,B0,10,90,90,90,10,90,90,90,10,70,70,70 C10,70,70,70,10,50,50,50,10,50,50,50,10,30,30,30,10,30,30,30,10 D0,0,0,10,0,0,0,10,0,40,90,10,0,40,90,10,E0,E0,0,10,E0,E0,0,10,0 EC0,0,10,0,C0,0,10,D0,0,0,10,D0,0,0,10,E0,E0,B0,10,E0,E0,B0,10,50 E80,0,10,50,80,0,10,F0,B0,0,10,F0,B0,0,10,0,B0,F0,10,0,B0,F0,0,40 E11,11,11,11,11,88,11,11,8F,1F,11,41,44,44,0,40,11,11,11,11,88,18 E11,8F,33,83,1F,41,44,44,0,40,11,11,11,11,1F,88,11,8F,11,81,1F,41 D44,44,0,40,11,11,11,81,88,81,18,11,8F,1F,11,41,44,44,0,40,11,11 E11,88,81,18,11,11,11,11,11,41,44,44,0,40,11,11,88,18,88,88,11,11 E11,11,11,41,44,44,0,40,11,11,88,88,18,88,18,11,11,11,11,41,44,44 D0,40,11,81,11,88,11,11,11,11,11,11,11,41,44,44,0,40,11,11,88,88 C11,11,11,11,11,11,11,41,44,44,FF,FF,0,0,0,0,0,FF,0,0,FF,F,0,F0 CFF,FF,FF,FF,0,0,0,0,F0,F,0,FF,FF,FF,F,F0,FF,FF,FF,FF,0,0,0,0,F CFF,0,FF,FF,FF,F,F0,FF,FF,FF,FF,0,0,0,F0,FF,F0,F,0,FF,F,0,F0,FF  DFF,FF,FF,0,0,0,FF,F0,F,0,0,0,0,0,F0,FF,FF,FF,FF,0,0,F0,F,F,FF,0 C0,0,0,0,F0,FF,FF,FF,FF,0,0,FF,F0,F,FF,F,0,0,0,0,F0,FF,FF,FF,FF  C0,0,0,FF,0,0,0,0,0,0,0,F0,FF,FF,FF,FF,0,0,0,0,0,0,0,0,0,0,0,F0 *DFF,FF,80,1,0,0,66,69,6C,65,5F,64,65,38,0,0,0,0,4,0,0,0,10,0,0,0 4C0,0,0,0,7,0,0,0,2C,0,0,0,2C,0,0,0,C,0,0,0,77,77,77,77,77,77,77 >C77,77,77,77,77,77,77,77,77,77,0,0,0,77,FF,FF,FF,FF,FF,7F,88,F7 HCFF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,55,55,55,55,87,78,55,55,55 RCFF,FF,FF,FF,FF,77,0,0,0,77,FF,55,99,99,79,88,97,99,99,55,FF,FF \CFF,FF,FF,77,0,0,0,77,FF,55,99,99,99,87,78,99,99,55,55,55,FF,FF fCFF,77,0,0,0,77,FF,55,99,99,99,79,88,97,99,55,99,55,FF,FF,FF,77 pC0,0,0,77,FF,55,55,55,87,57,87,78,55,55,99,55,55,55,FF,77,0,0,0 zC77,FF,FF,5F,75,88,78,89,88,97,99,99,55,99,55,FF,77,0,0,0,77,FF CFF,5F,87,78,88,57,78,55,55,55,55,99,55,55,77,0,0,0,77,FF,FF,7F C88,FF,87,78,99,99,99,99,99,99,55,99,77,0,0,0,77,FF,FF,87,F8,75 C7F,88,57,55,55,55,55,55,55,99,77,0,0,0,77,FF,7F,88,FF,87,F8,87 C78,99,99,99,99,99,99,99,77,0,0,0,77,FF,87,F8,7F,88,F7,7F,88,57 C55,55,55,55,55,55,77,0,0,0,77,7F,88,F8,87,78,8F,88,88,78,FF,FF CFF,FF,FF,FF,77,0,0,0,77,FF,FF,7F,88,F7,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,77,0,0,0,77,FF,FF,87,78,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF D77,0,0,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,0,0 C40,18,1,0,0,73,6D,61,6C,6C,5F,64,65,38,0,0,0,2,0,0,0,8,0,0,0,0 D0,0,0,B,0,0,0,AC,0,0,0,AC,0,0,0,C,0,0,0,10,F0,F0,F0,10,F0,F0,F0 C10,D0,D0,D0,10,D0,D0,D0,10,B0,B0,B0,10,B0,B0,B0,10,90,90,90,10 C90,90,90,10,70,70,70,10,70,70,70,10,50,50,50,10,50,50,50,10,30 D30,30,10,30,30,30,10,0,0,0,10,0,0,0,10,0,40,90,10,0,40,90,10,E0 EE0,0,10,E0,E0,0,10,0,C0,0,10,0,C0,0,10,D0,0,0,10,D0,0,0,10,E0,E0 DB0,10,E0,E0,B0,10,50,80,0,10,50,80,0,10,F0,B0,0,10,F0,B0,0,10,0 CB0,F0,10,0,B0,F0,77,77,77,77,F7,88,7F,77,77,7,0,40,77,99,99,99 $E89,98,99,FF,7F,7,0,40,77,99,99,99,99,88,99,FF,7F,7,0,40,77,99,99 .E89,88,89,98,FF,7F,7,0,40,77,99,99,88,89,98,99,FF,7F,7,0,40,77,FF 8E8F,F8,88,88,FF,FF,7F,7,0,40,77,FF,88,88,F8,88,F8,FF,7F,7,0,40,77 BDFF,FF,88,FF,FF,FF,FF,7F,7,0,40,77,77,FF,F8,77,77,77,77,77,47,44 LC44,18,1,0,0,73,6D,61,6C,6C,5F,64,65,37,0,0,0,2,0,0,0,8,0,0,0,0 VD0,0,0,B,0,0,0,AC,0,0,0,AC,0,0,0,C,0,0,0,10,F0,F0,F0,10,F0,F0,F0 `C10,D0,D0,D0,10,D0,D0,D0,10,B0,B0,B0,10,B0,B0,B0,10,90,90,90,10 jC90,90,90,10,70,70,70,10,70,70,70,10,50,50,50,10,50,50,50,10,30 tD30,30,10,30,30,30,10,0,0,0,10,0,0,0,10,0,40,90,10,0,40,90,10,E0 ~EE0,0,10,E0,E0,0,10,0,C0,0,10,0,C0,0,10,D0,0,0,10,D0,0,0,10,E0,E0 DB0,10,E0,E0,B0,10,50,80,0,10,50,80,0,10,F0,B0,0,10,F0,B0,0,10,0 DB0,F0,10,0,B0,F0,77,77,77,77,7,88,70,77,77,7,0,40,77,0,0,0,80,8 C0,0,70,7,0,40,77,70,77,0,0,88,0,77,70,7,0,40,77,0,0,80,88,80,8 C0,70,7,0,40,77,70,0,88,80,8,70,7,70,7,0,40,77,0,80,8,88,88,0,0 C70,7,0,40,77,0,88,88,8,88,8,7,70,7,0,40,77,0,0,88,0,0,0,0,70,7 D0,40,77,77,80,8,77,77,77,77,77,47,44,44,80,1,0,0,66,69,6C,65,5F D64,65,37,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,7,0,0,0,2C,0,0,0,2C,0 C0,0,C,0,0,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77 C0,0,0,77,FF,FF,FF,FF,FF,7F,88,F7,FF,FF,FF,FF,FF,FF,FF,77,0,0,0 C77,FF,77,77,FF,F7,87,78,7F,77,F7,7F,7F,F7,FF,FF,77,0,0,0,77,FF CFF,FF,FF,7F,88,F7,FF,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,77,FF C77,FF,87,78,7F,77,7F,F7,7F,FF,77,FF,77,0,0,0,77,FF,FF,FF,FF,FF C7F,88,F7,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,77,77,FF,87,F7,87 C78,FF,77,FF,77,F7,FF,FF,77,0,0,0,77,FF,FF,FF,7F,88,78,8F,88,F7 CFF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,77,F7,87,78,88,F7,78,FF,77,F7 CF7,FF,FF,FF,77,0,0,0,77,FF,FF,7F,88,FF,87,78,FF,FF,FF,FF,FF,FF (CFF,FF,77,0,0,0,77,FF,F7,87,F8,7F,7F,88,F7,77,7F,77,FF,FF,FF,FF 2D77,0,0,0,77,FF,7F,88,FF,87,F8,87,78,FF,FF,FF,FF,FF,FF,FF,77,0,0 :4.RISCOSSupp.Minerva.Gamma.GammaConv  )"This utility will convert a BACKUP" ()"of your GammaPlot disk into a disk" 2'"which may be BOOTed or used from" <""the Desktop, under RISC OS." F P :::7:( 255)=17-3: Z4"Mount GammaPlot BACKUP to convert in drive :0" dspc n""Converting, Please wait...." xconvert(":0") '"Done!":7   convert(dir$) "Dir "+dir$ % dir$=":0" *namedisc :0 RGamma *cdir !Gamma dxB  A$,F$ "."; dofile(A$,F$) A$="*****" *rename !Boot !Gamma.Init X%="!Boot" "#X%,"*/ADFS::RGamma.$.!Gamma" "#X%:*settype !Boot FFE ,(DBD:makefile("!Gamma.!Run"):"."; 6)dvD:makefile("!Gamma.!Boot"):"."; @-DZE:makefile("!Gamma.!GP-Start"):"."; J3t~E:makefile1("!Gamma.!Sprites","FF9"):"."; T ^ hdofile(A$,F$) rA$="*****": |  : :  Ȏ , A$,"D")>0:"rename "+F$+" !Gamma."+F$  A$,"R")>0:"remove "+F$ & A$,"G")>0:"settype "+F$+" DE6" & A$,"M")>0:"settype "+F$+" DE5"     spc 1"Press SPACE or click mouse to continue *";  ȗX%,Y%,B%  B%0=32  127  & 0makefile(A$) : X%=A$ D NB$ XB$<>"*****":#X%,B$ bB$="*****" l#X% v"settype "+A$+" FEB"   makefile1(A$,C$)  X%=A$  B$ B$<>"*":#X%,("&"+B$)  B$="*" #X% "settype "+A$+" "+C$   "D ",!GP-Start "D ",GP-Custom  "D ",GP-Import "D ",GP-Plot  "D ",GP-Spr *"D ",GP-Totals 4"D ",GP-Info >"D ",16_Header H"D ",16_Logo R"D ",16_Minerva \" ",!Configure f" ",!Boot p"D ",Dumper z"R ",!Copy "D ",!GammaBoot "D ",Gamma+ "D ",Gamma+E "D ",RAMManager "D ",Delta+R "G ",SALES85 "G ",SALES86 "G ",SALES87 "M ",MACRO " ",MinerDia "G ",HistDat "G ",ScatDat "G ",LineDat "G ",PieDat " ",256_gpAd " ",256_Photo $" ",256_Colour ."*****","*" 8 B "*| > !Run for GammaPlot" L& "*set Gamma$Path .,%." V( "*iconsprites .!Sprites" `& "*set Gamma$GPPrefix " j& "*set Delta$GPPrefix " t# "*set file$type_de5 SG+Macro" ~# "*set file$type_de6 SG+Graph" ; "*set alias$@runtype_de5 obey .!Run " ; "*set alias$@runtype_de6 obey .!Run "  "*set Gamma$T """"" % "*set Gamma$T " X "*IF Gamma$T RIGHT 1 = ""."" THEN *seteval Gamma$T Gamma$T LEFT (LEN Gamma$T - 1)" 2 "*IF Gamma$T = """" THEN *set Gamma$T ""@"""  "*dir "  "*unset Gamma$T"  "*BASIC Gamma:Init"  "*****"   "*| > !Boot for GammaPlot" ( "*iconsprites .!Sprites"  & "*set Gamma$GPPrefix " & "*set Delta$GPPrefix " # "*set file$type_de5 SG+Macro" (# "*set file$type_de6 SG+Graph" 2; "*set alias$@runtype_de5 obey .!Run " <; "*set alias$@runtype_de6 obey .!Run " F "*****" P Z$ "*| > !GP-Start for GammaPlot" d3 "*RMensure RAMManager 1.09 /Gamma:RAMManager" n( "*RMensure Gamma 0 /Gamma:Gamma+*" x( "*RMensure Dumper 0 /Gamma:Dumper" I "*IF """" = ""*"" THEN RMensure Delta 0 /Delta:Delta*" I "*IF """" = ""*"" THEN RMensure Delta 0 /Gamma:Delta*"  "*BASIC "  "*****"  F ----DATA for !Sprites------------------------------------------- C6,0,0,0,10,0,0,0,70,A,0,0,D4,2,0,0,21,67,61,6D,6D,61,0,0,0,0,0 C0,4,0,0,0,10,0,0,0,0,0,0,0,7,0,0,0,2C,0,0,0,80,1,0,0,C,0,0,0,0 E77,77,F7,77,87,77,77,70,77,77,77,FF,77,77,77,77,0,0,0,0,0,0,0,70 C88,97,99,90,77,0,FF,88,FF,0,70,77,0,0,0,0,0,0,0,87,78,79,77,90 C79,FF,88,88,88,FF,97,77,0,0,0,0,0,0,70,88,97,77,73,70,FF,88,33 C33,33,88,FF,77,0,0,0,80,88,88,78,87,78,89,88,FF,88,88,33,33,33 C88,88,FF,0,0,0,80,88,88,78,78,88,77,88,70,FF,88,11,11,11,88,FF C77,0,0,0,0,88,88,87,78,87,78,B4,40,44,FF,88,88,88,FF,97,77,0,0 C0,0,88,78,88,87,89,88,77,70,77,44,FF,88,FF,33,7B,77,0,0,0,0,47 E87,78,87,87,78,79,70,77,77,77,FF,77,77,77,77,0,0,0,0,77,88,87,87 "C78,77,97,90,77,0,FF,88,FF,0,70,77,0,0,0,0,87,78,74,88,88,77,70 ,C90,79,FF,88,88,88,FF,97,77,0,0,0,70,88,C7,87,78,87,78,74,70,FF 6C88,33,33,33,88,FF,77,0,0,0,70,88,78,88,77,84,78,F7,F0,88,88,33 @C33,33,88,88,FF,0,0,0,70,88,87,78,C7,88,78,78,70,FF,88,11,11,11 JE88,FF,77,0,0,0,70,76,88,77,88,78,3,B7,40,44,FF,88,88,88,FF,97,77 TD0,0,0,0,80,88,87,88,37,30,7A,70,77,44,FF,88,FF,33,7B,77,0,0,0,0 ^C77,77,77,77,77,77,97,90,77,4B,44,FF,33,3B,B3,77,0,0,40,0,0,0,0 hD0,FF,0,0,0,0,0,0,FF,0,0,0,0,FF,FF,FF,0,0,0,0,F0,FF,F,0,0,0,0,FF rEFF,FF,0,0,0,FF,FF,FF,0,0,0,0,FF,FF,0,0,0,0,FF,FF,FF,FF,FF,0,0,FF |DFF,FF,0,0,0,F0,FF,F,0,0,0,FF,FF,FF,FF,FF,FF,FF,0,FF,FF,FF,F0,FF DFF,0,FF,FF,F0,F,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,F0,FF,FF,F0 CF0,FF,F,F,0,FF,FF,FF,FF,FF,FF,FF,0,FF,FF,FF,0,0,0,FF,F,FF,FF,0 E0,0,FF,FF,FF,FF,FF,0,0,FF,FF,FF,0,0,F0,FF,F0,F0,FF,F,0,0,0,FF,FF EFF,0,0,0,FF,FF,FF,0,0,FF,F,FF,F,FF,0,0,0,0,0,FF,0,0,0,0,FF,FF,FF D0,F0,FF,0,FF,FF,0,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,0,FF,F,F0,F,FF,F C0,0,0,0,0,0,0,0,0,0,FF,FF,FF,F0,FF,0,FF,FF,F0,FF,0,0,0,0,0,0,0 D0,0,0,FF,FF,FF,F0,FF,F0,FF,F,F0,FF,0,0,0,0,0,0,0,0,0,0,FF,FF,FF DF0,F,FF,FF,0,FF,FF,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,0,F0,FF,F,FF,FF C0,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,0,F0,FF,F0,FF,0,0,0,0,0,0,0,0,0 D0,0,0,FF,FF,FF,0,FF,F,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,80,1 C0,0,66,69,6C,65,5F,64,65,36,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,7 E0,0,0,2C,0,0,0,2C,0,0,0,C,0,0,0,77,77,77,77,77,77,77,77,77,77,77 C77,77,77,77,77,77,0,0,0,77,FF,FF,FF,FF,7F,88,F7,FF,FF,FF,FF,FF CFF,FF,FF,77,0,0,0,77,FF,FF,FF,FF,87,78,FF,FF,7F,77,F7,7F,F7,7F CFF,77,0,0,0,77,FF,FF,FF,7F,88,F7,FF,FF,FF,FF,FF,FF,FF,FF,FF,77 C0,0,0,77,8F,88,88,FF,87,78,8F,F8,7F,77,7F,77,F7,FF,FF,77,0,0,0 &C77,8F,88,88,7F,7F,88,F7,F8,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,FF 0CFF,FF,87,F8,87,78,FF,7F,F7,77,77,FF,77,FF,77,0,0,0,77,FF,FF,7F :C88,8F,8F,88,F7,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,FF,87,F8,87 DCF7,78,FF,CC,F7,FF,FF,FF,FF,FF,77,0,0,0,77,FF,7F,88,FF,87,78,FF NCFF,CC,F7,FF,FF,CC,F7,FF,77,0,0,0,77,FF,87,F8,7F,F8,88,F7,FF,CC XCF7,FF,FF,CC,F7,CC,77,0,0,0,77,7F,88,FF,87,78,8F,78,FF,CC,F7,CC bCF7,CC,F7,BB,7B,0,0,0,77,7F,88,7F,88,F7,8F,78,FF,CC,F7,CC,F7,BC lCBB,CB,77,0,0,0,77,7F,F8,87,78,FF,88,78,FF,BC,BB,BB,BB,BB,F7,CC vD77,0,0,0,77,FF,7F,88,F7,88,78,FF,BF,BB,F7,CC,F7,CC,F7,CC,77,0,0 E0,77,FF,8F,88,8F,88,FF,FF,FF,CC,F7,CC,F7,CC,F7,CC,77,0,0,0,77,77 D77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,0,0,40,84,1,0,0,73 E6D,21,67,61,6D,6D,61,0,0,0,0,2,0,0,0,8,0,0,0,0,0,0,0,1B,0,0,0,AC E0,0,0,18,1,0,0,C,0,0,0,10,F0,F0,F0,10,F0,F0,F0,10,D0,D0,D0,10,D0 CD0,D0,10,B0,B0,B0,10,B0,B0,B0,10,90,90,90,10,90,90,90,10,70,70 C70,10,70,70,70,10,50,50,50,10,50,50,50,10,30,30,30,10,30,30,30 E10,0,0,0,10,0,0,0,10,0,40,90,10,0,40,90,10,E0,E0,0,10,E0,E0,0,10 D0,C0,0,10,0,C0,0,10,D0,0,0,10,D0,0,0,10,E0,E0,B0,10,E0,E0,B0,10 C50,80,0,10,50,80,0,10,F0,B0,0,10,F0,B0,0,10,0,B0,F0,10,0,B0,F0 E8,88,18,71,18,88,0,10,F1,F8,12,40,1,80,88,88,88,88,0,F0,38,33,F8 E40,1,10,88,88,88,18,0,F0,18,11,F8,40,1,80,88,18,88,88,0,10,F1,F8 C11,40,1,80,88,81,88,88,11,18,11,11,0,40,8,80,18,78,81,88,11,11 E18,18,0,40,8,80,88,88,88,88,11,11,11,11,0,40,1,10,88,88,88,18,11 C11,11,11,0,40,1,0,0,0,0,10,11,11,11,11,0,40,0,0,0,0,0,0,0,0,F0  EFF,0,F0,0,F0,FF,F,FF,FF,0,F0,FF,FF,FF,F0,0,0,0,FF,F,0,0,F0,FF,FF DFF,F0,0,0,F0,F,FF,0,0,0,F0,FF,0,F0,0,0,FF,0,F0,F,0,0,0,0,0,F0,0  DF0,F,0,0,FF,0,0,0,0,0,F0,0,F0,FF,0,F0,FF,0,0,0,0,0,F0,0,0,FF,FF *DFF,F,0,0,0,0,0,F0,0,0,0,0,0,0,0,0,0,0,0,F0,84,1,0,0,73,6D,61,6C 4E6C,5F,64,65,36,0,0,0,2,0,0,0,8,0,0,0,0,0,0,0,B,0,0,0,AC,0,0,0,18 >E1,0,0,C,0,0,0,10,F0,F0,F0,10,F0,F0,F0,10,D0,D0,D0,10,D0,D0,D0,10 HCB0,B0,B0,10,B0,B0,B0,10,90,90,90,10,90,90,90,10,70,70,70,10,70 RC70,70,10,50,50,50,10,50,50,50,10,30,30,30,10,30,30,30,10,0,0,0 \C10,0,0,0,10,0,40,90,10,0,40,90,10,E0,E0,0,10,E0,E0,0,10,0,C0,0 fC10,0,C0,0,10,D0,0,0,10,D0,0,0,10,E0,E0,B0,10,E0,E0,B0,10,50,80 pC0,10,50,80,0,10,F0,B0,0,10,F0,B0,0,10,0,B0,F0,10,0,B0,F0,77,77 zC77,77,77,77,77,77,77,47,77,77,77,8F,88,F8,88,88,FF,FF,FF,47,77 C77,77,FF,FF,88,F8,FF,6F,F6,F6,47,77,77,77,FF,8F,F8,88,FF,6F,FF CFF,47,77,77,77,FF,88,FF,8F,F8,FF,FF,CC,47,77,77,77,8F,F8,FF,FF C88,CC,B7,BB,47,77,77,77,8F,88,FF,8F,88,BB,FB,CC,47,77,77,77,FF C88,88,88,F8,CC,F7,CC,47,77,77,77,77,77,77,77,77,77,77,77,47,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF DFF,FF,88,88,80,1,0,0,66,69,6C,65,5F,64,65,35,0,0,0,0,4,0,0,0,10 C0,0,0,0,0,0,0,7,0,0,0,2C,0,0,0,2C,0,0,0,C,0,0,0,77,77,77,77,77 C77,77,77,77,77,77,77,77,77,77,77,77,0,0,0,77,FF,FF,FF,FF,7F,88 CF7,FF,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,FF,FF,FF,87,78,FF,FF C7F,77,F7,7F,F7,7F,FF,77,0,0,0,77,FF,FF,FF,7F,88,F7,FF,FF,FF,FF CFF,FF,FF,FF,FF,77,0,0,0,77,8F,88,88,FF,87,78,8F,F8,7F,77,7F,77 CF7,FF,FF,77,0,0,0,77,8F,88,88,7F,7F,88,F7,F8,FF,FF,FF,FF,FF,FF $CFF,77,0,0,0,77,FF,FF,FF,87,F8,87,78,FF,7F,F7,77,77,FF,77,FF,77 .C0,0,0,77,FF,FF,7F,88,8F,8F,88,F7,FF,FF,FF,FF,FF,FF,FF,77,0,0,0 8C77,FF,FF,87,F8,87,F7,78,FF,7F,77,F7,7F,77,FF,F7,77,0,0,0,77,FF BC7F,88,FF,87,78,FF,FF,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,87,F8 LC7F,F8,88,F7,FF,7F,77,7F,F7,7F,77,FF,77,0,0,0,77,7F,88,FF,87,78 VC8F,78,FF,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,7F,88,7F,88,F7,8F,78 `CFF,7F,77,F7,77,F7,7F,FF,77,0,0,0,77,7F,F8,87,78,FF,88,78,FF,FF jCFF,FF,FF,FF,FF,FF,77,0,0,0,77,FF,7F,88,F7,88,78,FF,FF,7F,77,FF tC77,F7,77,FF,77,0,0,0,77,FF,8F,88,8F,88,FF,FF,FF,FF,FF,FF,FF,FF ~CFF,FF,77,0,0,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77 D77,0,0,40,84,1,0,0,73,6D,61,6C,6C,5F,64,65,35,0,0,0,2,0,0,0,8,0 D0,0,0,0,0,0,B,0,0,0,AC,0,0,0,18,1,0,0,C,0,0,0,10,F0,F0,F0,10,F0 CF0,F0,10,D0,D0,D0,10,D0,D0,D0,10,B0,B0,B0,10,B0,B0,B0,10,90,90 C90,10,90,90,90,10,70,70,70,10,70,70,70,10,50,50,50,10,50,50,50 D10,30,30,30,10,30,30,30,10,0,0,0,10,0,0,0,10,0,40,90,10,0,40,90 E10,E0,E0,0,10,E0,E0,0,10,0,C0,0,10,0,C0,0,10,D0,0,0,10,D0,0,0,10 CE0,E0,B0,10,E0,E0,B0,10,50,80,0,10,50,80,0,10,F0,B0,0,10,F0,B0 C0,10,0,B0,F0,10,0,B0,F0,77,77,77,77,77,77,77,77,77,47,77,77,77 C8F,88,F8,88,88,FF,FF,7F,47,77,77,77,FF,FF,88,F8,FF,6F,F6,76,47 C77,77,77,FF,8F,F8,88,FF,FF,FF,7F,47,77,77,77,FF,88,FF,8F,F8,7F C77,7F,47,77,77,77,8F,F8,FF,FF,88,FF,FF,7F,47,77,77,77,8F,88,FF C8F,88,7F,7F,7F,47,77,77,77,FF,88,88,88,F8,FF,FF,7F,47,77,77,77 C77,77,77,77,77,77,77,77,47,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF (CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF 20FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,88,88,* The program "GammaConv" may be used to convert any BACKUP GammaPlot disk in drive :0 into a disk suitable for use with RISC OS. To use it, simply double-click SELECT on the program "GammaConv" and, when prompted, place a BACKUP GammaPlot disk in drive :0 and press SPACE. The disk will then be converted. Hard Disk users should convert a backup on floppy and then use the Desktop to transfer this to their Hard Disk, removing the old version first. If you have started the application by double-clicking it from the Desktop and it does not return there when you quit, entering: *quit [RETURN][RETURN] will usually return you to the desktop. MINERVA SOFTWARE - EXETER (0392) 437756. January 1989 Welcome to the Archimedes with RISC OS! It is Minerva's policy to provide complete support for Users including full upward compatability, wherever possible. Users will be pleased to know that all existing Minerva Software for the Archimedes is compatible with RISC OS, when used in conjunction with the programs on this disk. The Archimedes is one of the most powerful small micro computers in the world, opening up a wide range of possibilities for applications. Minerva are at the forefront of this technology with a promise of more exciting, powerful software. All future software will be RISC OS desktop compatible tasks designed to run concurrently with other RISC OS tasks of the same nature. The first of this new generation of multi-tasking aplications was Home Accounts which, you may be surprised to know, has been on sale since 1988! This was made possible by advanced techniques which allow the software to run on the old Arthur 1.2 as well as the new RISC OS. Multi-Delta, the multi-tasking database system, is the first of our new range of professional business software which will include a spreadsheet, business graphics and art package. Users of RISC OS will soon discover a wide range of new facilities which are available to them. The foremost of these is full, concurrent multi-tasking with other RISC OS applications. The ease of use is unsurpassed with data being activated simply by picking it up and dropping it where you want it actioned. Minerva are continuing to develop a comprehensive range of multi-tasking applications which will take full advantage of the amazing integration capabilities of RISC OS. This will contribute to an easier life for you, the User! For complete details of the wide range of products available from Minerva Software, Please contact us at: 69a Sidwell Street, Exeter, Devon, EX4 6PH. Telephone: (0392) 437756.Users of the School Administrator should find operation to be as normal when using RISC OS, although we do not normally recommend starting from the Desktop. However, you will soon discover that the printing functions are inoperative! To overcome this, the library for this package should be replaced by the corresponding library from this directory to the correct directory on your working disks. The library is called "S-Lib" and you might copy it by (eg): *copy :0.Minerva.SchoolAdmn.S-Lib :0.$.SCHOOL.S-Lib f~c~vp Alternatively, the new library may be dragged into the School Administrator directory using the Desktop. >S-Lib  vars ș &80301 sd% (kde%=0:CALC=0:calc$="":rmswi%=900:f$="":mode%=12:scrh%=31:back%=177:find$="":pr$="#1":M%=1:UPD%=:proff 2 < F define P%23,135,24,&66,96,248,96,96,254,0 Z!23,136,0,24,56,127,56,24,0,0 d!23,137,0,24,28,254,28,24,0,0 n#23,138,24,24,24,24,126,60,24,0 x#23,139,0,24,60,126,24,24,24,24 23,161,0,0,0,24,24,24,24,24 23,162,0,0,0,31,0,0,0,0 23,163,0,0,0,31,24,24,24,24 23,164,0,0,0,248,0,0,0,0 !23,165,0,0,0,248,24,24,24,24 23,166,0,0,0,255,0,0,0,0 !23,167,0,0,0,255,24,24,24,24 23,168,24,24,24,24,0,0,0,0 #23,169,24,24,24,24,24,24,24,24 23,170,24,24,24,31,0,0,0,0 #23,171,24,24,24,31,24,24,24,24 23,172,24,24,24,248,0,0,0,0 $23,173,24,24,24,248,24,24,24,24  23,174,24,24,24,255,0,0,0,0 $23,175,24,24,24,255,24,24,24,24 $23,228,60,96,48,60,102,102,60,0 "'23,255,0,126,126,126,126,126,126,0 , 6 @ ch(a$) Ja$=apdir+a$ Ta$ ^ h rݤlocate(f$) | C%,T% OT%=::C%=(f$):C%>0:#C%:T%= "Mount <"+f$+">, Press a key...";:G%=:  T%= =T%  ݤArfVar(A$) sd%,L%:sd%-1  =292:=""::=$sd% ș&23,A$,sd%,200,0,3,,L%  sd%?L%=13  =$sd%  !h(z%):w:cls:h2:SD03("")  Ȏ z%  0:A$=" "  1:A$="Main menu" & 2:A$="Information" 0 3:A$="Initialising" : 4:A$="Pupils" D 5:A$="Add Pupil" N 6:A$="Edit Pupil" X 7:A$="Entries" b 8:A$="Examinations" l 9:A$="" v 10:A$="Processing"  11,99:A$="Checking System"  12:A$="Payments"  13:A$=" "  :A$=" "  centre(A$)    sh(a$) Lhc$=26+10+10+" "+13+" " centre(a$)   centre(a$):26  /vdu20:0,3)(16*wid%)9*wid%-(a$/2),3)a$    *menu(I%) 4menu2(I%):menu3: > Hmenu2(I%):I%=2 Rp("Select Option ")::26 \0J%=I%:menu$="":3dbox2(19,24,40,16,255):A$ f A$<>64 pB$=A$,2):A$=A$:C%=A$ zB$,"?")>0mcheck(B$,C%) B$=A$,2):A$="Esc":C%=27  C%<>326,I%)A$"."; 12,I%)B$; menu$=menu$+C% O%=-C%O%=I% (I%=I%+1:C%=42B$="Surname/Forename" xx%=1+O%-J%    menu3 31,0,O%:0:136 *SD10 xx%,menu$  26:  'ݤofile:A$="No File Open":S%=0:=A$ $ *SDstat .="File="+$sd% 8 B*mcheck( B$, C%):B$=B$,B$,"?")-1) L&ext$,C%)=0:C%=32:B$=B$+" (N/A)" V ` jJw:26,10,8:scrw%=:28,0,28,scrw%,5:wid%=1:scrw%>44wid%=2:128:7: t ~b:*SDbeep   p(A$):SD03(A$)   6cls:15:vdu20:26:0:ȓȐ0,80,1279,25*32-4:w:  cls1:128:7:26,12:   graph /m%(0)=-:ș rmswi%,10 I%,,T%:m%(1)=T%-I% $m%(2)=-:ș rmswi%,10 ,,m%(3) $b%=0:I%=02:b%27 *mess("Reset Printer, Press ") G%=19flushit  SD03("")  G%=27:*fx21,3    flushit  *fx21,3 *fx5   pron:28,78,30,78,30,2  & 0proff:3,26,31,30,scrh% : D Npcode(P%) XP%=11,18,1,27,1,69 bP%=21,27,1,70 lP%=3 1,27,1,70,1,15 vP%=41,27,1,70,1,18 P%=5 1,27,1,45,1,1 P%=61,27,1,45,1,0 P%=7 1,27,1,87,1,1 P%=8 1,27,1,87,1,0   3graph2(x%,y%,z%):D%=x%*32:wid%=1D%=D%+(D%/4) 3vdu20:ȓ D%+180*R%/L%,32*y%+12,180-180*R%/L%,4 D%+180,32*y%+6: BY 0,20 4 !ȓ Ȑ D%,32*y%+4,180*R%/L%,20 5z%vdu20:N%<=R% D%+180*N%/L%,32*y%+8: BY 0,12    Bݤchdate(a$):d%=a$:m%=a$,4,2):y%=a$,7,2):*SDdays d%,m%,y%   =G% * 4ݤdate(F%):date$ >date$=strdate(F%) Hm%=3*date$,4,2) RR=date$,2)+" "+"**JanFebMarAprMayJunJulAugSepOctNovDec",m%,3)+" 19"+date$,2) \ݤstrdate(a%) f*SDdate a% p =$sd% z ݤival(a$) a$,".")=0a$=a$+".00" a$=a$+2-a$+a$,"."),"0") =(a$,a$-3)+a$,2))  messwind(x%,y%) cls   messwind1(x%,y%)  '3dbox2(40-x%2,y%+16-y%2,x%,y%,8)   grec(t%,z%) z%>0:*SDfile suppl $t%=0:*SDgrec 1 .t%>0:*SDlocate t% 8 B L throw Vp$(13)="TEST":1,12 ` lc%=0: j tuserdate(z%) ~Z$,X$,M%,M$,D%,D$ (z%>0:Z$=$,5,11)date$=date(Q%): X$=Z$,4,3)  Z$,1)="0" Z$=Z$,10) 7M%="***JanFebMarAprMayJunJulAugSepOctNovDec",X$)/3 M%<10M$="0"+M% M$=M% "D%=Z$:D%<10D$="0"+D%D$=D% date$=D$+"/"+M$+"/"+Z$,2) )z%<>2:SD08("Enter date : ",8,date$) z%<>2:date$=$sd% Q%=chdate(date$)   SDRESET D Routine to reset the new delta system for the archimedes where ! the disk has to be replaced  ݤapdir:T$ (5T$=ArfVar("Delta$APPrefix"):T$="":T$="&.SCHOOL" 2T$,1)<>"."T$=T$+"." <=T$ F Pݤaddir:T$ Z:T$=ArfVar("Delta$ADPrefix"):T$="":T$="&.SCHOOL.DATA" dT$,1)<>"."T$=T$+"." n=T$ x addir:"dir "+addir):  +asetdir(T$):T$=""T$="*":addir:T$   getp O%>=0:h(3) )SD03("Application (C) Merlyn Kline")  w 25,25); =0:messwind1(50,15):''10;:*SDdh "Please wait... " XDISKIN(addir+"S-PARMS"):X%=(addir+"S-PARMS"):P$(17):I%=017:#X%,P$(I%)::#X% .O%>=04:'':I%=813:5P$(I%)::(100) O%=0  " ,DISKIN(F$) 6T% @GT%=(F$):T%>0#T%:mess("Mount disk with "+F$+", press a key ") J T%: T ^openfiles ht$ r*SDclose ? |openone(0,1,"S-Pupil") openone(2,3,"S-Exams") openone(4,5,"S-ExLnk") openone(6,7,"S-Staff") t$="": w::26:messwind1(40,10) 1:'13;:*SDdh "Warning",,0 p0:''" The system has been illegally exited."'" The following files may be corrupted:"''(20-t$/2);:4:t$ *SD6 "",w %w::26:messwind1(50,6):1,2); $*SDdh "You MUST check your data" *SD6 "",w 7:128:26:w::26:  openone(T%,U%,T$) %asetdir(P$(T%)):asetdir(P$(U%)) *SDopen T$,D,M%25  *SDfirst  *SD19 A & filcol 0 *SD13 &36 :$(G%1)=1:G%=G%128:t$=t$+T$+" " DG%=G%1:*SD14 G% &36 N *SD43 X *SDsub.0 YN%>R%D%<0:*SDfirst b *SD36 lN%<=R%N%>0: v *SDfirst *SDnext   unbreak I%,T$ 5I%=03:T$="S-"+"PupilExamsExLnkStaff",I%*5+1,5) *SD13 &36,T$ G%=G%128:*SD14 G%,&36,T$ :  palset 19,0,16,0,0,0 19,1,16,240,0,0 19,2,16,0,240,0 19,3,16,240,240,0 19,4,16,0,0,240 19,5,16,240,0,240 *19,6,16,0,240,240 419,7,16,240,240,240 >19,8,16,240,240,0 H19,9,16,192,192,0 R19,10,16,160,160,0 \19,11,16,128,128,0 f19,12,16,96,96,0 p19,13,16,64,64,0 z19,14,16,32,32,0 19,15,16,0,0,0   3dbox(X1,Y1,X2,Y2,C)  F "C>127C<255 F=0:C-=128 F=1 B=12 B2=14  F 10 13 " X1,Y2:X1,Y1:&55,X1+B2,Y2-B X1+B2,Y1+B:&55,X1,Y1  F 13 10 !X2,Y2:X2,Y1:&55,X2-B2,Y2-B X2-B2,Y1+B:&55,X2,Y1  F 11 12 !X1,Y2:X2,Y2:&55,X1+B2,Y2-B $X2-B2,Y2-B:&55,X2,Y2 . F 12 11 8&X1,Y1:X1+B2,Y1+B:&55,X2-B2,Y1+B BX2,Y1:&55,X1,Y1 L#C=256vers=9:C=1: C=256:C=8 V3C=255vers=9:C=0:7:128: C=255:C=8:0:136 ` C j3ȓȐX1+B2+2,Y1+B+4,X2-X1-(B2*2+4),Y2-Y1-(B*2+8) t ~  commbox 3dbox(0,16,1279,76,256) 28,1,30,78,30   SD08(P$,L%,D$)  commbox *SD08 P$,L%,D$,w  :26   SD03(P$) X%  commbox *SD03 P$,w  (X%= 226:X%+1,30);: < FSD06(P$) P commbox Z*SD06 P$,w d :26: n xSD09(P$) vers>9 commbox:*SD09 P$,w    P$="":P$="Sure (Y/N) ? " SD03(P$):::*SD05 (G%<>"Y" G%<>"N" G%<>27:*SDbeep  G%="N" G%="Y" G%=27  SD03("")  26:  3dbox2(x1,y1,w,h,c):15 O3dbox((x1*8*2)-16,((31-y1)*8*4)-16,((x1+w)*8*2)+15,((31-(y1-h))*8*4)+15,c) 28,x1,y1,x1+w-1,y1-h+1 c=80:136 " , 6 colours @vers=9: J*SDcolour 1,0 T*SDcolour 2,8 ^*SDcolour 3,8 h*SDcolour 4,0 r*SDcolour 5,7 |*SDcolour 6,4   ݤvers:$sd%,a:*SD55  a=("&"+$(sd%+2)): a<10:a=9 =a  delta(A$)  0<0  T%:T%=   :T%= T% ArfVar("Delta$Boot")=A$ *unset Delta$Boot -1:"Cannot load System DeltaPlus module" '"This module must be on the disk." &'"Please re-try.": 0 :9"set Delta$Boot "+A$:"Exec "+apdir+"!S-Start":*gos D N X *SDbbc b*unset Delta$Boot l v ݤstrac(T$):T$=T$,2) ȕT$=48:T$=T$,2): =T$  h2 3dbox(0,928,574,1023,8) 3dbox2(33,3,46,1,8):26 ȓȐ528,924,30,30 $13:574,942:BY-14,-14:81,0,14 $12:526,942:BY-14,-14:81,0,14 $10:526,938:BY-14,-14:81,14,0 *0:ȓȐ0,880,508,44:ȓȐ576,944,703,79 -151,948:ș"OS_SpriteOp",256+28,,"dpa",0 -640,958:ș"OS_SpriteOp",256+28,,"sch",0  26:   comm:I% *28,1,30,78,1 4 O%=-"*" >SD08("*",200,"") Hcomm2:$sd%=$(sd%+1) R$sd%="": \.SD03("Press SHIFT"):3dbox2(1,28,78,24,8) f vers>9 p(T$:T$=28+1+28+78+5:*SDvdu 3,T$ z28,1,30,78,30 *SD47 $sd%,w 26  614:ș"OS_Byte",229,0,I%:$sd%:ș"OS_Byte",229,I% 15:SD06("")  cls:vdu20:  ݤpr:X%,Y%:G%=27:=0 ,rd>3:Y%=rd-3:2,1,0,1,0,1,0,3:Y%=rd X%=:=0::>750 rd>Y% =X%+:=rd>Y%  evaluation  *SD55  *SDupper $$sd%,"EVALUATION")=0: .3dbox2(20,23,40,17,8):1 813,1);:*SDdh "WARNING" B40:1,4)"The System DeltaPlus you are using is" L," an EVALUATION copy only and has some" V-" features restricted. This is suitable" `," for an over-view of this application" j+" but you MUST install a full version" t+" (by using the !COPY utility on your" ~-" System DeltaPlus disk) if you wish to" '" make proper use of the package."  -" This evaluation version will time-out" ," after a sensible period has elapsed," )" which may corrupt your test data."  SD06("")  cls:  filcol:vers<10: *SDcolour 103,8 *SDcolour 104,0    mode 12:palset  ( 2 sdreset <T%,X%,Y%,A%:X%=:Y%= F:26,10,8 P <79 Z *SDreset d colours n x T%=:ș"OS_Byte",229,1,A%  T%= T%  *SDbeep JSD06("Insert original DeltaPlus disk in drive :0 and press any key ") %G%=27:1:0,"Protection Failure"  SD03("")   *SDreset E  colours T%  *SDbeep GSD06("OK - Remove disk (replace if necessary) and press any key ")  SD03("")  "ș"OS_Byte",229,A% , 6ș&80301sd% @X%,Y%);: J T ^$calc:SD08("Eval: ",200,calc$) h calc1 r&a$="0":calc$=$sd%:calc$<>""calc2 |:w:cls:3dbox2(1,28,78,24,8):5,6);:*SDdh calc$,wid% .5,10);:$sd%="= "+a$,16):*SDdh $sd%,wid%  SD06("") $G%=G%&DF:G%=80cls:calc$"="a$ 3:w:cls:O%=-"?":    calc2  .=6::a$=calc$:CALC=a$:: :,$ CALC=calc$:a$=CALC:   showex 5EXAMS:"SDtab S-ExLnk":"SDview 18,7,S-ExLnk": 53dbox2(1,28,78,12,255):27,3);:*SDdh "No Exams"   &vdu20:128:7 0 7:128 : D N report X @%=&907:6,3,4,15::*fx229,1 b( 255)=17: lh(0):sh("E R R O R") v%3dbox2(1,28,78,24,8):0:136:30 ::60,22)"Line "; SD06(""):G%<>27-2: A$="Program Terminated" 19*wid%-A$,6);:*SDdh A$ '  *fx229 *fx4  The program "SigmaConv" may be used to convert any BACKUP SigmaSheet disk in drive :0 into a disk suitable for use with RISC OS. To use it, simply double-click SELECT on the program "SigmaConv" and, when prompted, place a BACKUP SigmaSheet disk in drive :0 and press SPACE. The disk will then be converted. Hard Disk users should convert a backup on floppy and then use the Desktop to transfer this to their Hard Disk, removing the old version first. If you have started the application by double-clicking it from the Desktop and it does not return there when you quit, entering: *quit [RETURN][RETURN] will usually return you to the desktop. > :4.SigmaConv  )"This utility will convert a BACKUP" (*"of your SigmaSheet disk into a disk" 2'"which may be BOOTed or used from" <""the Desktop, under RISC OS." F P Z fpe% 30000 d n :::7:( 255)=17-3: x5"Mount SigmaSheet BACKUP to convert in drive :0" spc ""Converting, Please wait...." convert(":0") '"Done!":7   convert(dir$) "Dir "+dir$ % dir$=":0" *namedisc :0 RSigma *cdir !Sigma d|C  A$,F$  "."; dofile(A$,F$) A$="*****" "*rename !Boot !Sigma.Init ,X%="!Boot" 6#X%,"*!Sigma" @#X%:*settype !Boot FFE J(dDD:makefile("!Sigma.!Run"):"."; T)DFE:makefile("!Sigma.!Boot"):"."; ^*tjE:makefile("!Sigma.!Start"):"."; h3TlF:makefile1("!Sigma.!Sprites","FF9"):"."; r2T@J:makefile1("!Sigma.!Screen","FFC"):"."; |fpe    fpe Pinsert("Acorn RISC OS Applications disk 1",":0.!System.Modules.FPEmulator") 'F%=":0.!System.Modules.FPEmulator"  E%=#F% #F% 1"Load :0.!System.Modules.FPEmulator "+~fpe% >insert("the Sigma disk being converted",":0.!Sigma.!Run") 8"Save :0.!Sigma.FPEmulator "+~fpe%+" "+~(fpe%+E%) '"SetType :0.!Sigma.FPEmulator FFA"   insert(A$,B$)  !:::7:( 255)=17-3: & 0)7:'"Please insert "A$" in drive :0" :spc DF%=(B$):F%:#F% NF% X b ldofile(A$,F$) vA$="*****":   : :  Ȏ , A$,"D")>0:"rename "+F$+" !Sigma."+F$  A$,"R")>0:"remove "+F$ & A$,"S")>0:"settype "+F$+" DE4" & A$,"F")>0:"settype "+F$+" DE8"     spc 1"Press SPACE or click mouse to continue *";  ȗX%,Y%,B%  B%0=32  127   * 4makefile(A$) > X%=A$ H RB$ \B$<>"*****":#X%,B$ fB$="*****" p#X% z"settype "+A$+" FEB"   makefile1(A$,C$)  X%=A$  B$ B$<>"*":#X%,("&"+B$)  B$="*" #X% "settype "+A$+" "+C$    " ",!Boot  " ",!Configure  "R ",!COPY  "D ",!Start $ "D ",Delta+R . "R ",FPE 8 "D ",RAMManager B "D ",Sigma L "D ",SigSheet V "D ",Sig_Spr ` "D ",SS-Info j "D ",SS-Totals t "D ",SS-Util ~ "D ",SS-Spr  "S ",BigBudget  "S ",CashFlow  "F ",Demo  "S ",Statistics "*****","*"   "*| > !Run for SigmaSheet" & "*set Sigma$Path .,%."  "*/sigma:!Screen" ( "*iconsprites .!Sprites" & "*set Sigma$SPPrefix " & "*set Delta$UPPrefix " " "*set file$type_de3 SSMacro"  "*set file$type_de4 Sheet" ; "*set alias$@runtype_de3 obey .!Run " ; "*set alias$@runtype_de4 obey .!Run " ( "*BASIC Sigma:Init" 2 "*****" < F! "*| > !Boot for SigmaSheet" P( "*iconsprites .!Sprites" Z& "*set Sigma$SPPrefix " d& "*set Delta$UPPrefix " n" "*set file$type_de3 SSMacro" x "*set file$type_de4 Sheet" ; "*set alias$@runtype_de3 obey .!Run " ; "*set alias$@runtype_de4 obey .!Run "  "*****"  " "*| > !Start for SigmaSheet" 0 "*RMensure RAMManager 0 /Sigma:RAMManager" ' "*RMensure Sigma 0 /Sigma:Sigma*" 6 "*RMensure FPEmulator 0 RMload Sigma:FPEmulator" 7 "*RMensure FPEmulator 0 RMload System:FPEmulator" % "*RMkill InternationalKeyboard"  "*Country Master" I "*IF """" = ""*"" THEN RMensure Delta 0 /Delta:Delta*" I "*IF """" = ""*"" THEN RMensure Delta 0 /Sigma:Delta*"  "*BASIC "  "*****"  "F ----DATA for !Sprites------------------------------------------- ,C4,0,0,0,10,0,0,0,C0,8,0,0,D4,2,0,0,21,73,69,67,6D,61,0,0,0,0,0 6C0,4,0,0,0,10,0,0,0,0,0,0,0,7,0,0,0,2C,0,0,0,80,1,0,0,C,0,0,0,0 @D77,77,F7,77,87,77,77,70,77,77,77,FF,77,77,77,77,0,0,0,20,22,2,2 JD70,88,97,99,90,77,0,FF,88,FF,0,70,77,0,0,0,22,22,22,22,22,22,22 TC22,92,79,FF,88,88,88,FF,97,77,0,0,0,70,88,88,88,88,88,88,88,77 ^CFF,88,33,33,33,88,FF,77,0,0,0,80,86,78,78,87,78,89,78,FF,88,88 hC33,33,33,88,88,FF,0,0,0,80,68,88,87,78,88,77,88,70,FF,88,11,11 rE11,88,FF,77,0,0,0,0,88,86,78,77,87,78,B4,40,44,FF,88,88,88,FF,97 |C77,0,0,0,0,88,68,88,77,89,88,77,70,77,44,FF,88,FF,33,7B,77,0,0 D0,0,0,67,88,77,67,88,77,79,77,77,77,FF,77,77,77,77,0,0,0,0,0,86 C78,87,87,68,77,97,77,0,FF,88,FF,0,70,77,0,0,0,0,60,88,77,74,88 E86,77,70,79,FF,88,88,88,FF,97,77,0,0,0,0,86,78,C7,87,78,87,78,77 CFF,88,33,33,33,88,FF,77,0,0,0,60,88,88,78,88,87,88,88,F7,88,88 C33,33,33,88,88,FF,0,0,0,22,22,82,87,78,27,22,22,72,FF,88,11,11 C11,88,FF,77,0,0,0,60,77,77,88,77,77,77,77,B7,44,FF,88,88,88,FF C97,77,0,0,0,0,0,87,78,87,88,37,30,7A,77,44,FF,88,FF,33,7B,77,0 D0,0,0,0,77,77,77,77,77,77,97,77,4B,44,FF,33,3B,B3,77,0,0,40,0,0 C0,0,0,FF,0,0,0,0,0,0,FF,0,0,0,0,FF,FF,FF,0,0,0,0,F0,FF,F,0,0,0 C0,FF,FF,FF,0,0,0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,F,0,FF,FF,FF CFF,FF,0,0,FF,FF,FF,F0,FF,FF,FF,FF,FF,FF,FF,F,FF,FF,FF,FF,FF,FF EFF,0,FF,FF,FF,0,FF,FF,0,FF,FF,0,F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF DFF,FF,0,F0,FF,F,F0,FF,F,0,0,FF,FF,FF,FF,FF,FF,FF,0,FF,FF,FF,0,0 CFF,FF,0,FF,FF,0,0,0,FF,FF,FF,FF,FF,0,0,FF,FF,FF,0,0,F0,FF,F,F0 CFF,F,0,0,0,FF,FF,FF,0,0,0,FF,FF,FF,0,0,F0,FF,F,F0,FF,F,0,0,0,0 DFF,0,0,0,0,FF,FF,FF,0,0,FF,FF,0,FF,FF,0,0,0,0,0,0,0,0,0,0,FF,FF &CFF,0,F0,FF,F,F0,FF,F,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,0,FF,FF,0,FF 0DFF,0,F0,F,0,0,0,0,0,0,0,0,FF,FF,FF,F0,FF,FF,F0,FF,F,FF,FF,F,0,0 :E0,0,0,0,0,0,FF,FF,FF,FF,FF,F,FF,FF,F0,FF,FF,F,0,0,0,0,0,0,0,0,FF DCFF,FF,0,0,F0,FF,F,0,0,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,0,0,FF,FF,0 ND0,0,0,0,0,0,0,0,0,0,0,0,FF,FF,FF,0,0,FF,F,0,0,0,0,0,0,0,0,0,0,0 XD0,0,FF,FF,FF,84,1,0,0,73,6D,21,73,69,67,6D,61,0,0,0,0,2,0,0,0,8 bD0,0,0,0,0,0,0,1B,0,0,0,AC,0,0,0,18,1,0,0,C,0,0,0,10,F0,F0,F0,10 lCF0,F0,F0,10,D0,D0,D0,10,D0,D0,D0,10,B0,B0,B0,10,B0,B0,B0,10,90 vC90,90,10,90,90,90,10,70,70,70,10,70,70,70,10,50,50,50,10,50,50 D50,10,30,30,30,10,30,30,30,10,0,0,0,10,0,0,0,10,0,40,90,10,0,40 C90,10,E0,E0,0,10,E0,E0,0,10,0,C0,0,10,0,C0,0,10,D0,0,0,10,D0,0 E0,10,E0,E0,B0,10,E0,E0,B0,10,50,80,0,10,50,80,0,10,F0,B0,0,10,F0 CB0,0,10,0,B0,F0,10,0,B0,F0,8,88,18,71,88,88,0,10,F1,F8,12,40,1 C80,88,88,88,88,0,F0,38,33,F8,40,1,80,88,88,88,18,0,F0,18,11,F8 C40,1,80,88,18,88,88,0,10,F1,F8,11,40,1,80,88,88,88,88,11,18,11 E11,0,40,8,80,88,78,88,88,11,11,18,18,0,40,8,80,88,88,88,88,11,11 E11,11,0,40,1,80,88,88,88,88,11,11,11,11,0,40,1,0,80,8,0,10,11,11 D11,11,0,40,0,0,0,0,F0,F,0,0,F0,FF,0,F0,0,F0,FF,FF,FF,FF,0,F0,FF DFF,FF,F0,0,0,FF,F0,F,0,0,F0,FF,FF,FF,F0,0,0,F0,F,FF,0,0,0,F0,FF C0,F0,0,0,0,FF,F0,F,0,0,0,0,0,F0,0,0,F0,F,FF,0,0,0,0,0,0,F0,0,0 DFF,F0,F,0,0,0,0,0,0,F0,0,F0,FF,FF,FF,FF,0,0,0,0,0,F0,0,0,F0,F,0 C0,0,0,0,0,0,F0,84,1,0,0,73,6D,61,6C,6C,5F,64,65,34,0,0,0,2,0,0 D0,8,0,0,0,0,0,0,0,B,0,0,0,AC,0,0,0,18,1,0,0,C,0,0,0,10,F0,F0,F0  C10,F0,F0,F0,10,D0,D0,D0,10,D0,D0,D0,10,B0,B0,B0,10,B0,B0,B0,10 C90,90,90,10,90,90,90,10,70,70,70,10,70,70,70,10,50,50,50,10,50  D50,50,10,30,30,30,10,30,30,30,10,0,0,0,10,0,0,0,10,0,40,90,10,0 *D40,90,10,E0,E0,0,10,E0,E0,0,10,0,C0,0,10,0,C0,0,10,D0,0,0,10,D0 4D0,0,10,E0,E0,B0,10,E0,E0,B0,10,50,80,0,10,50,80,0,10,F0,B0,0,10 >CF0,B0,0,10,0,B0,F0,10,0,B0,F0,77,77,77,77,77,77,77,77,77,47,77 HC77,77,88,88,88,88,F8,FF,FF,7F,47,77,77,77,8F,F8,FF,8F,F8,EE,EE RC7E,47,77,77,77,FF,88,FF,FF,FF,EE,99,79,47,77,77,77,FF,8F,F8,FF \CFF,EE,69,79,47,77,77,77,FF,88,FF,FF,FF,EE,99,79,47,77,77,77,8F fCF8,FF,8F,F8,EE,69,79,47,77,77,77,88,88,88,88,F8,EE,99,79,47,77 pC77,77,77,77,77,77,77,77,77,77,47,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF zCFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,88,88,D4,2,0,0,66,69 D6C,65,5F,64,65,34,0,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,7,0,0,0,2C,0 C0,0,80,1,0,0,C,0,0,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77 C77,77,77,0,0,0,77,FF,FF,FF,7F,88,F7,FF,FF,FF,FF,FF,FF,FF,FF,FF D77,0,0,0,77,33,33,33,33,33,33,33,F3,FF,FF,FF,FF,FF,FF,FF,77,0,0 E0,77,88,88,88,88,88,88,88,F7,FF,FF,FF,FF,FF,FF,FF,77,0,0,0,77,86 C78,FF,87,78,FF,7F,F7,EF,EE,EE,EE,EE,EE,EE,77,0,0,0,77,6F,88,F7 C7F,88,F7,FF,FF,EF,CE,CC,CC,CC,CC,CC,77,0,0,0,77,FF,86,78,FF,87 C78,FF,FF,EF,7E,77,CC,C7,77,7C,77,0,0,0,77,FF,6F,88,F7,7F,88,F7 CFF,EF,EE,EE,EE,EE,EE,EE,77,0,0,0,77,FF,6F,88,F7,6F,88,F7,FF,EF CCE,CC,EC,CE,CC,CC,77,0,0,0,77,FF,86,78,FF,87,68,FF,FF,EF,7E,C7 CE7,CE,DD,CD,77,0,0,0,77,6F,88,F7,7F,88,F6,FF,FF,EF,CE,CC,EC,CE CCC,CC,77,0,0,0,77,86,78,FF,87,78,FF,7F,F7,EF,7E,77,EC,CE,CD,DD $D77,0,0,0,77,88,88,7F,88,F7,88,88,F7,EF,CE,CC,EC,CE,CC,CC,77,0,0 .E0,77,33,F3,87,78,3F,33,33,F3,EF,7E,7C,E7,CE,DD,CC,77,0,0,0,77,FF 8C7F,88,F7,FF,FF,FF,FF,EF,CE,CC,EC,CE,CC,CC,77,0,0,0,77,FF,87,78 BCFF,FF,FF,FF,FF,EF,7E,77,E7,CE,CD,CD,77,0,0,0,77,77,77,77,77,77 LD77,77,77,77,77,77,77,77,77,77,77,0,0,40,FF,FF,FF,FF,FF,FF,FF,FF VCFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF `CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF jCFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF tCFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF ~CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF CFF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF 9FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,*  /10,0,A0,E3,E3,0,4,EF,4,1,0,EF,E,F0,A0,E1,* | | Task description file for Flying Start II Import Utility | if "" = "" then Error 0 System resources cannot be found RMEnsure FPEmulator 2.60 RMLoad System:Modules.FPEmulator RMEnsure FPEmulator 2.60 Error You need FPEmulator 2.60 or later | Run .SetUp RmRun .UpCallVI Run ".FLYSTheap" UP 64 Run ".FLYSTinprg" RMKILL MitUpCall Run ".FLYSTheap" DOWN  !flyimport, ADDDD D D DDDvDgfDwwwwwwwww~wwwwwwwwwtwwwwwwwwtwDDDDDDdDADDDDDDDDDDDDDDD0M@- P@ uP% dP4 o00 w0, n0(G0<jJ0I4j 4))B*+j p0  !j'KS*jInvalid parameters Syntax: FLYSTheap UP|DOWN [size], where size is heap size in Kb Error: @ @ ::@ SetUp  8 Initialise system variables for Flying Start under ( RISCOS. 2 << We maintain the same disc directory structure as under F> Arthur 1.2 so that FSII and Import can share ressources. P Z8 Determine value of Obey$Dir, extract Filing System d7 and disc name, add 'Resources.FlyngStart' and set n our variable. x n$="Not Found" 6ș "OS_ReadVarVal","Obey$Dir",n$,256,0,0 ,n$,nr% nr%>0 n$=n$,nr%) .n$ = n$,n$,"$"))+".Resources.FlyngStart" +oscli("Set FlyingStart$Resources "+n$)  * 1,"Unable to read value of Obey$Dir"   oscli(c$)  c$  x,8MitUpCall Mitre UpCall 0.01 (12 Dec 1988)0 0  @-,O @-DO | | Task description file for Flying Start II | if "" = "" then Error 0 System resources cannot be found RMEnsure FPEmulator 2.60 RMLoad System:Modules.FPEmulator RMEnsure FPEmulator 2.60 Error You need FPEmulator 2.60 or later | Run .SetUp | | Install Upcall interceptor | RMLOAD .UpCallVI | | Make sure heap big enough | Run ".FLYSTheap" UP 64 Run ".FLYSTprog" RMKILL MitUpCall Run ".FLYSTheap" DOWN !flystart,, KKKNNNN N NNỻnffNffnfNnnffNfnfNNnfNDDDDDDDDDDDDDDD0M@- P@ uP% dP4 o00 w0, n0(G0<jJ0I4j 4))B*+j p0  !j'KS*jInvalid parameters Syntax: FLYSTheap UP|DOWN [size], where size is heap size in Kb Error: @ @ ::@ SetUp  8 Initialise system variables for Flying Start under ( RISCOS. 2 << We maintain the same disc directory structure as under F> Arthur 1.2 so that FSII and Import can share ressources. P Z8 Determine value of Obey$Dir, extract Filing System d7 and disc name, add 'Resources.FlyngStart' and set n our variable. x n$="Not Found" 6ș "OS_ReadVarVal","Obey$Dir",n$,256,0,0 ,n$,nr% nr%>0 n$=n$,nr%) .n$ = n$,n$,"$"))+".Resources.FlyngStart" +oscli("Set FlyingStart$Resources "+n$)  * 1,"Unable to read value of Obey$Dir"   oscli(c$)  c$  x,8MitUpCall Mitre UpCall 0.01 (12 Dec 1988)0 0  @-,O @-DO Flying Start II 1. Users with Version 1.00(A) Flying Start II Version 1.00(A) IS NOT SUITABLE for use under RISCOS. If you are using this version, please return your master disc to Mitre Software Ltd (address in manual). We will return a new version of Flying Start II, suitable for use with RISCOS, as soon as possible. NO charge will be made for this upgrade. 2. Users with Version 1.01(A) or later. Flying Start II Version 1.01(A) IS SUITABLE for use under RISCOS. To allow Flying Start II or the Import Utility to be started from the desktop we have included 2 application directories on this disc: !FlyStart !FlyImport Please copy these directories to the root directory (or other suitable directory) of the disc containing your Flying Start II programs, e.g. a floppy or the hard disc. Further Notes: The HDinstall program is no longer required. To install Flying Start II onto a hard disc copy the following directories: !FlyStart !FlyImport Resources (This MUST be copied to the ROOT DIRECTORY). The Floating Point Emulator is now loaded from your !system directory. Mitre Software Ltd. The following products are available for Archimedes from Mitre Software Ltd: Flying Start II An easy to use database package providing comprehensive data editing, reporting and labelling facilities. With its clear but concise user manuals and range of example systems, Flying Start has found acceptance and wide use in business, the home and education. DiscTree From an extremely popular idea used in the Mitre Desktop Enhancer, DiscTree provides facilities to view the directory structure of any disc in the form of a tree. Once a disc tree has been displayed the user may: - Search for matching files by (wild-carded) name and/or type - Define backup sequences. A backup sequence details the files to be backed up. Facilities are provided to define the directories to be searched, file name to match, file types to match and the file date to match. Once defined, the instructions can be stored in a file, hence, several different regimes may be defined. The backup program will spread large files over several discs if required. Finally, a restore program is provided to allow the selective restore of backed up files. DiscTree is fully compatible with RISCOS multi-tasking DeskWorld. For further details on any of these products contact your nearest Archimedes dealer or Mitre Software on 01-283 4646.  >:0.oak_PDT.Install   0 ( buffer% 16 2source% = 0 <_check_for_ramdisc F_copy_to_ram P_get_drive_number Z _install d n-"PDT is now ready to run under Risc OS." x  M------------------------------------------------------------------------  _check_for_ramdisc  W "This program requires a RAM disc of at least 64K with no files in the RAM disc." W "If you have not yet created the ram disc, you must drag the ram disc bar in the" # "task manager window to 64K." = "Any files stored within the RAM disc will be deleted." @ _y_or_n("Have you already created an empty RAM disc?")   ` _wait_for_space("Create a 64K ram disc using the task manager and restart this program.")    "M------------------------------------------------------------------------ , 6_get_drive_number @ J TV dest% = _inquire("Type in No. of drive containing PDT system files (0 to 7)",0) ^ dest% >= 0 dest% <= 7 h r | M------------------------------------------------------------------------  _copy_to_ram   _ensure_source  A *copy :0.Oak_PDT.Oak_PDT RAM:$.Oak_PDT A~C~DF~L~N~P~QR~S~T~V ? *copy :0.Oak_PDT.system RAM:$.system A~C~DF~L~N~P~QR~S~T~V     M------------------------------------------------------------------------  _install  & dest% < 4 0L _wait_for_space("Please insert PDT system disc into drive "+(dest%)) : _ensure_destination D N XV "rename :"+(dest%)+".Oak_PDT.code.design :"+(dest%)+".Oak_PDT.code.designcode" bT "rename :"+(dest%)+".Oak_PDT.code.movie :"+(dest%)+".Oak_PDT.code.moviecode" l v* system% = _system_fpe_already_exists  F "copy RAM:$.Oak_PDT :"+(dest%)+".Oak_PDT A~C~DF~L~N~P~QR~S~T~V" G "copy RAM:$.system.!PDT :"+(dest%)+".!PDT A~C~DF~L~N~P~QR~S~T~V" X "copy RAM:$.system.CAD_Risc :"+(dest%)+".library.CAD_Risc A~C~DF~L~N~P~Q~R~S~T~V" [ dest% < 4 "copy RAM:$.system.new_boot :"+(dest%)+".!boot A~C~DF~L~N~P~Q~R~S~T~V"  system%  _remove_emulator   _create_system_directory     M------------------------------------------------------------------------   _remove_emulator   _ensure_destination * 4S "You already have the floating point emulator in directory $.!system.modules" >W "on your PDT system disc. PDT no longer needs the floating point emulator stored" HW "as $.rm.FPE260. If you have no other software which relies on this file, it can" RA _y_or_n("be deleted. Do you wish to remove this file?") \) "remove :"+(dest%)+".$.rm.fpe260" f p z M------------------------------------------------------------------------   _y_or_n(message$)  message$ + " (Y or N)"  *fx 21 0   A$ = 0 A$ = "y" A$ = "Y" A$ = "n" A$ = "N" & A$ = "y" A$ = "Y" = =  M------------------------------------------------------------------------  _create_system_directory  M "copy RAM:$.system.!system :"+(dest%)+".!system A~C~DF~L~N~P~QR~S~T~V" O "rename :"+(dest%)+".rm.fpe260 :"+(dest%)+".!system.modules.FPEmulator" $ . 8 BM------------------------------------------------------------------------ L V( _inquire(message$,initial_value%) ` j x%,y%,response$,value% t ~ message$;" ";  x%=  y%= & x%,y%);initial_value%;x%,y%);  ""response$  response$=""  value%=initial_value%   value%=(response$)   x%,y%);value%;3  =value%  M------------------------------------------------------------------------   _wait_for_space(message$)  ( 2 'message$ <' '"Press to continue." F *fx 21 0 P Z = 32 d n xM------------------------------------------------------------------------  _ensure_source   type%   type% = 0   _mount(source%) / ș"OS_File",5,"$.Oak_PDT.install" type%  type% = 1 K _wait_for_space("Please insert Risc OS disc into drive "+(source%))  type% = 1    M------------------------------------------------------------------------ " ,_ensure_destination 6 @ dest% > 3 J T ^ _mount(dest%) h ș"OS_GBPB",5,0,buffer% r$ ?(buffer%+(?buffer% + 1)) = 13 |' $(buffer% + 1) = "PDT_Syst" L _wait_for_space("Please insert PDT system disc into drive "+(dest%)) " $(buffer% + 1) = "PDT_Syst"    M------------------------------------------------------------------------   ݤ_system_fpe_already_exists   type%   _ensure_destination % dest% > 3 "mount "+(dest%) 9 ș"OS_File",5,"$.!system.modules.FPEmulator" type%  type% = 1 = =  &M------------------------------------------------------------------------ 0 :_mount(drive_number%) D N% _wait_for_space($) : X "mount "+(drive_number%) b  >$.Oak_PDT.code.design "*set PDT$ROUTE movie_to_design "$.library.cad_risc"  >$.Oak_PDT.code.movie "*set PDT$ROUTE design_to_movie "$.library.cad_risc" OAK PDT CHANGES UNDER RISC OS Oak PDT is such a large application that it needs to claim all the memory in the machine. It will not therefore run as a co-operative multi-tasking program. PDT can be run from outside the desktop environment as before, but because Risc OS contains new modules, PDT will not be able to access as much memory as before. The new startup routine 'CAD_Risc' takes account of these new modules, and additionally is able to adjust the user sprite area size. To modify your copy of the PDT system disc (or your winchester), you will first need to create a 64K RAM disc. Do this by dragging the RAM disc bar in the task manager window. Then, double click on the INSTALL icon in the Oak_PDT directory of this disc and follow the instructions. NB this disc must be in drive 0. If you use PDT from floppy disc, it is recommended that you make the modifications to a BACKUP copy. The mode PDT starts up in will be 20 if you call CAD_Risc in a multisync mode, otherwise PDT will run in mode 12. If you change PDT's 'ScDumpMode' to a mode that requires more memory than the mode in which you run PDT (i.e. mode 15 or 20 when running in mode 12, or mode 21 when running in mode 20) you must call CAD_Risc in mode 15 or mode 21 - which will allocate screen memory of 160K (mode 15) or 320K (mode 21). The URD for your !palette and configuration files can be passed to CAD_Risc (e.g. *CAD_Risc -my_urd). Screen memory is reallocated when going between drawing and movie mode so that one screen bank is allocated for drawing mode,and two for movie mode. This means that non flickering multisync movies can be run on a 310! An application directory !PDT is provided to allow PDT to be started from the desktop. PDT should NOT be started by any other means from within the desktop. Double clicking on the CAD icon will pop up a dialogue box with the following options: URD This allows the user root directory for your configuration and !palette files to be adjusted (see appendix C of PDT manual). ALLOCATE DOUBLE SCREEN MEMORY When this option is on, double the normal amount of screen memory will be allocated so that you can set 'ScDumpMode' to a mode which requires more memory than the mode in which you run PDT. QUIT Aborts the startup of PDT. START PDT Asks all other tasks to close down (they will first prompt to save any unsaved data), removes the desktop environment, reallocates memory and runs PDT. If you select this option whilst in a multisync mode, PDT will startup in mode 20. Otherwise PDT will start up in mode 12. This dialogue box will send help messages to the interactive help utility if it is active. If, on double clicking on the CAD icon, an error message or 'Insert Disc' message appears, it may be that the startup program is unable to find the floating point emulator module. To rectify this situation, double click on the !system icon in the root directory of your PDT system disc. This problem will occur if the desktop has 'seen' a !system application on another disc before seeing the one on the PDT system disc. NB the hardcopy module for providing screen dumps to dot matrix printers is no longer in the operating system ROMS. If you wish to still use the facility, you must first load the hardcopy module from disc. The module is $.modules.HardCopy on the small Risc OS applications disc. To load the module, either double click on its icon in a directory viewer, or type *rmload $.modules.HardCopy from the command line prompt. PDT is able to utilise the RAM disc; however, two important points arise: If the RAM disc is large , there may not be enough memory for PDT to run, and in all cases, the RAM disc decreases memory available for drawing. Because of the way PDT has to reallocate memory, the contents of the RAM disc will not be preserved across a startup or a closedown of PDT; however, the RAM disc may be used during a PDT session. The contents of the RAM disc may be copied to disc from within PDT (via the *command or filing windows) before closing down. | IconSprites .!Sprites Set FILE$Type_CAD PDT Dwg Set FILE$Type_CAE HPGLPlot Set FILE$Type_CB0 PDT Cfg Set FILE$Type_CB1 PDT Snap Set FILE$Type_CB2 PDTMovie | Task startup file for Oak PDT if "" = "" then Error 0 System resources cannot be found IconSprites .!Sprites rmensure FPEmulator 2.60 rmload system:modules.FPEmulator wimpslot -min 24K -max 24K run .!startup X !pdt,, 033333@DDDDDDDDDDDDDDD4 """""""""2"DDD 2D$22DD"2 22 2 22 2 """22 " DDD22"#""" 2"""2ADDD@DDDDsm!pdt,, DDDDDDDDfile_cad,, wwwwwwwwwwwwwwwww p  p  p  p  pppD@DD@DDD@DDDppp pp pppwwwwwwwwwwwwwwwwwsmall_cad,, wwwwwwwwDD   wwwwwwwwfile_cb0,, wwwwwwwwwwwwwwwww p  p  p  p  ppfp`p`fff``fpaa`ap``a`p`ff`a`fpapfppwwwwwwwwwwwwwwwwwfile_cb1,, wwwwwwwwwwwwwwwww p  p  p  p  pp""bpfff!"""ffffp`fffffffffffp`DDDDffFDDDFp`DDDfaFDDFp`DDDFDDFp`DDDf`FDDFp`DDDDffFDDDFp`fffffffffffpwwwwwwwwwwwwwwwwwfile_cb2,, wwwwwwwwwwwwwwwww p  p  p  p  pppp```p```p```p```p```pppwwwwwwwwwwwwwwwwwfile_cae,, wwwwwwwwwwwwwwwwwppplffffffffffffpL,fp fpL fp̜ fpL fp̬ jfpLfp|ffffffffffffpfpppwwwwwwwwwwwwwwwwwsmall_cb2,, wwwwwwwwwwwwwwwwsmall_cb1,, wwwwwwww2 "!"#"UUefUeED%FdEDFdEDdfDdwwwwwwwwsmall_cae,, wwwwwwww  wwwwwwwwsmall_cb0,, wwwwwwww`f`ff```F`0`f`fwwwwwwww  >$.!pdt.!STARTUP  (5 (C) Oak Professional Software 7th December 1988 2 > 21 0,"PDT cannot run with this type of monitor." n x_variables  version = _wimp_initialise  #ș"Wimp_GetPointerInfo",,block% )initial_x% = block%!0 - menu_width%/2 -initial_y% = block%!4 + menu_height% - 40  _create_window _create_icons _open_window    $ ș"Wimp_Poll",1,block% reason   Ȏ reason " ,+ 2 : ș"Wimp_OpenWindow",,block% 6 @, 3 : ș"Wimp_CloseWindow",,block% J T! 6 : _process_buttons ^ hq 17,18 : block%!16 = 0 (kill_sent% block%!8 <> quitref%) kill_sent% _quit r3 block%!16 = &502 _send_help | G 19 : pre_kill_sent% block%!8 = prequitref% _send_kill E kill_sent% block%!8 = quitref% _startup_pdt        F-----------------------------------------------------------------  _variables   block% &100  prequitblk% &20  quitblk% &20 & icon_handle%(7) 0 help_message$(8) : D icon_message_1% &44 N icon_message_2% &44 X icon_message_3% &44 b icon_message_4% &44 l urd_buffer% 80 vt help_message$(0) = "PDT startup program. Shuts down desktop, and allocates as much memory as possible to PDT."  help_message$(1) = "Press SELECT to start PDT. Any tasks currently running will be asked to close down, but will first prompt to save any unsaved data etc." F help_message$(2) = "Press SELECT to abort PDT startup sequence."  help_message$(3) = ""  help_message$(4) = ""  help_message$(5) = ""  help_message$(6) = ""  help_message$(7) = "Alter URD if you have your PDT configuration and !palette files in a directory other than $.Oak_PDT. (See Appendix C of PDT manual for details)"  help_message$(8) = "Press SELECT to toggle double screen memory allocation. You will need to toggle this option on if you set PDT's 'ScDumpMode' to a screen mode that requires more memory than the mode you run PDT in."  C $icon_message_1% = "WARNING! : PDT takes over entire machine." E $icon_message_2% = "All currently running tasks will be killed."  $icon_message_3% = "URD" 8 $icon_message_4% = "Allocate double screen memory?"  $urd_buffer% = "$.Oak_PDT"    prequitblk%!0 = 20   prequitblk%!4 = 0 * prequitblk%!8 = 0 4 prequitblk%!12 = 0 > prequitblk%!16 = 8 H R quitblk%!0 = 20 \ quitblk%!4 = 0 f quitblk%!8 = 0 p quitblk%!12 = 0 z quitblk%!16 = 0   prequitref% = 0  quitref% = 0   Send_Message = &400C0 + 39   menu_width% = 738  menu_height% = 276   initial_x% = 1000  initial_y% = 1000   icon_button_type% = 9<<12  icon_fg_colour% = 7<<24  icon_bg_colour% = 12<<28  pre_kill_sent% = $ kill_sent% = . double_screen_memory% = 8 B L VF----------------------------------------------------------------- ` jݤ_wimp_initialise t ~ version% ; task% = "T" + &100*"A" + &10000*"S" + &1000000*"K" H ș"Wimp_Initialise",200,task%,"PDT startup" version%,task_handle%  = version%/100  F-----------------------------------------------------------------  _close_down + ș "Wimp_CloseDown",task_handle%,task%   F-----------------------------------------------------------------   _create_window   block%!0 = initial_x% () block%!4 = initial_y% - menu_height% 2( block%!8 = initial_x% + menu_width% < block%!12 = initial_y% F block%!16 = 0 P block%!20 = 0 Z block%!24 = -1 d block%!28 = 1+2+16+128+2^16 n block%!32 = 7 x block%!33 = 2  block%!34 = 7  block%!35 = 1  block%!38 = 12  block%!39 = 0  block%!40 = 0  block%!44 = -menu_height%  block%!48 = menu_width%  block%!52 = 0 ! block%!56 = 1+8+16+32+7*2^24  block%!60 = 0  block%!64 = 0  block%!68 = 0  $(block%+72) = "Oak PDT"  block%!84 = 0 - ș "Wimp_CreateWindow",,block% handle%  " , 6F----------------------------------------------------------------- @ J_open_window T ^ block%!0 = handle% h block%!4 = initial_x% r( block%!8 = -menu_height%+initial_y% |' block%!12 = menu_width%+initial_x%  block%!16 = initial_y%  block%!20 = 0  block%!24 = 0  block%!28 = -1 ! ș "Wimp_OpenWindow",,block%    F-----------------------------------------------------------------  _create_icons  # i%,text$,flags%,width%,x%,y%   i% = 0 7  & i% = 7 0 : _create_tick_icon D N X b" text$,flags%,width%,x%,y% l v block%!0 = handle%  block%!4 = x%  block%!8 = y% - 48  block%!12 = x%+width%  block%!16 = y%  block%!20 = flags%  H i% < 2 $(block%+24) = text$ block%!28 = -1 : block%!32 = 44  - i% = 2 block%!24 = icon_message_1% - i% = 3 block%!24 = icon_message_2% - i% = 4 block%!24 = icon_message_3% - i% = 5 block%!24 = icon_message_4% : i% = 6 block%!24 = urd_buffer% : block%!32 = 79   5 ș"Wimp_CreateIcon",,block% icon_handle%(i%)    * 4 > H R \F----------------------------------------------------------------- f p_create_tick_icon z  block%!0 = handle% ! block%!4 = menu_width% - 220  block%!8 = -152 - 48 & block%!12 = menu_width% - 220 +80  block%!16 = -152 M block%!20 = 61+icon_button_type%+icon_fg_colour%+icon_bg_colour%+(1<<16)  C double_screen_memory% $(block%+24) = "" $(block%+24) = ""  2 ș"Wimp_CreateIcon",,block% icon_handle%(7)    F-----------------------------------------------------------------  _toggle_double_screen $ .4 double_screen_memory% = double_screen_memory% 8 B block%!0 = handle% L block%!4 = icon_handle%(7) V ș"Wimp_DeleteIcon",,block% ` j _create_tick_icon tN ș"Wimp_ForceRedraw",handle%,menu_width%-220,-96-48, menu_width%-140,-152 ~   F-----------------------------------------------------------------  _process_buttons   (block%!8 4)  7 block%!16 = icon_handle%(0) _pre_kill_wimp : . block%!16 = icon_handle%(1) _quit : > block%!16 = icon_handle%(7) _toggle_double_screen :      (F----------------------------------------------------------------- 2 <_pre_kill_wimp F P% ș Send_Message,18,prequitblk%,0 Z prequitref% = prequitblk%!8 d pre_kill_sent% = n x  F-----------------------------------------------------------------  _send_kill  " ș Send_Message,18,quitblk%,0  quitref% = quitblk%!8  kill_sent% =    F-----------------------------------------------------------------   _quit   _close_down " , 6 @ JF----------------------------------------------------------------- T ^_startup_pdt h _ensure_system_disc r _set_pdt_mode |! "set PDT$URD "+$urd_buffer%  _close_down  "$.library.CAD_Risc"     F-----------------------------------------------------------------  _set_pdt_mode  mode%   < 18 7 double_screen_memory% mode% = 15 mode% = 12  7 double_screen_memory% mode% = 21 mode% = 20 & 0 : "seteval PDTmode "+ mode% D N X bF----------------------------------------------------------------- l v_send_help  LOCAL number%  number% = 1 + block%!36 : (block%!32=handle%) (number%<=8) (number%>=0)  block%!0 = 256  block%!12 = block%!8  block%!16 = &503 t help_message$(number%) = "" $(block%+20) = help_message$(0) $(block%+20) = help_message$(number%) ( ș Send_Message,17,block%,block%!4    F-----------------------------------------------------------------  _ensure_system_disc   type%  type% = 0 * 4 _mount >0 ș"OS_File",5,"$.library.CAD_Risc" type% H type% = 1 R8 _wait_for_space("Please insert PDT system disc.") \ type% = 1 f p z F-----------------------------------------------------------------  _mount  % _wait_for_space($) :  "mount"   F-----------------------------------------------------------------  _wait_for_space(message$)    'message$ ' '"Press to continue."  *fx 21 0 $ . = 32 8 B LF----------------------------------------------------------------- V `f "Start PDT",61+icon_button_type%+icon_fg_colour%+icon_bg_colour%+(1<<16),160,100,58-menu_height% jo "Quit",61+icon_button_type%+icon_fg_colour%+icon_bg_colour%+(1<<16),160,menu_width% - 260,58-menu_height% t. "",265+icon_fg_colour%,menu_width%,0,-12 ~. "",265+icon_fg_colour%,menu_width%,0,-52 % "",257+icon_fg_colour%,64,0,-96 3 "",257+icon_fg_colour%,menu_width%-220,0,-152 > "",269+32+icon_fg_colour%+(15<<12),menu_width%-88,72,-96 | !Boot file for !System IconSprites .!Sprites Set System$Path . | !Run file for !System IconSprites .!Sprites Set System$Path . !system, pwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwOsm!system , 33333333swww333swwwwwww xw w w wwwwwwwwwl(4WFPEmulatorFPEmulator 2.70 (02 Nov 1988)FPEmulatorVersionARM Floating Point Emulator 2 (V2.70, 02-Nov-88) Ѝ FPEmulator unable to claim workspaceO- Rb?j ,/Q! @  P*"* ! B"!$ !P !@'QO-O- PA @DP@@ @MϜ<?J pz(t  u|  7>s :7wvsr)(%$@?<;VURQmldc~c`!     + ? > j i f e   x 0 E [ a ^ ol ,)   F'}.7 R 䉀    X<Ϝ: 33UU00UU_P0ZJH @S-J Pt:$% %08E*/10@0@O /a/8E/#0"@PT @D Pd8$E:D*/10@@d 0PP  Pt:$% %08E*/10@ `S=JQ RO 9:@ PvET:&%B0%R 8Z/@ 0CZ/10@8ETA A@@PV `F PfuT:FED0ET 8&Z/p@ 0CZ/10@`f 0PP @ PvET:&%B0%R 8Z/0 @p @ @ T 0%+9C B,!H P"h p ( *    0 3#  #88"((! 0    @  BJ @ 0CZ/10@p!9 @ @ 0C90C PR@# *P@0CP@ pU`૰1P!@!P@ pU`૰1P!@!P@ pU`૰1P!@!P@ pU`૰1P!@!:  P@ pU`૰1P!@! P@ pU`૰1P!@! P@ pU`૰1P!@! P@ pU`૰1P!@! :P@*T U 10H7 90C0PAA2AA"r3r#P@`!T1@D ! pZ  P@`"U1 P!@! " ! pP@1 P!@! ""q#pP@*TUW 0#p@dB(H(L(N(OOሀKp@K?LT PtJ1@PtA:@@p@K?LT PtJ1E@1h@Pt@A:1ሯh@C?LT2 PtJ 1`@၏11a0`T  M0Z@Pt @D2%`@ ႏ/%1 /a0`TX M0 B `@ 0@`T M0Z!9`@@@p@@ @ 0 +Tx 'J'㉗`p<䉀    X<4`Ϝ  +Tx 'J'㉗`p<䉀    X<4`Ϝ u +Tx ''㉗`p<䉀 b   X<4`Ϝ W +Tx ''㉗`p<䉀 C   X<4`Ϝb 8 +Čx 7'J㉷䉀 (   X<ϜG  +Tx 'J'㉗`p<䉀     X<4`Ϝ)  +Čx 7'J㉷䉀    X<Ϝ  +Tx 'J'㉗`p<䉀    X<4`Ϝ  +Čx 7'㉷䉀    X<Ϝ  +Tx ''㉗`p<䉀    X<4`Ϝ  +Čx 7'㉷䉀 z   X<Ϝ q +Tx ''㉗`p<䉀 [   X<4`Ϝz PZ %T@)G@4#Mp_x 'J'<䉀 7   X<4`ϜV ,Z %T@)G@4#Mp_x 'J' <䉀    X<4`Ϝ2 Z %T@)G@4#Mp_x ''<䉀    X<4`Ϝ Z %T@)G@4#Mp^_x '' <䉀    X<4`Ϝ Z %T@)G@4#MpPx 7'J䉀    X< Z %T@)G@4#MplPx 'J'<䉀    X<4`Ϝ };tu}Z %T@)G@4#MpK_Ox 7'J 䉀 %   X<F Z %T@)G@4#Mpj_Ox 'J' <䉀    X<4`Ϝ" Z %T@)G@4#Mp_Ox 7'䉀    X< Z %T@)G@4#Mp_Ox ''<䉀    X<4`Ϝ Z %T@)G@4#Mp_Ox 7' 䉀    X< Z %T@)G@4#Mp]Ox '' <䉀 }   X<4`Ϝ r1XX 2,  10=SS 11231L2! 2@PPP%T@s!0c122@1XX KK@ 0 ;S@ T 1!11"1231 J2 2@4s ڢ&)0c @S1! @c21112122@ 2 0#<3=3=0CRQZ12&22&!@RQZ! 0#<3= 2 @RQZ0:@ 4%;2 @;0CR@OQ@Q QQZ0:@ 4 B!L@0=SIS 112315&!L22?0:@ 4%; 2 @ @R@OQ@Q QQZ1ᄚ ?,p@XX YPES:PS Q@3P3O,9!:O, @@@dKx@OI@D@C @d1QR ,@@0[KYPESQ:PS Q@*I@@T Pd52$%1!Np0 "# pWB!NP` pR&^b!n "!pWR&^b!n:`` Q`F#! 2O0@d@Q@d0,y 0@d@DQ@d0,y x 0 R3 "B"0:"dSd0C S 0CS P2] 0CZX &2]?PZTU O,p`JP@P@P >09J 0CZ`pBP ~( pO %OPڥW@Y㄀ Ѐ @,  0@Y ,0  ;: ,  , 0p@?@@@@ @P@$@@ @(k@ @@C#@&@*焑*@ -@1_0@4@.7@:k @v:@#NJ>@xbA@p`'ap$~`BPU28&)@h@T T 0c@S Ps PCB1%A2#Q%Q10@U >@{@ T q!9T 2@ldMo,@,@,File level = 2 (util) @?@@,@,---r0--- ---r1--- ---r2--- ---r3--- ---r4--- ---r5--- ---r6--- ---r7--- @?@@, V@@, R@@, N@@, J@@, F@@, B@@, >@@, :@@,@, @?@@, +@@, '@@, #@@, @@, @@, @@, @@, @ @,@, @?@odЍ@,2 P027"QZ @ P R#MpHH[ yZ>THJH``&!2$ @d12a 1J*<䉀    X<4`Ϝ `Y@d1a*<䉀    X<4`Ϝ }0Z`& @d1a 1cJ*<䉀    X<4`Ϝ *<䉀    X<4`Ϝ 9 p@Qp)  ` `Y }0Za*<䉀    X<4`Ϝ xZQR*>TQP R^ ` `YZ }0XZRUp@ Q*<䉀 _   X<4`Ϝ~ T  Q` Y*<䉀 G   X<4`Ϝf < [z ' +phB(ȰJ(̰J(ΰJ(ϰJϰሀJ̰䉀    X<Ϝ:  ` #䉀    X<Ϝ" `9 ' ⬋#䉀    X<Ϝ | z ' +phB(J(J(J(JሀJ䉀    X<Ϝ z '〠䉀    X<Ϝ @pO@Lz †'<䉀    X<4`Ϝ nJ(#Mpx  'ƌ#MpHXX0J*P0J S Q Rvw3x'<<䉀 b   X<4`Ϝ W @@@ <<䉀 H   X<4`Ϝg = <<䉀 4   X<4`ϜS ) X:PX: P <ϜpO@x V t`O(l(?@@@@?@x V nO(l( J(#Mpfx  'ƌ#Mp\HXX0*P0{J S Q Rvw3x'<<䉀    X<4`Ϝ X:PX: P <<䉀    X<4`Ϝ ` Y r *(p|EW O'|*䉀    X<Ϝ 굏O'|*q䉀 u   X<Ϝ l O( @VO( @X O( X O( }O&lXB O( O&lO'* WO'O'wO'*OH'W WW (OH' :䉀    X< ~ 5J'|*   @ XA!%:䉀    X< ~ J'|*  @ XA! :䉀    X< (C#MDpOTk 14XX `P \  #0 ]SU1`U,]0Z#0 ]S U1  0<@u Pe10 @XX" `PKK@ 0#%%[S@ T1 `UJ]0Z+#0%%[S @ T1  4u Pe @U1$!2%1!%0:@ 4# ;`PB@@#0 ]SU1A`U]0Z#0 ]SU12&%~  ~ IJ'|*#MpYHH @,@p})N 䉀    X<  HpO@e XpO[P  ~ hJ'*#Mp+HHn d90C0PAA2AA"r3r#P@`!T1@D ! pZ )& p P@`"U1 P!@! " ! pP@1 P!@! ""q#@@ DpSڀ `` pP@*TUW 0#P 䉀 U   X<v N PP PP`V 0J  03pO@S@ J 0CZ@  J(#M $pT 0#<3= Ah &f4J#M $pT 0#<3= hXX0l* @SQJ Pt:$% %08ሠ* pg @T @D Pd8$ሠ0!! !/!a! 0pO `pႏ/0#XF P  )䉀    X< PP V`W 0J @d 0PP  Pt:$% %08ሠ* pO AXPX 0 P FO@)03 MO@"#M $pT 0#<3=r  h J(#M $pT 0#<3=\ Ah &f4J#M $pT 0#<3=E  hXX0v* @SQ R W:p PteW:$%B0%R 8Z)p p ap P)  R Z`@T @D PduW:deF0eV 8$Jp` 0CZSWp 0p} `Ppo/0#0MJP<  )䉀    X< p`U 0J @d 0PP p PteW:$%B0%R 8Zp pO@ tXP9 S P5 X 0 P ,0 0 MO@P0c @s PCB1%A2#Q$Q105 4J(#M $pT 0#<3= h &f#M $pT 0#<3=|  hS[ XX0*T 0%+9C@@o B,!H P"h p ( *    0 3#  #88"((! 0     B Z  Syxp  0CZSk  8p `P'Ⴏ /0#@&ڤGPN  )䉀    X< @ 0CS?ppOg `U 0J 0c@S1 @s PCB1%A2#Q$Q10SP [a P_X03 33:PCAX: P2 0Wh &f#M $pT3 0#<3=  nMJ&l#M5 $pT 0#<3= (- 2J(#M $pT 0#<3= h &f#M $pT 0#<3=t  HXHX 0C90C PR@# *P@0CP@ pU`૰1P!@!P@ pU`૰1P!@!P@ pU`૰1P!@!P@ pU`૰1P!@!: )& %  P@ pU`૰1P!@! P@ pU`૰1P!@! P@ pU`૰1P!@! P@ pU`૰1P!@! :@ SWHp `pP@*T U 0#@ڤGpP8  )䉀    X< P`W 0J HP X `03I X `  0A 0CZX ` H`5 03pO@\ KZhhEh`#h `1 `  04h &f#Mp n>J&l#Mp -J(#Mph &f#Mp pHHXXN B,5Z?LK@DT*T/ d8,yW ,;: ,@  T , 08B@_ڤGB@T* PTe! d , , qB /~Q3B 03TS ``X ` 90CX `  0} 0CZXX[   0 `n0| ` KZB, J(#Mp\h &f#MpQ pHHXX @, , l @MHP X ` X `  0- 0CZX ` H`!3!9 0) KZhhh` 3h  `  `  0 ~@`3@_l@ F?Q e@?(Ҭ@ry?[ޕq(7?h ~J'#MpEHH @, @L Og@7P 0MnOrO SQ R] SQ RR:B,p Kr@d@ ,C ,>, @F  @,  (,p ( } $ y u , np  i p  , _pZ Z B@0@ 90C 0@03@ry @? @?);\?むbCe??g>"(?bx9F?B??W!Z4?_:,P??? ~J'#MpHH @,@ pO|G@2~O SQ RlcZB,"p m@ , ,, @)  @,  ?L@S7u,p u  q m i ,b p ] p X p U p  IJ[ @ B@Lp@ 0C Z2!9@!9@B@[iF`F`KQ SQ R5 !5XQKR@D@n*DN?\zw,??Hdz?${. BJ? <҄ ??i??uՕ9?1tPV?*Gh? ~J'#MpHH @,@0C8,2p*@0@@@T0 !9 ~J'#MpHk HRrJB,YPES E ,I!@DSI,,E E$,@; 0CL,V 0@Y 1 ) ! ,| p w p r p m p h  c 0 \F_$Y  @;P$Y  @3P J0C ZYP H@!9wC0@|@w\@],$0?'pW9a@Me 6@9QV@AS@5h!?5h!@5h!?h &f#Mp n2J&l#Mp pHHXXB,ENHP X ` X `  0 0CZX `H`@P@P 0}!9 KZhhh`h ` `  0 ~J'#Mp|HH` B,I@@ SQ R@, , ,' I!@DS,,{,I y u q ,j p e p ` p [  V ܐ  0B 0 @, }O @ &S$ @0j?B׳ݞSe? Ob8V@QPm@ P;$m[@CK$@k4=?)Sk@ V@2۴0@ #,k?5h!? #,k?@Ϝ儰³r  IYЍЍ@-@-<-+Floating Point Exception : Inexact Operation +Floating Point Exception : Underflow +Floating Point Exception : Divide By Zero +Floating Point Exception : Overflow +Floating Point Exception : Invalid Operation  Ѝ  > $.LIBRARY.CAD_Risc  : This program frees the maximum amount of RAM for PDT (? running under Risc OS. There is no longer any requirement 2? to consider flick/nonflick modes as memory is reallocated <@ between drawing and movie modes thereby allowing multisync F movies on a 310! P Z? The mode used for PDT is taken from the current mode when d? PDT is selected from the desktop, or '*cad_risc' is typed n@ from the keyboard. If the computer is in a multisync mode, xC mode 20 will be used for PDT, otherwise mode 12 will be used. A If this program is started from the command line in mode 15 > or mode 21, or is started via !pdt from the desktop with = double screen memory allocation selected, enough screen ? memory is allocated yo allow PDT to go into mode 15/20 if > running in mode 12 or mode 21 if running in mode 20, for 3 the purpose of printer dumps/screensaves etc.  F The user sprite area can now be altered dynamically, so there is E no longer any need to configure spritesize to low values on 1mB  machines.    int_buffer% 4  string_buffer% 81 _detect_route _select_mode " ,5 6 5,0 @ J T% ******************************* ^% All size values are in Kbytes ! h% ******************************* r |0 To ignore a particular setting, make it -1   required_font_size = 0 Arequired_screen_size = (80 + modetype% * 80) * screen_memory% required_RMA_size = 0 required_system_size = 0  kill_modules = tidy_modules =   setup command("urd "+user_root$)  H route$ = "design_to_movie" exit("RUN $.Oak_PDT.CODE.MOVIECODE")   route$ = "startup" &M command("rmensure FPEmulator 2.60 rmload $.!system.modules.FPEmulator") 0% *SET PDT$ROUTE startup_to_design : D N*exit("RUN $.Oak_PDT.CODE.DESIGNCODE") X b l v_detect_route  input$,count%,number%  L ș"XOS_ReadVarVal","PDT$route",string_buffer%,80,0,0 ,,number%,,type%   number% > 0 type% = 0 ! string_buffer%?number% = 13  route$ = $string_buffer%   route$ = "startup"     ݤokay_to_kill(n$)  3 add names of modules you DO want killed here ; Be aware that subsequent versions of the OS may have  7 extra modules, eg FileCore, so you must not have * an automatic TRUE 4 eg > H n$="Desktop" = R n$="BBCEconet" = \# n$="InternationalKeyboard" = f n$="Debugger" = p n$="SoundDMA" = z. n$="SoundScheduler" page_size <> 32 = . n$="SoundChannels" page_size <> 32 = ) n$="WaveSynth" page_size <> 32 =  n$="StringLib" =  n$="Percussion" =  n$="SpriteExtend" =  n$="Draw" =  n$="FontManager" =  n$="WindowManager" =  n$="Hourglass" =  n$="NetStatus" =  n$="Obey" =  n$="ColourTrans" =  n$="PDriver" =  5=: this is the default value - don't delete it!  $_select_mode . 8 number%,type%,mode% B LF ș"XOS_ReadVarVal","PDTmode",int_buffer%,4,0,0 ,,number%,,type% V `? number% > 0 type% = 1 mode% = !int_buffer% mode% = j "seteval PDTmode "+ mode% t/ mode% < 18 modetype% = 0 modetype% = 1 ~e mode% = 15 mode% = 21 route$ = "design_to_movie" screen_memory% = 2 screen_memory% = 1   route$ = "startup" ! modetype% = 1 20 12     . **************************************** . DO NOT CHANGE ANY LINES BELOW THIS ONE ! . ****************************************   setup  Z%=2  init  adjust_directory * required_font_size >=0 adjust_fonts (2 required_screen_size >=0 adjust_screen_size 2# kill_modules adjust_modules <@ kill("FontManager") : for some reason, adjust modules F? kill("SharedCLibrary") : doesn't find these two modules P! tidy_modules tidy_modules Z, required_RMA_size >=0 adjust_RMA_size d2 required_system_size >=0 adjust_system_size n remove_system_sprite_area x   init  C% 2048 & ș"OS_UpdateMEMC",0,0 page_size  page_size=page_size &C  Ȏ page_size  4: page_size=8  8: page_size=16  12: page_size=32   P%=C%  [ OPT Z% = \ This is called as a result of ChangeDynamicArea being C \ issued. Program wants CDA to be allowed so call is claimed.  .upcall  MOV R0, #0 " LDMFD R13!, {PC} , \ Entry point 6 .start @4 MOV R0, #&1D \ vector number JB ADR R1, upcall \ address of claiming routine T< MOV R2, #0 \ doesn't really matter ^! SWI "XOS_Claim" h ] r | exit(s$)  i%,p%  p%=P%  i%=0 Z% Z%  P%=p%  [ OPT i% 4 MOV R0, #&1D \ vector number B ADR R1, upcall \ address of claiming routine < MOV R2, #0 \ doesn't really matter # SWI "XOS_Release" ! ADR R0, command  SWI "XOS_CLI"  .command  EQUS s$+0  ]  & s$="GO "+~(start)+13 0 i%=1s$ :$ ș"OS_Byte",138,0,(s$,i%,1)) D N Ș X b ladjust_fonts v0 font configuration option is in 4K blocks ( f%,c%,i%,p%,fontmanager,font_code  f%=required_font_size 4 % required_font_size 4<>0 f%+=1  ș"OS_Byte",161,134 ,,c%  p%=P%  i%=0 Z% Z%  P%=p%  [ OPT i%  B font_code  .fontmanager & EQUS "FontManager"+0  ALIGN  .font_code  MOV R0, #162   MOV R1, #134  MOV R2, #f%  = SWI "XOS_Byte" \ *CONFIGURE FontSize f% * MOV R0, #3 4% ADR R1, fontmanager >< SWI "XOS_Module" \ *RMREINIT FontManager H MOV R0, #162 R MOV R1, #134 \ MOV R2, #c% f= SWI "XOS_Byte" \ *CONFIGURE FontSize c% p ] z   adjust_system_size 1 i%,p%,exit_okay,current_system,diff_system . current_system=!(28*1024*1024+&200C)/1024 7 diff_system=-(current_system-required_system_size)  p%=P%  i%=0 Z% Z%  P%=p%  [ OPT i%  MOV R0, #0  LDR R1, system - SWI "XOS_ChangeDynamicArea"  B exit_okay  .system & EQUD diff_system*1024 $ .exit_okay . ] 8 B L Vadjust_RMA_size `+ i%,p%,exit_okay,current_RMA,diff_RMA j( current_RMA=!(24*1024*1024+&C)/1024 t. diff_RMA=-(current_RMA-required_RMA_size) ~ p%=P%  i%=0 Z% Z% P%=p%  [ OPT i%  MOV R0, #1  LDR R1, rma - SWI "XOS_ChangeDynamicArea"  B exit_okay .rma # EQUD diff_RMA*1024  .exit_okay  ]    remove_system_sprite_area  i%,p%,exit_okay,sprite ( p%=P% 2 i%=0 Z% Z% < P%=p% F [ OPT i% P MOV R0, #3 Z LDR R1, sprite d- SWI "XOS_ChangeDynamicArea" n B exit_okay x .sprite  EQUD -&400000  .exit_okay  ]    adjust_screen_size i%,p%,exit_error,exit_okay,current_screen,diff_screen b% 12  Screen size calculations 4 !b%=150:b%!4=-1:ș"OS_ReadVduVariables",b%,b%+8  current_screen=b%!8/1024 7 diff_screen=-(current_screen-required_screen_size) p%=P%  i%=0 Z% Z%  P%=p%  [ OPT i% " MOV R0, #2 , LDR R1, screen 6- SWI "XOS_ChangeDynamicArea" @ BVS exit_error J B exit_okay T .screen ^& EQUD diff_screen*1024 h .exit_error r! SWI "OS_WriteS" |D EQUS "Unable to shuffle screen memory as requested"  EQUB 13  EQUB 10  EQUB 0  ALIGN  .exit_okay  ]    adjust_directory  input$,count%,number%  J ș"XOS_ReadVarVal","PDT$URD",string_buffer%,80,0,0 ,,number%,,type%   number% > 0 type% = 0 ! string_buffer%?number% = 13 &" user_root$ = $string_buffer% 0 : ș"OS_GetEnv" input$ D user_root$ = "$.Oak_PDT" N count% = (input$) X b% input$,count%,1) = """" : lC input$,count%,1) = "-" user_root$ = input$,count%+1) : v count% -= 1  count% < 4  ! "SET PDT$URD " + user_root$   eadjust_modules mn%,in%,z%,cont%,c$ # mn%=0:in%=0:z%=0:cont%=:c$="" ȕ cont% 3 ș"XOS_Module",12,mn%,in% ,mn%,in%,p%,w%;f%  cont%=((f% 1)=0)  (w%<>0) x% 8  !x%=z%:z%=x%:x%!4=p%    ȕ z%<>0 s%=z%!4 * s%+=s%!16 4 n$="" > ȕ ?s%<>0 H n$+=?s% R s%+=1 \ f" okay_to_kill(n$) kill(n$) p z%=!z% z   tidy_modules [ OPT Z%  MOV R0, #8 " SWI "XOS_Module"  ]   kill(n$)  p%,i%,text,code p%=P%  i%=0 Z% Z%  P%=p%  [ OPT i%  B code $ .text . EQUS n$+0 8 ALIGN B .code L MOV R0, #4 V ADR R1, text `" SWI "XOS_Module" j ] t ~  command(n$)  p%,i%,text,code  p%=P%  i%=0 Z% Z%  P%=p%  [ OPT i%  B code  .text  EQUS n$+(13)  ALIGN  .code  ADR R0, text   SWI "XOS_CLI"  ]  (  >$.!boot  *cad_risc SILICON VISION The following list details some of our products for the Archimedes range. All software are custom written and are provided on disc with a minimum hardware requirement of an Archimedes 305 with a single floppy drive. The software can also be installed on a Hard-disc or Econet network. All prices include VAT and carriage. For further Information on these products and new releases please contact: Silicon Vision Ltd Signal House Lyon Road Harrow Middx HA1 2AG Tel: 01-422 2274 or 01-861 2173 Fax: 01-427 5169, Telex: 918266 SIGNAL G SolidCAD The ultimate 3D Draughting System for Architectural design, Interior Design, Engineering Design and Teaching CDT. Allows drawing in plan, front, & side elevations and also directly in 3D view. Includes powerful zoom & pan options for precision draughting and surface definition for creating solid colour objects. Also includes Sweep, Extrude and Macro facilities for designing very complex objects easily. Colour printer drivers are also included. Plotter drivers are also available. Smooth shading with light sources is also performed for realistic images. SolidCAD designs can also be animated from your own programs with the Realtime Solids Modeller package to which you may upgrade for a further 40. Price: 49.95 REALTIME SOLIDS MODELLER Includes both the sophisticated design environment of SolidCAD and the high speed animation capability of a Realtime Graphics Language(RGL) module developed in pure ARM Risc code for supercharged performance. This allows flicker-free animations of SolidCAD designs to be performed from within your own programs. Smooth shading is also provided for realistic images. The Realtime Graphics Language has a comprehensive specification which includes various display modes offering wireframe, convex, concave, scan line-depth buffer and smooth shading. The display modes are fully optimised and are based on our own high speed techniques which are unrivaled to allow realtime animation as opposed to artificial animation based on sequencing through predrawn screen images. Price: 89.95 ARC-PCB A complete PCB design system with a comprehensive specification which includes: Automatic routing, 8 layers, 32"x32" maximum board size, 0.001" resolution, Surface Mount capability, Fast Zoom/Pan/Redraw, Block Move/Copy/Rotate/Mirror/Erase options, Text & Silkscreen facility, Part libraries, Automatic Drilling information, On-line Help, Variable Line/Pad/Text/Grid sizes, HP-GL, Graphtec, Plotmate & Epson compatible 9-pin and 24-pin drivers for artwork, and extensive support from PCB manufacturers for final layout and production. Price: 195.00 RiscBASIC The first true BASIC V syntax compiler which will convert your programs into supercharged Risc code for turbo performance running up to 10 times faster than the ABC compiler. Features include relocatable modules, Double precision Floating point & Integer support, in-line assembly, Window-based or command line compilation, full cross references, standalone code generator and optimiser, full array manipulation, multiple exit structures & full runtime error handler. Price: 99.95 RiscFORTH A full implementation of the FORTH-83 standard which includes Multi-tasking within the Forth programming environment. The ideal language for process control applications such as electronic interfacing, robotics, imaging systems, automatic test equipment,etc. Features include an optimising compiler, ARM assembler with floating point mnemonics, Full screen Editor, File system interface, Wimp support, single step debugger & standalone code generator. Price: 99.95 SUPER-DUMP The ultimate printer driver which takes advantage of the highest resolution capability of ordinary Epson compatibles to provide 1920x1024 dots for 9-pin or 3000x3000 dots for 24-pin printers. Images can also be scaled, positioned and previewed before printing. Fully compatible with SolidCAD, Realtime Solids Modeller & Gate-Array Design Teaching system. Your own graphics programs or other CAD packages can be made compatible with Super-Dump by the addition of a few simple commands. An example program is included in the package. Price: 24.95 PRESENTATION SYSTEM The package provides an interactive environment to Create, Edit, and Play-back computer controlled presentations for lectures and demonstrations. Also handles graph plotting for user defined functions which can be incorporated within the presentations. Price: 49.95 GATE-ARRAY DESIGN TEACHING SYSTEM The system provides an introductory course for Silicon Chip design with facilities for Array design, Cell Design, On-line Help and a tutorial on integrated circuit design. The package is ideal for teaching purposes and provides a low cost entry system for learning chip design skills. Price: 89.95 |>!Boot IconSprites .!Sprites Set File$Type_DFA Picture Set DigUpdateDir |>!Run WimpSlot -min 48K -max 48K |Ensure space for RM WimpSlot -min 16K -max 16K RUN ".!RunImage"  >!RunImage 4 Finds digitiser socket number and loads new RM  ș"XOS_Module",4,"Digitiser" ((ș"XOS_Module",3,"Digitiser" a%;f% 2E f% 1 : 0,"Can't load digitiser module (is hardware present?)" .VDIGRM "+((A%>>14)3) PK b% 64:!b%=1:$(b%+4)="The digitiser software is now updated to V1.10": Z?(b%+$(b%+4)+4)=0 d,ș"Wimp_ReportError",b%,&18,"!UpdateDig" nȘ hhfile_dfa" ppppppPPPPPP000000@@PPwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwffffVETUU433UefvwfffU4""2332"#RevwffE3!""""33TvwfV4C3BvwfE$"#3twfE#!"""4qwf$"3#"2#2CEqwE""#"2TE"244qw$!BD3EE!#"pw"!BE52!pw"CB%!#pwTF"!4qwTF!!3rwBU!!"rw"T"rw"c $"rwbA"#2qw!R$!2qw!B%!"qw!"5!"qw!"5"!qwE2#2qwT#!qwd"!%!qwe2&!rwd%SF1"rw1eF!ee!rw!BefBVvsw1Bfv%1eef%"tw1SefV!SUef6!tw Ceff5""CUUff$"swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwsm_dfappppppPPPPPP000000@@PPwwwwwwwwwwW4"!3sG2r7"#!""s'2"2T#2s'C5C1r7C1q7!r7rG!"qW"""pW!pGp'22q'%"!q'61r7VR%rGf!UVrWf6SefswwwwwwwwwwT!updatedig wwwwwwUUUUUU333333DDUUDDDDDDDDDDswDDP5swwDDS5wrD"Dps7wwD".DwswwD/.D2wwwD""""DwwD"|wwwwwwwwwD"|xDDDDDDtxppppppppp pp ppwwwwwwwwwp0|xDigitiser 1.10 (10 Dec 1988) (C) Mike Harrison (RiscOs version)DigitiserBwpal'''FastLoadx/u/X/FastSave@/=/ /GrabX*A*x)GrabSave.-0-MakeSprite 10/PatternsGGlGPicDumpx> ,>8<PicLoadON`MPicSaveKKLKSectionp432See,+*ShowpicD)5)x(SmoothplISIHTableSave\$##TableLoadL%$4$ZitTT`TShadesS@SLSGrabKeyX6@B65GrabOptionsd9@*9<7PatternSetR@}RQVdigHardwareAddressRefreshVideoInfoGrabFastGrabVideoParamsScaleTablesScreenSwapDisplayRotateReadLineWriteLineReadColumnWriteColumnSectionScreenDumpUserLoadCodeUnDocumentedBankDMAThresholdBusy : pO@-l T[ 0P3Re&{7 r/㠠_- Q_RiscOS only! 100 <z_ `001x;n{{c {Hrdrrrprr Can't set up workspace Set Alias$@LoadType_DFA PicLoad %0Set Alias$@RunType_DFA PicLoad %0 SSet File$Type_DFA PictureSet Alias$@LoadType_DFB TableLoad %0@Set Alias$@RunType_DFB TableLoad %0 SLSet File$Type_DFB LookUp@-, H-1R F1 '1 E1} q @-Watford Electronics Video Digitiser _-112P` 0d@N@YPBQP`V,P$pU$ `1L@D@-008 OH-1  7' @-$11 @-001(<H-  !p@-, $@- @?@-0x0@- bhLCan't set up refresh@- 0 8 -O-'OX-7_0ˋ ;@-, R    R  No video signalEscape@-~$O@-1P  ,+j R   ,+j R  O@2@-(@0 R0   S@-TJF-退18@$99F R@-@@-@ @j#hcj j 4 j, nj R-@" PInvalid Address@-X (e@-0 (00C0S _ZeZ@-Q` 2e?@-P`1? 2 22? 0@4c 04Ѝ>@Bad ParametersO@-   @-!"File not found@-01$(V>$##_-/,jP K)#jp qn` ) +   @- . OOPLoads user lookup and / or intensity tables Options : Sxxx Do *ShowPic afterwards. xxx are ShowPic options U only load user lookup tables I only load intensity table Syntax : *TableLoad [S[S][P][L]] [U|I]PSL_-p 22 2 22 2 U2 I2  S2ht`O뀟hh0h4`_ 0h?O @@  1ဟ 1  Not a lookup table file@PhbЍbh 0 ?0 0P#TTD##;<  +ColourTrans Module not presentD "!#!0 " 0SZSets pallette for black & white pictures in 16 colour modes *Bwpal 2,4 or 8 to display only 2,4 or 8 grey levels 2|4|8]Can't in this mode@-@- 0\@1 21@41 @810@ ( "  2 0@P`pPPPP00PPppDisplays picture from digitiser's memory in the current screen mode Options : S Display part of the picture selected with *Section P Don't change pallette L Use user lookup table S][P][L]LPS@-`Oh   Grabs & displays a frame in the current screen mode Options : Q Quarterscreen P Don't change pallette O Grab an odd field E Grab an even field I Full interlaced frame grab (MODE 20 only) Q][P][O|E|I]Q POEI~@-`Ojj 0H  000 0 ~Continuously grabs frames until a key or mouse button is pressed Options : Q Quarterscreen M Use current mode (default is mode 9) P Don't change pallette O Only grab odd fields E Only grab even fields I Full interlaced frame grab (MODE 20 only) V Ignore 'No video signal' error Q][M][P][O|E|I]Z QMPOEIV@- p`O-Ej@ Bj `p9j24j52 6@@@ @   0  @ j  22 27  7@ހGrabs and saves screen images in the current screen mode Press SHIFT to grab, Return to save, any other key to quit Saves screen image in ScreenSave/FastSave format Options : O/E/I,P - Same as *Grab  [O|E|I][P] IOEP*_-`O<j,9jl\ 6  -j,+)j 0000  l  j 2 j2 1 7Ѝ_AbortedP@7q4sЍ‟Equivalent to *ScreenSave @- 0.Equivalent to *ScreenLoad @- Creates a sprite from a digitised image, mouse adjusts size, buttons : Left - flip, Centre - Exit, Right - Grab Escape to abort without creating sprite. Options : P - Don't set pallette S - Use section of digitised image (enters *section first) D - Display the size of the sprite onscreen L - Use user lookup table C - Include pallette data in sprite spritename> [P][S][D][L][C]PSDLCct_-`Or{si{h7{j 0?j 6Qp,+LjQ012 >PB0PBZ  gsq q{4j[ gsq q{)j q q{!j  j p   Xp{ Yl{zj s&2. s.@P7jssq4sSelects section of picture for use by key triggered grabs. Mouse buttons : Left - Flip between corners, Centre - Exit, Right - Grab Escape to leave unchanged. Options : M Use current screen mode, otherwise mode 9 used P Don't set palette M][P]@-0C@-h&hh`!OC@-2PM_-_-`Oh 2j6.j_{+j @  #jO`p,$*{jj@`Pp O0@j 73_- 0e GrabKey sets grab trigger key to key with code If n isn't a number, you are prompted to press CTRL and the required key GrabKey [] @-0&O0' !z@0Press CTRL and required trigger key together...+h@ @  4 JkGrabKey Y = GrabOptions sets the action performed by a key triggered grab. Options are : F Fullscreen (Default) W Fill graphics window M Plot between last 2 mouse click points C Plot between last 2 graphics cursor points S Use only part of picture defined with *Section P Set pallette if 16 colour mode, or invert if 2 colour mode G Don't grab - use existing picture L Use user intensity lookup table D Disable key triggered grabbing altogether A Apply *Smooth before displaying GrabOptions [F|W|M|C][S][P][G][L][D][A] ASPGLDFWMCl@-0JO,`O0 h    "OGrabOptions _ @P P5POINTER 1@-ObCan't switch pointer on!@-@-oH#OS#OX   @-  h  0!@-,(0 !0PP !O<1$_0_-8!@- @$ cT_! 07  @ ` 6@6  j@9@9Dumps the current graphics window to Epson FX compatible printer Options : W Width in inches or in 1/72" (1/60" with Q option) if >20 H Height " D Density 0..6 (0..7 on EX printers) O Orientation - bit 0=hflip, 1=vflip, 2=rotate 90 P Dot pattern set 0..7 M Left margin in characters Sxxx Do *ShowPic first, xxx are ShowPic options F ScreenLoad image file first I Invert light <-> dark Q Must be given when using Epson LQ series printer W][H][D][P][O][M][S[P][S][L]|F][I][Q]_-p0@P 5 550 PI5p Q5| S5xF5 P 55 5  P5O5D5 !hW5 H5 D50 P5r O5p M5@ r뀟: <- <耟h@ 1 ?: ?:_h@` 4q{ H<X Y  PSLUUUU_- ۟⟏SK3ϵT2>(Cϵ3+-p0 2lpO 2pO 20C5~q`3 p P ✒0@ 0  @0C@Dɠ*9J(,L B58^85WZj8 %X O 0%X Q㨱58[ =007 B Xha|Ql@L 'HaDQDC  Ġ-HFEH2 "  !, À: jDbDRYP` @,**  [ @P[cq5se@-( 1l3 * l2UUUq@UU33ffpwwUUUUUUUUUUUUUUUUUUUUU"UU"UU"UU"UUUUUDQDDDDD@?|?|><>x<x8p8`p`0 @0 @  U~~~~~~~~~~~~|~|~|~|~||||||||<|<|<|<|<<<<<<<<8<8<8<8<888888888888ÁÁÁUUUUUUUUUUUUU*UUUU"UU"UU"UU"UU"UU"UU UUUUUUUTUTDTDDDDDD@P-,`  00  2Defines characters 240..255 from printer dot pattern set n, and displays them if option S given. n> [S]_- !$j2   B2 psqj j7 8; `j 0j`VSmooths the image in digitiser memory Options : S[xxx] Do *ShowPic afterwards - xxx are ShowPic options  Smooth n times (S displays every pass, S displays after last) ] [S[S][P][L]]PSL_-@1  22 S2D`O!j@0 22 0R9RD!j  ,+jK [[c@- T  xЍ_-_-  @ +1   `[p"U2)੐p 6 D 1@ 4 Saves the image currently in digitiser memory Z option does *Zit before save to reduce file size.  [Z]Z_-`O4뀟h2 h. hP   p64p??0 ?0p D0Ap 5 d,0[ j@P@ q5s ;@- ; Ѝbj@-@ P[8     File not foundLoads an image into digitiser memory Options : Sxxx Do *ShowPic after loading, xxx are showpic options O OR new and old images A AND E EXOR M Avarage (mix) images P Add images D Subtract new from old R subtract old from new X Multiply images G Only load pixels greater than originals L Only load pixels less than originals U User defined operation  [S[S][P][L] [A|O|E|M|P|D|R|X|G|L|U]PSLOAEMPDRXGLU_- 22 2 22 2 S2``OYЍbhx0OP@4g Ѝbh4P@ h0z O `    dF& @?@P@5H58 @TP_ h〟r뀟@- ;_ ; ЍbjP ;A-  8          (਀?X?æPCXC(XїXO PatternSet selects the set of dot patterns used as default by the screendump, and onscreen for 2 colour modes. Value may be 1..6, or 7 for user defined patterns PatternSet Q@-0"O0  !h00D0Vp "PatternSet  E@-Bp  "", O40 Shades 16 for 16 grey levels in 256 colour modes  Shades 64 for 64 levels (on monochrome monitor only) Shades P_-0 00O013  뀟 Shades A1664@-Removes spurious noise spots from image in digitiser memory. _-   00 `@P6`R  QZH- _- 7c_hcM@0jH  _-j,  R,   Re?@-P 01210@ 1002@@qp?_- Ph6h&h0E#892  -@T_Z6/@QQ7@-1((1 11A @-hR T@pS0UP@-ttLxP|gf_-Ѝbh?0Ō0ƌ0ƌp 0@t0 | p s   ` 6 B!DAAC86 @<j EQ,hhR , , xx@mOrO <R @@DXF@HjB TR `RT@@DS0PPEY G@/jB dU~S0pSyUPE pZ P P0 P PP0cPe""̌<L%#6>  @ <\\ ! -,|     & r7 0 dP 5C7e@-  1Ōr耀 )P@-  `@D  `@D  `@D  `@D  `@D  `@D  `@D  `@Tȼ pqPP@- ?p p`@TPP-  p pon`@TPeXD-0  ?  zp pNM`@TXdXA-1  `apQQ11p1:P@  pj;xYv&K6 ?  66 lN e{} 77t" w- E+.s Ab }2!]"#y$F%(#&cf'F(n#))- *rܥ+aHu,S>B\>d>>?(I6?R`?K?*??h??ڋ??0?@_-Q@ Qʠ,ʠrD 0Ɍ DAC80@j2* R QA bQ bPZQaoO@D#XZUZE bZe P #N ` @VA 8 @UpA3 `@d9IH \@;#I$` |A6#G$ !̌ AȪ吪" [PEZaZ QQ% 8! A6R   @Q008-, ? 0@ PX     2:  0 8,,0@ P5Z7e@-2BH     2BPXRZ@-2BH   ? 2BPXRZ_-  -4K4 @LȠ@ ˵ŠQpaA0C10@/Q>C-AND+Q>)눝刭刽UQVaWrX U WYZ8Ѝ U W V XܝܭܽZ  P P P  P@- I AQPQ` J QpQ_-_-2   R,bjfˋ?@?H 0[ )1eh\-_?&c?`'c? ($? (),?` * d? h+ l?p , t? x. |3\- ( &d#'t ` p &d Î't_3_-_-0<2   R,jF?@?H01`#`3ˋ 19p7vptpxqvvpt@- +0    h &- 0J That's all folks Thanks to.... Gary Stephenson Mike Muller Bob Antell Costos Notes on Digitiser module version 1.10 (RiscOs version) ======================================================== This version of the digitiser module supports (and only runs under) RiscOS. The bugs in SWI Vdig_WriteColumn and *Configure Shades 16 have been fixed. CHANGES/NOTES FOR RISCOS ======================== SWI Vdig_Scale now works in ALL graphics modes, and should work in user defined modes, as long as the VduVariables are set correctly. SWI Vdig_Rotate now works in all 16,256 colour modes. SWI Vdig_FastGrab, *See, *Grab now work in modes 16,17,21,27,28 SWI Vdig_FastGrab (and *See, *Grab) in mode 16/17 only displays 1024 horizontal pixels (512 if q set), not 1056. *ShowPic does use full width. - this causes *GrabSave to not quite work as expected. SWI Vdig_FastGrab (and *See, *Grab) in 480 line modes crop 32 lines from the top of the picture. Quarterscreen grabs in these modes don't and therefore are a bit bigger then a quarter of a screen (256 lines) When using a lookup table with SWI Vdig_Scale in 4 colour screen modes, the 16 colour user lookup table is used. If the table contains values >3 (e.g. after tables are initialised), strange things will happen onscreen! Slow operations (*Smooth, *PicLoad, *PicSave,*PicDump) display the hourglass. *Picdump also indicates the percentage of time through the dump. *Section M in modes which aren't 1280 by 1024 OS units in size (e.g. 16) doesn't work correctly. Rotate in nonsquare modes (e.g.16) apears to squash the picture *PicDump in mode 16/24 appears rather elongated. This can be altered using the W and H parameters. The above three effects have deliberately not been 'fixed' to retain conststancy with the OS, as most of the OS graphics facilities treat Mode 16 (24) as a horizontally extended mode 12 (15), not as a higher resolution mode. (e.g.circles aren't round on the screen, but will be if *PicDump'd). SWI Vdig_Scale & Vdig_Rotate update the OS_ChangedBox information. WARNING - grabkey may update box info from background, depending on GrabOption settings. SWI Vdig_FastGrab and SWI Vdig_Display DON'T update OS_ChangedBox info, and you also need great care when diverting FastGrab output to a sprite (i.e. end of line wrap needs setting if sprite width is different from the normal screen width). SWI Vdig_Scale and Vdig_Rotate may be used when diverting VDU output to a sprite, but be warned of possible rounding/overflow problems when using BIG sprites, particularly with Rotate. System Variables File$Type_DFA and File$Type_DFB are set up as "Picture" and "LookUp" respectively. *FastSave and FastLoad are no longer needed, as *ScreenLoad/Save are now fast. For compatibility, FastLoad/Save are retained, but now simply do *ScreenLoad and ScreenSave, so error &80030A 'Not a full screen ScreenSave file' no longer exists. Due to high video DMA rates in modes 21,24 and 28, The screen needs to be blanked for 20-40 milliseconds when grabbing, resulting in flicker (like when using Adfs floppies in these modes). When a MODE change occurs, the digitiser software runs a CPU speed test to determine whether DMAs will need disabling whist grabbing. This is done (rather than looking at mode numbers) to allow correct operation in user defined screen modes, or with CPUs running at different speeds. A new SWI is provided to allow applications to deal sensibly with this situation, and to allow control over the threshold used to determine whether DMAs will be disabled : SWI Vdig_DMAThreshold &802D4 On Entry : R0 = New threshold, or 0 to just read info / do test On Exit : A cpu speed test has been performed. R0 = Current threshold (default value is 1000) R1 = Current CPU 'speed' R2 = Current DMA disable flag state (0=enabled,<>0=disabled) The CPU 'speed' figure increases with increasing DMA activity or reducing CPU clock rate. If the speed exceeds the threshold, DMAs will be disabled whilst grabbing. Reducing the threshold causes screen blanking in lower resolution screen modes, while increasing it causes grabbed images to be corrupted in high res screen modes. The CPU speed is tested (and the disable flag updated) on a MODE change, on initialisation, and when this SWI is called. Mode independant applications might use this SWI to suppress continous grabbing in high res. modes to avoid flicker. For example : SYS "Vdig_DMAThreshold" TO ,,flick% : IF flick% THEN NEW FEATURES ============ *See now has another option V, to ignore 'No video signal' errors. SWI Vdig_Tables has two extra reason codes to simplify the writing of screen mode independant applications : R0=9 : Sets up the user lookup table for the current screen mode to give the best approximation to a greyscale, taking into account the current screen mode and palette settings. In 256 colour modes, the 256 colour user lookup table is set, and in other modes the 16 colour table is used). In 256 colour modes, the setting of *Configure Shades is ignored, and the table is set up assuming a colour monitor is in use. In 2 colour modes, the table is set up to contain either 0..15 or 15..0, (used to select the dot pattern number) depending on the relative brightness of the two available logical colours. This call would typically be used by digitiser wimp applications on initalisation, and after a mode or palette change message from the window manager. R0=10 : as above, but takes a 64 byte translation lookup table pointed to by R1, and passes each possible pixel value through it before calculating the nearest logical colour. For example, setting this table to values 63..0 would produce a negative image. Contrast adjustment is also possible using this method, without having to worry about the current mode or palette. The above calls use the ColourTrans module (contained in $.!System.Modules on the applications disk), and if it isn't present, an error will be reported. SWI Vdig_VideoParams has a new parameter in R2 - this is the time threshold used to detect vertical sync. (default 50 arbitary units). The vertical sync pulse is detected when the time between line sync transitions exceeds this value. To avoid problems with old applications, a new value will only be written if R2=&56nnnnnn (=ASC"V"), nnnnnn being the new value. This will only need changing on machines with different CPU speeds, silly DMA rates, or with strange video signals. If The Lingenuity Colour Converter board is fitted, its contrast control is set to maximum, colour saturation to minimum and input channel set to green when the digitiser module is initialised. This allows the converter to be left connected when grabbing mono pictures, as video will be passed straight through. (Technical note : IC bus address 136 is written 3 times with data [1,0] [2,63] and [8,4] respectively) ________________________________________________________________________ A powerful desktop utility for the digitiser is under development, which will allow access to most of the digitiser's facilities from the desktop environment. It will allow images to be grabbed, displayed, and immediately transferred into applications such as Desktop Publishing and drawing programs. It also allows continuous display of the incoming video signal on the screen while other applications are running. Facilities will be provided for stretching, zooming, contrast adjustment and smoothing of te image. This will be released as part of a 64Kbyte ROM upgrade, which will include the updated digitiser module, although probably with a few more facilities in addition to those described above. _________________________________________________________________________Using the Watford Video Digitiser under Risc OS =============================================== An application, !UpdateDig, is provided to update the digitiser software module to version 1.10, which contains support for the extra screen modes and other RiscOs facilities. The file 'NewDigDoc' documents all the changes implemented by this update. The !UpdateDig application will need to be run on power-up, or after a Ctrl-Break. If you want to use the ColourGrab software from the desktop, simply create a directory called !ColourGrab, copy the ColourGrab program into it, and then rename it as !Run. You can then run the program by double-clicking on the !ColourGrab icon. The same procedure can be used with the demo program 'NEWDEMO'. Before running either of the above 2 programs from the desktop, you should ensure that at least 160K of screen memory is available. This may be done either with the task display, or by using the palette utility to select mode 15. New Archimedes products from Watford Electronics. Most of the products mentioned here are at an early stage of development at the time of writing (12/88), and details are subject to change. For information concerning availability, price etc., please contact : Watford Electronics, 250 High Street, Watford WD1 2AN Tel. (0923) 37774 Colour Video Digitiser Due to popular demand, A real-time colour video digitiser is currently under development. This will allow full colour images to be grabbed from any video source, and displayed using various techniques to make the most of the Archimedes' colour display modes. External floppy disk interface Mk.II This upgrade allows the Archimedes to control up to four floppy disk drives, two internal and two external. For compatibility with the PC emulator, the external drives can be switched (via a rear panel mounted switch) to act as drives 1 and 2, or 0 and 1, thus allowing access to any combination of 3.5 and 5.25 inch drive configurations. Tape Streamer A tape streamer provides a fast and convenient means of backing up or archiving hard disks using high capacity tape cartridges. The Watford tape streamer will provide full backup/restore facilities to give effective protection against loss of valuable data. Laser printer digitiser dump software This software allows digitised pictures to be printed on Epson, HP LaserJet, and PostScript compatible laser printers, at up to 300 dots per inch resolution, at any size (including multiple sheets).ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ