PINFO.PX?? PINFO Copyright (C) 1980 Rational Data Systems  Cؾȡ8ٛٛٛ á5Lˡٚ&ښٟá 0  ݢ ݢ ݢٚݢǀݢݣ ܞ#ݢݣ ݣ ݣ !!h  r ޢ ޢٚޢޢݞ#AAZ PAZȡ) AZAޢܕAáQAZ ZAZȡ) AZAޢܕQá!/i 5&!"AL ۢ%"ڞ#!2 AAZHAZIAZPAZQAZXAZYAZZAZ ֲscFCOM.CMֲsCOM.CMֲsc¾˲¾˄bcš:֦(F)COM.CM file is too long.!ֲsc sƀsCLIFILE y&¾ˡ¾ܿȡʀ¾AZAZȡ1ʀ"AZAʀáʀá¾ásDT40  ؟ ٹ  6!ۦWrong operating system.lÄ# Я6 ٨  ̀ȡ)ʀRʀ̀ʀʀ ̀ʀʀáʀ(d  ɡ 0!إ! $ڥ! ٹ֦January!֦May!֦ September!֦February!֦June!֦October!֦March!E֦July!s֦November!]֦April!J֦August!6֦December!  Ky@o4 ! 6 Dإ! :!:!2Ɓ!Ɓ_Ɓ!OUTPUT4rǯ`4CODE֥á,֥!֦No program name.!ʁc?;֥!֦PX PINFO program[.PU] [listing]!ʁȡ@ʁЫ蛾蛥蛾aAʁáɡ ́ƁcDƁ.PXfƁc֥ƁƁ.PX֥ƁƁ.PU ́ƁcƁ.PXfƁcˡ ֥!֥!֥4֥4֥! !ʁʁ !ʁ֦.==============================================ƁДƁʁ֥!ŕ<́0֦́ Compiled:! !'֦AOS.! ֦RDOS.! 1֧.!֧֥! !ʁ ֧֥! !ʁ S֧֥!֥!r 2֦Separately compiled subprogram.!ʁ֦)Contains unresolved assembler references.!ʁ򧁤Ĺ֦ PLINKed to:!ʁ ʁʁ !ʁ ֧$꧁֥! !ʁ ֧֥!;֦No assembler references.!ʁ5 ֦(Contains unresolved external references.!ʁs֦$External modules have been bound in.!ʁ:֦QNo external references.!ʁ4o֥!֦Segment ! ʁBytesʁBlockʁ֦------- ! ʁ-----ʁ-----ʁȡ_ʁЫˡ?֧@! ʁ ʁ ʁʁáˡ3֥!֦ Overlay size !ʁ ʁƁ!4<J ^ T z D INTERPOK.PX?? 8RINTERPOK Copyright (C) 1980 Rational Data Systems  8% ~?OUTPUT֥֦Interpreter OKʀ J, ?o)OUTPUT֥֦Interpreter OKʀ JPASCALO.PX?? b|? /!COMPILEROPSYSINICOMPINITSHOWERROCOMPFINIDECSEGMEBODSEGME Copyright (C) 1980 Rational Data Systems 4  H  ݢ ݢٚݢǀݢݣ ޢ ܞ#ݢݣ ݣ ݣ @!l֥֥&PX PASCAL[O][switches] sourcefile[.PA]֥֥switch meaning֥------ -------֥4!/A analysis to @OUTPUT֥/A=afile analysis to afile֥!/C conform to standard֥/E=efile errors to efile֥/L listing to @LIST֥/L=lfile listing to lfile֥!/N no codefile created֥"/S swap compiler phases֥"/V verbosity to @OUTPUT֥> ۢۢۢNڞ#!2ئ abcdefghi@bl ȡ4ݏ0ݤ ݏ0ݤ á.__?pidD.TMPH@0d 0 0 * ڪ@& ( ())*) )ٚ)ǀ)))))ǀ)) ** (#*<*''á)) ) ''š ) @ۦ@&!& VWƦAOSVP0-ihȡiCCCCChá  ? N,S0C6FFG1Gá"G¾G¾0FFAWEE֥u֥uihȡ)iDDDDDEDháL"S" "@LIST@֥"֥ihȡ(iDD*eDDDDháE_W"EE֥y֥yihȡ)iDDDDDEDháVP ֥վš0֥hվh.PA֥hվh@hh@h.PACh@֥w֥w,֥֥֥ kئ abcdefghi@ ȡ4܏0ܤ ܏0ܤ á$$M$@.WKC@FA@BA@& ֥֥0PX PASCAL[O][switches] sourcefile[.PA] [options]֥֥switch meaning֥------ -------֥!/+C conform to standard֥&/L listing to sourcefile.LS֥!/N no codefile created֥"/S swap compiler phases֥%/V verbosity to $TTO/$TTO1֥֥o/ption meaning֥------ -------֥afile/A analysis to afile֥efile/E errors to efile֥lfile/L listing to lfile֥p  ۢ%"#/!2 AZȡ,rA ۡܚá,H ت֥֥󮀂ʀ֥󮀂ʀ :ت֥֥ȡ0ʀ̀ʀ̀ʀʀʀʀá+ Z VW3ƦRDOSVP0-ȡؤá A H I P Q X Y ZֲFCOM.CMֲCOM.CMֲ~ ~>¾˲~¾˄Fcš ֦(F)COM.CM file is too long.ֲ~ j5 z~¾ˡ)²~¾¶ȡy~¾1  ȡ1rAáá~¾áɡ ? ղ@֥վš0֥վ.PA֥վ@ZT#pȡ}ز =á.¾¾0"֦Invalid local switch.֥u֥uȡ"٤٤á֥y֥yȡ"٤٤áZ}rLA֦Duplicate listing files.ֲAL Xáj 1rLA@.LSCrNA,rSA0rCA6rVAPب"ƀƁ ƀCLIFILE  ́!Ɓ!@Ɓ!.PACƁ!@֥w֥w,֥ ֥֥ƀB 0 ؾȡ3¾ ¾ á1 H$ #ȡ$ؤ#á<<<  2֥##Wrong operating system.# q$jvV ~PN  j(&iAA4ؤAND 4ؤ'4ؤ 4ؤARRAY 4ؤ,4ؤ BA4ؤBEGIN 4ؤ4ؤ CA4ؤCASE 4ؤ4ؤ 4ؤCONST 4ؤ4ؤ DA4ؤDIV 4ؤ'4ؤ 4ؤDO 4ؤ4ؤ 4ؤDOWNTO 4ؤ4ؤ EA4ؤELSE 4ؤ 4ؤ 4ؤEND 4ؤ 4ؤ FAF4ؤFILE 4ؤ.4ؤ 4ؤFOR 4ؤ4ؤ 4ؤFUNCTION4ؤ 4ؤ GA4ؤGOTO  4ؤ4ؤ HAIA4ؤIF 4ؤ4ؤ 4ؤIN 4ؤ)4ؤ JAKALA4ؤLABEL 4ؤ4ؤ MA4ؤMOD 4ؤ'4ؤ NA4ؤNOT 4ؤ&4ؤ OA4ؤOF 4ؤ 4ؤ 4ؤOR 4ؤ(4ؤ PA4ؤPACKED 4ؤ+4ؤ 4ؤPROCEDUR4ؤ4ؤ 4ؤPROGRAM 4ؤ!4ؤ QARA4ؤRECORD 4ؤ-4ؤ 4ؤREPEAT 4ؤ4ؤ SA6,4ؤSEGMENT 4ؤ04ؤ 4ؤSET 4ؤ*4ؤ 6,4ؤSTRING 4ؤ34ؤ TA4ؤTHEN 4ؤ 4ؤ 4ؤTO 4ؤ4ؤ 4ؤTYPE 4ؤ4ؤ UA4ؤUNTIL 4ؤ 4ؤ VA4ؤVAR 4ؤ4ؤ WA4ؤWHILE 4ؤ4ؤ 4ؤWITH 4ؤ4ؤ XAYAZAZAeeآآddآآccآآbbآآآ``&آآaa>Cآآc_ _آآآآeآ آ آcآ ۦINTEGER ۢ eۢ ۦREAL ۢ dۢ ۦCHAR ۢ cۢ ۦBOOLEAN ۢ 뺂bۢ ۦTEXT ۢ aۢ ۢۦMAXINT ۢۢ eȡV ܢ báܦFALSE ܦTRUE ܢؚܢښܢábٚ ۦNIL ۢ `ۢۢۢum mئ آ آl lئ آ آآآk kئ آ آآآآj jئ آ آآآiiئ آ آآآ آآآآآآOdآhhئ آ آآآ آآآآآآآXƀ `6ƀƀ1READ READLN WRITE WRITELN EOF EOL9N PRED SUCC  ORD  SQR  ABS  NEW  FILETITLPURGE CONCAT LENGTH DATE EOLCHAR FSUBSTR INDEX MOVELEFTMOVERIGHEXIT IDSEARCHTREESEARTIME FILLCHARAPPEND REWRITE PAGE CLOSE  }[SEEK !RESET "GET #PUT $SCAN %SIZEOF &PACK 'UNPACK (ODD )CHR )ȡ}ʀٳ0ƀRڡ  ̀ʀʀʀ ڡ ʀʀʀʀٚʀáxPWROFTEN?$MEMAVAIL?ROUND ?TRUNC ?SIN ?COS ?LOG ?ARCTAN ? LN ?  EXP ?  SQRT ?  MARK ?   RELEASE ? !SYSCALL ?#6 džpMLܠMONȡOܹ OO eOde~ OO dOeadZ OO `O< OO `O$nfM T:M[ݡ  OOOO?ݡO.O؟ˡآO ښOؚNápO8[Ys5432fUTS1QONWGrqFE.DA?>=+*¾ë90;0;d 0; "0; ȡ.ܤޢޢ ápǂCopyright (C)  Rational Data Systems(Py^4|t t  ɡ ddڏ ۂق܏B خ'Rational Data Systems Pascal Compiler [خrelease ٥. . ɡخ0خ Lخ , overlaidخ] خline seg procخ==== === ====gخA :٣  ٣  ڥt| ت ֶ ,ֶ  /  6خ"ۥ"ۦ cfompiled on ۲ ۧX ۲  ۧ; ۦ at R šخR :خR :I šخI :خ0ۧI :@ š خ@ خ0ۧ@ -6,0šخ վۦusing the optionšخs- ֦Byteswap6֦ Conformance, ֦Nocode0 ֦Swappingخ.  ;HX qSundayxMondayiTuesdayY WednesdayGThursday6Friday'Saturday_Ŭyl_QA2%H January February March April May June Julyr Augustc SeptemberQ OctoberA November0 December ~sh[K=.1֥Z ֥ ֥ line seg proc off nst ֥u ֥u ֥֥֥ ֥  ֥y ֥y  &] K;HX%RI@ ,֥Z n BMC ggPROGRAM   x declarations !áwátá>á"Ś˫á)áaF6;3srEXTERNALt֥ ֥u  o og ns  X^tLn\ Z xAخError Message Summaryخ===== ======= =======Xخ ٲ@$@ ERMSGFIL PASCAL.ERP֥֥u֥y֥;a`ȡtaإ Z P֥֥u֥y֥`áva <ZخSegment Numberڦ Segment Nameڦ Size (Bytes)ȡ>٤ˡ"خ ۢ á;ت@&@$%$á%$¾&$$%%$ɡ6$v$6@٦@OT~٪@$$@$ A$B6$ت@٪@F EEHHǀHGH<á HHHE#HGHǀH$<á HHHE#F!F#~֥֥A ۦ lines#֥u֥uA ۦ linesP#֥֥A ۦ lines֥uP֥ Mȡ ڤ áȡ8ڤȡܢ¾ ááȡ áʾȡ֥¾ áʾ.ȡ á!ȡ á֧; ֧H ֧X ֧R ֧I ֧@ ֧<   ֧F ȡz3 á观+  *  ֧Z ɡ 槂,g֥ ZY!  ֥<֥3+* եվU եվX֥ե֥{0Wwp2 Ȅ Gǀ  0ȡ ǀ  (ǀ &á+ ȡڢ¾ áBǀ 3áxáÄەݚš) ۮڮȡ^# áá cس0$@ L'Ȅق 4JȄق #Ȅق  @MÍǀ Jسášá ǀ :&n^ǀ Ȅ =á&ݧWWcáWWX '9á ݢښ  bˡ! ٢٢`m ۢˡ iΥXۢ뚧76`mɡ/ġ 9!٫¾¾<j ˡd˄ `ádá33Z3á' 6n-#&: <> ;% V˄ $ ˡ[Eá+ 8n;ˡ.';!=? M3!lˡnV&-M.á% 2n$ˡ"Ǿ6  ^K   W|      á ' 6n   á   !ná '6   8  Í Ä  áP   A ˡǖ   Eի ?ˡń 弄 ;֥ 弄 á ݟˡˡ NJ ˡ ˡqݟˡL< D   ˡ  š}Nj   ˡL3á DB  @$ń ˡáZáˡˡ nj áˡ  á ǘ   $ , $ 8  Í Ä  áP   ˡń  ˡÍ~á    OaáV  O >>  á#ˡń Ǎ `E ޭ/162 #:á $k0š ˡɡ % áVߣ á ߣ ˡ+ öÄ.á  xȡ ááٟá~ֲ"ٟ˄ڟˡ٣áȡqcÄÄǀ&  _  á 6çDeڧd d CÄ,'Pˡ ݕˡǎګ Há=ڣɡǿágá ˡǚٟˡˡá(ٟˡߣ á ߣ *ߣ á Nߣ ߣ á Sߣ  Mߣ ߣ  Rrt 42ܣ áܣ ޳``V޳`á޳@t ޳" ޹#$)*1ˡ ġe ˡ%eádá e ˡ%eádá e  >,e +á Oe   ȡD  ˡ eˡáǤ á ˡ eˡá% ,-ˡ eˡCPb Dˡ eˡDc Z)RCExutq]ZW*,)02*6Hߡá2vYeá d eá اd*3ddÍ3g>4弄: 弄^ܣá 'ܣá  ˡá ꧂e ꧂d ác   _   á*7bˍ ˡbˡ LJ    á ˡˡ Lj  Ȅ  #áH   lj ޡȄ   ޡ   ߡ  ˫쓡á ߡ1"ppp  ppp U&N "$=&(*,.02468:<>@BDHud@!(Z77'á   7 ܟ˄ 4ܧeeÄ/ܧddÄ   fe3ܧddÄ  pܧeeÄ  RܧeeÄ  4ܧbbÄ    .lP  $B6(`á   6eá á %dáJK á  ˡ  (á   6 ܟ˄ 4ܧeeÄ/ܧddÄ  y4ܧeeÄ/ܧddÄ  0ܧbbÄ    u.  5ˡ ەˡٚ,8JɡJ5)ácÍÄˡȡ   5cÍÄ ˡȡ ܟ˄ á+á   ǂ ˡ4 8  P֥ 8   ܧdá  ǃ DŽ  vUcÄ Aܧc1R9         ˡ   4  Dž 0 <5 F4 <1 20 (7 /  D<*6$b   ]nֲ@á ֲ30:ֲ9弄˫쓡 á^:< D=  š á[ á   Ǜ؟ˡd ǏֲAáaֲˡGˡ9+ ؟ˡçD. ǑǻֲǀoáHDֲ@ˡGˡ9+ ؟ˡçD.  7ֲ@á6! 6 9   áP ==ֲ9==  6 C!  @BJɡJ"ád ݤˡ ݤ,ޟˡ* á ǥ   á0H弄 á&|ܣá :I߹(=;?6B1;,>'@"AC0/0/ !&Il# @97D W؟á!t??----??x??----?? txbody أáá ˡ ˡákšY2 62 *ˡ Qޕ(Z á A> ܟˡܢ  nçş˄  ˡ V2 2 >aánˡXşáKŢ;INPUT Я OUTPUT Я OV2 ǀ& ¾ á ȡ¾ áO VO ˡV2 O ˡV2 Oֲ9弄˫쓡 á   ˡ! Vb2 O á-- ܟˡ$`mˡǨާW š륄Xߤ ؟á ֧ ֧  ?š7ٕ ֧s ֧n 88Z땧?ɡA?낫? !as?.tv#"*20 5Q=֥  á֧o蓼o ܓ-o áo 蓼o 弄ܓo á`<B˧3nÄb. =ݧoÍ $#~"! ̅ L  4`؄  6p 4^ *!$!l!DҖـڀɄńڂ0á ڀـܡ ڏ.弄弄á ˡ á=   ߚ   @  !"F"ˡߢ ߢ á,á  án  ǔ#á ߢ ˡ ߟˡvߢ~  ޚ #áǺ ߢ ˡkߟˡ7á-ˡ&dá$š fߚGܟ$q1 nٟ˶k٧e٧d8 1)ġ+á@š4 ɡڸsu2N @š  ڢ ڢڢڢ/ ł ڢڢ ˡ   ٶ˄/bڣ %ڣ áڢڣ ڣ Ȅ ڢڢ٢٢٢á   ٢ ٢٢٢. . á! ֶ á8áX  ˡ;ȡ/d  ءֶ n%ֲ&ֲ ł áW   ֲ ˡ o  ٢٢ ٢٢   ˫쓡áBJ9áXá ֲ(  š  öń ˡ%      ł  á%Nֲ-˫쓡  썡 jjS(   ááA    ߚ  A ˫쓡á. ˡ álˡ n á) Ǚ ޟˡ ߚ á ܟ+084p   آآál. . á+  إآ  آfآ f# ˡ ˡ    弄 弄弄á +á&弄Y,áá    ߚ  t ޟˡ7ȡ(ާdá mާeá Ǖ ޚ ˫쓡á[ áT  ˡ á "ȡ   ˡ ;&t˂ KF@-  GHI ?š J ȡ '  ߟá-á ɡ   ł   ߚ w  á_*á áU ߟˡ%š ߧdߧeÍr  ߚߟˡ4 ɡTɡ ǩ.W   á V ߚߟˡ!á6 >3á|ˡǴlߧeá8ō   _ ǀá\ Jܟá139;=?P$a/ "áY ؟{ٓˡ Ǧٓ!ۢۢۢڢؚ Bֲ ˫쓡ác ˡֲá ۥۢ ۢۢ) Äֲآ ٚآá%?ֲb ˡ"ֲá ݥݢ ݢ) ÄǗֲڢ ۚfٟˡ+گ٧fˡآfá%Kֲ>rvfˡ fx á/ ݢݥݢٚݢ ݢn#Lֲ˫쓡á1ֲٟˡ=ݢ ۚݢá ۟ˡb7áݢ  ؚá%Mֲ|弄fˡ f15 @ ֲáw@Oֲ!@á  áK   á ߚn  Pֲ.˫쓡 áNá@  ˡ á áy ȡ  / ޟˡ"    ˡ  (Q(á)@Rֲ!á+C+ݢꚟ ˡ< ޚáˡš   ޚܟN v, r   ns.`֥A :ڣ  ڣ  ڣ ȡ֥. á֥`֥uA :ڣ  ڣ  ڣ ȡ֥u. Bá֥u) 0áR3N !qrr8 ?Y ꫂQ5á֥ ˡFáÄ Äá Ä ÄǠáb^  nr횧3 Ä Ät#qšqqrǕárrá}ˡDˡ2    š ˡ& ˡU  r" is sn nɡ nn ɡ7 á áá|z ˡ x ˡˡ ֲ {ádåFORWARD ЯBǡápDֲASSEMBLEЯ61áS ֲ+ MˡVȡ¾ áˡ   ֧n 88Z땧?ɡB?낫?as{?!åEXTERNALЯ6áǯֲ* Mˡ<ȡ¾ á ֧n 88Z땧?ɡ?낫?as?Q !P tx declarations   o o o VV2\áZL á! ߟá   á ߢߚGteޟˡޢ  4 ޟˡ  6ˡٚښٟá, ޢޢ aޢnޢ֧aޢ  ݚRINPUT +INPUT ֦INPUT OUTPUT OUTPUT ֦OUTPUT ֥؟ˡ آ0֥+202á3nÄL á á á3nÄMTnç3 ˡ弄܄Q z@z V D x L<nV2f0`20 . oá 0Nǀۡ (áٟڟÍˡ'á á ٧`ڧ`ÍxlA/Í  ÄÄ}pf 弄2弄%á?ác( ާ_ ޢޢ ǂ  ݥ (`á pr ád   ˡAާeá -ާdá" á   iT"á áeݥ5$á" á dݥj>ޚ  v ڟá #g ؚ8؞áeá ؞á٢ؚ٢ ؚآ آ<dMš 7ؿ(  Mš 79-áڿٿ ٿڿX á "اcá=ˡ > 4 15C9#֥9/41Bw/֥šۢ|¾Wádۢ|¾/¾پۢ|¾ɡᚹۢ|¾ɡg ؂?š ؂"AAP ž 5ꫂQ뫂Q4  ''¾0ɥ¾9ō ¾.áS¾.ˡG¾nZ¾ ¾ \¾-á  ¾+á¾ ɡáb߮ ȡJ å¾0 ń ō  ¾0á"% ܫ߮ ȡ% ¾0á ޮġ+¾0ޕ$á ݮ ȡ ¾0 á á $  $$ f8Fj$0ȥ¾ å¾ Íȡ /¾#$  쥀¾*á 쥀¾.á #쥀¾=á ' ( ( ' ) ¾   =>) )¾=á  '{{w "$&(*,.02ZT2=?ACEGIKMOQSUWY[]_acegikmolrt}.}/á)[  ,ۡ ۡǀ2ٟˡá cÄ"JɡJ4P֥A  ڧs ڧQ 5 ֥ ֥= lš5sꥅ֥l֥֥ml ֥ á֥֥4֥ERROR% ž ٥ɡE֥ٕȡ"ٕáq֥yError at line ڧA ڦi in ڥxڦ of ڥt:֥y ڥ֥y%q֥uError at line ڧA ڦ in ڥxڦ of ڥt:֥u ڥ֥u%q֥Error at line ڧA ڦ in Eڥxڦ of ڥt:֥ ڥ֥% ġI ۤڟˡ,áڣk.á.Jhm9k,jlihښ۫^ ؟áٟ ٥ˡٟ  ? ؾš ¾ؾń/ ƀؾƀ ؾ¾áؾ šeƀƀ֦ ƀ6ƀƀؾٕƀn Yš¥9YٞقYقYY؍, ,֥YZZ9 ٕán|ƆƇ9ƆWORKCODEƈ9ƈwƈ9INCLFI*LEƉwƉƉwWORKSYMƄƅ1ƄOVTPVTƅuƅƅuANALFILEƅƆ5ƅLPƆyƆƆyERRFILE:֥OUTPUT֥֥ 3 ˡO ˡAA :L`֥Ɔƈ9ƉwƄƅuƅƆyG6 <~102 R/,+-*). :`3H H ` ('&6%FN'9-á ٕؕقɡMٮȡۂáخȡ#ۂɡۂá0ٮȡ#ەɡۂá$Xv ? ˡ ō  á c ˡȡ ܟ˄eád d \ cá LˡC  c˄%P ˡǁ6˄@ܫ ܫ  oDg ZS "cá)*ܣQ (%(ǒLxP_M!  TcÄFá:á5cá+pܢܢ󿧂p _ ˡ_ zֲ"ˡ)áˡááֲ"ٟáǞfˡǢXˡRاdÍǟ=-؟ˡá  A 3Pá`!á g؟ˡأ áأ أ fz8V2ֲ"ɡO˫쓡2ɡ šث _ ٚ f{ֲ2áǶֲ ˡ eˡáǷֲ  ˡ eˡO2٣ɡ ٣šث٫ 9láˡe ,:ֲ ˡ ˡ 1+$  "/Olֲ"ˡ ˡCá#ֲ  eˡO OO #Kֲ"ˡ ˡˡǪֲ ON=.ءINPUT OUTPUT  .ݟáء3caˡء4Hޣá ޣ á %ޣ 2nޣ ޣ ޣ á 'ޣ 6nޣ ޣ 3ֲ ˡˡ aˡOJˡgeO VdOEcO4'Oˡdz áDzt!*á1V6ֲ"!8@"lSVֲ" áaááعá: .ֲ"Q!"ǮRá .R!"R! .á[>> ֲ R(ǰ6OǸ X#D Vֲ"áaáOá O>.Oá/V6ֲ"S!&ڡtV.O6R!"١V6O VO $k0á+ֲ&ˡ eˡǹ[ ٧dáGءá,ֲ" ˡ eˡO٧eáءO ٧cáءOn٧báءO!YءOD7ˡ ءֶֶO (&~á#V6ֲ&%&*2'sdá  R8R6R4( Vֲ& áaá?Aáعá, .ֲ&%&' % .(&' .áR>>  ˡń ֲ 6O2} ,)\ Vֲ&aá5á O!.áֲ&%&%.(&'١V6O VO * =ֲ ˡ%ˡ}@a˄($O b ;O b /Oc #+! -+D ֲ ˡ ˡ!  OZ,Dֲ" 8á=ֲ"   ˡv ˡ9f <Xڶ 8ֶ  ٕD ˡـš8.&ֲ" 8ˡBˡ2;#˸ֶ ٕ8v/ء-6BDֶ$ @BP0       y,&á.á>//á?.ߟ ˄ ˡ:8 66I!١666P.ٓ0١6660١#ء;?ء:>9 "-lˡbˡsVdá5GçD%á áp1, ˶á&:<e"ˡ ڤˡ<١9]ٓ<ٓǧ7á ڤ ڤإ ڤ֧nەb ;jֲ á4==ֲ 9== á2 9 ==ֲ9==  >Cֲ  9ٟˡ٧dÍ ǐ á ֲٟˡcUܟˡ# ȡ áǜ   ܚ ޚ ۟áښǓ˫쓡Ká==ֲ9弄==ڟˡ9 ˫쓡 썡 ݟˡv ݚܟá , 9  š   ɡ  ݟá á]ONvwT ? ==ֲ9弄˫쓡== áֲ 5QS l@W ֲ@ áǼ==ֲ9==9 \Aá 'kֲBˡyám ɡ` á ۢۢۢ-8 ۢۢš˫쓡áǽ==ֲ9==ڕٕ C׃JJK]\\ɡ\\š\ \MMMMD M M MMM M M rM cM TMEM6M' uh[NA4L\^7 bDGoˡ 8 rأnso !o o3 o áobf4 ɡ ؚ ؗ ,/: V؟ˡ,٣`٣ á٣ á ٣u : rġ6aؤš֧?낥aؤ ֥aؤ á ֧r 땧?ɡE ?낚?8k ζ¾ ˡť¾Fš¾)å¾*ľ};*ÂC@q |~ئ ؾ¥¾ť¾ ;}Í)å¾*Äk xi@ ٥¾|Ú6!tc H¾-á,٥¾0٥¾0j"¾=áF"!"ۡڍڄٓ  ܡ+-¾R l /6ƀƀ@ (ƀ򥀗¾ƀ ֥[ ƀ ֥P ƀ ֥E P֥ƀ ֥D !~1*1֥9֥9C4/ gCr` m"$&(*,.02468:<>@1DFHJLPR(VX^ڹ ̀̀ʀʀ̀š )ʀ¥¾¾'á̀'ˡʀ̀% ʀʀá ¾-p̀ʀʀʀʀʀp #vپɡ ڮەġ¾ ˡáP X&g:^  0ۂÍ#) 6'g&٪@ɡ̀ʀ'ȡʀ&&&&ʀk&| ɡ̀&dɡ̀̀'ڥ&ʀ&('ڥ&&'ʀ&̀&ʀá'DŽšWخʀ'ƀDŽƀʀخ'ƀDž'DŽƀʀخʀ'ʀ'&J%"ړ@^˄ٹ܂ۂxp+^h$  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfv MANUAL2.10 MANUAL2.10 Update to RDS Pascal Programmer's Manual 21 August 1980 Page 1 This file contains information regarding the RDS Pascal Programmer's Manual. The current edition is 2.10. The previous edition was 2.00. ---------------- The old chapters n5 and 6 have been reorganized into chapters 5, 6, 7 and 8 due to the addition of separate compilation facilities to RDS Pascal. ---------------- The old chapters 7 and 8 have become chapters 9 and 10 respectively. ---------------- In Release 2.10 the f86ollowing changes have been made to the Programmer's Manual and to the file 'MANUAL': new --- 0-2 "Third Edition" added 0-3 A new table of contents 1-10 Added "PACKED ARRAY OF CHAR and STRING Compatibility" 2-3 Restriction on non-local GOT&O removed 2-4 Added "Data Limitations" 3-6 Changes to "Default Filenames in I/O Statements" 4-4 Rangechecking code now generated for CHR, SUCC, PRED 4-11 PASCALO no longer uses a separate 'overlay' (.PO) file 8-2 PINFO has new input file;name rules 8-5 Changes to rangechecking information 9-2 AOS: Compiler may generate .PU instead of .PX 10-2 RDOS/DOS: Compiler may generate .PU instead of .PX B PACK and UNPACK are now intrinsics C Changes to many Compiler error messa/ges D Runtime errors may now show Module #'s, changed "DIVIDEND" to "DIVISOR" in "MOD" error message, added a new message. Index Re-written MANUAL2.10 Update to RDS Pascal Programmer's Manual 21 August 1980 Page 2 The following B} material has not yet been incorporated into the Programmer's Manual: 1. There has been some confusion regarding the differences between 'TEXT' files and 'FILE OF STRING[n]'. A FILE OF STRING[n] is composed of fixed length records, each one being a STRING[n]. Each of these records includes a 'current length' byte as described in the 'Data Representation' section of the manual. A TEXT file is a sequence of CHARs and 'linemarks'. The linemarks permit TEXT files to be read -P and written with READLN and WRITELN respectively. FILE OF STRING[n], being a typed file, can only be referenced using GET, PUT, READ and WRITE. TEXT files are compatible with your operating system's ASCII files which have been created using the standard text editors. FILEs OF STRING[n] are specialized, as are any other typed Pascal files. Examples are the compiler and runtime error files, PASCAL.ER and PASINTERP.ER, which are declared as 'FILE OF STRING[63]'. Each record of these files is exac0tly 64 bytes in length. (Remember the dynamic length byte!) These typed files can be accessed randomly using the RDS extension 'SEEK', whereas TEXT files may only be read or written sequentially. 2. RDS Pascal supports an assembler interface which allows access to features of the host system beyond those supported directly by standard Pascal. One common usage of this facility is to access the host system's I/O calls. However, for many of these calls information about an open file is required -- the channel number, for example. In order to permit users to obtain this information, we have documented below a portion of the 'FIB' (or 'file information block') used in RDS Pascal for all files. If you pass a file as a 'var' parameter,8 you are actually passing a byte pointer to the FIB. We strongly recommend that you not modify any fields within the FIB -- just read them. The interpreter uses the FIB in strange and mysterious ways. You can easily get a program into trouble if you 'innocently' modify a field. MANUAL2.10 Update to RDS Pascal Programmer's Manual 21 August 1980 Page 3 The FIB consists of three major sections: (a) a 6-word 'SYSCALLPREFIX' (see the sections on SYSCALL in the Programmer's Manual), (b) a,*n AOS-style I/O packet, and (c) additional fields used only by the interpreter. Note that the second section (the AOS packet) is even used in the RDOS/DOS implementation to ensure that programs are fully portable between operating systems. The following pseudo-Pascal declaration will assist you in understanding the FIB design: offset fieldname type contents ------ --------- ---- -------- +0: mode: syscalltype; {see 'syscal:_l'} +1: error: boolean; +2: callnum: integer; +3: r0: register; +4: r1: register; +5: r2: register; +6: channel: integer; {i/o channel number} +7: isti: integer; {AOS ?ISTI} +8: aosfiletype: integer; {AOS ?ISTO} +9: fbufferp: byteptr; {^read/write buffer} +10: ires: integer; {AOS ?IRES} +11: reclen: integer; {# bytes/record} +12: xferred: integer; {# bytes transferred} +13: recnumhi: integer; {record #: hi-order} +14: recnumlo: integer; {record #: vlow-order} +15: fnamep: byteptr; {^filename} +16: blocksize: integer; {AOS ?IMRS} +17: deltabl: deltablptr; {AOS ?IDEL} {followed by interpreter-only portion of FIB} MANUAL2.10 Update to RDS Pascal Programmer's Manual 21 August 1980 Page 4 3. On page 1-4 of the Programmer's Manual we discuss the input and output of STRINGs. It should be noted that a minimum field width for the output of a STRING to a TEXT file in a WRITE or WRITELN statement may be used. The syntax is: : If the length of the is less than characters, - length() spaces will precede the output of the . 4. The proposed standard specifies that the order of evaluation of a boolean expression shall be implementation dependent. For example: result := ifok(test) and expectation; A possible optimization in the evaluation of the above expression is evaluation of the boolean function 'ifok' only if the boolean scalar 'expectation' is true. If 'expectation' yields 'false' then 'result' will be 'false' no matter what 'ifok' returns. RDS Pascal performs no such optimizations. All boolean expression will be fully evaluated.  In other words, if 'ifok' has some side effects, they must always be considered whenever the above statement is executed. Without the use of explicit parentheses, the evaluation of complex boolean expressions is in left-to-right order -- the fung;ction 'ifok' will be invoked and its result 'anded' with the scalar 'expectation'. 5. Both the RDOS/DOS and AOS compilers have an additional global switch: "/C" for 'conformance'. See the release notice for full details regarding its use. MANUAL2.11?? MANUAL2.11 Update to RDS Pascal Programmer's Manual 14 October 1980 Note: There is no update to the Programmer's Manual for Release 2.11. However, be sure to read "MANUAL2.10" which includes important changes to the Release 2.00 manual. PASCAL.ER??  Message #0. >left parenthesis or constant expected in simple type; skipping 1identifier expected after reserved word "PROGRAM"ype; skipping reserved word "PROGRAM" expecteded word "PROGRAM"ype; skipping F5right parenthesis expected to terminate argument list skipping 1colon expected after constant in "CASE" statementlist skipping .period expected to terminate program; skippingentlist skipping >colon/semicolon/left paren. expected after proc name; skipping /reserved word "OF" expected in "CASE" statement name; skipping >this proc/func requires argument(s); left parenthesis expected 5unexpected item at start of type definition; skipping expected )left bracket expected in array definitionon; skipping expected !0right bracket expected to terminate set constantpping expected 8reserved word "END" expected to terminate proc/func bodypected 1semicolon expected after proc/func body; skippingnc bodypected 4integer constant expected after reserved word "GOTO"bodypected :2*equal sign expected in constant definitionord "GOTO"bodypected 9reserved word "BEGIN" expected at start of proc/func bodyected -unexpected item in declaration part; skippingoc/func bodyected 5identifier or reserved word "CASE" expected; skippingbodyected ^n4comma expected in argument list of "INDEX" intrinsicgbodyected $period expected to terminate programINDEX" intrinsicgbodyected 5double period expected in definition of subrange typebodyected 4identifier expected in constant definition; skippingebodyected !identifier expected in field listefinition; skippingebodyected 0identifier expected in "FOR" statement; skippingpingebodyected %identifier expected in parameter listt; skippingpingebodyected 6type identifier expected after colon in parameter listodyected 9C)identifier expected in pointer definitionarameter listodyected identifier expected after reserved word "PROCEDURE"/"FUNCTION" +first argument of "READLN" must be variableOCEDURE"/"FUNCTION" / identifier expected after periodbe variableOCEDURE"/"FUNCTION" 5identifier expected in definition of enumeration typeFUNCTION" 0identifier expected in type definition; skipping typeFUNCTION" *identifier expected in variable definitionipping typeFUNCTION" ^$identifier expected in argument listnitionipping typeFUNCTION" +tag field type must be identifier; skippingpping typeFUNCTION" 0tag field identifier or type identifier expected typeFUNCTION" .identifier expected after reserved word "WITH"ed typeFUNCTION" ۂ5right parenthesis expected to terminate argument listFUNCTION" >right parenthesis expected to terminate program parameter list (right parenthesis expected in expressionprogram parameter list 6right parenthesis expected to terminate parameter listter list Wunexpected item after right paren. in parameter list; skippingg>;unexpected item follows procedure/function header; skippingingg2unexpected item in reference to variable; skipping skippinginggunexpected item after right paren. in record variant; skippingg4identifier or reserved word "VAR" expected; skipping; skippingg1+unexpected item in parameter list; skipping skipping; skippingg+unexpected item in parameter list; skipping skipping; skippingg+unexpected item in parameter list; skipping skipping; skippingg=semicolon expected after "assembler" in proc/func declarationggz/reserved word "OF" expected in array definitionnc declarationgg5reserved word "OF" expected in definition of set typelarationgg6reserved word "OF" expected after reserved word "FILE"arationgg7reserved word "OF" expected in header of record variantrationgg+left parenthesis expected in record variantcord variantrationgg8unexpected item follows reserved word "PACKED"; skippingationgg3right bracket expected to terminate array subscriptppingationgg*right bracket expected in array definitionsubscriptppingationggO5right bracket expected to terminate string definitioningationgg:reserved word "END" expected to terminate "CASE" statementionggincompatible types of constants in definition of subrange typegfile may not be field of record in definition of subrange typeg#array index may not be of type REALdefinition of subrange typeg6tag field of record variant must be scalar or subrangenge typegsemicolon expected after keyword "forward" in proc/func headerg)index of array must be scalar or subrange" in proc/func headerg-base type of set must not be REAL nor INTEGER proc/func headerg7intrinsics "PRED" and "SUCC" require scalar as argument headerg1may not read into packed fieldequire scalar as argument headerg8unsatisfied forward declaration of procedure or functionheaderg(semicolon expected after type definitiondure or functionheadergfile value parameter not allowed; file must be "VAR" parametergitem preceding uparrow must be reference to file or to pointerg>string literal argument not same length as packed array param.g8illegal type of loop control variable in "FOR" statementparam.gNB5illegal type of expression in "CASE" statement headerentparam.gsubrange bounds must be scalar; STRING is PACKED ARRAY OF CHARg&array index may not be of type INTEGER is PACKED ARRAY OF CHARg+assignment to standard function not allowedACKED ARRAY OF CHARg&equal sign expected in type definitionlowedACKED ARRAY OF CHARgIfno such field in this recorddefinitionlowedACKED ARRAY OF CHARg>identifier or "END" or "CASE" expected in field list; skippinggargument must be variableASE" expected in field list; skippinggargument of "EXIT" must be user-declared procedure or functiong>argument of "EXIT" must be user-declared procedure or functiong/first argument of "FILETITLE" must be file nameure or functiong6first argument of "GET"/"PUT"/"SEEK" must be file namefunctiong\3second argument of "SEEK" intrinsic must be integeramefunctiong7comma expected; "SEEK" intrinsic requires two argumentsunctiong?"READ"/"READLN" require integer, real, char, or string argument$error in type of intrinsic parameterl, char, or string argumentՋ$error in type of intrinsic parameterl, char, or string argument$error in type of intrinsic parameterl, char, or string argument$error in type of intrinsic parameterl, char, or string argumentstring argument required hererameterl, char, or string argumentf6second argument to "SUBSTR" must be integer expression argument5third argument to "SUBSTR" must be integer expressionn argument;"WRITE"/".LN" require integer expression after second colonment>"WRITE"/".LN" require int/bool/real/char/string/packd.ary.chart6explicit argument to "PAGE" intrinsic is not file nameary.charttoo few arguments to "PAGE" intrinsic is not file nameary.chart1type conflict of operands in assignment statement nameary.chart*type conflict of operands of "IN" operatoratement nameary.chart$0type conflict of operands of relational operatort nameary.chart>comparison of packed arrays of char requires identical lengthst8only equal/unequal comparisons permitted for array typesengthst9only equal/unequal comparisons permitted for record typesngthstm6operand of unary plus or minus must be real or integerpesngthst)illegal type of operand(s) of binary plusal or integerpesngthst*illegal type of operand(s) of binary minusl or integerpesngthst6illegal operand(s) of "OR" operator; check parenthesespesngthst,illegal type of operand(s) of multiplicationarenthesespesngthst+illegal type of operand(s) of real divisionnarenthesespesngthst?proc/func declaration is too deeply nested; display limit is 12>proc/func declaration too deeply nested; lex. level limit is 82.,illegal type of operand(s) of "DIV" operator. level limit is 829proc/func too long; use swapping and/or overlaid compiler is 82,illegal type of operand(s) of "MOD" operatorlaid compiler is 82)too many jumps in this procedure/functiontorlaid compiler is 82subrange bounds must be scalar; STRING is PACKED ARRAY OF CHAR29comma expected in argument list of "WRITE" to "TEXT" file CHAR236label on this statement was not declared in this blockile CHAR2;unexpected item follows procedure/function header; skippingHAR28reference to entire array expected in "PACK" or "UNPACK"ingHAR29explicit argument of "PAGE" intrinsic must be "TEXT" filengHAR2r&error in real constant; digit expectedmust be "TEXT" filengHAR27string maximum length must be in inclusive range 1..255lengHAR2.too many segments in this program; limit is 16ge 1..255lengHAR2-record too deeply nested; display limit is 126ge 1..255lengHAR2o7"WITH" statement too deeply nested; display limit is 12lengHAR2;too many procedures/functions in this segment; limit is 149HAR29proc/func too long; use swapping and/or overlaid compiler49HAR2error in POINT statementswapping and/or overlaid compiler49HAR2֔error in POINT statementswapping and/or overlaid compiler49HAR2error in POINT statementswapping and/or overlaid compiler49HAR2error in POINT statementswapping and/or overlaid compiler49HAR2error in POINT statementswapping and/or overlaid compiler49HAR2error in POINT statementswapping and/or overlaid compiler49HAR2cannot create overlayentswapping and/or overlaid compiler49HAR2cannot create overlayentswapping and/or overlaid compiler49HAR29source line too long to process; split into several lines49HAR2+E.may not switch segments; rearrange source codeveral lines49HAR2>reserved word "PROCEDURE" or reserved word "FUNCTION" expected2=was declared both "forward" and "segment"; add "segment" hered2"record type of this file not knownegment"; add "segment" hered2;w#subrange of type REAL not permittedgment"; add "segment" hered2error in POINT statementt permittedgment"; add "segment" hered2cannot create overlayentt permittedgment"; add "segment" hered2(zero-length array elements not permitted"; add "segment" hered2:9explicit argument of "EOLN"/"EOLCHAR" must be "TEXT" filehered2/illegal character in source text; blank assumedTEXT" filehered21included file may not contain $I control commentsXT" filehered21procedure/function parameters not yet implementedXT" filehered2 0field addressing problem -- Please inform RDS.dXT" filehered23constant addressing problem -- Please inform RDS." filehered23indirect addressing problem -- Please inform RDS." filehered27unanticipated end of source file; check BEGIN/END pairslehered29program parameter not declared as file in outermost blockhered27assembler module must not be declared as Pascal segmentckhered28comma expected in argument list of "WRITE" to typed filekhered2#"OUTPUT" not declared in this scope"WRITE" to typed filekhered2L]-"OUTPUT" not declared as "TEXT" in this scope typed filekhered23real number may not be argument of "PRED" or "SUCC" filekhered2file of file not allowedrgument of "PRED" or "SUCC" filekhered25too much local data; stack frame limit is 16383 wordsilekhered2J>"PACK"/"UNPACK" offset not compatible with index type of array28reference to entire array expected in "PACK" or "UNPACK" array2>"PACK"/"UNPACK" require both arrays to have same element types26"PACK"/"UNPACK" require reference to packed array herent types2~:"PACK"/"UNPACK" require reference to non-packed array hereypes22comma expected in argument list of "PACK"/"UNPACK"ray hereypes22comma expected in argument list of "PACK"/"UNPACK"ray hereypes22comma expected in argument list of "PACK"/"UNPACK"ray hereypes2?illegal assignment; PACKED ARRAY OF CHAR should have lowbound=1segment too long; limit is 32KBY OF CHAR should have lowbound=1segment too long; limit is 32KBY OF CHAR should have lowbound=1)"ODD" intrinsic requires integer argumentshould have lowbound=1)"CHR" intrinsic requires integer argumentshould have lowbound=1segment too long; limit is 32KBr argumentshould have lowbound=11too many elements in packed array; limit is 32767ave lowbound=1array too large; limit is 32KBray; limit is 32767ave lowbound=1array too large; limit is 32KBray; limit is 32767ave lowbound=1array too large; limit is 32KBray; limit is 32767ave lowbound=1array too large; limit is 32KBray; limit is 32767ave lowbound=11too many elements in packed array; limit is 32767ave lowbound=16W9global labels not permitted in separately compiled moduleound=1)'> FCOM.CM COM.CM  ʁƀ!ʁȡʁ ʁá Há ʁƀ!Ձƀ!šƀ%ƀ.PXƀƀÍ"ƀ́Ɓƀ!Ɓ.PX$Ɓ!ƀƀ^ƀƀƀʁzʁ{ ō*ʁƁ'20 $ƀáʁá1ʀȡDʁ'ۤ́ƀۤ9́ʁʁʁʁʁښʁʁá'́ʁ́ʁʁʁʁʁ!ʁ&ʁʁ)" :1ȡֲá(2ƀƀƀCLIFILEƁ)ʁƀFCOM.CMƀCO0M.CMƀƀ2ƀ2,ˡUƀ ƀƀ 2ƀʁʁ-ֶ,2,,ƀeܢ ܢjܢlݢٚݢܢFݢݣ šܢ,ܢnڂ4ܢxܢzܢtܢrܢvܢ6 ܢp ܢ,ܢnݢܢ~ݢO ܣ7ۡ ܢ0,ظ,أ5(/پ!ġآF!!&/٪!%آF!آFNá//ݢ ݣ57ٹ$& .ݢFINPUTݢFOUTPUTDݢzݢFINPUT ݢFD!*Rˡ/ݢF?!ظ*ݢFݢFآzݢ.ٚá=ߢߢޣ ڞ# Äߢߢޣ ڞ#0ߢ*"ڞ#0ߢ?ߢޣ ߢڞ# ˡ0'VPI  ܓ áܡ ݢF! z//áߢڞ#ݣá#ߢڞ#á ݢrݣ8ݢrߢڞ#ݢjá ݢh$ݢh$ݣˡ& $أ5xۢ ڶ*˄*ۣۣ#ۢjۢlۢxۢvݢ?ݢ ڞ#0| ݢݢܣ ڞ#٢ ٢l٣4٣á٢v٢x٢r٢t4$ۢ ۣ8č'/ۢrٚۢڞ#ۢl> ٣;٣8٣٣á!٣6 !٣< ۢ ۣ5)/ۣ=)ֶ*#ݢ?ݢݢݢ ٞ#ܢ ;ڡ2ۣáۢ~ܢ ۢ~ܢ ۢl0ۢh3ڢ ڣ6 /ڣáڣ9ڣ:šJڣ?3ڢrڢtڣ=,ܢܢڢ~¾ٞ#0 áܢ $ڢ|ڢ~ڣ9¾ڢrڣ9ڢlڣ>Úڣ>ڢ6ڣ8ڢpڣ>ڢ| ڢxڢxڢl3ڣ6 ڢrڣ9 &أ9أ:šrڢ ڣ5)/ڣ=)ֶ*#ܢܢ ܢ?ٞ#ۢ áڢ~ۢ 0ڢtڢrtأáأ;&آvأ6 /&.٣;٣6٣Ä&٢v$! &آv !أ>آv#/!ڿܣ<ܣ>&ܣ<&3 J!ܣ> á&ܣ>+ܣ>-Í ܣ>-&ܣ> 0ܣ>&ۡڡ/5\ t !ݣ> á&ݣ>+ݣ>-Í ݣ>-&ݣ>ټ ݣ>0&ݣ>.áD&ݣ>$Kš/ټ£>0ܞ$ݣ>ݣ>eݣ>EÍړ>ݢv ڡ܀Kš/ɡ ټ܀$ ټܞ$ڡ/ۡټ ڢ ڢhܢܢ ڣڢ~ڣ9ܢ? ܢܢ?ٞ#0V4أ5)/ڢ m\ڣájڢ~ڣ9ڣ>ڢrڣ9ڣ9DŽڣ>7ۢ ڣ94ۢ ڢrڣ>áڢ~ܢܢ?ٞ# ڣ=)/ڣ8ڣ9ȡڢlڣ8ڣ9á ڢpڣ84ڢrڣ9 šآ| آ|ٚ (ڢ ڣá,ڣ9šۢ ڣ94ۢ ڢrٶ*á) J#š ەȡآ|¾ á @پȡš ەڮȡآ|¾ á Lآ| #آ| ##/s ١ True False*" ɡ ـȡ-32768 c-ġIٲ"ܤ00ńބݿ0ˡ ٲ"ܤáɡ`  BdX  ġ š Kš/  ڞ$5Jɡ šKš/  ڞ$5M 5ֶ6خȡ: 06  يon   á8 N7 $ $ɍKōKō$/ ݡ  @ܞ$  A5ޕܕȡ 6á-6 67.6ޮġ06>á7ɡ 5 @$5-6 67.67E6ȡ-6+6 ɡ06 z٦ńۂؾȄ۞ۿ+/8پؾȡؾپپؾ+/2ھšS¾پھ¾ȡ3ܕž šھگ:f1H x \ D d l " >Td `r$ PHZ   VH b B"[xn7  8X6H**+ 8I8)6X6H**+ 8JR8)6H7(**+B 8I878)60-P-("H"(( < n0-P-("H" ;xV'|-vC0uYg^oM.86420 (33 >x#6E[PR]........ RRRRRRRRUUUUUUUUUUUUUUUU12(T(]) X(*2(T(] X(*P(T(] X(*$((B]0(" X(*B]1 /2(T(] X(* /2(T(] X(* /P(T(] X(* /$((B] W(* W(*(T(](T(] W(*2 X(*"(D(] W(*2 X(*P(T(] W(*2 X(*$((B]$((4((ӐB]4((Ӑ2(T(]1 4((Ӑ"(D(] W(*H*P7@80(P( " n- 8078("CP8)](L( W(*] W(*4((ӐH*P7@80(P( " n- 8078("1TCO W(*0(P(<((H*"CO4((Ґ"0I(D(]$((4((8IғH**JO$((/<((H*2(J(*(\(8)]H* n X(* $((4(((T(]H*P4(( p8)4(((T((*O X(*4(("(D(] X(*H*4((<((Ӑ"CKO X(*H*<((4(( W(*H*<((4((P7+ 0I@07 nOP7# 0I@07X7H88IҒ*J@(887O$((0H4((ӐB] W(*H*,(( q<(((\((* W(*H* p8j#8k+(D(O$((4((Ӑ2Ґ(T(]H*,(3x($((<((ҒP3SO$((Z(D(]$(((D(]$((4(( $((4(((T(]$((4((J JZJ[(T(]H* n,H*4((,((/ J r[  rZ  K/(L(O nH*4((,((J s(L(O0("(D(H*4((7/8(+J s8(JCO n n+$((4(((T(]$((4(((T(]$((P(D(]$(((D(]0(]]0(]]0(":ZB8)]0("(D(] X(*4(((T(]$((<((4((.J(T(8)]H* n$((4((Q(D(]$((4((P(T(]$((4((/P(D(]$(7b(4((JP(D(]$((4((JQ(D(]$((4((/Q(D(] P0@0A0B0C W(*9@R}G9KQgRRRR X(*H* K@6<((4((Ӑ#* L6K X(*H* L@6<((4((Ӑ#* K6L$((8H8-CP(\(:H*9#(D(8(3;X7Ґ" 8I@87P7+ 0I@07  FF D@6H6X7Ґ" 8I@87P7+ 0I@07&$68(3;X7Ґ" 8I@87P7+ 0I@07 P @ B<((4((,((KL X(*H*9+(L(8(3K; @6P7# 0I@07X7Ґ* 8I@876 W(*4(( ]=H*8("CX($(('H*0(P7@80(P( " n- 8078((D(/ "C,((CO$(((D((D(H*<((4(((T(O K n!8 nP6X7(G8k#(786(D(86(G8j+(6(D( 7(D(O$((0(P(H*** G+8l#P8)B(*] z H6"+J6P(O lH6"+J6 ]H6"+B6c90R?RO E H6"+6Q,((0(P(BO / H6"+6P  H6"+6Q  H6"+6QX6H*8(+3  8(+6 K8(+SK(D(0(P7@80(P( " n- 8078("C,((C?? @ @0(P(" A8)]0(P("B"B @" 48)]0("PB]0("PB]0( %P(8)]0( !P(8)]0( P(8)]0( P(8)]0("B"B% P(8)]H*0( P(O[|p!(D(!(D(0("K  P(8)]0( P(8)]@4((J!  ! "(D("(D(]K nLAABdC>D'EjE$FG_^H;I%@JHvJԤKLZM8N#O4WO jP"QVuR65S!T-TUYPVRW3X OY1YZ~7[N\1M]Л^Ba^_x^`K;Ka/bc)c]cdrYeGf,ogh'h)imyjDl9k*ãlFmlm 8nhgoA@p({q}MqrO"scut>:u&vOvwx^y;Xz%{.{D| }Z~8#_0+80(D((L((T((\(8,(\(8(X0] W(* W(*H*(\(80K8>PX6#/.PC#  n ((0<0- n ((000C0(X("C"86#(0H00CK863P,* J$((  P  0,"P+ 0@/P8) W(*H*00J0>*H, W(*H*00J(+0-0.00(:J,+0,<,K!I""K SP+"K99 0+P,"P+"@0I8) #;80C#PCX)0+"P7@80(P( " n- 807"PH*] W(*00J0;"P+ ;@, 1"o80#PCX)2 I!"@60(6$0+"(J@680X)/ W(*@6(J$,K1͕T!7 8>P#0)(BX) 6"C<8)#@,#P@0+3K 8)P+ 6  CX(H*0)(C"CX((*80#Z;PX)]$+(@ +H6,(($((0+ @"PP*$+0J  $,0I O3K(\( &<(( @"PS3PҐ"0J '0I 3PҐ"0I;l(6H* n "o0+ @"PP*+H6(6#PH63K(\( <(((6 "(I,((  $(("PSO(L( @"PS; W(*S0JJ0+"P]$((]$((*.*J *(A"P]P] W(*H*1RDK0RR lg' RRRRRRRRsiGIMKOQS+2Rz7YRRR4((Ӑ -PB]4((Ӑ"0- n0. n@-]$((4((Ӑ(-H-PJ < ( n H"(*] $<((C<((K<((SO  -0(0</(D(]$((P(D(]4((!!!$((<((4((/]X7H88IҒ/8*J@(8878)]$((<((4((/OX7Ґ* 8I@87P7@80I#C@ 807O$((<((4((JOX7Ґ* 8I@87P7@80I#C@ 807O8(+#C O#3$+KX7Ґ* 8I@87 98X7Ґ* 8I@87 ((+KX7Ґ* 8I@87 X7Ґ* 8I@87 #+C AX(O P @ A B C D0(4 8()X(X)X0CX1! C =(D()] J2H)H($,C#)  1""6"A"U nX6+8)'K;0JE'E3 @;#PUbcdX6$,0JE8+#E#P *E0; A""20C01@(@0 $6! (D((L(81X))]3X69Ɛ6X6 9 P@ @!6X7KKX8 p88Z7X7KKX8 q88Z72\2 @BB y<222\2 z @<222D2 u$222T29422 vOCXRSX6! YP3! YP2! YP4!P56 f n n2\284#+3;%84)H6+9 848B2\2<6P@@@2\6<2284CKS#(J42284)C2\204"*!bJ"*pB82!=X2!8C!6C BCCC+K/7 p823SG#+3CK#+KKG82!X2YD84!KX4 "834222\2841=05:X4PpSҊC!0CCCC 83422@2\284#11+ ZP#! X483422 nDK2\2841X4#+ # + P+834224832\2 0422 C B A @P2\22D2 |84!̝X4P#+ # + #PP$22 834222\284#+)C#+pK#+ ]1 (B 8402!SP2 BB!MB#+3 q02N84Z BB6+ p02:K C 1584#+ C 02 )84#C84)"C029P2841 X4 83422 n2\283(4KC*K w# w }! +C w {# x4222\28304"CB!K w } )H?C!A w | 4C w 4 w } # w!9 } !0 4 w# w { # w | ~!& w }# x+!=04:J83C! w ~#! w ~422 n(@FLjB!<C 4 w# w | # w { ~ 4 w 4 w } 4 w!*  !( ~ }# ! w } {! w }422P04B! BBBBB n@A @@3d@ry@o-T8BSP B]v1IfBZ,YAB>)B=1oB-\K߬u2\28304"2",Ca w04")J CpC!$ !" w }0404"+J BCS# w# w ~ {! w } #@4422 n@RL@*@9>N(@@@2\28304"CBCC"):!= w ~ 4 w!1 w  4 w!- w }!, w | !& w { ~ 4 w 4 w } 4 w! ! ~ }|! w {! w {#D4422AA2CZ0@ k,AzXLt@DQz{5XA!TD-FAɈg)2B}D@nVC>rWB3,1AB%ݣBϱS^UCʙ43FB3,1ޅ 2\28304*uPCB!! w } +ULK! w |+04 w 4 w } 4 w! ! ~ }422 f T / T>6--j@A17AP6QCZQFC;(:Dpԋ0ABsMʁ]pZDx%UXl@nND'8(3S;Ӑ B@6"+6'3p8(3ӐK22 $((<((b4((S(L(O hPE AP7@80(P( " n- 8078(3Ӑ!BBBB3Ӑ"3; F@6P7# 0I@07(\( -'X7H88IҒ*J@(887<((6P7# 0I@07(\( <(($(()))) ) ) 0:@Z`z8(33ӐB FK@63)o9pX7Ґ" 8I@87X7H88IҒ*J@(88768(3X7Ґ" 8I@87)E3Ӑ"C"PPPC!;3#C#PPP(T(;Ӑ B@6"+64((!8(#;C8(!X(O4((Ӑ"8(;C"8( A`6 o  P  #Ǫ f?FQfX1,)+H6)*H7*766) !  " 9PPP9)ٮPPP)־!0!D    H-H. <H" t  " WsX6 " 96X6 " 6ېX6#  K n) 1v!!!#+1S1S1S386C86OCPCKSO #X9! Y89ZP9!P " 89" *1k p<937 q<9K8!09 ZOX937+9 p893 '? OX93 ? 1 P89K1PCO@X9! YP889!P " 08" *10 p092 '? ! ZOH9X8P)! (: @:-)%%  ? % `P-Ӑz(98ge@?86X93) p893 '? 0)P893+ ? 89X6  n%/"5*Z"*:X8:2! H`:Y:2` Y8 ` =CKS8Z9(J+J@Z*J8H`RELEASE2.10 `Release Notice RDS PASCAL  2.10 ENHANCEMENTS ============ 1) Facilities for separate compilation of procedures and functions have been implemented. See the update to the Programmer's Manual for complete details. 2) The standaZrd procedures 'PACK' and 'UNPACK' have been implemented. 3) The compilers have an additional switch: "/C" for "Conformance". The switch is applied to the compiler: PX PASCAL/C or PX PASCALO/C The effects are to diVsable the recognition of (a) the RDS extension predeclared identifiers (such as 'DATE', 'PWROFTEN', etc), (b) the RDS extension reserved words 'STRING' and 'SEGMENT', (c) the RDS extension directives 'EXTERNAL' and 'ASSEMBLER', and (c) all commentQ switches (for example, '$R-' will not have the effect of turning off the generation of rangechecking code). The purpose of the "/C" switch is to aid you in writing programs which are as portable as possible. 4) Non-local 'GOTO's have been implemen$pted. It is now legal (as required by the proposed standard) to 'GOTO' a label declared in an outer block. 5) Rangechecking code is now generated for the 'CHR', 'SUCC' and 'PRED' functions. For 'CHR' the check is that the argument is in thNe range 0..255. For 'SUCC' and 'PRED' the generated code will check that an expression does not represent a value of an ordinal type beyond the declared range of that type. This is especially important for enumeration types. For examp^le:  type day = (mon,tue,wed,thu,fri,sat,sun); : secondtuesday := succ(pred(mon)); If rangechecking is enabled (the default condition) this statement will cause a runtime error since the intermediate result of "pred(mon)" yields a result which is outside the range of type "day". 6) The overlays for the overlaid compiler 'PASCALO' have been moved from the separate file 'PASCALO.PO' into the main P-code file 'PASCALO.PX'. Therefore, there is no longer a '.PO' file shipped with the release. Relpease Notice RDS Pascal: 2.10 Page 2 WARNINGS ======== 1) Both the compiler error message file ("PASCAL.ER") and the runtime error message file ("PASINTERP.ER") have been changed. Make sure that the new revisions get installed along with the new @Putilities. 2) Due to the implementation of non-local 'GOTO' (as required by the standard) the 'EXIT' procedure is no longer required. 'EXIT' will not be supported as of release 3.00. Until 3.00 is released, 'EXIT' will be supported in addition to 'GOTO'. All new programs should use 'GOTO' instead of the non-standard procedure 'EXIT'. Old programs will have to be converted if they are to run under 3.00. 3) Because of a change in the internal overlay mechanism and the elimination of :vthe '.PO' file when using the overlaid compiler 'PASCALO', the current overlaid compiler cannot be used with an older interpreter and vice versa. 4) The standard releases (other than Evaluation Releases) include an interpreter for the mignimum equipment configuration of the host operating system. For AOS users, this standard interpreter is configured for a 'basic' Eclipse with no options or extended instruction sets. Users of the RDOS/DOS system, however, receive լa standard interpreter 'PASINTERP.SV' which is configured for a Nova 1200 with no options! If you are using a Nova/3, Nova/4 or an Eclipse you should run the PASCALGEN utility as soon as possible. The details are in the Programmer's Manual. Evfen AOS users will benefit from generating an interpreter which takes advantage of all available hardware and firmware. Release Notice RDS Pascal: 2.10 Page 3 FIXES ===== ------------------------------------------------------------------------ #77: INTERPRETER 2.01 (All versions) 4 August 1980 If a WRITE is issued to an unopened TEXT file, no runtime error is issued unless the data is 'forced' out by a WRITELN, READ or >132 chars of output text. Workaround: Open TEXT fil;es using REWRITE. Status: Fixed 12 August 1980. ------------------------------------------------------------------------ #76: COMPILER 2.01 (All versions) 4 August 1980 INTEGERs are not coerced to REALs when appearing as expressions in a WRITE(,) statement. Since WRITE is defined in terms of an assignment followed by a PUT, the INTEGER should be converted to a REAL as part of the assignment. Workaround: Use explicit assignment and PUT. Status: Fixed 11 Augu]st 1980. ------------------------------------------------------------------------ #75: COMPILER 2.01 (All versions) 4 August 1980 A WRITE() statement where no variable "OUTPUT" has been declared generates bad code. The compiler should flag this as erroneous. Workaround: Properly declare INPUT and OUTPUT. Status: Fixed 11 August 1980. ------------------------------------------------------------------------ #74: COMPILER 2.01 (All versions) 4 August 1980 If OUTPUT is declared as FILE OF INTEGER or FILE OF REAL then the statement "WRITE()" is not flagged as erroneous. If INPUT or OUTPUT are used by default, they should be of type TEXT. Workaround: INPUT and OUTPUT must be of type TEXT. Status: Fixed 11 August 1980. ------------------------------------------------------------------------ Release Notice RDS Pascal: 2.10 Page 4 ------------------------------------------------------------------------ #73: INTERPRETER 2.01 (All versions) 5 August 1980C An explicit GET() immediately following a RESET() does not cause the file buffer variable to contain the second character of the file. The first character is retained. Workaround: None of adequate safety. Status: Fixed 12 Augus't 1980. ------------------------------------------------------------------------ #72: INTERPRETER 2.01 (All versions) 24 July 198 The runtime error message "Non-Positive Dividend in MOD Operation" should read "Non-Positive Divisor in MOD Operation". Workaround: None required. Status: Fixed 12 August 1980. ------------------------------------------------------------------------ #71: PASCALGEN 2.01 (RDOS only) 3 July 1980 The CLI command file "CLI.CM" is being used if running in the\ foreground where "FCLI.CM" should be used. Workaround: None. Use background for PASCALGEN. Status: Fixed 13 August 1980. ------------------------------------------------------------------------ #70: COMPILER 2.01 (All versions) 1 August 1980 The compiler erroneously accepts a procedure declared as both SEGMENT and ASSEMBLER. Workaround: None required. Status: Fixed 6 August 1980. ------------------------------------------------------------------------ #69: COMPILER 2.01 (All versions) ; 1 August 1980 The compiler will not accept "WRITE(,)". Workaround: Assign the to a <variable> of the same type and use "WRITE(,)". Status: Fixed 5 August 1980 ------------------------------------------------------------------------ Release Notice RDS Pascal: 2.10 Page 5 ------------------------------------------------------------------------ #68: COMPILER 2.01 (All versions) 22 July 1980 The compiler generates bad code f or "WRITELN()" where "OUTPUT" has not been declared explicitly or as a program parameter. The results at runtime are not predictable. (Note: This may be related to Bug #65). Workaround: "OUTPUT" must be declared explicitly or avs a program parameter if it is to be used as the default file in "WRITE" or "WRITELN". Status: Fixed 6 August 1980 ------------------------------------------------------------------------ #65: COMPILER 2.01 (All versions) 17 July 1980 I=ncorrect code is generated for the sequences 'WRITE()' and 'WRITELN()'. The program will not execute correctly and will not provide reasonable runtime diagnostics. Workaround: Use 'OUTPUT' explicitly before the ''. Status: Fixed 4 August 1980 ------------------------------------------------------------------------ #64: INTERPRETER 2.01 (All versions) 16 July 1980 If a program whose P-code filename is of the form 'aa.PX' is run using only the first two characters ('PX aa'), the interpreter will not append the '.PX' suffix and the host system will attempt to open the file 'aa'. Workaround: Specify 'PX aa.PX' (Use the explicit suffix). Status: Fixed 16 July 1980. ------------------------------------------------------------------------ #63: INTERPRETER 2.01 (AOS only) 14 July 1980 If '@NULL' is opened as a typed (non-TEXT) file, AOS returns "System Call Parameter Error". The interpreter performs an ?FSTAT call once a typed file is opened in order to d etermine the file size. ?FSTAT uses an AOS channel number as input. AOS assigns octal 100 as the channel number for @NULL, but ?FSTAT will not accept that channel number as legitimate. Workaround: None. Status: Fixed 12 August 1980. ----------Tt-------------------------------------------------------------- Release Notice RDS Pascal: 2.10 Page 6 ------------------------------------------------------------------------ #62: INTERPRETER 2.01 (All systems) 3 July 1980 The ROUND function ]=is being improperly performed by always adding '0.5' then TRUNCating. (For negative arguments '-0.5' should be added). Workaround: User written ROUND function which adds or subtracts '0.5' (as appropriate) followed by TRUNC. Status: Fixed 6 July 198 0. ------------------------------------------------------------------------ #61: COMPILER 2.01 (All versions) 3 July 1980 There is a spurious compiler error generated when the first argument of a WRITE or WRITELN contains a colon (':'). IFn other words, when the file is implicitly 'output' and the first (or only) argument contains format specification information. Workaround: Use 'output' explicitly. Status: Fixed 3 July 1980. ----------------------------------------------------------`-------------- #60: INTERPRETER 2.01 (All versions) 30 June 1980 Comparisons ('=', '<>') of arrays or records with more than 127 elements or words will crash the interpreter. The runtime symptom is not determinable. Workaround: Use F explicit user-written element-to-element and field-to-field comparisons. Status: Fixed 1 July 1980. ------------------------------------------------------------------------ #59: COMPILER 2.01 (All versions) 20 June 1980 There is no runtime check code generated for the SUCC and PRED functions. Workaround: None required. Status: Fixed 20 June 1980. ------------------------------------------------------------------------ Release Notice RDS Pascal: 2.10 Page 7 -----------------N------------------------------------------------------- #58: COMPILER 2.01 (All versions) 20 June 1980 There is no runtime check code generated for the CHR function. Workaround: None required. Status: Fixed 20 June 1980. ------------------------(------------------------------------------------ #47: COMPILER 1.03 (All versions) Compiler crashes when processing declaration of a PACKED ARRAY when (<#_of_elements> + <#_of_elements_per_word>) > MAXINT. Workaround: None Status: Fixed 20 June q1980 ------------------------------------------------------------------------ #45: COMPILER 1.03 (All versions) The compiler is permitting assignment from a string to a PACKED ARRAY [n..m] OF CHAR where "n <> 1". This is non-standard. Workaround: _None required. Status: Fixed 18 June 1980. Under control of /Conformance switch. ------------------------------------------------------------------------ #44: COMPILER 1.03 (All versions) The compiler is not checking/enforcing the implementation restriction of 32K bytes of local data per procedure causing the compiler to crash if it attempts to compile a procedure exceeding this limit. Workaround: None. The limit must be 'manually' observed. Status: Fixed 18 June 1980. --------------------------qL---------------------------------------------- Release Notice RDS Pascal: 2.10 Page 8 ------------------------------------------------------------------------ #43: COMPILER 1.03 (All versions) If an ARRAY is declared with close to MAXINT elements uZ the compiler crashes. Workaround: None. Status: Fixed 20 June 1980. ------------------------------------------------------------------------ #38: COMPILER 1.02 (All versions) 7 March 1980 If limit value in FOR loop =MAXINT the loop will not uexecute properly. Program will crash in unpredictable manner. Workaround: None. Status: Fixed 5 August 1980 ------------------------------------------------------------------------ #37: COMPILER 1.02 (All versions) 7 March 1980 If control  variaSSble in FOR loop appears in the limit expression improper code is generated causing an incorrect number of iterations of the loop. Workaround: Use temporaries to keep control variable out of limit expression. Status: Fixed 5 August 1980. ------------------------------------------------------------------------ #29: COMPILER 1.01 (All versions) The compiler is erroneously accepting "FILE OF TEXT". The code generated produces unpredictable results at runtime. Workaround: Pascal - TEMP", (d) creating a new contiguous file: "CREATE/ELEM=/TYPE=UDF ", (e) copying the old random file to the new continguous one: "COPY/A TEM$P", and finally deleting the old file: "DELETE TEMP". Under RDOS and DOS this can be done by (a) renaming the file temporarily: "RENAME TEMP", (b) copying the file to a contiguous file: "XFER TEMP /C", and (c) deleting the old file: "DELETE TEMP". 2) Under AOS you can use the new LINK utility (rather than BIND) to generate new interpreters via the PASCALGEN utility. Simply edit the "PASCALGEN.CLI" macro supplied with the release. RELEASE2.11?? Release Notice 14 October 1980 RDS PASCAL 2.11 Note: Release 2.11 is a minor update to Release 2.10. Please refer to the files "RELEASE2.10" and "MANUAL2.10" for information regarding the major changes made in Release 2.10. ENHANCEMENTS ============ 1) We have optimized input from text files which are neither devices (such as CRT keyboards) or IPC ports (AOS only) as follows. If a program executes a 'GET(f)', and 'f' is not an interactive device, the interpreter wi}ll read an entire line of text into its internal buffer. Successive 'GET(f)'s will, therefore, not require system calls until the buffer is again empty. As this is done only for non-interactive textfiles opened for input (via 'RESET') your9 programs should not require modification. The optimization manifests itself in 'textbook' programs which often use single-character 'GET' or 'READ' for non-numeric input from a text file. 2) A helpful feature has been added to the c%ompilers (PASCAL and PASCALO) and the PLINK and PINFO utilities. If they are executed with only the character '?' (question mark) as an argument, they will display their accepted and required CLI arguments. For example: ) px plink ? PX PLINK[/L][/V] program [directory/D] [interpreter/I] [listing/L] This facility will be added to the PASCALGEN utility and others in future updates of RDS Pascal. 3) The PLINK utility will now provided progress information when executed with the /V (verbosity) switch such as: PX PLINK/V FUNGAMES The output (which is similar to that generated by the compilers) shows what routines are being bound together to build the program '.PX' file. 4) The compilers will now output information showing wha8t options were in effect during a compile. The options include use of the overlaid compiler (PASCALO), use of the swapping mode (/S switch), and use of the /N (no-code) and /C (conformance) switches. Release Notice RDS Pascal 2.11 Page 2 WARNING$S ======== 1) Both the compiler error message file ("PASCAL.ER") and the runtime error message file ("PASINTERP.ER") have been changed. Make sure that the new revisions get installed along with the new utilities. 2) The standard releases (other than Evaluation Releases) include an interpreter for the minimum equipment configuration of the host operating system. For AOS users, this standard interpreter is configured for a 'basic' Eclipse with no options or extended instruction# sets. Users of the RDOS/DOS system, however, receive a standard interpreter 'PASINTERP.SV' which is configured for a Nova 1200 with no options! If you are using a Nova/3, Nova/4 or an Eclipse you should run the PASCALGEN utility as soon a(s possible. The details are in the Programmer's Manual. Even AOS users will benefit from generating an interpreter which takes advantage of all available hardware and firmware. 3) Due to the implementation of non-local 'GOTO' (as requiΐred by the standard) the 'EXIT' procedure is no longer required. 'EXIT' will not be supported as of release 3.00. Until 3.00 is released, 'EXIT' will be supported in addition to 'GOTO'. All new programs should use 'GOTO' instead of the non-standard procedure 'EXIT'. Old programs will have to be converted if they are to run under 3.00. 4) Release 2.20 will not permit the use of non-local variables as control variables in 'for' statements. All programs making use of this non-standard deviaCtion must be modified accordingly. 5) The 'Conditional Compilation' documented in the Programmer's Manual on Page 1-10 is not performed by the compiler as of release 2.11. 6) The compilers (PASCAL and PASCALO) and PLINK make use of temporary disk fiXles. In order to permit more than one user to execute these utilities from within the same directory unique filenames are created for the current ground (RDOS) or process (AOS). On RDOS and DOS the format is: B$hh$mm$ss.WK (background) or lRF$hh$mm$ss.WK (foreground) On AOS the format is: ?ppp.hh_mm_ss.TMP In both cases hh=hours, mm=minutes, ss=seconds (time of day). On AOS, ppp=PID (process id number). If the compilers or PLINK are aborted before completion they will not have the tEopportunity to delete these temporary files. Therefore, you may, from time to time, find such files on your disk. We wanted to let you know where they came from. Release Notice RDS Pascal: 2.11 Page 3 FIXES ===== ------------------------------------------------------------------------ #86: COMPILER 2.10 (All versions) 24 September 1980 When tight for memory the compiler may hang or crash during its final phase. If using the /V switch, the user sees all procedures listed but never gets the error message summary list. Status: Fixed 3 October 1980. ------------------------------------------------------------------------ #85: PLINK 2.10 (All versions) 23 September 1980 PLINK may incorrectly bind a program file consisting ofLJ separate Pascal modules. The program may or may not crash at runtime. The use of assembler procedures is not affected. Status: Fixed 30 September 1980. ------------------------------------------------------------------------ #84: COMPILER 2.10 (All versions) 19 September 1980 The compiler is accepting declarations of type SET [n..m] where 'n' is an integer less than zero. RDS Pascal does not support such sets. Status: Fixed 3 October 1980. Added new compiler error message #340: "set may not contain negative element". ------------------------------------------------------------------------ #83: COMPILER 2.10 (All versions) 11 September 1980 There are complex problems regarding the declaration of FORWARD SEGMENTS. The compiler may crash or bad code may be generated. Status: Fixed 9 October 1980. ------------------------------------------------------------------------ Release Notice RDS Pascal: 2.11 Page 4 ---------------------------------------------------Ay--------------------- #82: COMPILER 2.01 (All versions) 8 September 1980 The compiler may crash or generate bad code while compiling REAL constants that have no explicit fraction. Status: Fixed 3 October 1980. ------------------------------Z------------------------------------------ #80: COMPILER 2.10b (All versions) 5 September 1980 The compiler will not accept an excplicit directory specifier in the name of the source file. For example: PX PASCAL DIRECTORY:PROGRAM Status: Fixed a% 9 October 1980. When compiling a program using an explicit directory specifier, the resulting .PU or .PX file will be placed in the current working directory. ------------------------------------------------------------------------ #79: COMPILER 2.10b (All versions) 5 September 1980 If a label is multiply defined the compiler may crash upon encountering the second (or later) definition. Status: Fixed 5 September 1980. ---------------------------------------------------------------------^--- #78: COMPILER 2.10b (All versions) 5 September 1980 The compiler is erroneously permitting READing into an element of a packed array of char. Bad code is generated. Status: Fixed 5 September 1980. (Appropriate error messages issued.) -----o4------------------------------------------------------------------- #67: INTERPRETER (All revisions -- AOS only) 22 July 1980 *ABORT* When attempting to execute in less than 32 pages. Status: Fixed in AOS revision 3.12. ---------------------------G--------------------------------------------- Release Notice RDS Pascal: 2.11 Page 5 ------------------------------------------------------------------------ #35: INTERPRETER 1.02 (All versions) General problems if multiple files titled INPUT or OU^-TPUT are declared. Synchronization does not function properly and program may crash. Status: Fixed 7 October 1980. WARNING: AT RUNTIME, ONLY ONE FILE TITLED 'OUTPUT' WILL BE PERMITTED TO BE OPEN AT A TIME. -----------------------------------------------s------------------------- #33: COMPILER 1.02 (All versions) A GOTO in dead code which references a forward label causes the compiler to hang or crash. Status: Fixed 3 October 1980. WARNING: THE 'CONDITIONAL COMPILATION' DOCUMENTED IN THE PROGRAMMER'S MANUAL ON PAGE 1-10 IS NOT PERFORMED BY THE COMPILER AS OF RELEASE 2.11. ------------------------------------------------------------------------ Release Notice RDS Pascal: 2.11 Page 6 KNOWN BUGS AT TIME OF RELEASE (2.11) =========================+=========== ------------------------------------------------------------------------ #88: COMPILER 2.10 (All versions) 9 October 1980 The /C (conformance) switch does not flag the comparison of records and arrays using "<>" or "=" as non-sta4ndard. (This is an RDS extension). Workaround: None. Status: To be fixed in 2.20. ------------------------------------------------------------------------  #87: INTERPRETER 2.10 (All versions) 8 October 1980 When accessing a file which is other than a disk file (for example, an uninitialized disk unit) a program cannot perform a SEEK operation beyond the last record written since the file was most recently opened. If no records are written to the file, READs may continue until physical end of file is reached, but if one or more WRITEs has occurred since opening, then the physically (not chronologically) last record written is the last one which can successfully read. Workaround: If you want to READ records beyond those you've writtten you can RESET the file. Status: Interpreter Development Informed 8 October 1980. ------------------------------------------------------------------------ #81: COMPILER 2.10b (All versions) 5 September 1980 The compiler is permitting non-local variUables to be used as control variables in FOR statements. Workaround: None required. Status: To be fixed in Release 2.20. WARNING: RELEASE 2.20 WILL NOT PERMIT THE USE OF NON-LOCAL VARIABLES AS CONTROL VARIABLES IN 'FOR' STATEMENTS. ALL P\ROGRAMS MAKING USE OF THIS NON-STANDARD FEATURE MUST BE MODIFIED ACCORDINGLY. ------------------------------------------------------------------------ Release Notice RDS Pascal: 2.11 Page 7 SUGGESTIONS (2.11) =================== 1) Under AOS, RDOS , and DOS access to contiguously organized files is more efficient than access to randomly organized files. All files written by Pascal programs will be random files. (Under AOS the element size is 4 blocks). Executable P-code files (with the ".PXf" suffix) are, therefore, randomly organized. This includes the compiler files PASCAL.PX, PASCALO.PX. The performance of any program which uses segmentation (see Programmer's Manual, page 1-7) to any great extent can be significantly improOved by copying these files to contiguous files. Under AOS this can be done by (a) determining the LENGTH of the file (in bytes) using the FILESTATUS command, (b) computing the number of elements required to make the file contiguous by ELEMENTS := gLENGTH div 512, (c) renaming the file temporarily: "RENAME TEMP", (d) creating a new contiguous file: "CREATE/ELEM=/TYPE=UDF ", (e) copying the old random file to the new continguous one: "COPY/A TEMP", and^ finally deleting the old file: "DELETE TEMP". Under RDOS and DOS this can be done by (a) renaming the file temporarily: "RENAME TEMP", (b) copying the file to a contiguous file: "XFER TEMP /C", and (c) deleting the old file: "DELETE TEMP". 2) Under AOS you can use the new LINK utility (rather than BIND) to generate new interpreters via the PASCALGEN utility. Simply edit the "PASCALGEN.CLI" macro supplied with the release. TEST.MC v MESSAGE MESSAGE Attempting to execute the interpreter. MESSAGE If it doesn't respond with 'Interpreter OK' MESSAGE then you have a problem with the interpreter. MESSAGE PASINTERP INTERPOK MESSAGE MESSAGE Attempting to compile the source of the test program|. MESSAGE PASINTERP PASCALO/S/V INTERPOK MESSAGE MESSAGE Attempting to re-execute using the newly compiled code. MESSAGE PASINTERP INTERPOK MESSAGE MESSAGE If you got another 'Interpreter OK' message, all is well. MESSAGE PASCAL.PXb? vtF 6/COMPILEROPSYSINICOMPINITSHOWERROCOMPFINIDECSEGMEBODSEGME Copyright (C) 1980 Rational Data* Systems )' R  ݢ ݢٚݢǀݢݣ ޢ ܞ#ݢݣ ݣ ݣ @!l֥֥&PX PASCAL[O][switches] sourcefile[.PA]֥֥switch meaning֥------ -------֥4!/A analysis to @OUTPUT֥/A=afile analysis to afile֥!/C conform to standard֥/E=efile errors to efile֥/L listing to @LIST֥/L=lfile listing to lfile֥!/N no codefile created֥"/S  swap compiler phases֥"/V verbosity to @OUTPUT֥> ۢۢۢNڞ#!2ئ abcdefghi@bl ȡ4ݏ0ݤ ݏ0ݤ á.__?pidD.TMPH@0d 0 0 * ڪ@& ( ())*) )ٚ)ǀ)))))ǀ)) ** (#*<*''á)) ) ''š ) @ۦ@&!& VWƦAOSVP0-ihȡiCCCCChá  ? N,S0C6FFG1Gá"G¾G¾0FFAWEE֥u֥uihȡ)iDDDDDEDháL"S" "@LIST@֥"֥ihȡ(iDD*eDDDDháE_W"EE֥y֥yihȡ)iDDDDDEDháVP ֥վš0֥hվh.PA֥hվh@hh@h.PACh@֥w֥w,֥֥֥ kئ abcdefghi@ ȡ4܏0ܤ ܏0ܤ á$$M$@.WKC@FA@BA@& ֥֥0PX PASCAL[O][switches] sourcefile[.PA] [options]֥֥switch meaning֥------ -------֥!/+C conform to standard֥&/L listing to sourcefile.LS֥!/N no codefile created֥"/S swap compiler phases֥%/V verbosity to $TTO/$TTO1֥֥o/ption meaning------ -------֥afile/A analysis to afile֥efile/E errors to efile֥lfile/L listing to lfile֥p  ۢ%"ڞ#/!2 AZȡ,rA ۡܚá,H ت֥֥󮀂ʀ֥󮀂ʀ :ت֥֥ȡ0ʀ̀ʀ̀ʀʀʀʀá+ Z VW3ƦRDOSVP0-ȡؤá A H I P Q X Y ZֲFCOM.CMֲCOM.CMֲ~ ~>¾˲~¾˄Fcš ֦(F)COM.CM file is too long.ֲ~ j5 z~¾ˡ)²~¾¶ȡy~¾1 Z}rLA֦Duplicate listing files.ֲAL Xáj 1rLA@.LSCrNA,rSA0rCA6rVAPب"ƀƁ ƀCLIFILE  ́!Ɓ!@Ɓ!.PACƁ!@֥w֥w,֥ ֥֥ƀB 0 ؾȡ3¾ ¾ á1 H$ #ȡ$ؤ#á<<<  2֥##Wrong operating system.# q$jvV ~PN  j(&iAA4ؤAND 4ؤ'4ؤ 4ؤARRAY 4ؤ,4ؤ BA4ؤBEGIN 4ؤ4ؤ CA4ؤCASE 4ؤ4ؤ 4ؤCONST 4ؤ4ؤ DA4ؤDIV 4ؤ'4ؤ 4ؤDO 4ؤ4ؤ 4ؤDOWNTO 4ؤ4ؤ EA4ؤELSE 4ؤ 4ؤ 4ؤEND 4ؤ 4ؤ FAF4ؤFILE 4ؤ.4ؤ 4ؤFOR 4ؤ4ؤ 4ؤFUNCTION4ؤ 4ؤ GA4ؤGOTO 4ؤ4ؤ HAIA4ؤIF 4ؤ4ؤ 4ؤIN 4ؤ)4ؤ JAKALA4ؤLABEL 4ؤ4ؤ MA4ؤMOD 4ؤ'4ؤ NA4NOT 4ؤ&4ؤ OA4ؤOF 4ؤ 4ؤ 4ؤOR 4ؤ(4ؤ PA4ؤPACKED 4ؤ+4ؤ 4ؤPROCEDUR4ؤ4ؤ 4ؤPROGRAM 4ؤ!4ؤ QARA4ؤRECORD 4ؤ-4ؤ 4ؤREPEAT 4ؤ4ؤ SA6,4ؤSEGMENT 4ؤ04ؤ 4ؤSET 4ؤ*4ؤ 6,4ؤSTRING 4ؤ34ؤ TA4ؤTHEN 4ؤ 4ؤ 4ؤTO 4ؤ4ؤ 4ؤTYPE 4ؤ4ؤ UA4ؤUNTIL 4ؤ 4ؤ VA4ؤVAR 4ؤ4ؤ WA4ؤWHILE 4ؤ4ؤ 4ؤWITH 4ؤ4ؤ XAYAZAZAeeآآddآآccآآbbآآآ``&آآaa>Cآآc_ _آآآآeآ آ آcآ ۦINTEGER ۢ eۢ ۦREAL ۢ dۢ ۦCHAR ۢ cۢ ۦBOOLEAN ۢ 뺂bۢ ۦTEXT ۢ aۢ ۢۦMAXINT ۢۢ eȡV ܢ báܦFALSE ܦTRUE ܢؚܢښܢábٚ ۦNIL ۢ `ۢۢۢum mئ آ آl lئ آ آآآk kئ آ آآآآj jئ آ آآآiiئ آ آآآ آآآآآآOdآhhئ آ آآآ آآآآآآآXƀ `6ƀƀ1READ READLN WRITE WRITELN EOF EOL9N PRED SUCC  ORD  SQR  ABS  NEW  FILETITLPURGE CONCAT LENGTH DATE EOLCHAR FSUBSTR INDEX MOVELEFTMOVERIGHEXIT IDSEARCHTREESEARTIME FILLCHARAPPEND REWRITE PAGE CLOSE  }[SEEK !RESET "GET #PUT $SCAN %SIZEOF &PACK 'UNPACK (ODD )CHR )ȡ}ʀٳ0ƀRڡ  ̀ʀʀʀ ڡ ʀʀʀʀٚʀáxPWROFTEN?$MEMAVAIL?ROUND ?TRUNC ?SIN ?COS ?LOG ?ARCTAN ? LN ?  EXP ?  SQRT ?  MARK ?   RELEASE ? !SYSCALL ?#6 džpMLܠMONȡOܹ OO eOde~ OO dOeadZ OO `O< OO `O$nfM T:M[ݡ  OOOO?ݡO.O؟ˡآO ښOؚNápO8[Ys5432fUTS1QONWGrqFE.DA?>=+*¾ë90;0;d 0; "0; ȡ.ܤޢޢ ápǂCopyright (C)  Rational Data Systems(Py^4|t t  ɡ ddڏ ۂق܏B خ'Rational Data Systems Pascal Compiler [خrelease ٥. . ɡخ0خ Lخ , overlaidخ] خline seg procخ==== === ====gخA :٣  ٣  ڥt| ت ֶ ,ֶ  /  6خ"ۥ"ۦ cfompiled on ۲ ۧX ۲  ۧ; ۦ at R šخR :خR :I šخI :خ0ۧI :@ š خ@ خ0ۧ@ -6,0šخ վۦusing the optionšخs- ֦Byteswap6֦ Conformance, ֦Nocode0 Swappingخ.  ;HX qSundayxMondayiTuesdayY WednesdayGThursday6Friday'Saturday_Ŭyl_QA2%H January February March April May June Julyr Augustc SeptemberQ OctoberA November0 December ~sh[K=.1֥Z ֥ ֥ line seg proc off nst ֥u ֥u ֥֥֥ ֥  ֥y ֥y  &] K;HX%RI@ ,֥Z n BMC ggPROGRAM   x declarations !áwátá>á"Ś˫á)áaF6;3srEXTERNALt֥ ֥u  o og ns  X^tLn\ Z xAخError Message Summaryخ===== ======= =======Xخ ٲ@$@ ERMSGFIL PASCAL.ERP֥֥u֥y֥;a`ȡtaإ Z P֥֥u֥y֥`áva <ZخSegment Numberڦ Segment Nameڦ Size (Bytes)ȡ>٤ˡ"خ ۢ á;ت@&@$%$á%$¾&$$%%$ɡ6$v$6@٦@OT~٪@$$@$ A$B6$ت@٪@F EEHHǀHGH<á HHHE#HGHǀH$<á HHHE#F!F#~֥֥A ۦ lines#֥u֥uA ۦ linesP#֥֥A ۦ lines֥uP֥ Mȡ ڤ áȡ8ڤȡܢ¾ ááȡ áʾȡ֥¾ áʾ.ȡ á!ȡ á֧; ֧H ֧X ֧R ֧I ֧@ ֧<  ֧F ȡz3 á观+  *  ֧Z ɡ 槂,g֥ ZY!  ֥<֥3+* եվU եվX֥ե֥{0Wwp2 Ȅ Gǀ  0ȡ ǀ  (ǀ &á+ ȡڢ¾ áBǀ 3áxáÄەݚš) ۮڮȡ^# áá cس0$@ L'Ȅق 4JȄق #Ȅق  @MÍǀ Jسášá ǀ :&n^ǀ Ȅ =á&ݧWWcáWWX '9á ݢښ  bˡ! ٢٢`m ۢˡ iΥXۢ뚧76`mɡ/ġ 9!٫¾¾<j ˡd˄ `ádá33Z3á' 6n-#&: <> ;% V˄ $ ˡ[Eá+ 8n;ˡ.';!=? M3!lˡnV&-M.á% 2n$ˡ"Ǿ6  ^K   W|      á ' 6n   á   !ná '6   8  Í Ä  áP   A ˡǖ   Eի ?ˡń 弄 ;֥ 弄 á ݟˡˡ NJ ˡ ˡqݟˡL< D   ˡ  š}Nj   ˡL3á DB  @$ń ˡáZáˡˡ nj áˡ  á ǘ   $ , $ 8  Í Ä  áP   ˡń  ˡÍ~á    OaáV  O >>  á#ˡń Ǎ GE ޭ/162 #: ˡ ō  á c ˡȡ ܟ˄eád d \ cá LˡC  c˄%P ˡCǁ6˄@ܫ ܫ  oDg ZS "cá)*ܣQ (%(ǒLxP_M!  á $k^0ֲ"ˡ ˡCá#ֲ  eˡO OO #K.ءINPUT OUTPUT  .ݟáء3caˡء4Hޣá ޣ á %ޣ 2nޣ ޣ ޣ á 'ޣ 6nޣ ޣ š ˡgeO VdOEcO4'Oˡdz áDzt!á1V6ֲ"6!8@"Vֲ" áaááعá: .ֲ"Q!"ǮRá .R!"R! .á[m>> ֲ R(ǰ6OǸ X# Vֲ"áaáOá O>.Oá/V6ֲ"pS!&ڡtV.O6R!"١V6O VO $ˡɡ %á+ֲ&ˡ eˡǹ ٧dáGءá,ֲ" ˡ eˡzO٧eáءO ٧cáءOn٧báءO!YءOD7ˡ ءֶֶO (&á#V6ֲ&%&*2'Vֲ&  áaááعá, .ֲ&%&' % .(&' .áR>>  ˡń ֲ 6O2ڬ} ,) Vֲ&aá5á O!.áֲ&%&%.(&'١V6O VO *ˡbˡsVdá5GçD%áF áp1 áVߣ á ߣ ˡ+ öÄ.á  ȡ ááٟá~ֲ"ٟ˄ڟˡ٣áȡqcÄÄǀ&  / _  á 6çDeڧd d CÄ,'Pˡ ݕˡǎګ Há=ڣɡǿágá ˡǚٟˡˡái(ٟˡߣ á ߣ *ߣ á Nߣ ߣ á Sߣ  Mߣ ߣ  Rrt 42ܣ áܣ ޳``V޳`á޳@t ޳" ޹#$)*1ˡ ġe ˡ%eádá e ˡ%eádá e  >e +á Oe   ȡD  ˡ eˡáǤ á ˡ eˡá% ,-ˡ eˡCb Dˡ eˡDc Z)RCExutq]ZW*,)02*6Hߡá2vYeá d eá اd*3ddÍ34弄: 弄^ܣá 'ܣá 1 ˡá ꧂e ꧂d ác   _   á*7bˍ ˡbˡ LJ    á ˡˡ Lj  Ȅ   #áH   lj ޡȄ   ޡ   ߡ  ˫쓡9á ߡ1"ppp  ppp U&N "$&(*,.02468:<>@BDHud@!(Z7 7'á   7 ܟ˄ 4ܧeeÄ/ܧddÄ   3ܧddÄ  pܧeeÄ  RܧeeÄ  4ܧbbÄ    .lP  $B6(`á   6eá á %dá á  ˡ  (á   6 ܟ˄ 4ܧeeÄ/ܧdǾdÄ  y4ܧeeÄ/ܧddÄ  0ܧbbÄ    u.  5ˡ ەˡٚ,8JɡJ;5)ácÍÄˡȡ   5cÍÄ ˡȡ ܟ˄ á+á   ǂ ˡ4 8  P֥ 8 _  ܧdá  ǃ DŽ  vUcÄ Aܧc1R         ˡ   4   0 <5 F4 <1 20 (7 /  D<*6$b   nֲ@á ֲ30:ֲ9弄˫쓡 á^:< D=ֲ  á4==ֲ 9== á2 9 ==ֲ9==  >ֲ  9ٟˡ٧dÍ ǐ á ֲÜٟˡcUܟˡ# ȡ áǜ   ܚ ޚ ۟áښǓ˫쓡á==ֲ9弄==ڟˡ9 ˫쓡 썡 ݟˡv ݚܟá ,ά 9  š   ɡ  ݟá á]ONvwT ? ==ֲ9弄˫쓡== áֲ 5QS l@ ֲ@m áǼ==ֲ9==9 \A  š á[ á   Ǜ؟ˡd ǏֲAáaֲfQˡGˡ9+ ؟ˡçD. ǑǻֲǀoáHDֲ@ˡGˡ9+ ؟ˡçD.  7ֲ@á6! 6 9   áP ==ֲ9==  6 C!  @Bá 'kֲBˡyám ɡ` á ۢۢۢ-8 ۢۢš˫쓡áǽ==ֲ9==ڕٕ CJɡJ"ád ݤˡ ݤޟˡ* á ǥ   á7K0H弄 á&|ܣá :I߹(=;?6B1;,>'@"AC0/0/ !&I# @97D W؟á!t??----??x??----?? txbody أáá ˡ ˡákšY2 62 *ˡ Qޕ( á A> ܟˡܢ /c nçş˄  ˡ V2 2 >aánˡXşáKŢ;INPUT Я OUTPUT Я OV2 ǀ& ¾ á ¾ áO VO ˡV2 O ˡV2 Oֲ9弄˫쓡 á   ˡ! V2 O á-- ܟˡ$`mˡǨާW š륄Xߤ ؟á ֧ ֧  ?š7ٕ ֧s ֧n 88Z땧?ɡA?낫? !as?.tv#"*20 5Q=֥  á֧o蓼o ܓ-o áo 蓼o 弄ܓo á`<B˧3nÄ. =ݧoÍ | ( t  RL64l  z" V "&"l" ##҄$h&$&0 *r*,,,+n,-v-./,/ZDҖـڀɄńڂ0á ڀـܡ ڏ.弄弄á ˡ á=   ߚ   @  !"F"ˡߢ ߢ á,á  án  ǔ#á ߢ ˡ ߟˡvߢ~  ޚ #áǺ ߢ ˡkߟˡ7á-ˡ&dá$š fߚGܟ$q1 nٟ˶k٧e٧d˄8 1)ġ+á@š4 ɡڸsu2N @š  ڢ ڢڢڢ/ ł ڢڢ ˡ   ٶ˄/bڣ %ڣ áڢڣ ڣ Ȅ ڢڢ٢٢٢á   ٢ ٢٢٢. . á! ֶ á8áX  ˡ;ȡ/d  ءֶ n%ֲ&ֲ ł áW   ֲ ˡ o  ٢٢ ٢٢   ˫쓡áBJ9áXá ֲ(  š  öń ˡ%      ł  á%Nֲ-˫쓡  썡 jjS(   ááA    ߚ  A ˫쓡á. ˡ álˡ n á) Ǚ ޟˡ ߚ á ܟ+084p   آآál. . á+  إآ  آfآ f# ˡ ˡ    弄 弄弄á +á&弄Y,áá    ߚ  t ޟˡ7ȡ(ާdá mާeá Ǖ ޚ ˫쓡á[ áT  ˡ á "ȡ   ˡ ;&t˂ KF@-  GHI ?š J ȡ '  ߟá-á ɡ   ł   ߚ w  á_*á áU ߟˡ%š ߧdߧeÍr  ߚߟˡ4 ɡTɡ ǩ.áW   á V ߚߟˡ!á6 >3á|ˡǴlߧeá8ō   _ ǀá\ Jܟá139;=?P$a/ "áY ؟{ٓˡ Ǧٓ!ۢۢۢڢؚ Bֲ ˫쓡ác ˡֲá ۥۢ ۢۢ) Äֲآ ٚآá%?ֲb ˡ"ֲá ݥݢ ݢ) ÄǗֲڢ ۚfٟˡ+گ٧fˡآfá%Kֲ>rvfˡ fx á/ ݢݥݢٚݢ ݢn#Lֲ˫쓡á1ֲٟˡ=ݢ ۚݢá ۟ˡb7áݢ  ؚá%Mֲ|弄fˡ f15 @ ֲáw@Oֲ!@á  áK   á ߚn  Pֲ.˫쓡 áNá@  ˡ á áy ȡ  / ޟˡ"    ˡ  (Q(á)@Rֲ!á+C+ݢꚟ ˡ< ޚáˡš   ޚܟN v, r   ns.`֥A :ڣ  ڣ  ڣ ȡ֥. á֥`֥uA :ڣ  ڣ  ڣ ȡ֥u. Bá֥u) 0áR3N !qrr8 ?Y ꫂQ5á֥ ˡFáÄ Äá Ä ÄǠáb^  nr횧3 Ä Ät#qšqqrǕárrá}ˡDˡ2    š ˡ& ˡU  r" is sn nɡ nn ɡ7 á áá|z ˡ x ˡˡ ֲ {ádåFORWARD ЯBǡápDֲASSEMBLEЯ61áS ֲ+ MˡVȡ¾ áˡ   ֧n 88Z땧?ɡB?낫?as{?!åEXTERNALЯ6áǯֲ* Mˡ<ȡ¾ á ֧n 88Z땧?ɡ?낫?as?Q !P tx declarations   o o o VV2\áZL á! ߟá   á ߢߚGteޟˡޢ  4 ޟˡ  6ˡٚښٟá, ޢޢ aޢnޢ֧aޢ  ݚRINPUT +INPUT ֦INPUT OUTPUT OUTPUT ֦OUTPUT ֥؟ˡ آ0֥+202á3nÄL á á á3nÄMTnç3 ˡ弄܄Q z@z V D x L<nV2f0`20 . oá 0Nǀۡ (áٟڟÍˡ'á á ٧`ڧ`ÍxlA/Í  ÄÄ}pf 弄2弄%á?ác( ާ_ ޢޢ ǂ  ݥ (`á pr ád   ˡAާeá á-ާdá" á   iT"á áeݥ5$á" á dݥj>ޚ  v ڟá  ؚ8؞áeá ؞á٢ؚ٢ ؚآ آ<d؟ˡ,٣`٣ á٣ á ٣u : rġ6aؤš֧?낥aؤ ֥aؤ á ֧r 땧?ɡE ?낚?8k Mš 7ؿ(  Mš 79-áڿٿ ٿڿX á "اcáˡ > 4 15C9#֥9/41Bw/֥šۢ|¾Wádۢ|¾/¾پۢ|¾ɡۢ|¾ɡg )؂?š ؂"AAP ž 5ꫂQ뫂Q4¾ ˡť¾Fš¾)å¾*ľ}Í¾*ÂC@q |ئ |ؾ¥¾ť¾ ;};)å¾*Äk x@ ٥¾|Ú6! H¾-á,٥¾0٥¾0j"¾=áF"!"ۡڍڄٓ  ܡ+-¾R l 6ƀƀ@ (ƀ򥀗¾ƀ ֥[ ƀ ֥P' ƀ ֥E P֥ƀ ֥D !~1*1֥9֥9C4/ gCr` m"$&(*,.02468:<>`@1DFHJLPR(VX^ڹ ̀̀ʀʀ̀š )ʀ¥¾¾'á̀¾'ˡʀ̀% ʀʀá ¾-p̀ʀʀʀʀʀp =#  ''¾0ɥ¾9ō ¾.áS¾.ˡG¾¾ ¾ \¾-á  ¾+á¾ǽ ɡáb߮ ȡJ å¾0 ń ō  ¾0á" ܫ߮ ȡ% ¾0á ޮġ+¾0ޕ$á ݮ ȡ ~k¾0 á á $  $$ f8Fj$0ȥ¾ å¾ Íȡ /¾#$  쥀¾*á 쥀 ¾.á #쥀¾=á ' ( ( ' ) ¾   =>) )¾=á  '{{w "$&(*,.02ZT2=?A=CEGIKMOQSUWY[]_acegikmolrt}/á)[  ,ۡ ۡǀ2ٟˡá cÄ"JɡJ4P֥A  ڧs ڧQ 5 ֥ ֥= lš5֥֥l֥֥ml ֥ á֥4֥ERROR% ž ٥ɡE֥xٕȡ"ٕáq֥yError at line ڧA ڦ in ڥxڦ of ڥt:֥y ڥ֥y%q֥uError at line ڧA ڦ in ڥxڦ of ڥt:֥u ڥ֥u%q֥Error at line ڧA ڦ in ڥxڦ of ڥt:֥ ڥ֥% ړ@^˄ٹ܂ۂxwp+^h$  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfv ġI ۤڟˡ,áڣk.á.Jhm9k,Ujlihښ۫ ؟áٟ ٥ˡٟ  ? ؾš ¾ؾń/ ƀؾƀ ؾ¾áؾ šehƀƀ֦ ƀƀƀؾٕƀn Yš¥9YٞقYقYY؍, ,֥YZZ9 ٕán|ƆƇ9EƆWORKCODEƈ9ƈwƈ9INCLFILEƉwƉƉwWORKSYMƄƅ1ƄOVTPVTƅuƅƅuANALFILEƅƆ5ƅLPƆyƆƆyERRFILE:֥OUTPUT֥֥ 3 ˡO ˡhAA :֥Ɔƈ9ƉwƄƅuƅƆyG6 <~ |. F0:`4b`HBpN'9-á ٕؕقɡMٮȡۂáخȡ#ۂɡۂá0ٮȡ#ەɡۂá$Xv TcÄFá:á5cá+pܢܢ󿧂p _ ˡ_ zֲ"ˡ)áˡááֲ"ٟáǞfˡǢXˡRاdÍǟ=-؟ˡá  A 3Pá`!á g؟ˡأ áأ أ fz8V2ֲ"ɡO˫쓡2ɡ šث _ ٚ f{ֲ2áǶֲ ˡ eˡáǷֲ  ˡ eˡO2٣ɡ ٣šث٫ 9láˡe ,:ֲ ˡ ˡ 1+$  "/Olֲ"ˡ ˡˡǪֲ ON3ֲ ˡˡ aˡOJsdá  R8R6R4( =ֲ ˡ%ˡ}@a˄($O b ;O b /Oc #+! -+D ֲ ˡ ˡ!  OZ,Dֲ" 8á=ֲ"   ˡv ˡ9f <Xڶ 8ֶ  ٕD ˡـš8.&ֲ" 8ˡBˡ2;#˸ֶ ٕ8v/ء-6BDֶ$ @BP0       y,&á.á>//á?.ߟ ˄ ˡ:8 66I!١666P.ٓ0١6660١#ء;?ء:>9 "-, ˶á&:<e"ˡ ڤˡ<١9]ٓ<ٓǧ7á ڤ ڤإ ڤ֧nەb ;׃JJK]\\ɡ\\š\ \MMMMD M M MMM M M rM cM TMEM6M' uh[NA4L\^7 bDGoˡ 8 rأnso !o o3 o áobf4 ɡ ؚ ؗ ,/: Vvپɡ ڮەġ¾ ˡáP X&g:^  0ۂÍ#) 6'g&٪@ɡ̀ʀ'ȡʀ&&&&ʀk&| ɡ̀&dɡ̀̀'ڥ&ʀ&('ڥ&&'ʀ&̀&ʀá'DŽšWخʀ'ƀDŽƀʀخ'ƀDž'DŽƀʀخʀ'ʀ'&J%PASINTERP.ER?? r Unknown P-Machine Error #Unimplemented P-Machine Instruction Range Error on SET Operationruction Subscript or Subrange Errornruction Integer Divide-by-ZeroErrornruction  String Range ErrorZeroErrornruction SYSCALL Parameter Errorrrornruction Error Reported by Host Systemuction $Dangling Pointer (Value not in Heap) Heap Overflowter (Value not in Heap) %Attempt to EXIT an Inactive Procedure .Called Segment Can't Fit into Available Memory `\Call to a Non-Existent SegmentAvailable Memory  5Incomplete Read of a Segment by Host Operating System 0Attempt to Open Multiple Files Entitled 'OUTPUT'ystem .Heap Overflow During Internal ALLOCATE RoutineT'ystem ^Program Filename Too Longrnal ALLOCATE RoutineT'ystem Integer Multiply Overflowrnal ALLOCATE RoutineT'ystem +Unknown Error From Floating Point OperationineT'ystem (Overflow From REAL to INTEGER ConversionionineT'ystem VFloating Point UnderflowTEGER ConversionionineT'ystem Floating Point OverflowwTEGER ConversionionineT'ystem Floating Point Divide-by-Zero ConversionionineT'ystem No User Program SpecifiedZero ConversionionineT'ystem Xs/Attempt to Execute a Separately Compiled Module'ystem -Current Interpreter Does Not Support Compilerle'ystem Error on READ of Integer or Realport Compilerle'ystem Error on READ of Realger or Realport Compilerle'ystem 'PWROFTEN Function Argument Out Of Rangempilerle'ystem Overflow From EXP Function Out Of Rangempilerle'ystem "Negative Argument To SQRT FunctionRangempilerle'ystem +Non-Positive Argument To LOG or LN Functionerle'ystem ڎAttempted GET Past End of filer LN Functionerle'ystem +Error #33: Report to Rational Data Systemserle'ystem +Error #34: Report to Rational Data Systemserle'ystem 1Requires Capability Not Generated for Interpreterstem ̟)Field Width in Output Format Out of Rangeerpreterstem Security Violationput Format Out of Rangeerpreterstem External File Name Too Longt Out of Rangeerpreterstem "Record Number Out of Range in SEEKf Rangeerpreterstem &!FILETITLE Applied to an Open FileKf Rangeerpreterstem !Attempted I/O to an Unopened FileKf Rangeerpreterstem ,Program/Interpreter Revision Incompatibilityreterstem %Non-Positive Divisor in MOD Operationibilityreterstem  Integer ADD or SUBTRACT Overflowationibilityreterstem Stack Overflow SUBTRACT Overflowationibilityreterstem &Number Stack Overflow (Internal Error)bilityreterstem )Limitation of Evaluation Release Exceededityreterstem 2Unresolved Assembler References -- Must Be PLINKedtem 1Unresolved External References -- Must Be PLINKeddtem 'Program not PLINKed to this InterpreterBe PLINKeddtem INTERPOK.PA?? [SGprogram interpok; var output : text; begin rewrite(output); writeln('Interpreter OK') end. READ.ME) $:File: READ.ME (RDOS/DOS Version) HOW TO INSTALL RATIONAL DATA SYSTEMS PASCAL ON RDOS/DOS The release consists of a PROGRAMMER'S MANUAL and either (a) a single reel of magnetic tape, or (b) one or more diskettes. The release files are divided into three groups: Group 0: PASINTERP.SV Pascal Interpreter PASINTERP.ER Runtime Error Message File PASCAL.PX Standard Pascal Compiler PASCALO.PX Overlayed Pascal Compiler PASCAL.ER Compiler Error Message File PINFO.PX Program Information Utility INTERPOK.PA Test Program: Source INTERPOK.PX Test Program: Executable TEST.MC CLI Macro to test things out MANUALn.nn Manual Update for Current Version RELEASEn.nn Release Notice for Current Version READ.ME (This file) Group 1: MANUAL Magnetic Copy of PROGRAMMER'S MANUAL Group 2: PASCALGEN.PX Custom Interpreter Generation Utility P****.RB  Relocatable Binaries for PASCALGEN PLINK.PX Pascal Linker Utility Installation From Magnetic Tfape: ------------------------------- The system is delivered on 800 bpi 9-track magnetic tape. The tape contains three files in standard RDOS-Dump format. The first file (#0) is a dump of the Group 0 files, and so on. Load the files using a 5*sequence similar to the following: CDIR PASCAL DIR PASCAL INIT MT0 /Or whichever drive you are using LOAD/V MT0:(0,1,2) /Load the desired files PRINT RELEASEn.nn /Be sure to read the Release Notice! TEST /Try to execute and compile Installation fp rom Diskette: -------------------------- The system is delivered on two RDOS/DOS diskettes. The first diskette contains all the files from Groups #0 and #1 (above). The second diskette contains the files from Group #2 -- the PROGRAMMER'S MANUAL. Execute the following or equivalent: CDIR PASCAL INIT PASCAL DIR DP1 /Or your own diskette drive MOVE/V PASCAL DIR PASCAL PRINT RELEASEn.nn /Be sure to read the Release Notice! TEST /Try to execute and compile The TEST.MC Macro: ----0------------- The TEST.MC macro will attempt to execute a very small program and will then compile and re-execute the program. It is self-prompting as to the state of the software. File: READ.ME (RDOS/DOS Version, Page 2) Evaluation Release Restriction(7s: ------------------------------- 1) The interpreter shipped is customized for a particular hardware configuration. Neither the PASCALGEN utility nor the .RB files needed to generate an interpreter are supplied. Similarly, releases on diskette inRclude only one diskette -- only Group #0 files are supplied. 2) The interpreter will not operate beyond 60 days of the time the system was configured by Rational Data Systems. This date is obviously dependent upon your system date. Since system dates are so easy to change, we have implemented further restrictions. 3) A maximum of 10 files may be opened by any program at one time. This number includes the executable file, '.PX'. 4) All files opened by any Pascal program other thanL{ the compilers will be deleted by the interpreter. This includes the program file, '.PX'! 5) You may not use the APPEND procedure in the evaluation version. 6) Since PASCALGEN is not available, neither are the facilities of assembler interface. Note that the above checks are all performed at runtime, not by the compiler. We suggest that you run your programs via a CLI macro which first copies the program and input files, then executes the copy of the program file, using the copies of the input files. The only way to preserve output (which would be deleted if sent to disk) is to send it to a hard copy device or to mag tape. The Overlayed Compiler: ---------------------- On an unmapped system the interpreter and PSascal program must share your limited address space with the operating system. This restriction will manifest itself immediately if you attempt to compile a program with the standard compiler ("PASCAL"). We have designed an overlaid compiler especia"lly for the unmapped user called "PASCALO". You will have to use this version of the compiler on almost all unmapped configurations. For details, see the section entitled "Overlaid Compiler" in the new manual. In addition, study the use of the "/S" (sLwapping mode) switch when running the compiler. On many systems, you will have to use both the overlaid compiler and the swapping mode. On all systems there are finite limitations regarding the size and complexity of programs which can be compiled. On a mapped system (AOS or RDOS) we can compile our compiler by using either the overlaid compiler or the "/S" switch. On an unmapped RDOS system, we cannot compile the compiler even using "PASCALO" with the "/S" switch. NOTE: e---- For standard releases (not Evaluation Releases) the default interpreter, 'PASINTERP.SV', has been generated for a minimal RDOS/DOS system, a Nova 1200 with no options. Until you generate your own interpreter you will be running with this interpreter which may be significantly slower than what you should be using. Build a customized interpreter using the PASCALGEN utility as soon as possible. MANUAL.?? a Programmer's Manual Pascal for Data General Computers Licensed Material - Property of Rational Data Systems, Inc. 0-1 NOTICE ====== Rational Data Systems, Incor(porated (RDS) has prepared this manual for use by RDS personnel, licensees, and customers. The information contained herein is the property of RDS and shall not be reproduced in whole or in part without RDS's prior written approval. Users are =cautioned that RDS reserves the right to make changes without notice in the specifications and materials contained herein and shall not be responsible for any damages (including consequential) caused by reliance on the materials presented, including, but not limited to, typographical, arithmetic, or listing errors. Copyright 1980 by Rational Data Systems, Incorporated All Rights Reserved Revision History Original Draft [0.00] July 1979  First Edition [0.10] September 1979 Second Edition [2.00] May 1980 Third Edition [2.10] September 1980 0-2 Licensed Material - Property of Rational Data Systems, Inc. CONTENTS ======== 0 INTRODUCTION 1 EXTENSIONS TO STANDARD Strings . . . . . . . . . . . . . . . . . 1-1 Segmentation . . . . . . . . . . . . . . 1-7 Miscellaneous Extensions . . . . . . . . 1-9 2 DEVIATIONS AND LIMITATIONS  Heap . . . . . . . . . . . . . . . . . . 2-1 j Case Statement . . . . . . . . . . . . . 2-3 Restrictions . . . . . . . . . . . . . . 2-3 3 INPUT AND OUTPUT 4 THE RDS COMPILERS Input . . . . . . . . . . . . . . . . . 4-1 Options . . . . . . . . . . . . . . . Q. 4-1 Listing Output . . . . . . . . . . . . . 4-5 Analysis Output . . . . . . . . . . . . 4-9 Overlaid Compiler . . . . . . . . . . . 4-11 5 INTERPRETER AND ASSEMBLER INTERFACE Introduction . . . . . . . . . . . . 9 . . 5-1 PASCALGEN Utility . . . . . . . . . . . 5-4 Assembler Interface . . . . . . . . . . 5-7 6 SEPARATE COMPILATION FACILITIES 7 THE PLINK UTILITY 8 GENERAL ISSUES Inter-Revision Compatibility . . . . .a . 8-1 PINFO Utility . . . . . . . . . . . . . 8-2 Efficiency . . . . . . . . . . . . . . . 8-3 Type Compatibility . . . . . . . . . . . 8-9 Hardware Performance Variations . . . . 8-11 Environment Inquiries . . . . . . . . . . 8-12 Data Representation . . . . . . . . . . . 8-13 9 USING RDS PASCAL UNDER AOS 10 USING RDS PASCAL UNDER RDOS AND DOS A RESERVED WORDS B LIST OF INTRINSICS C COMPILER ERROR MESSAGEܾS D RUNTIME ERROR MESSAGES E ASCII CODE CHART INDEX Licensed Material - Property of Rational Data Systems, Inc. 0-3 PREFACE ======= This document is the "Programmer's Manual" for the Rational Data Systems implementations ohf Pascal. The present manual describes our language extensions, and differences between our Pascal and the proposed ISO standard. This manual is not a textbook on Pascal. It assumes a reasonable familiarity with the language. It is intented to be 5 used in conjunction with a copy of either the Jensen and Wirth book, "Pascal User Manual and Report", or the proposed standard; consider it an "exception report." We have attempted to describe in detail the differences between our Pascal and the standard. This includes both variations (which are few) and extensions. If this manual is viewed in this manner and is used in conjunction with the other materials, you should have no trouble programming in Rational Data Systems Pascal. Specitfication Changes This manual is NOT intended to be used as a specification for Rational Data Systems' Pascal. As usual, any specifications are subject to change without notice. But there is another reason that we ask you not to become 'locked-izn' to what you read here: our Pascal WILL change. Such changes may occur as the standards are adjusted and clarified. If we develop improvements of our own which offer a significant advantage we shall incorporate them as well. We recognize the burden that this may place on our customers, and we intend to do what we can to aid your transitions to new versions. Typically, we would support old and new features for some time, and eventually phase the old capabilities out of the product. At Yother times we may be able to provide a 'filter' or 'validator' program to help you convert old programs to a new format. In any case there is one suggestion which we cannot possibly overemphasize: SAVE COPIES OF ALL SOURCE PROGRAMS! Even for that "We'll never change it!" program, remember that the interpreters are also subject to change. If such changes occur, old programs will require re-compilation in order to be executable by the newest version. 0-4 Licensed }Material - Property of Rational Data Systems, Inc. EXTENSIONS ========== Character Strings The predefined type STRING is a variation on the standard type PACKED ARRAY OF CHAR. For each STRING variable you declare, the compiler sets up anh array in which you can store a varying number of characters. Implementation of String Variables A STRING[] is stored as a PACKED ARRAY [0..] OF CHAR, and array element 0 is used to record the current-length attribute, a value in the range 0..25c5. The remaining bytes, 1.., are the data-storage area in which the characters of the STRING are kept. String References Because a STRING is a PACKED ARRAY OF CHAR, it is possible to use a subscript to refer to a single character in a STRING, thus: var st: string[99]; c: char; begin st := 'abcdefg'; : c := st[5];  { same effect as: "c := 'e';" } Unless you deliberately suppress range checking, your program will be prevented from accessing bytes outside the current extent of the STRING. For example, assume your program contains: st := 'abc'; After this assignment statement is executed, only the bytes st[1], st[2], and st[3] will be accessible. st[0], the length byte, is never accessible when range checki9ng is in force. The statement: st := concat (st, 'd'); will invoke the 'concat' intrinsic (described below), which will both change the length byte st[0] to 4 and change the byte st[4] to 'd' whereas: st[0] := chr(4); st[4] := 'd'; will normallqy cause runtime errors. Licensed Material - Property of Rational Data Systems, Inc. 1-1 String Declarations Every STRING has a declared length, which specifies the maximum number of characters it can contain. The declared length is specified PK in square brackets following the reserved word STRING; it must not exceed 255. The minimum length of every STRING is zero; in other words, so called "null strings" are supported. As with all other data in Pascal, there is no automatic initialization of STRING variables; do not assume that a STRING will be null (current length = 0) when allocated. Examples of STRING declarations: var little: string[1]; { either 1 character or none } biggest: string[255]; { largest possible STRING } % badstring: string[9999]; { not permitted } String Constants String constants consist of ASCII characters surrounded by single quote marks (apostrophes). A literal null string (consisting of no characters at all) is written as two adjacent apostrophes. If you need to create a string constant that contains an apostrophe, you must write the apostrophe twice within the constant: biggest := 'it''s me'; An assignment to a STRING variable modifies its dynamic length attribute. In this example, tjhe dynamic length of BIGGEST will become 7, and its value will be the 7 characters "it'sme". String Operations Assignment to a STRING copies characters from the source to the destination string and updates the length attribute of the d estination. Comparison of strings is expressed in the usual Pascal manner, with the operators >, <, =, <>, <=, and >=. All comparisons are lexicographic, following the standard ASCII collating sequence. Only strings of the same length can res:ult in an 'equal' condition. When strings are compared, the following rules apply: 1. The shorter string is compared, one character at a time in left-to-right order, to the leftmost portion of the longer string; remaining characters in the longer string are ignored. (If both strings are the same length, the number of ignored characters is zero.) 1-2 Licensed Material - Property of Rational Data Systems, Inc. 2. The first unequal character comparison determines the result of the string comparison. No more character comparisons are performed after the inequality is detected. 3. If all corresponding pairs of characters are equal and the strings are of unequal lengths, the shorter string is considered 'less than'  the longer string. If all corresponding pairs of characters are equal and the strings are of the same length, the strings are considered 'equal'. Note in particular that trailing blanks are not ignored in STRING comparisons. The value of ('AB' = 'ABԩ ') will be FALSE. Concatenation := concat(,,...,) Returns the concatenation of through . For example: s1 := concat(s1,'xyz') will append 'xyz' to the string s1 provided there is room wit*hin s1's maximum length to do so. If s1 is not sufficiently large, a runtime error will occur. Index := index(,) Returns the position of within . Scanning is left to right, so that the value returned is the position of the leftmost occurrence of found in . Characters within are numbered starting at 1, and the position of the leftmost matching character is returned by the intrinsic. If there is no instance of in , the intrinsic returns zero. For example: i := index('abcde', 'cd') will assign the value 3 to the integer i. Length := length() Returns the current dynamic length of the . Licensed Material - Prouperty of Rational Data Systems, Inc. 1-3 Substring := substr(,,) Returns a substring from a string. The substring consists of characters beginning at position within . Aes with INDEX, numbering of characters in begins at 1. For example: s1 := substr('abcdef',3,2) assigns 'cd' to s1. Input and Output of Strings If a STRING variable or constant is used in a WRITE or WRITELN statement, the exact number zof characters it contains (current length if a variable, actual length if a constant) will be transmitted to the output file. If a STRING variable is used in a READLN statement, characters are copied from the input file into the STRING variabRCle until EOLN becomes TRUE. (The blank that represents the end-of-line is NOT copied into the STRING variable.) Because EOLN is used as the end-of-string indication, you must use READLN to read into a STRING variable; it is illegal to use READ. Only one STRING variable is permitted in each READLN statement, and it must be the last (or only) argument of READLN. (Otherwise, you would in effect be attempting to read more than one line with a single READLN.) If the input line is longer than{ the declared maximum length of the STRING variable, only enough characters will be assigned to the string as are necessary to fill the STRING to its maximum length. (Note that it is the declared maximum  length, not the current length, of thhe STRING, that controls the input operation.) Remaining characters of the input line will be discarded, and will not be available to the next input operation on that file. Type Compatibility of Strings Standard programs originally developeod with a compiler that does not support STRINGs will operate correctly when compiled by a Rational Data Systems compiler. A 'standard' program might contain character literals, which in standard Pascal are considered either CHAR (if one characLter long), or PACKED ARRAY [1..n] OF CHAR (if n characters long and n>1), and in our implementations are considered STRING. Because our compilers regard STRING as a variant of PACKED ARRAY OF CHAR, a program that uses character literals to initial Mize CHAR or PACKED ARRAY OF CHAR variables will function correctly. 1-4 Licensed Material - Property of Rational Data Systems, Inc. When you use a one-character literal in a context where CHAR data is expected, the literal will be treated as CHAR by our compilers. When you use a literal longer than one character in a context where PACKED ARRAY OF CHAR is expected, our compilers will treat the literal as PACKED ARRAY [1..n] OF CHAR, where n is the number of characters in the literal. 'A literal null string will always be treated as a STRING. Mixing String and Char Types Because a STRING is really a PACKED ARRAY OF CHAR, the compiler's type-checking will prevent you from mixing STRING and CHAR variables. For example: var s0,x s1: string [255]; c: char; begin s0 := concat (s1, chr(0)); { won't work } s0 := concat (s1, c); { won't work } s0 := concat (s1, 'X'); { will work } The third assignment will be accepted because one-character literals are interpreted as either CHAR or STRING[1] according to the context. The first two are illegal because the intrinsic 'concat' requires STRING arguments, and both the variable 'c' and the function 'chr' are defined as CHAR. One method of getting a CHAR into a STRINKG is to do it in two steps: s0 := concat (s1, ' '); s0 [length(s0)] := chr(0); In this case, the subscripted reference 's0 [length(s0)]' is of type CHAR, and therefore 'chr(0)' can legally be assigned to it. String Assignment and Parameter Passsing For purposes of assignment, any STRING is type compatible with any other STRING. This does not, however, guarantee that a runtime error will not occur. The following example will cause a STRING RANGE ERROR at runtime: var a: string[5];/ b: string[10]; begin b := 'TEN CHARS!'; a := b; String 'a' has not been declared with a maximum length adequate to hold the current length of string 'b'. Licensed Material - Property of Rational Data Systems, Inc. 1-5 When passed as non-VAR parameters strings declared to be different lengths will be considered as compatible by the compiler. As above, however, if the actual parameter's current length is too long for the called procedure's formal parameter maximum length, a runtime error will occur. When passed as a VAR parameter a length restriction is enforced at compile time. Since a VAR string parameter permits the called procedure to actually modify the caller's string, the formal parameter must have a declared length which is less than or equal to that of the caller's actual parameter. Code within the called procedure cannot, therefore, access data outside the range of the caller's actual string parameter. For example: type string10 = string [r10]; string30 = string [30]; string50 = string [50]; var short: string10; medium: string30; long: string50; procedure proc (var varstr: string30); begin : { code here can modify up to 30 characters } : { of the call(=er's VAR string parameter } end {proc}; begin proc (short); {illegal} proc (medium); {legal} proc (long); {legal} The illegal statement will be rejected at compile time since 'proc' might access data beyond the declared (and allocated))x maximum for 'short'. The two legal statements could cause runtime errors (depending on how 'proc' manipulates its argument 'varstr'), but will be accepted by the compiler. 1-6 Licensed Material - Property of Rational Data Sysœtems, Inc. Segmentation of Programs Rational Data Systems implementations permit you to split your Pascal program up into SEGMENTs -- sections of code that are not always in memory while the program is executing. The reserved word SEGMENT is Eused in RDS Pascal source code to indicate that you are using the segmentation feature. The word SEGMENT may optionally precede either the word PROCEDURE or the word FUNCTION. The routine so marked (including any routines nested within it) will be compiled into a separate code segment. Your program always consists of at least one segment; it may contain as many as 16 (i.e. you may use the word SEGMENT up to 15 times). Segments within a program are numbered 0..15; the PRHOGRAM segment is always number zero. By using the segmentation feature, you can significantly reduce the main memory requirements of many programs. It is commonly used for routines that are seldom needed, such as initialization, termination, exceptizon handling, and error handling. Runtime Handling of Segments Segment number zero of your program is always loaded into memory at the start of execution. If your program consists of several segments, the others are loaded when required and deleted when no longer needed. If a certain segment is never called during a given run of the program, it will never be loaded into memory. A segment that is called recursively will not be repeatedly loaded into memory. The interpreter keeps a 'use count' H for each segment of the program, which enables it to (a) determine whether the segment has been loaded into memory, (b) delete the segment as soon as it is no longer needed, and (c) avoid multiple loadings of the same segment. If a segment's use count is zero when it is called, the interpreter will load the segment from disk if possible (a runtime error will occur if sufficient space cannot be allocated). Before executing the called segment, the interpreter sets its use count to 1. If a segment's use count is greater than zero when it is called, the copy already in memory will be used, and the use count will be increased by 1. Each time a segment is exited (that is, when control returns to a different segment)], the use count of the terminating segment is decreased by 1. When a segment's use count goes from 1 to zero, the space it occupied is made available for other purposes. (Later calls of the same segment will therefore cause it to be reloaded from disk.) Licensed Material - Property of Rational Data Systems, Inc. 1-7 Position of Segment Declarations The only restriction you need observe (other than the limit of 16 segments) is that in any program, SEGMENT procedures or functions must be the X first declarations containing code-generating statements. In other words, you may not ask the compiler to switch segments; it cannot compile part of your main (PROGRAM) segment, then another segment, then resume work on the main segment. The restriction on segment declarations is not at all difficult to cope with because our compilers also support FORWARD declarations of procedures and functions. This illegal program (or one like it): program bad; procedure a; { se!g 0, proc 2 } begin : end; segment procedure b; { seg 1, proc 1 } begin : end; begin { body of program } { seg 0 again ! } : end. { program } can be changed into this legal program (or one like it): progra7 or argument. When used in conjunction with the MEMAVAeIL function it provides a convenient means of determining potential storage capabilities. := sizeof() DATE Intrinsic DATE is a predeclared procedure which accesses the system's date and returns the current year, month, and day of month. The year is a true 4-digit year (e.g., 1981 not 81). date(,,) All three arguments must be integer variables. TIME Intrinsic TIME accesses the host system's clock. It returns three integer values: hours, minutes, and seconds since midnight. time(,,); All three arguments must be integer variables. POWER-OF-TEN Function Since Pascal does not provide an exponentiation operator we have provided a function which will return the R2EAL value of non-negative integral powers of ten within the range 0 <= argument <= 75. := pwroften() AVAILABLE MEMORY Inquiry Function To permit you to determine at runtime the amount of memory which is currently unused we h-ave provided the MEMAVAIL function which returns the number of 16-bit words of main memory not currently in use. := memavail Licensed Material - Property of Rational Data Systems, Inc. 1-9 Conditional Compilation The compiler will ؖ recognize simple boolean constants in IF statements and eliminate 'dead code' at compile time. For example: const testing=false; { change to 'true' if testing } : if testing then begin { code compiled only if testing=true }  t end else begin { code compiled only if testing=false } end Only the constructions '' and 'not ' are recognized at compile time. More elaborate boolean expressions will cause actuatl code to be generated. This feature is particularly useful, since it means that a variety of object programs can be generated from a single source program merely by changing boolean constants before  each compilation. Maintenance of several versions of the same program is much easier when there is only one source file for all versions. Extended Comparisons RDS Pascal permits = and <> comparisons of records and all arrays. Output of PACKED ARRAY OF CHAR The WRITE and WRITELN intrinsics will accept the (unsubscripted) name of any PACKED ARRAY OF CHAR as an argument when writing to textfiles. The entire array will be written. PACKED ARRAY OF CHAR and STRING Compatibility RDS Pascal permits the assignment of striing literals to variables of type 'PACKED ARRAY [n..m] OF CHAR' where n <> 1. The proposed standard requires that n = 1. This requirement is enforced when a program is compiled using the '/C' (conformance) switch. 1-10 Licensed Material - PropeVyrty of Rational Data Systems, Inc. The EXIT Statement We have restricted the use of the GOTO statement to local branching only (i.e., you cannot GOTO a label in another procedure). But it can happen that a program must exit from a deyeply nested procedure to, say, its outermost block. For example, assume that in a certain program procedure A calls procedure B, which in turn calls procedure C. If procedure C detects a critical error that will prevent successful completion of A and B, the program should report the error and somehow bypass the remaining parts of A and B. So that you can easily cope with situations such as errors detected deep within a nest of procedure invocations, we have extended our Pascal with the EXIT intrinsic. Like REPEAT..UNTIL, WHILE, and other 'structured' statements, EXIT is nothing more than a restricted GOTO. The restriction that distinguishes EXIT is that EXIT always branches to the epilogue code of some function or procedure; it cannot branch to a label. (The epilogue of a procedure is the code that 'cleans up' at procedure exit; its main job is to close files declared in that procedure.) What makes EXIT unique is that it permits a branch to a routine other *than the one that contains the EXIT statement, while guaranteeing that all procedures 'exited' on the way will be terminated in an orderly fashion. The EXIT intrinsic takes a single argument, the name of the procedure or function being ex_ited. The reserved word 'PROGRAM' may also be specified as the argument, in which case the program is terminated. The behavior of the EXIT statement is entirely dynamic. It terminates execution of the most recent invocation of the routine named,a and also any other routines invoked since that time. For example: procedure father; procedure son; procedure grandson; begin if then exit(father); end { grandson }; begin { son } : end { son }; begin { father P} : end { father }; The EXIT within 'grandson' will cause three routines to terminate. In cases like this, the interpreter will see to it that the epilogue code of all the procedures is executed before the caller of 'father' resumes Jexecution. Licensed Material - Property of Rational Data Systems, Inc. 1-11 It is possible to cause a runtime error when using EXIT, because there is no guarantee that the named procedure is actually a dynamic ancestor of the procedure execduting the EXIT. For example, the following code could cause a runtime error: program trouble; procedure c; forward; procedure a; begin if then exit (c) end { a }; procedure b; begin a end { b }; procedure c; bdegin a end { c }; begin { program } if then b else c end. If both and are TRUE at a certain time, procedure A will erroneously attempt to exit from procedure C, which in fact has not been called. NTote that this problem can only occur if the procedure named in the EXIT statement is not a lexical parent of the procedure using the EXIT statement. A procedure, X, is always safe in saying EXIT(Y) if X is nested within Y; the block structure rulYes of Pascal ensure that in such a case there will always be an active invocation of Y while X is running. 1-12 Licensed Material - Property of Rational Data Systems, Inc. DEVIATIONS AND LIMITATIONS ==========================  The Heap The NEW intrinsic allocates storage in an area of main memory known as the heap. In our Pascal, the heap is implemented as a simple stack. The MARK and RELEASE intrinsics control the deallocation of items on the heap. (The standard procedure DISPOSE is not supported by RDS Pascal). MARK records the current extent of the heap. RELEASE cuts the heap back to a point previously recorded by MARK. Both procedures require a pointer argument. It can be declared as a pointer too anything you please. ('^INTEGER' is commonly used.) The call MARK (P) will assign to the pointer P a value representing the current extent of the heap. The call RELEASE (P) will assume that the pointer P contains a legitimate heap mark -- i.RYe., a value previously acquired by a MARK (P) call -- and will 'tear down' the heap to the indicated position. Note that P is declared as a pointer merely because the type-checking rules of Pascal force it to be declared as some particular 5type. It is not actually used as a pointer, but simply as a machine word in which the interpreter can record implementation-dependent information about the heap. After the call 'MARK (P)', your program should not use P for any other purp_ose until a corresponding 'RELEASE (P)' has been executed. Some care must be exercised when using these extensions, as very little runtime error checking is performed. Indiscriminate use of MARK and RELEASE can create 'dangling references,' i.e., can cause pointer variables to refer to unallocated or reallocated memory.  Licensed Material - Property of Rational Data Systems, Inc. 2-1 Assume we have a program that contains the following code: type myrec = record name: striABng[255]; address: string[255] end; var p,r,s: ^myrec; saver: ^integer; begin new(p); { statement A } mark(saver); new(r); { statement B } new(s); { statement C } release(saver); { statement D } The effect on the heap will be as shown in the following diagrams. (Each picture show what the heap looks like AFTER execution of the corresponding statement.) +--------+ | | N | S^ | | | +--------+ +--------+ | | | | | R^ | | R^ | | | y | | +--------+ +--------+<=SAVER +--------+<=SAVER +--------+ | | | | | | | | | P^ | | P^ | | P^ | | P^ | | | | | | | BI | | +--------+ +--------+ +--------+ +--------+ A B C D 2-2 Licensed Material - Property of Rational Data Systems, Inc. Case Statement When the value of the selector variable in a CASE statement does not match any of the constant values, no operation is performed by the CASE statement, and execution continues with the next statement. (Many other implementations cause a runtime erroUr in this situation.) A statement earlier than the CASE statement can supply a default action; for example: var i : integer; b : boolean; b := true; case i of 2,5 : b := false; 4 : b := true end will set 'b' to 'true' when 'i' is not equal to 2 or 5. Restrictions Maxint The value of MAXINT is 32767. Procedures and Functions as Parameters PROCEDUREs and FUNCTIONs as parameters of a PROCEDURE or FUNCTION are not supported. Input Line Length Input lines to the compil', to dist'inguish them from textfiles (declared 'TEXT'). A 'file title' is the external name by which a file is known to the operating system. An 'internal file name' is the name that identifies a file within a Pascal program. The phrase 'CLI name equatioMon' describes the process of associating a data file (identified by its title) with a file declared in the program (identified by its internal name). The internal file name is listed as a program parameter; the file title is provided in the CLI line that invokes the program. A 'prologue' is compiler-generated initialization code inserted at the beginning of a block. An 'epilogue' is compiler-generated termination code inserted at the end of a block. File Opening Three predeclared proSZcedures are available for opening files in RDS Pascal: RESET, REWRITE, and APPEND. RESET and REWRITE are standard; APPEND is an extension. All of them can be used both to initially open a file and also to resume processing an already opened file. & All files are opened non-exclusively. The syntax for all three file-opening intrinsics is the same; their single argument is the file's internal name: reset () rewrite () append () Reset For a closed file, RESET opens the fi-le and positions the file at its start. Each RESET also performs a GET operation. For a file that is already open, RESET simply repositions the file to its start and does the preliminary GET. A runtime error will occur if RESET is attempted for a fiZle that does not already exist. Licensed Material - Property of Rational Data Systems, Inc. 3-1 Rewrite If REWRITE is used for a file that already exists, the existing file is deleted. In any case, a new empty file is created. When REWRITE ist used on a file that is already open, the file is first purged (forced to an 'empty' state) and then positioned to write the first record. Append The APPEND procedure is an extension implemented by Rational Data Systems. APPEND opens the file (if n>ot already open) and positions it at its end, so that additional records can be added. A runtime error will occur if APPEND is attempted for a file that does not already exist. Default Opening of Files The proposed Pascal language standard requireLs the 'standard textfiles' INPUT and OUTPUT to be opened automatically if they are listed as program parameters in the program header. When you list a standard textfile as a program parameter, the RDS compilers will insert 'reset (input)' orWj 'rewrite (output)', as appropriate, in the prologue code at the beginning of the program block. File Closing Standard Pascal does not specify any method of explicitly closing files. RDS Pascal provides two intrinsics that close files: close (\2) purge () Close The file is closed and preserved if possible. When the CLOSE intrinsic is executed for a file that is not open, no action is taken. 3-2 Licensed Material - Property of Rational Data Systems, Inc. Purge The designated file is closed, and discarded if possible (e.g. if on disk). When the PURGE intrinsic is executed for a file that is not open, no action is taken. Default Closing of Files For each block in your program, the compiler generates epilogue code to CLOSE all files declared in that block. Since a request to CLOSE a non-open file is ignored, the CLOSE in the epilogue will have no effect if your program has explicitly CLOSEd or PURGEd the file. File Names and File Titles The compiler recognizes only the first eight characters of identifiers. Therefore, if you declare a file with an identifier longer than eight characters, its internal name -- and its default external title, as described below -- will consist of the first ei*?ght characters of the identifier you use. To process files that have external titles longer than eight characters, you can use the FILETITLE intrinsic (described in the next section), or CLI name equation (described in the section entitled 'Program Parameters'). The runtime system will accept file titles up to 32 characters long, or the maximum permitted by the host operating system, whichever is smaller. On RDOS, the system-enforced limit is 12: 10 for the title and 2 for the extension. 9 On AOS, the entire pathname you use to identify the file must fit within the 32-character limit. The FILETITLE Intrinsic You can associate an external title with an internal name by using the FILETITLE intrinsic. FILETITLE may be used repeatedly, allowing you to process many external files with the same internal file name. FILETITLE takes an internal filename as its first argument. Its second argument is a STRING expression that contains the external title. The file named .[in the first argument of FILETITLE must not be open when FILETITLE is executed. For example: var source: text; begin filetitle (source, 'SOURCEDATA'); reset (source); Licensed Material - Property of Rational Data Systems, Inc. 3-3 Default File Titles The default external title of a file (other than the standard textfiles INPUT and OUTPUT) will be the same as the first eight characters of the internal name. The default titles of the standard textfiles INPUT and OUTPUT are automatically set to the operating system's standard input and output files (@INPUT/@OUTPUT for AOS, $TTI/$TTO for background RDOS, $TTI1/$TTO1 for foreground RDOS). Whenever you associate the title INPUT or OUTPUT with an internal filename, whether by using S the FILETITLE intrinsic, by using runtime name equation, or by default, the title will automatically be changed to fit the local operating system's conventions. The default title cannot be used if the file you intend to proceW#ss has a title that is longer than eight characters, or begins with a non-alphabetic character, or contains characters other than letters and digits. In such cases, you must use either CLI name equation or the FILETITLE intrinsic. Program Parameters File names may be passed to the program as parameters via the CLI. The interpreter will equate files in the program parameter list with positionally corresponding files in the CLI execution command line. Consider the following CLI command and program heading: PX COPYPROG ORIGINAL DUPLICATE program copyprog (input, output); Prologue code calls are made on the intrinsic FILETITLE to associate the internal files specified in the program parameter list with the actual Afiles (or devices) as specified in the CLI line. This process is referred to throughout this chapter as 'CLI name equation'. Processing of the CLI command line is left to right. Null arguments are permitted, resulting in the external file tr title defaulting to the first eight characters of the internal file name. For example, if COPYPROG copies a textfile from INPUT to OUTPUT, you could display the contents of ORIGINAL on your CRT by executing: PX COPYPROG ORIGINAL 3-4 Licensed Material - Property of Rational Data Systems, Inc. Since no external file title is equated with OUTPUT, the default file title is used (in this case, your CRT). Similarly, to copy text from the default input file (your keyboard) to a diskp file or device, type: PX COPYPROG,,NEWFILE The explicit null argument will cause the default input file title to be used and 'NEWFILE' will be the external file title assigned to OUTPUT. Special Handling of INPUT and OUTPUT Either, neitherۮ, or both of the filenames INPUT and OUTPUT may be specified in the optional program parameter list. However, files other than INPUT and OUTPUT must be declared within the outermost block as well as being listed in the program parameter list. Placing a file name in the program parameter list merely means that its external title can be defined at runtime from the CLI. This explains an intentional deviation we have made from the proposed standard. The standard says that INPUT and OUTPUT may qnot be declared in the usual manner, but only by placing them in the program parameter list. If this were the case, it would not be possible for the programmer to protect INPUT and OUTPUT from CLI name equation. Therefore, RDS Pascal permits you to declare INPUT and OUTPUT in two ways: either in the parameter list (in which case the external file title may be changed via the CLI at runtime) or in standard VAR declarations (in which case the external filename is 'protected' and is not subj]ect to CLI name equation). If the filenames INPUT or OUTPUT appear in the program parameter list, prologue code for 'reset(input)' or 'rewrite(output)' will be generated accordingly. This is performed only for INPUT and OUTPUT and only if they are* declared in the standard manner by having their names in the list of program parameters. For any other files (whether program parameters or not), and for INPUT and OUTPUT (if not program parameters) the user must provide his own explicit opening s tatement: RESET, REWRITE or APPEND. If you declare INPUT or OUTPUT in both ways, the VAR declaration will be ignored, and CLI name equation will still be possible. Licensed Material - Property of Rational Data Systems, Inc. 3-5 Priority of File Titling Operations There is a priority inherent in the various methods of associating internal file names with external file titles. The most recent titling operation is the one that holds. Titling operations are performed in tZ_he following sequence: 1. Prologue code assigns the default title: FILETITLE (, ''); 2. If the file name is among the program parameters and a corresponding non-null external title has been specified in the CLI line, the following_! prologue code is executed: FILETITLE (, ''); 3. After all prologue code is executed, explicit user-written code may re-title the file: FILETITLE (, ''); 4. Just before the file is opened by RESET, REWRITE oer APPEND (either due to prologue or user code), if the currently assigned file title is either 'INPUT' or 'OUTPUT' it is re-titled to conform to the host system's standard input and output files. Using 'INPUT' as an example: FILETITLE (input,) '@INPUT'); { AOS } FILETITLE (input, '$TTI'); { RDOS background } FILETITLE (input, '$TTI1'); { RDOS foreground } Default Filenames in I/O Statements You can omit the filename when you use the intrinsics READ, READLN, WRITE, WRITELN, PAGE, HEOF, EOLN, or the RDS extension EOLCHAR, to access TEXT files. The identifier 'INPUT' or 'OUTPUT' will be assumed as appropriate in the argument list of the intrinsic. For instance, the following would be compiled identically: readln(); <---> readln(input,); page; <---> page(output); Because 'INPUT' and 'OUTPUT' are not reserved words, you can redeclare them as non-files. If 'OUTPUT' happens to be declared as a REAL variable, both PAGE statements above e!will be flagged as erroneous because the argument to 'PAGE' must be a textfile and, in both cases, the compiler will encounter a REAL. If 'INPUT' or 'OUTPUT' are typed (non-TEXT) files they must be explicitly named. 3-6 Licensed Material -m Property of Rational Data Systems, Inc. Interactive Programming: Lazy Input Implementation Pascal input provides a 'lookahead' facility. When you RESET a file, its window is pre-loaded; i.e. each RESET operation includes a preliminary GET. The following examples have the same effect: var c: char; var c: char; : : read (input, c); c := input^; get (input); The very first READ to be executed works properly because of the implicit GET performed by the RESET that opened the file.n This is very convenient for the programmer. The only difficulty with this input method is that it can be awkward when the programmer is writing an interactive program that must 'converse' with a user at a terminal. In such a situation, the loo+kahead feature of RESET and READ can become a hindrance instead of a help. For example, this program might not behave as the programmer intended: program p (input, output); var s: string[80]; begin writeln ('What is the question?'); readln (s); If Pascal input operations are implemented precisely as the language definition suggests, then the prompting message will not be displayed on the terminal until after the user has struck one key -- because of the implicit 'reset (input)', whichQ performs a 'get (input)', at the very start of the program. Implementors of Pascal are aware of how this language feature might hamper the development of interactive programs, and have devised a number of solutions. The scheme used by RDS Pascal is known as 'lazy input'. The method of lazy input is based on the idea that actual input operations can be postponed until they are absolutely necessary. When you RESET a file, for instance, the language definition requires a GET; but the physical input can be postponed until the data must be available when your program refers to it. Similarly, the GET that is the last part of a READ operation can be deferred until the data is actually needed. Licensed Material - PryOoperty of Rational Data Systems, Inc. 3-7 In the above example, the GET(INPUT) operation (performed as part of the implicit RESET(INPUT)) does not wait for a character from INPUT. An interpreter boolean is set to indicate that the file buffer variable INPUT^ does not yet contain valid data and the program continues. The message 'What is the question?' is written. Upon encountering the statement READLN(S) the program finally performs the requisite physical input operation. If INPUT`{ is an interactive device, the program will 'hang' at this point (after writing the message) rather than before the the 'writeln' has been executed. If this were not done, a key would have to be pressed on the keyboard before the program woupld appear to start, and input and output operations would forever be out of step. There are six Pascal constructs which generate code requiring the validation of an input file's buffer variable: get (f) read (f, ) readln (f) or readln (f, ) eof (f) eoln (f) f^ { direct buffer variable reference } The first three on this list would normally cause an input operation in any case. The implementation of lazy input simply means that if you use one of the last three if[n your program, a 'postponed' input operation could occur at that time. Buffering of Textfiles To minimize the number of operating system calls, the interpreter will buffer textfile output data. As a rule, when you say WRITE, your data is copied intso an internal line buffer, and doesn't get sent to the host system until enough is collected to make the system call reasonably efficient. Synchronization of "INPUT" and "OUTPUT" The buffering is generally invisible to the application programmer, but it can become visible -- and a nuisance -- when the program has two files, one representing the screen (or printer) of a terminal, and the other representing its keyboard. A synchronization problem can occur if output data is waitingfG in an internal buffer when an input operation is performed. For example, prompting messages might not be displayed when required in an interactive environment. 3-8 Licensed Material - Property of Rational Data Systems, Inc. It would be possible to avoid the buffering, and perform a system call for each and every character transmitted through a textfile. That would solve the synchronization problem, but would introduce quite a lot of overhead. Also, it's not likely that an appl[ication program would deal with more than one terminal device; though it might well contain many textfile declarations. So there's no point in forcing unbuffered access to each and every device handled by a textfile. In order to allow practical communication with a program's console without giving up the efficiency of buffered output, RDS Pascal synchronizes the files INPUT and OUTPUT. (That is, files that have the titles 'INPUT' and 'OUTPUT', regardless of their internal names.) Data saved in the internal buffer for the file titled OUTPUT is physically written when one of three conditions holds: 1. the output buffer gets full, 2. the program executes WRITELN(), 3. the program executes READ(). The first two conditions apply to all textfiles. The third is a special feature, designed to let you use INPUT and OUTPUT to communicate easily with a terminal. For example, you can design a program that reads an answer from the * same physical line on which it displays its question: program x (input, output); var  id: integer; name: string[100]; begin write('ENTER EMPLOYEE ID NUMBER: '); readln(id); write('ENTER EMPLOYEE LAST NAME: '); readln(name); If the employee's name is Robinson and her ID number is 321, after the two questions are answered the screen of the terminal will look like this: ENTER EMPLOYEE ID NUMBER: 321 ENTER EMPLOYEE LAST NAME: ROBINSON This form of synchronization applies to files with the external titles 'INPUT' and 'OUTPUT'. For example: var output,harvey: text; begin filetitle(harvey,'input'); reset(harvey); { external title = 'input' } rewrite(output); { external title = 'output' } In this case, data sent to 'output'/7 will be coordinated with data received from 'harvey' (known externally as 'input'). Licensed Material - Property of Rational Data Systems, Inc. 3-9 Reading Paged Files: The EOLCHAR Intrinsic In our implementations, the PAGE intrinsic is consistent with the usual Data General interpretation of 'pages' in a file: it causes a formfeed character to be transmitted to the host system. When a Pascal program reads a textfile that contains formfeed characters, each formfeed will be interpreted -- - again, in accordance with normal Data General practice -- as an end-of-line indicator. The Pascal standard requires all end-of-line indicators to be represented as blanks. Thus a standard program cannot detect the end-of-page condition. Rath er than tamper with the standard definition of the file window, we have implemented an additional intrinsic function which allows the programmer to determine the character that terminated the last line read from a textfile. The CHAR-val#ued function EOLCHAR() returns the character that terminated the last line read from . As with other textfile-oriented intrinsics, the argument may be omitted, in which case the compiler supplies the name 'INPUT'. If EOLCHRAR is used before any line markers have been detected on the designated file, the returned value is blank. The following program uses EOLCHAR to copy a file containing formfeed characters: program copy (input,output); var s: string[255]; begin while not eof(input) do begin readln(s); write(s); if eolchar(input) = chr(12) then page else writeln end end. 3-10 Licensed Material - Property of Rational Data Systems, Inc. Random Access of Fihles: The SEEK Intrinsic The SEEK intrinsic takes a file name as its first argument, and an integer expression as its second argument. It positions the designated file at the record denoted by the second argument. The first record in a file is numÌbered zero. If the second argument to SEEK is out of range (greater than or equal to the number of records in the file or less than zero) a runtime error will occur. After a SEEK, the file's window is undefined. After repositioning an i4nput file with a SEEK statement, you must then perform a GET before accessing the window. Note that each GET advances the file pointer, so that updating a record requires two SEEK operations: one to position the file before reading the record, an/[d one to position the file before rewriting it. For instance, to change the third record (position 2) in a file: var rand: file of data; : seek(rand,2); get(rand); process(rand^); seek(rand,2); put(rand); Without the second SEEK,  this code would have (erroneously) written the new data into position 3 instead of position 2. Files may be repositioned to the beginning with either SEEK(,0) or RESET(). The difference between SEEK and RESET is that REwISET implies reading, and therefore does an automatic GET. SEEK makes no assumptions about the kind of operation to follow, and therefore does not GET any data into the file's buffer variable. Licensed Material - Property of Rati*onal Data Systems, Inc. 3-11 3-12 Licensed Material - Property of Rational Data Systems, Inc. THE RDS PASCAL COMPILERS ======================== Source Character Set Upper and Lower Case The Rational Data Systems Pascal Compilers accept upper and lower case ASCII source text. All lower case is internally folded to upper case so that the following appear identical to the compiler: TOTAL := 0; Total := 0; Alternative hSymbols RDS Pascal implements the following alternative symbols: Reference Symbol Alternative Symbol ---------------- ------------------ ^ @ { (* } | *) Note that the alternative comment delimiters are totally equivalent to the reference comment delimiters, thus a comment may begin with "{" and close with "*)", or begin with "(*" and close with "}". Compiler Options You canQ: control the compilation of portions of your source file by using control comments. A control comment is a comment containing a dollar sign as its first nonblank character. The second nonblank character is a code letter indicating which Tcontrol you are using. Only one control is permitted per comment. If you attempt to place several controls in a single comment, all but the first will be ignored by the compiler. (In other words, text following the control is treated as a normal comment.) Licensed Material - Property of Rational Data Systems, Inc. 4-1 Some control comments affect switches that can be "turned on" and "turned off". For such switches, the code letter is followed by an option character that may be '+' or '-' or '^'. For instance: (*$L+*) { $ r - } would turn on the 'listing' switch and turn off the 'rangechecking' switch. Each of these switches is actually a stack (maximum depth 15 elements). The '+' option pushes the 'on' value ontCo the switch stack. The '-' option pushes the 'off' value onto the switch stack. The '^' option pops the switch stack, restoring the previous setting of the switch. A frequent use of the stacking mechanism is to prevent printing of 'uninter esting' code (e.g., in a development situation, code that has already been checked out and need not be reprinted each time the program is recompiled), without affecting the listing or nonlisting of code that follows. (The '$L' control is described in ludetail later.) { $L- } { position A } : { code here won't be listed } : { $L^ } : { listing of code here depends on what } { the '$L' switch setting was before the } { switch got turned off at position A } Too many pushes withjout an intervening pop will produce the error message "Overflow in switch stack." Attempting to pop an empty switch stack (underflow) will result in the default value defined for that switch. Because stack underflow automatically supplies the default Nswitch value, stack overflow will only be signalled when you attempt a push that would lose a non-default value out of the 15th position. Stackable switches are identified by the notation "