@ [0+8+FQ(+4)[1 0FO10F"G+Q1' +FQ()+4U1 FQ1"L0' ,Q1:M(Q1+4(]1]0))  >o/(W,)'&Ya'Ts(HZq+m%x'tX'.+-*'Yz2Em;SQHOF]g][pc|i ?)MBkX{,wF<|84VrCt AD:K#3$ #AJ5V\nUhIqLz5 HY Rm I! ; Y" oR CRc S R HC kHn tD @w D3 %4- G My# yj0 Gl Ri i i | b- ;l *h 8iW } Sn n iky v   _  ]/ ; q c Td_ cd r_ze2 kw 3} W mmBw rJ o4 Mzm`}+tRsfWJgfgp=v q`-&p=c=,KVugeO #=qW58D${u_nm{_B_= K& Align Global Pascal Comment Ends& Back Pair& Back Paren& Back to Chars& Back to Word& Back to Word Over Paren& Compile Compilation& Default Init PASCAL Mode& Forward Paren& Forward To Chars& Forward to Word& In ErrList Mode& Indent Line& Join Line& Keyword Search& Out ErrList Mode& Pascal DO-OF& Pascal REPEAT-RECORD& Pascal Subroutine& Read Keywords& Save Errors& Set Group Value& Set Major Variable& Set minor variable& Setup PASCAL Library& Setup variablesBack LevelCapitalize Pascal KeywordsErrList ModeForward LevelGlobal Pascal CommentIndent Pascal RegionMark ProcedureNo Comment SearchPascal Expand Abbrevs in RegionPASCAL ModePrint Last Pascal IndenterSame Capitalization^R Find Unmatched Paren^R Indent PASCAL Stmt^R Insert Comment^R Insert Pascal End^R Next Error^R Pascal BEGIN^R Pascal CASE^R Pascal ELSE^R Pascal End^R Pascal FOR^R Pascal FUNCTION^R Pascal IF^R Pascal Indent Relative^R PASCAL New Line^R Pascal PROCEDURE^R Pascal PROGRAM^R Pascal RECORD^R Pascal REPEAT^R Pascal WHILE^R Pascal WITH^R Plus One^R Slurp Pascal to Char^R Start String^R Toggle Indentation~DIRECTORY~~DOC~ & Align Global Pascal Comment Ends~DOC~ & Back Pair~DOC~ & Back Paren~DOC~ & Back to Chars~DOC~ & Back to Word~DOC~ & Back to Word Over Paren~DOC~ & Compile Compilation~DOC~ & Default Init PASCAL Mode~DOC~ & Forward Paren~DOC~ & Forward To Chars~DOC~ & Forward to Word~DOC~ & In ErrList Mode~DOC~ & Indent Line~DOC~ & Join Line~DOC~ & Keyword Search~DOC~ & Out ErrList Mode~DOC~ & Pascal DO-OF~DOC~ & Pascal REPEAT-RECORD~DOC~ & Pascal Subroutine~DOC~ & Read Keywords~DOC~ & Save Errors~DOC~ & Set Group Value~DOC~ & Set Major Variable~DOC~ & Set minor variable~DOC~ & Setup PASCAL Library~DOC~ & Setup variables~DOC~ Back Level~DOC~ Capitalize Pascal Keywords~DOC~ ErrList Mode~DOC~ Forward Level~DOC~ Global Pascal Comment~DOC~ Indent Pascal Region~DOC~ Mark Procedure~DOC~ No Comment Search~DOC~ Pascal Expand Abbrevs in Region~DOC~ PASCAL Mode~DOC~ Print Last Pascal Indenter~DOC~ Same Capitalization~DOC~ ^R Find Unmatched Paren~DOC~ ^R Indent PASCAL Stmt~DOC~ ^R Insert Comment~DOC~ ^R Insert Pascal End~DOC~ ^R Next Error~DOC~ ^R Pascal BEGIN~DOC~ ^R Pascal CASE~DOC~ ^R Pascal ELSE~DOC~ ^R Pascal End~DOC~ ^R Pascal FOR~DOC~ ^R Pascal FUNCTION~DOC~ ^R Pascal IF~DOC~ ^R Pascal Indent Relative~DOC~ ^R PASCAL New Line~DOC~ ^R Pascal PROCEDURE~DOC~ ^R Pascal PROGRAM~DOC~ ^R Pascal RECORD~DOC~ ^R Pascal REPEAT~DOC~ ^R Pascal WHILE~DOC~ ^R Pascal WITH~DOC~ ^R Plus One~DOC~ ^R Slurp Pascal to Char~DOC~ ^R Start String~DOC~ ^R Toggle Indentation~DOC~ ~FILENAME~~FILENAME~~INVERT~ 0FO..qPascal Loaded"E 0m.vInsert Dispatch m(m.mMake Prefix Character)Insert Dispatch( )M.VMM ^R Pascal Insert Statement QPrefix Char List[0 :I*0Insert: QInsert Dispatch UPrefix Char List m(m.m& Read Keywords) m(m.m& Setup Variables) [1[2 m.vPascal Compile Command @:iPascal Compile Command| FSDFN1SDFN2Compiler Switches:F"Lw:i*'[4 F+ 0FZ do emacs:pascal.mic 5,6,4  0FO..qAfter Compilation Hook[7 Q7"NM7'"#0U..H-1FSPJATY' | M.VError Vector M.VNum Errors M.VError Index M.VOld After Compilation Hook M.VOld Compiler Switches M.VOld Compiler Filename M.VOld Compile Command 0FO..qAfter Compilation HookM.VAfter Compilation Hook 0FO..qCompiler SwitchesM.VCompiler Switches 0FO..qCompile CommandM.VCompile Command @:i1|( 0fo..qErrList Mode"n i ErrList' )| 0fo..qSet Mode Line Hooku2 q2"eq1'"#:i*21'm.vSet Mode Line Hookw 0FO..qErrList ModeU1 0M.VErrList Mode m.cErrList Mode!* (Pascal) Save compiler errors when running M-X Compile! "NQErrList Mode"EM(M.M& In ErrList Mode)1FS Mode Change'' "#QErrList Mode"NM(M.M& Out ErrList Mode)1FS Mode Change'' Q1UErrList Mode 1M.VPascal Loaded ' zm(m.m & Init Buffer Locals) 1,(:I*(*)M.LComment Startw 1,(:I*(* )M.LComment Beginw 1,(:I* *))M.LComment Endw 1,(:I*)M.LLast Pascal Indenterw 1,0M.LLast Pascal Indent Posw 0@fo..qPASCAL ..D QD"E :iD A A AA A AA AA A | ( )( A A A A A AA AA AA AA AA AA AA AA AA AA A A A A A A A AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA ( A )[ A AA A AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA ( A ){ A  qDM.VPASCAL ..D' qDm.q..D 1,1M.LCompiler Filename 0@fo..qPASCAL Mode Hook"e m(m.m& Default Init PASCAL Mode)' 1M(M.M& Set Mode Line)PASCAL  1,0m.LCOMMENT COLUMNw 1,:i*+1m.lcomment roundingw 1,q1,q..Qw)m.Q. 1,(m.mCompile)m.q..., 1,(m.m^R Indent Pascal Stmt)m.q...I 1,(m.m^R Pascal New Line)m.q  1,(m.mPrint Last Pascal Indenter)m.q...? 1,(m.m^R Slurp Pascal To Char)m.q...{ 1,(m.m^R Plus One)m.q...+ 1,(m.m^R Start String)m.q...' 1,(m.m^R Next Error)m.q...E 1,(m.m^R Insert Comment)m.q...* 1,(m.mForward Level)m.q...N 1,(m.mBack Level)m.q...P 1,(m.mMark Procedure)m.q...H 1,(m.mIndent Pascal Region)m.q...G Q...Gm.q..G Q...Gm.q...\ 1,(m.mSame Capitalization)m.q...C 1,(m.mGlobal Pascal Comment)m.q...$ 1,(m.mNo Comment Search)m.q...S 1,(m.m^R Pascal Insert Statement)m.q.... QInsert Dispatch M.M^R Pascal ENDU:R(E) M.M^R Pascal WHILEU:R(W) M.M^R Pascal FORU:R(F) M.M^R Pascal WITHU:R() M.M^R Pascal IFU:R(I) M.M^R Pascal ELSEU:R() M.M^R Pascal PROCEDUREU:R(P) M.M^R Pascal FUNCTIONU:R() M.M^R Pascal PROGRAMU:R() M.M^R Pascal REPEATU:R(R) M.M^R Pascal BEGINU:R(B) M.M^R Pascal CASEU:R(C) M.M^R Pascal RECORDU:R() M.M^R Pascal BEGINU:R(B) -1@fo..qPascal Auto Fill Default:F"L( 1,1M.LAuto Fill Mode)'W 1,1m.LSpace Indent Flagw 0@fo..qAutomatic Capitalization"N m(m.mCapitalize Pascal Keywords)' 0[1QPascal Syntax Table QPascal Keyword Count< Q:s(Q1*3+3)&"NU:s(Q1*3+2)' %1W >o[v:iv:in -99@fo..qv[1 m.cv!* (Pascal) ! ,nm(m.m& Set Group Value) Q1+99"NQ1Uv' [vQ:Pascal Syntax Table()Uv [n+1:\Un -99@fo..qIndent After v[1 m.cIndent After v!* (Pascal) Indent after keyword v! U:Pascal Syntax Table(n) Q1+99"NQ1UIndent After v' |QPascal Syntax Table m.m& Set Major Variable MjIndent After Everything361.Default indentation after all keywords MjBegin-Block Body Indentation21.Indentation after loop constructs MjIf-Block Body Indentation200.Indentation after IF-group keywords MjDecl Body Indentation100.Indentation after declaration keywords MjProcedure Body Indentation40.Indentation for Proc. & Func. Bodies 0[1m.m& Set Minor Variable QPascal Keyword Count< Q:t(Q1*3+3)&361."N Q1*3+1mn' %1> -@F  K .[w @MM 0@fo..qFill Prefix[3 fq3"gg3' "#F@M(M.M^R Indent Pascal Stmt)[x[y' fsrgetty"e:0t' Qy,Qwf*0:,..[.0fnQ.0J 1:<-M(M.M& Back Paren)>"N :i*NUP No Unmatched ParenthesesFSErr' ff&1"N0@V:' qComment Start qb"e:ib;' 0fo..qComment Beginf"Nub' :i*fo..qComment End .,.m(m.m& Save For Undo)Insert Comment .(GbGe),.(FKC)|ff"'E*(0@fo..QIndent Align Only"'E)"E :iLast Pascal Indenter^R Indent Nested f@:m(m.m^R Indent Nested)' FSHPos"N@:m(m.m^R Pascal Indent Relative)' @f  K m(m.m& Indent Line)[x[y fsrgetty"e fsechodisAfsechodis 0t' Qy,QxQComment StartQComment EndFQs[l[1:I1 0:Ge-32"E1,FQe:GeUe' ' !"!1A-'"EC!"!:S'"E!"!:i*Unmatched 'FSERR'!' 1A-("E.+2-Z:"G2A-*"E 2C:S*)"E:i*Unmatched (*FSERR'!''' QlF=s"E QlC:Se"E:i*Unmatched sFSERR'!' 1Af1; 1C > QComment StartQComment EndFQe[l[1:I1 0:Ge-32"E1,FQe:GeUe' ' !"!0A-'"ER!"!-:S'"E!"!:i*Unmatched 'FSERR'!' 0A-)"E.-2-B:"L-1A-*"E 2R-:S(*"E:i*Unmatched *)FSERR'!''' QlF=e"E QlR-:Ss"E:i*Unmatched eFSERR'!' 0Af1; 1R > MbABCDEFGHIJKLMNIOPRSTUVWXYZabcdefghijklmnioprstuvwxyz MfABCDEFGHIJKLMNIOPRSTUVWXYZabcdefghijklmnioprstuvwxyz [1:I1 -1[l Qt:"L [.p [1[9 QPascal Syntax Table M.M& Back To Chars M.M& Back To Word M.MBack Level .U.pfnQ.pJ ' Qt:"L0U..n' [.pff&1"E0'"#'[l [1[9 QPascal Syntax Table M.m& Back To Chars M.M& Back To Word .U.pfnQ.pJ 0U..n :F "L0'"#Q9'[.p[d[e [1[9 QPascal Syntax Table "L M.m& Back To Chars M.M& Back To Word -1Ud BUe' "# M.m& Forward To Chars M.M& Forward To Word 1Ud ZUe' .U.pfnQ.pJ 0U..n Q9[.p[tff"E0'"#'[l M.M& Forward To Chars .U.pfnQ.pJ 0U..n[.p[tff"E0'"#'[l M.m& Back To Chars .U.pfnQ.pJ 0U..n[.pff&1"E0'"#'[l [1[9 QPascal Syntax Table M.m& Forward To Chars M.M& Forward To Word .U.pfnQ.pJ 0U..nQ9"G Q:t(Q9+2)&1."N Mw  0A- "N -FWF(X1)L @:FOt1U9 ''' Q9"G Q:t(Q9+2)&400."N -@f L0A- "N -1,220.M(M.M& Keyword Search) '''  [1[9[2[i-1[x.[a[c[s:i* z-.[3fnZ-Q3J QPascal Syntax Table M.M& Back to Word over Paren M.M& Back to Word M.MBack Level M.M& Back To Chars M.M& Forward To Chars M.M& Back Paren -10fU1F[VB 1:<-1M(M.M& Back Paren)>"E :ilIndent Unmatched Open Paren C@f  L oDONE1 ' f]VBw 0:LMo; .-B"E' < 0A-;"E-2UxR' "# -fwf(x1)L @:FOt1U9 Q9"G Qx+1"'E( Q:t(Q9+2)&141."'N)"N Q:t(Q9+1)Ux ' Q:t(Q9+2)&1."N 0@fo..qMatch Block Word"N :illMatching Block Word oDONE1'' Q:t(Q9+2)&2."N FWL 0; ' ' '' Qx; Mo ; .-B@;(0A- )@; > Qx"G:ilIndent After 1 oDone0 ' 1@fo..qReindent ENDs"'NUs <.-B@; (0A- )@; -fwf(x1)L @:FOt1U9 Q9"G Q:t(Q9+2)&2."N Qs"L 0f:Usw ' -1MkU9 Qs"N (Qs-.)"G :ill (Back Over Block) M(M.M& Join Line) .-Z(0@fo..qMatch Block Word"E 0L@f L' fsHPOS( QsJ )M(M.M& Indent) 0L.Ua :Ill (Reindented an 1) )+ZJ0Us' "#-1Us' ' ' "#Q:t(Q9+2)"GFWL0;'' ' Mo  > <.Us Mo; .-B@; 0A-;@; -FWF(X1)L @:FOt1U9 Q9"'G; Q:t(Q9+2)&4."N 10.,4.M(M.M& Back Pair) :ill (Back Over THEN/ELSE) ' "# Q:t(Q9+2)&10."NQx+2"N :ilIndent For ELSEl oDONE0'' Q:t(Q9+2)&400.@; ' -1,220.M(M.M& Keyword Search):; > QsJ :ilIndent After Statementl !DONE0! M(M.M& Join Line) 0L@f  L !DONE1! Qx"L0Ux' QlULast Pascal Indenter .ULast Pascal Indent Pos FSHPosUi m..n0u..n 0,Qx+Qim(m.m& XIndent) Qa,.ff"E 0@fo..qIndent Align Only"'Em.lIndent Align Only' "#M.LIndent Align OnlyW'0. FN 1,-M(M.mNo Comment Search)procedurefunction"E :I*Not In A ProcedureFSErr' M(M.m& Back To Chars); M(M.M& Forward To Chars) @F  L -@F  L .( 1,M(M.mNo Comment Search)begin -1M(M.MForward Level) M(M.M& Forward To Chars);.CM(M.M& Forward To Chars) @F  L -@F  L. )J 0U..n.[.1fnq.1j [.2 [.4 0[.3 M.M& Back To Chars -1M(M.MBack Level)fwx.6 .U.2 .(0@fo..qMatch Block Word"E 0L@f L' fshpos[.7)J f~.6REPEAT f~.6RECORD f~.6LOOP s(*{0A-"N @f  L .(s}*)fkc-@f  L),.X.3 '"# Qr*Qd*Ql"N 1 '' q.1J 0L.U.4@f  L Q.1-."G Q.1J .,.m(m.m& Save For Undo)Insert Pascal End ' "# Q.4,.m(m.m& Save For Undo)Insert Pascal End 0Lq.7m(m.m& Indent) ' Qr"E iUNTIL ;.-1u.1' "#iEND;.u.1' 0@fo..qAutomatic Capitalization"E -fwfc' 1@fo..qInsert Comments"'N&q.3"N i gComment Beging.3gComment End Qr"N.u.1'' q.2j 0@v FF"E1'"#'*30:w QComment StartQComment EndFQs[l[1:I1 0:Ge-32"E1,FQe:GeUe' :,.f[.2[.1 Q.1,Q.2m(m.m& Save For Undo)Pascal Region Indent q.1j0L(z-q.2)u.2 <<@F  L (.-z-2); 2f~s"E:se"Ez-Q.2J''"#-;'> .-(z-q.2); 0l@f K m(m.m& Indent Line)w l> (z-q.2)j i   2rm(m.m& Indent Line)w 0l-2dk q.1 z-q.2j 0@FO..QPascal Abbreviations In Use"N m(m.mExpand Abbrevs In Region)' q.1,.[1,[2 Fwl ff"N[a Qa"L-fwfc' Qa"E-m(m.m^R Uppercase Initial)' Qa"G-fw@fc' ' -fwx1 0[Case Replace 1MMReplace String11 qLast Pascal Indenter[.1 :iLast Pascal Indenter.1(^R Pascal Indent Relative) [1@:I1|qLast Pascal Indenteru.1 :iLast Pascal Indenter.1(^R Tab to Tab Stop) :M(M.M^R Tab to Tab Stop)| 0,1af  +1"G 0,0af  +1"G fshpos-1( -d)m(m.m& Indent)w '' .[PFSHPOS[0 @-f  L .[QFSHPOS[2 0L Q0"G1:<0,Q0+1:FM>"ER' "#0L1:<0,Q2+1:FM>"ER' "#QPJ:M1''' <:@F.,; L @F.,; L > FSHPOS(QQ,QPK ):M(M.M& Indent)QComment StartQComment End 0@fo..qGlob of Comments Flag"N f:@m(m.m^R Indent for Comment)' 0m.vGlob of Comments Flag 1[Glob of Comments Flagw :i*Global Comment[..j 10fo..qGlobal Comment Column[Comment Column 0[Comment Begin :i*s*[Comment Start 1[Space Indent Flag 1[Auto Fill Mode @m(m.m^R Indent for Comment) w 0f"NL' fsz-.f[vzw m(m.m& Align Global Pascal Comment Ends) zjf]vz .f[vb m(m.m& Align Global Pascal Comment Ends) [.1[.2[.3 bj <:ss*;fkc 0u.1 0u.2 0u.3 .(<:fbs*; %.3w .-1f  (1+FQe)f=*e"E1u.2' :fbe; fshpos,q.1fu.1w l> fsz-.f[vzw )j q.3-1"E q.2"N -@f  bk 51@fo..qPascal Star Line Widthu.1'' Q.1-fQsU.1 Q.2"N (q.1-qComment Column-1-FQs&1)+q.1u.1' <:se; -(FQs+FQe+2)f=s *e"E FQe-1:F"G1'R q.1-(fshpos)/2 ' "#FQe-1:F"G1'Rrq.1m(m.m& Indent)f' l> zjf]vzw > [.1[.2[.3[.4[.5[.6 m.ifiu.5 z-.u.1 0l@f  r z-.u.6 0:lz-.u.3 .m(m.m& Back Over Pascal Line Comment)j .u.2 <.,(0l).:fb.5;> .,q.2f(fx.4)f z-.-q.3"N @m(m.m^R Indent for Comment)f' z-q.6j .,(g.4i).f 0l @m(m.m^R Indent Pascal Stmt)f z-q.1jw1qLast Pascal Indenter[.0 fsechodisplayw Cfsechodisplayw @ft.0 0fsechoactivew .[1fnQ1J QLast Pascal Indent PosJ0@V FF&1"E1'"#'*30: [.1 ff"E1u.1'"#u.1' q.1"E0@FO..QPascal Abbreviations In Use"N 0m(m.mWord Abbrev Mode) 0m.vPascal Abbreviations In Use 0m.lAutomatic Capitalization'' 0@FO..QPascal Abbreviations In Use"N' 1m.vPascal Abbreviations In Use 1m.lAutomatic Capitalization 0@fo..qWORDAB Loaded"E m(m.mLoad Library)WORDAB 1m.vWORDAB Loaded' m(m.mWord Abbrev Mode) m(m.mRead Word Abbrev File)EMACS;PASCAL DEFN .,:f:[aJ.-Z[z M.m& Back To Chars M.m& Back To Word M.m^R Abbrev Expand Only 0A"C-FWLFWL' QaJQz+Z .,:FF"E10[0'"# :"G10[0'"#[0'' i''RQ0, i Z-(.+1)[1Q0R 1[Overwrite Mode [..J:I..JFill in string (Ovwrt)  .-1,.+Q0+1 Z-Q1J0[a.( <-FWL-@F  L.-B@; (0A-."'E)(0A-,"'E)+(0A-["'E)+(0A-]"'E);> @F  L .[1)J Q1,.M(M.M& Save for Undo)Plus One M.VWord Abbrev Mode"N m(m.m^R Abbrev Expand Only)' .(-@f  L Q1,.Xa )J I:= GaI + 1;Q1,.QPascal Syntax Table [c:ic [e:ie [d:id FF*[b Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert c Statement .[p.[s .(0L@F  LQp-."LQpJ'fsHPos[1)J 0@fo..qe on same line*(Qb:"'G)"E 4@FOtDOf"LW0'+'Q1[2 Qb:"G4@FOtef"LW0'+'( )Q2U3 fsHPos,Q1m(m.m& XIndent)Ic #d Qb:"G 0@fo..qe on same line"Ei  0,(Q2)m(m.m& XIndent)'"#i ' Ie' Qb"L. 0@fo..qAutomatic Capitalization"E Qs,.fc' -Qb+1:L Q3-Q1m(m.m^R Indent Rigidly) .(W)J .Us' "#i  0,Q3m(m.m& XIndent)' Qb:"G i  0,(Q2)m(m.m& XIndent) IEND;1@fo..qInsert Comments"Ni gComment BegingcgComment End'' 0@fo..qAutomatic Capitalization"E Qs,.fc' .[rQpJs#-DQp,Qr-1Fm(m.m& Pascal DO-OF)WHILEBEGIN DOFm(m.m& Pascal DO-OF)FORBEGIN DOFm(m.m& Pascal DO-OF)WITHBEGIN DO1M.LOF On Same Line Fm(m.m& Pascal DO-OF)CASEOFzQPascal Syntax Table FF*[b .[p.[s .(0L@F  LQp-."LQpJ'fsHPos[1)J Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert IF Statement 1@fo..qTHEN on same line"E4@FOtIFf"LW0'+'( )Q1[2 0@fo..qBEGIN on same line*(Qb:"'G)"E 4@FOtTHENf"LW0'+'Q2[3 Qb:"G4@FOtBEGINf"LW0'+'( )Q3U4 IIF # 1@fo..qTHEN on same line"Ei  0,Q2m(m.m& XIndent)'"#i ' ITHEN' Qb:"G 0@fo..qBEGIN on same line"Ei  0,Q3m(m.m& XIndent)'"#i ' IBEGIN' Qb"L. 0@fo..qAutomatic Capitalization"E Qs,.fc' -Qb+1:L Q4-Q1m(m.m^R Indent Rigidly) .(W)J .Us' "#i  0,Q4m(m.m& XIndent)' Qb:"G i  0,Q3m(m.m& XIndent) IEND;1@fo..qInsert Comments"Ni gComment BeginiIFgComment End'' 0@fo..qAutomatic Capitalization"E Qs,.fc' .[rQpJs#-DQp,Qr-1QPascal Syntax Table FF*[b .[s Qb"L.(-Qb+1L.[y)J'"#.[y' M.m& Back To Chars M(M.m& Back to Word);]b (0A-;)"E .-1,QyM(M.M& Save for Undo)Insert ELSE Statement -D(Qs-1)Us' "#.,QyM(M.M& Save for Undo)Insert ELSE Statement' .(QsJ)Us Qs[x 0@FO..QELSE On Same Line"NQSJI ' .[p .(0L@F  LQp-."LQpJ'fsHPOS[1)J 0@fo..qBEGIN on same line*(Qb:"'G)"E 4@FOtELSEf"LW0'+'Q1[2 Qb:"G4@FOtBEGINf"LW0'+'( )Q2U3 IELSE Qb:"G 0@fo..qBEGIN on same line"Ei  0,Q2m(m.m& XIndent)'"#i ' IBEGIN' Qb"L. 0@fo..qAutomatic Capitalization"E Qs,.fc' -Qb+1:L Q3-Q1m(m.m^R Indent Rigidly) .(W)J .Us' "#i  0,Q3m(m.m& XIndent)' i# Qb:"G i  0,Q2m(m.m& XIndent) IEND;1@fo..qInsert Comments"Ni gComment BeginiELSEgComment End'' 0@fo..qAutomatic Capitalization"E Qs,.fc' .[rQxJ s#-D Qx,Qr-1QPascal Syntax Table 0@fo..qAutomatic Capitalization [n[c[d[s[g FF[b :ic :is .Up .,.M(M.M& Save for Undo)insert c block .(0L@F  LQp-."LQpJ'FSHPos[1)J Q1+(4@fo..qc Body Indentationf"LW0')[2 Q2+(4@FOtBEGINf"LW0')[3 Q1+(4@FOtcf"LW0')[4 gci Qa"E-fwfc' :i*Type c Name and Arguments (End with C-M-Z)[..J .UgZUd]..J Qgj@f  LFWXn Qg+Z-QdJ 0A-;"NI;' i i  Qb"E 0,Q4m(m.m& XIndent) IVAR #  'Qa"E-fwfc' 0,Q2m(m.m& XIndent) IBEGINQa"E-fwfc' 1@fo..qInsert Comments"Ni gComment BegingngComment End'I  0,Q3m(m.m& XIndent) Qb:"EI#'I  0,Q2m(m.m& XIndent) IENDgsQa"E-fwfc' 1@fo..qInsert Comments"Ni gComment BegingngComment End' .[rQpJs#-DQp,Qr-1F@m(m.m& Pascal Subroutine)FUNCTION;F@m(m.m& Pascal Subroutine)PROCEDURE;F@m(m.m& Pascal Subroutine)PROGRAM.fm(m.m& Pascal REPEAT-RECORD)REPEATUNTILfm(m.m& Pascal REPEAT-RECORD)RECORDENDQPascal Syntax Table FF*[b [c:ic [d:id Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert c Statement .[p.[s .(0@fo..qMatch Block Word"E 0L@F  LQp-."LQpJ'' fsHPos[1)J Q1+(4@FOtcf"LW0')[2 Ic Qb"L. 0@fo..qAutomatic Capitalization"E Qs,.fc' -Qb+1:L Q2-Q1m(m.m^R Indent Rigidly) .(W)J .Us' "#i  0,Q2m(m.m& XIndent)' i  0,Q1m(m.m& XIndent)Id#; 0@fo..qAutomatic Capitalization"E Qs,.fc' .[rQpJs#-DQp,Qr-1QPascal Syntax Table FF*[b Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert BEGIN/END .[p.[s .(0@fo..qMatch Block Word"E 0L@F  LQp-."LQpJ'' fsHPos[1)J Q1+(4@FOtBEGINf"LW0')[2 IBEGIN Qb"L. 0@fo..qAutomatic Capitalization"E Qs,.fc' -Qb+1:L Q2-Q1m(m.m^R Indent Rigidly) .(W)J .Us' "#i  0,Q2m(m.m& XIndent)' i#  0,Q1m(m.m& XIndent)IEND; 0@fo..qAutomatic Capitalization"E Qs,.fc' .[rQpJs#-DQp,Qr-1FF-1[21,F Search String: [1 "'L*2+1[3 0FO..qComment Start FQs:"G:I*;Us' 0FO..qComment End FQe:"G:I* Ue' Q3"LQe(QsUe)Us' .[.1fnq.1j 0U..n -1ff"EQErrList Mode"'E'"#'UErrList Mode [1[5 0FO..qCompiler FilenameUOld Compiler Filename 0FO..qAfter Compilation HookU1 Q1UOld After Compilation Hook Q1"E:i1' @:iAfter Compilation Hook|1M(M.M& Compile Compilation) 0U..H-1FSPJATY| 0FO..QCompiler SwitchesU1 Q1UOld Compiler Switches Q1"E:i1' 0FO..QCompile CommandU1 Q1UOld Compile Command Q1"E:i1 0FO..qCompiler Filename"G QPascal Compile CommandUCompile Command '' QOld After Compilation HookUAfter Compilation Hook QOld Compiler SwitchesUCompiler Switches QOld Compile CommandUCompile Command QOld Compiler FilenameUCompiler Filename [0 QBuffer NameU0 [Previous Buffer m(m.mSelect Buffer)*LST* Q1FSDFILE F6LSTFSDFN2 0FSDVERS 1:<-1m(m.mVisit File) @ED >"N:i*No Listing File FG' m(m.m& Save Errors) Q0m(m.mSelect Buffer)[a[b[e1[p[l[c[m0[i 100Ua (Qa*4)*5FSQVectorUb J < 0Ue <:s ***** ; 0A- "EsPage \Up' "#-1Ue0;'> Qe; -1L@f  L\Ul 1L8C .Um0Uc < @f*  f(+QcUc)L 1A-^:@; QpU:b(Qi*4) QlU:b(Qi*4+1) QcU:b(Qi*4+2) .(QmJ 1L14C1X:b(Qi*4+3) .Um)J %iW 1C%cW > > QbUError Vector QiUNum Errors 0UError Index r[i[m[0QError Vector QError Index-QNum Error"G0UError Index' %Error IndexUi Qi-QNum Error-1"E@FT(No More Errors) ' "# J Q:b(Qi-1*4)-1S  Q:b(Qi-1*4+1)-1L Q:b(Qi-1*4+2)C Q:b(Qi-1*4+3)Um @FTm ' 1fsechoactive QBuffer NameU0 [Previous Buffer m(m.mSelect Buffer)*SYN* 1:"N:i*No Pascal Syntax File FG' Hm(m.m& Count Lines)m.vPascal Keyword Count QPascal Keyword Count*3+1*5FSQVector 3U:s(0) QsM.VPascal Syntax Table 0[x <@f  L .-Z; FWX:s(%x)FWL @f  L :\U:s(%x) @f  L 2f[IBase:\U:s(%x)F]IBase 1L > Q0m(m.mSelect Buffer) m(m.mKill Buffer)*SYN* PASCALpPackage for editing Pascal code (Pascal Mode). See the info node EPASC (DIR/EMACS/PASCAL) for more details.S Initialize data structures of the modeC Set up for editing PASCAL code. Pascal mode is fully documented in the info node Pascal under Emacs. "(* " and " *)" become comment delimiters. Calls user-providable macro, PASCAL Mode Hook, which can put pascal functions into desired keys. If no hook exits, calls & Default Init PASCAL Mode. See the description of that subr for more details on what it does and how to construct your own. The suggestion is that your PASCAL Mode Hook call & Default Init PASCAL Mode then change anything you want different.vC Default setup for PASCAL mode. It sets up the following characters for this mode and buffer: RUBOUT Tab-hacking rubout C-RUBOUT Normal rubout LINEFEED Insert CR and do ^R Indent Pascal Stmt See Pascal info node (file INFO:EPASC, node DIR/EMACS/PASCAL) for description of other key settings. Turns on Auto Fill if Pascal Auto Fill Default is non-0.S Set a group of vars in Pascal Syntax Table. First arg is val to set to. Second arg is bit mask: set words which have one of those bits set in second value in Pascal Syntax Table.S Set up one of the controlling vars to set dependant vars. Var name is first string arg. Match val is second. Comment is third.}S Set up a normal var of name "Indent After x" to automatically set pascal keyword var x. Number Arg is index in table.S Set up indentation vars to interface to syntax table^R Inserts CRLF, then indents the second line. Any spaces before the inserted CRLF are deleted. If there is a Fill Prefix it is used to indent, else calls ^R Indent Pascal Stmt.^R Show unmatched paren if there is one. Argument is number of seconds to stay at paren, if no argument stays there permanently.^R Insert comment here (don't move to do so). Can be undone with UNDO.^R Indentation for Pascal code. If numeric arg, calls ^R Indent Nested, Else if not at left margin, calls ^R PASCAL Indent Relative. Else parses back to calculate proper indentaion, except setting the variable Indent Align Only to non-zero will make it always just align (call ^R Indent Nested). Print Last Pascal Indenter will print the name of the indentation function called.S forward skipping comments & quoted strings up to character in string arg.tS back skipping comments & quoted strings, TO any character are passed in the string argument (or beg. of file)S Backward over comments to a letter.S Forwards over comments to a letter or string arg.{S back to word + string arg, skipping parens Assumes M-X Back To Word is in Q-Reg w and M-X & Back Paren is in Q-Reg pC Moves back over a class of matched objects (like THEN & ELSE) in which the matching is subservient to the block matching. Assumes it is already deep. (arg = -1 means starting behind an END). If Qt is less than zero, we assume we are being called from & Indent Line{C Moves back to beyond a BEGIN/END block. Assumes it is already deep. (arg = -1 means starting behind an END). S Search for a keyword matching second arg. First arg is direction of search. Returns -1 for failing search, index of keyword found for successtS Moves Forward over matching parens. Assumes it is already deep. (arg = -1 means starting after a "(").S Moves back over matching parens, not confused by comments. Assumes it is already deep. (arg = -1 means starting behind a ")").~C Moves Forward to beyond a BEGIN/END block. Assumes it is already deep. (arg = -1 means starting after a BEGIN). S Macro to move back to statement start when parse is at a THEN or DO. Assumes all the state of & Indent Line and modifies it.S Assumes it's starting at the start of a line with no existing indentation.^R Turn off or on PASCAL Mode indentation. With no arg arg, toggles value of Indent Align Only; otherwise puts arg in Indent Align Only.C Set point and mark around current procedure. Doesn't work for nested procedure definitions. Comment lines immediately before the procedure and blank lines after it are considered part of the procedure.^R Insert end and show matching block. Indents under matching BEGIN, LOOP, CASE, RECORD, or REPEAT. Displays buffer around matching block statement. ARG = number of seconds to display there. Inserts a comment after the "END;" to show what was ended. If the "BEGIN" is commented, it copies down that comment, otherwise it tries to construct one from the code. e.g. "(* while not eoln *)" or "(* for i:= 1 to 7 *)". If you don't like the comment you can kill it with ^R Kill Comment. If matching block is REPEAT, inserts UNTIL and puts point between UNTIL and ;.C Indents each line from here to MARK. On each line it: moves past comments to first token, kills indentation, then calls ^R Indent Pascal Stmt. Leaves mark and point around changed region. Can be fixed with M-X Undo. At end, expands all abbreviations in the region if in capitalize mode. This subroutine is NOT recommended for any large blocks (over 20 lines) of code, because there are a few special cases which are indented wrong, (mainly between declarations and BEGIN) and it is very inefficient.C Standardizes capitalization of next word. No argument => same as it is now; Neg argument => all are lower case; Zero argument => all are capitalized; Pos argument => all are upper case.^R Pascal Indent Relative to last line's words. Successive calls get successive indentation points; each call aligns under ARGth next word in previous line. Words are separated by spaces, tabs, semicolons, commas, periods. To facilitate moving into a line, and changing an indentation, if there is whitespace to the right and left (i.e. this is a new indent call here), then the cursor is moved one column left.C Recursive edit for large block of comments. Comment column is set to Global Comment Column, auto fill mode is turned on, ^R Indent for Comment is called initially, Comment Start is set to "(**" to mark global comments (read "(*" as Q$Comment Begin$). "(*** *)" (comment with just a *) expand into (* * * *... *), aligned with any surrounding global comments (for boxes), or if no surrounding comments expand into Pascal Star Line Width wide. When the recursive edit returns, comment-ends within each global comment will be vertically aligned.S Ends within contiguous global comments. Contiguous global comments are comments starting with "(**", on successive lines. Contiguous global comments have their comment-ends aligned vertically. If a global comment consists soley of "*", i.e. it is "(*** *)", then it will expand out into a "(* * * * * ...* *)" comment, aligned with its contiguous global comments. If no contiguous comments, expands out into (* * *...*), Pascal Star Line Width wide and extending to left margin. After alignment, "(**" is replaced by "(* ".^R Prev line back to CHAR moved to point, indented. Non-comment text from previous line (back to CHAR typed) is moved onto the current line, after indentation, and then ^R Indent Pascal Stmt is called to re-align. Now that the prev line is changed, things might look better. Any comment on prev line is left there, and ^R Indent for Comment is called on it to align it after the text is removed from before it.S Explain the last indentation a bit. Prints what variable or idea was significant in the indentation and shows the point where the indentation was measured from for ARG secondsC Turn on capitalization of keywords. With 0 argument, turns off capitalization. Uses the WORDAB library and a file of pre-defined abbreviations which are the keywords. This command is currently not recommended because: 1) it expands common words like "in" or "if" in comments, which is a hassle; and 2) it intertwines all the capitalization abbreviations with your own abbreviationsrS Expand WORDAB abbreviations in region, but comments and strings are skipped. Assumes WORDAB already loaded.^R Set up a string of length , and overwrite. Supply length of desired string as numeric argument (default is 10). The string is created, full of spaces. You enter a recursive editing level in overwrite mode with point at the beginning of the string. Overwrite the contents, then use ^R Exit to turn off overwrite mode and move past the string.^R Make Pascal assgt stmt to increment word before point. Saves for undoing.S Sets up a structured pascal WITH, WHILE, FOR, or CASE statement. WITH, WHILE, FOR, or CASE is the first string argument; OF or BEGIN is the second.^R Sets up a structured WHILE statement. See PASCAL info node for customization information. Positive argument means do not insert BEGIN and END; negative arg means try to surround - lines within BEGIN/END.^R Sets up a structured FOR statement. See PASCAL info node for customization information. Positive argument means do not insert BEGIN and END; negative arg means try to surround - lines within BEGIN/END.^R Sets up a structured WITH statement. See PASCAL info node for customization information. Positive argument means do not insert BEGIN and END; negative arg means try to surround - lines within BEGIN/END.^R Sets up a structured CASE statement. See PASCAL info node for customization information. Negative arg means try to surround - lines within BEGIN/END; you don't want a positive arg.^R Sets up a structured IF statement. See PASCAL info node for customization information. Positive argument means do not insert BEGIN and END; negative arg means try to surround - lines within BEGIN/END.^R Set up matching ELSE statement. Positive argument means do not insert BEGIN/END; negative arg means enclose - lines withing the BEGIN/END. It will delete a ; if it finds one on the previous line.S Sets up a PROCEDURE or FUNCTION block.^R Inserts a FUNCTION block. See Pascal info node for customization information. Sets up a VAR statement, unless it is given an argument. Indents to this lines indentation.^R Inserts a PROCEDURE block. See Pascal info node for customization information. Sets up a VAR statement, unless it is given an argument. Indents to this lines indentation.^R Inserts a PROGRAM block. See Pascal info node for customization information. Sets up a VAR statement, unless it is given an argument. Indents to this lines indentation.^R Inserts a REPEAT statement. See PASCAL info node for customization information. If given a negative argument, surrounds - lines within the REPEAT/UNTIL^R Inserts a RECORD with the END. See PASCAL info node for customization information. If given a negative argument, surrounds - lines within the RECORD/ENDS Powerhorse for REPEAT & RECORD^R Writes a BEGIN/END pair If given a negative argument, encloses - lines between the BEGIN/END.C Searches for it's string argument, ignoring comments. With a pre-comma argument, only finds delimited words. Reverse searching works, except in languages which end comments with CRLFrS Turns on and off ErrList mode. With no argument, toggles ErrList Mode. Otherwise sets ErrList Mode to arg.S Turns on ErrList mode.S Turns off ErrList ModeS To be run as the After Compilation HookS Gather all errors in an array.^R Hop to the next compilation error.S Read the keywords file into the syntax table. Looks for file on EMACS: called PASCAL.SYN & Setup PASCAL Library PASCAL Mode & Default Init PASCAL Mode & Set Group Value & Set Major Variable & Set minor variable & Setup variables ^R PASCAL New Line ^R Find Unmatched Paren ^R Insert Comment ^R Indent PASCAL Stmt & Forward To Chars & Back to Chars & Back to Word & Forward to Word & Back to Word Over Paren & Back Pair Back Level & Keyword Search & Forward Paren & Back Paren Forward Level & Join Line & Indent Line ^R Toggle Indentation Mark Procedure ^R Insert Pascal End ^R Pascal End Indent Pascal Region Same Capitalization ^R Pascal Indent Relative Global Pascal Comment & Align Global Pascal Comment Ends ^R Slurp Pascal to Char Print Last Pascal Indenter Capitalize Pascal Keywords Pascal Expand Abbrevs in Region ^R Start String ^R Plus One & Pascal DO-OF ^R Pascal WHILE ^R Pascal FOR ^R Pascal WITH ^R Pascal CASE ^R Pascal IF ^R Pascal ELSE & Pascal Subroutine ^R Pascal FUNCTION ^R Pascal PROCEDURE ^R Pascal PROGRAM ^R Pascal REPEAT ^R Pascal RECORD & Pascal REPEAT-RECORD ^R Pascal BEGIN No Comment Search ErrList Mode & In ErrList Mode & Out ErrList Mode & Compile Compilation & Save Errors ^R Next Error & Read Keywords +8+fq(+4)[20[3 <%3,-q2f2u3q3&1@;q3"l0'> f[BBindq3-1*5,q3*5g2q:..o(0)+q2