CommonLisp-CompatibleArrayFunctionsFile:CMLARRAY.ttyRevised:Feb21,Jul1,andSep28,1983,byJonLWhiteThefollowingfunctionsarebasedonthedefinitionsintheCommonLispcommunity,andprovidemanyfeatureslackinginInterlisp'sARRAYsupport,inparticularmulti-dimensionalarrays,sharedarrays,andsuper-fastaccessing("open-coding"ofaccesswith"unsafe"primitives).Thesedefinitionsfollowthosefromthe"Excelsior"editionoftheCommonLispmanual(5August1983,copyrightGuyL.SteeleJr.)andsomeoftheprosebelowisreproducedfromtheaforesaid"Excelsior"editionbypermission.DocumentationTerminologyNotalloptionsandfeaturesoftheCommonLispspecifictionareimplemented;descriptionsoflimitationsareencolsedasnoteswithindoublesquarebrackets.Furthermore,forthebenefitofInterlisp-Dusers,somenon-portableextensionshavebeenmade,andthesearedescribedasnotedwithinsinglesquarebrackets.Anumberoffunctionstakeargumentsin"keyword"format;thismeansthatthearglist,aftersomepoint,alternatesbetweenanargumentwhichnamesthemeaningofthenextargumentandthenext"real"argument.E.g.,supposeCOLORMYWORLDisafunctionwithconceptuallydozensofparameters,butwhichistypicallycalledwithonlyoneortwoofthemsettoanon-defaultvalue.Thenyoumightsee(COLORMYWORLDSOMEBITMAP'HUEBLUE'DURATION5HOURS)wherethefirstargumentis"required",butalltheothersareoptionalandareobtainedfromtheappropriatepairintherealarglist;inthisexample,onesuch"keyword"argumentiscalledHUE,anditwillbesettothevalueofthevariableBLUE;also"coloring"willlastforadurationoftimefoundinthevariable5HOURS.Asageneralrule,anysymbol("litatom"intheInterlispsense)whichhasa"-"initsname,willhavethose"-"'sremovedintheInterlispincarnation(becauseofweirdpotentialinteractionwithCLISP).Thus,MAKE-ARRAYintheCommonLispmanualbecomesMAKEARRAYintheInterlispworld.Also,sinceInterlispdoesn'thave&optional,&rest,or&keyargumentspreading,thenanyfunctionwithsuchanargumentspectrumwillbeimplementedasano-spreadlambda;curlybracketswillenclosethenameforasequenceofsucharguments.CreationofArraysAnarray,forthepurposeofthisdocumentation,isaninstanceofanewdatatype(calledCMLARRAY),andisnotrelatedtothepreviously-documentedInterlisparrayfacility.Byconvention,allindexingintheCommonLispworldis0-origin.(MAKEARRAY...{keyword-arguments}...)isalistofnon-negativeintegersthataretobethedimensionsofthearray;thelengthofthelistwillbetherank,ordimensionality,ofthearray.NotethatifisNIL,thenazero-dimensionalarrayiscreated.Forconveniencewhenmakingaone-dimensionalarray,thesingledimensionmaybeprovidedasanintegerratherthanalistofoneinteger.Thekeywordargumentsare:ELEMENTTYPE-T,[orNIL,orPOINTER]meansthattheelementsareallgeneralp c/ b6q b6 ` oFyP'Z*/7s` _ _ ^.(-^. \2!o$('+037E;~\ [~ [~ Z& Z& X X Wv oF"n%*-Y0 :=N?Wv V ' d 'x+3:9DT SnF  ,/49?Sn R  %+048D BXH?R P o "n(O-Y59;ADP OfFyZd"n$ .02c5>% H9H?Of N' jN L L K^ oFyP'Z1 'x 0K^ J J H oF&)&,2c6 ADDH GV  #E -Y08D:?EEGV E *.018D: DJJE D  #E'x+049C/Gh@ ?Fy#E)& 2c9;C/Gh?F =P$+/2c6 o "n*049BXD ;> 9y &'x+/469 8 oF  #E'x+498 76PZ"n ,/3:6%AB^3. 1y1; $+11 0~ 0~ /& oFy1;!'x 03:6>D /& -PZ;#E'x+05A- ,vP d$'x,4 >C/C5,v +y #E& /5%B^' %yd $(O)148D @% $f $f # # ! ! ^ oFyP'Z1d;&)&.6 ^    oFd$&* 7m9 "n)*.0 8D  ;$,/2c9EE d (O)&), 6 6 Fd oF  . oFyZ&+/3::>%ABXH?. 7 q?[Lisp"pointers";thisisthedefault.-FIXNUM,[orFIXP,orCELL]forentrieswhichareintegersstoredas2'scomplement32-bits[[31-bitsinInterlisp/VAX,36-bitsinInterlisp-10]]-FLONUM,[orFLOATP]entriesareall32-bitIEEEformatfloating-point[[36-bitpdp10formatforInterlisp-10]]Thefollowingtypespecifiersaresub-typesofINTEGERforwhichtheaccessingismuchmoreefficientthanforotherrandomfieldsizes.-(MOD65536)[orDOUBLEBYTE;oradditionally,forInterlisp-Donly,WORDorSMALLPOSP]for16-bitnon-negativeintegers.-(MOD256)[orBYTE,orCHARACTER]for8-bitnon-negativeintegers.-(MOD16)[orNIBBLE]for4-bitnon-negativeintegers.-(MOD2),orBIT,forsingle-bitentries.[[Ingeneral,theCommonLisptypeheirarchyisn'tsupported;thusonlytheexplicitnamesabovewillwork.However,forInterlisp-D,asof28-Sep-83,thetype(MODn)foranyreasonable"n",issupported.]]INITIALELEMENT-ArgumentmustbeaquantityofthetypespecifiedbytheELEMENTTYPEargument,andisusedtoinitalizealltheentriesofthearray.DefaultisNILforpointertype,andzerofornumerictypes.INITIALCONTENTS-Ifthearrayiszero-dimensional,thethisspecifiesitscontents;otherwise,itmustasequencewhoselengthisequaltothefirstdimension,andeachelementthereofmustbeanestedstructureforanarraywhosedimensionsaretheremainingdimensions,andsoon.DISPLACEDTO-Argumentwillbeanarraywhoselinearizeddatasegmentwillbesharedwiththeonebeing"made";seealsotheDISPLACEDOFFSETargumentalso.DISPLACEDINDEXOFFSET-Whenthedatavectorisbeing"shared",thisspecifiestheoffsetfromtheoriginofthedatavectoratwhichthenewarraywillhaveitszero-origin.Theimplementationalconstraints,asspecifiedbythesymbolicconstantsARRAY-RANK-LIMIT,ARRAY-DIMENSION-LIMIT,andARRAY-TOTAL-SIZE-LIMITare:Ranksupto63aresupported;eachindividualdimensionofanarrayisconstrainedonlytobeaFIXP;inInterlisp-D,thetotalstorageforthedatablockofanarraymaynotexceed(2^16-5)*2^5bits,andsinceapointerrequires32bits,thenanarraymaycontainupto2^16-5pointerelements,or2^18-20byteelements;Interlisp/VAXandInterlisp-10mayhaveotherconstraints.[[Thefollowinglimitationsexistasof9-MAY-84:(1)the:FILL-POINTERkeywordargumentisnotimplementedatall;(2)allarraysautomaticallyhavethe:ADJUSTABLEproperty;(3)the"nestedstructures"usedtospecifythe:INITIAL-CONTENTSmaybeeitheranotherarrayofthesamedimensionality,orelsejustlistsoflists.(4)thesymbolicconstantsARRAY-RANK-LIMIT,ARRAY-DIMENSION-LIMIT,andARRAY-TOTAL-SIZE-LIMITarenotactuallyinthecode.Justbeawareoftheselimitsbyreadingthedocumentationpresentedabove.]]Examples:(MAKEARRAY5)-Createaone-dimensionalarrayoffiveelements(MAKEARRAY'(34)'ELEMENTTYPE'(MOD256))--Createatwo-dimensionalarray,3by4,with8-bitelements;(SETQA(MAKEARRAY'(423)'INITIALCONTENTS'(((abc)(123))((def)(312)) c8 b6q oFyP'Z "n&)&,3@b6 ` oFy1!$)&,3:8D;C/II` _ oFyP' #E)2c4 AGh_ ^. oFyP' "t^. \ oFy1#E)-Y06:@@\ [~ [~ Z& oFyP' &) 5Z& X oFP )&,47m>%AFIX Wv oFZ#E+/3:8D>%C/IIJJWv V oFy ), 8D; EIV T oFyP'Z $'x-Y 8D?T Sn oFy;#E% /2c7m BXISn R oFyd$'x(O-Y 8D?R P oFy $ -Y4P Of oF' (O,49 C/GbGbOf NLN L oF!&*/08D; FIIL K^ K^ J oF ;"n&)&,/ 9=N? IJ H oF H GV oFy; "n),/4BXBXGV E E D oFyP!%(O047m>%@DIJJD CN oFyP#E)/2c69@ECN A oFA @ oFyZd/2c6>BXI@ ?F oFyP #E$,17m9>ADI?F = oFyP $*158D9?H9H9= <FL< ;> oFyP )&,/8D BXEH9H9;> 9 u9 8 oF 8 76 oFy; #E(O-Y 6:AEH9H?76 5 oFyP1d $)&/048D;II5 4 oFyP !!4 3. oF3. 1 oFy;$&+48D@DII1 0~ oFyP #E&*03:8D;>DH9H90~ /&#/& - oFyP - ,v ,v +F 'x)2c48D?H9H?+ )-Y0DH9H?) (ny $(O 19DFF(n ' 1;$'x 2c5:ADH9H?' %'1;!$* 5:>%C/DD% $f$f #y; %)&/2c4:AII# ! o'Z ,/ :>%BXGbGh! ^  ^   Z "n'x),4 V y ;$,/2c C/C5V  yZ $(O+ 5=T  y1 #E'x)04C/FH? N oF #E&*8D:>C/H9IN  oF-  y"n1DGh F oF"n%)&03:6;>  oF d#E$2c7m9>%D oF d (O-Y2c3:5;=N@ 6 oF !#E%(O,19! 6 oFP ;!#E%44 oFyP'Z1d;#E$'x)+.6 . oFyP'Z1d;#E$'x)+.6. ' q?[]((ghi)(231))((jkl)(000)))))(MAKEARRAY'(423)'INITIALCONTENTSA)(SETQB(MAKEARRAY107'ELEMENTTYPE'BIT))(SETQC(MAKEARRAY8'ELEMENTTYPE'BYTE'DISPLACEDTOA'DISPLACEDINDEXOFFSET51)ThusBandCsharetheirdataportion;thesecondelementofC,withindex1,isthebyteobtainedbyconcateningthebitswithindices67through74ofB.NotethatelementtypespecificationofBYTEisequivalenttothatinthefirstexampleof(MOD256).Compatibililtynote:Formulti-dimensionarrays,bothLispMachineLispandFORTRANstoreincolumn-majororder;MacLispstoresarraysinrow-majororder.A"row"isthecollectionofallelementsobtainedbyholdingallbutthelastindexconstant,andcyclingthroughthatindexinorderfrom0toitslimit.[Thispackagegenerallystoresinrow-majororder,buttheremaybeocasional"gaps"intheindex-sequencingiftheALIGNMENToptionsisused.Seebelowforadescriptionofthenon-CommonLispoptionALIGNMENT.]AccessingandChangingtheElementsofanArrayThemainprimitivetoaccesstheelementsofanarrayiscalledAREF(for"ArrayREFerenceofelement").(AREF...{subscripts}...)Thisreturnstheelementofspecifiedbythesubscripts(whicharealltheremainingargumentsafter),andeachsubscriptmustbeanon-negativeintegerlessthanthecorrespondingarraydimension.[ThemainprimitivetochangethecontentsofanarrayiscalledASET(for"ArraySETvalueofelement"),modeledaftertheMITLispMachinename.Ultimately,ASETwilloperatesoastotranslateintothesamecodethatSETFwouldhaveproducedthusInterlispusersneednotfearthatsuchcodewon'trunona"by-the-book"CommonLispimplementation.(ASET...{subscripts}...)Changesthecontentsoftheelementofaccessedby(AREF...{subscripts}...)tobe.][[CommonLispdoesnotrequireseparatenamesfortheupdatefunctions;updatingmayalwaysbespecifiedbytheSETFconstruct,whichtakesanaccessexpressionanda"newvalue"muchthewayInterlisp'sCHANGEdoes.Asof28-Sep-83,thereisnochangetranentryforAREF,butitisexpectedtobeaddedsomeday.]]InformationalFunctions(ARRAYELEMENTTYPE)Returnsatypespecifierforthesetofobjectsthatcanbestoredin.Thissetmaybelargerthanthesetrequestedwhenwascreated;thatis,(ARRAYELEMENTTYPE(MAKEARRAY5'ELEMENTTYPE'(MOD8)))couldbe(MOD8),orBYTE,or(MOD256),etc.,orevenPOINTER.[[asof28-Sep-83,onlythetypesenumeratedaboveunderMAKEARRAYaresupported;thereisno"coercionupwards"inordertofindatype-specifierwhichcouldholdtheelementsofsomenon-enumeratedtype.RememberalsothattheInterlisp-Dversionsupports(MODn)forallintegraln.]](ARRAYRANK)Returnsthenumberofdimensions(axes)of;toparalleltheindexingrange,thisisazero-originnumberandthuswillbeanon-negative c8 b6q oFyP'Z1d;#E$'x)+.6b6 ` oFyP'Z1d;#E$'x)+0` _ oF -Y/ _ ^. oFP ;! ,2c3:3@^. \ oFP ;! ,11\ [~ oFyP'Z1d; ! ,-Y// [~ Z& oFyP'Z1d; !46Z& X oFy'1;#E'x/2c8D>ADH9H?X Wv oFd!)&+ 59=NAH9JJWv V oF1;$(O/3: >AEH9H?V T oF 1"n%*148D=N>%>+T Sn Sn R -Y48DEIIR P1 $)06GbGbP OfOf N ' #E&.058D>BXEH?N L'&-Y169>%BXDFIL K^d%+.06+A @ @ ?FFyd#E&.003:8D:@D ?F =d (U= < < ;> $(O),;> 9 oFy1#E%,47m: DII9 8Fd%*3:6:C/GbII8 76 ;"n&) 5: C576 5 5 4P;$'x/149;AEFI4 3.  %,148D%BXFJJ0~ /& 'Z $ -Y9/& - oFP #E& 145- ,v yd#E),3::=N=T,v + oFPd (O+,+ ) F ) (n (n ' d$+047m=N FF' %y;&)&,0 9>DFF% $f d#E)&-Y04 >%DH?$f # o 1; #E ,149=N?BXI# ! o j! ^ ^    oFyP'Z1 'x/  V V    oF#E&)-Y/6:>%@FII NyP; &*.019>%DH9H?N y  oFd &(O 3:8D; Fy!$(O-Y2c49?F  "n'x 05:C/FF  '1;&.0058D% JJ >1$&* 7m y #E*/148D?C5 6 ' 6 oFZ; )/2c9@@ . . q?[integer.(ARRAYDIMENSION)Returnsthelengthofdimensionnumberof[whichmaybeanykindofarray,i.e.,anyinstanceofthe\CMLARRAYdatatype];shouldbeanon-negativeintegerlessthantherankof.(ARRAYDIMENSIONS)Returnsalistwhoseelementsarethedimensionsof.[Thesecondargument,,isnotaCommonLispargument--itisprovidedinInterlispsothatonemayspecifytheNOCOPYoption.Defaultactionistoreturnacopyoftheinternaldimensionslist.](ARRAYTOTALSIZE)Returnsthetotalnumberofelementsin,calculatedastheproductofallthedimensions.Roughlyequivalentto(APPLY'TIMES(ARRAYDIMENSIONS))Notethatthetotalsizeofazero-dimensionalarrayis1.[Thesecondargument,,isnotaCommonLispargument--itisprovidedinInterlispinordertofindouthowmuchspaceisactuallyoccupiedbythearray,includinganygapscausedbytheALIGNMENToption.](ARRAYINBOUNDSP...{subscripts}...)Thispredicatecheckswhetherthesubscriptsarealllegalsubscriptsforandistrueiftheyare;otherwiseitisfalse.Thesubscriptsmustbeintegers.Thenumberofsubscriptssuppliedmustequaltherankofthearray.E.g.,ifHAisathree-dimensionalarray,then(ARRAYINBOUNDSPHA42562)makesthechecksuchthat(AREFHA42562)willnotcauseanillegalsubscripterror.(ARRAYROWMAJORINDEX...{subscripts}...)Thisfunctiontakesanarrayandvalidsubscriptsforthearray,andreturnsasinglenon-negativeintegerlessthanthetotalsizeofthearraythatidentifiestheaccessedelementintherow-majororderingoftheelements.Thenumberofsubscriptssuppliedmustequaltherankofthearry.Eachsubscriptmustbeanon-negativeintegerlessthanthecorrespondingarraydimension.Foraone-dimensionalarray,theresultofthisfunctionalwaysequalsthesuppliedsubscript.[However,iftheALIGNMENToptionisusedforamulti-dimensionalarrayinInterlisp-D,thenthemaximumlinearizedindexwillexceedthevaluereturnedbyARRAYTOTALSIZE.Insuchacase,thevaluereturnedby(ARRAYTOTALSIZET)willbethefieldsizeperelementtimesoneplusthemaximumlinearizedindex.Thequantity(fetch(CMLARRAYCMLIMAX)of)willalwaysbethismaximumlinearizedindex.]ChangingtheDimensionsofanArray(ADJUSTARRAY)Takesanarray,andalistofdimensionsjustaswithMAKEARRAY;thenumberofdimensionsspecifiedbymustequaltherankof.Returns,whosecomponentshavebeenupdatedtoconformtothenewspecifications(butifthenewdimensionsrequiremorespaceintheblockdataarea,thiswillcauseacopyingintoanewlyallocatedblock,andwillbeDISPLACEDTOtothisnewblock.)[[NoneofthekeywordoptionsmentionedintheCommonLispmanualaresupported c8 b6qb6 ` ` _Z *_ ^. oFZ; )&/ :=NDI^. \F'Z %)&03:6> Gh\ [~  +2c6:>%BXDD[~ Z&yZ& X X Wv1 *Wv V oF'x*.0 7m9ABXC/FV T1 $'x*, 5=N?BXDDT SnySn R oZ#E)-Y3:9:AGbIIR P oP1& /4P Of Of NZ ),N L oFZd#E%-Y/7m @C/FFL K^K^ J o' ;% /11J H oF'(O/H GVP"n$2c7m9%EGhE DPd!$(O,14;C/EH?D CN1 &)&,4;CN A A @Z"n -Y01@ ?F oFy 'x* 47m:? II?F =FZ!%)*3:58D>%>BXBX= < '-< ;>;$& /7m;@DH9JJ;> 9F'd"n$3:9=N=T9 8 oF;"n%%8 76PZ %(O),/47mEE76 5P`5 4 4 3."n% 0443. 1 oFy!&)/ 8D;>DGh1 0~P1 $*/3:6;?BXEJJ0~ /& Z#E),/8D?BXEE/& -- ,vF' 'x+048D:>%C/DGh,v +P &-Y159 DI+ ) 'Z'x-Y069=NDI) (n' $%.004%C/FF$f ### !y"n)&+/2c5:>BXH?! ^P! *012c5<} ^  oF'$&-_ "n +2c3:3@ V V     N N  oFyP; 'x),0   F *F  oFP $'x 047m; DGh P $'x49>%AEGh >yP!& /48D>AGh>  o' $'x*.0 7m>%BXGbI FPd!%*,3:7m9>%FF 6 6 F1 %(O,/5 Pd$,/2c ;ADD .. q?[asof28-Sep-83.]]ExtensionstotheInterlispCommonLispArrayFunctionsAlthoughthefollowingfacilitiesaren'tspecifiedbythe"ExcelsiorEdition",theymaybequiteusefulinInterlisp-Dsystemsprogramming:*)Filepkgcom:CMLARRAYSissimilartotheBITMAPScom--namely(CMLARRAYS...)willsaveandrestorethevalueofeachglobalvariable,assumingitholdsaCMLARRAY.*)AdditionalELEMENTTYPEvaluesforMAKEARRAY:-XPOINTERislikePOINTER,exceptthattheentriesaren'treferencecountedforthegarbagecollector;beware,beware!-DISPLACEDTOBASEislikeDISPLACEDTOexceptitsvalueisjustarandompointer/address,ratherthananotherCMLARRAY.Thisway,onecanusetheCommonLisparrayfunctionstoaccesspartsofInterlisp-D'smemorysuchasthescreenbitmap.-ALIGNMENTisformulti-dimensionalarrays;eachrowmayberequiredtobeginamultipleofsomeinteger,withnullsorzerosfillinganyspacebetween"rows".Forexample,itmightbethatabitmaparraymusthavetherasterscansbeginningonawordboundary;sincethereare16bits/word,thenanalignmentof16wouldbeused.*)FunctionsInterfaceingtoLISTPs:(LISTARRAY)Thesecondandthirdargumentsareoptional,andhavemeaningsimilartothecorrespondingargumentstoSUBSTRING,butnegativeindiciesaren'tallowed.Elementsareselectedfromtheinrow-majororder,andCONS'supintoalist.(FILLARRAY)SimilartoLISTARRAY,exceptthattheelementsofthearestoredintothecorrespondingpartsofthe.Asaconvenience,ifisn'taLISTP,thenitisconvertedinto(LIST);furthermore,iftherearen'tenoughelementsintofillouttherangespecifiedbyand,thenthelastelementofisrepeateduntilfinished.Thus,forexample,onecouldfillanarraywithasinglevaluebyaconstructlike(FILLARRAYSOMEARRAY(LISTTHISVAL))*)"Fast"accessingfunctions:(PAREF...{subscripts}...)(NAREF...{subscripts}...)(LAREF...{subscripts}...)(16AREF...{subscripts}...)(8AREF...{subscripts}...)(4AREF...{subscripts}...)(1AREF...{subscripts}...)TheseareessentiallythesameasAREF,buthaveaconsequencethat,forPAREF,mustbeaPOINTERorTarray;andcorrespondingly,forNAREFaFIXNUMarray,forLAREFaFLONUMarray,for16AREFaDOUBLEBYTEor(MOD65536)array,for8AREFaBYTEor(MOD256) c8 b6q o b6 ` ` _ _ ^. ^. \ oF 1'x 05=T\ [~ [~ Z&y; 'x-Y58D; DDZ& XX Wvy"n ,3: =TWv V V T F1"n#E%,/2c9D T Sn oF 1$*,.0/0Sn R oFy $)&+/5=NDDR PP Of oFOf N N L F  !'x* 3@L K^ oFP';"n)/47m>%DDK^ JJ H oFyP'#E) 3:4:@H GV oFP'!$(O 2c8D;@B^GV E oFyP'!/59@H?E D oFyP';!$(O+ 49BXDID CN oFyP'd )&/3:59>DCN A oFP'"n18D9=N@DFFA @ oFyP'd$&.004%@EH9H9= <#< ;> oFyP'd"n&*.049ADEI;> 9 oFyP';$)&,/ 8DGbII9 8 8 76 oFyP'd!76 5 5 4 F !$*4 3. oF 1 * 43. 1 oF;#E+/7m:>EE1 0~0~ /& oF' #E+.0 7m:BXI/& - oF'x*2c69@C/C/- ,v,v + oF #E'x)&-_+ ) oF 1% 0 9) (n oFZ $).019;>DH9H?(n ' oF */2c5=N>%@BXBX' % % $f oF' &*-Y/8DC/FJJ ^  oFZ #E*/8D9>%AII FL V oFd"n&(O.03:57m?DD V  oFyP' ;&+3@   N F' $N  oF' )-Y.6  oF' )-Y.6 F oF' )-Y.6F  oF )-Y.6  oF' )-Y.6 > oF' )-Y.6>  oF' )-Y.6 oFP $(O*/3:7m99 DII 6 u 6 oF #E$+.0/59GbI oF"n#E&+-Y3:9...{subscripts}...)(NASET...{subscripts}...)(LASET...{subscripts}...)(16ASET...{subscripts}...)(8ASET...{subscripts}...)(4ASET...{subscripts}...)(1ASET...{subscripts}...)TheseareessentiallythesameasASET,buthaveaconsequencethat,forPASET,mustbeaPOINTERorTarray;andcorrespondingly,forNASETaFIXNUMarray,forLAREFaFLONUMarray,for16ASETaDOUBLEBYTEor(MOD65536)array,for8ASETaBYTEor(MOD256)array,for4ASETaNIBBLEor(MOD16)array,andfor1ASETaBITor(MOD2)array.Furthermore,whencompiled,thesefunctionswillbecompiled"open",withlittleornoerrorchecking,realizingordersofmagnitudespeed-upoverASET;althoughsomecheckingisperformedtoinsurememorysystemintegrity(i.e.thatthewordmodifiedwillactuallybewithinthedatablockofthespecifiedarray),****thereisnocertificationastowhichwordwillbeclobberedshouldthesubscriptsbe"outofrange".AswithAREF,therun-timecodetogglesontheglobalvariableAREFSissyFLG,andwillcallthefunctionASETwhentheflgisnon-NIL.However,onemayomiteventhesesimplechecksfor"allout,noholdsbarred"codebyprefixinga\tothesenames(e.g.\PASET...).Ifyouusethisoption,thereisnoguaranteeofmemoryintegrity,andlikelynoonewillwanttolistentoreportsofany"system"bugsencounteredwhilesuch"unsafe"optionswerebeingexercised. c8 b6q oF &)&-Y069=NBXDGbIb6 ` oFP` _ oF 1d%*3:7m9AH9H9_ ^.#^. \ oFZ(O069AII\ [~#[~ Z& oFd %(O* 69;?DFFZ& X#X Wv oF';$'x 03:7m9@ABXDH9IWv V oF 1$(O/69 ;> 9 oFZ%)&,13:69=N?EFF9 8 oF 1d%*3:7m9AH9H98 76#76 5 oFZ(O069AII5 4L4 3. oFd!)&+46DH9H91 0~L0~ /& oF#E).03:58D DFII/& - oF1d(O.01 :=NADJKK- ,v ,v + oF'1$(O/14:BXBX+ ) ) (n oFP&*/2c58D?(n ' oF1 $)/59=NADII' % oFd%'x)&+05:@EFH?% $f oFP!&)&+46LIBRARY>CMLARRAY.TTY;1JONL.PA 9-May-84 03:14:05