IMD 1.16: 7/09/2007 11:01:37 MUMPS 2.70 For CP/M 2.2 Z80 Version JAN 82  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  %ZBV MMPSETGLOB COMERRORS DAT GLOBALS DATMUMPS COM_`abcdefghijklmnMUMPS COMopqrstuvwxyz{|}~MUMPS COM<PIP COM:" D GPOP G GN4:M>0 D GXXX G GEND S D=$D(^(NXT))#GN8 I D#10=1 D GYYY I ERR'=0 G GEND* I D\10=1 D GPSH S NXT=$O(^(NXT,"")) G GSTOPWORDMMP'HEAPSORTMMP(KWICMAINMMP )*KWIC MMP+,-",ERR=0 D GNXT I ERR=0 W "---> ^",RG," DONE" K FLG Q ;GNXT I GLB'["("!(GLB[")") G GN2J S SUB=$P(GLB,"(",2,999),CNT=0 F J=%INDEX MMP %EDITH MMP %GL MMP %IS MMP MUMPS COMMUMPS COMMUMPS COM9N6 G GN5GEND K D,GLB,M,NXT Q;GPSH S NXT(M)=NXT,GLB(M)=GLB,M=M+1,GLB=GLB_""""_NXT_"""," Q:GPOP S M=M-1 S:M>0 GLB=GLB(M),NTODAY MMP.MFLG MMP/MLOOK MMP 01MOPT MMP21:1:$L(SUB)-1 S:$E(SUB,J)="," CNT=CNT+1C S M=1,GLB=$P(GLB,"(",1)_"(" F J=1:1:CNT S NXT=$P(SUB,",",J) D GPSH8 S NXT=$P(SUB,",",%ZRS MMPSETUP COM%INDX3 MMP%INDX4 MMP XT=NXT(M) K GLB(M),NXT(M) QGXXX U DEV W EOR U 0 QGYYY S PNXT1=NXT,PNXT2=""` F I=1:1 Q:'$F(PNXT1,"""") S T=$P(PNXT1,"""",1)MPRT MMP345MEDIT MMP67OTH55 MMP89:;OTHEXIT MMP<CNT+1),D=$D(@(GLB_"NXT)")) K CNT,J,SUB G GN8$GN2 S D=$D(@GLB) I D=0 D GERR G GEND I D#10 D GZZZ I ERR'=0 G GENDD S M=1,NXT%INDX5 MMP %INDX2 MMP%INDX1 MMP%ZBU MMP .ZBV ;BACK-UP GLOBALS AND/OR ROUTINES TO FLOPPY% ;***********************************% ;* GLOBAL WRITE & VERIFY SECTION *,PNXT2=PNXT2_T_"""""",PNXT1=$P(PNXT1,"""",2,999) S PNXT2=PNXT2_PNXT13 U DEV W GLB,"""",PNXT2,""")=",EOL,^(NXT),EOL U 0 Q'GZZOTHXY MMP=TX ASM>?@ABCDEFGHIJKLMTX ASMNORX ASMwPQRSTUVWXYZ[\]^="" S:GLB'["(" GLB=GLB_"(" S:GLB[")" GLB=$P(GLB,")",1)_","!GN4 S NXT=$O(@(GLB_"NXT)")) G GN6GN5 S NXT=$O(^(NXT))+GN6 I NXT="%RSET MMP %EDIT MMP!"#LEXICON MMP$BIBENTRYMMP %&% ;*********************************** ;GLOBAL WRITE<GWRT S GLB="^"_RG W !,"^",RG," STARTED " U DEV W GLB,EOL U 05 S FLG="W Z U DEV W GLB,"=",EOL,@GLB,EOL U 0 QSGERR S ERR=1 W !,"GLOBAL ",$P("VERIFY,WRITE",",",$F("VW",FLG)-1)," ERROR AT ",GLB Q& ;***NO TRUE VALUE IN $SELECT NAKED GLOBAL REFERENCE ILLEGAL GLOBALS.DAT NOT ON DISK ROUTINE NOT ON DISK DISK I/O ERROR TOO MANY NAKED REFERENCES UNAUTHORIZED GLOBAL ACCESS DIVISION BY ZERO ILLEGAL CHARACTER SYNTAX STACK OVERFLOW *********************************& ;* ROUTINE WRITE & VERIFY SECTION *& ;************************************ ;ROUTINE WRI ROUTINE IS UNNAMED ROUTINE ALREADY IN LIBRARY DELETE OR SAVE ROUTINE COMMAND ONLY USED IN INDIRECT MODE ILLEGAL EXPRESSION ILLEGAL PATTERN MISSING COMMA ILLEGAL VARIABLE NAME ILLEGAL USE OF INDIRECTION MISSING LINESTART CHARACTER STACK OVERFLOW ARITHMETIC OVERFLOW UNDEFINED LOCAL VARIABLE ILLEGAL FUNCTION NAME TERWRT U DEV W RG,EOL5 X "ZL @RG F J=1:1 Q:$T(+J)="""" U DEV W $T(+J),EOL"* U DEV W EOR U 0 W:$X+$L(RG)>70 ! W RG," " K J ILLEGAL COMMAND DURING BREAK COMMAND ONLY USED DURING BREAK SUBSCRIPT MISSING INVALID SUBSCRIPT TOO MANY PARAMETERS UNDEFINED ROUTINE LINE NUMBER ILLEGAL NUMERIC LITERAL MISSING EQUAL SIGN ILLEGAL ROUTINE OR LABEL NAME INVALID NAME SYNTAX ILLEGAL COMMAND NAME UNDEFINED PROGRAM NAME UNDEFINED GLOBAL NAME GLOBAL+VALUE TOO LONG DIRECTORY FULL  Q ; ;ROUTINE VERIFYRVER Q$ ;**********************************+J),EOL"* U DEV W EOR U 0 W:$X+$L(RG)>70 ! W RG," " K J DEVICE NOT OPEN INVALID DRIVE TRYING TO READ FROM WRITE ONLY DEVICE INVALID DEVICE NUMBER INVALID FILE NAME UNIMPLEMENTED OPERATION SYMBOL TABLE OVERFLOW TOO MANY LEVELS OF NESTING DUPLICATE LABEL INVALID LINE REFERENCE PROGRAM LARGER THAN PARTITION STRING TOO LONG UNMATCHED PARENTHESES ILLEGAL USE OF NOT OPERATOR ILLEGAL COMMAND TERMINATOR   $D(^XCR(RTN,"T",LAB)) S ERR=15 D ER^%INDX1 G CD S ^XCR(RTN,"T",LAB)=""gCD S I=$L(LIN) IF $E(LIN,I)=" " S ERR=13 D ER^%INDX1 LC)"+ X (X_" IF ^(LC)="""" K ^(LC) S LC=LC-1 Q")P S LAB=RTN,LABO=0,NRO=NRO+1 IF $P(^XCR(RTN,0,1)," ",1)'=LAB S ERR=17 D ER^%INECUTE,,I) G:CH="""" QUOTE QiCMD ;,BREAK,CLOSE,DO,ELSE,FOR,GOTO,HALT,HANG,IF,KILL,LOCK,OPEN,PRINT,QUIT,READ,SET,USE,VIEW,WRITE,X YOU WISH TO NOTE UNREFERENCED LABELS ? Y => ",IOP4 S IOP4=IOP4=""!(IOP4?1"Y".E)Y R !!,"DO YOU WISH TO PRINT INDEX ? Y => ",I QG G DG^%INDX4 QK G KL^%INDX5 QP G ZR^%INDX5 QQ Q:ARG="" S ERR=9 G ER^%INDX1R G RD^%INDX3 Q S G ^%INDX3 Q V S ARG=F CH=1:1 Q:$E(LIN,I)'=" " S I=I-1,LIN=$E(LIN,1,I) S LIN=$P(LIN," ",2,999),GRB=" "EE IF LIN="" G ^%INDX2) S COM=$E(LIN,1) IDX1. F TXT=1:1:LC S LIN=^XCR(RTN,0,TXT) D LN W "." S LAB=-1,LABO=0DBC S LAB=$N(^XCR(RTN,"I",LAB)) G:LAB="@(" BC IF LAB=-1 G OP1 S IOP1=IOP1=""!(IOP1?1"Y".E) G:'IOP1 BEGO R !!,"DO YOU WISH TO LIST ROUTINES ? Y => ",IOP2 S IOP2=IOP2=""!(IOP2?1"Y".E)[ "" QW G WR^%INDX4 QX G XE^%INDX5 QZ G ZC^%INDX5 Q4SEP F I=1:1 S CH=$E(LIN,I) D QUOTE:CH="""" Q:"; "[CH9 S ARG=$E(LIN,1,IF COM=";" S LIN="" G EE3 IF "BCDEFGHIKLOPQRSUVWXZ"'[COM S ERR=1 G ER^%INDX1C D SEP IF ARG[":" S COM=$P(ARG,":",1),GRB=GRB_","_BD:IOP4,BEG5 G:$D(^XCR(RTN,"T",LAB)) BC S ERR=14 D ER^%INDX1 G BC6BD S LAB=$N(^XCR(RTN,"T",LAB)) G BEG:LAB=-1,BD:LAB=RTN5 G:$R !!,"DO YOU WISH TO PRINT ERRORS AND WARNINGS ? Y => ",IOP3 S IOP3=IOP3=""!(IOP3?1"Y".E) W ! D ^%ISOBEG S RTN=$O(^UTILITY($-1) S:CH=" " I=I+1 S LIN=$E(LIN,I,999) Q7QUOTE S I=I+1,CH=$E(LIN,I) IF CH="" S ERR=6 G ER^%INDX18 G QUOTE:CH'="""" S I=I+1,CH=$P(ARG,":",2,999) E S COM=ARGU IF $L(COM)>1,$E(COM,1)'="Z",$P($T(CMD),";",2,999)'[(","_COM_",") S ERR=1 G ER^%INDX1F D SEP D(^XCR(RTN,"I",LAB)) BD S ERR=16 D ER^%INDX1 G BD-LN K V IF $P(LIN," ",1)="" S LABO=LABO+1 G CDN S LAB=$P(LIN," ",1),LABO=0 IFJ,RTN)) IF RTN="" G:IOP1 PR^%INDX1 K ^XCR,^UTILITY($J) QJ W !,RTN S X="ZL "_RTN_" S ^XCR(RTN,0,1)="""" F LC=1:1:99 S ^(LC)=$T(+$E(LIN,I) G:CH="""" QUOTE QiCMD ;,BREAK,CLOSE,DO,ELSE,FOR,GOTO,HALT,HANG,IF,KILL,LOCK,OPEN,PRINT,QUIT,READ,SET,USE,VIEW,WRITE,X /INDEX ;REL - INDEX & CROSS-REFERENCE ; 02/21/81A W !!!,"CROSS-REFERENCE ROUTINE",! K ^XCR D ^%RSET S RTN="",NRO=0Y R !,"DOD:"DEFGKPQRSVWXZ"[COM @$E(COM,1) S:ARG'="" GRB=GRB_","_ARG G EED G DG^%INDX4 QE Q:ARG="" S ERR=7 G ER^%INDX1F G FR^%INDX4 NG/ ; (I)NSERT - INSERT LINE(S) INTO THE ROUTINE4 ; (E)VERY - REPLACE EVERY OCCURANCE OF A STRING - ; (G)ET - GET AAT THE '>>' PROMPT:# ; ? - TO GET THIS DISPLAY0 ; LABEL - FOLLOWED BY SPACE TO EDIT A LINE% ; ^GLOBALREF - TO E%GL ; GLOBAL LISTER ;#START R !,"GLOBAL: ",%GB I %GB="" Q? W !,"GLOBAL: ",%GB S %REF="^"_%GB I $D(@%REF)#10=1 W ?20,@%RE ROUTINE FROM MUMPS FILE/ ; (B)ACKUP - BACKUP A ROUTINE TO A CP/M FILE2 ; (R)ESTORE - RESTORE A ROUTINE FROM A CP/M FILET ADIT A GLOBAL NODE) ; MUMPS CODE - FOR DIRECT MODE EXECUTION3 ; SINGLE LETTER CODES TO EDIT THE CURRENT ROUTINE:' ; (A)GAIN F! S %1="",%REF=%REF_"("""_%1_""")"[ W ! F %I=1:1 S %1=$O(@%REF),%REF="^"_%GB_"("""_%1_""")" Q:%1="" W ".(",%1,")",?20,@%REF,{F%EDITH ; SYSTEM EDITOR HELP - COPYRIGHT (C) 1980 J.J. ALTHOUSE & ASSC.9 F I=1:1 S X=$T(HELP+I) Q:'$L(X) S ^%(999+I)=$E(X,4 - REPEAT PREVIOUS COMMAND. ; (M)OVE - MOVE A LINE WITHIN THE ROUTINE- ; (D)ELETE - DELETE LINE(S) OF THE ROUTINE+ ; (L!! S %1="",%REF=%REF_"("""_%1_""")"[ W ! F %I=1:1 S %1=$O(@%REF),%REF="^"_%GB_"("""_%1_""")" Q:%1="" W ".(",%1,")",?20,@%REF,,255)" W !,"EDITOR HELP TEXT LOADED",! Q ;5 ; THE TEXT THAT FOLLOWS IS LOADED INTO THE GLOBAL ^% ; STARTING AT NODE 1000>)IST - LIST LINE(S) OF THE ROUTINE) ; (C)HANGE - CHANGE CODE WITHIN A LINE/ ; (S)EARCH - SEARCH THE ROUTINE FOR A STRI ; THIS TEXT IS DISPLAYED WHEN A USER ENTERS '?' TO THE EDITOR ;HELP ; HELP TEXT STARTS HERE1 ; ENTER ONE OF THE FOLLOWING  64%IS S IO=$I,IOM=80,IOSL=24,IOF="#",IOST="C",IOPAR=""@Ok'EEFLG="" Q9 S FLG=$E(FLG,1) I "DR"'[FLG W "ENTER 'D' OR 'R'",! G RS2G I FLG="R" W "BEGIN ",$E(TYP,1,$L(TYP)-1)," RESTORE" W:TYP= (DEFAULT=B): ",DRV I DRV="" S DRV="B" W "(B)": I DRV'?1U W !,"ENTER THE LETTER OF THE DESIRED DRIVE" G D'E R !!,"FILE NAME: "="X BB,CC I %TP'=EOR ZI:FLG=""R"" %TP I FLG=""D"" W !,%TP"8 S BB=$P($T(READ)," ",2,999),CC=$P($T(READ+1)," ",2,999)1R2 D READ "ROUTINES" !' D RTN:TYP="ROUTINES",GLB:TYP="GLOBALS"9 I FLG="R" W !,"END OF ",$E(TYP,1,$L(TYP)-1)," RESTORE",! K %H,%TP,EOL,,FIL I FIL="" G END. D OPEN W !,"DISK FILE ",DRV,":",FIL," OPENED" D RSTOR G EEND U DEV C DEV:0 U 0 K %R,BLK,DEV,FNO,FIL,I %TP="END ROUTINES" K AA,BB,CC,I,RTN QO S RTN=%TP W:FLG="D" !,RTN X ("ZR F I=1:0 X AA I %TP=EOR ZS:FLG=""R"" @RTN Q")& I FLGEOR,FLG,TYP Q ;************************* ;RETRIEVE GLOBALS FROM FLOPPY+GLB D READ I %TP="END GLOBALS" K GLB,I,RG Q& S RG=%DRV Q ;*************************6RSTOR S %H="",%J=0,EOL=$C(13)_$C(10),EOR=$C(13)_$C(12)= D READ S TYP=$P(%TP," ",2) D READ S!  !~#~A_<–<ʜ<ʢv  MMO!0M:M)="R" W:$X+$L(RTN)>70 ! W RTN," " G R2 ;*************************READ U DEV R %TP S:'$L(%TP)&%J %TP=EOR U 0 QOPEN O DTP W !,RG W:FLG="R" " STARTED "n F I=1:0 S %J=1 D READ Q:%TP=EOR S GLB=$P(%TP,"=",1),%J=0 D READ S:FLG="R" @GLB=%TP I FLG="D"  DAT=%TP D READ S TTL=%TP< W !!,TYP," SAVED ",DAT W:TTL'="" !,"TITLED: ",TTL K DAT,TTL/RS2 R !,"DISPLAY OR RESTORE: ",FLG,! I M)MM)M_ o|M{zM) |O|g}y_x|O|g}G|g}o|y2 25ZRS ;RESTORE GLOBALS AND/OR ROUTINES FROM FLOPPY DISK- K W !!!,"RESTORE ROUTINES AND/OR GLOBALS",! S DEV=2:D R !,"DRIVEEV:(DRV:FIL) U 0 Q70 ! W RTN," " G R2 ;*************************READ U DEV R %TP S:'$L(%TP)&%J %TP=EOR U 0 QOPEN O DW !,GLB,"=",%TP I FLG="R" W "---> ",RG," DONE" G GLB ;************************* ;RETRIEVE ROUTINES FROM FLOPPYBRTN S AA  yC!p#{: 2">2 ͹>2"2#2$ %}ʇ!_s# yK!{dp#Yxr7kw: ‚: 2"NiYʟ rk i  s!t~#~NYŸ  >>2!"o2k*oK*UOTE S I=I+1,CH=$E(X,I) I CH="" S ERR=6 G ER^%INDX16 G QUOTE:CH'="""" S I=I+1,CH=$E(X,I) G:CH="""" QUOTE QQRD Q:ARG="" S X=ARN6 G GN5GEND K D,GLB,M,NXT Q;GPSH S NXT(M)=NXT,GLB(M)=GLB,M=M+1,GLB=GLB_""""_NXT_"""," Q:GPOP S M=M-1 S:M>0 GLB=GLB(M),N M2 QZSTORE G:CH'="^" L S S=$E(S,2,99) I $E(S,1)="(" S S=$E(S,2,99),LOC="N",GRB=GRB_","_S D ST Q S LOC="G",ERR=12 G G*L I CH<ʨñ<ñQñ\ñh : GOxG!#w#y7>? wR.INDX3 ;PROCESS SET COMMAND ; 03/03/81 12:54 S PRV=","_S2 Q:ARG="" S X=ARG F I=1:1 S CH=$E(ARG,I) D QUOTE:CH="""",PAREo"o *q ENTER DRIVE OF THE MUMPS.COM TO CHANGE: $ THAT LEAVES A PARTITION SIZE OF $) $ BYTES IS THAT OK? G F I=1:1 S CH=$E(ARG,I) D QUOTE:CH="""",PAREN:CH="(" Q:","[CH1 S S=$E(ARG,1,I-1),ARG=$E(ARG,I+1,999),CH=$E(S,1)$ I CH="*" S S!9"q!  s!t~ #~A_K< !"o2k*oK*o"oH : v="@" S S=$E(S,2,999),GRB=GRB_","_S Q# I $E(S,1,2)="$Z" S GRB=GRB_","_S Q& I CH'="%",CH'?1U S ERR=10 G ER^%INDX1 S LOC="L",ER! GLOBALS.DAT ALREADY PRESENT ON THIS DRIVE$ NO DIRECTORY SPACE$ BAD OPEN$ BAD CLOSE$ WRITE ERROR$ ENTER THN:CH="(" Q:","[CH!(CH_PRV="=,")- S S=$E(ARG,1,I-1),ARG=$E(ARG,I+1,999),PRV=CH- I CH'="="!($E(S,1)="@") S GRB=GRB_","_S G S2" $ ENTER NUMBER OF GLOBAL BUFFERS ($ THAT COMBINATION IS TOO BIG--TRY AGAIN $ DO YOU WANT AUTO-EXECUTE MODE? $ ENTER THE MUM=$E(S,2,999),CH=$E(S,1)1 I "%"'[CH,CH'?1U D R3 S:S'="" GRB=GRB_","_S G RDA S X=S F I=2:1 S CH=$E(S,I) D QUOTE:CH="""",PAREN:CH xʏ0_0_ i s!t~iO#~0i:i_zW# ¹i2:!=##**}o|gڔ"R=113G S X=$P(S,"(",1) I X'?1"%".UN,X'?1U.UN G ER^%INDX1* D ST S:S["(" GRB=GRB_","_$P(S,"(",2,99) Q PAREN S PC=1P2 S I=I+1,E MAXIMUM SIZE FOR YOUR GLOBALS FILE (K-BYTES): $ WHICH DRIVE DO YOU WANT THE GLOBALS ON? $GLOBALS DAT S CH=$E(S,1) I CH="(" D MULT G S2 D STORE G S21MULT S L=$L(S) I $E(S,L)'=")" S ERR=5 G ER^%INDX1 S HS=$E(S,2,L-1)EM2 S X=HPS COMMANDS TO AUTO-EXECUTE $ THE NEW CONFIGURATION OF MUMPS IS SAVED $MUMPS COMTION SIZE OF $) $ BYTES ="(" Q:":"[CH3 I CH=":" S GRB=GRB_","_$E(S,I+1,999),S=$E(S,1,I-1); S X=$P(S,"(",1) I X'?1"%".UN,X'?1U.UN S ERR=11 G ER^%INDX1 F*'}o|gx4x0_ > Z>dT>Nd }0_ l s!t~ʟ#~CH=$E(X,I) I PC=0 Q.P4 G P2:"()"""'[CH I CH="" S ERR=5 G ER^%INDX1 I CH="""" D QUOTE G P4 S PC=PC+$S(CH="(":1,1:-1) G P24Q" D GPOP G GN4:M>0 D GXXX G GEND S D=$D(^(NXT))#GN8 I D#10=1 D GYYY I ERR'=0 G GEND* I D\10=1 D GPSH S NXT=$O(^(NXT,"")) G GS F I=1:1 S CH=$E(HS,I) D QUOTE:CH="""",PAREN:CH="(" Q:","[CH. S S=$E(HS,1,I-1),HS=$E(HS,I+1,999),CH=$E(S,1) D STORE G:HS'=""  S LOC="L" D ST& I S["(" S GRB=GRB_","_$P(S,"(",2,999) G RD3R3 I "!#?"[CH S S=$E(S,2,999),CH=$E(S,1) G R3:S'="" QOST S ROC,S)) S ^XCR(RTN,LOC,S)=R_"," Q* S ^XCR(RTN,LOC,S)=^XCR(RTN,LOC,S)_R_"," QDFR Q:$E(ARG,1)="@" S STR=2,L="=" D LOOP I CH="" S9) G:ARG'="" DG K LBL,PGM QALOOP F I=STR:1 S CH=$E(ARG,I) D QUOTE:CH="""",PAREN:CH="(" Q:L[CH Q PAREN S PC=1 P2 S I=I+1,CEN S PC=1 P2 S I=I+1,CH=$E(ARG,I) I PC=0 Q.P4 G P2:"()"""'[CH I CH="" S ERR=5 G ER^%INDX1 I CH="""" D QUOTE G P4 S PC=PC+$LOOP S LBL=$E(ARG,1,I-1)d I CH="+" S (STR,S)=I+1 S:$E(ARG,STR)="^" STR=STR+1 D LOOP S S=$E(ARG,S,I-1) I S'?.N S GRB=GRB_","_S0=$F(S,"(") S:R>1 S=$E(S,1,R-1) Q:$D(V(LOC,S)) I LOC="G",S'["(" S S=S_"("* S R=LAB,V(LOC,S)="" S:LABO>0 R=R_"+"_LABO1 I '$D(^X ERR=8 G ER^%INDX1_ S S=$E(ARG,1,I-1),ARG=$E(ARG,I+1,999),X=$P(S,"(",1) I X'?1"%".UN,X'?1U.UN S ERR=11 G ER^%INDX15 S LOC="L" H=$E(ARG,I) I PC=0 Q.P4 G P2:"()"""'[CH I CH="" S ERR=5 G ER^%INDX1 I CH="""" D QUOTE G P4 S PC=PC+$S(CH="(":1,1:-1) G P26S(CH="(":1,1:-1) G P26QUOTE S I=I+1,CH=$E(ARG,I) I CH="" S ERR=6 G ER^%INDX18 G QUOTE:CH'="""" S I=I+1,CH=$E(ARG,I) G:CH=""""  I CH="^" S STR=I+1 D LOOP S PGM=$E(ARG,STR,I-1)L I CH=":" S STR=I+1,L="," D LOOP S S=$E(ARG,STR,I-1) I S'="" S GRB=GRB_","_S>CR(RTN,LOC,S)) S ^XCR(RTN,LOC,S)=R_"," Q* S ^XCR(RTN,LOC,S)=^XCR(RTN,LOC,S)_R_"," QV(LOC,S)="" S:LABO>0 R=R_"+"_LABO1 I '$D(^XD ST S:S["(" GRB=GRB_","_$P(S,"(",2,999) Q_WR F I=1:1:$L(ARG) S CH=$E(ARG,I) D QUOTE:CH="""",PAREN:CH="(" I CH="?","!#,"[$E(ARGQUOTE S I=I+1,CH=$E(ARG,I) I CH="" S ERR=6 G ER^%INDX18 G QUOTE:CH'="""" S I=I+1,CH=$E(ARG,I) G:CH="""" QUOTE QOST S R=$F(S,"(QUOTE Q0ZC I "ILRS"'[$E(COM,2)!($E(COM,2)="") S ARG="" Q, S COM=$E(COM,1,2) Q:COM="ZI" G:COM="ZR" ZR7U1 S L="," D LOOP S S=$ I PGM'="" S LOC="X",S=$S($E(PGM,1)'="@":PGM,1:"@(") D ST G D1L I LBL'="" S S=$S($E(LBL,1)'="@":LBL,1:"@("),LOC=$S(LBL'["^":"I"3INDX5 ;PROCESS X, Z, K COMMANDS ; 03/10/81 18:50XE S GRB=GRB_","_ARG?REP S L=",:" D LOOP I CH=":" S ARG=$E(ARG,I+1,999,I-1) D SET Q-SET S ARG=$E(ARG,1,I-1)_","_$E(ARG,I+1,999) Q S CH=$E(ARG,I) D QUOTE:CH="""",PAREN:CH="(" I CH="?","!#,"[$E(ARG") S:R>1 S=$E(S,1,R-1) Q:$D(V(LOC,S)) I LOC="G",S'["(" S S=S_"("* S R=LAB,V(LOC,S)="" S:LABO>0 R=R_"+"_LABO1 I '$D(^XCR(RTN,LE(ARG,1,I-1),ARG=$E(ARG,I+1,999)! D:$E(S,1)="@" NDR Q:ARG="" G U1#NDR S S=$E(S,2,999),GRB=GRB_","_S QOST S R=$F(S,"(") S:R>1,1:"X") D STD1 S ARG=$E(ARG,I+1,999), I $E(LBL,1)="@" S GRB=GRB_","_$E(LBL,2,999), I $E(PGM,1)="@" S GRB=GRB_","_$E(PGM,2,99),L="," D LOOP& S ARG=$E(ARG,I+1,999) Q:ARG="" G REP?LOOP F I=1:1 S CH=$E(ARG,I) D QUOTE:CH="""",PAREN:CH="(" Q:L[CH Q PAR<;INDX4 ;PROCESS DO, GOTO, & FOR COMMANDS ; 03/09/81 19:14:DG S LBL="",PGM="",STR=1,L="+^:," S:$E(ARG,1,2)="@^" STR=3 D    S=$E(S,1,R-1) Q:$D(V(LOC,S)) I LOC="G",S'["(" S S=S_"("* S R=LAB,V(LOC,S)="" S:LABO>0 R=R_"+"_LABO1 I '$D(^XCR(RTN,LOC,S)) SX_",CH'=""%"""; F I=2:1 S CH=$E(GRB,I) D QUOTE:CH="""",PAREN:CH="(" I @X Q S S=$E(GRB,1,I-1),CH=$E(S,1)a G:CH'="^" L S S=$E(INDX1 I CH="""" D QUOTE G P4 S PC=PC+$S(CH="(":1,1:-1) G P26QUOTE S I=I+1,CH=$E(GRB,I) I CH="" S ERR=6 G ER^%INDX18 G QUOT%INDX13G S X=$P(S,"(",1) I X'?1"%".UN,X'?1U.UN G ER^%INDX1- D ST S:S["(" GRB=GRB_","_$P(S,"(",2,999) G AI CH'?1U,CH'="%" G ER^",") S ERR=3 G ER^%INDX1> Q:$E(CH,1)'="T" F I=I+1:1 S CH=$E(GRB,I) I CH'?1UN,CH'="%" QO S R=4,S="" S:$E(GRB,4)="%" R=5,S="%"  ^XCR(RTN,LOC,S)=R_"," Q* S ^XCR(RTN,LOC,S)=^XCR(RTN,LOC,S)_R_"," QBZR Q:ARG="" S L=":," D LOOP S S=$E(ARG,1,I-1),ARG=$E(ARG,S,2,999) I $E(S,1)="(" S S=$E(S,2,999),LOC="N",GRB=$E(GRB,3,999) D ST G INDX2 S LOC="G",ERR=12 G GL S LOC="L",ERR=113 I CH= )INDX2 ;PROCESS "GRB" ; 03/02/81 18:57@ F I=1:1 S CH=$E(GRB,I) D QUOTE:CH="""" I "^$@%?"""[CH!(CH?1U) Qp Q:CH="" I CH=E:CH'="""" S I=I+1,CH=$E(GRB,I) G:CH="""" QUOTE QOST S R=$F(S,"(") S:R>1 S=$E(S,1,R-1) Q:$D(V(LOC,S)) I LOC="G",S'["(" S S=S_"F R=R:1 Q:$E(GRB,R)'?.UN S S=S_$E(GRB,R) Q:S="" S LOC="I" D ST Q(SPV I "HIJSTXYZ"'[CH S ERR=4 G ER^%INDX1I I $L(X)>1,CH'="I+1,999)# I $E(S,1)="@" S GRB=GRB_","_S G ZR) S:S["+" GRB=GRB_","_$P(S,"+",2,999) G ZR KL S S=ARGKA Q:ARG="" S L="," D LOOP"@" S S=$E(S,2,999),GRB=$E(GRB,2,999) G INDX2 I CH'="%",CH'?1U G ER^%INDX13G S X=$P(S,"(",1) I X'?1"%".UN,X'?1U.UN G ER^%INDX"E",$E(GRB,I-1)?1N S S=$E(GRB,I+1) I S?1N!("+-"[S&($E(GRB,I+2)?1N)) S GRB=$E(GRB,I+2,999) G INDX2? S GRB=$E(GRB,I,999) I CH="$"("* S R=LAB,V(LOC,S)="" S:LABO>0 R=R_"+"_LABO1 I '$D(^XCR(RTN,LOC,S)) S ^XCR(RTN,LOC,S)=R_"," Q* S ^XCR(RTN,LOC,S)=^XCR(RTN,LZ",$P($T(SPC),";",2,999)'[(","_X_",") S ERR=4 G ER^%INDX1 QNPAT F I=2:1 S CH=$E(GRB,I) D QUOTE:CH="""" I CH=""!(CH'?1N&("ACEL S S=$E(ARG,1,I-1),ARG=$E(ARG,I+1,999),CH=$E(S,1) I CH="(" S GRB=GRB_","_S G A I CH="@" D NDR G AW G:CH'="^" L S S=$E(S,2,91% D ST I S["(" S GRB=$P(GRB,"(",2,999) E S GRB=$E(GRB,I,999) G INDX2FUN F I=2:1 Q:$E(GRB,I)'?1U6 S X=$E(GRB,2,I-1),CH= D FUN S GRB=$E(GRB,I,999) G INDX2 I CH="?" D PAT G INDX25 S X="CH?.P" S:CH="@" X=X_",(CH=""""!(""%@^$""'[CH))" S:CH="^" X=OC,S)_R_"," QUFNC ;,ASCII,CHAR,DATA,EXTRACT,FIND,JUSTIFY,LENGTH,NEXT,PIECE,RANDOM,SELECT,TEXT,VIEW,&SPC ;,HOROLOG,IO,JOB,STORANPU."'[CH)) Q S GRB=$E(GRB,I,999) Q PAREN S PC=1 P2 S I=I+1,CH=$E(GRB,I) I PC=0 Q.P4 G P2:"()"""'[CH I CH="" S ERR=5 G ER^%99) I $E(S,1)="(" S S=$E(S,2,999),LOC="N",GRB=GRB_","_S D ST Q S LOC="G",ERR=12 G G/L S LOC="L",ERR=11 I CH'?1U,CH'="%" G ER^$E(GRB,2) I $E(GRB,I)'="(" G SPV+ I "ACDEFJLNPRSTVZ"'[CH S ERR=3 G ER^%INDX1I I $L(X)>1,CH'="Z",$P($T(FNC),";",2,999)'[(","_X_  GE,TEST,X,Y,QUFNC ;,ASCII,CHAR,DATA,EXTRACT,FIND,JUSTIFY,LENGTH,NEXT,PIECE,RANDOM,SELECT,TEXT,VIEW,&SPC ;,HOROLOG,IO,JOB,STORAID GLOBAL VARIABLE NAME ;BLANK(S) AT END OF LINE ;MISSING LABEL REFERENCED ;DUPLICATE LABEL0 ;WARNING - LABEL NOT REFERENRTX,1,11),ERTX=ERTX_" "_$P($T(ERROR+ERR),";",2)4 W !?3,ERTX S:'$D(^XCR(RTN,"E",0)) ^XCR(RTN,"E",0)=0/ S ERR=^XCR(RTN,"E",0)+1CR1 G CR"CR1 S R=$N(^XCR(RTN,LOC,R)) Q:R=-1; I '$D(^XCR("***",LOC,R)) S ^XCR("***",LOC,R)=RTN_"," G CR2# I $L(^(R))<230 S ^,! S LOC="L",SYM="" D P0 W !!,"GLOBAL VARIABLES",! S LOC="G",SYM="^" D P. W !!,"NAKED GLOBALS",! S LOC="N",SYM="^(" D P/ W !!CED IN THIS ROUTINE+ ;WARNING - FIRST LINE TAG NOT ROUTINE NAMEPR ;PRINT INDEX% S RTN="" S:IO=$I IO=0 I IO O IO U IO6BEG S ,^(0)=ERR,^(ERR)=ERTX QERROR ; ;UNDEFINED COMMAND ;UNDEFINED 'Z' COMMAND ;UNDEFINED FUNCTION ;UNDEFINED SPECIAL VARIAB(R)=^(R)_RTN_"," E S ^(R)="..."CR2 G:LOC'="X" CR1@CR3 I '$D(^XCR("***","Z",RTN)) S ^XCR("***","Z",RTN)=R_"," G CR17 S ^XC,"LABEL REFERENCES",! S LOC="I",SYM="" D P3 W !!,"EXTERNAL REFERENCES",! S LOC="X",SYM="^" D P# W !!,"***** END *****",! GRTN=$O(^UTILITY($J,RTN)) I RTN="" G END:NRO<2,CRv W # I IOP2 W !!,"***** ",RTN," *****",! F I=1:1 Q:'$D(^XCR(RTN,0,I)) S LLE ;UNMATCHED PARENTHESIS ;UNMATCHED QUOTATION MARK) ;ELSE COMMAND FOLLOWED BY ONLY ONE SPACE! ;FOR COMMAND DID NOT CONTAIR("***","Z",RTN)=^XCR("***","Z",RTN)=_R_"," G CR1ICRP W #!!,"***** CROSS REFERENCE OF ALL ROUTINES *****",! S RTN="***"< W BEG P S L=-1,PC=03W S L=$N(^XCR(RTN,LOC,L)) I L=-1 W:'PC !?3,"NONE" Q S PC=1,X=^(L) W !?3,SYM,L,?16D F I=1:1 S ARG=$P(X,",=^(I) W !,$P(L," ",1),?7,$P(L," ",2,999){ I IOP3,$D(^XCR(RTN,"E",0)) W !!,"***** ERROR & WARNINGS IN ",RTN," *****",! F I=1N '=') ;QUIT COMMAND FOLLOWED BY ONLY ONE SPACE& ;UNRECOGNIZED ARGUMENT IN SET COMMAND ;INVALID LOCAL VARIABLE NAME ;INVAL !,"LOCAL VARIABLES",?21,"ROUTINES",! S LOC="L",SYM="" D P0 W !!,"GLOBAL VARIABLES",! S LOC="G",SYM="^" D P5 W !!,"ROUTINE",?2 /INDX1 ; ERROR,STORE VAR,PRINT ; 02/26/81 18:22{ER S ERTX=LAB S:LABO ERTX=ERTX_"+"_LABO S ERTX=ERTX_" ",ERTX=$E(E",I) Q:ARG="" W:$X>70 !?16 W:$X'=16 "," W ARG G WMCR B 0 S RTN=$O(^UTILITY($J,RTN)) G:RTN="" CRP F LOC="L","G","X" S R=-1 D :1 Q:'$D(^XCR(RTN,"E",I)) W !?3,^(I)* W !!,"***** INDEX OF ",RTN," *****",!D W !,"LOCAL VARIABLES",?21,"LINE OCCURRENCES"  1,"INVOKES:",! S LOC="Z",SYM="" D P; W !!,"ROUTINE",?21,"IS INVOKED BY:",! S LOC="X",SYM="" D P W !!,"***** END *****",!!RT ",X,"S",EOL,DAT,EOL,TTL,EOL U 0 K TTL,X S %K=0,ERR=01 F I=1:1 S RG=^%U(I) Q:RG="" D @(TYP_"WRT")^%ZBVD I ERR=0 D XXX U DEV!,"BACKUP ROUTINES OR GLOBALS: ",TYP I TYP="" G ENDD S TYP=$E(TYP,1) I "RG"'[TYP W !,"ENTER R[OUTINES] OR G[LOBALS]" G F, S X=DB%RSET F I=1:1 R !,"ROUTINE ? ",RTN Q:RTN="" S ^UTILITY($J,RTN)=""EEEND C:IO IO K ^XCR,^UTILITY($J) QP; W !!,"ROUTINE",?21,"IS INVOKED BY:",! S LOC="X",SYM="" D P W !!,"***** END *****",!! W "END ",X,"S",EOL U 0 W !,X," WRITE COMPLETE:" K %K,ERR,I,RG,X QOPEN O DEV:(DRV:FIL) U 0 Q1XXX S X=$P("GLOBAL^ROUTINE","^$P("GLOBAL^ROUTINE","^",$F("GR",TYP)-1)2 F I=1:1 W !,X," NAME > " R NM S ^%U(I)=NM Q:NM=""& S EOL=$C(13)_$C(10),EOR=$C(13)_$C(3ZBU ;BACK-UP GLOBALS AND/OR ROUTINES TO FLOPPY DISK9 K W !,"FLOPPY DISK BACKUP OF ROUTINES AND/OR GLOBALS",!) R !!,"ENTER",$F("GR",TYP)-1) Q U 0 W !,X," WRITE COMPLETE:" K %K,ERR,I,RG,X QOPEN O DEV:(DRV:FIL) U 0 Q1XXX S X=$P("GLOBAL^ROUTINE","^12)" R !,"DESCRIPTION OF FILE: ",TTL,! D WRITE G E$ERR W !!!,"DISK ERROR",!! C DEV G E2END C DEV:0 U 0.E2 K %R,%TP,DRV, DATE AND TIME: ",DAT S DEV=2FD R !,"DESTINATION DRIVE (DEFAULT=B): ",DRV I DRV="" S DRV="B" W "(B)": I DRV'?1U W !,"ENTER THEFIL,DEV,EOL,EOR,TYP,^%U,DAT,NM Q ;***************************.WRITE D XXX W "START ",X," WRITE:" W:TYP="R" !D U DEV W "STA LETTER OF THE DESIRED DRIVE" G D&E R !,"FILE NAME: ",FIL I FIL="" G END. D OPEN W !,"DISK FILE ",DRV,":",FIL," OPENED"8F R !  ! F %1=1:1 S @"%2=$T(+%1)" Q:'$L(%2) S %L=$S($E(%2,1)=" ":%L+1,1:0) S:'%L %R=$P(%2," ",1) I %2[%3 W !,%2,! X ^(119) ZR @(%R_"+"*DELET LINE(S): ",%2,! ZP @%2 R "OK TO DELET? ",*X W *X Q:X'=89 ZR @%2 W " DELETED"A5 R "*LIST LINES: ",%2,! S %5=$E(%2,1)="+,@("$T(+"_%4_")")f119 F %5=1:0 S %5=$F(%2,%3,%5)+0 Q:%5=0 S %2=$E(%2,1,%5-$L(%3)-1)_%4_$E(%2,%5,255) W ?%5-1-$L(%3),">":%3 W ! S Y=$F(X," "),^%($E(X,1,Y-2))=$E(X,Y,255)' W !,"THE EDITOR IS LOADED" D ^%EDITH Q ;2 ; THE CODE THAT FOLLOWS IS LOADED INTO=1:1 X ^%(100) Q:'$L(%3) ZR @%R ZI %2100 W:%1=1 %2,! R "*REPLACE: ",%3,! X:%3["..." ^%(114) I $L(%3),%2[%3 S %5=$F(%2,%3),%6=_%L) ZI %2 W !,%210 R "*BACKUP ROUTINE: ",%R,! ZL @%R S %N=%R_".SAV" O 4:("A":%N) U 4 W %R,! F %R=1:1 S %2=$T(+%R) W %2,! I '$" ZP:'%5 @%2 X:%5 ^(115)L6 W "*CHANGE " X ^%(113) I $L(%2) F %1=1:1 X ^%(100) Q:'$L(%3) ZR @%R ZI %27 R "*SEARCH FOR: ",%3,! GLOBALS ^%+ ; THE EDITOR IS EXECUTED BY TYPEING 'X ^%' ;w% ZM : F %X=1:1 R !,">>",%1,! Q:%1="" S:%1="A" %1=%0 S %0=%1 X ^%$E(%2,1,%5-$L(%3)-1) W %6 R %4 S %7=$E(%2,%5,255),%2=%6_%4_%7 W %7,!e113 S %2="" F %1=1:1 R "LABEL: ",%R,! Q:%R="" S @("%2=$T(L(%2) C 4:0 U 0 W "*SAVED ON A:",%N Q11 R "*RESTORE ROUTINE: ",%R,! ZR S %N=%R_".SAV" O 4:("A":%N) U 4 R %R U 0 W !,%R," FROM Q:%3="" F %R=1:1 S @"%2=$T(+%R)" Q:'$L(%2) I %2[%3 W !,%2,! F %5=1:0 S %5=$F(%2,%3,%5)+0 Q:%5=0 W ?%5-1-$L(%3),">"[8 W "*IN($S($E(%1,$L(%1))=" ":99,$L(%1)=1:2,%1?1"^".E:1,1:0))0 X %1.1 S %G=%1,%2=@%G,%1=1 X ^%(100) S @%G=%2,%1=""12 S %1=$F("MDLCSI"_%R_")") Q:$L(%2) W %R," INVALID LABEL",!114 S %5=$F(%3,"..."),%31=$E(%3,1,%5-4),%32=$E(%3,%5,255) I %2[%31,%2[%32 S %51=$F( ",%N,!! F %N=1:1 U 4 R %2 U 0 W %2,! ZI:$L(%2) %2 I %2="" C 4:0 R !,"OK ? ",*%X W *%X ZR:%X'=89 Q:%X'=89 ZS @%R Q(12 F %X=10SERT BEFORE " X ^%(113) I $L(%2) W %2,! ZM @%R F %X=1:1 R "*",%2,! Q:'$L(%2) ZI %29 R "*REPLACE EVERY: ",%3,! R "*WITH: ",%4,EBR?G",%1) X:%1 ^%(%1+1) S %1=""W3 W "*MOVE " X ^%(113) W %2,! R "*INSERT BEFORE LABEL: ",%M,! Q:%M="" ZR @%R ZI %2:@%MZ4 R "%2,%31),%52=$F(%2,%32,%51) S:%52=%51 %52=256 S %3=$E(%2,%51-$L(%31),%52-1)E115 S %3=$P(%2,":",2) S:%3="" %3=%2 F %4=%2:1:%3 W !w @%EDIT ; SYSTEM EDITOR - COPYRIGHT (C) 1980 J.J.ALTHOUSE & ASSOC. K ^% S ^%=$E($T(%),3,255)H F I=1:1 S X=$T(%+I) Q:'$L(X) 00:1 Q:'$D(^%(%X)) W ^%(%X),!$13 R "*GET ROUTINE: ",%R,! ZL @%R ZP`99 S %R=$E(%1,1,$L(%1)-1),@("%2=$T("_%R_")") I $L(%2) F %1   NULL LINE ENDS AUTHORS."9 WRITE !,"NULL RESPONSE TO FIRST PROMPT ENDS INPUT MODE."@ WRITE !,?5,"TITLE: FULL TITLE (MULTIPLE LX="" QUIT ;EXIT POINT2 SET @(REF_"("_I_",1)")="" FOR J=2:1:5 SET ^(J)="":AUTH SET ^(1)=^(1)_" "_X READ !,"AUTH: ",X GOTO:X'="INES OK. NULL TO END)"2 WRITE !,?5,"YEAR: YEAR OF PUBLICATION (4 DIGITS)"> WRITE !,?5,"CIT: BIB. CITATION (MULTIPLT LINES. NULBIBENTRY ;CREATED 10/1978 RFW= ;THIS ROUTINE ACCEPTS BIBLIOGRAPHIC CITATIONS (AUTHOR, YEAR,@ ;TITLE, CITATION, REFERENCE N" AUTHNXTTL READ !,"TITLE: ",TITLE0 SET ^(2)=^(2)_" "_TITLE IF TITLE'="" GOTO NXTTL;RDYR READ !,"YEAR: ",Z IF Z'?4N WRITE " },LEXICON ;PROGRAM TO CREATE SORTED DICTIONARY- READ "ENTER NEXT TERM (NULL TO QUIT): ",TERM GOTO:TERM="" LIST' READ "ENTEL TO END)"; WRITE !,?5,"REF: REFERENCE NUMBER USED TO SORT LISTING.",!9 SET LIMIT=5000 ;MAXIMUM NUMBER OF REFERENCES (ARBITRARO), AND PLACES THEM IN @REF(N,1-5)7 WRITE !!,"YOU ARE ADDING ENTRIES TO ",REF," LIBRARY",!C WRITE !,"PLEASE ENTER INFORMATION 4 DIGITS" GOTO RDYR SET ^(3)=ZNXCIT READ !,"CIT: ",CIT, SET ^(4)=^(4)_" "_CIT IF 'CIT="" GOTO NXCIT0 READ !,"REF: ",Z SET R ONE LINE DEFINITION: ",DEF! SET ^WORD(TERM)=DEF GOTO LEXICON5LIST READ "WOULD YOU LIKE TERMS LISTED (Y/N)? ",YESNO QUIT:'YY) ;1 ;*** LOOP TO FIND END OF CURRENT GLOBAL FILE ***? SET I=$NEXT(@(REF_"(0)"))-1 SET:I=-2 I=LIMIT GOTO:I>0 BIBENTER7 WRIAS PROMPTED IN FOLLOWING FORMAT"@ WRITE !,?5,"AUTH: AUTHORS (LAST NAME, INITS, THEN INITS, LAST)"5 WRITE !,"MULTIPLE LINES OK.^(5)=Z,I=I-1 GOTO BIBENTER ;*** END OF ENTRY ROUTINE ***, SET ^(4)=^(4)_" "_CIT IF 'CIT="" GOTO NXCIT0 READ !,"REF: ",Z SET ESNO?1"Y".E) SET X="" OPEN 1 USE 1 ;OUTPUT TO PRINTERG FOR I=1:1 SET Y=$ORDER(^WORD(X)),X=Y QUIT:X="" WRITE !,Y,?15,^WORD(Y)YTE !,"FILE FULL. SEE MANUAL TO EXPAND LIMITS." QUIT ;' ;*** LOOP TO OBTAIN NEW REFERENCES ***4BIBENTER READ !,"AUTH: ",X IF  STOPWORD ;CREATED 6/76 MJS/ ;CREATES OR ENLARGES A DICTIONARY OF STOPWORDS ;FILED ACCORDING TO WORD LENGTH8SWLOOP READ !SORTED.( ;NOTE: SORT IS DESIGNED FOR ALPHA KEYS.HPSRT SET L=N\2,R=N4 IF L>1 SET L=L-1,X=A(L),Y=B(L) DO SIFT GOTO HPSRT+13 I CNTRL?1"L".E DO ^BIBLIST GOTO START$ IF CNTRL?1"K".E DO ^KWIC GOTO START IF CNTRL?1"Q".E QUITI IF $LENGTH(CNTRL)=1,("ILKQ"'ES",!=FILEQ READ !,"ENTER NAME OF FILE YOU WISH TO REFERENCE: ",REF? IF REF="" READ !,"NEW FILE (Y/N)? ",YN Q:YN?1"N".E DO NE,"ENTER NEW STOPWORD (NULL TO QUIT): ",WORD IF WORD="" QUIT SET X="" FOR I=1:1:$LENGTH(WORD) SET Y=$ASCII($EXTRACT(WORD,I)) F R>1 SET X=A(R),A(R)=A(1),Y=B(R),B(R)=B(1),R=R-1 IF DO SIFT GOTO HPSRT+2 QUIT ;END OF HEAPSORT ROUTINE SIFT SET J=L SE[CNTRL) WRITE "SELECT I,L,K OR Q" GOTO START@ ELSE WRITE "TYPE ONE CHARACTER ONLY (I,L,K OR Q)",! GOTO STARTBNEWFILE READ !,"WFILEB SET REF="^"_REF IF '$DATA(@REF) WRITE "FILE NOT FOUND" GOTO FILEQ8 WRITE !!,"YOU MAY SELECT ANY OF THE FOLLOWING OPTIONSET:Y>96 Y=Y-32 SET X=X_$CHAR(Y) ;CONVERT ALL LETTERS TO UPPER CASE SET WORD=X ;AND REPLACE WORDD SET L=$LENGTH(WORD) IF L>10T I=J,J=2*I IF J>R GOTO ENDSIFT IF J IF KWL<10 IF $FIND(SW(KWL),"/"_CAP)>0 SET KO=KO+1 GOTO KWLOOP ;, ;CREANG=$LENGTH(KWIN),NULLS=0,PTR=1,KO=0 WRITE !,"NOW PROCESSING ",KWID ; ;PROCESS EACH WORD IN TITLE9KWLOOP SET KWRD=$PIECE(KITE !,^KWRD(B(I)) GOTO KWRITE;HEADER WRITE #,?30,TITLE,?67,PAGE,! SET PAGE=PAGE+1,LINES=0NES=LINES+1 IF LINES>55 DO HEADER WR$EXTRACT(KWIN,L1,L2)_KWRD7 SET ^(J)=^(J)_$EXTRACT(KWIN,R1,R2)_$EXTRACT(BLKS,1,TB)4 SET ^(J)=^(J)_" "_KWID ;KEYWORD LINE NOW TE KEYWORD LINE WITH KEYWORD IN CENTER8 ;L1-L2 IS LEFTHAND SEGMENT, R1-R2 IS RIGHTHAND SEGMENTDKWLOOP1 SET PTR=$FIND(KWIN,KWRWIN," ",PCOUNT),KWL=$LENGTH(KWRD) SET PCOUNT=PCOUNT+13 IF KWRD="" SET NULLS=NULLS+1 IF NULLS>2 GOTO KWTTL7 IF KWL<3 GOTO KWLX"KWIC ;CREATED BY MJS AND RFW 10/76# ;USES HEAPSORT AND ^SW GLOBAL FILE1 ;BEGIN BY CREATING LOCAL STOPWORD VARIABLE ARRAY*COMPLETE GOTO KWLOOP ;SORTK ;NOW SORT KWIC LINES" WRITE !,"NOW PERFORMING KWICSORT"7 FOR J=1:1 QUIT:$DATA(^KW(J))=0 SETD,PTR),L2=PTR-(KWL+1),R1=PTR,TB=0,LB=0! IF L2<1 SET (L1,L2)=0 GOTO SETR2; SET L1=L2-23 SET:L1<1 L1=1 ;UP TO 23 CHARS LEFT OF KOOP ;IGNORE ONE- AND TWO-LETTER WORDS; IF KWRD'?1A.E GOTO KWLOOP ;WORD MUST START WITH ALPHA CHAR ;CHECK FOR MATCH TO STOPWOR FOR I=1:1:10 SET:$DATA(^SW(I)) SW(I)=^(I)$ SET BLKS=$JUSTIFY("",80) ;80 BLANKS ;# ;GET NEXT TITLE, CREATE KWIC LINES! SET  A(J)=^KW(J),B(J)=J SET N=J-1 DO ^HEAPSORT ;# KILL A,SW,KWIN ;FREE UP SOME SPACE ;NOW LIST KWIC INDEX: SET TITLE="KWICEYWORD3SETR2 SET R2=R1+(47-KWL) IF R2>KWLNG SET R2=KWLNG+1: SET LB=24-(L2-L1),TB=(47-KWL)-(R2-R1) IF L1>0 SET LB=LB-1 IF TB>D IF '$D(SW(KWL)) GOTO KWLOOP1 SET CAP="" FOR K=1:1:KWL SET CAPL=$ASCII($EXTRACT(KWRD,K)) SET:CAPL>96 CAPL=CAPL-32 SET CAP=CI=$NEXT(@(REF_"(-1)"))-1,J=07KWTTL SET I=I+1,X=REF_"("_I_",2)" GOTO:'$DATA(@X) SORTK SET KWIN=@X,KWID=^(5)4 SET PCOUNT=1,KWL INDEX OF "_REF_" FILE",PAGE=1,LINES=0,I=0 DO HEADERKWRITE SET I=I+1 QUIT:I>N( SET LINES=LINES+1 IF LINES>55 DO HEADER WR0 SET TB=TB+1 ;2 ;SAVE KEYWORD IN ^KW(J), KEYWORD LINE IN ^KWRD(J) SET J=J+1,^KW(J)=CAP; SET ^KWRD(J)=$EXTRACT(BLKS,1,LB)_ UN WRITE "1 ALPHANUMERIC CHAR ONLY" GOTO READ, SET FA=$ASCII(FLG),X="" ;X IS CURRENT VALUE3 IF $DATA(^FLAG(FA)) SET X=^(FA) WR#10)_":"_(%S\10)_(%S#10) W %W," ",%UD," ",%UT, K %F,%C,%I,%M,%D,%Y,%YR,%L,%H,%W,%UD,%UT,%S Q_(%H#10)_":"_(%M\10)_(%MREAD !,"NAME > ",N QUIT:N="" ;GET ENTRY NAME IF N="?" DO QUES GOTO READ$ ;FIND LAST NAME (LAST PIECE BY " ")N SET NAM=$PIEC),%D=%YR#365+1# S %M=1 I %YR=1460 S %D=366,%Y=%Y-1M F %I=31,%Y#4=0+28,31,30,31,30,31,31,30,31,30,31 Q:%D'>%I S %D=%D-%I,%M=%MITE !," <",X,">"8 READ !,"> ",Y,! IF Y'="" SET:Y="-" Y="" SET ^FLAG(FA)=Y GOTO READ ; ;LIST THE FLAGSILIST READ !,"OUTPUE(N,",",1) FOR I=1:1 QUIT:NAM'[" " SET NAM=$PIECE(NAM," ",2,99)I SET NAM=NAM_","_$PIECE(N," ",1,I-1)_","_$PIECE(N,",",2) ;INTE+1 S:%D<10 %D="0"_%D< S %W=$E("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",%M*3-2,%M*3) S %UD=%W_" "_%D_", "_%Y@WEEKDY S %M=%M-2T TO PRINTER? > ",ANS SET IO=$SELECT(ANS["N":PDV,1:HDV)> USE IO WRITE #!,?30,"FLAG LISTING",!! ;72 COLUMN LINE ASSUMEDJ FOR FARNAL FORMAT9 SET HASH=$ASCII(NAM)*100+$ASCII(NAM,2)*100+$ASCII(NAM,3)- IF '$DATA(^MAIL(HASH,0)) SET ^MAIL(HASH,0)=0& SET N=^( S:%M<0 %M=%M+12,%Y=%Y-1 S %C=%Y\100+1,%Y=%Y#100/ S %F=26*%M-2\10+%D+%Y+(%Y\4)+(%C\4)-(2*%C)#7+1K S %W=$P("MONDAY*TUESDAY*WEDN&MLOOK ;LOOKUP A FILE ENTRY. JEB 12/80 ;RETURNS S - POINTER TO ENTRY3 ; <0 ENTRY NOT FOUND (-S IS ENTRY LOCATION)=-1:0 SET FA=$NEXT(^FLAG(FA)) QUIT:FA<0 WRITE $CHAR(FA),?5,^(FA),!" WRITE:IO'=PDV # USE PDV GOTO READ(QUIT WRITE ! KILL FLG,F&MFLG ;FLAG EDIT AND DISPLAY. JEB 12/80(READ READ !,"FLAG > ",FLG ;GET FLAG NAME GOTO LIST:FLG="*",QUIT:FLG=""7 IF FLG'?10),LAST=$PIECE(NAM,",",1),I=0 ;9 ;SEARCH FOR NAME, BUILD ARRAY OF CLOSE ENTRIES IN IDX(I)Q FOR S=1:ESIZ:N GOTO:^(S)=NAM FOUNESDAY*THURSDAY*FRIDAY*SATURDAY*SUNDAY","*",%F)(TIME S %H=%S\3600,%M=%S#3600\60,%S=%S#60> S %UT=(%H\10)_(%H#10)_":"_(%M\10)_(%M ; =0 NULL ENTERED( ; NAM - ENTRY NAME (INTERNAL FORMAT)+ ; NAKED STATE SET TO MAIN FILE POSITION:READ SET S=0 (TODAY S %UD=$P($H,",",1),%S=$P($H,",",2)8DAY Q:%UD<0 S %H=%UD-(%UD<21609),%L=%H\1461,%YR=%H#1461& S %Y=%L*4+1841+(%YR\365A,X,Y,IO,ANS QUITT(^FLAG(FA)) QUIT:FA<0 WRITE $CHAR(FA),?5,^(FA),!" WRITE:IO'=PDV # USE PDV GOTO READ(QUIT WRITE ! KILL FLG,F D IF $PIECE(^(S),",",1)=LAST SET I=I+1,IDX(I)=S ; ;NOT FOUND, WRITE PSSIBLES GOTO NEW:'I ;NO CLOSE ENTRIES< WRITE !! FOR T(TABLE+I),";",2),FN)-1=$LENGTH(FN)# WRITE " ?" GOTO FN ;DIDN'T FIND IT ;5END CLOSE HDV KILL I,FN,ESIZ,NL,LEN,COLS,PDV,HDV QANS["N":PDV,1:HDV)3 WRITE ! SET HASH=-1,(S,N)=0 USE IO WRITE # DO NEXT-LOOP IF S<0 WRITE:IO'=PDV # USE PDV GOTO KILL: FOR L=1E !,"ENTER NAME AS 'FIRST MIDDLE LAST,TITLE'",! QUITE SET S=-S ;MARK AS NEW ENTRYQUIT KILL N,HASH,IDX,LAST QUIT ;=QUES WRITS MPRT ;OUTPUT ROUTINES. JEB 12/80 ;REQUIRES COLS AND NL ;ENTER AT PRINT AND LIST3PRINT SET BOOL=1 GOTO OUT ;SELECT ALL AJ=1:1:I WRITE J,?5,^(IDX(J)),?45,^(IDX(J)+1),!?WHICH READ !,"ENTER ENTRY NO. OR N(ONE) > ",X IF X="N" GOTO NEW' IF X'?1N.N!(X>UIT ;MFOUND SET X=$TEXT(TABLE+I) WRITE $EXTRACT($PIECE(X,";",2),$LENGTH(FN)+1,99),! XECUTE $PIECE(X,";",3) GOTO FN ; ;H+MOPT ;MAILING LIST OPTION DRIVER. JEB 12/80! WRITE !,"MAILING LIST PACKAGE",!n SET ESIZ=9,NL=7,LEN=35,COLS=2,PDV=$IO ;ENTR:1:NL FOR C=1:1:COLS SET BUF(C,L)="" ;CLEAR BUFFER' FOR C=1:1:COLS DO BUFFER,NEXT QUIT:S<0; FOR L=1:1:NL WRITE ! FOR C=1:1:COLND DO OUTPUThLIST SET BOOL=1 READ !,"SELECT CONDITION <1> ",X IF X'="" DO MAKB GOTO LIST:BOOL="" ;BOOL="" MEANS ERROR UFLG REAI) WRITE " ?" GOTO WHICH WRITE ! SET S=IDX(X) GOTO QUIT ;%FOUND WRITE " ",^(S+1) ; WRITE ADDR1< READ " OK? ",X GOTO QUIANDLE QUESTION MARKWQUES WRITE ! FOR I=1:1 QUIT:$TEXT(TABLE+I)="" WRITE ?10,$PIECE($TEXT(TABLE+I),";",2),! QUIT ;1 ;OPTIOY SIZE, NO. OF PRINT LINES, LINE LENGTH, COLUMNS, PRINCIPAL DEVICE9 SET HDV=1 OPEN HDV ;HARDCOPY DEVICE ASSUMED TO BE LINE 1)FS WRITE ?C-1*40,BUF(C,L) WRITE !! GOTO LOOP ;6KILL KILL BOOL,UF,J,S,N,L,C,F,HASH,NAM,BUF,IO,ANS QUIT2 ;GET NEXT FILE ENTRYD !,"UPDATE FLAGS > ",UF> IF UF'?.UN WRITE "UPPER CASE ALPHA OR NUMERIC ONLY" GOTO UFLGn FOR I=1:1:$LENGTH(UF) IF '$DATA(^FLAGT:X?1"Y".E,HERE ; DO ADD IF NOT OK ;NEW WRITE " NOT FOUND",! IF N=0 SET S=1 GOTO HERE6 FOR S=1:ESIZ:N GOTO:^(S)]NAM HEREN DRIVER TABLE (MUST BE AT END OF ROUTINE)TABLE ;?;DO QUES ;ADD/EDIT ENTRY;DO ^MEDIT ;DELETE ENTRY;DO DEL^MEDIT ;FLAG EDN READ !,"FUNCTION > ",FN GOTO END:FN="" ;SEARCH FOR FUNCTIONb FOR I=0:1 QUIT:$TEXT(TABLE+I)="" GOTO FOUND:$FIND($PIECE($TEX, S POINTS TO IT (<0 IF NONE) ;:NEXT SET S=S+ESIZ GOTO NEW:S>N SET F=^(S+8) ;GET FLAG WORD2 IF @BOOL QUIT ;NOTE MUST BE ARG($ASCII(UF,I))) WRITE " '",$EXTRACT(UF,1),"' IS UNKNOWN FLAG" GOTO UFLGHOUT READ !,"OUTPUT TO PRINTER? > ",ANS SET IO=$SELECT( ;FIND CORRECT PLACE SET S=S+ESIZ ;PUT AT END HERE SET S=-S ;MARK AS NEW ENTRYQUIT KILL N,HASH,IDX,LAST QUIT ;=QUES WRITIT;DO ^MFLG ;PRINT FILE;DO PRINT^MPRT ;MAILING LIST;DO LIST^MPRTEDIT ENTRY;DO ^MEDIT ;DELETE ENTRY;DO DEL^MEDIT ;FLAG ED UMENT INDIRECTION GOTO NEXT ;TRY FOR ANOTHERBNEW SET S=-8,HASH=$NEXT(^MAIL(HASH)) QUIT:HASH<0 ;NO MORE ENTRIES+ SET N=^(HAS;+KILL WRITE ! KILL A,J,N,S,QRY,NAM,TEXT QUITbFILE IF S<0 SET S=-S,^(0)=^(0)+ESIZ FOR I=^(0):-1:S+ESIZ SET ^(I)=^(I-ESIZ) ;MAK ;ADD UPDATE FLAGS QUIT ;# ;MAKE A BOOLEAN CONDITION FROM 'X'TMAKB SET (BOOL,NOT,ERR)="" FOR I=1:1:$LENGTH(X) SET C=$EXTRA0),",",1)( IF I'="" SET A(0)=A(0)_","_I ;ADD TITLEK SET TEXT="NAME^ADDR1^ADDR2^ADDR3^CITY^STATE^ZIP^TELE^FLAGS" ;PROMPT STRINGH,0) GOTO NEXT ;TRY THIS BUCKET ; ;FORMAT ONE ENTRY INTO BUF ;I IS OUTPUT LINE NUMBERHBUFFER SET I=1,NAM=^(S),BUF(C,I)=$PE SPACE FOR INSERT ;PUT NAME IN INTERNAL FORMATQ SET NAM=$PIECE(A(0),",",1) FOR I=1:1 QUIT:NAM'[" " SET NAM=$PIECE(NAM," ",2CT(X,I) DO CHAR QUIT:ERRJ IF ERR!(BOOL'?.E1")")!(NOT'="") WRITE " IMPROPER EXPRESSION" SET BOOL="" KILL NOT,ERR QUIT ;>CHAEDIT FOR I=0:1 SET QRY=$PIECE(TEXT,"^",I+1) QUIT:QRY="" DO ELINE%REVIEW WRITE !!,A(0),! ;EXTERNAL NAME+ FOR I=1:1:3 WRITE:AIECE(NAM,",",2)_" "_$PIECE(NAM,",",1)\ IF $PIECE(NAM,",",3)'="" SET BUF(C,I)=BUF(C,I)_","_$PIECE(NAM,",",3) ;HANDLE TITLES, IF ,99)? SET A(0)=NAM_","_$PIECE(A(0)," ",1,I-1)_","_$PIECE(A(0),",",2)3 FOR I=0:1:ESIZ-1 SET ^(S+I)=A(I) ;PUT DATA IN FILE GOTAR IF C="'",BOOL'?.E1")" SET NOT=$EXTRACT("'",NOT'="'") QUIT+ IF "!&"[C,BOOL?.E1")" SET BOOL=BOOL_C QUITY IF $DATA(^FLAG($ASCI(I)'="" A(I),! ;ADDRESS5 WRITE A(4),", ",A(5)," ",A(6),! ;CITY, STATE ZIP< WRITE:A(7)'="" A(7)," " WRITE "[",A(8),"]",! ;ANYG FOR J=1:1:3 IF ^(S+J)'="" SET I=I+1,BUF(C,I)=^(S+J) ;IGNORE NULL LINESD SET I=I+1,BUF(C,I)=^(S+4)_", "_^(S+5)_" "_^(S+6)'MEDIT ;ADD OR EDIT MAIN FILE. JEB 12/80" WRITE ! DO ^MLOOK IF 'S GOTO KILL< IF S>0 FOR I=0:1:ESIZ-1 SET A(I)=^(S+I) ;IF EDO MEDIT ; ;EDIT A PARTICULAR LINE-ELINE WRITE !,QRY," " WRITE:A(I)'="" "<",A(I) READ "> ",X QUIT:X=""? IF $LENGTH(X)>LENI(C))),BOOL'?.E1")" SET BOOL=BOOL_"(F"_NOT_"["""_C_""")",NOT="" QUIT SET ERR=1 QUITSET BOOL=BOOL_C QUITY IF $DATA(^FLAG($ASCITELE [FLAGS]/VERIFY READ !,"F(ILE), E(DIT), OR I(GNORE)? ",X> GOTO FILE:X="F",EDIT:X="E",MEDIT:X="I" WRITE " ?" GOTO VERIFY  ;CITY, STATE ZIPT IF FN="P" SET:^(S+7)'="" BUF(C,I+2)=^(S+7)_" " SET BUF(C,I+2)=BUF(C,I+2)_"["_F_"]"( ELSE SET ^(S+8)=F_UFIT, GET ENTRY0 ELSE SET A(0)=NAM FOR I=1:1:ESIZ-1 SET A(I)=""H SET I=$PIECE(A(0),",",3),A(0)=$PIECE(A(0),",",2)_" "_$PIECE(A(  WRITE " [TRUNCATED]" SET X=$EXTRACT(X,1,LEN)8 GOTO UP:X="^",QUES:X="?" SET:X="-" X="" SET A(I)=X QUIT ;UP SET I=I-2 SET:I>S=1 R0="O" S:+SS=2 R0="*" D 900 I +SS=1 W M1,!,M2,RA,M3}150 I +SS=1 S Y=36,%8=0 D 900 R "Type address (or E=End, C=Change) : ",NTROLX K S RA="??",M1="Your turn, mark is (O)",M2="Computer's last move was (",M3=") ",TIM=1K S %0=$P($T(510)," ",2,256),SS= G 260 Q400 G 400^OTHEXIT500 ; PRIORITY TABLE|510 A1H1A8H8C1H3F8A6F1H6C8A3A4H4E8A5E1H5D8D1B1H2G8A7A2G1H7B8C3F6F3C6D3F4E6C Y=34 D 900 X:SS=2 $P($T(195)," ",2,99) S AD(A0)=R0 D 800 X $P($T(196)," ",2,99) G 400:%0="",140195 S Y=34 D 900 W !,M2,RA,M310 I=99 QUIT2QUES FOR J=0:1:4 WRITE !,$PIECE($TEXT(QT+J),";",2) GOTO ELINE ;QT ;ENTER A NEW VALUE, OR ; A NULL TO RETRA S TIM=1 G 140:RA="C",400:RA="E",150:RA?1U1N=0 G 160< I +TIM=1 S Y=34 D 900 W "< I am thinking ... >" S TIM=TIM+1=154 S %=%+0,B=" " F L=1:1:8 F L1=.1:.1:.8 S AD(L+L1)=BY115 R !,"Do you want the first move ? y,n ? :",R G 115:(R="Y"=0)&(R="N"=0) I R="N"5E3F5D6C4D2G4E7B5E2G5D7B4C2G3F7B6B3F2G6C7B2G7G2B7 Q.600 ; INHIBIT PATTERN CHECK FOR COMPUTER LOGICB S %8=1,A1=C1,A2=C2/10 K UOTH55 ;OTHELLO FOR VT-55 ;CREATED BY A. FUJIE 7/31/80" ;CENTER FOR ADULT DISEASES, OSAKA#10 ; * * OTHELLO 196 S %2=$F(%0,RA),%0=$E(%0,1,%2-3)_$E(%0,%2,128) Q200 ; PROPERTY CHECK OF ADDRESS< K A S S1=0,AD=A0+L Q:$D(AD(AD))=0 Q:(AIN OLD VALUE# ; A "-" TO DELETE CURRENT VALUE( ; AN "^" TO RETURN TO PREVIOUS QUERY ; ;ENTRY POINT FOR DELETEDEL 2,RA=$E(%0,%-1,%) I RA="" G 140:%9="" S RA=%9 G 160& I "B2B7G2G7"[RA,%9=""=0 S RA=%9 G 160) S C1=$E(RA,1),C1=$F(AA,C1)-1,C2=$E S SS=17 S X=32,AD(4,4)="*",AD(5,5)="*",AD(4,5)="O",AD(5,4)="O"z X $P($T(920)," ",2,99) W ?20,$P($T(10),";",2),!,?20,"Address %B X $P($T(180)," ",2,99) Q:+SW=0 S %B=0^ I ("B1C1A2A3"[RA)&(AD(2,2)="O")&(AD(1,1)=B)!(("F1G1H2H3"[RA)&(AD(7,2)="O")&(AD(8,1)=* *& ;AD(*) :OTHELLO TABLE, * = X+(Y/10) ;SS : 1=YOU, 2=COMPUTER ;RA :ADDRESS" ;% :ORDER OF PRIORITY TAAD(AD)=B)!(AD(AD)=R0)'220 S A(AD)=R0,AD=AD+L I $D(AD(AD))=0 Q I AD(AD)=B QM I AD(AD)=R0 X:%8=0 $P($T(250)," ",2,99) X:%8=1 $DO ^MLOOK IF 'S GOTO KILL GOTO DEL:S<0 ;NOTHING TO DELETE9 FOR I=S+ESIZ:1:^(0) SET ^(I-ESIZ)=^(I) ;DELETE THE ENTRY SET ^(0(RA,2)/ I (C1=1)!(C1=8)!(C2=1)!(C2=8) D 600 G 154:%8=1B160 G 150:%0[RA=0 S %8=0,A1=$E(RA,1),A1=$F(AA,A1)-1,A2=$E(RA,2)/109180is alphabetic and numeric order " D 800 S X=32,AA="ABCDEFGH"y140 S %9="",%=0,SS=SS+1 S:$L(%0)>100 %=56 S:+SS=3 SS=1 S Y=34 S:+SB)) G 690^ I (AD(1,8)=B)&("A6A7B8C8"[RA)&(AD(2,7)="O")!(("F8G8H6H7"[RA)&(AD(7,7)="O")&(AD(8,8)=B)) G 6902 S S1=0 F L=1:1:8 F LBLE ;%0 : PRIORITY TABLE ;C1= X-ADDRESS, C2=Y-ADDRESS ;%5, %7, %B :BUFFERS ;%8, %9, SW : SWITCHES100 ; MAIN COP($T(260)," ",2,99) S SW=1 Q G 220/250 S S1=$N(A(S1)) Q:S1<0 S AD(S1)=A(S1) G 250/260 S S1=$N(A(S1)) Q:S1<0 S %B(S1)=A(S1))=^(0)-ESIZ GOTO DEL KILL GOTO DEL:S<0 ;NOTHING TO DELETE9 FOR I=S+ESIZ:1:^(0) SET ^(I-ESIZ)=^(I) ;DELETE THE ENTRY SET ^(0 S A0=A1+A2,SW=0 F L=-1.1,-1,-.9,-.1,.1,.9,1,1.1 D 2008 I +SS=2,+SW=1,(A0=1.1)!(A0=1.8)!(A0=8.1)!(A0=8.8) D 700n G 150:+SW=0 S 1=.1:.1:.8 S B(L+L1)=AD(L+L1)/616 S S1=$N(%B(S1)) I S1>0 S B(S1)=%B(S1) G 616= S %5="" I (C1=1)!(C1=8) S %4=C2 F L=.1:.1:.8 S L+L1)="O" C0=C0+1 S:AD(L+L1)="*" C1=C1+1P S C=^OS,A1=$P(C,"*",1),A2=$P(C,"*",2),A3=$P(C,"*",3) W !,"O =",C0,!,"* =",C1,!!! S DE S Y=37,X=32 D 900^OTHXY S X=32810 W !,?23," A B C D E F G H"D F L=.1:.1:.8 W !,?22,L*10,B F L1=1:1:8 W B,AD(L+L1) W:L1=8 ;SCREEN ERASE QI=1 W ! Q ;CONSOLE TERMINAL6 W *27,"Y",$C(Y,X),*27,"K",Q ;DIRECT CUROR ADDRESSING&920 W *27,"H",*27,"J" Q 5["O* G 690 Q690 S %8=1 S:%9="" %9=RA Q Q700 ;EXCHANGE OF PRIORITY TABLE\ S:A0=1.1 Z2="B2,B1,A2" S:A0=1.8 Z2="B7,B8,A7),!,"The percentage of computer wins is ",$J(A1/(A1+A2)*100,3,2)," %",! W !,"END OF GAME.",! Q,A2," defeats, and ",A3," draws."%5=%5_B(C1+L)( E S %4=C1 F L=1:1:8 S %5=%5_B(C2/10+L)% S %5=$E(%5,1,%4-1)_"*"_$E(%5,%4+1,8); G 650:"A1A8H1H8"[RA=0 S %7="" FIF=C0-C1 I DIF<0 S DIF=DIF*-1< I C0=C1 W "Draw game. Let's toast a good fight !,",! G EXITK I (0C1:"won.",C0C1:"winner.",C00 %0=$E(%0,1,Z-1)_Z3_$E(%0,Z,Z1-3)_$E(%0,Z1,128) QY720 K Z S ZZI=-0.01,Z=1 F ZII=1:2:7 S ZZ9=$E("A1H1A8H8",ZII!OTHXY ;CURSOR CONTROL FOR OTHELLOO ;NOTE SCREEN CONTROL CHARACTERS FOR VT-55. SHOULD BE CHANGED FOR OTHER SYSTEMS900 ; SC G 690:(%5["O"=0)&(%5["* *") Q:%5["O"=0 I %5[" *",%5["*O",%5["O " G 690 I %5["O",%5["O*",%5["* " G 690 Q:%0["A1H1A8H8"$ I 40C1:"winner. Well Done!",C0C1 A2=A]%OTHEXIT ;EXIT SUBROUTINE FOR OTHELLO.400 ;EXIT ROUTINEj S:$D(^OS)=0 ^OS="0*0*0" S C0=0,C1=0 F L=1:1:8 F L1=.1:.1:.8 S:AD(,ZII+1),ZZ=$F(%0,ZZ9),Z(ZZ)=ZZ>725 S ZZZ=$N(Z(ZZI)) S:ZZZ>0 ZZI=ZZZ G:ZZZ>0 725 S:ZZI>0 Z=ZZI Q800 ;DISPLAY OF OTHELLO TABLREEN CONTROL I $I=1 W ! Q ;CONSOLE TERMINAL6 W *27,"Y",$C(Y,X),*27,"K",Q ;DIRECT CUROR ADDRESSING&920 W *27,"H",*27,"J" Q $E(&5,1)="O",%5["O",%5["* " G 690% I $E(%5,8)="O",%5[" *",%5["*O" G 690 I $E(%5,1,2)=" *",%5["*O" G 690 I $E(%5,7,8)="* ",%2+1 S C0=C1 A3=A3+1 S ^OS=A1_"*"_A2_"*"_A3 W !,"To date, the computer has ",A1," victories, ",A2," defeats, and ",A3," draws." PORT B DATA EQU 0F5H ;DATA PORT B DRDY EQU 1 ;DATA READY (SIO) TBE EQU 4 ;TRANS BUFFER EMPTY (SIO) ENDIF ; ; ; DISK REL ; STANDARD I/O EQUATES ; CONIN EQU 1 ; INPUT CHARACTER FROM CONSOLE PRINT EQU 9 ; PRINT BUFFER INLINE EQU 10 ; INPUT LI. ; CALL S$NAME ; TRANSMIT THE FILE NAME. CALL S$DATA ; SEND THE CONTENTS OF THE FILE CALL S$DONE ; SEND END SEQUENCE  ; * * ; ************************************************* ; ; *-----------------------------------------------* ; * TRANSIENT PROGRAM START ADDRESS IF C8000 MVI A,1 ;DISABLE MODEM INTERRUPTS OUT STAT MVI A,0 ;SEND 0 TO WRITE REG 1 OUATED EQUATES ; OPEN EQU 15 ; OPEN FILE MAKE EQU 22 ; MAKE FILE SETBUF EQU 26 ; SET DISK BUFFER READ EQU 20 ; READ DISK NE (LENGTH, ACTUAL, TEXT) ; ; ; [[[[[[[[[[[[[[ CHANGE THESE VARIABLES ]]]]]]]]]]]]]]]]] ; IF Z2 STAT EQU 50H ;STATUS POR CALL AGAIN ; SEE IF ANOTHER FILE IS TO BE TRANSMITTED JZ MAIN ; YES DO IT AGAIN ; JMP EXIT ; TERMINATE NORMALLY ; O CUSTOMIZE TO A PARTICULAR SYSTEM, CHANGE * ; * THE EQUATES FOR VARIABLES :- * ; * STAT,DATA,DRDY,TBE * ; *-----------T STAT ENDIF CALL NORM$ENTRY ; SET UP STACK CALL MAKE$LINK ; ESTABLISH COMMUNICATION LINK WITH ; OTHER MACHINE M; ************************************************* ; * * ; * FILE TRANSMIT UTILITY VN 2.2 30 MAR 80 * ; * * ; * RECORD WRITE EQU 21 ; WRITE DISK RECORD CLOSE EQU 16 ; CLOSE DISK FILE SEARCH EQU 17 ; SEARCH FOR FILE SFCB EQU 5CH ; DET DATA EQU 51H ;DATA PORT DRDY EQU 40H ;DATA READY TBE EQU 80H ;TRANSMITTER BUFFER EMPTY ENDIF IF C8000 STAT EQU 12H ;ST ; ; ; ; ; ; ***************************************** ; * NORM ENTRY (initial setup) * ; *******************************------------------------------------* ; FALSE EQU 0 TRUE EQU NOT FALSE Z2 EQU FALSE C8000 EQU FALSE TRS80 EQU TRUE ; TRS8AIN: CALL GET$NAMES ; HAVE USER ENTER FILE NAMES ; CALL MOV$NAMES ; MOVE FILE NAMES FROM DEFAULT BLOCK CALL OPEN$FILE MODIFIED FOR ONYX/Z-2 SYSTEMS * ; * * ; * THIS CODE IS ATTRIBUTED TO A UTILITY CREATED * ; * BY IMSAI. IT WOULD SEEM AFAULT FCB AREA ; CR EQU 0DH ; CARRIAGE RETURN CHARACTER LF EQU 0AH ; LINE FEED CHARACTER ; ; ; ; ********************ATUS DATA EQU 10H ;DATA DRDY EQU 1 ;DATA READY TBE EQU 4 ;TRANSMITTER BUFFER EMPTY ENDIF IF TRS80 STAT EQU 0F7H ;STATUS ********** ; NORM$ENTRY: POP D ; GET RETURN ADDRESS OFF STACK LXI H, 0 ; LOAD OLD STACK POINTER INTO HL DAD SP SHLD0 MOD II - PORT B BOOT EQU 0 ; WARM BOOT ENTRY BDOS EQU 5 ; BDOS ENTRY TBASE EQU 100H ; TRANSIENT PROGRAM STARTS HERE ;; ATTEMPT TO OPEN THE SOURCE FILE, ; IF AN ERROR OCCURS, THE Z FLAG WILL JZ OPEN$ER ; BE SET, IF IT IS ABORT THE PROGRAM FITTING MEMORIAL * ; * TO IMSAI THAT THIS CODE SHOULD LIVE ON EVEN * ; * AFTER THE UNTIMELY DEMISE OF IMSAI. ************** ; * * ; * Main Program Entry * ; * * ; ********************************* ; ; ORG TBASE ; STANDARD T  OLD$STK ; AND SAVE IT LXI SP, STACK ; SET THE NEW STACK POINTER XCHG ; HL = RETURN ADDRESS PCHL ; RETURN ; ; ****blocks. ; HL contains the FCB pointer ; POP D ;GET FCB ADDR LXI H,INBUFF+2 ;ADDR OF CHAR STRING CALL FFNTCB LXI D,CRLFTROL BLOCK CALL ASKFOR ; GET THE NAME, THEN SET UP FCB ; LXI D, PROMPT2 ; ASK FOR THE DESTINATION FILE LXI H, FCB2 ; FDDRESS INX D ;MOVE TO 2ND CHAR OF STRING LDAX D CPI ':' ;IS DISK VE ERROR ; LINKOK: LXI D, LINKED ; LINKED UP! MVI C, PRINT CALL BDOS RET ; ; ; ********************************** POP D ;STRING ADDRESS (WAS IN HL) POP H ;FCB ADDRESS PUSH H ;RE-SAVE FOR LATER USE MOV M,0 ;SET TO DR********************************************* ; * MAKE LINK (establish communication) * ; ************************************ MVI C,PRINT CALL BDOS RET ; ; FORMAT FILE NAME TO CONTROL BLOCK. ; ENTRY - HL = ADDRESS OF STRING ; CB ADDRESS CALL ASK$FOR ; GET IT RET ; ; ; ASK$FOR: PUSH H ;SAVE FCB ADDR MVI C, PRINT ; TYPE MESSAGE USING PRINT NAME PRESENT JNZ NODN ;NO DCX D ;YES, BACKUP AND GET LETTER LDAX D *********************** ; * Get both source and destination file names * ; ***************************************************IVE A ; NOTE HL STILL POINT TO DISK NO IN FCB PUSH H ;SAVE FCB ADDRESS INX H ;P************* ; MAKE$LINK: LXI D,SIGN ; PRINT SIGN-ON MVI C, PRINT CALL BDOS ; MVI C, CONIN ; OK TO GO? CALL BDOS DE = ADDRESS OF FCB ; EXIT - HL = ADDRESS OF TERMINATOR ; DE = ADDRESS OF FCB EMPFCB: ;EMPTY FCB IMASYSTEM CALL CALL BDOS ; ; GET THE FILE NAME FROM THE CONSOLE ; MVI C, INLINE ; USE INLINE TO GET RESPONSE LXI D, INBUF ANI 3 MOV M,A ;STORE NUMBER IN FCB INX D ;MOVE BACK TO COLON INX****** ; ; ; Ask the user to enter both the source file and the destination file ; The file names must be separated by a delOINT TO NAME IN FCB MVI C,11 ;COUNT OF NAME LENGTH MVI A,' ' ;BLANK FFNC: MOV M, CPI 'Q' JZ EXIT ; ABORT!! ; MVI B,10 ;TRY TEN TIMES TRYLNK: MVI E, 'S' ; CHARACTER TO TRANSMIT CALL COMND ; SEND GE DB 0 DB ' ' ;11 BLANKS DW 0,0,0,0,0,0,0,0,0,0,0,0 ; FFNTCB: PUSH D ;SAVE FCB ADDRESS PUSH HF ; THIS IS A SCRATCH BUFFER CALL BDOS ; ; INBUFF now contains the filename in ASCII. Convert ; file name to file control  D ;MOVE TO FIRST CHAR OF NAME INX D ;COUNTERACT FOLLOWING DCX NODN: DCX D imeter (space, comma, etc.) ; GET$NAMES: LXI D, PROMPT1 ; ASK FOR THE SOURCE FILE FIRST LXI H, FCB ; ADDRESS OF FILE CONA ;CLEAR NAME INX H DCR C JNZ FFNC POP H ;RECOVER FCB AAND CHECK RESPONSE JZ LINKOK ; LINKED!! DCR B ;DOWNDATE COUNT JNZ TRYLNK JMP HRD$ERR ; UNABLE TO ESTABLISH LINK, SO GI LXI H,EMPFCB MVI B,36 ;MOVE EMPTY FCB IMAGE FFNML: MOV A,M STAX D INX H ;UPDATE POINTERS INX D DCR B JNZ FFNML   ;BACKUP TO 1ST CHAR OF NAME INX H ;MOVE TO NAME IN FCB MVI C,8 ;MAXIMUM NAME L; ********************************* * * * MOVE FCB'S * * * ********************************* MOV$NAMES: LXE FFNS: INX H ;NO, SKIP TO TYPE IN FCB DCR C JNZ FFNS FFNGT: MVI C,3  SHOULD DO JMP HRD$ERR ; ; ; SS$NAME: MVI D, 16 ; # OF CHARACTERS IN FILE NAME LXI H, FCB2 ; START OF ASCII FILE NAM M,A ;STORE NAME BYTE INX D ;BUMP PTRS INX H DCR C ;DECRT FOUND THE S FLAG WILL ; BE SET ; ; ; ; ********************************* ; * Send file name * ; ******************ENGTH FFNGN: LDAX D ;GET NAME BYTE CPI ' ' ;BLANK JNZ FFNP ;NO, THEREI H,SFCB ; GET ADDRESS OF DEFAULT FCB MVI B,32 ; SET COUNT LXI D,FCB ; SET DESTINATION MOVAG: MOV A,M ; GET BYTE STAX;TYPE LENGTH FFNGTC: LDAX D ;GET ID BYTE CPI '/' ;CHK IF END JZ FFNX E CALL SEND$BUF ; SEND THAT BUFFER JM HRD$ERR ; IF MINUS, WE GOT A HARD ERROR RET ; ; ; ; ************************* EMENT COUNT JP FFNP ;REPEAT STC ;SET ERROR FFNX: XCHG ;SET RE*************** ; S$NAME: MVI E, 'F' ; LET THE OTHER UNIT KNOW A FILE NAME IS COMING CALL COMND ; ISSUE DOWN LINE, COMPAFORE NAME PRESENT INX D ;BYPASS BLANK JMP FFNGN FFNP: LDAX D ;GET ID BYTE  D INX H ; UPDATE INX D ; POINTERS DCR B ; DOWNDATE COUNT JNZ MOVAG ; IF COUNT NOT ZERO, DO IT AGAIN SAM RET ; F;YES CPI 21H JC FFNX MOV M,A ;STORE NAME BYTE INX D INX  ; * SEND DATA * ; ************************* ; S$DATA: CALL SET$DISK ; SET THE DISK BUFFER ADDRESS R$LOOP: CALL PRREC GISTERS FOR EXIT POP D ;RESTORE FCB ADDRESS RET FFNT: INX D ;BYPASS PERIRE RESPONSE JNZ HRD$ERR ; IF NOT THE SAME GIVE LINK ERROR CALL SS$NAME ; ACTUALLY SEND IT ; MVI E, 'O' ; ISSUE OPEN FI CPI '/' ;CHK IF END JZ FFNX ;YES CPI 21H ;OR ANY CHAR <21H INISHED ; ********************************* ; * Open the file * ; ********************************* ; OPEN$FILE: MVI C H DCR C ;DOWNDATE COUNT JNZ FFNGTC ;GET NEXT TYPE CHAR JMP FFNX ; PRESENT RECORD NUMBER CALL GET$REC ; GET RECORD FROM DISK CPI 00H RNZ ; RETURN IF END OF FILE CALL DATA$TO ; TRAOD MOV A,C ;CHECK IF COUNT 0 ORA A JZ FFNGT ;YES, GO STRAIGHT TO GET TYPLE COMMAND CALL COMND RZ ; IF GOOD, RETURN ; CPI 'H' ; SEE IF ITS THE 'FILE EXISTS' ERROR CZ FL$EXST ; SEE WHAT WE JC FFNX ;YES CPI '.' ;TYPE SEPARATOR JZ FFNT ;YES MOV , OPEN ; OPEN THE FILE USING SYSTEM CALL LXI D, FCB CALL BDOS CPI 0FFH ; SET Z FLAG IF ERROR RET ; IF THE FILE IS NO NSMIT THAT SECTOR JM HRD$ERR ; IF ERROR RETURNED, EXIT CALL DO$WRT ; SIGNAL OK TO WRITE TO DISK JZ R$LOOP ; CONTINUE UNND ?? ; ; ; SET$DISK: LXI D, SECTOR ; ADDRESS OF DISK READ BUFFER MVI C, SETBUF ; SYSTEM CALL TO SET DISK READ ADDRESSAGAIN: MVI A,0 STA COUNTR STA COUNTR+1 STA COUNTR+2 ; RESET RECORD COUNT LXI D, SUCCESS ; PRINT ALLS WELL AND ASK FOR ; IF 0, DATA OK. IF NZ, THEN ERROR IN TRANSMISSION LDA RETRY ; SEE IF WE HAVE ANY RETRIES LEFT DCR A RM ; IF WE'VE DONESMIT DONE * ; ********************************* ; S$DONE: MVI B, 10 ; NUMBER OF RETRIES D$LOOP: PUSH B ; SAVE ON STACK ; ********************************************************* ; ; TRANSMIT A BUFFER DOWN THE LINE. D HAS THE LENGTH, ; HL THETIL END OF FILE IF NO ERROR CPI 'G' ; TEST FOR WRITE ERROR JZ DSK$PRB ; RECEIVER HAVING PROBLEMS WITH DISK JMP HRD$ERR  CALL BDOS ; EXECUTE RET ; ; ; GET$REC: MVI C, READ ; DISK READ FUNCTION LXI D, FCB ; FILE CONTROL BLOCK IN USE  RESPONSE TO MVI C, PRINT ; QUESTION: REPEAT OR EXIT CALL BDOS ; MVI C, CONIN ; GET CHARCTER FROM CONSOLE CALL BDOS  5 THEN RETURN WITH M SET INDICATING ; ERROR STA RETRY ; MORE LEFT, SO SAVE COUNT JMP TRY$TO ; AND TRY AGAIN ; ; ; S MVI E, 'X' ; SEND END OF FILE MARKER CALL COMND POP B RZ ; RETURN IF ACK. IS OK CPI 'C' ; SEE IF ITS A CLOSE ERR START ADDRESS. IF HARD ERROR OCCURS, MINUS IS SET ON ; ; Structure: ; SEND$BUF ; SEND$CK ; LOOP$B CK$ERR ; SEND  ; SOME DATA LINK PROBLEM ... DATA$TO: MVI E, 'R' ; SIGNAL THAT DATA RECORD FOLLOWS CALL COMND ; TRANSMIT IT JNZ HRD$ER CALL BDOS ; DO THE READ RET ; ; ; DO$WRT: MVI E, 'W' ; COMMAND TO SIGNAL WRITE CALL COMND RET ; ; ; COMND: CAL ANI 0DFH ; FOLD TO UPPER CASE CPI 'R' ; SEE IF ITS THE REPEAT COMMAND RET ; ; ; FL$EXST: LXI D,EXSMSG ; O/P FILE EXEND$CK: XRA A ; CLEAR A STA ERR$CODE ; CLEAR ERROR CHECK CHARACTER LHLD POINT ; GET BUFFER POINTER LDA COUNT ; GET BYTEOR JZ CNT$CLS ; GIVE ERROR MESSAGE DCR B ; COUNT DOWN RETRIES JNZ D$LOOP ; TRY AGAIN JMP HRD$ERR ; STILL DIDNT GET RECEIVE ; ; SEND$BUF: SHLD POINT ; SAVE POINTER IN CASE OF RETRYS LXI H, COUNT ; SAVE BYTE COUNTER ALSO MOV M, D MVI R ; DATA LINK ERROR ; LXI H, SECTOR ; ADDRESS OF BUFFER TO TRANSMIT MVI D, 128 ; SECTOR LENGTH CALL SEND$BUF ; TRANSML SEND ; TRANSMIT THE COMMAND CALL RECEIVE ; WAIT FOR RESPONSE CMP E ; COMPARE TO TRANSMITTED CHARACTER RET ; *******ISTS MESSAGE MVI C,PRINT CALL BDOS JMP EXIT ; THE FILE EXISTS ON DESTINATION DISK ; SO JUST EXIT FOR NOW. LATER EXPA COUNT BACK MOV D, A CALL LOOP$B ; DUMP THE BUFFER TO THE PUNCH DEVICE CALL CK$ERR ; COMPARE THE ERROR CHECK RET ; ; RESPONSE SO ERROR ; ; ; ; ********************************* ; * DO IT AGAIN ?? * ; ********************************* ; A, 4 ; NUMBER OF RETRIES - 1 LEFT STA RETRY ; STORE AT COUNTER TRY$TO: CALL SEND$CK ; SEND THE BUFFER AND ERROR CHECK IT RZIT THAT BUFFER JM HRD$ERR ; ERROR IN TRANSMISSION, GIVE MESSAGE RET ; ; ; ; ********************************* ; * TRAN************************************************** ; * * ; * Send buffer down the link and error check it * ; * * ; ; REALLY LOOP THROUGH THE SPECIFIED BUFFER AND CALL THE SEND ; ROUTINE TO OUTPUT TO THE PUNCH ; LOOP$B: MOV E, M ; GET  IF OVERFLOW (CARRY) MVI A,0 ; RESET DIGIT CUNT1: MOV M,A ; STORE RESULT INX H ; NEXT DIGITS MOV A,M ; GET MORE SIG MVI B,3 ; SET TO DISPLAY 3*2=6 DECIMAL DIGITS PRREN: LDAX D ; GET NUMBER PUSH B ; SAVE COUNTER CALL CONASC ; CONVER******* ; OPEN$ER: LXI D, NO$FLE ; CANT OPEN FILE SO ISSUE MESSAGE MVI C, PRINT ; AND THEN ABORT CALL BDOS JMP EXIT  ************************************************* * PRESENT RECORD NUMBER ON SCREEN * ***********************************AT ; GET STATUS FROM SERIAL DEVICE ANI TBE ; TEST BIT 1 JZ SEND ; LOOP MOV A, E OUT DATA ; OUTPUT IT RET ; ;THE CHARACTER LDA ERR$CODE ; GET THE ACCUMULATED ERROR CODE ADD E ; ADD IN THE CURRENT CHARACTER STA ERR$CODE ; PUT ITNIFICANT DIGIT ADC B ; ADD IN CARRY DCR C ; GET COUNT, SEE IF LAST JNZ CUNTUP ; NO, DO ONE MORE RET CONASC: CALT TO ASCII MOV A,B MOV M,A INX H MOV A,C MOV M,A POP B DCX D ; POINT TO LESS SIGNIFICANT DIGIT INX H ; NEXT CH ; HRD$ERR: LXI D, NO$LINK ; UNABLE TO MAINTAIN OR ESTABLISH STABLE MVI C, PRINT ; DATA CHANNEL, SO ABORT CALL BDOS J************** PRREC: CALL UPCUNT ; FIRST UPDATE COUNT CALL PRNMB ; THEN PRESENT NUMBER LXI D,RECNO ; DISPLAY FOR OP ; ***************************************** ; * RECEIVE CHARACTER FROM LINE * ; ***************************************** ; BACK CALL SEND ; ACTUALLY OUTPUT THE CHARACTER INX H ; INCREMENT THE POINTER DCR D ; COUNT DOWN JNZ LOOP$B ; CONTIL CONAS1 ; SMART METHOD MOV B,C CONAS1: RRC RRC RRC RRC ; SHIFT 4 BITS AROUND (DECIMAL DIGITS) PUSH PSW ; SAVE ARACTER FIELD DCR B ; DECREMENT COUNTER JNZ PRREN ; DO NEXT RET NEXDEC: MVI B,1 ; UPDATE WITH ONE MOV A,M ; GETMP EXIT ; DSK$PRB: LXI D, DSK$BAD ; RECEIVEING UNIT HAS SIGNALED BAD DISK MVI C, PRINT ; WRITE CALL BDOS JMP EXIT ;ERATOR MVI C,PRINT CALL BDOS RET UPCUNT: LXI H,COUNTR ; POINT TO COUNTER FIELD MVI C,3 ; SET TO DO 3*2=6 DIGITS  ; RECEIVE: IN STAT ; READ STATUS ANI DRDY ; MASK RECEIVER READY JZ RECEIVE ; WAIT UNTIL CHARCTER IS THERE IN DATNUE IF MORE LEFT RET ; CK$ERR: CALL RECEIVE ; GET CHARACTER LXI H, ERR$CODE ; POINT TO THE ERROR CHECK CHARACTER SUBA ANI 0FH ; LOWER 4BITS ADI 030H ; MAKE ASCII DIGIT MOV C,A ; RESULT IN C POP PSW ; RESTORE A RET ; ; ******** LEAST SIGNIFICANT DIGIT ADD B MVI B,0 ; PREPARE FOR FURTHER CARRY FLOW CUNTUP: DAA ; DO DECIMAL ADJUST JNC CUNT1 ; CNT$CLS: LXI D, CCLOSE ; RECEIVER HAS INDICATED FILE CANT BE CLOSED MVI C, PRINT CALL BDOS JMP EXIT ; ; ; EXIT: CALL NEXDEC RET PRNMB: LXI H,COUNTF ; POINTER TO FIELD WHERE TO STORE LXI D,COUNTR+2 ; ACTUAL COUNTER (LAST BYTE OF 3) A ; READ CHARACTER RET ; ; ; ; ********************************* ; * Exit Routines * ; ************************** M ; SEE IF ITS THE SAME MVI M, 0 ; STORE A ZERO IN ERROR CHECK CHARACTER RET ; ALWAYS RETURN, 0 = GOOD, NZ = BAD ; ********************************* ; * SEND CHARACTER DOWN LINE * ; ***************************************** ; SEND: IN ST  IF C8000 MVI A,1 ;RE-ENABLE MODEM INTERRUPTS OUT STAT MVI A,1CH ;SEND 1CH TO WRITE REG 1 OUT STAT ENDIF MVI E, 'ZOSE DB CR, LF, ' RECEIVER CANNOT CLOSE FILE', CR, LF, '$' INIT$STR DB 0, 0, 0, 40H, 0AEH, 37H STACK EQU $ + 40 END TS ON RECEIVING MACHINE $' NO$FLE DB CR, LF, ' ERROR IN ATTEMPTING TO OPEN FILE','$' PROMPT1 DB CR, LF, ' SOURCE FILE: ','$' FALSE TRS80 EQU TRUE ; TRS80 MOD II - PORT B ; BOOT EQU 0 ; WARM BOOT ENTRY BDOS EQU 5 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 FCB2 DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 OLD$STK DS 2 ; COUNTR: DB 0,0,0 ; 3 BYTE COUNT * THIS CODE SHOULD LIVE ON EVEN AFTER THE UNTIMELY ; * DEMISE OF IMSAI ; * ; ***************************' ; SIGN OFF CALL SEND LHLD OLD$STK ; LOAD OLD STACK POINTER IN HL SPHL ; RESTORE STACK POINTER RET ; GO HOME TO CPROMPT2 DB ' DESTINATION FILE: ', '$' NO$LINK DB CR, LF, ' UNABLE TO ESTABLISH/MAINTAIN DATA LINK', CR, LF, '$' BD$DAT DB CR,  ; BDOS ENTRY PRINT EQU 9 ; BDOS PRINT BUFE FUNCTION TBASE EQU 100H ; TRANSIENT PRER RECNO: DB ' REC. NO: ' COUNTF: DB '000000',CR,'$' ; CRLF: DB CR,LF,'$' LINKED DB CR, LF,' LINK TO SLAVE MACHINE ESTABLIS********************* ; ; *----------------------------------------------- ; * IN ORDER TO CUSTOMIZE THIS UTILITYCP ; ; ********************************* ; * Variable Storage * ; ********************************* ; ; PARAMS: DW FCB ;LF, ' HARD DATA TRANSMISSION ERROR', CR, LF, '$' DSK$BAD DB CR, LF, ' RECEIVER HAS UNRECOVERABLE DISK ERROR', CR, LF, '$' SUCCOGRAM AREA CCP$LN EQU 80H ; DEFAULT FILE BUFFER & COMMAND AREA ; [[[[[[[[[[[ CHANGE THESE EQUATES ]]]]]]]]]HED',LF,CR,'$' SIGN DB CR, LF,' FILE TRANSFER UTILITY VERS 2.2' IF Z2 DB ' FOR CROMEMCO Z2' ENDIF IF C8000 DB ' FOR  CHANGE THE ; * EQUATES FOR :- ; * STAT,DATA,DRDY,TBE ; *------------------------------------------- FILE CONTROL BLOCK DW INBUFF + 2 ; POINT TO ASCII FILE NAME ; COUNT DS 1 ; BYTE COUNTER POINT DS 2 ; BUFFER POINTER RET ; ** ********************************************* ; * ; * FILE RECEIVE UTILITY VN 2.2 30 MAR 79 ESS DB CR, LF, ' FUNCTION COMPLETE',CR, LF DB 07H,' FILE TRANSFERRED ', CR, LF DB ' TYPE R TO REPEAT, CR TO EXIT ', '$' CCL]]]] ; I/O EQUATES IF Z2 STAT EQU 50H ;STATUS PORT DATA EQU 51H ;DATA PORT DRDY C8000 MU ' ENDIF DB CR, LF,' HIT CR WHEN RECEIVE MACHINE READY OR Q TO ABORT' DB '$' EXSMSG: DB CR,LF,' FILE ALREADY EXIS---- ; ; STANDARD CP/M ADRESSES FALSE EQU 0 TRUE EQU NOT FALSE Z2 EQU FALSE C8000 EQU RY DS 1 ; RETRY COUNT ERRCODE DS 1 ; ERROR DETECTION CODE INBUFF DB 32 ; INPUT BUFFER DS 34 ; SECTOR DS 256 FCB DW 0,0; * ; * THIS CODE IS ATTRIBUTED TO A UTILITY CREATED ; * BY IMSAI. IT SEEMS A FITTING MEMORIAL THAT ;   EQU 40H ;DATA READY TBE EQU 80H ;TRANSMITTER BUFFER EMPTY ENDIF IF C8000 STAT EQU E IT CPI 'S' ; IS IT ANOTHER SYNC?? JZ RESYNC ; YES CPI 'F'  * MAIN PROGRAM ************************************** ORG TBASE IF C8000 MVI A,1 ;DISABLE ; POINTER INTO HL SHLD OLDSTK ; SAVE IT LXI SP,STACK ; SET NEW STACK POINTER  ; WRITE DISK RECORD DELETE EQU 19 ; DELETE FILE CLOSE EQU 16 ; SEARCH FOR FILE SEA ; IGNORE, WAIT FOR VALID ******************************* * SIGNON MESSAGE ****************12H ;STATUS DATA EQU 10H ;DATA DRDY EQU 1 ;DATA READY TBE EQU 4 ;TRANSMITTER BUFFER EMPTY ENDIF IF TRS80 STAT EQU ; TEST FOR FILE NAME JZ FILENM ; CPI 'O' ; TEST FOR OPEN COMMAND  MODEM INTERRUPTS OUT STAT MVI A,0 ;WRITE 0 TO WRITE REG 1 OUT STAT ENDIF CALL SIGN ; SIGNON  XCHG ; HL = RETURN ADDRESS PCHL ; RETURN ************************RCH EQU 17 ; SEARCH FOR FILE FLLFCB EQU 36 ; LOAD FILE CONTROL BLOCK UNMOUNT EQU 13 **************** SIGN: LXI D,SIGNON MVI C,PRINT CALL BDOS RET ***** 0F7H ;STATUS PORT B DATA EQU 0F5H ;DATA PORT B DRDY EQU 1 ;DATA READY (SIO) TBE EQU 4 ;TRANS BUFFER EMPTY (SIO) ENDIF ; JZ OPENFL ; CPI 'R' ; TEST FOR DATA RECORD JZ DATREC CPI 'W'  CALL NORM ; SET UP STACK CALL SYNC ; ESTABLISH COMMUNICATION LINK ANOTHER: ************** * SYNCRONIZE *********************************** RESYNC: CALL SYNC2  ; REST DISK SYSTEM DRVIN EQU 31 ; CONVERT ASCII DRIVE NAME TO INTERNAL CR EQU 0DH ************************** * INITIAL SETUP ******************************** NORM: POP  ; DISK RELATED RQUATES OPEN EQU 15 ; OPEN FILE MAKE EQU 22 ; CREATE FILE S ; TEST FOR WRITE RECORD JZ WRITER ; CPI 'X' ; TEST FOR END OF FILE  CALL CLEAR ; UNMOUNT ALL DISKS MAIN: CALL RECEIVE ; GET A COMMAND OFF THE DATA LINK STA COMMAND ; SAV JMP ANOTHER ; THIS MUST BE A NEW, SYNC: CALL RECEIVE ; WAIT FOR CHR. STA COMMAND  ; CARRIAGE RETURN LF EQU 0AH ; LINE FEED *************************************  D ; GET REURN ADDRESS OFF STACK LXI H,0 ; LOAD OLD STACK- DAD SP ETBUF EQU 26 ; SET DISK BUFFER READ EQU 20 ; READ DISK RECORD WRITE EQU 21  JZ EOF CPI 'Z' ; TEST FOR SIGN OFF JZ EXIT JMP MAIN   ; SAVE FOR ACK SYNC2: CALL ACK ; ACK BY SENDING BACK LDA COMMAND CPI 'S'  GET ; LOAD RECORD JMP MAIN ********************************** * WRITE RECOSSFULL OPEN JMP MAIN KILL: MVI C,DELETE LXI D,FCB CALL BDOS ******* GET: LXI H,ERRCD ; CLEAR ERROR DETECTION CHR. MVI M,0 CALL GETBUF IN ; DONE ********************************* * OPEN FILE **************************,EOFMSG ; O/P MESSAGE MVI C,PRINT CALL BDOS MVI A,0 STA COUNTR  ; IS IT SYNC COMMAND?? JNZ SYNC ; IF NOT, TRY AGAIN RET ; YES, WASRD ****************************** WRITER: CALL WRREC ; WRITE TO FILE JNZ BADWR RET ************************************ * DATA RECORD COMING ***************************** ; LOAD A BUFFER FULL CHARACTER CALL SENDCK ; SEND A CHECK CHARACTER RET GETBUF: CALL ******** OPENFL: CALL SEARF ; SEE IF IT ALREADY EXISTS CPI 0FFH JNZ EXISTS  STA COUNTR+1 STA COUNTR+2 CALL CLSFLE ; ATTEMPT TO CLOSE JZ CANTCL  ********************************** * FILE NAME ***************************** FILENM:  ; BRANCH ON ERROR CALL ACK ; ACKNOWLEDGE JMP MAIN WRREC: MVI C,WRI* DATREC: CALL PRREC ; FIRST INFORM CALL ACK ; SEND ACK LXI B,SECTOR RECEIVE ; LOAD A CHARACTER MOV E,A STAX B ; STORE IN BUFFER POINTED TO BY B  ; ERR IF SO CALL KILL ; EREASE ANY AND ALL EXTENTS CALL CREATE ; MAKE THE FIL ; ERROR CALL ACK ; ACK IT CALL CLEAR ; UNMOUNT ALL DISKS JMP MAIN  CALL ACK ; ACK COMMAND LXI B,FCB ; WHERE TO PUT FILE NAME MVI D,16 TE LXI D,FCB CALL BDOS ORA A ; SET FLAGS RET ********* ; POINTER TO BUFFER ADDRESS MVI D,128 ; NUMBER OF CHARS EXPECTED CALL ADD M ; UPDATE ERROR CHECK CHARACTER MOV M,A INX B ; UPDATE POINTER E CPI 0FFH JZ DSKERR ; BRANCH ON DISK ERROR CALL ACK ; ACK THE SUCCE ************************************** * LOAD BUFFER FROM LINK ******************************* ; NUMBER OF CHARS EXPECTED (REALLY ????) CALL GET ; GET RECORD & SEND ERR CHK JMP MA************************* * CLOSE FILE ********************************** EOF: LXI D  DCR D ; DECREMENT COUNTER JNZ GETBUF RET SENDCK: MOV E,M ***************************** ACK: LDA COMMAND ; GET LAST COMMAND MOV E,A ; TX IT DOWN ;RESET FCB TO EMPTY IMAGE LXI H,EMPFCB MVI B,36 CLEARL: MOV A,M STAX  FIELD MVI C,3 ; SET TO DO 3*2=6 DIGITS CALL NEXDEC RET PRNMB: LXI E ; CLOSE THE FILE LXI D,FCB CALL BDOS CPI 0FFH RET ***************** ; OUTPUT CHARACTER RET ************************************************* * PRESENT RECORD ; GET ERROR CHECK CHARACTER CALL SEND ; TX IT RET ************************** THE LINE CALL SEND ; AS THE ACK FOR EXECUTED RET ; COMMAND ***** D INX H INX D DCR B JNZ CLEARL ; SET DISK H,COUNTF ; POINTER TO FIELD WHERE TO STORE LXI D,COUNTR+2 ; ACTUAL COUNTER (LAST BYTE OF 3) M****************************** * CLEAR STAUS OF ALL DISKS ************************************ NUMBER ON SCREEN * ************************************************* PRREC: CALL UPCUNT ********* * DISK ACCESS SUBROUTINES SEARF: MVI C,SEARCH ; SEARC DIRECTORY FOR FILE ***************************************** * SEND CHARACTER DOWN LINE *********************************** WRITE BUFFER MVI C,SETBUF LXI D,SECTOR CALL BDOS RET ; RETURVI B,3 ; SET TO DISPLAY 3*2=6 DECIMAL DIGITS PRREN: LDAX D ; GET NUMBER PUSH*********** EMPFCB: DB 0,' ' DW 0,0,0,0,0,0,0,0,0,0,0,0 ; CLEAR: MVI ; FIRST UPDATE COUNT CALL PRNMB ; THEN PRESENT NUMBER LXI D,RECNO ; DISPLAY FOR OPE LXI D,FCB CALL BDOS CPI 0FFH ; CECKIF ERROR RET CREATE: MVI *********** SEND: IN STAT ; GET STATUS ANI TBE ; MASK OUT TX READY BIT N ****************************************** * ECHO LAST COMMAND DOWN THE LINE ************** B ; SAVE COUNTER CALL CONASC ; CONVERT TO ASCII MOV A,B MOV M,A C,UNMOUNT MVI E,255 ; HAVE SYSTEM UNMOUNT ALL DISKS CALL BDOS LXI D,FCB RATOR MVI C,PRINT CALL BDOS RET UPCUNT: LXI H,COUNTR ; POINT TO COUNTER C,MAKE LXI D,FCB CALL BDOS CPI 0FFH RET CLSFLE: MVI C,CLOS JZ SEND ; NOT READY MOV A,E ; GET CHARACTER TO TX OUT DATA   INX H MOV A,C MOV M,A POP B DCX D ; POINT TO LES STAT ; CHECK STATUS ANI DRDY ; CHECK RX READY BIT JZ RECEIVE ; NOT READY  RRC RRC ; SHIFT 4 BITS AROUND (DECIMAL DIGITS) PUSH PSW ; SAVE A OLDSTK ; LOAD OLD STACK POINTER IN HL SPHL ; RESTORE STACK POINTER RET  MVI A,0 ; RESET DIGIT CUNT1: MOV M,A ; STORE RESULT INX H ILE ALREADY EXISTS JMP ERROR ERROR: CALL SEND ; TX THE ERROR CODE JMP MAINS SIGNIFICANT DIGIT INX H ; NEXT CHARACTER FIELD DCR B ; DECREMENT COUNTER IN DATA ; GET CHARACTER RET ; AND RETURN ********************** ANI 0FH ; LOWER 4BITS ADI 030H ; MAKE ASCII DIGIT MOV C,A ; RE ; BACK TO CCP AGAIN ************************************* * VARIABLE STORAGE ***** ; NEXT DIGITS MOV A,M ; GET MORE SIGNIFICANT DIGIT ADC B ; ADD IN CA ; RETURN TO MAIN LOOP ******************************** * EXIT ROUTINE ********* JNZ PRREN ; DO NEXT RET NEXDEC: MVI B,1 ; UPDATE WITH ONE ********* * ERROR ROUTINES ******************************* DSKERR: MVI E,'G' SULT IN C POP PSW ; RESTORE A RET ********************************************** ********************************* SIGNON: DB ' FILE RECEIVE UTILITY VERS 2.2' IF Z2 DB ' FORRY DCR C ; GET COUNT, SEE IF LAST JNZ CUNTUP ; NO, DO ONE MORE RET ************************* EXIT: IF C8000 MVI A,1 ;RE-ENABLE INTERRUPTS OUT STAT MVI A,1CH OUT STAT ENDIF MOV A,M ; GET LEAST SIGNIFICANT DIGIT ADD B MVI B,0 ; PREPARE FOR FURTHER ; BAD DISK WRITE JMP ERROR CANTCL: MVI E,'C' ; ERROR IN CLOSING JMP ERROR  * RECEIVE CHARACTER FROM LINE ********************************************* RECEIVE: IN R CROMEMCO Z2' ENDIF IF C8000 DB ' FOR ONYX MU ' ENDIF DB CR,LF,'$' COUNTR: DB 0,0,0  CONASC: CALL CONAS1 ; SMART METHOD MOV B,C CONAS1: RRC RRC  LXI D,TRMMSG MVI C,PRINT CALL BDOS ; ISSUE A TERMINATION MESSAGE LHLD CARRY FLOW CUNTUP: DAA ; DO DECIMAL ADJUST JNC CUNT1 ; IF OVERFLOW (CARRY)  BADWR: MVI E,'G' ; BAD WRITE JMP ERROR EXISTS: MVI E,'H' ; F  ; 3 BYTE COUNTER RECNO: DB ' REC. NO: ' COUNTF: DB '000000',CR,'$' EOFMSG: DB CR,LF,' END-OF-FILE RECEIVED'* G8- :, Z:,:-M V:.L:/F ͦ|:.~AZ:,. !7~w:-ʀ  :-ʀ :.k@252627>282@>2B22222>222!j~w:7h27:4U]:5`&Y>280!.>w26!.>w23:/,CR,LF,'$' TRMMSG: DB CR,LF,' LINK TERMINATED',CR,LF,'$' COMMAND: DS 1 ERRCD: DS 1 ; ERR  !$' $(26 %05@E$06BHT!(5BIVc(22222222%&2'2222222222222222222      #!$"2Z:,o !7~w:-ʩ :.B;!7~w:/ͦ:,;":.̮I:/OͦV:/ :.%::.'DÀ ͦ:.Z80 MUMPS VERSION 2.70ͣERRORS DATGLOBALS DATy&ʾ:/¥ͦ:/&ʾ>$!/Î!.>w227#:7ʆ2.:60?::4:j3:3:8y:j;:@OR DETECTION CODE SECTOR: DS 128 ; DISK BUFFER PARAM: DW CCPLN+2 ; PARAMETER BLOCK FOR DRVIN. POINT $2@HVdr '6ETcr!">""<,"l":":!2"n*B":/; >2:. N:.'D>2-:.{D:-ʀ  ͦ">2:. N>2-:.F:-€ :.'D>2-:.~G:-e 2cQ:2@>>:&[>2:k[>!l:k͸[!l:k͸:k2*>"lO "6 *l+"0R:,/T*L~TO TEXT ; CONTAINING NAME, BYTE 0 OF FCB WILL BE SET FCB: DS 36 ; FILE COn"n!5::!2!5*l^ͻ*l:w#6#"l*n*ls#r*l"l*n"n"N"L"R*L6*++"X"T"V!" _   4 ' Ax  \iA *  4 z  :.dH:/• ͦ :.̰H͋!7~w:-  :- :.@Z:,· !7~w:- :.;!7~w:-"P~2#~2#"L[>:͸*L:O "L*>O "l6 *>:O "0ͦ*0~ >27>27:- Z!7~w:.̷6:NTROL BLOCK OLDSTK: DS 2 ; STACK POINTER ON ENTRY STACK: EQU $+40 ; NEW STACK END *Ts#r*:*:-_ :.;Z:,M :2B!7~w:-2,>2?">2-:/¼ͦ:/ʬ&´>2-ü">2->2,ɯ>>>>>>>>> > > > IIZ:,{!7~w:¤:-ʺ:.]I:/ͦ:./L":.dIZ:,!7~w:-:.ͦ?V:.̂*>2,?V:.̣*>2,?V:.t*>2,?V>2-:.B*>2,?A͛:,ʴ:/ʇ!>wͦçʩ V:.L:/¢ ͦ|:.4>Z:,Š !7~w:-  2:.V+ +:.-Z:, !7~w:-:-:/>2,?H:,4}:,B2,H:,4}>2,?:/ `ͦ:.2)w:/ m2,ͦ:.Z)>2,? ʒ :.̀; :/ 2ͦ:,ʶ :.;A;:.̊;:/ʞ  :.;Aͦ:.9< :. >>>>>>:.;A>>>>>>>>>>>>> >!>">#>$v1":.n'|:.MZ:,!7~w:-cD:.xIn:/Yͦ:.6Lc͉:.̑IZ:,D!7~w:¤>2,ͦ:,ʴ:/ͦ!~w:.pE\A:./\?:.̂*":-:,1:,:.K>2,?4:/ͦ+:.Z:4:,4V:.x:Z:,!7~w:-v:-o:.̀)v:.QJZ:,W:/ʍ2,ͦ+:.̥)>2,?:/ʰ2,ͦ:.H>2,?:/ͦ>2-"2-:/ͦ>2->2,?>22:-*  :.PJ5 E͠:.AJZ:, 22!7~w:-~ V:.L:/w ͦ͠:,w |͠:.5BZ>%>&>'>(>)>*>+>,>->.>/>0>1>2>3>4>5?>2-:/ͦ>>2,?:-:-ʷʘ:.!I:/­ͦ:.PL÷͉:.?IZ:,˜!7~w:-:.*:.)Z:,!7~w:/ͦ:.uL%#:,%2,:,;:,1>2,?:.n'y:/tͦV:/ͦ:.&>2, :,g!7~w:-ʣ:.zMZ:,™!7~w:-:.wM!7~w:-:.LZ:,!7~:-ͤ$:,T:.K>2,?K?:/?:.n'2,ͦ+>2,?:-vͤ$:,o;%:,T:.K>2,?::,Q !7~w:-ʡ :.@!7~w:-! :/ ͦ:,;2͠:.i>! :,! :, :.:.)?:/&&!7~w>2-Tͦ:/<ͦ>2-Tͮ:,O:-T>2->2,?:/€ͦͮ:,{:-Z2,:- :.;!7~w?:.@:-?:.̲?>2,?>2:.n':/e͒%~ͦ͒%:/eͦ>:,g2ͽ:,g:,®:.̓Cg=:,%:.Eg?:,:.̯*=:,;:. @>2,?:-ʷw:ʩ:.F7!7~w:¤:-P:/Iͦ":.dI:.̥LZ:,1!7~w:¤:-ʅ:./ʔV:.Jͦ÷V:.J:,š:-:,š:-:.2K÷>2,?>2-:/>2-:/2,>2,>! :,>2͠:.>Z:, !7~w:-g :,R E:/OͦV:.D3Z:,D !7~w:-:,Z?:/ʥ&6!7~wèͦ>2,?:/ʾ2,ͦA:-:/ʾ>2,?:/%ͦA>2-:.zK! 2ͤ$:,y2,>2!"Yͽ:,<*YR;>2?:-ʷ:/X2,ͦ>2:/nyͤ$:,;:.M,:.x!d]"***dʐ?"2?:@!>wP::!>w!~w:6U#!4:6.š!dX:.š:ʹ?2,:/>!/:.>!/ͣ*͂*:/w#>2,ͦ?:2|:.>26#6#+":2:#6#**:""6.:!2É#*#"*:*"!2:!2*O ":*6.#"0:*!\:[͸:[O ?w#6#?:/6ͦ??:/2,ͦ+>2,:/ͦ>2,?2,:3:/(@Y!:.!++~2>2":/¯!ͦ!5:ʗ#:._!:Y!*~0Y!+2*+"6.##:,ʦ!>2:.¯!++~2:/¬ͦ:.JV:.J(:/ʈͦ:.SK2>2,?:/2,ͦM>2,ͳ:.̶*:.n'+:.3:/L#!4:6A#!4:,6N#!4:>6P#!4: P6C#!4:@b6E#!4!d:̀~w*dʐ?:.?2,:/>2,2:N:.N!d]"***dʐ?"?ͦ:/xͦ:/ :.N6"#!4N:/ꎯ2:!2€!:.#:ʩ#!4:!2#60#>2:w#6#:2,:J×#?:#>22>2,:>2,?2,:/ L>!/L:.D>!/4ͣ*7͂*:/22/w#>2,ͦ?*0"n:/dͦV:/t>2y>2*n+"0+~20›!!5:€!æ!:w#ï!:.¯!+:ʗ#:#*0~E—#ͦ!5:ʗ#:/!!>2!5:ʗ#ͦ>2#:,:.J:.|,ͳ:,6͹:. .͢:..V͹:,6͹:.u':./>2:.̽72>‹+~2:/ڵ>!/ڵ:.«:/w#!4ͦË:.:w#?>2>2-:/&(>2:. : >2>$!/:.N*0~w#!4N:.:!d:̀*dʐ:w#6#2?2,2:/>2x*0~U!~wu$:/u$>2,:O$:,$*0~0@$>2:.<$*0~w#!4!5ͦ:/$:.u$:g$60#!4:w#6#>2:.2ͦ#:.š"!sX++~26,#!xX++~2:!2!4:w#6#:@2Í:A2Í:.šn^*V[RR"#:.#2:,J>c!J:?":ʗ#?"*~0ʗ#:"*"#":!2:!"!":ʏ"*~0"#"2:.̽72͢:,6͹:.̢1+:.?:{$>:/ͦ:.:-:.)V͎$V:.J:/ͦ/>2-͂*+~2+~22"l2:l *l+"l!5*l~ @~@~ b ~"& >!22& :@& !4!4:h6r*0~L!~wr*0~A)!~wr*0~N<!~wr*0~PO!~wr*0~Cb!~ wr*0~E1!~@wͦ:/>22ʍ$>2.!.>w:w:2.?:/ʿ$ʿ$ʿ$>2,>2,2":.$:$*0~w#!4ͦ:/$>!/$$:.:B2Íd*ːd*ː:.š:j:nU"*[*!o͸:nO ?:nw#6#!"Y!n"Y:.š!C͂:!5!5!5l"**:ѐ:!2:ʺ"60#!5æ"2×#:!2[*:͸*:O "6.×#:ʗ#:!;#*"͖$(:,:.D":.@^+:.̝MV:/V6_ͦV_z+~2+~2/O ?"*[#:w#*0k*l+"0ͦ:ʴ :/ڴ ʴ @:3w#:23>!2-?2>2222: :2>2"#:," %:w#6#?>2-:.:%:/:%>2-*0+"0ͦ?:/K%2,>2,2:.p%:p%*0~w#!4ͦ:/T%:.>!l,*l~2#"l>!ڪ+6 #ð+6*#6 #> !2*l:`"l6 #!5:+2:,2*l^#V">2*l?++~2/O ??!"lk?!d]~)*dO))i!dː*dF*iʐ!d͕)|> 2P)!.!>wO6"l6"*l~2"p240!~w:22>!C0ͣ*F0͂*++~2*p"n#"p*n++~2/O "n>!ڲ0*n?u(͂*++~2!i~(!d:̀iO((!idF2:,%"n*n:/O "n:O "p*n:!2*n :V+.:.ͳq.:% C?!d]i!dː:,?.!d]++~2/O ?"l!n:̀!d~t.͕t.Ä.:,.d!%:w#>w#?:.&>2+~26"r"[r*R+"~2#"l:%*"!4:%*l#~w+"lKr**lȏ"l"l6#6#x::X,*l~22!446"#*l#"l:`"l6"#:w#6#x:2):l,:l,ͫZ*"l_+͂*U,?~w?!C"l~ʐ͂:2>2ה:,7*:A*ͨ8X!>w?ͣ*++~2/O ?"***~0o*>2-ɯ2-?ͣ*2:˜0>12Ý0:ˆ0>02:w#6#6#:(1*n?0*p*n:G:"n2€0Ð0:1*p*n:O:GRڀ:w#6#!n]ͣ*!i~^2:,%>2U2i!nːÉ'?O6"p6"r*p"r~2+~2+~2+~23 "p^#Vː!niOڙ.i!nː!diO.2!i2!5:2*l:O "l"****l:ѐ:w#6#ɯ2.?:,/>"*:w#?2+~2/&+~24&>2"p*p:/O "p+"r~2':w#6#ͣ*++~2*p~-‡&>2!5+~26""r*r[R""~2#"r~2:f-Ec2:,X-:-X-*^#V"n: ,>2*n^#V!RX-> 2X-:Q?+~2ʜ*6"l͂6#?>2Q6#?>2:,*!d]~&+2:,&+:&+++~20+!0+/O0Ð0:!0*n*pOͤ "p"nÀ0Ð0!d:̀!i:̀!di)2:,*p "n*p:ѐ:w#6#?:A2z"n+~2ʚ(w#͂*++~2_N:,ʻ(!4*r:w(*r#"r:(:³*p[nR"l4*p:w#"p*rѐ*nO #"n*n2(/!d]~.͕.2:,ʬ/:2++~2/O ?"p++~2/O ?"n:/:!/!5*n:O "n*p#"p*r+"r22-*r~2&±&:2&:&>2:w#6#B*:-2-2!5*r+"r:•&#"r:"'*p~0-*n^#V!RX-> 2X-:C-*l "l>2^#V!RX-> 2X-:S-> 2X->2*?:ʹ͞kh2:,ʤ->2*l^ ?!5"l*l:O "l~2:ʹ++~2:/O ?6-#61#6#6#?*T"l*l^#V"R{,*l"l~2!m͂x:2):A2!{͂x:2)?:,ʲ1!i]!d]:,1i!dː++~2/O ?"p++~2/O ?"n: 3k?:2>2ה:,'):ʕͨ8X!>w?> 2P> 2P*}ʐ*)?> 2P> 2P*}ʐ*}ʐ:!2*p*nG:"n2/!2/++~2/O ?++~2/O ?2:ʹ?++~2/O ?:ʹ?"':'*r6-#"r*r*p:ѐT'*r?>2:-K':B'6-#61#T'60#_':_'!4:w#6#6#?!i]:,#V*l"l[*l"l>2,͵m:2:,X-*"r2h:,X-: 2X-?2:,%:-2V+.:.>2# !i~ 3͕ 3!d~C2͕C2!diO 32:, 3!5G22:ʆ2*p*n:G:"n2 3:!2!4!5!i:GRڍ8û8*r*t:O:GRڥ8û8*r"t+"r"p":2*"rRU8*Rz9*~2#">2> 9>8>2*#"*%:ʬ6*Yw#"Y/O ?"*[Y**:͸!"Y2?:8ʟ!\:@22cQ:2@:-6x:>!46*Pk*0k~2#"r~2:=Ec:,=:-=*^#V"n""n>U=~w*^#V*s#r=*n>ڒ=~w*^#V*s#r*l "l^#V"p*"͓a*^#V"p^#V*ns#r*n*s#r*l "l"*n"*l"l*p~wN #"p:4>25:4>25*p~2!)?:šn<2!.~w!7~w>2:BA;!.~w:BV;!.~w?!]~;͕;>2>22|G2*n"l:2*p*n:G:"n22:!2!4!i|͕2Ò222:!!2"*[**l͸:O ?:#"!5[*:͸:W9:2*+""l6-!4*l#"l~.H9>i2w!5:49*l4*:O "*?:w#6#*?:3w#:6w#:4w#:5w#"23242625!~w>28!7~w?+~25+~24+~26+~236">!4~76"L>ls#r22b=*"p*n#"n^#V*s#r*ns#r22b*?:22:=e>2|t!^͋=͞k:2"4[l*p:͸D5>2:,D5La*T*ns#r*n"T":O ":ʂ5>2>!a5:22'f*n*s#r*n""!5*X"T"V?:ʘ;n^6""[*R"~2ʽ;;A;*?*#~2+">2Ec:,;>2*^#V"n^#V*s#r*T*nw#6#ɯ22?!d]+~2~;32!4:w#:w#?2:ʈ3*YR>2*l "l^#V"[*lR":ʝ96-#61#>2k92k9*^#V "r!8͞kh*nR9>!z9͵m:,z9*l~2#"l*"r:2(q::28:2cQ:2@:4œ7*+"0ͦ!>w:/&¼7!7~w?+~26""r[*rR""~2ʮ2#"r~2:µ9Ech:,>4o*"r:2h͵m:,=2h:, >=?+~2¸+~2cQ*~b>:@2cQý:2@?:,2ʔ>:BŠ>"tD5;d:³52*~2##"r*rN #"r!5:5!5*?*r":ˆ3*?:52:5*?:2:2*l"s#r*n"T"n~2~w:8<*l "l^#V"p22b?2:K<̀;*T"l*l*XR<*l"^#V"*l"l~2~”<~l""*YRo62"O6"6"+~23+~2w#:w#2*":3*"*~2*~2#"~2"l2*l "l>2,9:z9:,z98?*"l"D36#?!d]~%͕%͖?2w#6#6#x:?+~*"r:,z9:-ʤ9z9:z9*r"l*"rRz9!Z"p~2#"t*l~2#"l!"*r"r^#V"*r~2#"r*l*r:O!X>>2>2*~>:@¹>ʹ:,>:B}>>*~>*~*wIP*6"t:ʹ*b*t"l>2D32?x:?*N #":6!56[l*R#"*#"r͞k*+"*+"t*"p*"*#">2hp2*["rÅ5++~2>!w2*X*ns#rè<*l>w>2:ր2:<*l~2O #"l^#V"p2b*"n*"lQ2!>w*:w*+"":5*"Ec*"r*":22:5:,5:-5*^#V"l~2#"l^#V2ڭ::+~2/O ?"*+"::w#͂*+~2Í:6"~2:2*#"::~2P!5:!d:̀*d$ "t*~2:@6?:,??:Bn?2>22??*~G?*~*wIP: n?:!4:w#n?G?:w#6#:@ʐ**"***?*"n++"0~2"p/O "0"r+"0ͦ>2,2i*nː*n"n!i~E͕EeF!i͕FOF)2C:ʒC2)?6""r?[*rR"~2#"r~2Ec:,:::C2C2:2:#"0*0k*l"0:2/:3w#:w#:w#:w#23>2?*?2?++~2"l*l/O "l!44!4:h!+~2ʘA¸!d]+~22cQ:A*~A*^#V"l6:2*^#V"*^#V"*~ʽ6:B:B:2*VH!H*"n:2*l"p:2G*"n:2*"p:2>2u*"l*"D3>2-*?*0k?6"0+~2:ʗH++ʆ?IP*6!d:̀*d)*t"l>2D32?+~2?++~2/O ?: @+~?+~2/O ?++~2*0*pRF~Fi!ː!4*nk*0kn*nː*n"n!n~HFOF!n~w!n2*nO "nEa\!i͕E!d͕E:D*r+"r*r?D*?*l͂2?*0k"l*l "l~2:cD*l++"ll!5BD*l "l^#V+"0ͦ~?646 #:w#!C͂>!4ڥJ*Pk*0k:6w#:3w#:8w#2623*l+"0ͦ~6#>2!.~w?͂*O6"l6"^#V"!d͕BͨBS:!@+B2@:@2cQ?+~2"lʧB>!ڸ++~2"l:w#6#*l+/O +"l~~2/O ?!5uH*0+"0ͦ"v*v "?!5!65 ?6"l"*[l**R"***?:/&HͦH?!]2:2/O ?6#:-w#?͵S:30@Y#@:6R@"n"pdHͰH*p*n0@J28>2:4j@>2?͵S*v:`"r:ŒF2,F6"06"n!5i!ː*0+"0ͦa\!i͕F~F*r?:F!>w:,2,:,ʹ*+"0ͦ?"*?>2"0"n*n+++~2/O "n"*"p*n? ?">2͓Cͣ*++~2:2>2u*"l*"D3>2-?>2*N"n!d*l~2"p#"nK*l*nȏ"n"l+!4:w#+~26#6#!4:w#?:3yK:/(@Y:3yK:/(fK?>22>!:šB2çB*l+"l~A2*l+"l~2cQ:B>2:2ה:,Bk*6B*6++++*6:@2cQ?I~I͕II2B>2B*N"R"L!C"l6!>w*R6?,UT?WV*R"L!>w*N"L?\W:,r*n"L?*N"lw#>w#*Pk*0k:6w#:4w#:3w#:8w#!54!4:h26242328~?\W+X?:6AdHͰH:6"A!7͓C++~2>2"l*~-]G*"n*"p:2:2u*?*l~-xG~0xG2-*0k*"n*"p:2:29G>2-?]|X\WX2?6"""x[*xR"x"~2#"r~2͞k2h:,*l^#V*l"l*x?͂?*0""***-+~2ʤK@w#͂*+~2+~2"l*l/O "l!4!4:h6#:w#*0k:3w#*l+"0ͦ>232-?:3*!̓?22͙:,ʈC2:DC*l~w#!4*l#"l~ "C> !26 #!5:MC6 #6#x:>2!4:C2*l~ʐI~UÁI?,U*n"l~U*l*rRI?!64!4:h*0"l:/22:/I&JI>!22ͦI:I*0~w"A:4A]#A:5(A&Y#A:A:j;>28>27:}A2*V"l*l*XR}A*l>w#"^#V"[*l"lLA?2-͟Y*?>2͓Cͣ*++~2"l*"n:2*"p:2>2u++~2"t*~-H*l"n:2*"p:2u*t~-% L:/(@Y:3L?:2>2הͨ*R"L?*L*RROL*L"l~U?*R*LRtL*L"nN "rT?!X¾R++~2:ʮR*l#"n*l:6-!4**l:ѐR*?60#>2:w#6#*+"0ͦ:k22*l"*~ ^#V"*^#V"ͅ*6*^#V*s#r*^#V"l~2P#"l*s#r*4?:@P::@P:ͱ*~Q*^#V*s#r**lȏ"l"n[r*pR"pͅ!"l!"rVKp*n*lȏ"l"n*R6++~2/O ??+~2wWd!}ːÅW:w#!2,:•N*0~0PO:/»N>2*r#"r!5!5:mOͦ!4:/OmO*0~0mO:N>i*02w!5!4:mO:POͦw#:w#"L[L*r:k͸*L:kO "L!~w?\W:,r*n"r:-VUN*r "r:-wU\W:,r*rN "r*R"r??2:,>!:w#n'?++~2k"r*r/O "r:k2"2"t*~ L~ L#"!4!5:L*6 :S#"!4!5:R2,>2,?++~2/O ?:ʤS"l*N"n*n~ʤS"p~2#~2#"nʔS pS> 2:!”S*n*l6*^#V"l:w*4*l#"l*s#r**]Q:2*^#V"*^#V"*6*^#V*s#r*6!"l:2:ʇQ*l"ld]:ʗW S:,W*n*RRW!d͕W*nN "n!d|×W>2,ɯ2,?"t*t++~2/O "t!C~2#"n"v!C͂:/OmON!5:mOͦ:/mO*0~2:=O>i2w!5:O:0mO:hO>!22*04>2,6+"0ͦ:,ʒO:*l~2#~2#"l:O "p> 2:!ڲU>2U:!2*~U*^#V*s#r*6:U*l~2P!5*l#"lU> 2P!*r"l/T*t??+~2:vM++~2oM%+~A2:XM:2\oM:!oMn:22!5 M]?+:Oͤ "l"néS*n:O "nIS2,*p"n>2,?+~2SWV*N"n:,2:SS!C~2#"v\W:,r:2,*n"L!5oQ*l"#"l"#"l""l""l"#"l""l""l""l"?+~2R+~2"*/O "R*v?:!,X*t*n:Oͤ "n"t2X>2,>2,?*R[NR"l*N "n*l*ns#r*l"l!"r!"!"p*lʒO!4*r+"r?!":OO6"6+"+~2:O6"lk*l~2!O #":w#?"l*l+"l~2:5:U*l#"l*l*pR0V*l~2P*l#"lV> 2P> 2P*6*b*}ʐ?W:,GW:GW:š:2>2+~2>2!%!"l:/?2:,%>2!%!:O +"l~ʹ?++~2"l*l/O "l##"n*l:6#w!44:?*n"LKn*r*RΏ"n"r*n"R6!~w?:¤*l"r:2ʝT*0"v*l+"0ͦͤ$:,nT;%:,T*l:O "*0*6~2#"l"`"l2*0"*+"0:ʾRͦ:/VRVROR¾R:2!5&R!~w"l:nR wR:2#!>w:,ҭXKr*p*nȏ"n"p[r*lR"luXKl*p*nȏ"n"pS?2:,Y*n~22#~2#"n`"n:!26 #P*l+"l~2P>2*l:/O "l"[l*R"*l+"l*k*lk?**¦P:@xP*^#V:kO "l6 ÕP:2*"le*l?!CO!"ͅ!"l^#V"R"p[N"R2[V*RRV:n^>2øV*N"n*l"l!~"r*p,WKr*no&"nk?*"l"!D3"l:2*l++"l:ON~2/O "l!5+N*l~2:w#?*0k*r"0ͦ:2>2>2RT*v+"0ͦ S:,m*R:kO "2[V*RT:n^>2òT*R"n*"R*L+"lKl**n܏"n"*L:k& *n#"n!5*n:`"n:w#6#?+~28+~23+~24+~266"6"LWV!55!5:8nYÐY[>*:͸*>:"^#V"*T"^#V"T*V"**XRʅ`*"~2#"^#V"w`*^#V"R`**XR`*"^#V*5:\]*0+"0ͦ!i|~¶]͕]*l"nj\*l"ni!}ː]*n:O "n?+~28+~23+~266">!4^"l""l~2!4*l*:Oͤ ""l^d*^#V"l*"*"*lRc>2-ód!5:ʓd*^#V"l"*""*!5:[*n~.ʫ[:ʫ[>i2w#ô[*n~w#!4*n#"n!5Å[:[+~2!4:w#6=#!4:w#6#x::[l͸*l:O "l:1b>!1b*l"l!"r*p"l:Wb~b~wdb*l~b>w*l#"l6*p#"lO "l6 *N"L*+"0ͦ27?6"0"l*l" ~2/O "l" ~2/O "l" "l"?!5*0"l"p"n*n~s#r:w`>!J`*N #"^#V"Rw`*"^#V*s#rw`*"^#V"Rw`*"^#V*s#r*["6"LWV+~2/O ?!45!527:8<^:4<^^^[>*:͸*>:O "l6 *N"L*+"0ͦ>2?*T*XRKa*VlRc>2-ód>2-:ڳd>!ڳd*l"l>2,ɯ2,?+~2:e?:2>!{e:d:2*r"LA\*n~22!446"#*n#"n:`"n6"#:w#6#x:2)÷Z+~2`\!56"÷Z?*n"ld*nː*n"n!d~ʎb~ʩbb*l">2^#V!Rb>2*p"^#V!Rbb*l:w*^#V"l*r*s#r*p"r*l"p8b*rRDc*rZ#"nY*n"n"****nRʀZ*l#~2#"l^#V"0*l~23#"l"n[l*nR"n!5*p:/O "p*p?*lKn["làZæ_*V""**XR`*"~2#"^#V"*"`K**ȏ""Î`[*"Î`*X+"*+"KV**""**XR^*"~2#"^#V"*"^**s#r[*"*["Ç^[*R"RKa*"*V"a*"r*^#V"p^#V*ns#r*n*s#r*n"l*p"p~w*l~2O #"l:d*p:O #"p^#V*ls#r*l"ld:~\2 \*0*pR]×]:ʍ]*0*pR]*0*n]#"n*0#"0!5à\!d~w2*0*pR]*n~2U]:/ʔ]#~2"l*r"!c*l"*^#V"l*p*s#r*r"p*l"rqb?*##"2-!T"*T"l*l^#V"Rʹd*l~2+~236"0+~2/O ?*0+"0ͦ?2w#*"lRG\*^#V"*l~2"n!4*ng:w#>226 ""*~*w"V:KaEa*~2">!Ea*N #"*"?͓O:raea!"* "|a*"*:**XRW_*"~2#"^#V"*"I_^#V["*s#r*["_>2*TRʏ_2**R~_>2*2*r"*^#V "r>2'f*"r*^#V"p*n*s#r*p^#V*ns#r*n"l*p~w"p^#V*ls#r*lN #"ld"px]:L]:/ʔ]x]:A.]:/ʔ]ʔ]x]:NA]:/ʔ]x]:P]]:/x]>$!/x]Ô]:Cq]>$!/ڔ]x]:/”]*n#"n!~2#"l!«c*l*:Oͤ ""lþc*"l*^#V"`c*":ʓd:ڳd^#V"*l"^#V"l"RVd*l"~2#!5:Z:25:6[6.#6 #:2!5[:w#6#x:*n2>2~2#"n>څ[>z[6-#!4>2*n#"nO "*rO "r2>2*V[R"l[l*RRa:cn^>2Üa*l"n"V:w2#"l**ls#r*l:w#"l*##"' *p+~2/O "p*l:w#"l[l*p͸?2>2͓O* "*rN* #"*V[R"l[l*RRڐf:cn^>2:Nf*ͻƁ?2,*"2*͋ʿl*"!4:!!šl>2,?*^#V"l^#V"*l~2#"lͼ*l["l"*l["l*n"n[*l"l[*n"n!46"*n*Rj[*nRtj*"n!5?:k*?!!ͼ?͊l:,!q'l͆*6MuƁ?*rk*lk*l*rͣ"r"l2->2,:-¦q>2,:ʒq:ʡq*l"*rͣ"r"l24*t*v:Oͤ "v"tàhh:h:h*v*t͞h"t"v!5àh>2,?>2>2,:22:he>2|t!*~o*ͼ͖*6*^ͻ!4:!!nG?>2!^ͼ!+~2*l "^͋logÍoʹ~>2*^#V"l^#^#V "rNf*l"n"V*ls#r*l:w2#"l**ls#r*l"ls#r*l"l*r~2!4[l*r:͸*l:O "l*r*l^#V"pRQm*l"r[p"l*"t[t*l"lͼ*l"l!4m*r"l?>2,!ͼ!^͋ʢm2w#!+~2q*?!ͼq:2ͻv"r:w#!͙ͪt!+~2*r~2#"rh*l "lͼql:w#!͙!-¦q!5!5]q:ʦq>2-æq>2-6"l6"r?:22:qe>2|tXm:,ir*^#V#"l*l""l"~2!^͋3j:3jq*^#V"l^#V"*l"l^#V"*l~2#"l"z["l^#V"nRʖi*l~2#"l:2(V!ҍo>2!͋ʧo:§oͼÍo: pq*^#V"l^#V"R p*l#"lͼ4!ͼ!aͼq*^#V"lO "r?>2!ͼ:2w#!͙*l "lͼ!ͼql:w#!͙!^͋og!ͼCg*l"":w͙qͻv*l "lͼ>2,im:,ʴm*l"l?!^͋}n!+~2:,n*l^#V*l"l[*l"l!^͋ʗk!ͼkk"j?:k:|:|>2*":2!5*"*##" t:22*":2!""r:!4*l͂P*l:͸x:2)*"l>2,͵m:,ir!P"t*l"v~2!4*t*v:Oͤ "v"t$rq?*^#V"n^#V"[q:-j>2,:-i*z"l2*l^#V"n*l~2#"l*nRj:2(q:-j>2,:-j[n*l+"l[*l"lͻ*6*??":,,pʹ~>25p!^ͼ:Op!͋Op͗n5p:p!ͼͲ'l*^#V"l!ͼ!#!͙ͪt*"lvʹ~!+~2w#!͙*^#V"l^#V"qͻv!ͼ>2>2!p>22*g>2j?*lk4*l "lͼ!^͋Yn*l"l*l^#V!Rƒn!͋}n!+~2qͻv'n:w#!͙!ͼq2ͻvn>2l*rN #"lz*l":2 t*#"?*"2*~Nl"!48l:2Mu*~}l!ͼ*ͼ͖!ͼ**n#"n͕s*ns#r*6*^#V"l**ls#r>j*^#V"l*n*ls#r*l"l:wq4!ͼq:2ͻvʹ~?!4ài>2>2,:w#!͙*l "lͼi*l"l?*^#V"l^#V"*|g}o"*l#"l2!"n*nk*l^#V2*ls#r*l"ls#r*l6#"lͻ*l"ls#r͊u!aͼq*^#V"lͻ*6!ͼ:q:2*l^#V"[*l"l[*"6"l?*l">2,^#V"*~2#"[*Rfhh:2*"v*r"t*~2!,>2,:w#!͙?*p[t"n !+~2qͻv*[p[t"nnRz͊u>2?:3o2:2Mu( !ͼq*^#V#"rͼ!ͼq*^#V"l^#V*l#"l͊u*r"l!ͼjr?!ͼq*^#V#"l!6"6"n*^#V"^#V"y**s#r:w#!͙*l"ͪt*"l!+~2ʹ~*^#V"lͻ!ͼ>2:wͼq*^#V"l^#V"lg[*R"'x*l":w#!͙ͪt!+~2!ͼq*^#V"p^#V[[#r*l"l:w:ʡ~!ͼq*z"l͊u:ʕ~*"n*"l[R""pKn*l*pΏ"n"l:x~[*R"[*#""?*l"n*l^#V!Rʳug[*l"lÓu*l"[p[t"ls#r*l+"l**nRu*+"~*lw+"lu*p*ns#*R"!5:0|*l*zR0|>2*"7|2g*[R"n[RW|>!{*l"~[*R":!2:ʛ|!ͼq!ͼjr?*l^#V"Rʻs*"ͼsØs?[*"K*n*lȏ"l"n*"[*"K*n*#!͙v5p?:22!44*:͸2!":o&"[*""2?>2!ͼ*l"z:2*^#V"|^#V""p'x!ͼq*"lʹ~v]w!ͼql:w#!͙*l"ͪt!+~2*"lʹ~!ͼq2ͻv*l "lR"*R"*n?>2v2!ͼ!ͼ?*pk*tk*^#V"v^#V"*v#["v*l"^#V"p[p*l"lr*n"n*p"*"K*n*ȏ""n*t":Kv*n:w#"n*+"K*n*ȏ""nͻ*^#V"l^#V[p[tͼ:2!ͼ>2|>2:!ں|[*R"|!ͼ:!2!5[*R"ͪt:}:}:2!ͼlȏ"l"n?*"*~2!4*:O "7 [*͸*:O "*O "!4!5:t*R"!":w?*|"|"["|!ͼ!ͼͲ'l!ͼ:l{!͋l{*""* "ͼ*+"~2"lK**lΏͻ!ͼ>2:w#!͙v5p?!ͼq:2ͻvʹ~!ͼq*^#V"n"^#V"*n#["n!ͼ*"t[*l"lͼ*l"l*"[p*t"tK*l*vΏ""l*"p*s#r*^#V"[t*R"*s#r>j*"*ls#r>j*^#V"l*n*ls#r*l"l:w*6?:2*^#V"l^#V"*l#"l:vg[*l"l!5v*>2!ͼq*^#V"n**ns#r*n#"nͻ*n"n*l*zRS}*n"z*l*|Ry}*l~*nw*l#"l*n#"n@}*ns!aͼq*^#V"lͼ*l"l~2?!͋t!+~2:t"*l^#V""*l"l"K["l~2u""*:w#"ͻ* "* "* "!͋l{:l{!+~2!͋z>2z!ͼq*pk*tq*^#V"l^#V"*l#"lg*["pڠy[*R"Ҡy*l"^#V"ͼs*ns#r*"l*nk*kʹ~^#V"*n*s#r*":w*p"l*66"t6"p?>2*^#V"l^#V"!ͼ2!+~2"!ͼ:"p*"t*"*":2:2?!ͼq:2ͻvʹ~!ͼq*^#V"lͼ!ͼq2ͻv͊u*?!#r*~s#r!ͼ>j*6*^#V"l*n*ls#r*l"l:w!ͼq*6*^#V"l**ls#r>j*^#V"l*n*ls#"~2*""*lK["lͼ*l"l!͋Lu:w#!͙*":ku*"!5Su*"""#""kl6"t6"p:*"l*p[t"[*"2g!"2*l*zR{>2*":{[*l"l[*") 2qͻv*l^#V!R(>2!5!5ͻv*l" "p:w#!͙ͪt!+~2*"l^#V*l"l[*l"l"n"ln͚2:2:O*p͚2:2O:G 0 K(:2x(D8HG!>!0+|:2/8 : ]Ñ!ARG ERROR'NAMEq ARG0DATE= *0#"0n&~2/>2,.x.x2>2,.x.xʡ :2>2*:F!–bފAo+#ů # *!ޖpͱ!ޖ–)' 0 ͕(Gůw# s   y(7 G #A߾ #: ͦog22G G߾ B`AO:_~'w+ #A~0_(===w#'+ 3#A'+#AO7'w0+y2:—*nͼå*pͼ>2!ͼq*^#V"l^#V""n["v[p*[t"2>2*n>y2!:! : ])ÑR8:2: WFÑ (+ '!:2 x2!!–Ñ !:8@:n+2!D "lO2kn!oò*>~ =#.2":i!6/4 Y:#w!Ò_!^#V!~ #dxG:(:8O>O :G8 ~x  x=#őG8G(Eyz(W9?Y(P~'w0 +~'wSET4 IF' ELSE FOR DO_ GOTO WRITE READ KILLx LOCK USEz XECUTEGCLOSE OPENA QUIT HHANG BREAKPRI7A~'w0+ůG ꙉxG/_yOx(G0 GB#Ag#!–p''2Ł:d*^#V#"lͼ!ͼq*^#V"l^#V*l"l͊u*?:^ͪxt^st:q"wtr!ͼqЖ|x8G !/0Y:(>-NT*HALT VIEW ASCIICHARDATAEXTRACTFIND4JUSTIFYALENGTH\NEXTiORDERPIECERANDOMSELECTTEXTVI_G!ϖٯ~&OG͆(͗(+wʂ~GO&͗(͆(Z+w++*^#V"l>2:Ł*l^#V!Ł>2*?:w#!͙"j*~2*"2*~!*::!w*5!4*>:ç !ͱ!–ͣ2j !͕(:!͕(2; !͕ -!͕(#(: :(:( : >0 : 7I\%4K8Lk0L]:Sh1I  ? R e  ! H _ \x sy( # \::O*:( x >0*x(&{ ~0(~0#y( >.A:(:G(y >.>0z>w#>EW* HOROLOGIOJOBSTORAGETESTXY SAVELOADcPRINT*DELETEREMOVEvMOVEGOINSERTOPTIONCALLo'ن'w>0>o'OWy'w>+"͕!|!–pA*R8̊!R(%0#!–!*R(0":!!ہ*l"~2o&#"?ф:/(*0ͦ:/( 2~Z#>2J::( 4# >1>> ͊g>-> # >x=>.y2 +H.(g (.(g+ ňgx(w+ +*  > >> >*#yHzDzH{D{Np#6#Oy0~O/_͚2:2G'0WM?/*^#V=?/*^#VB!F":2!>2:2"2q*^#V: ~ # y!5~++~/O O͚:G( y:( d!ːˑ2t(:(+!d|͕ !dː!|10/26/1981 11:25AM> <g# }o|N#y# §_ɷOɷOxɷRi`BMD~#+~2+N+Fy_>* >  ~.7# G#G# H #:H 6M#6M#6P:8x 8> O͊g!|!| p!ʖ|!d|!|!–'G>_x 0G>02:!(2B> !l:( d!ːˑ 222y2k y(x >\ +~ >  0j (fʡ lG_>0+2,:<:OƔ>2,!_#"l?Ε*:2, P y( + 6 6!l6  y6 6:26_x(>\{ > s>?#6k~(O#ͨw#6#  !r~(<‹(OO + ?(##EgcB R E A K --- ROUTINES ON GLOB ͖w+q+wO'F#O\>(0<<͖Wy0zzp#6#ɱw#ɷp#=O(x8 ?*:}b OF‹>{!f4!ERR: ????????MMPDIR DIR>2,~=0>O! ^#VA4&~0 G_~G8_~8_>2,~/O {++~O/_͚(ALS ON # x/<<#>2,R8& ~=>?(>ddG#~OO~!,62~( >2~~ #xG~Á?**:2:ܕ!F"!#*^#V"++Ny/_+ d0`2q21:q2r<! 6+6+6!W6#6!6#6:VG*o .!6:}^*M^!6!6!U6+6 :Z$ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE R(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE):Z:E=2 :Zʤ]:ҷ\ʹPʹͮ:Z!]h :ZN͌! ͥETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OU! 6n:Z$:Y $Nͮ!6 :Z!Cwͯ !6:Z^hd!Y6{:Y/>!Y/H{ͯ :Y<2$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNI COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUTŠ :Z:Y=HҮͯ !X6:XҾ:q2r !6:Z:/HNͿ!Y6:Z> !Y/>ZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1} :}2VL> @M9 NTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$, HHͯ :!w:Y<2U:Y0}:Y@E}:Y!S!6:T z!6:m!6:z!6h:5!wҙ  â :50O !6q:6O| :6O| !76:2: '2 :'2:'2*Mͣ *Mͣ * Mͣ : :,Rx 20!,4m *R"R:0ڹ ͯ !+4I 20!"R!1q:1 !4>! :! :22*TM> *&~ N2Y !Gp+q!6!Z6+6 ![6:[ S:[ M!Y6g8:2*YM8p!Z6!E6!H6>!H !p+q*> >ڪ Þ !"p+q/ *!DM9: :2#:!# !}:# *#&~ N!#4 !}6:ͯ m!62m!62m!62m!A62@m'2:?2:Ғ:T2? :Z:Y,:Y HHҰͯ :Y 2Xó:TE:T2:V2}v!q!*8!*6: >:   *R}2: "8 *8x *: *:&"R!;q:Y:; Y:Wҩ:; ʩ:2<ʘ:<€!<6<! ^#VRJ *Rx :1w*R#"R = = = = = ͯ  *1M !6q  !6q  !6q  *1& !ڕ*H& 6!H4z!6!6#6#6![6*YM8:[ھ:Y*͇g2Yê:Y:¿:E:[,͡A<2EO>͔:_ :ͳ.!(s+p+q+p+q:(=2(N *$*& w*$#"$*&#"&' !"N*M^7 !)6:!)ھ *N*DM͆ !T6*@ME:?2T:A:Ҳ:X<2X2Aý:@ 2A:A} >ͯ ::@2@:*@M:  W>W!\q:\_  !^p+q.*]   !`q*`&!bp+q*a2_:<2!<ژ!6 >!Ҥ; !W6::;:TH:; !6*;M :; !W6!=q:=a/>z!=6à  !6 à  !60à  *1& !6  !6  !6  *1& . 1 4 7 : = F P [ f q  *YM8):Y[ͱ!5!Z6ñ:[5!R6#6>!Sڰ!Q6:Q<2QO>/:Q!RO!T *QM͡H~K:Q2*ʭ :*ʗ ͯ *N"P*6:2)÷ *N"N!)4d !"N/ !R0}=2- !"R*M^_ !+6:-!+1 *R*@M:@>!(:=2%> >>!F!5+N!~ ~2B!4<2BT>>!}*Mͭz:2!6:<2é>!!dp+q*c2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!pp+q*o/H:=_2=:=!>q:>A/>Z!>/H8:> 2>:>:U=O>m:!} Hmd>9>!A6:2?*UM!E :22!3q:3 " *3M n :4 *3M n :24!:4Q !:424: !4:w>!4n !45 Y :3 { !6!5q¡!Z6[–ͱ!5:S2Y:R2R!S4=:Y[¼ͱ4:[![6:Y.2YO8:[ :Y* ͇gx ".*.DM͆  ͯ *R"R!+4 : !"R͆ !+6:-!+ ? 20*#"!,6:,ր!0Ң *,&ҥ*MͭҞ!6!6> :Bé:B(!Cq:!CwO!~ ~2D*C&~ :Bw>!B:D!4!6>:<2!}!tp+q*s !uq*u& *qM *rM !wp+q*v!!yp+q*x"!{p+q*z$!|6|  ^#VNJڗO *N*~2@*N#"Nm2@m͖ 2@m!6m!6m!6 m2@m- :Y[ ͱ!5!Z6:E%:<2E*F6 *F 6å!Kq!L6> !Ld*L&I :K]>!L4A>:[<2[O*F :Yw:Y?†!ҏà:ڠ*YMEÏ:nҭ<<:2dͿ!o6#6>!p*p& ~:p!o6!p4 :2:2ͳ:_³ͯ !6!"R!"P7 *M^n/ :/:H!_6:_ͯ !69>!M6.f!f6ͼ2e>2eʻ.ê:`>>"hͼ2g:e!`!e5ͼ2dͭ!f\og_{ozg^#V))) _{ozg^#V) *^#V|g}o 4O{ozgi`N#Fog H Z=Y!6!Mq!Y6?!M:[ҠgÐ!Nq*N&*F~!6:q2r2Y:Y :Y]Hں:YA2OO>:Y 2Yͯ :o7B1O B%*P"R+*"R <:h*oM2PO!q6!s67 *M^͆ \͔!r6:_!q2*"N>!"ͯ >!1ͯ !mq:mF:2K!6*R}b!4EK *M^́:_ƒ.:`>>!bp+q:`-!`6*aDM9:_=!_6:`{ 2cX!_6E*M& :cw:M<2MOw*:c>>÷:YS:YQHI:<2P2Y:Y H@"2YÍ2Y02PO> c!P6Í2Y02JO> ڍ*P&*J:rHҗ!r4ͧu/ :_´:s°9ͯ .:r<2q:__!  !6:/! :s<2sͯ U:_::9OY#9.3ͳ.:2 ͳ 62j0O> ړ:j0:jAO>ҥ::jA ~~Hͭ!fwͼO`i*ͼ\2kO>3:k! !l6:M& !Psc*O& :Pw:O·>!Pұͯ :P2r2Y:Y_!Y6=!T6>'!TE!T4!Zp+q*Y !^C9ͮZ.!t6> !tM*t& ~2u F:t ?.*uM!t4>!Ea:E=2g:2:r]>!E҅:E=2!0>+!s!x"@O-!"8**"xO4x " 4"":U!2n~: !l:l=O! NE!l4 E E:k0.*M& 6$9k9.Yͯ *M^2Ur+s+p+q*]~$7*]>*[>H&>*[#"[*]#"]> 2Y:SNPJ/:Y!`6!M6>2f:ʚ!M6:f”HË:2!q:rʗ!:¤]:Y ʳ]!wp+qNͥ*vDM! ͌ :Z:Y=H]:2_. Z80 MUMPS VERSION 2.706ERRORS DATGLOBALS DATy&ʾ:\¥ͳ:\&ʾ>$!\Î![>w22d0:dʆ2[:c0^::a:j3:3:ey:j ;:m$2@HVdr '6ETcr!"k""i,"l"g":!2"n*>2_:Z*  :[[J5 E͠:[LJZ:Y 2_!d~w:Z~ V:[̑L:\w ͳ͠:Yw |͠:[@BZC":\; >2:[ N:[2D>2Z:[̆D:Zʀ  ͳ">2:[ N>2Z:[F:Z€ :[2D>2Z:[̉G:Ze 2xQ:2m>>:&z>27:k[k!l:k׏[!l:k׏:k2*k"lO "6 *l+"]R:YDT*y~n"n!5::!2!5*lڐ*l:w#6#"l*n*ls#r*l"l*n"n"{"y"*y6*++"""!":YQ !d~w:Zʡ :[@!d~w:Z! :\ ͳ:Y;2͠:[e>! :Y! :Y :[ _   4 ' Ax  \iA *  4  z  :[oH:\• ͳ :[̻H͋!d~w:Z  :Z :[@Z:Y· !d~w:Z :[;!d~w:Z"}~2#~2#"y[k:׏*y:O "y*kO "l6 *k:O "]ͳ*]~ >2d>2d:Z Z!d~w:[̳6:*s#r*g*i^2xQĄ:Yʳ:³2j:j!!"]2222222͉!p"l62Y2Z2[2\22`2a>! :Y>2͠:[>Z:Y !d~w:Zg :YR E:\OͳV:[@3Z:YD !d~w:Z2 G#8 +:[S;Z:Y !d~w:Zj _ F :[*;j :[$;>:Z_ :[;Z:YM :2o!d~w:ZZ :Y Z:Y:ZM V:[̑L:\F ͳ|:[̉AZ:Y. !d~w:Zʀ  :Zʀ :[m@2b2c2d>2e2m>2o22222>222!j~w:dh2d:aU]:b`;Y>2e0![>w2c![>w2`:\ʩ V:[̑L:\¢ ͳ|:[0>Z:YŠ !d~w:Z  2:[R+ +:[-Z:Y !d~w:Z  !$' $(26 %05@E$06BHT!(5BIVc ʒ :[|; :\ 2ͳ:Yʶ :[FA;:[̆;:\ʞ  :[FAͳ:[5< :[;!d~w:\ͳ:Y;":[̹I:\OͳV:\ :[!::[2DÀ ͳ:[/ 4:\ͳ+:[V:4:Y4V:[t:Z:Y!d~w:Zv:Zo:[|)v:[\JZ:YW:\ʍ2Yͳ+:[̡)>2Y^:\ʰ2Yͳ:[H>2Y^:\ͳ>2Z"2Z:\ͳ>2Z>2Y^>%>&>'>(>)>*>+>,>->.>/>0>1>2>3>4>5^>2Z:\ͳ>>2Y^:Z:[J:[x,ͻ:Y6:[.ͪ:[.V:Y6:[q':[/>2:[̹72>:Zʷʘ:[,I:\­ͳ:[bL÷͉:[JIZ:Y˜!d~w:Z:[*:[(Z:Y!d~w:\ͳ:[̇L%#:Y%2Y:Y; :Y1>2Y^:[j'́:\tͳV:\ͳ:[ &>2Y :Yg!d~w:Zʣ:[̏MZ:Y™!d~w:Z:[̌M!d~w:Z:[,LZ:Y!d~:Z͠$:YT:[ L>2Y^K^:\?:[j'2Yͳ+>2Y^:Zv͠$:Yo7%:YT:[ L>2Y^::[)^:\&&!d~w>2ZTͳ:\<ͳ>2ZTͮ:YO:ZT>2Z>2Y^:\€ͳͮ:Y{:ZZ2Y2:[̹72ͪ:Y6:[̞1+:[;::[̓$>:\ͳ:[:Z:[)V͐$V:[J:\:Z :[;!d~w^:[@:Z?:[̮?>2Y^>2:[j':\e͎%~ͳ͎%:\eͳ> :Yg2ͽ:Yg:Y®:[̞Cg=:Y%:["Eg^:Y:[̫*=:Y;:[ @>2Y^:Zʷw:ʩ:[B7!d~w:¤:ZP:\Iͳ":[oI:[̷LZ:Y1!d~w:¤:Zʅ:[\ʔV:[Jͳ÷V:[J:Yš:Z:Yš:Z:[DK÷>2Y^>2Z:\>2Z:\2Y>2Y:YZ^:\ʥ&6!d~wèͳ>2Y^:\ʾ2YͳA:Z:\ʾ>2Y^:\%ͳA>2Z:[̌Kͳ͘$2[(:Y%:[D":[@^+:[̲MV:\^6gͳVg͂+~2+~2/O ^2Y>2^">2Z:\¼ͳ:\ʬ&´>2Zü">2Z>2Yɯ>>>>>>>>> > > > 2͠$:Yy2Y>2!"ͽ:Y<*R;>2^:Zʷ:\X2Yͳ>2:\ny͠$:Y;:[MTIZ:Y{!d~w:¤:Zʺ:[hI:\ͳ:[AL":[oIZ:Y!d~w:Z:[ͳ^V:[~*>2Y^V:[̟*>2Y^V:[p*>2Y^V>2Z:[>*>2Y^Aͣ:Yʴ:\ʇ!>wͳç:Z:\>2Y^H:Y4}:YB2YH:Y4}>2Y^:\ `ͳ:[.)w:\ m2Yͳ:[V)>2Y^"W[W!:׏:O ^w#6#^:\6ͳ^^:\2Yͳ+>2Y:\ͳ>2Y^2Y:` :\> >>>>>>:[FA>>>>>>>>>>>>> >!>">#>$:\¬ͳ:["JV:[F(:\ʈͳ:[eK2>2Y^:\2YͳU>2Yͻ:[̲*:[j'+:[3:\r1":[j'|:['MZ:Y!d~w:ZcD:[̃In:\Yͳ:[HLc͉:[̜IZ:YD!d~w:¤>2Yͳ:Yʴ:\ͳ!~w:[{E\A:[/\^:[~*":Z:Y1:Y:[ L>2Y^0 (@Y>2Y^2Y:\ T>!\T:[L>!\<͟*?~*:\22\w#>2Yͳ^*]"n:\lͳ^:\|>2Á>2+~2+~20£!!5:ˆ!î!:w#÷!:[·!+:ʟ#:#*]~EŸ#ͳ!5:ʟ#:\!!>2!5:ʟ#ͳ>^:[“+~2:\ڽ>!\ڽ:[³:\w#!4ͳÓ:[:w#^>2>2Z:\&(>2:[ :*:w#^2+~2+&+~20&>2"p*p:/O "p+"r~2':w#6#͟*++~2*p~-ƒ&>2!5*p#:\>$!\:[V*]~w#!4V:[:!:͟*:w#6#2^2Y2:\>2À*]~U 2Y:}$:\}$>2Y:W$:4$*]~0H$>2:[D$*]~w#!4!5ͳ:\$:[}$:o$60#!4:w#6#>2*n+"]ͳ0:[¢A!w++~26,#!w++~2:!2!4:w#6#:m2Õ:n2Õ:[¢̓^*[2#:Y#:[#2:YJ>c!J:G":ʟ#G"*~0ʟ#:"*"#":!2:!"!—":ʗ"*~ >2\>2Z~*+~2+~22"l2:t *l+"l!5*l~ @~@~ j ~". >!22. :@. !4!4:"p*r+"r22Z*r~2&­&:2&:&>2:w#6#>*:Z2Z2!5*r+"r:‘&#"r:'*p~0':!~wz*]~L!~wz*]~A1!~wz*]~ND!~wz*]~PW!~wz*]~Cj!~ wz*]~E1!~@wͳ:\2ʏ$>2[![>w:w^:\ʻ$ʻ$ʻ$>2Y>2Y2":[$:$*]~w#!4ͳ:\$>!\$$:[R"9:o2Õ*Ç*Ç:[¢:r:]"W[W!׏:O ^:w#6#!"!":[¢0—"#"!5!5!5t"**::!2:"60#!5î"2ß#:!2[*:׏*:O "6.ß#:ʟ#:!h6#:w#*]͊*l+"]ͳ:ʼ :\ڼ ʼ @:`w#:2`>!2Z^2>2222: :2>2"'*r6-#"r*r*p:P'*r^>2:ZG':>'6-#61#P'60#[':['!4:w#6#6#^!|:Y>2Y:[€!|"W*W^"2^:@!>wX::!>w!~w:6U#!4:%:w#6#^>2Z:[6%:\6%>2Z*]+"]ͳ^:\G%2Y>2Y2:[l%:l%*]~w#!4ͳ:\P%:[%:!p͡:[¢!w:[¢:ӎ^2Y:\>!\:[>!\͟*~*:\w#>2Yͳ^:_|:[>26C#*"+":2: #6#**:ߏ""6.:!2Ñ#*#"*:*"!2:!2*O ":*6#:Y"!:[!++~2>2":\·!ͳ!5:ʟ#:[g!:a!*~0a!+2*+"6.##:Yʮ!>2:[·!+(~*++~2!~'!:͟O''!F:2:Y%"n*n:/O "n:O "p*n:!2*n : :6L#!4:"6A#!4:46N#!4:F6P#!4: X6C#!4:@j6E#!4!:͟~w*w#>w#^:[ &>2+~2U"r"[r*R+"~2#"l:%*"!4:%*l#~w+"lKr**l"l"#6#^2Y:\>2Y2:V:[V!|"W*W^"^ͳ:\€ͳ:\¨:[V6"#!4V.#"0: 2:!2ˆ!:[#:ʱ#!4:!2#60#>2:w#6#:2Y:Jß#^:#>22>1 w#6#!|͟*!~^:2:Y%>2t2!Å'^OU"pU"r*p"r~2+~2+~2+~2` "p^#V"n!Oڕ.!!O.:2!:2!5:2*l:O "l"W*W*l::w#6#ɯ2.^:Y/>22U""r*r[R""~2#"r~2:b-Zc2:YT-:ZT-*^#V"n: ,>2*n^#V!RT-> 2T-:-*n6#ɯ22^!|+~2~73:2!4:w#:w#^2:ʄ3*R>2*l "l^#V"[*lR"l"+~2ʘ*U"l͡6#^>2Q6#^>2:Y*!|~"+:2:Y"+:"+++~2,+!,+/O :!Œ0*n*pOÏ "p"n|0Ì0!:͟!:͟!):2:Y*p "n*p::w#6#^:A2!+~2ʖ(w#~*++~2tN:Yʷ(!4*r:wþ(*r#"r:(:³*p[nR"l4*p:w#"p*r*nO #"n*n͊$/!|~.͕.:2:Yʨ/:2++~2/O ^"p++~2/O ^"n:/:!/!5*n:O "n:!^#V!RT-> 2T-:?-*l "l>2^#V!RT-> 2T-:O-> 2T->2*^:ӎͫkh2:Yʠ->2*l^#V*l"*Rk62"OU"U"+~23+~2w#:w#2*":3*"*~2*~2#"~2"l2:^!5"l*l:O "l~2:ӎ++~2:/O ^6-#61#6#6#^*"l*l^#V"Rw,*l"l~2>!͡t:.):A2!͡t:.)^:Yʮ1!|!|:Y1!++~2/O ^"p++~2/O ^"n:3!~^:2>2:Y#):ʕȕMX!>w^> 2P> 2P**)^> 2P> 2P**^2*p*nG:"n2/!2/++~2/O ^++~2/O ^2:ӎ^++~2/O ^:ӎ^!>"l[*l"l>2Ym:2:YT-*"r?h:YT-: 2T-^2:Y%:-2R+.:.>2R+4>2!>w*:w*+"":5*"Zc*"r*":22:5:Y5:Z5*^#V"l~2#"l^#V"h,*l~2#"l>!ڦ+6 #ì+6*#6 #> !2*l:"l6 #!5:+2:,2*l^#V">2*l"3͕3!~?2͕?2!O3:2:Y3!5C22:ʂ2*p*n:G:"n23:!2!4!5!|++~2/O ^^!"l͊^!|~)*O))!*F*!͕)|> 2P)![~wwOU"lU"*l~2"p200!~w:22>!?0͟*B0~*++~2*p"n#"p*n++~2/O "n>!ڮ0*n^u:.:.q.:%C^!|!:Y;.!|++~2/O ^"l!:͟!~p.͕p.À.:Y.!ͨa*^#V"p^#V*ns#r*n*s#r*l "l"*n"*l"l*p~wN #"p:4>24:4>24*p~2!4l6#6#t::T,*l~22!446"#*l#"l:"l6"#:w#6#t:.):h,:h,Z*"l[+~*Q,^+~C2*n"l:2*p*n:G:"n22:!2!4!|͕2Î222:!!2"W[W*l׏:O ^:w#^!p"l~ʐ͡:2>2:Y3*:=*ȕMX!>w^͟*++~2/O ^"W*W~0k*>2Zɯ2Z^͟*2Q^”0>12Ù0:„0>02:w#6#6#:$1*n^0*p*n:G:"n2|0Ì0:1*p*n:O:GR|0Ì02 [l*p:׏@5>2:Y@5aa**ns#r*n"":O ":~5>2>!]5:224f*n*s#r*n""!5@5"^:ʔ;̓^U""[*R"~2ʹ;FA;*^*#~2+">2Zc:Y;>2*^#V"n^#V*s#r**ns#r*ʙ96-#61#>2g92g9*^#V "r8ͫkh*nR9>!v9m:Yv9*l~2#"l*"r:25q::*l ^6#:Zw#^S:`,@Y@:cT@"n"poHͻH"l"l*p*n,@J2e>2:al@>2^S*v:"r:2xQ:2m:a˜7*+"]ͳ!>w:\&¸7!d~w^+~2U""r[*rR""~2ʮ2#"r~2:±9Zc*">Ao*"r:2hm:Yʼ=?h:Y>ü=^+~2¸+~2xQ*~^>:m2xQý:2m^:Y2ʐ>:o†>"t!d:¯52*~2##"r*rN #"r!5:™5!5*^*r":„3*^:52:5*^:2:2*l"*Nn""n~2~w:4<*l "l^#V"p2Gb^2:G<|;*"l*l*R<*l"^#V"*l"l~2~<~w "l>2Y9:v9:Yv98^*"l"@36#^!|~%͕%͵^2w#6#6#t:^+~2w#>w#*}͊*]͊:cw#:aw#:`w#:ew#!b4!4:h2c2a2`2e~^qW+X^:c AoHͻH:c$Ar:Yv9:Zʠ9v9:v9*r"l*"rRv9!"p~2#"t*l~2#"l!"*r"r^#V"*r~2#"r*l*r:O:Gw>>2>2*~>:mµ>ӑ:Y>:oy>>*~>*~*w^P*6"t:ӎ*b*t"l>2@32^t:^"t #":6!55[l*R#"*#"rͫk*+"*+"t*"p*"*#">2hp2*["rÁ5++~2>!%:2**ns#rä<*l>w>2:ր2:<*l~2O #"l^#V"pGb*"n*"lM<^+~2U""r[*rR""~2ک:ʿ:+~2/O ^"*+"::w#~*+~2É:U"~2:2*#"::~2P!5:!:͟*)!d~w$A:aA](A:b3A;Y(A"l"l"lEA:j ;>2e>2d:ʈA2*"l*l*RʈA*l>w#"^#V"[*lRډ8÷8*r*t:O:GRڡ8÷8*r"t+"r"p":2*"rRQ8*Rv9*~2#">2>9>8>2*#"*#"*~2:m2?:Y;?:oj?2>22;?*~C?*~*w^P: j?:!4:w#j?C?:w#6#:mʂ?ʨ6*w#"/O ^"W[*W:׏!"2^:eʟ!:m22xQ:2m:Z6t:>!a6*}͊*]͊:`#"r~2:=Zc:Yʼ=:Z¼=*^#V"n""n>Q=~w*^#V*s#rü=*n>ڎ=~w*^#V*s#r*l "l^#V"p*l^:šn[2![~w!d~w>2:o=;![~w:oR;![~w^!|~{;͕{;>2>22*""lWA^+~2ʣA¸!|+~22xQ:A*~A*^#V"l6:2*^#V"*^#V"7*~ʽ6:(B:!5[*:׏:S9:2*+""l6-!4*l#"l~.D9>i2w!5:09*l4*:O "*^:w#6#*^:^P*6!:͟*)*t"l>2@32^+~2?++~2/O ^:@+~?+~2/O ^++~2/Ow#:cw#:aw#:bw#"2`2a2c2b!~w>2e!d~w^+~2b+~2a+~2c+~2`U">!az7U"y>2e:s#r2Gbü=*"p*n#"n^#V*s#r*ns#r2Gb*^:22:=ͅ>2͉t!ͪʼ=ͫk:2"h:Y3 (B:2*^#V"!͕%Bȕ(Bs:!m6B2m:m2xQ^+~2"lʲB>!ڸ++~2"l:w#6#*l+:ʢH++~2/O ^!5ÀH*]+"]ͳ"v*v "^!5!c5 ^U"l"W[l*WR"W*W^:\&HͳH^!͕E:—F2YFU"]U"n!5!*]+"]ͳv\!͕FÉF*r^:F!>w:Y2Y:Yӎ*+"]ͳ^"5:L*6 :*r"lDT*t^^+~2:ʈM++~2ʁM%+~A2:jM:2͉ÁM:!ʁMn:22ͳ~^U"]"n*n+++~2/O "n"*"p*n^ ^">2͞C͟*++~2:2>2u*"l*"@3>2Z^>~*OU"lU"*l~2"p#"nK*l*n"n"l+!4:w#+~26#6#!4:w#^:`‹K:\(@Y:`/O +"l~2>!:¥B2òB*l+"l~A2*l+"l~2xQ:B>2:2:YB͋*6B!*6++++*6:m|2:_&I~!I͕!I&I2o>2o*{""y!p"l6!>w*6^AUT^lV*"y!>w*{"y^qW:Yr*n"*^>2͞C++~2>2"l*~-hG*"n*"p:2:2u*^*l~-ʃG~0ʃG2Z*]͊*"n*"p:2:2!52MÊ^++~2>2!%!"l:N^2:Y%>2!%!:O +"l~ӎ^++~2"l*l/O "l##"n2*{"n!||wqWX2^U"""x[*xR"x"~2#"r~2ͫk2h:Y*l^#V*l"l*x^͡^*]‹K:\(xK^>2Z+~2ʶK@w#~*+~2+~2"l*l/O "l!4!4:h6#:w#*]͊:`w#*l+"]2xQ^͟*!*͢^22ͱ:YʓC2:OC*l~w#!4*l#"l~ -C> !26 #!5:XC6 #6#t:>2!y^*{"l*l~ʛI͓UÌI^AU*n"l͓U*l*rR¨I^!c4!4:h*]"l:\22:\J&JI>!22ͳIDG>2Z^2ZʹY*^>2͞C͟*++~2"l*"n:2*"p:2>2u++~2"t*~-H*l"n:2*"p:2*l:6#w!44:o&"n͊^*"l"!*@3"l:2*l++"l:dN~2/O "l!5@N*l~2:w#^*]͊*r""W*W*W"W*W^*"n++"]~2"p/O "]"r+"]ͳ>2Y2*n*n"n!~E͕EpF!͕ͳ>2`2Z^:`+L:\(@Y:`L^:2>2ȕ*"y^*y*RaL*y"l͓U^**yRʆL*y"nN 4:C.)2C:ʝC.)^U""r^[*rR"~2#"r~2Zc:Y:::D2D2:I*]#"]*]͊*l"]:2\:`w#:w#:w#:w#2`>2^*^2^++~2"l*l/O "l!a4!u*t~-aH,H*"n:2*l"p:2H*"n:2*"p:2>2u*"l*"@3>2Z*^*]͊^U"]+~2"]ͳ:2>2>22Y:ªN*]~0eO:\N>2*r#"r!5!5:ʂOͳ!4:\&O‚O*]~0ʂO:N>i*]2w!5$FO$F*]*pRFÉF!!4*n͊*]͊*n*n"n!~SFZF!~w!:2*nO "nEv\!͕E!"rT^!w^2:Y>!:w#j'^++~2k"r*r/O "r:k2"2"t*~ M~ M#"!4!:2: D*r+"r*r^'D*^*l͡2^*]͊"l*l "l~2:nD*l++"ll!5MD*l "l^#V+"]4:h!46 #:w#!p͡>!aڰJ*}͊*]͊:cw#:`w#:ew#2c2`*l+"]ͳ~6#>2![~w!d~w^4 !4:ʂO:eOͳ:\&O‚ON!5:ʂOͳ:\‚O*]~2:RO>i2w!5:1O:0ʂO:}O>!22*]4>2N "r*"r^*l~2#~2#"l:O "p> 2:!U>2U:!2*~U*^#V*s#r*6: V*l~2P!5> 2:!©S*n*l:OÏ "l"nþS*n:O "n^S2Y*p"n>2Y^+~2SlV*{"n:Y2: TS!p~2#"v5*]"l"p"n*n~Z#"n Z*n"n"W*W*nRʕZ*l#~2#"l^#V"]*l~2`#"l"n[l*nR"n!5*p:/O "p*2:ʜQ*l"l!5ÄQ*l"#"l"#"l""l""l"#"l""l""l""l"^+~2R+~2!p~2#"n"v!p͡*v^:!AX*t*n:OÏ "n"tGX>2Y>2Y^!*[{R"l*{ "n*l*ns#r*l"l!YU+"]ͳ:YʧO:ʧO!4*r+"r^!":OOU"U+"+~2:OU"l͊*l~2!O #":w#^*l#"lU> 2P!5: V*l#"l*l*pREV*l~2P*l#"l$V> 2P> 2P*6*b*^W:Y\W:\qW:Yr:2Y*n"y^*n"yKn*r*"n"r*n"6!~w^:¤*l"r:2ʲT*]"v*l+"]ͳ͠$:YƒT7%:Yp^*lKnz"lõZ+~2`U"]+~2/O ^*]+"]ͳ^2w#*"lR\\*^#V"*l~2"n!4*n͆"*/O "*RU~2#"l""l2*]"*+"]:Rͳ:\kRkRdRR:2!5;R!~w"l:ʃR "r!4"!4"p*lXKr*p*n"n"p[r*lR"l7ÊXKl*p*n"n"p7s^2:Y,Y*n~22#~2#"n"l*l+"l~2:%P*l+"l~2*P>2*l:/O "l"[l*R"*l+"l*͊*l͊^**»P:mP7*^#V:kW:š:2>2"lͅ*l^!pn!4"ͥ!4"l^#V""p[{"2[*RV:̓^>2V*{"n*l"l!~T*l:O "*]*RT*v+"]ͳ5S:Ym*:kO "2[*RT:̓^>2T*"n*"*y+"lKl*:w#>226 #!5:[:25:K[6.#6 #:2!5)[:w#6#t:*n2>2~2#"n>ښ[>ڏ[ÌR:2#!>w:YR++~2:R*l#"n*l:6-!4**l:R*^60#>2:w#6#*+"]ͳ:k"n:!26 #*n#"n!5*n:"n:w#6#^+~2e+~2`+~2a+~2cU"U"ylV!b5!5:eʃYO "l6 êP:2*^#V"*^#V"ͥ*6*^#V*s#r*^#V"l~2P#"l*s#r*4^:mP::mP:Џ*"r*pAWKr*n*l"l"n[r*pR"pͥ!4"l!"rWKp*n*l"l"n*6++~2/O ^^+~2ŒW*n"n"*y:kw#:w#"y[y*r:k׏*y:kO "y!~w^qW:Yr*n"r:ZkUN*r "r:ZŒUqW:Yr*r6-#!4>2*n#"n!5:[*n~.[:[>i2w#[*n~w#!4*n#"n!5Ú[:[+~2!4:w#6=#!22*l"*~ /S#"!4!5:S2Y>2Y^++~2/O ^:ʹS"l*{"n*n~ʹS"p~2#~2#"nʩS څSåY[k*:׏*k:O "l6 *{"y*+"]ͳ2d^U"]"l*l" ~2/O "l" ~2/O "l" "l"^!~Q*^#V*s#r*6*^#V"l:w*4*l#"l*s#r**rQ:2*^#V"*^#V"7*6*^#V*s#r*6!"l:!ÚW:w#!|:ʬW5S:YW*n*RW!͕W*nN "n!|ìW>2Yɯ2Y^"t*t++~2/O "t5 4:w#6#t::V\*n~22!446"#*n#"n:"n6"#:w#6#t:.)Z+~2u\!5U"Z^*n"l"l6*p#"l~ʣb~ʾbc*l">2^#V!Rb>2*p"^#V!Rbc*l:w*^#V"l*r*s#r*p"r*l"p"^#V*s#r*["û_*""**R`*"~2#"^#V"*"`K**""ã`[*"ã`*+":O "l*rO "r^>2!ې:2w#!͸*l "lې!ېql:w#!͸!ͪ|g!ېPg*l"^**R`a*""**R^*"~2#"^#V"*"^**s#r[*"*["Ü^[*R"2>!ڠe:e:2*r"aa*"r*^#V"p^#V*ns#r*n*s#r*n"l*p"p~w*l~2O #"l:f*p:*n*n"n!~\:2µ\*]*pR]ì]:ʢ]*]*pR]*]*n]#"n*]#"]!5õ\!~w:2*]*pRMb*rRYc*r#~2"l*r"6c*l"*^#V"l*p*s#r*r"p*l"rÆb^*##"2Z!"*"l*l^#V"*+"K**""*~*w":`aZa*~2">!Za*N #"*"^ͨO:ڇaza!"* ":w#!͸ͷt*"l w~!2+~2w#!͸*^#V"l^#V"qv!ې>2>2.p>22*h>2R`a*"*"**Rl_*"~2#"^#V"*"^_^#V["*s#r*["_>2*Rʤ_2O #"p^#V*ls#r*l"lf:2*r"*^#V "r>24f*"r*^#V"p*n*s#r*p^#V*ns#r*n"l*p~w]*n~2U]:\ʩ]Í]:L+]:\ʩ]Í]:AC]:\ʩ]ʩ]Í]:NV]:\ʩ]Í]:Pr]:\ڍ]>$!\ڍ]é]:C†]>$!\Rd*l~2~2#"l!c*l*:OÏ ""lc*"l*^#V"uc*":ʨd:d^#V"*l"^#V"l""Ña*"*:O "*rO "r2>2*[R"l[l*Ra:c̓^>2ña*l"n":w2#"l**ls#rj^*l͊*l^#V"[*l"l[*"U"l^*l">2Y^#V"*~2#"[*Rshh:2*"v***R“_>2*"^#V"*"^#V"*"**Rʚ`*"~2#"^#V"Œ`*^#V"R`**"p^#V*ls#r*lN #"l*l:w#"l[l*t׏^2>2ͨO* "*rN* #"*[R"l[l*Rڝf:c̓^ک]Í]:\©]*n#"n!5:\]*]+"]ͳ!|~]͕]*l"n\*l"n!]*n:O "n^+~2e+~2`+Rkd*l"~2"l""l~2!4*l*:OÏ ""lsd*^#V"l*"*"*lRd>2Zd!5:ʨd**l:w#"l*##"[l׏*l:O "l:Fb>!Fb*l"l!"r*p"l:lb~c~wyb*l~c>w*l#r"t*~2!4*t*v:OÏ "v"tíhh:h:h*v*tͽh"t"v!5íh>2Y^>2>2Y:22:iͅ>R`*"^#V*s#r:ڌ`>!_`*N #"^#V"Rʌ`*"^#V*s#rÌ`*"^#V"Rʌ`*>2:[f*^#V "r[f*l"n"*ls#r*l:w2#"l**ls#r*l"ls#r*l"l*r~2!4[l*r:׏*l~2cU">!a^U"ylV+~2/O ^!a5!52d:eQ^:aQ^s^[k*:׏*k:O "l6 *{"y*+"]ͳ>2^#V"l"*""*lRd>2Zd>2Z:d>!d*l"l>2Yɯ2Y^"t*t++~2/O "t:f*l:f:6 2͉t!ې!ͪ@j:@jq*^#V"l^#V"*l"l^#V"*l~2#"l"z["l^#V"nRʣi*l~2*^#V"l^#V!Қo>2!ͪʴo:´oÚo:pq*^#V"l^#V"Rp*l#"lېL!ې!ېm2w#!͸qv*l "lې>2Yvm:Ym*l"l^!ͪʊn!2+~2:Yn*l^#V*l"l[*"K*n*l"l"n^*"*~2!4*:O "7 [*׏*:O "*O "!4!5:t*R"!w#!͸!ͪʤk!ېxk" k^:l:|:|>2*":2!5*"*##"t:22*":2!"l"~2!4*l͡}*l:׏t:.)*"l>2Ym:Yvr!}"t*l"v~2!4*t*v:OÏ "v"t1rq^*^#V#"l:25q:Zj>2Y:Zi*z"l2*l^#V"n*l~2#"l*nRj:25q:Zj>2Y:Zj[n*l+"lq*^#V"lڐ*6*^^":Y9p~>2Bp!ې:\p!ͪ\pͤnBp:p!ېʓ4l*^#V"ll"l!4*l "lې!ͪfn*l"l*l^#V!Rn!ͪʊn!2+~2qv4n:w#!͸!ېq":w^!ېq*^#V"lې*l"l~2^!ͪt!2+~2:t"*l^#V""*l"l"Kz""r:,l*rN #"lz*l":2t*#"^*"2*~[l"!4El:2Zu*~ʊl!ې*ېͮ"n^#V"[*n#"n͢s*ns#r*6*^#V"l**ls#rKj*^#V"l*n*ls#r*l"l:wqL!ېq:2[*l"l!4íi>2>2Y:w#!͸*l "lېi*l"l^*^#V"l^#V"*|g}o"*l#"l2!"n!ې!ې2*ls#r*l"ls#r*l6#"lڐ*l"ls#r͗u!ېq*^#V"lڐ*6!ې:2vn>2Y>2Y:w#!͸^*p[t"n !2+~2qv*[p[t"nn_z͗u>2^:@o"l~2u#"~2*""*lKz"lې*l"l!ͪYu:w#!͸*":xu*"!5`u*"!ې*ڐӁ^2Y*"2*ͪl*"!4:!!§l>2Y^*^#V"l^#V"*l~2#"lې*v~^!ېq*^#V#"rې!ېq*^#V"l^#V*l#"l͗u*r"l!ېwr^!ېq*^#V*n͊*l^#V"*l["l*n"n[*l"l[*n"n!4U"*n*Rj[*nRځj*"n!5^:q:2!ې^͗l:Y.q4l͞*6ZuӁ^*r͊*l͊*l*rŽ"r"l2Z>2Y:Z³q>2Y:ʟq:ʮq*l"*2:2Zu*~!o*ېͮ*6*ڐ!4:!!og^>2!ې!2+~2*l "ͪyogÚo~>2""#""#""^*l"n*l^#V!Ruh[*l"làu*l"[p[t"ls#r*l+"l**nRv*+"~*lw+"ll["l*l^#V"pR^m*l"r[p"l*"t[t*l"lې*l"l!4m*r"l^>2Y!ې!ͪ#"l!ېq!ېwr^*l^#V"Rs*"sås^[*"K*n*l"l"n*"[*k*^!2+~2q*^!ېq:2v"r:w#!͸ͷt!2+~2*r~2#"rh*l "lېql:rŽ"r"l2Z³q!5!5jq:ʳq>2Zóq>2ZU"lU"r^:22:qͅ>2͉tem:Yvr*^#V#"l*l"7 u*p*ns#r*n"n*p"*"K*n*""n*t":Xv*n:w#"n*+"K*n*""nڐ*^#V"l^#V:ʨ|!ې:2!ې>2|>2:!|[*R"|!ې:!2!5[*R"ͷt:}:}:#V"|^#V"*|"|"["|!ې!ېʓ4l!ې:y{!ͪy{*""* "ې*+"~2"l*n>2ҁ:q*^#V#"lې!ېq*^#V"l^#V*l"l͗u*^:kͷxÁksÁ:~/wÁv*l "lڐ!ې>2:w#!͸ wBp^!ېq:2v~!ېq*^#V"n"^#V"*n#["p*l"l*"t[*l"lې*l"l*"[p*t"tK*l*v""l*"p*s#r*^#V"[t*R"[p[t"*ls#rKj*^#V"l*n*ls#r*l"l:w*6^:2*^#V"l^#V"*l#"l: wh[*l"2!ې>2!ېq*^#V"n**ns#r*n#"nڐ*n"n*l*zR`}*n"z*l*|Rʆ}*l~*nw*l#"l*n#K**l""*:w#"ڐ* "* "* "!ͪy{:y{!2+~2!ͪz>2z!s!ېq*^#V"l>2:ҁ*l^#V!ҁ>2*^:w#!͸"j*~2*"2*~!*::!n!ېq*^#V"l^#V"*l#"lh*["pڭy[*R"ҭy*l"^#V"s*ns#r*"l*n*s#rKj*^#V"*n*s#r*":w*p"l*6U"tU"p^>2*^#V"l^#V"!ې2!2+~2"l!5v*"p*"t*"*":2:2^!ېq:2v~!ېq*^#V"lې!ېq2v͗u"nM}*ns#r*~s#r!ېKj*6*^#V"l*n*ls#r*l"l:w!ېq*6*^#V"l**ls#rKj*^#Vېq*p͊*t͊lU"tU"p:*"l*p[t"[*"2h!"2*l*zR{>2*":|[*l"w*5!4*":!!*l"~2o&#"^ބ:\(*]ͳ:\( 2~Z#>2J::( A#͊*͊~U"U"n*^#V"^#V"*y**s#r:w#!͸*l"ͷt*"l!2+~2~*^#V"lڐ!!ې:2qv*l^#V!R5>2!5!5v*l" "p:w#!͸ͷt!2+~2*"l^#V*l"l[*l*^!ېq*^#V"l^#V"lh[*R"4x*l":w#!͸ͷt!2+~2!ېq*^#V"p^#V"l*n*ls#r*l"l:w:ʮ~!ېq*z"l͗u:ʢ~*"n*"l[R""pKn*l*p"n"l:ʅ~[*l[*"*R"!5:=|*l*zR=|>2*"D|2h*[R"n[Rd|>!{*l"~[*R":!2    y(7 G #A߾ #: ͳog2_G G߾ Bmې>2:w#!͸ wBp^:22!44*:׏2!":o&"[*""2^>2!ې*l"z:2*^"l"n"l2:¤*nېò*pې>2!ېq*^#V"l^#V""n[" w[p*[t"2>2[["p4x!ېq*"l~ wjw!ېql:w#!͸*l"ͷt!2+~2*"l~!ېq2R"[*R"*R"*n^>2 w2!ې!ې^*p͊*t͊*^#V"v^#V"*v#["v*l"^#V"p[8 AO:_SET4 IF' ELSE FOR DO_ GOTO WRITE READ KILLx LOCK USEz XECUTEGCLOSE OPENA QUIT HHANG7A~'w0+ůG ꙉxG/_yOx(G0 GB#Ag#!x//Ӗ̈́x8G !Ӗ/_x 0G>0<͆!!|͕ !|͕ J%{'_z'Wy'O*i+R ! r ^!;!Br"!~ ʷ#Ú:2ú2:ͅ*х*i2xQ: 2-B\.E\0Gd(P~'w0 +~'w ~w#8(w#/G+:O("x H~  (~  (+M+x0Gy0/_{ BREAKPRINT*HALT VIEW ASCIICHARDATAEXTRACTFIND4JUSTIFYALENGTH\NEXTiORDERPIECERANDOMSELEC!_G<8ٯ~&OG͎(͟(+wʊ~GO&͟(͎(b+w>:ç !Ӗ͹!Ӗͣ2j !Ӗ͕(:!͕(2; !Ӗ͕ -!͕(#(: :(:( : >0 : b.͗(!H~w]* ͵w+q+wO'F#O\>(0<<͵Wy0zzp#6#7I\%4K8Lk0L]:Sh1I  ? R e  ! H _ \x sy( # \::O*(#{_y >0Y:(>-:( x >0*x(&{ ~0(~0#y( >.A:(:G(y TTEXTVIEW2 HOROLOGIOJOBSTORAGETEST XY# SAVELOADcPRINT*DELETEREMOVEvMOVEGOINSERTO++o'ن'w>0>o'OWy'w>+"͕!̈́!xA*R8Ԋ!R(%0#!!*>1>> ͒͆>-> # >x=>.y2 +H.(g (.(g+ ňgx(w+ +ɱw#ɷp#=O(x8 # x/<<#>2YÖR8& ~=>^(>ddG#~OO~!Y62~nӖ͚2:2:O*p͚2:2O:G 0 K(:2x(D8HG!>!0+Ӗ̈́:2/8 : ]Ñ!>.>0z>w#> > >> >*Bygzczg{c{mp#6#Oy0~O/_PTIONCALLARG ERROR/NAMEy ARG8DATEE *]#"]n&~2\>2Y.͗.͗2>2Y.͗.͗ʩ :2>R(0F!bAo+#ů # 2! x͹! )/ 0 ͕(Oůw# {~'w+ #A~0_(===w#'+ 3#A'+#AO7'w0+y( >2~~ #xG~> <͆# ¬}o|N#y# Ə_ɷOɷOxɷRi`BMy2!:!Ӗ : ])ÑR8:2: WFÑ (+ '!:2 x2!Ӗ!Ñ !Ӗ͚2:2G/0W:8x 8> O͒͆!Ӗ;̈́!ḮӖ x!C̈́!ܖ̈́!;̈́Ӗ!2*g:eM:82!D "lO2kn!ú*k~ J#;"p!6/4 `:#w!Ú_!^#V~ #ÃxG~ :(!:8O>O :G8 ~x yz( x=#őG8I(Gyz( (># 9 D~#+~2+N+Fy_>_>0+<͆ BɷO+f+n+~w#~w+++~w#NyHM#6M#6P'U7‚*N#F w*6"2q*ڐ*6^>2Y:<:Oޔ>2Y!_#"l^* 0j (fʩ   y()+ N 6!lN H yN) HN:2N_x(>\0t4OA^#Vu#t#r~(O#ǐw#6#  !r~(<‹(O#Egc:2Y ^*:  s>W#Nބ:( .͗2. O͗O:(. ͗*))"g!i6.\.:<2F>}z OFERR: ????????MMPO + ^(#>2Y~=0>O!? ^#V`SE~0 G_~G8_~8_>2Y~/O {B R E A K --- ROUTINES ON GLOBALS ON ^*:2: !F‹>“!f4!e^G*^#VU^G*^#VZ!F":2!>2:2"2q*^#V: DIR DIR++~O/_͚(++~/O O͚:G( y:( ! 2m(:("!R6!P*^#V"++Ny/_* > =M=~.d# tPt# H P:H 6d~## y!5~ʁ2#ۓ0())) "27  >/w*6* |o&"2q|g}_|g}ot!|͕ ! !|͕  :!(2o> :( ! !l 222y2k y(x >\ +~ > 10/26/1981 11:25AMl: 0`d; < = > ? @ A B C D E F G H I J K L