@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr atariMbascodervQNQ ILF@L?('+(WA*.*)(]()'m((%)(5)A@A"AA1:6A*C(^&#&A!CEE|FB1::P:F1/=}F7=>>3??$65|25555C5N5 Gyd6yM6{%8{ 98=P-.F*.}q=Z-dZ.ENFONEXDATGINPUDIREALEGOTRUIRESTORGOSURETURRES}TOOPLOASAVDDEPOKLPPRINCONLISCLTCLSCSONETABTFOTHENOSTEЫANOҾSGINABCFSQRLOEXCOSITA}ATPEELEOSTRVAASCHRLEFTRIGHTMIDWGgraphiprintetape checksufile not foundevice not preseninput filoutput fil}missing file namillegal device numbenext without fosyntareturn without gosuout of datillegal quantitoverfloout of me }morundef'd statemenbad subscripredim'd arradivision by zerillegal directype mismatcstring too lonfile datformula too } complecan't continuundef'd functio!!!!!!!!!! ""%"0"@"H"U"f"s"""""""""""J#ok error in READYB }REAK Ɂ! i` #8ÅĪ#8内ƿ8内ƽƿƽ` i>5 }䆐.`Ę(ŗ"H H =3h0hhĘŗ`L@ÅąÈeiĪ8周ƉeƇ }` "" M* *H) *h =&5# p* ;A# p* %ׄ U@ F%L' V) F% % $ & $e܅}Ȅ #܈È & $L$ȱȘeiȑ` >ɛ PL# }`נ߽ 7"V$p-?%0<ՠ܈8 ɀ0ܤș68:I8UУ۽ș}ȹ  дة`ÆıȥÐ Ð êð`ȑii Q&*} 'ↂhhHH`iץi`ɫ V) % [@ ɫБ U@ V)Љhh߱ÍQ ( M*ȱêȱŁ, ; }) *"I+êȱÆÅв L%D M*L& PAL@$08ȹ 0ȹ 0 * ) Q#ihh }# (eHiHHH - O, L, %ƅƩe'L-7 9 [@ɩ U@ L, #: ,HHH (פ@L/(ȱׅȱׅ}eׅא U@ 'L'<逐# H HLU@L):L-L U@ -L(8`R פئ }hhI#Ln$ !@L@L#ׄإ` !@(L& &&L( #HHHHH [@ (L' V) (8倥偰 8eצؐ} %ץ` Q#ɍ ,L#L-hhhhh (eׅא`:,ڠۥۦڅچ۱" `, [@ɉ - }( [@L(L' 5HɍɉБhL' U@ V),h`/ڥԥ & &ee&eڅ U@L\) . -HH `},h* R,h : /ȑȥɑ`L9hŘŗĒ őȤL* 2ӄ 4Š 4ȱȱ` s* [@,}1ɣ9,*;+ `,$0 ; 2 s* *ة *I` * U@L!* 5)5UU 2 4ױ * ,? T>)` L}-Π+ p*ׄ`" i-; - s* 1, * (L( * *L %,ᆧ .פ؅ׄ [@$0h  }* *ׄ U@$$":ک,ۥפi 2 5 )LW+ : ) [@,L*פ؅ׄ [@- -L* (Ȫ ȱhȱׅȱȅ }( [@L$+L'+Lp*`?EXTRA IGNORED?REDO FROM START . Q# L#iHih 9 ʥ b6 }9 U:8 ׽L'i [@, U@ + `,$8$0`L#ע$HH # E- [@8鱐*IEűa} U@L},,{iweLT4i eh~ g O,H ,hV_Fي*נ~ Hٹ H H ,Lk,L-ʾ~ hhH :HH}HHHlh#d O,hJhhhhhhEʅӥ` U@L: F/L-.ɫXɪ"פi 2L5ɨ; /II }L1ɥL 2ɴL- - `,),(,,LU@ L#hhL, .Ȅɦ`$ ȪȱȨL1ȤL9 H U@ - `, - Q,hH!}HH 5hHL. -h LO,. /E܅ڥE܅ 9 /E%EܨE%EL1 R, %΅Ω͠ S:L.Ʊ 4ņƄǥФ"} 4ЄѪ8ũʠ0 *%L4: - . [@` [@݅ [@ F/L-ن U@ F/ U@ F/$ #}ي U@8(L/॑ąœ"biA[8`hH=`Äĥiȅ #ȅ$}ȥéȑȑȑȑȑåiĐȅ` ieäĐȅ` /Ȥ` U@ `, O,0 ɐ / S:Lc0L:HHHH%}H /hhhHHȝɝ [@,҄ -hh)ݦÅŖ9ũȱeêȱeĐע,L# /ܠL&}1 / #֢ȥʆեȑâ $PhihiȑȊ g1Յ֤e]eR #֤ƽ8à'}åđåbȱÅܩՅhhÐȊÐL`0L#ȥ g1eȪeɆʅ֢ʥʆ p1ee`ÅÅ(} *&֐ ee` 4 =38啨喢مƄǢL<:咽Ф,L# 1 1 - . O, - -HHHH)}H (Lf2 - .LO, 1HH - O,hhȱ𙅬ȱH 9HHȱإHH L,hh [@L-hhؠhhȑ*}hȑhȑhȑ` O, ;hhȤɆ 3ƄDž`"چۅӄԅƄǠȱ "ŘeӅզԐ֥ 2Ӥ 4L+}#ŕƕǕȄɄԈن膂`FHI8eĖŕ h`0 =3hЦÆĩł 3,}œ 3󅼆ŕL4ȱȱeȱe(ӊ0ȱ ie懦ż 305ȱ0ȱ+ȱ-}ȱŘ䗰ĐÐÅĥe懦`)JeÅi #ȥ潥ȑLA3HH E- Q,h.}hԠqȐL# 2 4 4 4Ӥ 4 2Lz,HȱӪȱӨh Hhe` Q,ȤɅ 4Hȱȱh(Ę/} Heh`Ą Ń` 5H 2hhhL2 x5ѴHH 2 4hhe懘 4L2 x5IL5 [@) -0} 5 x5KʊH񴰶Iɐɰ -hhhhhhhHH` 5L1 4٨` 5L1Lc0 U@ L, /L[@ 5L6פ؆Մ֦1}eؐ膉H [@ :hդֆׄ` L, 6 -L50ɑ :ȤɄ`HH 6hhL1 6`=Lb6 8IE2}ӥLe6 7< 8L9Ԇͥͨ8$Ť҄Ii0ǨV 7$W8IeԹɹȹǹư B73}JdžƦȆǦɆȦԆɄi Ņ`eԥeхɥeЅȥeυǥe΅L17i&&&&8ŰIiŐBfffff`IʥIƥ4}IǥIȥIɥI `L#Դ̔i0԰vvvvvj`^Vy dv85}8; 54541r #:Lc0HũѠ7 b6֠7 97 K67 =۠7 b6h v;7 8[ 8 Q8 Q8 Q8 Q86} V8L9L~7J eхeЅeυe΅fffffԘJ`шЈψEʅӥ Έͥ`eŐ0,iL67}Ӆ`I0hhL6Ly7 :i r6` :8 9L 9 8v :8Ņ 8 * 蕍248}(&&&ΰ0⨥ɅѥȅХDžϥƅΘLG9@ (L9L#ƥǥȥL6ɈȈLj ƈń`9}, :ɑȑǑ %Ƒő`҅ʢ̕` :ĕ`Ԑ j7L37 *` #:ƩǢ:}I*ɅȆŅԅL6F`ȪıE0! ȱȱ ȩԱ(ʐIL):J8$ H7 7`)F;}ƅ 7`ɠ :ԥʄI*ťɅL6ƅDžȅɨ` -+ U@[..E0 U@ɫ- ɪ+f U@\$8LA<};f$På8 8 80`Lr=H$ 8h80 v;L;H :h 4:EʅӦLe6 d$0Ly7 e q80L(;>nk'=}nk(<# ;ƆǢ8 A: ;Lp* $-ʄȩ0L< ; #8; S:; S: 8 8 D6 :>}i 0 i8†թ.ș0șՠy =ɥy =ȥy =ǥy =00ڊIi i/ȄȪ).șդ?}I)$Ъչ0.ȩ+.8ª-E/8 i:`  @} := 9pL6 9 : S: 9H 7 #8 =hJ I`8;)q4X>Vt~w/z*|cYX ~uƀ1rA}}= #8iP : :Ɉ 8 :i8HʹŕŔ N6 r== >h 8`Մ 9 #8 >L#8Մ 9ՅˤȘB}օդ #8դiȅՄ b6`)%H0HI BhH VL#h`0,HIB VHފۘH PAC}hɈL?йL@ >L5 [@hh` - [@L-_? b6 :d? 8 : : N6i? K6H D60 I r=D}i? b6h r=n?L= 9 > 9 9ʥ [?L9HL?IڢIڢ-(h#5ᆥ](IڢH r=HɁE}7 9? =hɁ_? K6hLr=` vy{| g|S}dpL}Qz}c0~~D:~L̑ =& !@XҎҪ0 H !@hLFF}$Ly$l  PAi j @ H I ` I !@ r@ @L@؄פ: 808`L̅ↂI8G}ꅛ` #AI p*8只 ;9I p*L &JBKED V0J  `,$0L# 4H}` @ @ [@ ,L- U@L_& @ @L$ BLVL-` PAzBʎ ` VL#I}` H 6T - 5UVhLmAp PAyBp VL# [@ *` 6륁 - `,$0L-` J}4ǤąDZH****)h)uB & & &ƅmƱ%I1ȥi'87LB@ `PS))K}))))eeJJ`))))` B#! B Bf#!#I`腀 L}%ÈåiiL&& B4Ӯ Bԍ {B B BEI  M}B DL$@` C C CҠ>LC C C CҠ3LC C C CLCH C N}ChjH CLD ChLC C` =DLC4өԍԩ D Cɛ IHEhH ChɃإO} C D@Ԯ/Ԣ<`6ɧ٩PPҎ͆<xZqjdP_YT%PKeGcC?<8{5z2/,q*(%#P}!Q:x5%Y 9 n f{IHp0Q!zV4vaM:(Q}xqjd^XSNIE@ 6H - 5 DҽDҩ҅Ph) ҥ ŀŁ`腀 %R}L(𥒅Ŀƿ𑿥ॿ"ȱ8eȊL7F BåĦS}L& @ 6H 6 FhJBKED V0, ` 5)i ` F PA#*L5 FIDEHB VT}hh L2 x5H 4٨h FHDEI B V0HI B V0,L14 G΅U} Bԍ {B B BE BE.I  B D4Ӣ D򥛅򥜅V}`` YGLGɛ) #`*4Ӯ YG`` G GW}`ɛ 4 Gԍԩ D C  LHIHEh C ~DL@H*LfHHHGhHgX}HgHȹBBۙH`HhLI6 I7 I   6I7R` BYTES}ATARI BASICODE V. 1.1 08-18-8Y}9 BY ANDREAS GRAFWORKSPACE F@I6 I7 I   6I7R` BYTES}ATARI BASICODE V. 1.1 08-18-8(10 GOTO100020 CLR:DIM OX$(3):GOSUB100:HO=39:VE=23:HG=256:VG=192:GOTO1010100 PRINT"}";:POKE752,1:RETURN110 OE=INT(VE):OO=I[}NT(HO):IFOE<0THENOE=0111 IFOO<0THENOO=0112 IFOE>23THENOE=23113 IFOO>39THENOO=39115 POKE84,OE:POKE85,OO:POKE86,0:RETURN12\}0 HO=PEEK(85):VE=PEEK(84):RETURN150 PRINT" ";CHR$(160);CHR$(160);:IFLEN(SR$)=0THEN170160 FORO=1TOLEN(SR$):PRINTCHR$(ASC(MID]}$(SR$,O,1))+128);:NEXTO170 PRINTCHR$(160);CHR$(160);" ";:RETURN200 IN=0:IN$="":IFPEEK(764)=255THENRETURN201 IN=PEEK(64337+^}PEEK(764)):POKE764,255:IN$=CHR$(IN)202 IFIN=155THENIN=13:RETURN203 IFIN=126THENIN=127:RETURN204 IFIN=30THENIN=28:RETURN20_}5 IFIN=31THENIN=29:RETURN206 IFIN=29THENIN=30:RETURN207 IFIN=28THENIN=31:RETURN208 IFIN>95THENIN=IN-32:GOTO208209 RETURN`}210 GOSUB218:GOSUB200:IFIN=0THEN210211 IFOGTHENPRINT" ";CHR$(30);212 RETURN218 OG=(PEEK(88)+256*PEEK(89))>48000:IFOGTHENPRa}INTCHR$(160);CHR$(30);219 RETURN220 IN=0:IFHO>39ORHO<0ORVE>23ORVE<0THENRETURN230 IN=PEEK(PEEK(88)+256*PEEK(89)+VE*40+HO)ANb}D127231 IFIN<64THENIN=IN+32:RETURN232 IFIN<96THENIN=32:RETURN240 GOTO208250 S.20,15,80:RETURN260 O=PEEK(20)*PEEK(53770)/c}17.359:RV=O-INT(O):RETURN270 FR=F.(0):RETURN280 O=192:IFFRTHENO=64290 POKE16,O:POKE53774,O:RETURN300 SR$=OSTR$(SR)301 IFd}ASC(SR$)=32THENSR$=RIGHT$(SR$,LEN(SR$)-1):GOTO301302 IFASC(SR$)<>45ORLEN(SR$)<3THEN308304 IFMID$(SR$,2,1)="."THENSR$="-0"+Re}IGHT$(SR$,LEN(SR$)-2)308 IFASC(SR$)=46THENSR$="0"+SR$309 RETURN310 O2=0:O1=SR:SR=INT(ABS(SR)*10^CN+.5)312 IFSR>=1E9THENSRf}=INT(SR/10+.5):O2=O2+1:GOTO312315 GOSUB300:IFO2=0THEN319317 FORO=1TOO2:SR$=SR$+"0":NEXTO319 GOSUB320:SR=O1:RETURN320 O=LEg}N(SR$):IFO<=CNTHENFORO2=1TOCN-O+1:SR$="0"+SR$:NEXTO2321 O=LEN(SR$):IFCN>0THENSR$=LEFT$(SR$,O-CN)+"."+RIGHT$(SR$,CN):O=O+132h}2 IFO1*SR<0THENO=O+1:SR$="-"+SR$323 IFO>CTTHENSR$="":FORO=1TOCT:SR$=SR$+"*":NEXTO:RETURN324 IFO=CTTHENRETURN326 O=CT-O:FORi}O2=1TOO:SR$=" "+SR$:NEXTO2:RETURN330 IFLEN(SR$)=0THENRETURN340 OS$="":FORO=1TOLEN(SR$):O1=ASC(MID$(SR$,O,1))AND127341 IFO1j}>95THENO1=O1-32342 OS$=OS$+CHR$(O1):NEXTO344 SR$=OS$:RETURN350 LP.SR$;:RETURN360 LP.:RETURN400 S.SD*5,SV,SP:RETURN450 Ok}=5*SD:POKE20,0:POKE19,0:GOSUB218460 IFPEEK(764)=255THEN480470 SD=(O-256*PEEK(19)-PEEK(20))/5:GOTO210480 IFPEEK(19)*256+PEEl}K(20)7THENIN=-1:RETURN510 O$="B":IFNF<2THEN530m}515 O$="C":IFNF<4THEN530520 O$="D:"+NF$530 O.O$,O,NF:IN=PEEK(32):IFIN THEN590532 IFO=8THEN590535 GOSUB545:IFIN=1THENIN=0n}537 RETURN540 O=INT(NF/2)AND3:IN$=OX$(O)545 O=INT(NF/2)AND3:IFNFAND1THEN555550 OX$(O)=R.(NF):IN=PEEK(32):IFNF<2THENIN=PEEo}K(6)552 IFIN<3THENRETURN555 IN=-1:IN$="":RETURN560 IF(NFAND1)=0THENIN=-1:RETURN570 IN=W.(SR$,NF):GOTO590580 IN=C.(NF)59p}0 IFIN THENIN=-1595 RETURN600 G.:RETURN620 GOSUB621:P.O1,O2,O:RETURN621 O1=HO:IFO1<0THENO1=0622 O2=VE:IFO2<0THENO2=0623q} O1=INT(O1*256)+32:IFO1>287THENO1=287625 O2=INT(O2*192):IFO2>191THENO2=191626 O=1:IFCNTHENO=0627 RETURN630 GOSUB621:D.O1,r}O2,O:RETURN650 GOSUB621:IFO2>184THENO2=184660 O1=INT(O1/8):IFO1>35THENO1=35670 O=255:IFCNTHENO=0680 T.PEEK(88)+256*PEEK(8s}9)+40*O2+O1,O,SR$:RETURN950 GOSUB100:END4660 O1=INT(O1/8):IFO1>35THENO1=35670 O=255:IFCNTHENO=0680 T.PEEK(88)+256*PEEK(8*1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 21010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:Ru}$="":READT$1030 GOSUB1340:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"1060v} PRINT:PRINT" - 1 den Bildschirm,"1070 PRINT" - 2 den Drucker."1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=INw}-48:PRINTSC:IFSC<>2 THENSC=1:GOTO11801100 PRINT:PRINT"Wieviel Leerzeichen "1110 PRINT"am Zeilenanfang ";:INPUTHL1120x} PRINT:PRINT"Wieviel Text-Zeichen "1130 PRINT"auf jeder Zeile ";:INPUTI:HR=HL+I-11140 PRINT:PRINT"Wieviel Leer-Zeilen y} "1150 PRINT"am Seitenende ";:INPUTVL1160 PRINT:PRINT"Wieviel Text-Zeilen "1170 PRINT"auf jeder Seite ";:INPUz}TVR:VR=VR+VL-31180 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1190 GOSUB1310:M$=MM$:AL=VL:IFSC=2 THEN GOSUB12901200 IFLEN(R$)>HR-HL{} THEN GOSUB17301210 GOSUB1370:IFR$<>"" THENR$=R$+" "1220 R$=R$+D$:GOTO12001230 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOT|}O12501240 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01250 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1260 IFSC=1 THEN13101270}} IFVL>0 THENFORI=1 TOVL:GOSUB360:NEXTI1280 AL=VL1290 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12301300 SR$="":GOSUB1230:AL=~}VL:RETURN1310 HO=0:VE=VT:GOSUB1101320 SR$="WEITER: druecke ":GOSUB1501330 GOSUB210:IFIN<>13 THEN13301340 GO}SUB100:AL=VL:SR$=T$1350 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501360 PRINT:PRINT:RETURN1370 READD$1380 IFD$="" THEN1370}1390 IFLEFT$(D$,1)="." THEN14401400 IFLEFT$(D$,1)<>"!" THENRETURN1410 IFD$="!" THEND$="":GOTO14301420 D$=RIGHT$(D$,LEN(D$})-1)1430 GOSUB1670:GOTO13801440 IFD$<>".E" THEN14901450 J=1:GOSUB1670:T$="E N D E"1460 SR$="":GOSUB1230:GOSUB1230:SR$=T$:}GOSUB1230:T$=""1470 SR$="":GOSUB1230:IFAL<>VL THEN14701480 GOTO9501490 DD$=MID$(D$,2,1):D$=RIGHT$(D$,LEN(D$)-2)1500 IFDD$}<>"R" THEN15501510 IFSC=2 THENRETURN1520 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1230:R$=""1530 PRINTM$;R$;:SR$=D$:GOSU}B150:M$=""1540 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO13701550 IFDD$<>"M" THEN15801560 I=VAL(D$):MM$="":IFI+HL=0 THEN13701570 }MM$=LEFT$(S$,I+HL):GOTO13701580 IFDD$="P" THENJ=VAL(D$):GOSUB1670:GOSUB1690:GOTO13701590 IFDD$="T" THENT$=D$:J=10:GOSUB1670}:GOSUB1690:GOTO15101600 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO13701610 IFDD$<>"F" THEN16401620 J=VAL(D$):GOSUB16701630 J=J-}1:IFJ>-1 THENSR$="":GOSUB1230:GOTO16301640 IFDD$<>"C" THEN16601650 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12301660 GOTO13}701670 GOSUB1730:SR$=R$:GOSUB1230:R$="":J=J-11680 RETURN1690 IF(SC=1)OR(AL+J>VR)THEN17101700 SR$="":GOSUB1230:GOSUB1230:R}ETURN1710 IFAL<>VL THENSR$="":GOSUB1230:GOTO17101720 RETURN1730 K=HR-HL+1-LEN(M$)1740 IFLEN(R$)<=K THENRETURN1750 IFMID$}(R$,K,1)=" " THEN17801760 K=K-1:IFK>0 THEN17501770 SR$="":GOTO17901780 SR$=LEFT$(R$,K-1):R$=RIGHT$(R$,LEN(R$)-K)1790 GOSU}B1230:GOTO17301800 REM---------------------------------1810 REM UEBERSETZTE VERSION:1820 REM1830 REM COMPUTER-BULLETIN NO}.32 (7/89)1840 REM STICHTING BASICODE, EINDHOVEN1850 REM---------------------------------25000 DATA"Programmieren in BASIC}ODE (1)"25010 DATA"Grundlagen zum Programmieren in BASICODE sind"25020 DATA"!!- die Programmiersprache BASIC,"25030 DATA"!}- der BASIC-Dialekt des Computers,"25040 DATA"!- die unter BASICODE erlaubten Anweisungen,"25050 DATA"Funktionen, Operatore}n und Variablennamen,"25060 DATA"!- die BASICODE-Subroutinen (Unterprogramme) und"25070 DATA"!- die Regeln zum Aufbau eines} Programms."25080 DATA".P0"25090 DATA"Ausgehend vom 'BASICODE-3-Protokoll' soll auf"25100 DATA"die Besonderheiten hingewie}sen werden."25110 DATA"!!BASIC bzw. BASICODE schliessen strukturiertes"25120 DATA"Programmieren nicht aus, erzwingen es abe}r auch"25130 DATA"nicht, wie z.B. Pascal. Die Gestaltung eines"25140 DATA"Programms liegt in der Hand des Programmierers."}25150 DATA"Vorhandene BASICODE-Programme zeigen, dass es"25160 DATA"moeglich ist, Programme zu strukturieren; sie"25170 DAT}A"geben Anregungen und Beispiele."25180 DATA".P0"25190 DATA".RDer Programmaufbau"25200 DATA"!!Ein Programm besteht aus den} Zeilen"25210 DATA"!! 0 - 999 - BASICODE-Subroutinen,"25220 DATA"! 1000 - 32767 - BASICODE-Programm."25230 DATA"!!Der} erste Teil (# 0 - 999) wird im Speicher"25240 DATA"als BASIC- oder Maschinensprache-Programm"25250 DATA"(durch Laden des B}ascoders) abgelegt."25260 DATA"!Der zweite Teil (# 1000 - 32767) - das"25270 DATA"BASICODE-Programm - wird mit dem fuer"25}280 DATA"jeden Rechner spezifischen Befehl nachgeladen"25290 DATA"oder kann frei programmiert werden."25300 DATA"!!Die Zeil}en # 0 - 999 koennen bzw. duerfen"25310 DATA"nicht veraendert werden!"25320 DATA".P0"25330 DATA"Der Zeilenbereich # 0 - 99}9 hat folgenden"25340 DATA"Aufbau:"25350 DATA"!! 10 GOTO 1000"25360 DATA"! 20 - Ueberfuehren des Computers in"253}70 DATA"! die Betriebsart 'BASICODE'"25380 DATA"! 25 GOTO 1010"25390 DATA"! 100 )"25400 DATA"! . (- Co}mputerspezifische"25410 DATA"! . ( BASICODE-Subroutinen"25420 DATA"! 650 )"25430 DATA"! 950 - Zuruecksetzen in} die"25440 DATA"! normale Betriebsart"25450 DATA"! 955 END"25460 DATA"!!Ist dieser Teil als Maschinensprachepr}ogramm"25470 DATA"abgelegt, so bleibt er 'verdeckt'; er ist nicht"25480 DATA"listbar."25490 DATA".P0"25500 DATA"Das eigen}tliche Programm beginnt mit der"25510 DATA"Zeilenummer # 1000. Der Inhalt dieser Zeile ist"25520 DATA"verbindlich vorgeschr}ieben."25530 DATA"!! 1000 A=wert:GOTO 20:REM programmname"25540 DATA"! 1010 )"25550 DATA"! . ( Hauptprogramm"25560 }DATA"! . ( GOTO 950 (Ende)"25570 DATA"! 19999 )"25580 DATA"! 20000 )"25590 DATA"! . ( Computerspezifische"25600 D}ATA"! . ( Unterprogramme, die in"25610 DATA"! . ( BASICODE nicht erlaubte"25620 DATA"! . ( Anweisungen enthalte}n"25630 DATA"! 24999 )"25640 DATA".P0"25650 DATA" 25000 )"25660 DATA"! . ( DATA-Zeilen"25670 DATA"! 29999 )"25680 D}ATA"! 30000 )"25690 DATA"! . ( REM-Zeilen"25700 DATA"! . ( Hinweise, Bemerkungen"25710 DATA"! 31999 )"25720 DATA"}! 32000 )"25730 DATA"! . ( REM-Zeilen"25740 DATA"! . ( Autor, Computer, Datum"25750 DATA"! 32767 )"25760 DATA".P0}"25770 DATA".RDie Programmzeile"25780 DATA"!!Die Laenge einer Programmzeile ist auf"25790 DATA"60 Zeichen beschraenkt - ei}nschliesslich"25800 DATA"!! - Zeilennummer,"25810 DATA"! - Zwischenraeume und"25820 DATA"! - Abschlusszeichen"25830 DATA"}! (Carriage return, CHR$(13))."25840 DATA"!!In einer Programmzeile koennem mehrere"25850 DATA"Anweisungen - getrennt durc}h ':' (Doppelpunkt) -"25860 DATA"aufgenommen werden."25870 DATA"!Es ist eine gute Gewohnheit, die Zeilen in"25880 DATA"Sc}hritten von '10' zu numerieren (z.B. ... 2000,"25890 DATA"2010, 2020, ...); es bleibt Raum fuer"25900 DATA"Aenderungen und }Ergaenzungen."25910 DATA".P0"25920 DATA".RDie Programmzeile # 1000"25930 DATA"!!Der Inhalt der Zeile # 1000 ist festgelegt}:"25940 DATA"!! A=wert : GOTO 20 : REM programmname"25950 DATA"!!Mit dem Sprung zur Zeile # 20 wird der"25960 DATA"Compute}r in die Betriebsart 'BASICODE' versetzt."25970 DATA"Dazu gehoeren:"25980 DATA"!! - Loeschen des Bildschirms (CLS),"25990 }DATA"! - Loeschen der Variablen (CLR),"26000 DATA"! - Wahl des Text-Modus,"26010 DATA"! - Setzen der Bildschirmfarben"2602}0 DATA"! (Zeichen - weiss,"26030 DATA"! Hintergrund - dunkel),"26040 DATA"! - Deklarieren und Initialisieren der"26050} DATA"! Variablen HO, VE, HG, VG und SV."26060 DATA".P0"26070 DATA"Wichtig ist der Wert der Variablen A, der vom"26080 D}ATA"Programmierer festzulegen ist. Fuer Computer,"26090 DATA"die mit einer Z-80-aehnlichen CPU arbeiten,"26100 DATA"muss de}r String-Speicherraum festgelegt werden"26110 DATA"(z.B. CLEAR 500). Reicht der Speicherplatz nicht"26120 DATA"aus, wird ei}n 'Out of string space'"26130 DATA" (OS) - Fehler angezeigt."26140 DATA"!Bei Rechnern mit dynamischer Speicherverwaltun}g"26150 DATA"(z.B. Commodore) spielt das keine Rolle,ist aber"26160 DATA"zu beachten, um die Portabilitaet der Programme"2}6170 DATA"zu gewaehrleisten. Fuer eine Abschaetzung der"26180 DATA"Wertzuweisung bietet sich an, die Subroutine"26190 DATA"}# 270 zu nutzen, die in der Variablen FR den"26200 DATA"freien Speicherplatz (in Byte) zurueckgibt:"26210 DATA".P0"26220 D}ATA" - Aufstellen des Programms mit A=500,"26230 DATA"! - Abspeichern des Programms,"26240 DATA"! - Aus/Einschalten bzw. Re}set,"26250 DATA"! - Laden des Programms,"26260 DATA"! - GOSUB 270 : PRINT FR (RETURN),"26270 DATA"! - Lauf des Programms,"}26280 DATA"! - GOSUB 270 : PRINT FR (RETURN)."26290 DATA"!!Die Differenz beider Werte ergibt annaehernd"26300 DATA"den Wer}t der aufgerundet der Variablen A"26310 DATA"zuzuweisen ist."26320 DATA".P0"26330 DATA".RBeenden des Programms"26340 DATA}"!!Das Programm ist ordnungsgemaess zu beenden;"26350 DATA"die Verwendung der Anweisungen END oder STOP"26360 DATA"ist verb}oten. Mit dem Sprung 'GOTO 950' wird"26370 DATA"das Programm beendet, der Bildschirm wird"26380 DATA"geloescht, BASICODE-Pr}ogramm und"26390 DATA"-Subroutinen bleiben erhalten."26400 DATA".P0"26410 DATA".REin BASICODE-Programm"26420 DATA"!!Das f}olgende Programm ('programm') laeuft"26430 DATA"schnell ab, hat keinen Effekt, ist aber ein"26440 DATA"BASICODE-Programm:"}26450 DATA"!! 1000 A=100:GOTO 20:REM programm"26460 DATA"! 1010 REM hauptprogramm"26470 DATA"! 1020 GOTO 950"26490 DATA".P}10","Das war das","!!"26500 DATA".C**************************"26510 DATA".C* *"26520 DATA".C* BASI}CODE-3 Journal *"26530 DATA".C* Nummer 2 *"26540 DATA".C* 21 Februar 1990 *"26550 DATA".C* } *"26560 DATA".C**************************",".E"30000 REM30010 REM Grundlagen von BASICODE30020 REM --} PROG-1 --30030 REM32000 REM ---------------------32010 REM FRIEDRICH DORMEIER32020 REM32030 REM D-1000 BERLIN 3932040 }REM32050 REM 11/1989 - C64/C12832060 REM ---------------------32070 REM32080 REM Erstausstrahlung: Radio DDR32090 REM 90}02212050 REM 11/1989 - C64/C12832060 REM ---------------------32070 REM32080 REM Erstausstrahlung: Radio DDR32090 REM 901000 A=500:GOTO20:REM BASICODE-3 JOURNAL 31010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:R }$="":READT$1030 GOSUB1340:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"1060 } PRINT:PRINT" - 1 den Bildschirm,"1070 PRINT" - 2 den Drucker."1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN }-48:PRINTSC:IFSC<>2 THENSC=1:GOTO11801100 PRINT:PRINT"Wieviel Leerzeichen "1110 PRINT"am Zeilenanfang ";:INPUTHL1120 } PRINT:PRINT"Wieviel Text-Zeichen "1130 PRINT"auf jeder Zeile ";:INPUTI:HR=HL+I-11140 PRINT:PRINT"Wieviel Leer-Zeilen } "1150 PRINT"am Seitenende ";:INPUTVL1160 PRINT:PRINT"Wieviel Text-Zeilen "1170 PRINT"auf jeder Seite ";:INPU }TVR:VR=VR+VL-31180 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1190 GOSUB1310:M$=MM$:AL=VL:IFSC=2 THEN GOSUB12901200 IFLEN(R$)>HR-HL } THEN GOSUB17301210 GOSUB1370:IFR$<>"" THENR$=R$+" "1220 R$=R$+D$:GOTO12001230 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOT }O12501240 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01250 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1260 IFSC=1 THEN13101270 } IFVL>0 THENFORI=1 TOVL:GOSUB360:NEXTI1280 AL=VL1290 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12301300 SR$="":GOSUB1230:AL= }VL:RETURN1310 HO=0:VE=VT:GOSUB1101320 SR$="WEITER: druecke ":GOSUB1501330 GOSUB210:IFIN<>13 THEN13301340 GO }SUB100:AL=VL:SR$=T$1350 PRINTLEFT$(S$,(HT-LEN(SR$)/2-3)):GOSUB1501360 PRINT:PRINT:RETURN1370 READD$1380 IFD$="" THEN1370 }1390 IFLEFT$(D$,1)="." THEN14401400 IFLEFT$(D$,1)<>"!" THENRETURN1410 IFD$="!" THEND$="":GOTO14301420 D$=RIGHT$(D$,LEN(D$) }-1)1430 GOSUB1670:GOTO13801440 IFD$<>".E" THEN14901450 J=1:GOSUB1670:T$="E N D E"1460 SR$="":GOSUB1230:GOSUB1230:SR$=T$:G }OSUB1230:T$=""1470 SR$="":GOSUB1230:IFAL<>VL THEN14701480 GOTO9501490 DD$=MID$(D$,2,1):D$=RIGHT$(D$,LEN(D$)-2)1500 IFDD$< }>"R" THEN15501510 IFSC=2 THENRETURN1520 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1230:R$=""1530 PRINTM$;R$;:SR$=D$:GOSUB }150:M$=""1540 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO13701550 IFDD$<>"M" THEN15801560 I=VAL(D$):MM$="":IFI+HL=0 THEN13701570 M }M$=LEFT$(S$,I+HL):GOTO13701580 IFDD$="P" THENJ=VAL(D$):GOSUB1670:GOSUB1690:GOTO13701590 IFDD$="T" THENT$=D$:J=10:GOSUB1670: }GOSUB1690:GOTO15101600 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO13701610 IFDD$<>"F" THEN16401620 J=VAL(D$):GOSUB16701630 J=J-1 }:IFJ>-1 THENSR$="":GOSUB1230:GOTO16301640 IFDD$<>"C" THEN16601650 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12301660 GOTO137 }01670 GOSUB1730:SR$=R$:GOSUB1230:R$="":J=J-11680 RETURN1690 IF(SC=1)OR(AL+J>VR)THEN17101700 SR$="":GOSUB1230:GOSUB1230:RE }TURN1710 IFAL<>VL THENSR$="":GOSUB1230:GOTO17101720 RETURN1730 K=HR-HL+1-LEN(M$)1740 IFLEN(R$)<=K THENRETURN1750 IFMID$( }R$,K,1)=" " THEN17801760 K=K-1:IFK>0 THEN17501770 SR$="":GOTO17901780 SR$=LEFT$(R$,K-1):R$=RIGHT$(R$,LEN(R$)-K)1790 GOSUB }1230:GOTO17301800 REM1810 REM UEBERSETZTE VERSION:1820 REM1830 REM COMPUTER-BULLETIN NO.32 (7/89)1840 REM STICHTING BASI }CODE, EINDHOVEN1850 REM25000 DATA"Programmieren in BASICODE (2)"25010 DATA".RVariable"25020 DATA"!!Wie in allen BASIC-Dia }lekten sind numerische"25030 DATA"und String-Variable zugelassen."25040 DATA"!!Fuer numerische Variablen gilt:"25050 DATA" }! - Typ 'real',"25060 DATA"! - einfache Genauigkeit"25070 DATA"! (6 gueltige Ziffern),"25080 DATA"! - Integer-Variable s }ind nicht erlaubt."25090 DATA"!!Eine Stringvariable wird durch den Zusatz '$'"25100 DATA"nach dem Namen gekennzeichnet; sie } kann 255"25110 DATA"Zeichen lang sein."25120 DATA".P0"25130 DATA"Logische Werte werden je nach Computer"25140 DATA"unter }schiedlich repraesentiert (z.B."25150 DATA"'wahr' => '+1' oder '-1'). Eine logische"25160 DATA"Variable darf deshalb nicht }Gegenstand"25170 DATA"arithmetischer Operationen sein."25180 DATA".P0"25190 DATA"Variablennamen sind maximal zwei Zeichen }lang:"25200 DATA"! - Buchstabe, Buchstabe,"25210 DATA"! - Buchstabe, Ziffer."25220 DATA"!!Ausgeschlossen ist der Gebrauch }von"25230 DATA"Variablennamen,"25240 DATA"! - die mit dem Buchstaben 'O' beginnen;"25250 DATA"! diese sind den BASICODE- }Standard-"25260 DATA"! Routinen vorbehalten,"25270 DATA"! - die BASIC-Schluesselwoerter oder"25280 DATA"! Systemvariab }le darstellen:"25290 DATA"! AS, AT, DI, DI$, DO, DO$, DS, DS$,"25300 DATA"! EI, EI$, EL, ER, FN, GO, GO$, GR, HC,"2531 }0 DATA"! IF, LN, MA, MP, PI, SQ, SQ$, ST, ST$,"25320 DATA"! TI, TI$, TO, TO$,"25330 DATA"! - die Teil von BASICODE-Subr }outinen"25340 DATA"! sind."25350 DATA".P0"25360 DATA"Folgende Variablen werden ueber die BASICODE-"25370 DATA"Unterprog }ramme aufgerufen oder ihnen uebergeben"25380 DATA"und haben eine festgelegte Bedeutung:"25390 DATA"!! HO,VE - Cursor-Posi }tionierung"25400 DATA"! Textbetrieb"25410 DATA"! (# 110, 120)"25420 DATA"! - Auslesen des Text }schirms"25430 DATA"! (# 220)"25440 DATA"! - Cursor-Positionierung"25450 DATA"! Grafik-Betrieb" }25460 DATA"! (# 620 ... 650)"25470 DATA"!! IN, IN$ - Tastaturabfrage"25480 DATA"! - (# 200, 210, 450)"2 }5490 DATA"!! IN - Auslesen Textschirm (# 220)"25500 DATA"! - Status-Variable externe"25510 DATA"! Sp }eicher (# 540, 550, 560)",".P0"25520 DATA" IN$ - Lesen von externen Speichern"25530 DATA"! (# 550)"25540 DAT }A"!! SR, SR$ - Bilden einer Stringvariablen"25550 DATA"! (# 300, 310)"25560 DATA"!! SR$ - String-Ausgabe auf" }25570 DATA"! Bildschirm (# 150, 650)"25580 DATA"! - Drucker (# 350)"25590 DATA"! - Externe Speic }her (# 560)"25600 DATA"! - Klein- => Gross-Buchstaben"25610 DATA"! (# 330)"25620 DATA"!! CN - Forma }tierung numerischer"25630 DATA"! Ausgaben (# 310)"25640 DATA"! - Zeichenfarbe bei grafischem"25650 DATA" }! Betrieb (# 620, 630, 650)"25660 DATA"!! CT - Formatierung numerischer"25670 DATA"! Ausgaben (# 3 }10)",".P0"25680 DATA" NF, NF$ - Externes Speichern von"25690 DATA"! Daten-Files (# 500 ... 580)"25700 DATA"!! FR } - Freier Speicherplatz (# 270)"25710 DATA"! - Wirksamkeit der Stop-Taste"25720 DATA"! (# 280)"2573 }0 DATA"!! SD - Warte-Routine (# 450)"25740 DATA"! - Musik (# 400)"25750 DATA"!! SP, SV - Musik (# 400)"25760 } DATA"!! RV - Zufallsvariable (# 260)"25770 DATA"!! HG, VG - Grafischer Cursor,"25780 DATA"! Bildpunkte"25 }790 DATA"! (# 620, 630, 650)"25800 DATA".P0"25810 DATA"Abweichend vom Umgang mit Variablen, der auf"25820 DATA"m }anchem Computer moeglich ist, sind in BASICODE"25830 DATA"Variable vor ihrem Aufruf im Programm zu"25840 DATA"deklarieren u }nd zu initialisieren, d.h. es ist"25850 DATA"allen im Programm verwendeten Variablen ein Wert"25860 DATA"zuzuweisen. Die Va }riablen HO, VE, HG, VG und SV"25870 DATA"werden durch den Sprung nach Zeile # 20"25880 DATA"initialisiert. Man kann nicht d }avon ausgehen,"25890 DATA"dass den anderen bei ihrem Aufruf implizit der"25900 DATA"Wert '0' oder 'leer' zugewiesen wird." }25910 DATA".P0"25920 DATA".RFeldvariable"25930 DATA"!!Vor Gebrauch in einem Programm sind Felder"25940 DATA"(arrays) zu di }mensionieren. Zugelassen sind ein-"25950 DATA"oder zwei-dimensionale Felder (Listen oder"25960 DATA"Tabellen). Mit der Dime }nsionierung werden"25970 DATA"gleichzeitig die Elemente auf '0' bzw. 'leer'"25980 DATA"gesetzt. Es kann nicht davon ausgega }ngen werden,"25990 DATA"dass der Aufruf einer Feldvariablen im Programm"26000 DATA"automatisch ein Feld mit 11 Elementen"2 }6010 DATA"dimensioniert. Auch Felder mit weniger als 11"26020 DATA"Elementen sind zu dimensionieren (z.B.DIM A(4))."26030 D }ATA"Die Zaehlung der Feldelemente beginnt bei '0'."26040 DATA".P0"26050 DATA".RBASIC-Sprachumfang"26060 DATA"!!Im Vergleic }h zu manchem BASIC-Dialekt ist der"26070 DATA"Sprachumfang reduziert. Um die mit BASICODE"26080 DATA"angestrebte Portabilit }aet der Programme zu"26090 DATA"erreichen, musste die Anzahl der zugelassenen"26100 DATA"BASIC-Anweisungen und -Operatoren }auf den bei"26110 DATA"allen beteiligten Computern vorhandenen Umfang"26120 DATA"beschraenkt werden. Erlaubt ist die Verwen }dung"26130 DATA"folgender Anweisungen:"26140 DATA"!! DATA DEF FN DIM FOR GOSUB"26150 DATA"! GOTO IF INPUT } LET NEXT"26160 DATA"! ON PRINT READ REM RESTORE"26170 DATA"! RETURN STEP TAB THEN TO",26180 DATA".P }0","Funktionen und Operatoren:"26190 DATA"!! ABS ASC ATN CHR$ COS"26200 DATA"! EXP INT LEFT$ LEN LOG }"26210 DATA"! MID$ RIGHT$ SGN SIN SQR"26220 DATA"! TAN VAL"26230 DATA"!! AND OR NOT"26240 DATA"!! ^ } Exponentation"26250 DATA"! * Multiplikation"26260 DATA"! / Division"26270 DATA"! + - Addition"26280 DATA"! - Verk }ettung (concatenation) von"26290 DATA"! Stringvariablen"26300 DATA"! - Subtraktion"26310 DATA"!! = <> )"26320 } DATA"! < > ( Vergleichsoperatoren"26330 DATA"! <= >= )",".P0"26340 DATA"Die Folge der Zeichen der Vergleichsop }eratoren"26350 DATA"'<=', '>=' und '<>' ist vorgeschrieben."26360 DATA".P0"26370 DATA".RDer Zeichensatz"26380 DATA"!!Die }in BASICODE verwendbaren Zeichen werden"26390 DATA"nach ASCII codiert. Zu beachten ist jedoch, dass"26400 DATA"fuer bestimm }te Computer Abweichungen gelten"26410 DATA"(z.B.Commodore) und dass die Steuerkodes nicht"26420 DATA"benutzt werden koennen }. Die ASC- und CHR$-"26430 DATA"Funktionen sind daher mit Vorsicht zu verwenden."26440 DATA"Bei manchen Computern wird eine } exakte Beziehung"26450 DATA"zwischen 'IN' und 'IN$' nicht hergestellt."26460 DATA"!Bei Aufruf der BASICODE-Subroutinen # 2 }00,"26470 DATA"# 210, # 220 und # 450 ist dies zu beachten."26480 DATA".P0"26490 DATA"Der ASCII gilt in folgenden Bereiche }n:"26500 DATA"!! ASCII Zeichen"26510 DATA"! -------------------------------"26520 DATA"! 32 Space"26 }530 DATA"! 33 ... 47 Sonderzeichen"26540 DATA"! 48 ... 57 Ziffern"26550 DATA"! 58 ... 64 Sonderzeichen"2656 }0 DATA"! 65 ... 90 Gross-Buchstaben"26570 DATA"! 91 ... 96 Sonderzeichen"26580 DATA"! 97 ... 122 Klein-Buchst }aben"26590 DATA"! 123 ... 126 Sonderzeichen"26600 DATA"!!Bei der Darstellung der Sonderzeichen koennen"26610 DATA"bei e }inzelnen Computern Unterschiede - je"26620 DATA"nach implementiertem Zeichensatz - auftreten,"26630 DATA"(vergl. 'basicode- }ascii')",".P0"26640 DATA"Bei Lauf eines BASICODE-Programmes auf einem"26650 DATA"Commodore wirkt sich der Unterschied der" }26660 DATA"Codierung zwischen 'echtem' ASCII und CBM-ASCII"26670 DATA"deutlich aus, wenn es sich um die Kodierung"26680 DAT }A"von Gross- und Klein-Buchstaben handelt"26690 DATA"('cbm-ascii')."26700 DATA".P0"26710 DATA"Ausserdem koennen ueber die }Variable 'IN'"26720 DATA"folgende Steuercodes abgefragt werden:"26730 DATA"!! 13 Carriage Return / Enter (CR)"26740 D }ATA"! 28 Cursor nach links"26750 DATA"! 29 Cursor nach rechts"26760 DATA"! 30 Cursor nach unten"26770 DATA"! 31 Cu }rsor nach oben"26780 DATA"! 127 Links ein Zeichen loeschen (DEL)"26790 DATA"!!Diese Steuerfunktionen koennen aber in"2680 }0 DATA"BASICODE-Programmen nicht aufgerufen werden."26810 DATA"Mit den Unterprogrammen # 200, 210 kann"26820 DATA"nur der W !}ert von 'IN' abgefragt werden,"26830 DATA"der zur Steuerung des Programmlaufs"26840 DATA"verwendet werden kann."26850 DATA "}"!Zur Cursor-Positionierung dient allein die"26860 DATA"Subroutine # 110 mit den Variablen HO und VE."26870 DATA".P10","Das #} war das","!!"26880 DATA".C**************************"26890 DATA".C* *"26900 DATA".C* BASICODE-3 $} Journal *"26910 DATA".C* Nummer 3 *"26920 DATA".C* 7. Maerz 1990 *"26930 DATA".C* %} *"26940 DATA".C**************************",".E"30000 REM30010 REM Grundlagen von BASICODE30020 REM -- Teil &}2 --32000 REM --------------------32010 REM FRIEDRICH DORMEIER32020 REM32030 REM D-1000 BERLIN 3932040 REM32050 REM 11/ '}1989 - C64/C12832060 REM --------------------32070 REM32080 REM Erstausstrahlung: Radio DDR32090 REM 90030732050 REM 11/ p1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 41010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:R)}$="":READT$1030 GOSUB1340:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"1060*} PRINT:PRINT" - 1 den Bildschirm,"1070 PRINT" - 2 den Drucker."1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN+}-48:PRINTSC:IFSC<>2 THENSC=1:GOTO11801100 PRINT:PRINT"Wieviel Leerzeichen "1110 PRINT"am Zeilenanfang ";:INPUTHL1120,} PRINT:PRINT"Wieviel Text-Zeichen "1130 PRINT"auf jeder Zeile ";:INPUTI:HR=HL+I-11140 PRINT:PRINT"Wieviel Leer-Zeilen -} "1150 PRINT"am Seitenende ";:INPUTVL1160 PRINT:PRINT"Wieviel Text-Zeilen "1170 PRINT"auf jeder Seite ";:INPU.}TVR:VR=VR+VL-31180 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1190 GOSUB1310:M$=MM$:AL=VL:IFSC=2 THEN GOSUB12901200 IFLEN(R$)>HR-HL/} THEN GOSUB17301210 GOSUB1370:IFR$<>"" THENR$=R$+" "1220 R$=R$+D$:GOTO12001230 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOT0}O12501240 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01250 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1260 IFSC=1 THEN131012701} IFVL>0 THENFORI=1 TOVL:GOSUB360:NEXTI1280 AL=VL1290 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12301300 SR$="":GOSUB1230:AL=2}VL:RETURN1310 HO=0:VE=VT:GOSUB1101320 SR$="WEITER: druecke ":GOSUB1501330 GOSUB210:IFIN<>13 THEN13301340 GO3}SUB100:AL=VL:SR$=T$1350 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501360 PRINT:PRINT:RETURN1370 READD$1380 IFD$="" THEN13704}1390 IFLEFT$(D$,1)="." THEN14401400 IFLEFT$(D$,1)<>"!" THENRETURN1410 IFD$="!" THEND$="":GOTO14301420 D$=RIGHT$(D$,LEN(D$5})-1)1430 GOSUB1670:GOTO13801440 IFD$<>".E" THEN14901450 J=1:GOSUB1670:T$="E N D E"1460 SR$="":GOSUB1230:GOSUB1230:SR$=T$:6}GOSUB1230:T$=""1470 SR$="":GOSUB1230:IFAL<>VL THEN14701480 GOTO9501490 DD$=MID$(D$,2,1):D$=RIGHT$(D$,LEN(D$)-2)1500 IFDD$7}<>"R" THEN15501510 IFSC=2 THENRETURN1520 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1230:R$=""1530 PRINTM$;R$;:SR$=D$:GOSU8}B150:M$=""1540 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO13701550 IFDD$<>"M" THEN15801560 I=VAL(D$):MM$="":IFI+HL=0 THEN13701570 9}MM$=LEFT$(S$,I+HL):GOTO13701580 IFDD$="P" THENJ=VAL(D$):GOSUB1670:GOSUB1690:GOTO13701590 IFDD$="T" THENT$=D$:J=10:GOSUB1670:}:GOSUB1690:GOTO15101600 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO13701610 IFDD$<>"F" THEN16401620 J=VAL(D$):GOSUB16701630 J=J-;}1:IFJ>-1 THENSR$="":GOSUB1230:GOTO16301640 IFDD$<>"C" THEN16601650 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12301660 GOTO13<}701670 GOSUB1730:SR$=R$:GOSUB1230:R$="":J=J-11680 RETURN1690 IF(SC=1)OR(AL+J>VR)THEN17101700 SR$="":GOSUB1230:GOSUB1230:R=}ETURN1710 IFAL<>VL THENSR$="":GOSUB1230:GOTO17101720 RETURN1730 K=HR-HL+1-LEN(M$)1740 IFLEN(R$)<=K THENRETURN1750 IFMID$>}(R$,K,1)=" " THEN17801760 K=K-1:IFK>0 THEN17501770 SR$="":GOTO17901780 SR$=LEFT$(R$,K-1):R$=RIGHT$(R$,LEN(R$)-K)1790 GOSU?}B1230:GOTO17301800 REM1810 REM UEBERSETZTE VERSION:1820 REM1830 REM COMPUTER-BULLETIN NO.32 (7/89)1840 REM STICHTING BAS@}ICODE, EINDHOVEN1850 REM25000 DATA"Progr. in BASICODE (3)"25010 DATA25020 DATA".RFunktionen"25030 DATA"!!Funktionen gebeA}n in Abhaengigkeit von ein,"25040 DATA"zwei oder drei Argumenten einen Wert zurueck,"25050 DATA"der einer Variablen zugewieB}sen oder ausgegeben"25060 DATA"werden kann oder Teil eines Ausdrucks wird."25070 DATA"Bei der Verwendung von Funktionen in"C}25080 DATA"BASICODE-Programmen existieren bestimmte"25090 DATA"Beschraenkungen. Unterschieden werden"25100 DATA"!! - numerD}ische Funktionen,"25110 DATA"! - Zeichenkettenfunktionen und"25120 DATA"! - Hybridfunktionen (Typwandlung)."25130 DATA".P0E}","Numerische Funktionen"25140 DATA"!!Die Standard-Funktionen"25150 DATA"!! - ABS, INT, SGN, EXP, SQR,"25160 DATA"! COS,F} SIN, TAN, ATN"25170 DATA"!!koennen wie ueblich verwendet werden."25180 DATA"!!LOG(argument) gibt den natuerlichen"25190 DG}ATA"Logarithmus zur Basis e (= 2.718...) zurueck."25200 DATA"!Einzelne BASIC-Dialekte geben ueber LOG als"25210 DATA"Wert dH}er Funktion den Logarithmus zur Basis 10."25220 DATA"Es wird zwischen LOG und LN unterschieden."25230 DATA"Der Bascoder gleI}icht dies aus."25240 DATA"!!Fuer die Winkelfunktionen ist das Argument im"25250 DATA"Bogenmass anzugeben.",".P0"25260 DATAJ}"Die numerischen Funktionen"25270 DATA"!! - MEM oder"25280 DATA"! - FRE(parameter)"25290 DATA"!!zur Angabe des freien SpeiK}cherplatzes duerfen"25300 DATA"in BASICODE nicht verwendet werden. Dazu dient"25310 DATA"allein die Subroutine # 270 mit glL}eichzeitiger"25320 DATA"'garbage collection' und die Abfrage des Wertes"25330 DATA"der Variablen FR."25340 DATA"!!Die BildM}ung von Pseudozufallszahlen geschieht"25350 DATA"in BASICODE-Programmen allein ueber die"25360 DATA"Subroutine # 260 und diN}e Variable RV."25370 DATA"Funktionsaufrufe oder Kommandos wie:"25380 DATA"!! - RND(parameter),"25390 DATA"! - RANDOMIZE, RO}AND"25400 DATA"!!sind nicht zugelassen."25410 DATA".P0"25420 DATA"Neben den eingebauten Standardfunktionen"25430 DATA"koeP}nnen auch vom Benutzer definierte Funktionen"25440 DATA"nach ihrer Definition mit DEF FNname verwendet"25450 DATA"werden (vQ}ergl. Teil 4, Vereinbarungen)."25460 DATA".P0"25470 DATA"Zeichenkettenfunktionen"25480 DATA"!!Sie geben als Wert eine StriR}ngkonstante"25490 DATA"zurueck; dazu gehoeren:"25500 DATA"!! - LEFT$(A$, M), )"25510 DATA"! - RIGHT$(A$, M), ( vergleich"S}25520 DATA"! - MID$(A$, M, N) ( 'stringfunkt.'"25530 DATA"! und )"25540 DATA"! - MID$(A$, N). )"25550 DATAT}"!!Der numerische Ausdruck (M, N) kann einen Wert"25560 DATA"von 1 ... 255 annehmen; der Wert '0' fuehrt zu"25570 DATA"eineU}r Fehlermeldung."25580 DATA"!!Zeichenkettenfunktionen durch den Benutzer"25590 DATA"zu definieren, ist in BASICODE-ProgrammV}en nicht"25600 DATA"moeglich.",".P0"25610 DATA"Hybridfunktionen"25620 DATA"!!Damit sollen hier Funktionen bezeichnet"2563W}0 DATA"werden, die einen numerischen in einen"25640 DATA"alphanumerischen Wert und umgekehrt umwandeln."25650 DATA"Diese FuX}nktionen koennen auch in Ausdruecken"25660 DATA"des entsprechenden Typs verwendet werden."25670 DATA"!!In BASICODE-ProgrammY}en sind erlaubt:"25680 DATA"!! - LEN(A$) gibt die Laenge der"25690 DATA"! Zeichenkette (Zeichenzahl)"25700 DZ}ATA"! zurueck."25710 DATA"!! - ASC(A$) ergibt eine Zahl gleich"25720 DATA"! dem ASCII-Wert des er[}sten"25730 DATA"! Zeichens von A$.",".P0"25740 DATA25750 DATA" - CHR$(A) das Zeichen, entsprechend"25760 DA\}TA"! dem ASCII-Wert von A wird"25770 DATA"! angezeigt."25780 DATA25790 DATA"!!Bei der Verwendung d]}er Funktionen ASC und CHR$"25800 DATA"(der Umkehrfunktion von ASC) ist Vorsicht"25810 DATA"geboten, da manche Computer den ^}Zeichensatz"25820 DATA"abweichend vom ASCII kodieren (z.B. C64)."25830 DATA".P0"25840 DATA"Die in BASIC-Dialekten uebliche_}n Funktionen"25850 DATA"VAL(A$) und STR$(A) fuehren eine Typwandlung"25860 DATA"aus, d.h. es werden Zeichenketten mit ihrem`}"25870 DATA"numerischen Wert und numerische Werte als"25880 DATA"Zeichenketten dargestellt."25890 DATA"!!Da die VAL(A$)-Fua}nktion in unterschiedlichen"25900 DATA"Dialekten unterschiedliche Wirkungen hat, ist"25910 DATA"sicherzustellen, das A$ reib}n numerisch ist."25920 DATA"!!Die Funktion STR$(A) ist in BASICODE verboten;"25930 DATA"an ihrer Stelle ist die Subroutine c}# 300 mit den"25940 DATA"Variablen SR bzw. SR$ aufzurufen."25950 DATA".P0"25960 DATA".RLogische Ausdruecke"25970 DATA"!!Dd}ie Bildung logischer Werte ('wahr' oder"25980 DATA"'falsch') geschieht bei verschiedenen Computern"25990 DATA"unterschiedlie}ch. So wird 'wahr' durch '+1' oder"26000 DATA"'-1' dargestellt, 'falsch' meistens durch '0'."26010 DATA"!Um die Portabilitaf}et der Programme zu sichern,"26020 DATA"gelten fuer BASICODE-Programme hinsichtlich der"26030 DATA"Anwendung einige Begrenzg}ungen:"26040 DATA"!! - Logische Werte duerfen nicht Teil"26050 DATA"! arithmetischer Operationen sein,"26060 DATA"!! zq}bVAUTORUN SYSbZROOT BC3bRtKURS1 BC3bbKURS2 BC3bK(KURS3 BC3bp|KURS4 BC3bSKURS5 BC3b\?KURS6 BC3#BKURS7 BC3#aKURS8 BC3#N>KURS9 BC3#%DOS SYS#*DUP SYS#BAUM BC3#DIV2000 BC3.B. A=3*(C=B),",".P0"26070 DATA" - Vergleiche, die 'wahr' oder 'falsch'"26080 DATA"! ergeben, sind in Klammern zu setzen,r}"26090 DATA"! um die Abarbeitungsfolge"26100 DATA"! zu gewaehrleisten:"26110 DATA"!! richtig: A=(B=C)"26120 DATA"! s} falsch: A=B=C"26130 DATA"!! - Die logischen Operatoren AND und OR"26140 DATA"! duerfen in BASICODE nicht zur"26150 DAt}TA"! bitweisen Verknuepfung von Zahlen,"26160 DATA"! z.B. A=5 AND 7"26170 DATA"! verwendet werden."26180 DATA".P0"2u}6190 DATA"Es gilt, dass logische Ausdruecke"26200 DATA"nur in der Form"26210 DATA"!! IF logischer ausdruck THEN anweisung,"v}26220 DATA"! IF logischer ausdruck THEN zeilennr."26230 DATA"!!verwendet werden duerfen (vergl. Teil 5)."26240 DATA".P10",w}"Das war das","!!"26250 DATA".C**************************"26260 DATA".C* *"26270 DATA".C* BASICODEx}-3 Journal *"26280 DATA".C* Nummer 4 *"26290 DATA".C* 21. Maerz 1990 *"26300 DATA".C* y} *"26310 DATA".C**************************",".E"30000 REM30010 REM Grundlagen von BASICODE30020 REM -- Tz}eil 3 --32000 REM --------------------32010 REM FRIEDRICH DORMEIER32020 REM32030 REM D-1000 BERLIN 3932040 REM32050 REM{} 12/1989 - C64/C12832060 REM --------------------32070 REM32080 REM Erstausstrahlung: Radio DDR32090 REM 90032132050 REMt1000 A=500:GOTO20:REM BASICODE-3 Journal 51010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:R}}$="":READT$1030 GOSUB1340:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"1060~} PRINT:PRINT" - 1 den Bildschirm,"1070 PRINT" - 2 den Drucker."1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN}-48:PRINTSC:IFSC<>2 THENSC=1:GOTO11801100 PRINT:PRINT"Wieviel Leerzeichen "1110 PRINT"am Zeilenanfang ";:INPUTHL1120} PRINT:PRINT"Wieviel Text-Zeichen "1130 PRINT"auf jeder Zeile ";:INPUTI:HR=HL+I-11140 PRINT:PRINT"Wieviel Leer-Zeilen } "1150 PRINT"am Seitenende ";:INPUTVL1160 PRINT:PRINT"Wieviel Text-Zeilen "1170 PRINT"auf jeder Seite ";:INPU}TVR:VR=VR+VL-31180 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1190 GOSUB1310:M$=MM$:AL=VL:IFSC=2 THEN GOSUB12901200 IFLEN(R$)>HR-HL} THEN GOSUB17301210 GOSUB1370:IFR$<>"" THENR$=R$+" "1220 R$=R$+D$:GOTO12001230 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOT}O12501240 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01250 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1260 IFSC=1 THEN13101270} IFVL>0 THENFORI=1 TOVL:GOSUB360:NEXTI1280 AL=VL1290 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12301300 SR$="":GOSUB1230:AL=}VL:RETURN1310 HO=0:VE=VT:GOSUB1101320 SR$="WEITER: druecke ":GOSUB1501330 GOSUB210:IFIN<>13 THEN13301340 GO}SUB100:AL=VL:SR$=T$1350 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501360 PRINT:PRINT:RETURN1370 READD$1380 IFD$="" THEN1370}1390 IFLEFT$(D$,1)="." THEN14401400 IFLEFT$(D$,1)<>"!" THENRETURN1410 IFD$="!" THEND$="":GOTO14301420 D$=RIGHT$(D$,LEN(D$})-1)1430 GOSUB1670:GOTO13801440 IFD$<>".E" THEN14901450 J=1:GOSUB1670:T$="E N D E"1460 SR$="":GOSUB1230:GOSUB1230:SR$=T$:}GOSUB1230:T$=""1470 SR$="":GOSUB1230:IFAL<>VL THEN14701480 GOTO9501490 DD$=MID$(D$,2,1):D$=RIGHT$(D$,LEN(D$)-2)1500 IFDD$}<>"R" THEN15501510 IFSC=2 THENRETURN1520 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1230:R$=""1530 PRINTM$;R$;:SR$=D$:GOSU}B150:M$=""1540 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO13701550 IFDD$<>"M" THEN15801560 I=VAL(D$):MM$="":IFI+HL=0 THEN13701570 }MM$=LEFT$(S$,I+HL):GOTO13701580 IFDD$="P" THENJ=VAL(D$):GOSUB1670:GOSUB1690:GOTO13701590 IFDD$="T" THENT$=D$:J=10:GOSUB1670}:GOSUB1690:GOTO15101600 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO13701610 IFDD$<>"F" THEN16401620 J=VAL(D$):GOSUB16701630 J=J-}1:IFJ>-1 THENSR$="":GOSUB1230:GOTO16301640 IFDD$<>"C" THEN16601650 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12301660 GOTO13}701670 GOSUB1730:SR$=R$:GOSUB1230:R$="":J=J-11680 RETURN1690 IF(SC=1)OR(AL+J>VR)THEN17101700 SR$="":GOSUB1230:GOSUB1230:R}ETURN1710 IFAL<>VL THENSR$="":GOSUB1230:GOTO17101720 RETURN1730 K=HR-HL+1-LEN(M$)1740 IFLEN(R$)<=K THENRETURN1750 IFMID$}(R$,K,1)=" " THEN17801760 K=K-1:IFK>0 THEN17501770 SR$="":GOTO17901780 SR$=LEFT$(R$,K-1):R$=RIGHT$(R$,LEN(R$)-K)1790 GOSU}B1230:GOTO17301800 REM1810 REM UEBERSETZTE VERSION:1820 REM1830 REM COMPUTER-BULLETIN NO.32 (7/89)1840 REM STICHTING BAS}ICODE, EINDHOVEN1850 REM25000 DATA"Progr. in BASICODE (4)"25010 DATA25020 DATA"BASICODE baut auf BASIC auf. Bei der zugru}nde"25030 DATA"liegenden Konzeption - Portabilitaet der"25040 DATA"Programme - musste ein Kompromiss ueber den in"25050 DA}TA"BASIC nutzbaren Sprachumfang gefunden werden."25060 DATA"Dies umso mehr als zwischen den BASIC-Dialekten"25070 DATA"der }in das System eingebundenen Computer"25080 DATA"erhebliche Unterschiede bestehen. Das Resultat"25090 DATA"war eine Art Mini}mal-BASIC (vergl. Teil (2)),"25100 DATA"das zwar die ueblichen BASIC-Anweisungen,"25110 DATA"-Funktionen und -Operatoren ei}nschliesst,"25120 DATA"aber fuer sie eine u.U. vom Gewohnten"25130 DATA"abweichende, bestimmte Syntax vorschreibt."25140 D}ATA".P0"25150 DATA".RVereinbarungen"25160 DATA"!!Unmittelbar am Anfang des Programms sind"25170 DATA"benoetigte Variablen-}Felder zu dimensionieren"25180 DATA"und Funktionen zu definieren (DIM, DEF FNname)."25190 DATA"!!DIM Variable (ganze Zahl)"}25200 DATA"!DIM Variable (ganze Zahl, ganze Zahl)"25210 DATA"!!Damit wird eine Feldvariable dimensioniert:"25220 DATA"! - }eindimensional (Liste) oder"25230 DATA"! - zweidimensional (Tabelle)."25240 DATA"!!Variablenfelder mit mehr als zwei Dimens}ionen"25250 DATA"sind nicht erlaubt. Felder sind auch dann zu"25260 DATA"dimensionieren, wenn sie nur bis zu 10 oder 11"25}270 DATA"Elemente enthalten. Man kann nicht voraussetzen,"25280 DATA"dass automatisch beim erstmaligen Aufruf"25290 DATA"ei}ner Feldvariablen ein Feld dimensioniert"25300 DATA"wird. Der Name kennzeichnet das Feld; endet er"25310 DATA"mit '$' so we}rden Zeichenketten erwartet."25320 DATA"Mit der DIM-Anweisung wird fuer die"25330 DATA"Feldvariable Speicherplatz reservier}t, u.U. ist"25340 DATA"die Dimensionierung zu ueberpruefen und der"25350 DATA"Groesse des Arbeitsspeichers anzupassen."253}60 DATA"!!Die Zaehlung der Elemente beginnt mit '0'"25370 DATA"(Null). Mit DIM A$(3) bzw. DIM B(4,4) werden"25380 DATA"Feld}er mit 4 bzw. 25 Elementen dimensioniert."25390 DATA"!Mit einer DIM-Anweisung koennen auch mehrere"25400 DATA"Felder dimens}ioniert werden, z.B."25410 DATA"!! DIM A(10), B$(5,5), ...",".P0"25420 DATA"Im Programm ist zu vermeiden, dass Felder"254}30 DATA"ein zweites Mal dimensioniert werden."25440 DATA"Dies kann bei Rueckspruengen auftreten und"25450 DATA"fuehrt zu ei}ner Fehlermeldung bzw. zum Abbruch"25480 DATA"des Programms."25490 DATA".P0"25500 DATA"DEF FN(name) = arithm. Ausdruck"25}510 DATA25520 DATA"!!Hiermit koennen arithmetische Funktioen fuer"25530 DATA"die Verwendung im Programm definiert werden."}25540 DATA"Parameter- und Ergebnisbereich umfassen"25550 DATA"Gleitkomma- (real-) Zahlen.",".P0"25560 DATA"Fuer BASICODE-3-}Programme gelten folgende"25570 DATA"Beschraenkungen:"25580 DATA"!! - Als Name der Funktion darf nur ein"25590 DATA"! fu}er eine numerische Variable"25600 DATA"! erlaubter Name gebraucht werden."25610 DATA"! - Die Funktionsdefinition darf nur}"25620 DATA"! eine Programmzeile (max. 60 Zeichen)"25630 DATA"! ausfuellen."25640 DATA"! - Erlaubt sind nur numerische} oder"25650 DATA"! logische Funktionen."25660 DATA"! (Vorsicht bei Verwendung logischer"25670 DATA"! Werte in arithm}etischen Operationen!)"25680 DATA"! - Die Funktion muss vor ihrem ersten"25690 DATA"! Aufruf definiert worden sein."2570}0 DATA".P0"25710 DATA".RDaten im Programm"25720 DATA"!!Es ist selbstverstaendlich, dass zu einem"25730 DATA"Programm auch }die zu verarbeitenden Daten"25740 DATA"gehoeren.","!Fuer BASICODE-3-Programme gibt"25750 DATA"es folgende Moeglichkeiten:"}25760 DATA"!! - als Teil des Programms:"25770 DATA"! * Wertzuweisung (LET),"25780 DATA"! * Datenliste (DATA, READ, REST}ORE),"25790 DATA"! - interaktive Eingabe (INPUT),"25800 DATA"! - Zugriff auf externe Speicher,"25810 DATA"! (Subroutinen} # 500, 540, 580)"25820 DATA"!!LET Variable = Wert"25830 DATA"! (Gleitkommazahl oder Zeichenkette)"25840 DATA"!!Im allg}emeinen erlauben es die BASIC-Dialekte"25850 DATA"LET wegzulassen; die Verwendung ist optional."25860 DATA"Fuer das Sinclai}r-Spectrum-BASIC wird die"25870 DATA"Wertzuweisung mit diesem Schluesselwort vom"25880 DATA"Uebersetzungsprogramm ergaenzt.} Allerdings macht"25890 DATA"LET in einer Programm-Zeile den Unterschied"25900 DATA"zwischen Wertzuweisung und logischem Ve}rgleich"25910 DATA"deutlich."25920 DATA".P0"25930 DATA"DATA Konstante, Konstante, ..."25940 DATA"!READ Variable, Variable}, ..."25950 DATA"!RESTORE"25960 DATA"!!"25970 DATA"Mit den Anweisungen DATA und READ werden"25980 DATA"numerischen oder S}tring-Variablen Werte"25990 DATA"aus einer Konstanten-Liste zugewiesen."26000 DATA"Fuer DATA-Zeilen gilt:"26010 DATA"!! - }Konstanten sind mit einem Komma zu"26020 DATA"! trennen."26030 DATA"! - Zeichenketten (strings) sind in"26040 DATA"! A}nfuehrungszeichen zu setzen."26050 DATA"! - Die Numerierung der DATA-Zeilen im"26060 DATA"! Programm beginnt bei # 25000.}"26070 DATA"! - In der DATA-Zeile duerfen nach der"26080 DATA"! Datenliste keine weiteren Anweisungen"26090 DATA"! (au}ch kein REM) folgen!"26100 DATA".P0"26110 DATA"Die READ-Anweisung enthaelt die Variablen,"26120 DATA"denen die Daten zugew}iesen werden sollen."26130 DATA"Auf die Gleichheit des Typs von Variablen und"26140 DATA"Daten ist zu achten."26150 DATA"!}!Beispiel:"26160 DATA"!! nnnnn READ A,B,C$,D$"26170 DATA"! 25000 DATA 100,200,"26180 DATA".QHallo",".Q,",".QBASICODE",".Q }"26190 DATA"!!Hinter READ koennen mehrere Variablen - "26200 DATA"getrennt durch Kommata - aufgefuehrt werden."26210 DATA"}.P0"26220 DATA"Nach jedem Lesen (READ) eines Datenelementes"26230 DATA"stellt der Computer intern einen Zeiger auf das"262}40 DATA"naechste Element weiter. Mit der Anweisung"26250 DATA"RESTORE wird der Zeiger auf das erste Element"26260 DATA"der }Datenliste zurueckgesetzt. Der in den"26270 DATA"DATA-Zeilen erfasste Bestand wird von"26275 DATA"Beginn an erneut gelesen.}"26280 DATA"!Die Form 'RESTORE zeilennummer', mit der der"26290 DATA"Zeiger auf einen bestimmten Teil der Datenliste"26300} DATA"gesetzt wird, ist in BASICODE-3 verboten."26310 DATA".P0"26320 DATA"INPUT Variable"26330 DATA"!INPUT ",".QZeichenket}te",".Q ","; Variable"26340 DATA"!!Nach der INPUT-Anweisung wartet der Computer"26350 DATA"auf ueber die Tastatur einzugebe}nde Daten,"26360 DATA"die der bezeichneten Variablen zugewiesen"26370 DATA"werden. Die Eingabe muss dem Typ der Variablen"}26380 DATA"entsprechen (numerisch oder Zeichenkette)."26390 DATA"!Die nach INPUT angezeigte Zeichenkette kann"26400 DATA"ei}nen Benutzerhinweis (prompt) enthalten. Nach"26410 DATA"INPUT darf nur eine Variable folgen; fuer"26420 DATA"mehrere Variab}len ist die INPUT-Anweisung zu"26430 DATA"wiederholen. 'Komma' oder 'Doppelpunkt' duerfen"26440 DATA"nicht eingegeben werde}n."26450 DATA"!Mit der Subroutine # 110 kann die Eingabe auf"26460 DATA"dem Bildschirm plaziert werden."26470 DATA".P0"26}480 DATA"BASICODE-Subroutinen # 500, 540, 580"26490 DATA"!!Ueber die Unterprogamme # 500, 540, 580 ist es"26500 DATA"moegli}ch, Daten aus sequentiellen Files zu"26510 DATA"lesen, die auf Cassette oder Diskette extern"26520 DATA"gespeichert sind (s}iehe weiter unten)."26530 DATA".P0"26540 DATA".RAusgabe der Daten"26550 DATA"!!Daten als Ergebnis des Laufs eines Programm}s"26560 DATA"koennen mit folgenden Anweisungen bzw."26570 DATA"Unterprogrammen ausgegeben werden:"26580 DATA"!! - Bildschi}rm (PRINT),"26590 DATA"! - Drucker"26600 DATA"! (Subroutinen # 350, 360),"26610 DATA"! - Speicherung auf Cassette oder"}26620 DATA"! Diskette"26630 DATA"! (Subroutinen # 500, 560, 580).",".P0"26640 DATA"PRINT Konstante"26650 DATA"!PRINT V}ariable"26660 DATA"!PRINT Ausdruck"26670 DATA"!!Konstanten, Variablen und Ausdruecke koennen"26680 DATA"numerisch (Zahlen,} arithmetische Ausdruecke)"26690 DATA"oder Zeichenketten sein. Zeichenkonstante"26700 DATA"sind in Anfuehrungszeichen zu se}tzen."26710 DATA"!Steuerbefehle (Kontrollzeichen) duerfen nicht"26720 DATA"ueber eine PRINT-Anweisung uebertragen werden."}26730 DATA"Eine 'leere' PRINT-Anweisung bewirkt die Ausgabe"26740 DATA"einer Leerzeile."26750 DATA"!Sollen Anfuehrungszeich}en in einer Zeichenkette"26760 DATA"ausgegeben werden, so geht dies nur ueber den"26770 DATA"Ausdruck des ASCII-Zeichencode}s (# 34), d.h."26780 DATA"PRINT CHR$(34)."26790 DATA".P0"26800 DATA"BASIC-Dialekte erlauben in Verbindung mit der"26810 D}ATA"PRINT-Anweisung die"26820 DATA"! - Positionierung (LOCATE, PRINT AT),"26830 DATA"! - Tabellierung (SPC(), TAB()),"2684}0 DATA"! Komma als Trennzeichen (delimiter)"26850 DATA"! - und die Formatierung (PRINT USING)"26860 DATA"!der Ausgabe. In} BASICODE-3-Programmen muss die"26870 DATA"Positionierung und Tabellierung der Ausgabe"26880 DATA"ueber die Subroutinen # 1}10, die Formatierung"26890 DATA"ueber die Subroutine # 310 durchgefuehrt werden."26900 DATA"!!Obwohl die Anweisung PRINT TA}B() zugelassen"26910 DATA"ist, muss von ihrer Anwendung abgeraten werden,"26920 DATA"da zwischen BASIC-Dialekten Unterschie}de bei der"26930 DATA"Verwendung des Argumentes zu TAB bestehen (0 ..."26940 DATA"oder 1 ...)."26950 DATA".P0"26960 DATA"}Zugelassen und vorgeschrieben ist als"26970 DATA"Trennzeichen nach einer PRINT-Anweisung das"26980 DATA"Semikolon (;), das }'Wagenruecklauf' (CR) und"26990 DATA"Linefeed (LF) unterdrueckt. Ausserdem ist die"27000 DATA"Verwendung als Trennzeichen d}er Elemente einer"27010 DATA"Ausgabeliste vorgeschrieben.","!!Beispiele:"27020 DATA"!! PRINT A;B;C$;D$"27030 DATA"! PRINT"},".QHallo ",".Q;",".QOtto",".Q "27040 DATA"!!Im ersten Beispiel dienen die Semikolons als"27050 DATA"Trennzeichen, im zweit}en als Trennzeichen und"27060 DATA"zur Unterdrueckung des Ruecklaufs (CR und LF) am"27070 DATA"Zeilenende.",".P0"27080 DAT}A"BASICODE-Subroutinen # 350, 360"27090 DATA"!!Ueber diese Unterprogramme koenen Daten und"27100 DATA"Konstanten (Zahlen un}d Zeichenketten) nach"27110 DATA"Zuweisung zur Variablen SR$ ueber einen Drucker"27120 DATA"ausgegeben werden."27130 DATA"}!!BASICODE-Subroutinen # 500, 560, 580"27140 DATA"!!Hiermit ist eine Speicherung von Daten auf"27150 DATA"externen Medien (}Cassette oder Diskette)"27160 DATA"moeglich (siehe weiter unten)."27170 DATA".P10","Das war das","!!"27180 DATA".C********}*****************"27190 DATA".C* *"27200 DATA".C* BASICODE-3 Journal *"27210 DATA".C* Numme}r 5 *"27220 DATA".C* 26. April 1990 *"27230 DATA".C* *"27240 DATA".C******************}*******",".E"30000 REM30010 REM Grundlagen von BASICODE30020 REM -- Teil 4 --32000 REM --------------------32010 R}EM FRIEDRICH DORMEIER32020 REM32030 REM D-1000 BERLIN 3932040 REM32050 REM 12/1989 - C64/C12832060 REM -----------------}---32070 REM32080 REM Erstausstrahlung: Radio DDR32090 REM 90042632050 REM 12/1989 - C64/C12832060 REM -----------------E1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 61010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:R}$="":READT$1030 GOSUB1340:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"1060} PRINT:PRINT" - 1 den Bildschirm,"1070 PRINT" - 2 den Drucker."1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN}-48:PRINTSC:IFSC<>2 THENSC=1:GOTO11801100 PRINT:PRINT"Wieviel Leerzeichen "1110 PRINT"am Zeilenanfang ";:INPUTHL1120} PRINT:PRINT"Wieviel Text-Zeichen "1130 PRINT"auf jeder Zeile ";:INPUTI:HR=HL+I-11140 PRINT:PRINT"Wieviel Leer-Zeilen } "1150 PRINT"am Seitenende ";:INPUTVL1160 PRINT:PRINT"Wieviel Text-Zeilen "1170 PRINT"auf jeder Seite ";:INPU}TVR:VR=VR+VL-31180 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1190 GOSUB1310:M$=MM$:AL=VL:IFSC=2 THEN GOSUB12901200 IFLEN(R$)>HR-HL} THEN GOSUB17301210 GOSUB1370:IFR$<>"" THENR$=R$+" "1220 R$=R$+D$:GOTO12001230 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOT}O12501240 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01250 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1260 IFSC=1 THEN13101270} IFVL>0 THENFORI=1 TOVL:GOSUB360:NEXTI1280 AL=VL1290 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12301300 SR$="":GOSUB1230:AL=}VL:RETURN1310 HO=0:VE=VT:GOSUB1101320 SR$="WEITER: druecke ":GOSUB1501330 GOSUB210:IFIN<>13 THEN13301340 GO}SUB100:AL=VL:SR$=T$1350 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501360 PRINT:PRINT:RETURN1370 READD$1380 IFD$="" THEN1370}1390 IFLEFT$(D$,1)="." THEN14401400 IFLEFT$(D$,1)<>"!" THENRETURN1410 IFD$="!" THEND$="":GOTO14301420 D$=RIGHT$(D$,LEN(D$})-1)1430 GOSUB1670:GOTO13801440 IFD$<>".E" THEN14901450 J=1:GOSUB1670:T$="E N D E"1460 SR$="":GOSUB1230:GOSUB1230:SR$=T$:}GOSUB1230:T$=""1470 SR$="":GOSUB1230:IFAL<>VL THEN14701480 GOTO9501490 DD$=MID$(D$,2,1):D$=RIGHT$(D$,LEN(D$)-2)1500 IFDD$}<>"R" THEN15501510 IFSC=2 THENRETURN1520 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1230:R$=""1530 PRINTM$;R$;:SR$=D$:GOSU}B150:M$=""1540 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO13701550 IFDD$<>"M" THEN15801560 I=VAL(D$):MM$="":IFI+HL=0 THEN13701570 }MM$=LEFT$(S$,I+HL):GOTO13701580 IFDD$="P" THENJ=VAL(D$):GOSUB1670:GOSUB1690:GOTO13701590 IFDD$="T" THENT$=D$:J=10:GOSUB1670}:GOSUB1690:GOTO15101600 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO13701610 IFDD$<>"F" THEN16401620 J=VAL(D$):GOSUB16701630 J=J-}1:IFJ>-1 THENSR$="":GOSUB1230:GOTO16301640 IFDD$<>"C" THEN16601650 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12301660 GOTO13}701670 GOSUB1730:SR$=R$:GOSUB1230:R$="":J=J-11680 RETURN1690 IF(SC=1)OR(AL+J>VR)THEN17101700 SR$="":GOSUB1230:GOSUB1230:R}ETURN1710 IFAL<>VL THENSR$="":GOSUB1230:GOTO17101720 RETURN1730 K=HR-HL+1-LEN(M$)1740 IFLEN(R$)<=K THENRETURN1750 IFMID$}(R$,K,1)=" " THEN17801760 K=K-1:IFK>0 THEN17501770 SR$="":GOTO17901780 SR$=LEFT$(R$,K-1):R$=RIGHT$(R$,LEN(R$)-K)1790 GOSU}B1230:GOTO17301800 REM1810 REM UEBERSETZTE VERSION:1820 REM1830 REM COMPUTER-BULLETIN NO.32 (7/89)1840 REM STICHTING BAS}ICODE, EINDHOVEN1850 REM25000 DATA"Progr. in BASICODE (5)"25010 DATA25020 DATA".RProgrammsteuerungsanweisungen"25030 DAT}A"!!Mit diesen Anweisungen ist es moeglich, ein"25040 DATA"Programm nicht in der Folge der Zeilennummern"25050 DATA"abzuarb}eiten, sondern den Programmlauf in einer"25060 DATA"bestimmten Zeile fortzusetzen oder zu beenden."25070 DATA"!Dazu gehoere}n:"25080 DATA"!! - GOTO, ON ... GOTO,"25090 DATA"! - IF ... THEN,"25100 DATA"! - FOR ... NEXT,"25110 DATA"! - Aufruf von }Unterprogrammen"25120 DATA"! (GOSUB, ON ... GOSUB),"25130 DATA"! - unterbrechen bzw. beenden des"25140 DATA"! Programm }s (STOP, END)."25150 DATA".P0"25160 DATA"GOTO Zeilennummer"25170 DATA"!!ON Variable GOTO Zn1,Zn2,..."25180 DATA"!ON Ausdr }uck GOTO Zn1,Zn2,..."25190 DATA"!!Damit wird das Programm mit den Anweisungen"25200 DATA"der angegebenen Zeilennummer fortg }esetzt."25210 DATA"Das Sprungziel darf nur eine im Programm"25220 DATA"vorhandene Zeilennummer sein. Verboten sind"25230 D }ATA"!! - Spruenge zu BASICODE-Subroutinen,"25240 DATA"! Ausnahme: GOTO 20 - Zeile # 1000,"25250 DATA"! GOTO } 950 - Programmende,"25260 DATA"! GOTO 1000 - RUN im Progr."25270 DATA"! - Sprunganweisungen folgender Form:"}25280 DATA"! A=2000 : GOTO A"25290 DATA".P0"25300 DATA"Sorgfalt ist geboten, wenn der Sprung aufgrund"25310 DATA"des Wer}tes einer Variablen oder eines Ausdrucks"25320 DATA"ausgefuehrt werden soll (ON ... GOTO ...,"25330 DATA"computed GOTO)."2}5340 DATA"!Der Wert der Variablen bzw. des Ausdrucks muss"25350 DATA"ganzzahlig sein. Sofern der BASIC-Interpreter"25360 DA}TA"dies nicht ueberwacht, ist die INT-Funktion zu"25370 DATA"verwenden. Ist der ganzzahlige Wert kleiner als"25380 DATA"1 o}der groesser als die Anzahl der Zeilennumern"25390 DATA"(Sprungziele), so wird die naechstfolgende"25400 DATA"Anweisung aus}gefuehrt."25410 DATA"!So darf 'K' nur folgende Werte annehmen:"25420 DATA"!! ON K GOTO 2000,3000,4000"25430 DATA"! K=1, 2,} 3"25440 DATA"!! ON K-10 GOTO 5000,6000,7000"25450 DATA"! K=11, 12, 13"25460 DATA"!!Es ist deshalb sinnvoll, den Wert von }'K' vor"25470 DATA"einer solchen Anweisung durch das Programm"25480 DATA"pruefen zu lassen."25490 DATA".P0"25500 DATA"IF }log. Ausdruck THEN Zeilennummer"25510 DATA"!IF log. Ausdruck THEN Anweisung"25520 DATA"!!Die in BASICODE zugelassene einfac}he"25530 DATA"IF-Anweisung bewirkt, dass das Programm mit der"25540 DATA"folgenden Anweisung (Zeile) fortgesetzt wird,"255}50 DATA"falls der logische Ausdruck 'falsch' ist; ist er"25560 DATA"'wahr', wird die nach THEN folgende Anweisung"25570 DAT}A"ausgefuehrt."25580 DATA"!!Die zweiseitig bedingte IF-Anweisung der Form"25590 DATA"!!IF log.Ausdruck THEN Anweisung ELSE }Anweisung"25600 DATA"!!ist in BASICODE nicht zugelassen."25610 DATA"!!An Stelle des Ausdrucks kann auch eine"25620 DATA"lo}gische Variable eingesetzt werden, womit"25630 DATA"folgende Konstruktion moeglich wird:"25640 DATA"!! A=(B=3)"25650 DATA"}! IF A THEN ..."25660 DATA"!!Fuer die Lesbarkeit eines Programms ist es"25670 DATA"jedoch besser, wenn der logische Ausdruc}k hinter"25680 DATA"IF explizit angegeben wird."25690 DATA"!!Soll aufgrund des Wertes eines log. Ausdrucks"25700 DATA"ein }Sprung (GOTO) zu einer anderen Programmzeile"25710 DATA"ausgefuehrt werden, muss die Anweisung folgende"25720 DATA"Form hab}en:"25730 DATA"!! IF log. Ausdruck THEN Zeilennummer"25740 DATA"!!Nicht zugelassen sind:"25750 DATA"!! IF log. Ausdruck TH }EN GOTO Zeilennummer"25760 DATA"! IF log. Ausdruck GOTO Zeilennummer"25770 DATA"!!Der Aufruf eines Unterprogramms mit GOSUB!} wird"25780 DATA"wie eine Anweisung behandelt:"25790 DATA"!! IF log. Ausdruck THEN GOSUB Zeilennummer"25800 DATA"! IF log."} Ausdruck THEN PRINT ..."25810 DATA"! IF log. Ausdruck THEN Variable=Wert"25820 DATA".P0"25830 DATA"FOR ... TO ... NEXT"2#}5840 DATA"!!Die aus BASIC bekannte Schleifenkonstruktion"25850 DATA"!! FOR Llaufvariable = Anfang TO Grenze"25860 DATA"! (S$}TEP Schrittweite)"25870 DATA"!! Schleifeninhalt"25880 DATA"!! NEXT Laufvariable"25890 DATA"!!kann in BASICODE uneinge%}schraenkt verwendet"25900 DATA"werden.",".P0"25910 DATA"Zu beachten ist, dass hinter NEXT die"25920 DATA"zugehoerige Laufv&}ariable angegeben wird; dies"25930 DATA"gilt vor allem fuer verschachtelte Schleifen."25940 DATA"Die Angabe von zwei oder m'}ehr Laufvariablen"25950 DATA"ist unzulaessig:"25960 DATA"!! FOR A=1 TO 10"25970 DATA"! FOR B=1 TO 10"25980 DATA"!! Sc(}hleifeninhalt"25990 DATA"!! NEXT B"26000 DATA"! NEXT A"26010 DATA" (nicht NEXT B,A !)"26020 DATA".P0"26030 DATA"Unterpro)}gramme (Subroutinen)"26040 DATA"!!Unterprogramme haben in BASICODE-Programmen"26050 DATA"eine besondere Bedeutung:"26060 D*}ATA"!! - sie stellen die BASICODE-Routinen"26070 DATA"! dar, die die Portabilitaet der"26080 DATA"! Programme moeglich +}machen"26090 DATA"! - in BASICODE-Programmen sind sie"26100 DATA"! die Programm-Module, die fuer ein"26110 DATA"! stru,}kturiertes Programmieren not-"26120 DATA"! wendig sind.",".P0"26130 DATA"Der Aufruf eines Unterprogramms erfolgt mit"261-}40 DATA"!! GOSUB Zeilennummer"26150 DATA"!!Zum berechneten GOSUB (ON ... GOSUB ...)"26160 DATA"s.o. die Ausfuehrungen zu ON.} ... GOTO ... !"26170 DATA"!!Jedes Unterprogramm ist mit RETURN"26180 DATA"abzuschliessen.",".P0"26190 DATA"Beenden des Pr/}ogramms"26200 DATA"!!Zum Unterbrechen bzw. zum Beenden des"26210 DATA"Programms dienen in den BASIC-Dialekten die"26220 DA0}TA"Anweisungen STOP und END; in BASICODE-Programmen"26230 DATA"ist deren Verwendung verboten. Das Programm ist"26240 DATA"m1}it dem unbedingten Sprung"26250 DATA"!! 'GOTO 950' zu beenden."26260 DATA".P0"26270 DATA".RREM-Anweisungen"26280 DA2}TA"!!Die Funktion der REM-Anweisung ist bekannt;"26290 DATA"mit ihr koennen Anmerkungen, Hinweise,"26300 DATA"Kennzeichnung3} von Abschnitten in einem Programm"26310 DATA"untergebracht werden. Sie erscheinen jedoch nur"26320 DATA"im Listing des Pro4}gramms. Beim Programmlauf"26330 DATA"werden sie vom Interpreter ueberlesen."26340 DATA"!Das BASICODE-System geht in seiner 5}Konzeption"26350 DATA"von einer Nutzung der Programme durch andere"26360 DATA"aus, so dass sich der Zweck von Erlaeuterunge6}n"26370 DATA"allein schon daraus ergibt. Ausserdem wird der"26380 DATA"Autor des Programms nach einiger Zeit fuer"26390 DA7}TA"Erlaeuterungen selbst dankbar sein!",".P0"26400 DATA"!Gegen die Verwendung von REM-Anweisungen wird"26410 DATA"! - der B8}edarf an Speicherplatz und"26420 DATA"! - eine Verlaengerung der Laufzeit"26430 DATA"!angefuehrt. Beide Gruende gelten aber9} nur in"26440 DATA"besonderen Faellen."26450 DATA".P10","Das war das","!!"26460 DATA".C**************************"26470 D:}ATA".C* *"26480 DATA".C* BASICODE-3 Journal *"26490 DATA".C* Nummer 6 *"26500 DAT;}A".C* 11. Mai 1990 *"26510 DATA".C* *"26520 DATA".C**************************",".E"30000 <}REM30010 REM Grundlagen von BASICODE30020 REM -- Teil 5 --32000 REM --------------------32010 REM FRIEDRICH DORMEIE=}R32020 REM32030 REM D-1000 BERLIN 3932040 REM32050 REM 12/1989 - C64/C12832060 REM --------------------32070 REM32080 >}REM Erstausstrahlung: Radio DDR32090 REM-spezial 900511M 12/1989 - C64/C12832060 REM --------------------32070 REM32080 91000 A=500:GOTO20:REM BASICODE-3 JOURNAL 71010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:R@}$="":READT$1030 GOSUB1410:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"1060A} PRINT:PRINT" 1 den Bildschirm,"1070 PRINT" 2 den Drucker"1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN-48:PB}RINTSC:IFSC<>2 THENSC=1:GOTO12201100 PRINT:PRINT"Wieviel Leerzeichen"1110 INPUT"am Zeilenanfang ";HL1120 PRINT:PRINT"WiC}eviel Text-Zeichen"1130 INPUT"auf jeder Zeile ";I:HR=HL+I-11140 PRINT:PRINT"Wieviel Text-Zeilen"1150 INPUT"auf jeder SeD}ite ";VR:VR=VR-31160 PRINT"(E) Endlospapier oder "1170 PRINT"(L) Lose Blaetter (E/L) ";1180 GOSUB210:IFIN=76 THENVL=-1E}:GOTO12201190 IFIN<>69 THEN GOSUB250:GOTO11601200 PRINT:PRINT"Wieviel Leerzeilen"1210 INPUT"am Seitenende ";VL:VR=VR+F}VL1220 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1230 GOSUB1380:M$=MM$:AL=VL:IFSC=2 THEN GOSUB13601240 IFLEN(R$)>HR-HL THEN GOSUB1G}8201250 GOSUB1440:IFR$<>"" THENR$=R$+" "1260 R$=R$+D$:GOTO12401270 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOTO12901280 GH}OSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01290 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1300 IFSC=1 THEN13801310 IFVL>=0 THEI}NFORI=1 TOVL:GOSUB360:NEXTI:GOTO13501320 PRINT"Neues Blatt in Drucker einlegen"1330 PRINT"druecke dann RETURN/ENTER"J}1340 GOSUB210:IFIN<>13 THEN13401350 AL=VL1360 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12701370 SR$="":GOSUB1270:AL=VL:RETUK}RN1380 HO=3:VE=VT:GOSUB1101390 SR$="Weiter:druecke ":GOSUB1501400 GOSUB210:IFIN<>13 THEN14001410 GOSUB100:AL}L=VL:SR$=T$1420 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501430 PRINT:PRINT:RETURN1440 READD$1450 IFD$="" THEN14401460 IFM}LEFT$(D$,1)="." THEN15301470 IFLEFT$(D$,1)<>">" THEN14901480 D$=LEFT$(S$,23-LEN(R$))+MID$(D$,2):RETURN1490 IFLEFT$(D$,1)<>N}"!" THENRETURN1500 IFD$="!" THEND$="":GOTO15201510 D$=MID$(D$,2)1520 GOSUB1760:GOTO14501530 IFD$<>".E" THEN15801540 J=1:O}GOSUB1760:T$="E N D E"1550 SR$="":GOSUB1270:GOSUB1270:SR$=T$:GOSUB1270:T$=""1560 SR$="":GOSUB1270:IFAL<>VL THEN15601570 GOP}TO9501580 DD$=MID$(D$,2,1):D$=MID$(D$,3)1590 IFDD$<>"R" THEN16401600 IFSC=2 THENRETURN1610 IFLEN(R$)+6+LEN(D$)>=HR-HL THEQ}NSR$=R$:GOSUB1270:R$=""1620 PRINTM$;R$;:SR$=D$:GOSUB150:M$=""1630 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO14401640 IFDD$<>"M" THR}EN16701650 I=VAL(D$):MM$="":IFI+HL=0 THEN14401660 MM$=LEFT$(S$,I+HL):GOTO14401670 IFDD$="P" THENJ=VAL(D$):GOSUB1760:GOSUB1S}780:GOTO14401680 IFDD$="T" THENT$=D$:J=10:GOSUB1760:GOSUB1780:GOTO16001690 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO14401700 IFT}DD$<>"F" THEN17301710 J=VAL(D$):GOSUB17601720 J=J-1:IFJ>-1 THENSR$="":GOSUB1270:GOTO17201730 IFDD$<>"C" THEN17501740 SR$=U}LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12701750 GOTO14401760 GOSUB1820:SR$=R$:GOSUB1270:R$="":J=J-11770 RETURN1780 IF(SC=1)OV}R(AL+J>VR)THEN18001790 SR$="":GOSUB1270:GOSUB1270:RETURN1800 IFAL<>VL THENSR$="":GOSUB1270:GOTO18001810 RETURN1820 K=HR-HW}L+1-LEN(M$)1830 IFLEN(R$)<=K THENRETURN1840 IFMID$(R$,K,1)=" " THEN18701850 K=K-1:IFK>0 THEN18401860 SR$="":GOTO18801870X} SR$=LEFT$(R$,K-1):R$=MID$(R$,K+1)1880 GOSUB1270:GOTO18201890 REM1900 REM UEBERSETZTE VERSION1910 REM1920 REM COMPUTER-BY}ULLETIN NO.40 (11/89)1930 REM STICHTING BASICODE, EINDHOVEN1940 REM25000 DATA"Progr. in BASICODE (6)"25010 DATA"Der zentrZ}ale Teil im BASICODE-System -"25020 DATA"um die Portabilitaet der Programme zu"25030 DATA"gewaehrleisten - sind die Subrout[}inen"25040 DATA"(Unterprogramme). Mit ihnen wird erreicht,"25050 DATA"dass trotz eines unterschiedlichen Sprachumfangs"250\}60 DATA"und unterschiedlicher Anweisungen, z.B. zur"25070 DATA"Steuerung der Ausgabe ueber den Bildschirm,"25080 DATA"zum A]}nsprechen eines Druckers oder zur"25090 DATA"Verwaltung peripherer Speicher (Files), die"25100 DATA"Aufgabe auf allen betei^}ligten Computern in"25110 DATA"gleicher Art ausgefuehrt wird."25120 DATA".P0"25130 DATA".RSubroutinen - Uebersicht"25140 _}DATA"!!GOSUB Wirkung Variable"25150 DATA"!-------------------------------------"25160 DATA"!# 100 Textbetrieb, `}Schirm"25170 DATA"! loeschen, --"25180 DATA"!!# 110 Positionieren des"25190 DATA"! Cursors, a} HO, VE"25200 DATA"!!# 120 Registrieren der"25210 DATA"! Cursorposition, HO, VE"25220 DATA"!!# 150 Bildschirm - rb}everse"25230 DATA"! Darstellung, SR$"25240 DATA"!!# 200 Tastaturabfrage, IN$, IN"25250 DATA"!!# 210 Warten c}auf Tasten-"25260 DATA"! druck, IN$, IN",".P0"25270 DATA"# 220 Zeichen auf Bild-"25280 DATA"! schird}mposition, HO, VE, IN"25290 DATA"!!# 250 Akustisches Signal --"25300 DATA"!!# 260 Pseudozufallszahl, RV"25310 DATA"!e}!# 270 Freier Speicher-"25320 DATA"! platz, FR"25330 DATA"!!# 280 Abschalten der"25340 DATA"! Stoptf}aste, FR"25350 DATA"!!# 300 Wandeln in String-"25360 DATA"! variable, SR, SR$"25370 DATA"!!# 310 Fg}ormatieren numer."25380 DATA"! Variablen, SR, SR$,"25385 DATA"! CT, CN",".P0"25390 h}DATA"# 330 Wandeln von Klein-"25400 DATA"! in Grossbuchst., SR$"25410 DATA"!!# 350 Druckerausgabe, SR$"25420 Di}ATA"!!# 360 Drucker - Wagen-"25430 DATA"! ruecklauf, Zeilen-"25435 DATA"! vorschub, --"25440 DATA"!!# j}400 Tonerzeugung, SP, SD, SV"25450 DATA"!!# 450 Warteroutine, SD, IN, IN$"25460 TCjA"!!# 500 Peripherer Speichek}r,"25470 DATA"! Oeffnen des Kanals, NF$, NF"25480 DATA"!!# 540 desgl., Lesen, IN$, IN"25490 DATA"!!# 550 desgl.,l} Schreiben, SR$, IN"25500 DATA"!!# 580 desgl., Abschluss, NF",".P0"25510 DATA"# 600 Grafischer Betrieb,"25520 DATA"! m} Schirm loeschen, --"25530 DATA"!!# 620 Punkt (Pixel) setzen"25540 DATA"! bzw. loeschen, HO, VE, CN"25550 DAn}TA"!!# 640 Linie zeichnen bzw."25560 DATA"! loeschen, HO, VE, CN"25570 DATA"!!# 650 Text im Grafikbe-"25580o} DATA"! trieb ausgeben, SR$, HO, VE"25590 DATA".P0"25600 DATA".RTextbetrieb - Subroutine # 110"25610 DATA"!!Beim p}Start eines BASICODE-Programms wird"25620 DATA"der Computer in den Textbetrieb gesetzt"25630 DATA"(Initialisierung mit dem q}unbedingten Sprung"25640 DATA"'GOTO 20'). In dieser Beriebsart sind auf dem"25650 DATA"Bildschirm im Regelfall 24 Zeilen mir}t 40"25660 DATA"Zeichen/Zeile darstellbar. Da manche Computer"25670 DATA"bis zu 80 Zeichen/Zeile abbilden koennen, ist"256s}80 DATA"diesem Umstand evtl. durch das Programm Rechnung"25690 DATA"zu tragen."25700 DATA"!Die Belegung der Zeile 25 und dit}e der letzten"25710 DATA"Position einer Bildschirmzeile ist zu vermeiden."25720 DATA"U.U. kann dies zu einem Scrollen des Bu}ildschirms"25730 DATA"und zu einem Versetzen des Cursors in die"25740 DATA"naechste Bildschirmzeile fuehren."25750 DATA".Pv}0"25760 DATA"Die Position des Cursors wird durch die"25770 DATA"Variablen HO (0 ... 39) und VE (0 ... 24) und"25780 DATA"dw}ie Subroutine # 110 bestimmt."25790 DATA"!!Mit der Initialisierung, d.h. vor Beginn des"25800 DATA"eigentlichen Programms,x} werden den Variablen HO"25810 DATA"und VE die je nach Computermodell moeglichen"25820 DATA"max. Werte zugewiesen (z.B. HO=y}39 und VE=24)."25830 DATA"Die Zaehlung auf dem Bildschirm beginnt"25840 DATA"links oben (HO=0, VE=0)."25850 DATA"!!In BASIz}CODE-3 ist nur eine monochrome"25860 DATA"Zeichendarstellung - je nach TV-Geraet bzw."25870 DATA"Monitor - moeglich (Zeiche{}n - weiss, gruen,"25880 DATA"bernsteinfarben; Hintergrund - dunkel)."25890 DATA".P0"25900 DATA"Die Subroutine # 110 positi|}oniert den"25910 DATA"Cursor; sie entspricht damit den Anweisungen"25920 DATA"'LOCATE (X,Y)' oder 'PRINT AT X,Y'."25930 DA}}TA"Sinnvoll ist dieses Unterprogramm in Verbindung"25940 DATA"mit PRINT- oder INPUT-Anweisungen oder mit der"25950 DATA"Auf~}forderung zur Tastatur-Betaetigung ueber die"25960 DATA"Subroutine # 210."25970 DATA"!!Werden den Variablen HO und VE unzul}aessige"25980 DATA"Werte zugewiesen (z.B. HO>39 oder VE>24),"25990 DATA"so wird der Cursor willkuerlich gesetzt,"26000 DAT}A"z.B. in die Mitte des Bildschirms !",".P0"26010 DATA".RTextbetrieb - Subroutine # 100"26020 DATA"!!Die Subroutine # 100 l}oescht den Bildschirm"26030 DATA"und setzt den Computer in den Textbetrieb,"26040 DATA"sofern vorher ueber die Subroutine #} 600 der"26050 DATA"Grafik-Betrieb eingeschaltet war (siehe w.u.)."26060 DATA"Mit dem Start eines Programms (Initialisierun}g"26070 DATA"ueber den Sprung GOTO 20) wird das"26080 DATA"Unterprogramm # 100 automatisch aufgerufen."26090 DATA"!!Werte,} die Variablen vor Aufruf des"26100 DATA"Unterprogramms zugewiesen wurden, werden nicht"26110 DATA"veraendert. Dies gilt au}ch fuer HO und VE"26120 DATA"(vergl.'CURSOR-1).",".P0"26130 DATA".RTextbetrieb - Subroutine # 120"26140 DATA"!!Ueber diese} Subroutine kann die momentane"26150 DATA"Cursorposition abgefragt werden. Deren Stellung"26160 DATA"ergibt sich aus den Va}riablen HO und VE."26170 DATA"In Verbindung mit der Subroutine # 110"26180 DjA"kann die Bildschirmausgabe gesteuert werden"}26190 DATA"(vergl. 'CURSOR-2')."26200 DATA".P0"26210 DATA".RTextbetrieb - Subroutine # 150"26220 DATA"!!Das Unterprogramm} # 150 erlaubt die reverse"26230 DATA"('auffallende') Darstellung eines Text-Strings."26240 DATA"!!Der String (A$='Titel') }wird mit PRINT A$ in"26250 DATA"ueblicher Form dargestellt. Nach Zuweisung an"26260 DATA"SR$ werden am Beginn und Ende je d}rei"26270 DATA"Leerzeichen zugefuegt, die Darstellung erfolgt"26280 DATA"revers. Die Stringlaenge vergroessert sich um"262}90 DATA"sechs Zeichen. Der Cursor steht nach dem"26300 DATA"dritten Leerzeichen nach A$ in der gleichen"26310 DATA"Zeile; u}m ihn in die naechste Zeile zu setzen,"26320 DATA"muss eine PRINT-Anweisung folgen. Ggf. kann der"26330 DATA"Cursor mit GOS}UB 110 neu positioniert werden."26340 DATA".P0"26350 DATA"Beispiel (vergl. auch 'REVERS'):"26360 DATA"!! nnnn A$=",".QTite}l",".Q "26370 DATA"! nnnn HO=10:VE=3:GOSUB 110"26380 DATA"! nnnn SR$=A$:GOSUB 150:PRINT"26390 DATA".P0"26400 DATA".RTextb}etrieb - Subroutine # 220"26410 DATA"!!Mit der Subroutine # 220 wird der ASCII-Wert"26420 DATA"eines in der Position HO, VE} dargestellten"26430 DATA"Zeichens an die Variable IN zurueckgegeben."26440 DATA"IN nimmt nur Werte von 32 - 95 an, es sei }denn,"26450 DATA"es wurden Steuertasten betaetigt. Das bedeutet,"26460 DATA"dass zwischen Klein- und Grossbuchstaben nicht"}26470 DATA"unterschieden wird. 'a' und 'A' ergeben IN=65."26480 DATA"Zu beruecksichtigen bleibt auch die fuer"26490 DATA"e}inzelne Computer unterschiedliche Codierung"26500 DATA"der Zeichen (z.B. Commodore)."26510 DATA"!!Eine moegliche Anwendung }ist eine Hardcopy"26520 DATA"des Textbildschirms (vergl. 'TEXTDUMP')."26580 DATA".P10","Das war das","!!"26590 DATA".C****}************************"26600 DATA".C* *"26610 DATA".C* BASICODE-3 Journal *"26620 DATA".C}* Nummer 7 *"26630 DATA".C* 25. Mai 1990 *"26640 DATA".C* *"26650 DAT}A".C****************************",".E"30000 REM30010 REM Grundlagen von BASICODE30020 REM -- Teil 6 --32000 REM ---}--------------------------32010 REM FRIEDRICH DORMEIER32020 REM D-1000 BERLIN 3932030 REM C64/C128 - 2/199032040 REM ----}-------------------------32050 REM32060 REM Erstausstrahlung: Radio DDR32070 REM-spezial 90052528 - 2/199032040 REM ----c1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 91010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:R"}$="":READT$1030 GOSUB1410:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"1060"} PRINT:PRINT" 1 den Bildschirm,"1070 PRINT" 2 den Drucker"1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN-48:P"}RINTSC:IFSC<>2 THENSC=1:GOTO12201100 PRINT:PRINT"Wieviel Leerzeichen"1110 INPUT"am Zeilenanfang ";HL1120 PRINT:PRINT"Wi"}eviel Text-Zeichen"1130 INPUT"auf jeder Zeile ";I:HR=HL+I-11140 PRINT:PRINT"Wieviel Text-Zeilen"1150 INPUT"auf jeder Se"}ite ";VR:VR=VR-31160 PRINT"(E) Endlospapier oder "1170 PRINT"(L) Lose Blaetter (E/L) ";1180 GOSUB210:IFIN=76 THENVL=-1"}:GOTO12201190 IFIN<>69 THEN GOSUB250:GOTO11601200 PRINT:PRINT"Wieviel Leerzeilen"1210 INPUT"am Seitenende ";VL:VR=VR+"}VL1220 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1230 GOSUB1380:M$=MM$:AL=VL:IFSC=2 THEN GOSUB13601240 IFLEN(R$)>HR-HL THEN GOSUB1"}8201250 GOSUB1440:IFR$<>"" THENR$=R$+" "1260 R$=R$+D$:GOTO12401270 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOTO12901280 G"}OSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01290 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1300 IFSC=1 THEN13801310 IFVL>=0 THE"}NFORI=1 TOVL:GOSUB360:NEXTI:GOTO13501320 PRINT"Neues Blatt in Drucker einlegen"1330 PRINT"druecke dann RETURN/ENTER""}1340 GOSUB210:IFIN<>13 THEN13401350 AL=VL1360 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12701370 SR$="":GOSUB1270:AL=VL:RETU"}RN1380 HO=3:VE=VT:GOSUB1101390 SR$="Weiter:druecke ":GOSUB1501400 GOSUB210:IFIN<>13 THEN14001410 GOSUB100:A"}L=VL:SR$=T$1420 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501430 PRINT:PRINT:RETURN1440 READD$1450 IFD$="" THEN14401460 IF"}LEFT$(D$,1)="." THEN15301470 IFLEFT$(D$,1)<>">" THEN14901480 D$=LEFT$(S$,23-LEN(R$))+MID$(D$,2):RETURN1490 IFLEFT$(D$,1)<>"}"!" THENRETURN1500 IFD$="!" THEND$="":GOTO15201510 D$=MID$(D$,2)1520 GOSUB1760:GOTO14501530 IFD$<>".E" THEN15801540 J=1:"}GOSUB1760:T$="E N D E"1550 SR$="":GOSUB1270:GOSUB1270:SR$=T$:GOSUB1270:T$=""1560 SR$="":GOSUB1270:IFAL<>VL THEN15601570 GO"}TO9501580 DD$=MID$(D$,2,1):D$=MID$(D$,3)1590 IFDD$<>"R" THEN16401600 IFSC=2 THENRETURN1610 IFLEN(R$)+6+LEN(D$)>=HR-HL THE"}NSR$=R$:GOSUB1270:R$=""1620 PRINTM$;R$;:SR$=D$:GOSUB150:M$=""1630 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO14401640 IFDD$<>"M" TH"}EN16701650 I=VAL(D$):MM$="":IFI+HL=0 THEN14401660 MM$=LEFT$(S$,I+HL):GOTO14401670 IFDD$="P" THENJ=VAL(D$):GOSUB1760:GOSUB1"}780:GOTO14401680 IFDD$="T" THENT$=D$:J=10:GOSUB1760:GOSUB1780:GOTO16001690 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO14401700 IF"}DD$<>"F" THEN17301710 J=VAL(D$):GOSUB17601720 J=J-1:IFJ>-1 THENSR$="":GOSUB1270:GOTO17201730 IFDD$<>"C" THEN17501740 SR$="}LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12701750 GOTO14401760 GOSUB1820:SR$=R$:GOSUB1270:R$="":J=J-11770 RETURN1780 IF(SC=1)O"}R(AL+J>VR)THEN18001790 SR$="":GOSUB1270:GOSUB1270:RETURN1800 IFAL<>VL THENSR$="":GOSUB1270:GOTO18001810 RETURN1820 K=HR-H"}L+1-LEN(M$)1830 IFLEN(R$)<=K THENRETURN1840 IFMID$(R$,K,1)=" " THEN18701850 K=K-1:IFK>0 THEN18401860 SR$="":GOTO18801870"} SR$=LEFT$(R$,K-1):R$=MID$(R$,K+1)1880 GOSUB1270:GOTO18201890 REM1900 REM UEBERSETZTE VERSION1910 REM1920 REM COMPUTER-B"}ULLETIN NO.40 (11/89)1930 REM STICHTING BASICODE, EINDHOVEN1940 REM25000 DATA"Progr. in BASICODE (7)"25010 DATA".RTastatu"}r - Subroutine # 200"25020 DATA"!"25030 DATA".R - Subroutine # 210"25040 DATA"!!Zur Abfrage der Tastatur stellt BA"}SICODE-3"25050 DATA"zwei Routinen zur Verfuegung, die sich in ihrer"25060 DATA"Wirkung auf den Lauf des Programmes"25070 D"}ATA"unterscheiden. Sie entsprechen den"25080 DATA"BASIC-Anweisungen GET und INKEY$ o.ae.",".P0"25090 DATA"Die Subroutine # "}200 registriert, ob waehrend"25100 DATA"des Programmlaufs - d.h. waehrend der"25110 DATA"Wirksamkeit dieses Unterprogramms "}- eine"25120 DATA"Taste gedrueckt wurde; das Programm laeuft"25130 DATA"weiter. Im Gegensatz dazu haelt die Subroutine"251"}40 DATA"# 210 den Programmlauf bis Tastaturbetaetigung"25150 DATA"an.",".P0"25160 DATA"In beiden Faellen wird den Variablen"} IN und IN$"25170 DATA"ein Wert zugewiesen:"25180 DATA"!! IN$ - das der Taste entsprechende"25190 DATA"! Zeichen (al"}s String) und"25200 DATA"! IN - 'echter' ASCII-Wert dieses"25210 DATA"! Zeichens."25220 DATA"!!Wurde keine Taste be"}taetigt (Subroutinen"25230 DATA"# 200, # 450), so haben die Variablen die"25240 DATA"Werte: IN$=leer; IN=0."25250 DATA"!!I"}N kann Werte von 32 ... 95 annehmen; Gross-"25260 DATA"und Kleinbuchstaben werden durch die gleichen"25270 DATA"ASCII-Werte"} repraesentiert (ASCII 65 => 'A' oder"25280 DATA"'a'). Ausserdem gelten:"25290 DATA"!! ASCII 13 - Return / Enter,"2"}5300 DATA"! 29 ... 31 - Cursor-Steuerung,"25310 DATA"! 127 - Delete."25320 DATA".P0"25330 DATA"(Vergl. a"}uch 'Programmieren (2) - Zeichensatz')"25340 DATA"!!Wurde eine Nicht-ASCII-Taste gedrueckt, wird"25350 DATA"der Variablen I"}N eine negative Zahl zugewiesen."25360 DATA".P0"25370 DATA"Haeufig wird die Subroutine # 210 angewendet, um"25380 DATA"dur"}ch Betaetigung einer Taste den Programmlauf"25390 DATA"zu steuern (Menu-Auswahl, Ende des Programms"25400 DATA"usw.). Als V"}orteil stellt sich dar, dass die"25410 DATA"ASCII-Werte der Variablen IN keinen Unterschied"25420 DATA"zwischen Klein- und "}Grossbuchstaben machen. Es"25430 DATA"genuegt die Abfrage der Variablen IN (I);"25440 DATA"das durch Tastendruck dargestell"}te Zeichen muss"25450 DATA"nicht ueber IN$ abgefragt werden (II)."25460 DATA"!!In den folgenden Beispielen soll IN bzw. IN$"}"25470 DATA"auf 'J/N' (ja/nein) abgefragt werden."25480 DATA"!!I nn10 GOSUB 210"25490 DATA"! nn20 IF IN=74 THEN..."255"}00 DATA"! nn30 IF IN=78 THEN..."25510 DATA"! nn40 GOTO nn10"25520 DATA"!!II nn10 GOSUB 210"25530 DATA"! nn20 IF (IN$"}='J')OR(IN$='j') THEN..."25540 DATA"! nn30 IF (IN$='N')OR(IN$='n') THEN..."25550 DATA"! nn40 GOTO nn10"25560 DATA"!!Di"}e Verringerung des Aufwandes ist deutlich."25570 DATA".P0"25580 DATA"Eine andere Verwendung der Subroutine # 210"25590 DAT"}A"ist die Nachbildung der INPUT-Anweisung in der"25600 DATA"Form, dass auch Anfuehrungszeichen, Doppelpunkt"25610 DATA"und "}Komma direkt eingegeben und einer String-"25620 DATA"Variablen zugewiesen werden koenen."25630 DATA".P0"25640 DATA".RWarte"}routine - Subroutine # 450"25650 DATA"!!Diese Subroutine unterbricht den Programmlauf"25660 DATA"fuer eine vorgegebene Zeit"}spanne. Durch Druecken"25670 DATA"einer Taste kann sie abgebrochen werden."25680 DATA"Sie entspricht der PAUSE- bzw. SLEEP-"}Anweisung"25690 DATA"mancher BASIC-Dialekte."25700 DATA"!!Die Wartezeit ist vor dem Aufruf der Variablen"25710 DATA"SD zuz"}uweisen:"25720 DATA"!! Wartezeit (Sekunden)"25730 DATA"! SD = --------------------"25740 DATA"! 0."}1",".P0"25750 DATA"Wird eine Taste gedrueckt, so wird die Routine"25760 DATA"abgebrochen, den Variablen IN und IN$ werden d"}er"25770 DATA"ASCII-Wert und das Zeichen uebergeben, die"25780 DATA"Variable SD enthaelt die Restzeit (in Einheiten"25790 "}DATA"von 0.1 Sekunden)."25800 DATA".P0"25810 DATA".RSTOP-Taste - Subroutine # 280"25820 DATA"!!Diese Routine schaltet die "}Wirksamkeit einer"25830 DATA"STOP-, BREAK-, ESCAPE-Taste aus, wenn vor ihrem"25840 DATA"Aufruf der Variablen FR der Wert '1"}' zugewiesen"25850 DATA"wurde. Unterbrechen eines laufenden Programms"25860 DATA"mit Tastendruck ist nicht mehr moeglich.""}25870 DATA"!!Wird FR=0 gesetzt, wird nach GOSUB 280 die"25880 DATA"STOP-Taste wieder aktiviert."25890 DATA".P10","Das war d"}as","!!"25900 DATA".C**************************"25910 DATA".C* *"25920 DATA".C* BASICODE-3 Journ"}al *"25930 DATA".C* Nummer 9 *"25940 DATA".C* 8. Juni 1990 *"25950 DATA".C* "} *"25960 DATA".C**************************",".E"30000 REM30010 REM Grundlagen von BASICODE30020 REM -- Teil 7 --"}32000 REM --------------------------32010 REM FRIEDRICH DORMEIER32020 REM32030 REM D-1000 BERLIN 3932040 REM32050 REM C"}64/C128 - 2/199032060 REM --------------------------32070 REM Erstausstrahlung: Radio DDR32080 REM-spezial 90060850 REM C u1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 111010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2&}:R$="":READT$1030 GOSUB1410:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"10&}60 PRINT:PRINT" 1 den Bildschirm,"1070 PRINT" 2 den Drucker"1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN-48&}:PRINTSC:IFSC<>2 THENSC=1:GOTO12201100 PRINT:PRINT"Wieviel Leerzeichen"1110 INPUT"am Zeilenanfang ";HL1120 PRINT:PRINT"&}Wieviel Text-Zeichen"1130 INPUT"auf jeder Zeile ";I:HR=HL+I-11140 PRINT:PRINT"Wieviel Text-Zeilen"1150 INPUT"auf jeder &}Seite ";VR:VR=VR-31160 PRINT"(E) Endlospapier oder "1170 PRINT"(L) Lose Blaetter (E/L) ";1180 GOSUB210:IFIN=76 THENVL=&}-1:GOTO12201190 IFIN<>69 THEN GOSUB250:GOTO11601200 PRINT:PRINT"Wieviel Leerzeilen"1210 INPUT"am Seitenende ";VL:VR=V&}R+VL1220 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1230 GOSUB1380:M$=MM$:AL=VL:IFSC=2 THEN GOSUB13601240 IFLEN(R$)>HR-HL THEN GOSU&}B18201250 GOSUB1440:IFR$<>"" THENR$=R$+" "1260 R$=R$+D$:GOTO12401270 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOTO12901280&} GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01290 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1300 IFSC=1 THEN13801310 IFVL>=0 T&}HENFORI=1 TOVL:GOSUB360:NEXTI:GOTO13501320 PRINT"Neues Blatt in Drucker einlegen"1330 PRINT"druecke dann RETURN/ENTER&}"1340 GOSUB210:IFIN<>13 THEN13401350 AL=VL1360 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12701370 SR$="":GOSUB1270:AL=VL:RE&}TURN1380 HO=3:VE=VT:GOSUB1101390 SR$="Weiter:druecke ":GOSUB1501400 GOSUB210:IFIN<>13 THEN14001410 GOSUB100&}:AL=VL:SR$=T$1420 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501430 PRINT:PRINT:RETURN1440 READD$1450 IFD$="" THEN14401460 &}IFLEFT$(D$,1)="." THEN15301470 IFLEFT$(D$,1)<>">" THEN14901480 D$=LEFT$(S$,23-LEN(R$))+MID$(D$,2):RETURN1490 IFLEFT$(D$,1)&}<>"!" THENRETURN1500 IFD$="!" THEND$="":GOTO15201510 D$=MID$(D$,2)1520 GOSUB1760:GOTO14501530 IFD$<>".E" THEN15801540 J=&}1:GOSUB1760:T$="E N D E"1550 SR$="":GOSUB1270:GOSUB1270:SR$=T$:GOSUB1270:T$=""1560 SR$="":GOSUB1270:IFAL<>VL THEN15601570 &}GOTO9501580 DD$=MID$(D$,2,1):D$=MID$(D$,3)1590 IFDD$<>"R" THEN16401600 IFSC=2 THENRETURN1610 IFLEN(R$)+6+LEN(D$)>=HR-HL T&}HENSR$=R$:GOSUB1270:R$=""1620 PRINTM$;R$;:SR$=D$:GOSUB150:M$=""1630 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO14401640 IFDD$<>"M" &}THEN16701650 I=VAL(D$):MM$="":IFI+HL=0 THEN14401660 MM$=LEFT$(S$,I+HL):GOTO14401670 IFDD$="P" THENJ=VAL(D$):GOSUB1760:GOSU&}B1780:GOTO14401680 IFDD$="T" THENT$=D$:J=10:GOSUB1760:GOSUB1780:GOTO16001690 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO14401700 &}IFDD$<>"F" THEN17301710 J=VAL(D$):GOSUB17601720 J=J-1:IFJ>-1 THENSR$="":GOSUB1270:GOTO17201730 IFDD$<>"C" THEN17501740 SR&}$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12701750 GOTO14401760 GOSUB1820:SR$=R$:GOSUB1270:R$="":J=J-11770 RETURN1780 IF(SC=1&})OR(AL+J>VR)THEN18001790 SR$="":GOSUB1270:GOSUB1270:RETURN1800 IFAL<>VL THENSR$="":GOSUB1270:GOTO18001810 RETURN1820 K=HR&}-HL+1-LEN(M$)1830 IFLEN(R$)<=K THENRETURN1840 IFMID$(R$,K,1)=" " THEN18701850 K=K-1:IFK>0 THEN18401860 SR$="":GOTO188018&}70 SR$=LEFT$(R$,K-1):R$=MID$(R$,K+1)1880 GOSUB1270:GOTO18201890 REM1900 REM UEBERSETZTE VERSION1910 REM1920 REM COMPUTER&}-BULLETIN NO.40 (11/89)1930 REM STICHTING BASICODE, EINDHOVEN1940 REM25000 DATA"Programmieren in BASICODE (8)"25010 DATA"&}.RSignalton - Subroutine # 250"25020 DATA"!!Diese Subroutine gibt ein akustisches Signal"25030 DATA"(entspricht ASCII 7 - B&}EL). Damit kann - sofern"25040 DATA"erforderlich - die Aufmerksamkeit auf einen"25050 DATA"bestimmten Schritt im Programm g&}elenkt werden."25060 DATA"!Allerdings ist das Signal nur von kurzer Dauer."25070 DATA"Oft ist es notwendig, das Signal anda&}uern zu"25080 DATA"lassen, um dann den Programmlauf nach"25090 DATA"Betaetigen einer Taste verzweigen oder enden"25100 DAT&}A"zu lassen."25110 DATA".P0"25120 DATA".RZufallszahlen - Subroutine # 260"25130 DATA"!!Hiermit wird der Zufallszahlengener&}ator"25140 DATA"des Computers aufgerufen; in RV werden dann"25150 DATA"Pseudozufallszahlen im Bereich","!! 0 <= RV < 1"251&}60 DATA"!!zurueckgegeben. In der Regel werden nur"25170 DATA"ganzzahlige Werte benoetigt, die durch Rechnung"25180 DATA"gew&}onnen werden koennen."25190 DATA".P0"25200 DATA".RFreier Arbeitsspeicher","!"25210 DATA".R - Subroutine 270"25220 DA'}TA"!!Man kann davon ausgehen, dass BASICODE-"25230 DATA"Programme eine Laenge von max. 18 KByte haben"25240 DATA"koennen, i'}n Einzelfaellen auch mehr. Infolge der"25250 DATA"Uebertragung der einzelnen Zeichen und der"25260 DATA"rechnerinternen Umw'}andlung in 'Token' ist die"25270 DATA"im Computer gespeicherte Programmlaenge kuerzer."25280 DATA"Im Computer ist ein freie'}r Arbeitsspeicher"25290 DATA"von mind. 16 KByte erforderlich.",".P0"25300 DATA"Der nach Laden des Bascoders freie Speicherp'}latz"25310 DATA"(in Bytes) kann im Direkt-Modus mit"25320 DATA"!! GOSUB 270:PRINT FR"25330 DATA"!!abgefragt werden. Die Wi'}ederholung nach dem"25340 DATA"Laden des Programms und die Bildung der"25350 DATA"Differenz ergibt die computer- spezifisch'}e"25360 DATA"Programmlaenge (in Bytes)."25370 DATA".P0"25380 DATA".RVariablen SR und SR$"25390 DATA"!!In BASICODE-3-Progr'}ammen und -Subroutinen"25400 DATA"kommen den Variablen SR und SR$ besondere"25410 DATA"Aufgaben zu:"25420 DATA"!! - Wandel'}n einer numerischen in eine"25430 DATA"! Stringvariable,"25440 DATA"! - Formatieren der Ausgabe numerischer"25450 DATA"!' } Daten,"25460 DATA"! - Wandeln von Klein- in Grossbuch-"25470 DATA"! staben,"25480 DATA"! - Ausgabe ueber den Drucker,' }"25490 DATA"! - Schreiben eines sequentiellen Files"25500 DATA"! auf Cassette oder Diskette,"25510 DATA"! - Textausgabe ' }im grafischen Betrieb."25520 DATA"!!Die freie Verwendung dieser Namen in einem"25530 DATA"Programm ist nicht erlaubt."2554' }0 DATA".P0"25550 DATA".RTypwandlung - Subroutine # 300"25560 DATA"!!Die Subroutine # 300 entspricht der in BASIC"25570 DAT' }A"vorhandenen Funktion STR$(x), mit der numerische"25580 DATA"in Stringvariable gewandelt werden koennen."25590 DATA"Damit '}werden die Leerraeume vor und hinter"25600 DATA"numerischen Daten unterdrueckt:"25610 DATA"!! A$=STR$(A) wird ersetzt durch'}:"25620 DATA"!! SR=A:GOSUB 300:A$=SR$"25630 DATA".P0"25640 DATA".RFormatieren numerischer Daten","!"25650 DATA".R '} - Subroutine # 310"25660 DATA"!!Zahlen werden in BASICODE - je nach Groesse"25670 DATA"und Computer - mit 6 bzw. 9 Stell'}en oder in"25680 DATA"wissenschaftlicher Notation ('E-Format')"25690 DATA"angezeigt. Manche Computer (PC's) erlauben die"2'}5700 DATA"Darstellung in 'doppelter' Genauigkeit (bis zu"25710 DATA"18 gueltige Ziffern)."25720 DATA"!Die Subroutine # 310 '}aehnelt der 'PRINT USING'"25730 DATA"- Anweisung mancher BASIC-Dialekte, die jedoch"25740 DATA"vielfaeltiger eingesetzt wer'}den kann als die"25750 DATA"Subroutine 310. In BASICODE-3 ist nur das"25760 DATA"Formatieren der Ausgabe numerischer Werte"'}25770 DATA"- ueber Bildschirm oder Drucker - moeglich."25780 DATA".P0"25790 DATA"Die formatierte Ausgabe des Wertes der"2'}5800 DATA"numerischen Variablen A erfolgt ueber die"25810 DATA"Variablen SR$, CT und CN. Dabei bedeuten:"25820 DATA"!! SR '}numerische Variable, deren Wert"25830 DATA"! in SR$ formatiert dargestellt"25840 DATA"! werden soll,"25850 DATA"!!'} CT Anzahl der Zeichen, die in SR$"25860 DATA"! enthalten sind (einschl. Dezimal-"25870 DATA"! punkt und Vorzeiche'}n),"25880 DATA"!! CN Anzahl der Nachkommastellen."25890 DATA"!!Diese Variablen sind vor dem Aufruf der"25900 DATA"Subrout'}ine # 310 zu belegen:"25910 DATA".P0"25920 DATA"Die Zeichenkette SR$ kann maximal nur neun"25930 DATA"Ziffern enthalten, d'}.h. dass CT begrenzt ist:"25940 DATA"!! 1 - Vorzeichen,"25950 DATA"! + vk - Anzahl der Vorkommastellen,"25960 DATA"! '} + 1 - Dezimalpunkt,"25970 DATA"! + CN - Anzahl der Nachkommastellen,"25980 DATA"! ---------------------------------"'}25990 DATA"! CT - Anzahl der Zeichen"26000 DATA"!!In Abhaengigkeit von der Groesse der"26010 DATA"darzustellenden Zahl g'}ilt:"26020 DATA"!! vk + CN <= 9 (ohne fuehrende Null"26030 DATA"! falls SR < 1)",".P0"26040 DATA"Mit der Subr'}outine # 310 ist es nicht moeglich,"26050 DATA"Zahlen im wissenschaftl. Format darzustellen."26060 DATA"!Kann die Zahl nich' }t im vorausbestimmten Format"26070 DATA"angezeigt werden, enthaelt SR$ Sterne ('*')."26080 DATA"Ggf. wird die Zahl auf CN S'!}tellen gerundet. Die"26090 DATA"Werte der Variablen CT, CN und SR werden mit"26100 DATA"dem Aufruf der Subroutine nicht ver'"}aendert."26110 DATA"!!Beim Programmieren sind die Werte fuer CT"26120 DATA"und CN sorgfaeltig zu bestimmen, z.B.:"26130 DA'#}TA"!! - Ganze Zahlen (-1E8 ... +1E8):"26140 DATA"! CT=11"26150 DATA"!! - SR < 1 (Vorzeichen, fuehrende Null,"26160 DATA"'$}! Dezimalpunkt, neun Nachkommastellen):"26170 DATA"! CT=12, CN=9",".P0"26180 DATA"Der Variablen CT kann ein Wert bis zu'%} 20"26190 DATA"zugewiesen werden; dies fuehrt zu einer"26200 DATA"Positionierung der Ausgabe in der Zeile. Besser"26210 DA'&}TA"ist es, die Subroutine # 110 zu benutzen."26220 DATA".P0"26230 DATA".RKlein- -> Grossbuchstaben","!"26240 DATA".R ''} - Subroutine # 330"26250 DATA"!!Dieses Unterprogramm aendert alle in der"26260 DATA"Zeichenkette SR$ vorhandenen Kleinbuc'(}hstaben"26270 DATA"in Grossbuchstaben, indem der ASCII-Wert der"26280 DATA"Zeichen im Bereich 96 ... 128 um 32 vermindert"')}26290 DATA"wird. Aus ASCII 97 ('a') wird ASCII 65 ('A')."26300 DATA"Da das Alphabet die ASCII-Werte 97 ... 122"26310 DATA"u'*}mfasst, werden auch die Sonderzeichen im"26320 DATA"Bereich 123 ... 126 gewandelt."26330 DATA"!!Die Zeichen der urspruengli'+}chen Zeichenkette"26340 DATA"werden nicht geaendert."26350 DATA".P0"26360 DATA".RAusgabe ueber den Drucker","!"26370 DATA',}".R - Subroutinen # 350, 360","!"26380 DATA"!!Grundsaetzlich kann davon ausgegangen werden,"26390 DATA"dass neben der Ausga'-}be ueber den Bildschirm auch"26400 DATA"ein Ausdruck auf Papier (Erlaeuterungen,Tabellen"26410 DATA" usw.) sinnvoll ist. Da'.}s Programm soll also die"26420 DATA"Wahl unter beiden Moeglichkeiten lassen."26430 DATA".P0"26440 DATA"Der Drucker wird ue'/}ber die Subroutinen # 350"26450 DATA"bzw. # 360 - und nur ueber diese - angesprochen."26460 DATA"Die Anweisung 'GOSUB 350' '0}entspricht der"26470 DATA"Anweisung 'PRINT SR$;' - bei einer Ausgabe ueber"26480 DATA"den Bildschirm."26490 DATA"!Vorher i'1}st der Inhalt der auszugebenden"26500 DATA"Variablen der Variablen SR$ zuzuweisen. Dies"26510 DATA"geschieht fuer"26520 DA'2}TA"!! Zeichenkettenvariable (z.B. A$):"26530 DATA"!! SR$=A$:GOSUB 350 oder"26540 DATA"! SR$='abcde':GOSUB 350"2655'3}0 DATA"!! numerische Variable (z.B. A):"26560 DATA"!! SR=A:GOSUB 300 (oder GOSUB 310)"26570 DATA"! (Wandlung in Str'4}ingvariable SR$)"26580 DATA"! GOSUB 350"26590 DATA".P0"26600 DATA"Der Ausdruck erfolgt ohne Wagenruecklauf und"26610 '5}DATA"Zeilenvorschub; die Druckzeile wird nicht"26620 DATA"abgeschlossen. Die bewirkt die Subroutine # 360;"26630 DATA"mit d'6}ieser Anweisung ist jede Anweisungsfolge"26640 DATA"zum Ausdruck einer Zeile zu beenden."26650 DATA"!!Wird die Anweisung 'G'7}OSUB 360' allein benutzt,"26660 DATA"erfolgt der Ausdruck einer Leerzeile (dies"26670 DATA"entspricht 'PRINT' bei einer Aus'8}gabe ueber den"26680 DATA"Bildschirm)."26690 DATA".P10","Das war das","!!"26700 DATA".C****************************"26710'9} DATA".C* *"26720 DATA".C* BASICODE-3 Journal *"26730 DATA".C* Nummer 11 *"2':}6740 DATA".C* 11. Juli 1990 *"26750 DATA".C* *"26760 DATA".C***************************';}*",".E"30000 REM30010 REM Grundlagen von BASICODE30020 REM -- Teil 8 --32000 REM -------------------------32010 RE'<}M FRIEDRICH DORMEIER32020 REM32030 REM D-1000 BERLIN 3932040 REM32050 REM C64/C128 - 2/199032060 REM -------------------'=}------32070 REM32080 REM Erstausstrahlung: DS-Kultur32090 REM-spezial 9007114/C128 - 2/199032060 REM -------------------$P1000 A=500:GOTO20:REM BASICODE-3 Journal 121010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI1020 HL=0:HR=HT:VL=2:VR=VT-2:+?}R$="":READT$1030 GOSUB1410:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB1101040 GOSUB150:PRINT:PRINT:PRINT1050 PRINT"Ausdruck ueber"106+@}0 PRINT:PRINT" 1 den Bildschirm,"1070 PRINT" 2 den Drucker"1080 PRINT:PRINT"Welche Nummer ?";:GOSUB2101090 SC=IN-48:+A}PRINTSC:IFSC<>2 THENSC=1:GOTO12201100 PRINT:PRINT"Wieviel Leerzeichen"1110 INPUT"am Zeilenanfang ";HL1120 PRINT:PRINT"W+B}ieviel Text-Zeichen"1130 INPUT"auf jeder Zeile ";I:HR=HL+I-11140 PRINT:PRINT"Wieviel Text-Zeilen"1150 INPUT"auf jeder S+C}eite ";VR:VR=VR-31160 PRINT"(E) Endlospapier oder "1170 PRINT"(L) Lose Blaetter (E/L) ";1180 GOSUB210:IFIN=76 THENVL=-+D}1:GOTO12201190 IFIN<>69 THEN GOSUB250:GOTO11601200 PRINT:PRINT"Wieviel Leerzeilen"1210 INPUT"am Seitenende ";VL:VR=VR+E}+VL1220 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)1230 GOSUB1380:M$=MM$:AL=VL:IFSC=2 THEN GOSUB13601240 IFLEN(R$)>HR-HL THEN GOSUB+F}18201250 GOSUB1440:IFR$<>"" THENR$=R$+" "1260 R$=R$+D$:GOTO12401270 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOTO12901280 +G}GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=01290 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN1300 IFSC=1 THEN13801310 IFVL>=0 TH+H}ENFORI=1 TOVL:GOSUB360:NEXTI:GOTO13501320 PRINT"Neues Blatt in Drucker einlegen"1330 PRINT"druecke dann RETURN/ENTER"+I}1340 GOSUB210:IFIN<>13 THEN13401350 AL=VL1360 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB12701370 SR$="":GOSUB1270:AL=VL:RET+J}URN1380 HO=3:VE=VT:GOSUB1101390 SR$="Weiter:druecke ":GOSUB1501400 GOSUB210:IFIN<>13 THEN14001410 GOSUB100:+K}AL=VL:SR$=T$1420 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB1501430 PRINT:PRINT:RETURN1440 READD$1450 IFD$="" THEN14401460 I+L}FLEFT$(D$,1)="." THEN15301470 IFLEFT$(D$,1)<>">" THEN14901480 D$=LEFT$(S$,23-LEN(R$))+MID$(D$,2):RETURN1490 IFLEFT$(D$,1)<+M}>"!" THENRETURN1500 IFD$="!" THEND$="":GOTO15201510 D$=MID$(D$,2)1520 GOSUB1760:GOTO14501530 IFD$<>".E" THEN15801540 J=1+N}:GOSUB1760:T$="E N D E"1550 SR$="":GOSUB1270:GOSUB1270:SR$=T$:GOSUB1270:T$=""1560 SR$="":GOSUB1270:IFAL<>VL THEN15601570 G+O}OTO9501580 DD$=MID$(D$,2,1):D$=MID$(D$,3)1590 IFDD$<>"R" THEN16401600 IFSC=2 THENRETURN1610 IFLEN(R$)+6+LEN(D$)>=HR-HL TH+P}ENSR$=R$:GOSUB1270:R$=""1620 PRINTM$;R$;:SR$=D$:GOSUB150:M$=""1630 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO14401640 IFDD$<>"M" T+Q}HEN16701650 I=VAL(D$):MM$="":IFI+HL=0 THEN14401660 MM$=LEFT$(S$,I+HL):GOTO14401670 IFDD$="P" THENJ=VAL(D$):GOSUB1760:GOSUB+R}1780:GOTO14401680 IFDD$="T" THENT$=D$:J=10:GOSUB1760:GOSUB1780:GOTO16001690 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO14401700 I+S}FDD$<>"F" THEN17301710 J=VAL(D$):GOSUB17601720 J=J-1:IFJ>-1 THENSR$="":GOSUB1270:GOTO17201730 IFDD$<>"C" THEN17501740 SR$+T}=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB12701750 GOTO14401760 GOSUB1820:SR$=R$:GOSUB1270:R$="":J=J-11770 RETURN1780 IF(SC=1)+U}OR(AL+J>VR)THEN18001790 SR$="":GOSUB1270:GOSUB1270:RETURN1800 IFAL<>VL THENSR$="":GOSUB1270:GOTO18001810 RETURN1820 K=HR-+V}HL+1-LEN(M$)1830 IFLEN(R$)<=K THENRETURN1840 IFMID$(R$,K,1)=" " THEN18701850 K=K-1:IFK>0 THEN18401860 SR$="":GOTO1880187+W}0 SR$=LEFT$(R$,K-1):R$=MID$(R$,K+1)1880 GOSUB1270:GOTO18201890 REM1900 REM UEBERSETZTE VERSION1910 REM1920 REM COMPUTER-+X}BULLETIN NO.40 (11/89)1930 REM STICHTING BASICODE, EINDHOVEN1940 REM25000 DATA"Programmieren in BASICODE (9)"25010 DATA"B+Y}ASICODE-3 erlaubt es, Datenfiles auf externen"25020 DATA"Speichern (Cassette oder Diskette) anzulegen,"25030 DATA"zu schrei+Z}ben und zu lesen. Das beschraenkt sich"25040 DATA"jedoch auf sequentielle Files. Relative Files"25050 DATA"werden von den e+[}inzelnen Computern in zu"25060 DATA"unterschiedlicher Form verwaltet."25070 DATA"!!Damit ist es moeglich, Datenfiles zwisch+\}en"25080 DATA"verschiedenen Computern - im BASICODE-Format -"25090 DATA"auszutauschen."25100 DATA"!!Die File-Verwaltung s+]}ieht vor:"25110 DATA"!! - Eroeffnen eines Files,"25120 DATA"! - Schreiben bzw. Lesen,"25130 DATA"! - Schliessen des Files,+^}"25140 DATA"! - Fehlerabfrage."25150 DATA".P0"25160 DATA".REroeffnen eines Files","!"25170 DATA".R - Subroutine # 500"+_}25180 DATA"!!Mit der Eroeffnung eines Files ist dessen Name"25190 DATA"in der Variablen NF$ und das angesprochene"25200 DAT+`}A"Speichermedium (Cassette, Diskette oder"25210 DATA"Microdrive) in NF festzulegen."25220 DATA"Der Filename (NF$) kann maxi+a}mal sieben Zeichen"25230 DATA"umfassen. Die Variable NF enthaelt den Code, der"25240 DATA"das Speichermedium festlegt und b+b}estimmt ob das"25250 DATA"File zum Schreiben oder Lesen eroeffnet wird."25260 DATA"!!Die Wirkung des der Variablen NF zuzuw+c}eisenden"25270 DATA"Codes wird im Einzelnen durch das"25280 DATA"Uebersetzungsprogramm bestimmt.",".P0"25290 DATA"Grundsae+d}tzlich gilt fuer die Zuweisung an NF:"25300 DATA"!!Lesen Schreiben Speichermedium"25310 DATA"!-----------------------------+e}------"25320 DATA"! 0 1 BASICODE-Cassette"25330 DATA"! 2 3 Computerspezifisch,"25340 DATA"! +f} Cassette / Diskette"25350 DATA"! 4,6 5,7 Diskette"25360 DATA"!!Um die Austauschbarkeit sicherzustellen,"2537+g}0 DATA"empfiehlt es sich, Datenbestaende im BASICODE-"25380 DATA"Format abzulegen."25390 DATA"!!Bei Verwendung der Codeziff+h}ern 2, 4, 6 bzw."25400 DATA"3, 5, 7 ist zu beachten, dass es"25410 DATA"computertypische Unterschiede gibt.",".P0"25420 DA+i}TA"Zuordnung fuer C64 und ZX Spectrum:"25430 DATA"!! n ZX Spectrum CBM C64"25440 DATA"!-------------------------+j}-------------"25450 DATA"! 0,1 BASICODE-Cassette"25460 DATA"!! 2,3 ) ! CBM-Cassette"25470 DATA+k}"! 4,5 )( Microdrive/Disk ! Diskette"25480 DATA"! 6,7 ) ! Diskette"25490 DATA".P0"25500 DATA"Mit der folg+l}enden Programmzeile wird ein"25510 DATA"Datenfile (zum Schreiben oder Lesen) eroeffnet:"25520 DATA"!! nnnn NF=n:NF$='name':+m}GOSUB 500"25530 DATA"!!Mit Abfrage der Variablen IN kann der Status,"25540 DATA"d.h. das Auftreten eines Fehlers (vergl. we+n}iter"25550 DATA"unten) festgestellt werden.",".P0"25560 DATA".RSchliessen eines Files","!"25570 DATA".R - Subroutine # +o}580"25580 DATA"!!Mit diesem Unterprogramm wird das mit NF=n"25590 DATA"geoeffnete File geschlossen. Es genuegt"25600 DATA"+p}!! nnnn GOSUB 580"25610 DATA"!!ohne dass NF=n vorher explizit angegeben wird."25620 DATA"!!Sollen zur Anlage eines Files me+q}hrere Speicher"25630 DATA"angesprochen werden (z.B. BASICODE-Cassette und"25640 DATA"Diskette), so ist das erste File zu sc+r}hliessen"25650 DATA"bevor das zweite eroeffnet wird."25660 DATA"!(Zur Fehlerabfrage siehe w.u.)",".P0"25670 DATA".RSchreib+s}en und Lesen eines Files","!"25680 DATA".R - Subroutinen # 560 und # 540"25690 DATA"!!Zum Schreiben eines Datenfiles dient+t} die"25700 DATA"Subroutine # 560. Der Inhalt von SR$ wird in das"25710 DATA"File - gekennzeichnet durch NF - geschrieben."+u}25720 DATA"Numerische Werte sind"25730 DATA"ueber 'GOSUB 300' oder 'GOSUB 310' in die"25740 DATA"Stringvariable SR$ zu wand+v}eln. Strings sind an"25750 DATA"SR$ zu uebergeben."25760 DATA"!!Die Schreibroutine hat folgende Form:"25770 DATA"!! n+w}nnn SR=A:GOSUB 300 (oder 310)"25780 DATA"! nnnn GOSUB 560"25790 DATA"!! oder nnnn SR$=A$:GOSUB 560"25800 DATA".P0"25+x}810 DATA"Das Lesen eines Files (gekennzeichnet durch NF)"25820 DATA"erfolgt ueber die Subroutine # 540. Der gelesene"25830 +y}DATA"Wert wird der Variablen IN$ zugewiesen, auch"25840 DATA"hier ist bei numerischen Werten und"25850 DATA"anschliessenden+z} arithmetischen Operationen eine"25860 DATA"Typwandlung ueber VAL(IN$) durchzufuehren."25870 DATA"!!So gilt fuer das Lesen +{}eines Files:"25880 DATA"!! nnnn GOSUB 540:A$=IN$"25890 DATA"!! oder nnnn GOSUB 540:A=VAL(IN$)"25900 DATA"!!Die Variab+|}len A$ bzw. A koennen dann im"25910 DATA"Programm weiter verwendet werden. Auch hier ist"25920 DATA"die Fehlerabfrage sinnv+}}oll."25930 DATA".P0"25940 DATA".RStatus- bzw. Fehlerabfrage"25950 DATA"!!Bei jedem Zugriff auf externe Speicher wird"2596+~}0 DATA"der Variablen IN ein Wert zugewiesen, der"25970 DATA"zeigt, ob er fehlerfrei ablief. Vom Inhalt der"25980 DATA"Varia+}blen IN koennen dann weitere Handlungen"25990 DATA"abhaengig gemacht werden."26000 DATA"!! IN Bedeutung"26010 DATA"! ---+}----------------------------------"26020 DATA"! 0 Operation fehlerfrei (o.k)"26030 DATA"! -1 Operation nicht ausgefueh+}rt"26040 DATA"! (Fehler !)"26050 DATA"!! 1 EOF (End of File),"26060 DATA"! nach dem Lesen des letzten Daten-"+}26070 DATA"! elements (IN$='leer')"26080 DATA".P0"26090 DATA"!!Anmerkungen:"26100 DATA"!!1. In Verbindung mit dem An+}sprechen externer"26110 DATA"Speicher werden u.U. die untersten Zeilen des"26120 DATA"Bildschirms fuer Benutzerhinweise (pr+}ompts)"26130 DATA"benoetigt; diese sind deshalb freizuhalten."26140 DATA"!!2. Im grafischen Betrieb sollen die Routinen"26+}150 DATA"zur Fileverwaltung nicht angesprochen werden."26160 DATA"Der Computer ist ueber 'GOSUB 100' in den"26170 DATA"Text+}betrieb zu setzen."26180 DATA".P10","Das war das","!!"26190 DATA".C****************************"26200 DATA".C* +} *"26210 DATA".C* BASICODE-3 Journal *"26220 DATA".C* Nummer 12 *"26230 DATA".C* 25+}. Juli 1990 *"26240 DATA".C* *"26250 DATA".C****************************",".E"30000 REM300+}10 REM Grundlagen von BASICODE30020 REM -- Teil 9 --32000 REM ---------------------------32010 REM FRIEDRICH DORMEIE+}R32020 REM32030 REM D-1000 BERLIN 3932040 REM32050 REM C64/C128 - 3/199032060 REM ---------------------------32070 REM+}32080 REM Erstausstrahlung: DS-Kultur32090 REM-spezial 900725C128 - 3/199032060 REM ---------------------------32070 REM(?d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%/} DD˙`  }J)Lr J  ((  p L ()   J/}L= ( L 0q A    IB JC;? D W /} LL  ` W )LA!  ߰")-݆ p" /} $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ`/}$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H /}p h  hyhy D L> L JJ    ! LA*` BF/}7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L/}EE !E^ ^ E E7EȩEdE/EȩE  D/} .L }  ;F d  ;?F7F? ( .   Z D LL d /} . D  L    p  E` , d)  D L) 0BM݊L݉/} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G/} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G/}KURS9 BC3CDOS SYS/} C C*(> C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK/}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU /} L ? .  t`GBJ ~DEHI B V0dV/}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh/}DEL8HI4 0 HI,0 0  9 .G VLO/},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI/} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI/} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO /}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -/}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH/}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu ,} 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG3}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES3}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N'3}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx 3}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT3} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL3}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD3}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.3}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC3}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY3}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 3}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A3}LLOWED IN DESTINATION 0 <.|K":GOSUB6501130 GOSUB2101140 GOTO107}401150 REM TEKEN VIERKANTEN1170 HO=X+H:VE=F*(Y+V):GOSUB6201180 HO=X-V:VE=F*(Y+H):GOSUB6301190 HO=X-H:VE=F*(Y-V):GOSUB6307}1200 HO=X+V:VE=F*(Y-H):GOSUB6301210 HO=X+H:VE=F*(Y+V):GOSUB6301220 P=(H+V)/2:Q=(V-H)/2:IFSR<2 THENRETURN1230 X(S)=X+V+P:Y7}(S)=Y+H-Q:H(S)=P:V(S)=Q:N(S)=SR-11240 S=S+1:X=X+H+P:Y=Y-V-Q:H=-Q:V=P:SR=SR-11250 GOSUB11701260 S=S-1:X=X(S):Y=Y(S):H=H(S):7}V=V(S):SR=N(S)1270 GOTO11702000 REM UITLEG2010 GOSUB40002020 PRINT"Der Satz von PYTHAGORAS ist"2030 PRINT"bereits 7}aus der Schule bekannt ."2035 PRINT2040 PRINT"Er beschreibt das Verhaeltnis"2050 PRINT"der Seitenlaengen in einem recht7}-"2060 PRINT"winkligen Dreieck:"2070 PRINT2080 PRINT" 2 2 2"2090 PRINT" A + B = C"2100 7}PRINT2110 PRINT"Das Programm zeichnet eine Baum-"2120 PRINT"struktur, die auf diesen Satz"2125 PRINT"beruht."2130 PRIN7}T2140 PRINT"Die Tiefe der Veraestelung koen-"2150 PRINT"nen Sie selbst festlegen."2160 PRINT"(Sinnvollerweise in den Grenz7}en"2165 PRINT" von 3 ... 10 )"2200 GOSUB30002210 PRINT"Bei einer Tiefe von 8 und mehr"2220 PRINT"werden die letzten Q7}uadrate im"2230 PRINT"Baum auf dem Bildschirm nur noch"2235 PRINT"mit geringer Aufloesung darge-"2240 PRINT"stellt."2247}5 PRINT2250 PRINT"Ihre Geduld bei grosser Tiefe"2260 PRINT"wird belohnt."2270 PRINT2280 PRINT:PRINT"Viel Vergnuegen !7}"3000 HO=0:VE=VT*2:GOSUB1103010 SR$="<>":GOSUB1503020 GOSUB210:IFIN<>13 THEN30204000 GOSUB1004010 B$=" Der BAUM 7}von PYTHAGORAS "4020 SR$=B$:GOSUB150:PRINT:PRINT4030 RETURN32000 REM ******************************32010 REM * 7} *32020 REM * EEN GRAFISCHE DEMONSTRATIE *32030 REM * IN *32040 REM * B A S I 7}C O D E - 3 *32050 REM * *32060 REM * COPYRIGHT (C) 1986 *32070 REM * STICHTING B7}ASICODE *32080 REM * *32090 REM ******************************32100 REM TROS DD 860726327}110 REM -Computernacht 15/16.9.8932120 REM ACORN-Master0 REM ******************************32100 REM TROS DD 860726324<1000 A=100:GOTO20:REM ### DIV 2000 ###1010 HT=HO:SR$="Division 2000":GOSUB150:PRINT:PRINT1020 PRINT"Dieses Programm sucht ;}nach"1030 PRINT"einer Periode bei der"1040 PRINT"Division. Bei Rechnern, die"1050 PRINT"fuer DIM R(2000) zu wenig"1060 PR;}INT"Speicher haben, muss der DIM-"1070 PRINT"Befehl geaendert werden."1080 PRINT:PRINT"Taste...";:GOSUB210:GOSUB1001090 SR;}$="Division 2000":GOSUB150:PRINT:PRINT1100 INPUT"X: ";X:FORHO=0 TOHT:PRINT"-";:NEXTHO1110 INPUT"Y: ";Y:PRINT:PRINT" ergibt:;}":PRINT1120 REM X/Y1130 IFY<>INT(Y)THENX=X*10:Y=Y*10:GOTO11301140 IFY<=2000 THEN11701150 PRINT"untersuche bis 2000 Stelle;}n"1160 PRINT"auf Periode"1170 DIMR(Y):KM=0:K=01180 N=INT(X/Y):X=X-Y*N:R(KM)=X1190 GOSUB120:IFHO=0 THENVE=VE+1:GOSUB11012;}00 SR=N:GOSUB300:PRINTSR$;:IFK=0 THENPRINT".";1210 IFKM=0 THEN12501220 F=01230 IFR(KM)=R(F)THEN12601240 F=F+1:IFF