PROGRAM The Changed Version of DEMO_BAS 1 REMark Compile with no windows open!! 2 : 3 REMark version 1.03 - 13 AUG 05 4 : ************************************************************************* * 100 to 200 set Turbo options * ************************************************************************* 100 TURBO_locstr "Report":REMark Ignore/Create 110 TURBO_windo 0 120 TURBO_optim "Brief":REMark Rem/Fast 130 TURBO_model ">64":REMark >64 140 TURBO_struct "Struc":REMark Freef 150 TURBO_diags "i":REMark Omit/Include 160 TURBO_taskn "pe_demo" 170 TURBO_repfil "ram1_err" 180 TURBO_objdat 40:TURBO_objstk 600 190 TURBO_objfil "ram1_demo3_task" 200 TURBO_buffersz 200:TURBO_ref ************************************************************************* * 400 has been REMarked out. (COMPILED is a Turbo TK code extension) * ************************************************************************* 400 REMark COMPILED=JOB$(-1)<>'' 410 REMark IF RMODE=8 THEN MODE 4 420 IF COMPILED: OPEN #1,'con': INK 0: REMark INK ensures that #1 has been used! 430 : 1000 init 1010 : 1020 IF COMPILED 1030 DR_PPOS main_defn,-1,-1,m_lflg%,m_mflg%,m_cty% 1040 ELSE 1050 DR_PULD main_defn,-1,-1,m_lflg%,m_mflg%,m_cty% 1060 END IF 1070 DR_AWDF #mvch,main_defn,0 1080 FOR i=midCn-10 TO midCn-2 STEP 2,midCn+2 TO midCn+10 STEP 2: BLOCK #mvch;nwxs%,1,0,i;green 1090 REPeat l 1100 RD_PTR main_defn,item%,swnum%,action%,xrel%,yrel%,m_lflg%,m_mflg%,m_cty% 1110 it=item% 1120 IF swnum%<0 1130 SELect ON it 1140 =0:DR_UNST main_defn:CLOSE #mvch:STOP 1150 =1:BEEP 1000,10:beepn= beepn+1 1160 new_beep$= beep1$&beepn&beep2$&FILL$('s',beepn<>1)&'.' 1170 CH_ITEM main_defn,-3,0,-1,'',new_beep$ 1180 DR_IDRW main_defn,1 1190 =2:FOR i=0 TO m_nrow-1 1200 FOR j=0 TO m_ncol-1 1210 IF NOT(m_mflg%(i,j)&&16) THEN m_mflg%(i,j)=m_lflg%(2)+1 1220 END FOR j 1230 END FOR i 1240 =3:CH_WIN main_defn:m_lflg%(3)=1 1250 END SELect 1260 END IF 1270 IF swnum%=0 THEN IF (item% DIV 256)=1 THEN BEEP xrel%*100+1,note%(nnote-yrel%) 1280 END REPeat l 1290 : 10000 DEFine PROCedure init 10010 : 10020 : REMark Define a general-purpose moveable channel 10030 : REMark and some useful colours. 10040 : 10050 OPEN_NEW#4,pipe_512:CONNECT 4 TO 3 10060 mvch=FOPEN('con'):INK #mvch;0 10070 black=0:red=2:green=4:white=7:grey=255 10080 : 10090 : REMark Possible item type codes: retx is added to return 10100 : REMark when hit, with (retr) or without (retn) a re-draw 10110 : 10112 DIM new_beep$(70),beep1$(30),beep2$(6),hit$(2),do$(2),cancel$(2), help$(2),move$(2),size$(2),x$(40) 10116 : 10120 text=0:sprite=2:blob=4:pattern=6:text%=0 10130 retr=256:retn=-256 10140 hit$=CHR$(1):do$=CHR$(2):cancel$=CHR$(3) 10150 help$=CHR$(4):move$=CHR$(5):size$=CHR$(6) 10160 : 10170 lxs%=6*5:lys%=12:nwxs%=80:nwys%=30:nwys=30 10180 DIM lxs1%(3):FOR x=0 TO 3:lxs1%(x)=4+(lxs%+4)*x 10190 : 10200 : REMark Set up an array with the best approximations to 10210 : REMark the correct values for BEEP to produce a scale. 10220 : ************************************************************************* * In 10230 semitone is set to 2 to force 2^(1/12) to be fp. * ************************************************************************* 10230 nnote=nwys:midCf=261:midCn=nnote/2:semitone=2:semitone=semitone^(1/12) 10240 botnote=midCf 10250 DIM note%(nnote) 10260 FOR i=midCn TO nnote 10270 note%(i)=1/7.1E-5/botnote-10:botnote= botnote*semitone 10280 nn=(i-midCn) MOD 7 10290 SELect ON nn=0,1,3,4,5:botnote= botnote*semitone 10300 END FOR i 10310 botnote=midCf 10320 FOR i=midCn TO 0 STEP -1 10330 note%(i)=1/7.1E-5/botnote-10:botnote=botnote/semitone 10340 nn=(midCn-i) MOD 7 10350 SELect ON nn=1,2,3,5,6:botnote= botnote/semitone 10360 END FOR i 10370 : 10380 beep1$='You have used the BEEP item ':beep2$= ' time' 10390 beepn=0 10400 : ************************************************************************* * 10410 to 10450 set numbers as integers, 10460 as floating point * * for PUT and GET * ************************************************************************* 10410 im1%=-1:im2%=-2:i0%=0:i1%=1:i2%=2:i3%=3:i4%=4:i6%=6 10420 i7%=7:i9%=9:i10%=10:i12%=12:i14%=14:i16%=16:i18%=18 10430 i20%=20:i22%=22:i30%=30:i40%=40:i60%=60:i64%=64 10440 i70%=70:i75%=75:i80%=80:i84%=84:i132%=132:i150%=150 10450 i160%=160:i230%=230:i232%=232:i248%=248:im=-1:i255%=255 10460 i0=0:i1=1:i2=2:i4=4:i7=7:im1=-1 12000 : 12010 : REMark The initialisation of the menu itself starts 12020 : REMark here: this corresponds to a call to WM.SETUP 12030 : REMark in machine code. 12040 : 12050 : REMark The standard window attributes 12060 : 12070 RESTORE 12240 12080 DIM std_wattr%(3) 12090 PUT#4,i0%,i1%,i255%,i7% 12100 RD_WATT std_wattr% 12110 : 12120 : REMark The standard item attributes 12130 : 12140 DIM std_iattr(3,3) 12150 PUT#4,i1,i0 12160 PUT#4,i7,i4,i0,i0 12170 PUT#4,i7,i0,i0,i0 12180 PUT#4,i4,i0,i0,i0 12190 RD_IATT std_iattr 12200 : 12210 : REMark The data for the pointers 12220 : 12230 main_sprite=RD_SPRT 12240 DATA 6,5,4 12250 DATA ' www ' 12260 DATA ' waw ' 12270 DATA ' waw ' 12280 DATA ' waw ' 12290 DATA 'wwwwwa awwwww' 12300 DATA 'waaaa aaaaw' 12310 DATA 'wwwwwa awwwww' 12320 DATA ' waw ' 12330 DATA ' waw ' 12340 DATA ' waw ' 12350 DATA ' www ','' 12360 : 12370 mus_sprite=RD_SPRT 12380 DATA 2,8,4 12390 DATA ' a ' 12400 DATA ' aa ' 12410 DATA ' a a' 12420 DATA ' a a' 12430 DATA ' a ' 12440 DATA ' a ' 12450 DATA ' a ' 12460 DATA ' aaaa ' 12470 DATA 'aaaaa ' 12480 DATA ' aaa ','' 12490 : 12500 move_sprite=RD_SPRT 12510 DATA 5,4,4 12520 DATA 'aaaaaaaaaa ' 12530 DATA 'awwwwwwwwa ' 12540 DATA 'awwrrrrwwa ' 12550 DATA 'awwrrrrwwaaaaa' 12560 DATA 'awwrrwwwwwwwwa' 12570 DATA 'awwwwwwwwrrwwa' 12580 DATA 'aaaaawwrrrrwwa' 12590 DATA ' awwrrrrwwa' 12600 DATA ' awwwwwwwwa' 12610 DATA ' aaaaaaaaaa','' 12620 : 12630 qjump_blob=RD_SPRT 12640 DATA 0,0,4 12650 DATA ' aaa ' 12660 DATA ' aaaaaaa ' 12670 DATA ' aaaa aaaa ' 12680 DATA ' aa aa ' 12690 DATA 'aaa aaa ' 12700 DATA 'aa aa ' 12710 DATA 'aa aa a a a a ' 12720 DATA 'aa aa a a aa aa ' 12730 DATA 'aa aa a a a a a a aaa ' 12740 DATA 'aa aa a a a a a a a' 12750 DATA 'aa aa a a a a a a a' 12760 DATA 'aa aa a aa a a aaa ' 12770 DATA 'aaa aa aa a a a ' 12780 DATA ' aa aaaa aa aaaaaaaa a ' 12790 DATA ' aaaa aaaaa aaaaaaaaaaaa ' 12800 DATA ' aaaaaaaaaaaaaaaaa aaaaaa ' 12810 DATA ' aaa aaaaaa aaaa ','' 12820 : 12830 black_patt=RD_SPRT 12840 DATA 0,0,4 12850 DATA 'aaaaaaaaaaaaaaaa','' 14010 : 14020 : REMark Some loose objects 14030 : 14040 m_nlit=4:DIM m_lflg%(m_nlit-1) 14050 PUT#4,m_nlit 14060 PUT#4,lxs%,lys%,lxs1%(0),i40%,i0%,i0%,cancel$,text+retr,'Quit' 14070 PUT#4,lxs%,lys%,lxs1%(1),i40%,i0%,i0%,'B',text+retr,'Beep' 14080 PUT#4,lxs%,lys%,lxs1%(2),i40%,i0%,i0%,'A',text+retn,'All' 14090 PUT#4,lxs%,lys%,lxs1%(3),i40%,i0%,i0%,move$,sprite+retn,move_sprite 14100 main_lot=RD_LOTA(std_iattr) 14110 : 14120 : REMark Some information objects 14130 : 14140 i3=3:i1=1:i0=0 14150 PUT#4,i3 14160 PUT#4,i64%,i20%,i0%,i0%,text,red,i3,i1,'Demo' 14170 PUT#4,i132%,i10%,i0%,i20%,text,black,i0,i0,'of the Pointer Toolkit' 14180 PUT#4,i40%,i20%,i80%,i2%,blob,black_patt,qjump_blob 14190 main_iot_1=RD_IOT 14200 : 14210 PUT#4,i1 14220 PUT#4,i230%,i10%,i0%,i0%,text,black,i0,i0,beep1$&beepn&beep2$&'s.' 14230 main_iot_2=RD_IOT 14240 : 14250 : REMark Some information sub-windows 14260 : REMark to put the objects in 14270 : 14280 PUT#4,i2 14290 PUT#4,i132%,i30%,i4%,i2% 14300 PUT#4,i0%,i1%,i0%,i7% 14310 PUT#4,main_iot_1 14320 : 14330 PUT#4,i230%,i10%,i4%,i60% 14340 PUT#4,i0%,i0%,i0%,i7% 14350 PUT#4,main_iot_2 14360 main_iwt=RD_IWT 14370 : 14380 : REMark One menu sub-window object table 14390 : 14400 m_nrow=4:m_ncol=3:m_nrc=m_nrow*m_ncol:DIM m_mflg%(m_nrow-1,m_ncol-1) 14410 PUT#4,m_nrc 14420 PUT#4,i2% ,i1% ,'U',text%,'Unicorn' 14430 PUT#4,i0% ,i1% ,'T',text%,'Triffid' 14440 PUT#4,im2%,i1% ,'K',text%,'Kryptonite' 14450 PUT#4,i2% ,i4% ,'D',text%,'Dragon' 14460 PUT#4,i0% ,i4% ,'Y',text%,'Yggdrasil' 14470 PUT#4,im2%,i4% ,'O',text%,'Unobtainium' 14480 PUT#4,i2% ,i0% ,'N',text%,'Nematode' 14490 PUT#4,i0% ,i0% ,'A',text%,'Aspidistra' 14500 PUT#4,im2%,i0% ,'B',text%,'Bauxite' 14510 PUT#4,i2% ,im1%,'W',text%,'Wombat' 14520 PUT#4,i0% ,im1%,'J',text%,'Jacaranda' 14530 PUT#4,im2%,im1%,'C',text%,'Chrysolite' 14540 m_aot=RD_AOTA(std_iattr) 14550 : 14560 : REMark The spacing lists for the 14570 : REMark menu sub-window 14580 : 14590 PUT#4,m_ncol 14600 PUT#4,i0%,i0% 14610 PUT#4,i60%,i64% 14620 PUT#4,i80%,i84% 14630 PUT#4,i80%,i84% 14640 main_xspc=RD_AST 14650 : 14660 PUT#4,m_nrow 14670 PUT#4,i0%,i0% 14680 PUT#4,i12%,i14% 14690 PUT#4,i20%,i22% 14700 PUT#4,i16%,i18% 14710 PUT#4,i12%,i14% 14720 main_yspc=RD_AST 14730 : 14740 : REMark The row list 14750 : 14760 PUT#4,m_nrow 14770 PUT#4,m_aot 14780 PUT#4,i0%,i3% 14790 PUT#4,i3%,i6% 14800 PUT#4,i6%,i9% 14810 PUT#4,i9%,i12% 14820 main_rwt=RD_RWT 14830 : 14840 : REMark The control definition 14850 : 14860 DIM m_cty%(2,2):m_cty%(0,0)= 2 14870 m_cty%(1,0)=0: m_cty%(1,1)=0:m_cty%(1,2)=1 14880 m_cty%(2,0)=2*6+20:m_cty%(2,1)=0:m_cty%(2,2)=1 14890 PUT#4,i2%,i4%,i7%,i4% 14900 main_ctdy=RD_CDEF 14910 : 14920 : REMark Some application sub-windows: the 14930 : REMark second is a menu sub-window 14940 : 14950 PUT#4,i2 14960 PUT#4,nwxs%,nwys%,i160%,i2% 14970 PUT#4,mus_sprite,'C' 14980 PUT#4,im1 14990 : 15000 PUT#4,i232%,i70%,i4%,i75% 15010 PUT#4,i0,'W' 15020 PUT#4,i0,main_ctdy 15030 PUT#4,i0%,i6% 15040 PUT#4,main_xspc,main_yspc 15050 PUT#4,i0,i0 15060 PUT#4,main_rwt 15070 main_awt=RD_AWTA(std_wattr%) 15080 : 15090 : REMark The window definition itself 15100 : 15110 PUT#4,i2%,i1%,i255%,i7% 15120 PUT#4,i248%,i150%,i30%,i30% 15130 PUT#4,main_sprite,main_lot,main_iwt,main_awt 15140 main_defn=RD_WDEF 15150 : 15160 END DEFine 15170 : 20000 DEFine FuNction RD_SPRT 20010 LOCal tmp_patt$(32,32) 20020 LOCal xs,ys, xo,yo, md, l, x 20030 xs=0:ys=-1:READ xo,yo,md 20040 REPeat l 20050 READ x$:IF x$='' THEN EXIT l 20060 ys=ys+1:tmp_patt$(ys)=x$&FILL$(' ',32) 20070 IF LEN(x$)>xs THEN xs=LEN(x$) 20080 END REPeat l 20090 l=ALCHP(SPRSP(xs,ys+1)) 20100 SPSET l,xo,yo,md,tmp_patt$(0 TO ys,1 TO xs) 20110 RETurn l 20120 END DEFine RD_SPRT 20130 : 20140 DEFine FuNction RD_WDEF 20150 LOCal lattr%(3) 20160 RD_WATT lattr% 20170 RETurn RD_WDEFA (lattr%) 20180 END DEFine RD_WDEF ************************************************************************* * 20185 declares lattr% to be a one dimensional array * * In 20200 aldef% replaces the original ldef% * ************************************************************************* 20185 REFERENCE lattr%(0) 20190 DEFine FuNction RD_WDEFA (lattr%) 20200 LOCal aldef%(3), lspr, lloose, linfo, lappl,a%,x 20210 GET#3, aldef%(0), aldef%(1), aldef%(2), aldef%(3) 20220 GET#3,lspr,lloose,linf,lappl 20230 RETurn MK_WDEF (aldef%, lattr%, lspr, lloose, linf, lappl) 20240 END DEFine RD_WDEFA 20250 : ************************************************************************* * In 20580 lsk$&"" replaces lsk$ * ************************************************************************* 20260 DEFine FuNction RD_LOT 20270 LOCal nitem, count(3), lattr(3,3) 20280 GET#3,nitem 20290 IF nitem 20300 nitem=nitem-1 20310 RD_IATT lattr 20320 RETurn RD_LOTN 20330 END IF 20340 RETurn 0 20350 END DEFine RD_LOT 20355 REFERENCE lattr(0,0) 20360 DEFine FuNction RD_LOTA (lattr) 20370 LOCal nitem, count(3) 20380 GET#3,nitem: IF nitem: nitem= nitem-1: RETurn RD_LOTN 20390 RETurn 0 20400 END DEFine RD_LOTA 20410 DEFine FuNction RD_LOTN 20420 LOCal item, ltyp, a$(85), lsk$(nitem) 20430 LOCal ldef%(nitem,6), lptr(3,nitem), lstr$(nitem,85) 20440 lsk$='' 20450 FOR item = 0 TO nitem 20460 GET#3, ldef%(item,0), ldef%(item,1), ldef%(item,2), ldef%(item,3) 20470 GET#3, ldef%(item,4), ldef%(item,5) 20480 GET#3, a$: lsk$=lsk$ & a$ 20490 GET#3, ltyp 20500 ldef%(item,6)=ltyp: ltyp=(ltyp MOD 256)/2 20510 IF ltyp 20520 GET#3, lptr(ltyp,count(ltyp)) 20530 ELSE 20540 GET#3, lstr$(count(0)) 20550 END IF 20560 count(ltyp)=count(ltyp)+1 20570 END FOR item 20580 RETurn MK_LIL (lattr, ldef%(TO, 0 TO 1), ldef%(TO, 2 TO 3), ldef%(TO, 4 TO 5), lsk$&"", ldef%(TO, 6), lstr$, lptr(1), lptr(2), lptr(3)) 20590 END DEFine RD_LOTN 20600 : 20610 DEFine FuNction RD_IWT 20620 LOCal nitem 20630 GET#3,nitem: IF nitem: nitem=nitem-1: RETurn RD_IWTN 20640 RETurn 0 20650 END DEFine RD_IWT ************************************************************************* * In 20680 alptr replaces lptr * ************************************************************************* 20660 DEFine FuNction RD_IWTN 20670 LOCal item 20680 LOCal ldef%(nitem,3), latt%(nitem,3), alptr(nitem) 20690 FOR item = 0 TO nitem 20700 GET#3, ldef%(item,0), ldef%(item,1), ldef%(item,2), ldef%(item,3) 20710 GET#3, latt%(item,0), latt%(item,1), latt%(item,2), latt%(item,3) 20720 GET#3, alptr(item) 20730 END FOR item 20740 RETurn MK_IWL (ldef%, latt%, alptr) 20750 END DEFine RD_IWTN 20760 : 20770 DEFine FuNction RD_IOT 20780 LOCal nitem, count(3) 20790 GET#3,nitem: IF nitem:nitem=nitem-1: RETurn RD_IOTN 20800 RETurn 0 20810 END DEFine RD_IOT 20820 DEFine FuNction RD_IOTN 20830 LOCal item, ltyp, work1, work2 20840 LOCal ldef%(nitem,4), lptr(3,nitem), lstr$(nitem,85) 20850 FOR item = 0 TO nitem 20860 GET#3, ldef%(item,0), ldef%(item,1), ldef%(item,2), ldef%(item,3) 20870 GET#3, ltyp 20880 ldef%(item,4)=ltyp: ltyp=ltyp/2 20890 IF ltyp 20900 GET#3, lptr(0,item),lptr(ltyp,count(ltyp)) 20910 ELSE 20920 GET#3, work1 20930 GET#3, work2: work1=work1*256+work2 20940 GET#3, work2: lptr(0,item)=work1*256+work2 20950 GET#3, lstr$(count(0)) 20960 END IF 20970 count(ltyp) = count(ltyp) + 1 20980 END FOR item 20990 RETurn MK_IOL (ldef%(TO, 0 TO 1), ldef%(TO, 2 TO 3), lptr(0), ldef%(TO, 4), lstr$, lptr(1), lptr(2), lptr(3)) 21000 END DEFine RD_IOTN 21010 : 21015 REFERENCE lattr%(0) 21020 DEFine FuNction RD_AWTA (lattr%) 21030 LOCal nitem 21040 GET#3,nitem 21050 IF nitem: nitem=nitem-1: RETurn RD_AWTAN 21060 RETurn 0 21070 END DEFine RD_AWTA 21080 DEFine FuNction RD_AWTAN 21090 LOCal item 21100 LOCal aldef%(3), alptr(2), lsk$(2) 21110 LOCal lawa(nitem) 21120 FOR item = 0 TO nitem 21130 GET#3, aldef%(0), aldef%(1), aldef%(2), aldef%(3) 21140 GET#3, alptr(0), lsk$, alptr(1) 21150 IF alptr(1)<0 21160 lawa(item)=MK_APPW (aldef%, lattr%, alptr(0), lsk$&"") 21170 ELSE 21180 lawa(item)=RD_MSWA 21190 END IF 21200 END FOR item 21210 RETurn MK_AWL (lawa) 21220 END DEFine RD_AWTAN 21230 : ************************************************************************* * 21240 to 21460, which contained RD_AWT and RD_AWTN, have been * * removed, for two reasons. * * 1. RD_AWT and RD_AWTN are not used. * * 2. RD_AWTN contains a mistake anyway. * ************************************************************************* 21470 DEFine FuNction RD_MSWL 21480 LOCal loff%(1),loptr(4) 21490 GET#3, alptr(2), loff%(0), loff%(1) 21500 GET#3, loptr(0),loptr(1),loptr(2),loptr(3),loptr(4) 21510 RETurn MK_APPW (aldef%(TO 3), aldef%(4 TO 7), alptr(0), lsk$&"", alptr(1), alptr(2), loff%(0), loff%(1), loptr(0), loptr(1), loptr(2), loptr(3), loptr(4)) 21520 END DEFine 21530 : 21540 DEFine FuNction RD_MSWA 21550 LOCal loff%(1),loptr(4) 21560 GET#3, alptr(2), loff%(0), loff%(1) 21570 GET#3, loptr(0),loptr(1),loptr(2),loptr(3),loptr(4) 21580 RETurn MK_APPW (aldef%, lattr%, alptr(0), lsk$&"", alptr(1), alptr(2), loff%(0), loff%(1), loptr(0), loptr(1), loptr(2), loptr(3), loptr(4)) 21590 END DEFine 21600 DEFine FuNction RD_AOT 21610 LOCal nitem, count(3), lattr(3,3) 21620 GET#3,nitem 21630 IF nitem 21640 nitem=nitem-1 21650 RD_IATT lattr 21660 RETurn RD_AOTN 21670 END IF 21680 RETurn 0 21690 END DEFine RD_AOT 21695 REFERENCE lattr(0,0) 21700 DEFine FuNction RD_AOTA (lattr) 21710 LOCal nitem, count(3) 21720 GET#3,nitem: IF nitem: nitem=nitem-1: RETurn RD_AOTN 21730 RETurn 0 21740 END DEFine RD_AOTA 21750 DEFine FuNction RD_AOTN 21760 LOCal item, ltyp, a$(85), lsk$(nitem) 21770 LOCal ldef%(nitem,2), lptr(3,nitem), lstr$(nitem,85) 21780 lsk$='' 21790 FOR item = 0 TO nitem 21800 GET#3, ldef%(item,0), ldef%(item,1), a$, ldef%(item,2) 21810 lsk$=lsk$ & a$ 21820 ltyp=(ldef%(item,2) MOD 256)/2 21830 IF ltyp 21840 GET#3, lptr(ltyp,count(ltyp)) 21850 ELSE 21860 GET#3, lstr$(count(0)) 21870 END IF 21880 count(ltyp)=count(ltyp)+1 21890 END FOR item 21900 RETurn MK_AOL (lattr, ldef%(TO, 0 TO 1), lsk$&"", ldef%(TO, 2), lstr$, lptr(1), lptr(2), lptr(3)) 21910 END DEFine RD_AOTN 21920 : 21930 DEFine FuNction RD_AST 21940 LOCal nitem 21950 GET#3,nitem: IF nitem: nitem=nitem-1:RETurn RD_ASTN 21960 RETurn 0 21970 END DEFine RD_AST 21980 DEFine FuNction RD_ASTN 21990 LOCal ldef%(nitem+1,1),item 22000 GET#3, ldef%(0,0), ldef%(0,1) 22010 FOR item=1 TO nitem+1:GET#3, ldef%(item, 0), ldef%(item, 1) 22020 RETurn MK_ASL(ldef%(1 TO nitem+1), ldef%(0,0), ldef%(0,1)) 22030 END DEFine RD_ASTN 22040 : 22050 DEFine FuNction RD_RWT 22060 LOCal nitem 22070 GET#3,nitem:IF nitem:nitem=nitem-1:RETurn RD_RWTN 22080 RETurn 0 22090 END DEFine RD_RWT 22100 DEFine FuNction RD_RWTN 22110 LOCal ldef%(nitem, 1), ptr, item 22120 GET#3, ptr 22130 FOR item=0 TO nitem: GET#3, ldef%(item, 0), ldef%(item, 1) 22140 RETurn MK_RWL(ptr,ldef%) 22150 END DEFine RD_RWTN 22160 : 22170 DEFine FuNction RD_CDEF 22180 LOCal aldef%(3) 22190 GET#3, aldef%(0), aldef%(1), aldef%(2), aldef%(3) 22200 RETurn MK_CDEF(aldef%(0), aldef%(1), aldef%(2), aldef%(3)) 22210 END DEFine RD_CDEF 22220 : 22225 REFERENCE lattr(0,0) 22230 DEFine PROCedure RD_IATT (lattr) 22240 LOCal i 22250 GET#3, lattr(0,0), lattr(0,1) 22260 FOR i=1 TO 3: GET#3, lattr(i,0), lattr(i,1), lattr(i,2), lattr(i,3) 22270 END DEFine RD_IATT 22280 : 22285 REFERENCE lattr%(0) 22290 DEFine PROCedure RD_WATT (lattr%) 22300 GET#3, lattr%(0), lattr%(1), lattr%(2), lattr%(3) 22310 END DEFine RD_WATT