ROFF4161C gXROF41161C i7ROFF4161SUBROFF4161DOC 0ROFF4161COMb/********************************************************/ /* */ /* ROFF4, Version 1.61 */ /* */ /*(C) 1983,4 by Ernest E. Bergmann */ /* Physics, Building #16 */ /* Lehigh Univerisity */ /* Bethlehem, Pa. 18015 */ /* */ /* Permission is hereby granted for all commercial and */ /* non-commercial reproduction and distribution of this */ /* material provided this notice is included. */ /* */ /********************************************************/ #include "roff4.h" /*****************MAIN************MAIN*********/ main(argc, argv) int argc; char **argv; {char option,*macq(),*pc; char filename[20]; struct divfd *pd; dioinit (&argc, argv); /* directed I/O */ fprintf(STDERR,"ROFF4, version 1.61, Aug 23, 1984\n"); fprintf(STDERR," (c) 1983,4 by\n"); fprintf(STDERR,"E. E. Bergmann, Physics,Bldg. #16\n"); fprintf(STDERR,"Lehigh University, Bethlehem PA 18015\n"); SUPPRESS= debug = FALSE; if(FALSE) putchar('\n');/*for linkage purposes only!*/ if (argc == 1) { fprintf(STDERR,"USAGE: ROFF4 file1\n more than one file OK\n"); exit(); } argv++; init_defaults(); while ( --argc > 0 ) { strcpy (filename, *argv++); fprintf(STDERR,"Now processing <%s>\n",filename ); if(filename[0]=='-') {option=filename[1]; if(option=='M') showm(); else if(option=='B') debug=TRUE; else if(option=='D') showd(); else if(option=='F') putchar(FORMF); else if(option=='G') gloss(); else if(option=='I') showit(); else if(option=='R') showr(); else if(option=='S') PAGESTOP=TRUE; else if(option=='O') range(&filename[2]); else {KEYBD=option; dolns(); fprintf(STDERR,"End of keyboard input <%c>\n", KEYBD); KEYBD=FALSE; } continue; } if(pd=find2(filename,DLINK)) dclose(pd); if (ERROR == fopen( filename,IOBUF)) {fprintf(STDERR,"can't open <%s>\n",filename ); continue; } else dolns(); if(VLINENO>0||OUTBUF[0]) space(HUGE); fprintf(STDERR,"Done processing <%s>\n", filename ); fclose(IOBUF); } /* end while (--argc > 0 ) */ dsclose(); dioflush(); } /* end main() */ /****************************************/ dolns() /*do processing of lines*/ {char *pc; int typ; int e; BINP=0; while((e=fgets2(LINE,IOBUF))||FPTR) /*until EOF or CPMEOF */ {if(e) {if(LINE[0]==COMMAND) {if(pc=macq(LINE)) pbstr(pc); else comand(LINE); } else text(LINE); } else endso(); } } /************************************************************** initializes the global variables governing the execution of the format commands. **************************************************************/ init_defaults() {initsk(&FILL,FI_DEF); /* yes we want filled lines */ initsk(&LSVAL,LS_DEF); /* line spacing = 1 */ initsk(&INVAL,IN_DEF); /* left margin indent 0 */ initsk(&RMVAL,RM_DEF); /* right margin = page width */ TIVAL = TI_DEF; /* left margin temporary indent 0 */ CEVAL = 0; /* next n lines to be centered - 0 */ PAGESTOP = FALSE; FFEED = FF_INI; FIRSTPAGE=1; LASTPAGE=30000;/*infinite*/ JUSTIFY=JU_INI; initsk(&PLVAL,PL_DEF); initsk(&M1VAL,M1_DEF); initsk(&M2VAL,M2_DEF); initsk(&M3VAL,M3_DEF); initsk(&M4VAL,M4_DEF); initsk(&SCVAL,SC_INI); initsk(&OWVAL,OW_INI); initsk(&TABSIZ,TS_DEF); initsk(&TCVAL,TC_DEF); initsk(&CFVAL,CF_DEF); initsk(&ICVAL,IC_DEF); CURPAG = 0; NEWPAG = 1; FRQ=FRSTRING=WHSTRING=0; FRVAL=1; FVLINENO=FPLINENO = PLINENO = 0;VLINENO = -1; BOTTOM = PLVAL - M3VAL - M4VAL; OUTW=OUTPOS=OUTTOP=OUTBOT=OLDLN=OLDBOT=OUTWRDS = 0; OUTBUF [0] = '\0'; DIR = 0; EH2 = EH3 = EHEAD ; OH2 = OH3 = OHEAD ; *EHEAD = *OHEAD = '\0' ; EF2 = EF3 = EFOOT ; OF2 = OF3 = OFOOT ; *EFOOT = *OFOOT = '\0' ; setmem(CPTR,2*(128-' '),0); setmem(TPTR,2*(128-' '),0); TREND = TRTBL; OUTBUF2[0]=BPOS=0; initxu(); MCNT=1; UF=XF=FALSE; setmem(&DBUF,LSZ,FALSE); DPOS=-1; FPTR=DLINK=RLINK=SLINK=MLINK=0; KPTR=KLINE; *KLINE=0; KEYBD=FALSE; rsvstk(2000); _allocp = NULL; /*needed for alloc() and free()*/ IOBUF = alloc(BUFSIZ); complete(); } /****************************************/ /* July 1: \#\ replaced by current page number. June 8: concatenate lines with trailing '\' June 1, 1983 modified for macro string processing. fgets2: (May 2, 1983 by EEB fix to reset parity) This next function is like "gets", except that a) the line is taken from a buffered input file instead of from the console, and b) the newline is INCLUDED in the string and followed by a null byte. This one is a little tricky due to the CP/M convention of having a carriage-return AND a linefeed character at the end of every text line. In order to make text easier to deal with from C programs, ngetc() automatically strips off the CR from any CR-LF combinations that come in from the file. Any CR characters not immediately followed by LF are left intact. The LF is included as part of the string, and is followed by a null byte. (Note that LF equals "newline".) There is no limit to how long a line can be here; care should be taken to make sure the string pointer passed to fgets points to an area large enough to accept any possible line length (a line must be terminated by a newline (LF, or '\n') character before it is considered complete.) The ngetc() also resets the parity bit. The value NULL (defined to be 0 here) is returned on EOF, whether it be a physical EOF (attempting to read past last sector of the file) OR a logical EOF (encountered a control-Z.) The 1.3 version didn't recognize logical EOFs, because I did't realize how SIMPLE it was to implement a buffered I/O "ungetc" function. */ char *fgets2(s,iobuf) char *s; struct _buf *iobuf; { int count,c,i,*pw,pnum; char *cptr,*pc; char wbuf[LSZ],*fnd; count = MAXLINE; cptr = s; if ( (c=ngetc(iobuf))==CPMEOF || c==EOF) return NULL; do { if(c==ICVAL)/*need macro substitution*/ {for(i=0;ICVAL!=(wbuf[i]=ngetc(iobuf));i++) {if(wbuf[i]=='\n') {if(i) putback('\n'); break; } } if(i) {wbuf[i]='\0'; if((*wbuf==NUMSIGN)&&(i==1)) {if((VLINENO>=PLVAL) ||(VLINENO<0)) pnum=NEWPAG; else pnum=CURPAG; itoc(pnum,wbuf,10); pbstr(wbuf); } else if(pw=find2(wbuf,RLINK)) {itoc(*pw,wbuf,10); pbstr(wbuf); } else if(fnd=find2(wbuf,SLINK)) pbstr(fnd); else{start(); pc=wbuf; pw=TREND; *(pw++)=SLINK; transfer(&pc,&pw,'\0'); fprintf(STDERR,"%cPlease define <%s>:", BELL,wbuf); gets(wbuf); pc=wbuf; transfer(&pc,&pw,'\0'); SLINK=TREND; TREND=pw; complete(); pbstr(wbuf); } continue; } else if(*wbuf!='\n') putback(ICVAL); c=ngetc(iobuf); } if ((*cptr++ = c) == '\n') break; } while (count--&&(c=ngetc(iobuf))!=EOF&&c!=CPMEOF); if(c==CPMEOF)putback(c); /*push back control-Z*/ *cptr = '\0'; return s; } /************************************************************** performs the formatting command returned by comtyp -sets global variables ( indenting, underlining, etc. ) **************************************************************/ comand ( line ) char *line; {int c_type; /* command type */ int arg_val; /* argument value, if any */ char arg_typ; /* relative (+ or -) or absolute */ char wbuf[20]; int i; c_type = comtyp (line); if DEBUG fprintf(STDERR,"COMAND %d,",c_type); if (c_type == UNKNOWN) {fprintf(STDERR, "UNKNOWN COMMAND: <%s>\n", line); return; } arg_val = get_val ( line, &arg_typ ); if DEBUG fprintf(STDERR,"get_val returned arg_val=%d,arg_typ=%c\n", arg_val, arg_typ ); switch (c_type) {case IG : break;/* ignore remark */ case FI : /* filled lines */ brk(); FILL = YES; break; case NF : /* non-filled lines */ brk(); FILL = NO; break; case NJ : /* non-justified lines */ JUSTIFY = NO; break; case JU : /* justified lines */ JUSTIFY = YES; break; case BR : /* just cause a break */ brk(); break; case LS : /* set line spacing value */ setS(&LSVAL, arg_val, arg_typ, LS_DEF, 1, HUGE ); break; case TI : /* set temporary left indent */ brk(); set ( &TIVAL, arg_val, arg_typ, TI_DEF, 0, RMVAL ); break; case IN : /* set left indent */ setS( &INVAL, arg_val, arg_typ, IN_DEF, 0, RMVAL-1 ); TIVAL = INVAL; break; case RM: /* set right margin */ setS( &RMVAL, arg_val, arg_typ, RM_DEF, TIVAL+1, OWVAL ); break; case M1: /* set topmost margin */ setS( &M1VAL, arg_val, arg_typ, M1_DEF,0,HUGE); break; case M2: /* set second top margin */ setS( &M2VAL, arg_val, arg_typ, M2_DEF,0,HUGE); break; case M3: /* set first bottom margin */ setS( &M3VAL, arg_val, arg_typ, M3_DEF,0,HUGE); BOTTOM = PLVAL - M3VAL - M4VAL; break; case M4: /* set bottom-most margin */ setS(&M4VAL, arg_val, arg_typ, M4_DEF,0,HUGE); BOTTOM = PLVAL - M3VAL - M4VAL; break; case CE : /* center next arg_val lines */ brk(); set ( &CEVAL, arg_val, arg_typ,CE_DEF,0, HUGE); break; case HE : /* get header title for pages */ gettl3 ( line, EHEAD, &EH2, &EH3 ); gettl3 ( line, OHEAD, &OH2, &OH3 ); break; case OH : /*get odd header title*/ gettl3 ( line, OHEAD, &OH2, &OH3 ); break; case EH : /*get even header title*/ gettl3 ( line, EHEAD, &EH2, &EH3 ); break; case FO : /* get footer title for pages */ gettl3 ( line, EFOOT, &EF2, &EF3 ); gettl3 ( line, OFOOT, &OF2, &OF3 ); break; case OF : /* get odd page footer title*/ gettl3 ( line, OFOOT, &OF2, &OF3 ); break; case EF : /* get even page footer title*/ gettl3 ( line, EFOOT, &EF2, &EF3 ); break; case SP : /* space down arg_val blank lines */ set (&SPVAL, arg_val, arg_typ, 1, 0, HUGE); space ( SPVAL ); break; case ST : /* stop(pause) at each page?*/ set(&PAGESTOP,arg_val,'0',YES,NO,YES); break; case BP : /* set pageno arg_val - begin page */ brk(); if(((VLINENO<=0)||(VLINENO>=BOTTOM))&& (arg_val==NO_VAL)) break; if ( VLINENO > 0 ) space (HUGE); set(&CURPAG,arg_val,arg_typ,CURPAG+1,0,9999); NEWPAG = CURPAG; break; case NE : /*"need"*/ if (arg_val==NO_VAL) arg_val=2;/*default*/ need(arg_val); break; case PL : /* set page length */ setS(&PLVAL, arg_val, arg_typ, PL_DEF, M1VAL+M2VAL+M3VAL+M4VAL+1,HUGE); BOTTOM = PLVAL - M3VAL - M4VAL; break; case FF : /*formfeed*/ set(&FFEED,arg_val,'0',FF_DEF,NO,YES); break; case SC : /*space character*/ if(arg_typ) arg_val=arg_typ; setS(&SCVAL,arg_val,'0',SC_INI,BLANK,127); break; case OW : /*output device width*/ setS(&OWVAL,arg_val,'0',OW_INI,RMVAL,HUGE); break; case TS : /*tabsize*/ setS(&TABSIZ,arg_val,'0',TS_DEF,1,HUGE); break; case AB : /*abort*/ fprintf(STDERR,"\n***USER ABORT***\n"); exit(); case DB : /*debug*/ set(&debug,arg_val,'0',NO,NO,YES); if DEBUG fprintf(STDERR,"\nDEBUG ON...\n"); else fprintf(STDERR,"\n...END OF DEBUG\n"); break; case TC : /*translate character flag*/ if(arg_typ) arg_val=arg_typ; setS(&TCVAL,arg_val,'0',TC_DEF,BLANK+1,127); break; case CF : /*translate character flag*/ if(arg_typ) arg_val=arg_typ; setS(&CFVAL,arg_val,'0',CF_DEF,BLANK+1,127); break; case IC : /*insert character for macro replace*/ if(arg_typ) arg_val=arg_typ; setS(&ICVAL,arg_val,'0',IC_DEF,BLANK+1,127); break; case TR : /*translation string defined here*/ gettr(); break; case OU : /*output code string*/ ocode(); break; case FR : /*define fractional spacing code*/ getfr(); break; case WH : /*define whole line spacing code*/ getwh(); break; case DS : /*define string*/ insert(); break; case DM : /*define macro*/ minsert(); break; case RG : /*register variable*/ dovar(); break; case DI : /*diversion to file*/ dodiv(); break; case SO : /*source from file*/ source(); break; case PC : /*printer control*/ getpc(); break; case SA : /*"say" to console*/ getwrd(LINE,wbuf); /*skip command*/ skip_blanks(LINE); trunc_bl(LINE); fprintf(STDERR,"<%s>\n",LINE); break; case BJ : /*break with right justification*/ if(FILL)/*not applicable otherwise*/ {spread(OUTBUF, min(RMVAL-TIVAL,MAXLINE-1)-OUTW+1, OUTWRDS); brk(); } break; } } start()/*to insure only one entry into TRTBL at a time*/ {if(TFLAG) {fprintf(STDERR,"ILLEGAL double access of TRTBL\n"); fprintf(STDERR,"Simultaneous creation of two definitions not possible"); exit(); } else TFLAG=TRUE; } complete()/*to insure only one entry into TRTBL at a time*/ {TFLAG=FALSE; } range(s) char *s; {int num; num=0; while(isdigit(*s)) num=num*10+(*(s++)-'0'); if(num) FIRSTPAGE=num; if(*s=='-') {s++; num=0; while(isdigit(*s)) num=num*10+(*(s++)-'0'); if(num) LASTPAGE=num; } else LASTPAGE=FIRSTPAGE; } /********************************************************/ /* */ /* ROFF4, Version 1.61 */ /* */ /*(C) 1983,4 by Ernest E. Bergmann */ /* Physics, Building #16 */ /* Lehigh Univerisity */ /* Bethlehem, Pa. 18015 */ /* */ /* Permission is hereby granted for all commercial and */ /* non-commercial reproduction and distribution of this */ /* material provided this notice is included. */ /* */ /********************************************************/ /*Aug 23, 1984*/ /*revised alloc() to match bug fix in BDS C v1.50a*/ #include "roff4.h" /********************************************************** Removes white-space characters at start of string. ***********************************************************/ skip_blanks ( string ) char *string; /* cursor to original string */ {char *p; /* cursor to 'final' string */ for(p=string;*string==BLANK||*string==TAB||*string==NEWLINE; string++); while(*(p++) = *(string++)); } /*************************************************************/ int comtyp (line) char *line; {char let1, let2; let1 = toupper( line[1] ); let2 = toupper( line[2] ); if ( let1==COMMAND ) return( IG ); if ( let1=='I' && let2=='G') return( IG ); if ( let1=='F' && let2=='I') return( FI ); if ( let1=='F' && let2=='O') return( FO ); if ( let1=='T' && let2=='I') return( TI ); if ( let1=='B' && let2=='P') return( BP ); if ( let1=='B' && let2=='R') return( BR ); if ( let1=='C' && let2=='E') return( CE ); if ( let1=='H' && let2=='E') return( HE ); if ( let1=='I' && let2=='N') return( IN ); if ( let1=='L' && let2=='S') return( LS ); if ( let1=='N' && let2=='F') return( NF ); if ( let1=='P' && let2=='L') return( PL ); if ( let1=='R' && let2=='M') return( RM ); if ( let1=='S' && let2=='P') return( SP ); if ( let1=='S' && let2=='T') return( ST ); if ( let1=='N' && let2=='E') return( NE ); if ( let1=='F' && let2=='F') return( FF ); if ( let1=='S' && let2=='C') return( SC ); if ( let1=='O' && let2=='W') return( OW ); if ( let1=='T' && let2=='S') return( TS ); if ( let1=='O' && let2=='H') return( OH ); if ( let1=='O' && let2=='F') return( OF ); if ( let1=='E' && let2=='H') return( EH ); if ( let1=='E' && let2=='F') return( EF ); if ( let1=='A' && let2=='B') return( AB ); if ( let1=='D' && let2=='B') return( DB ); if ( let1=='T' && let2=='C') return( TC ); if ( let1=='T' && let2=='R') return( TR ); if ( let1=='C' && let2=='F') return( CF ); if ( let1=='I' && let2=='C') return( IC ); if ( let1=='O' && let2=='U') return( OU ); if ( let1=='J' && let2=='U') return( JU ); if ( let1=='N' && let2=='J') return( NJ ); if ( let1=='F' && let2=='R') return( FR ); if ( let1=='W' && let2=='H') return( WH ); if ( let1=='E' && let2=='M') return( EM ); if ( let1=='D' && let2=='M') return( DM ); if ( let1=='D' && let2=='S') return( DS ); if ( let1=='R' && let2=='G') return( RG ); if ( let1=='D' && let2=='I') return( DI ); if ( let1=='E' && let2=='D') return( ED ); if ( let1=='S' && let2=='O') return( SO ); if ( let1=='P' && let2=='C') return( PC ); if ( let1=='S' && let2=='A') return( SA ); if ( let1=='B' && let2=='J') return( BJ ); if ( let1=='M') { if (let2=='1') return( M1 ); if (let2=='2') return( M2 ); if (let2=='3') return( M3 ); if (let2=='4') return( M4 ); } return( UNKNOWN ); /* no match */ } /************************************************************* gets the number ( if any ) associated with any command *************************************************************/ int get_val ( line, typ ) char *line, *typ; {int i; char local[ MAXLINE ]; strcpy (local, line); /* local copy */ /* skip over the command line */ for(i=1; local[i]!=' '&&local[i]!='\t'&&local[i]!='\n' ;i++); skip_blanks (&local[i]); /* find the number */ *typ = local[i]; /* relative or absolute */ if ( *typ=='+' || *typ=='-' ) i++; else if ( !isdigit( *typ ) ) return( NO_VAL ); return ( atoi( &local[i] )); } /************************************************************* sets a global parameter like SPVAL, PAGESTOP, etc. Also checks that the new value is within the range of that parameter. Assigns the default for that parameter if no value is specified. *************************************************************/ set ( param, val, arg_typ, defval, minval, maxval ) int *param, val, defval, minval, maxval; char arg_typ; {if(val==NO_VAL) *param = defval; /* defaulted */ else if(arg_typ == '+') *param += val; /* relative + */ else if(arg_typ == '-') *param -= val; /* relative - */ else *param = val; /* absolute */ *param = min (*param,maxval); *param = max (*param, minval); if DEBUG fprintf(STDERR,"\tSET *param = %d\n", *param); } /************************************************************* end current filled line **************************************************************/ brk() {int l; if DEBUG fprintf(STDERR,"brk: OUTBUF=<%s>\n", OUTBUF); if (OUTPOS) put(OUTBUF); OUTW=OUTPOS=OUTTOP=OUTBOT=OUTWRDS = 0; OUTBUF[0] = '\0'; } /**************************************************/ initxu() /*initialize underline,overstrike variables*/ { XCOL=UCOL=-1; setmem(&XBUF,LSZ,' '); setmem(&UBUF,LSZ,' '); } /****************************************/ need(n) /*test for space before footer*/ int n; /*whole lines*/ {if (( VLINENO>=(BOTTOM-n) ) && (BOTTOM>=VLINENO) ) {space(HUGE); NEWPAG= ++CURPAG; } } /****************************************/ /*from stdlib1.c of BDS C v1.50a, with minor mods*/ free(ap) struct _header *ap; { struct _header *p, *q; p = ap - 1; /* No need for the cast when "ap" is a struct ptr */ for (q = _allocp; !(p > q && p < q -> _ptr); q = q -> _ptr) if (q >= q -> _ptr && (p > q || p < q -> _ptr)) break; if (p + p -> _size == q -> _ptr) { p -> _size += q -> _ptr -> _size; p -> _ptr = q -> _ptr -> _ptr; } else p -> _ptr = q -> _ptr; if (q + q -> _size == p) { q -> _size += p -> _size; q -> _ptr = p -> _ptr; } else q -> _ptr = p; _allocp = q; } /******************************************/ char *alloc(nbytes) unsigned nbytes; { struct _header *p, *q, *cp; int nunits; nunits = 1 + (nbytes + (sizeof (_base) - 1)) / sizeof (_base); if ((q = _allocp) == NULL) { _base._ptr = _allocp = q = &_base; _base._size = 0; } for (p = q -> _ptr; ; q = p, p = p -> _ptr) { if (p -> _size >= nunits) { _allocp = q;/*Aug 23, 1984*/ if (p -> _size == nunits)/*exact fit case fixed*/ _allocp->_ptr = p -> _ptr; else { q = _allocp->_ptr = p + nunits; q->_ptr = p->_ptr; q->_size = p->_size - nunits; p -> _size = nunits; } return p + 1; } if (p == _allocp) { if ((cp = sbrk(nunits * sizeof (_base))) == ERROR) {fprintf(STDERR,"\nCan't Allocate more buffer space."); return NULL; } cp -> _size = nunits; free(cp+1); /* remember: pointer arithmetic! */ p = _allocp; } } } cc ROFF4.C -E7B80 cc ROFF41.C -E7B80 cc ROFF42.C -R10 -E7B80 cc ROFF43.C -E7B80 cc ROFF44.C -E7B80 cc ROFF45.C -E7B80 cc ROFF46.C -E7B80 cc ROFF47.C -E7B80 L2 ROFF4 ROFF41 ROFF42 ROFF43 ROFF44 ROFF45 ROFF46 ROFF47 These are the changes to ROFF4, version 1.60 (as distributed by SIG/M vol 174 and CUG) to produce ROFF4, version 1.61: Aug 13, 1984: edited roff4.sub and replaced cc1 --> cc for version 1.50 of bds c edited roff4.sub and replaced -e7900 --> -e7b00 edited roff4.c to change version, date, sets -->set, initialize SUPPRESS Aug 23, 1984: edited roff41.c to update alloc() as per BDS C v1.50a where there has been a fix of a bug that was present in K&R for this function edited roff4.c to change date. edited roff4.sub and replaced -e7B00 with -e7B80 AUG 25, 1984: FOR PURPOSES OF HAVING UNIQUE FILE NAMES FOR DISTRIBUTION NAMES OF REVISED FILES HAVE BEEN CHANGED (CHANGE THEM BACK TO THEIR ORIGINAL NAMES PRIOR TO USE: ROFF4.COM -> ROFF4161.COM ROFF4.C -> ROFF4161.C ROFF41.C -> ROF41161.C ROFF4.SUB -> ROFF4161.SUB ROFF4161.DOC [IS THIS FILE!] ALL OTHER FILES ARE AVAILABLE AND ARE UNCHANGED FROM SIG/M VOL 174 FOR MORE PRINTED INFORMATION ABOUT ROFF4, SEE MICROSYSTEMS, VOL 5, NUMBER 9, PAGE 10 AND PAGES 48-56 (SEPTEMBER 1984 ISSUE). [AUGUST 25, 1984] * b͸{{{w{ÖüH!K]jU 2͵ ^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2hZZk:h|/g}/o#|/g}/o#:h<2hqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2hZZ͉M|}ȯ|g}o)|/g}/o#z/W{/_!9~#fo! ! ! ! ! ! P!9~#A!9"w**w"j!z*"d!"f!Y"H>2^>2a>2`2c>2s2t>2r>2v!"@!"D!@"B!"F !F#x:~#!|2i~# :" 2i +}|~#:G:ix."2i+w# +6#!6#@A2n2?*j**|+`!#"0!#"2!>ڌo&͖=}  w~2ʸͼ56!+W ?_!~7z?ͧ:>͞@w#5.ww#w#w#w*>?@͌>w#͌5> w#@ͧ͵g 2q&0OxG͵j/ʆSx\͞.7:77!a{  ʨ ʨ0:?ŷO !y$ 7o&))T])))!y 2p_ :pDDDG       L   M  printouexcu!9DM͐! 0! !j! !j!. !j!Q !j!"" ! e/͐+|1 !x !jͱv! ^#Vr+s̓ ! ^#Vr+s!| ! ^#Vr+s~#fo! #j! ! !j! n}-W ! n`is`in}M¨ 4-T `in}Bº !"T `in}D k9T `in}F ! e/T `in}G BT `in}I )T `in}R ͳ8T `in}S !"T `in}O1 ! T `in}2۔ *۔&! !j>2۔@ *! ].! s#rz{ ͐:*ď! kj#|¨ ! ! !j@ ë *|ҿ *O} !?! ! !j*ď͵j@ :.!9ROFF4, version 1.61, Aug 23, 1984 (c) 1983,4 by E. E. Bergmann, Physics,Bldg. #16 Lehigh University, Bethlehem PA 18015 USAGE: ROFF4 file1 more than one file OK Now processing <%s> End of keyboard input <%c> can't open <%s> Done processing <%s> !9DM!"ٔ*ď!@͸! s#rz- *t|z ͐|t *@}.i !@-`is#rz^ ͐j+f !@ͬq !@F?w < !9!!U!!U!!U!<!U!"!"!"!"!"!0u"!"!B!U!!U!!U!!U!! U! !U!<!U!!&U!~!U!^!0U!\!8U!"!"!"h"f"b!"d!"""!"*** "!"M"`"^"\"V"P"N>2O!"K?"@">B"C"A{2B{2?E"F"DH"I"G{2H{2E!!!jʹv!!!*ʹv"!"Ő}2Ə}$!"֓!"ʑ"͒!!!Ӓʹv!"ғ!"""""tܔ"r>2ܔ>2۔!v!"{!`&"ď!9DM`i6#6̓! s#r̓H*! s#r!|͐#|!Í͐*8! w#w*8͐! ̓H*sn͐! n} `͐|]! )n! ^#Vr+s͐|͐! 6! n}#͐+|**Ү*|Ҽ*! s#r*! s#r! ! ͐RM! j+*! ].! s#rz&! ! ͐~#foRM! j+*! ].!  s#rzN̓ j+Z! ! s#r*! s#r! ^#Vr+s*s#r!! ! G! !!!j! v! ! s#r!! ! G*"͐"! j+5! n} *8)̓H*! s#r! ^#Vr+s͐s{ 5i`i^#Vr+szi̓H*! s#rzi͐|͐|͐)͐ 6̓Í!9%cPlease define <%s>:!9DM͐*`is#r*|͐!!j͐#|͐!!j! ͐\"! s#r*|9! n&͐!!j͐>I>t>U>w> a>ʃ>&m>ʏ>%y>ʘ>…>ʡ>‘>ʧ>>>©>> µ>,>>V>>>>ʨ>>>>*>>V> >ʉ>>ʤ>!>ʿ>->>9> > E>(> Q>Y>]>~>i>> u>>>e>>ʊ>™>>¥>>±>>½>!> >k>">ʨ>#>>!>">$>(>(>.>'>4>)>:>*)>@>,5>F>-A>L>/M>R>0Y>X>1e>^>2q>ʑ$!"$!"!"!"$!!!! n&͐!dT$*!!! n&͐!/#*+!!! n&͐!dT*"**#!<! n&͐!dT!!!! n&͐!dT!!!! n&͐!dT!!!! n&͐!dT*** "!!!! n&͐! dT*** "$!!!! n&͐!/#!@!>!?͐hF!C!A!B͐hF!C!A!B͐hF!@!>!?͐hF!F!D!E͐hF!I!G!H͐hF!I!G!H͐hF!F!D!E͐hF!!!! n&͐!/#*?!!!!0͐!/#$*|ڛ**ګ͐|«*|ڿ!?!'!*#! n&͐!/#*"͐|! 6#6͐ͭ$!**** #!B! n&͐!dT*** "!!!!0͐!/#! n}ʢ! n! s#6!! ! !0͐!dT!*!<!0͐!dT!!!!0͐!&dT!!!jͱv!!!!0͐!/#*|[!4!jh!B!j! n}ʃ! n! s#6!!!!~!0͐!dT! n}! n! s#6!!!!^!0͐!0dT! n}! n! s#6!!!!\!0͐!8dT#VY͢ZS[(ͷ+͕3P4s7V! !@H!@ͼ!@cJ!@!T!j*|*M!**j*N#!OJ$!9COMAND %d,UNKNOWN COMMAND: <%s> get_val returned arg_val=%d,arg_typ=%c ***USER ABORT*** DEBUG ON... ...END OF DEBUG <%s> *~|ʃ!!j!!jͱvÉ!"~ILLEGAL double access of TRTBL Simultaneous creation of two definitions not possible!"~!9DM`iw#w͐n&k|3͐ ?! ^#Vr+sn&`is#r͐|C͐"͐n}-­! ^#Vr+s`iw#w͐n&k|ʚ͐ ?! ^#Vr+sn&`is#r_͐|ʪ͐"ó*"!9!9DM͐`is#r͐n} ͐n} ͐n} ! ^#Vr+s`i^#Vr+s! ^#Vr+sns{!!9!9DM! ~#fo#n&=k`is! ~#fo##n&=k! s`in}.n!S"`in}Iˆ! n}Gˆ!S"`in}F¢! n}I¢!S"`in}F¼! n}O¼!S"`in}T! n}I!S"`in}B! n}P!S"`in}B ! n}R !S"`in}C$! n}E$!S"`in}H>! n}E>!S"`in}IX! n}NX!S"`in}Lr! n}Sr!S"`in}NŒ! n}FŒ! S"`in}P¦! n}L¦! S"`in}R! n}M! S"`in}S! n}P! S"`in}S! n}T! S"`in}N! n}E!S"`in}F(! n}F(!S"`in}SB! n}CB!S"`in}O\! n}W\!S"`in}Tv! n}Sv!S"`in}O! n}H!S"`in}Oª! n}Fª!S"`in}E! n}H!S"`in}E! n}F!S"`in}A! n}B!S"`in}D ! n}B !S"`in}T, ! n}C, ! S"`in}TF ! n}RF !!S"`in}C` ! n}F` !"S"`in}Iz ! n}Cz !#S"`in}O” ! n}U” !$S"`in}J® ! n}U® !%S"`in}N ! n}J !&S"`in}F ! n}R !(S"`in}W ! n}H !'S"`in}E!! n}M!!+S"`in}D0!! n}M0!!*S"`in}DJ!! n}SJ!!)S"`in}Rd!! n}Gd!!,S"`in}D~!! n}I~!!-S"`in}E˜!! n}D˜!!.S"`in}S²!! n}O²!!/S"`in}P!! n}C!!0S"`in}S!! n}A!!1S"`in}B"! n}J"!2S"`in}MM"! n}1"!S"! n}2+"!S"! n}3<"!S"! n}4M"!S"!S"!9!h9DM͐! #j`i6#6͐! n} ʹ"͐! n} ʹ"͐! n} ʹ"`i^#Vr+sz"͐! ͼ͐͐! ns͐n}+"͐n}-"`i^#Vr+s#͐n&k|#!&#͐! qk&#!9!9DM͐|U#͐͐ s#rì#! n}+x#͐~#fo͐s#rì#! n}-ž#͐~#fo͐s#rì#͐͐s#r͐͐͐~#fojs#r͐͐ ͐~#fo+ls#r*|$͐~#fo!$!j SET *param = %d !9DM*|;$!O!k$!j*P|K$!O-@!"M"\"V"P"N>2O!9brk: OUTBUF=<%s> !"ϒ"̑! !!ːʹv! !!Αʹv!9DM**͐$**$!?*#""!9DM͐++++`is#r*{! s#r͐͐4%͐͐~#foڂ%͐͐~#foo%͐͐l%͐͐~#foo%Â%͐~#fo! s#r%͐͐##~#fo))͐~#fo%͐##~#fo͐~#fo##~#fos#r͐͐~#fo~#fos#r%͐͐~#fos#r͐͐##~#fo))͐B&͐##~#fo͐##~#fos#r͐͐~#fos#rP&͐͐s#r͐"{!9!9DM͐ ###͉! s#r*{! s#rz©&{! s#r"{"{!"{͐~#fo`is#r͐##~#fo͐h'͐"{͐##~#fo͐&*{͐~#fos#r]'*{͐͐))s#r! s#r͐͐~#fos#r͐##͐##~#fo͐s#r͐##͐s#r͐####'͐*{'͐)) w! s#rz£'!'!j!'͐##͐s#r͐####$*{`is#r͐! s#r͐~#fo`is#r÷&!9 Can't Allocate more buffer space.!9DM*`is#r͐*s#r͐##! s#r! ! ͐!@hF*͐].! s#rzʤ(͐͐!!(!j͐!(!j*"͐"! 9%cWarning: <%s> was defined to be <%s> ...now it is defined to be <%s> !9DM!)!j*`is#r͐|)͐!)!j͐##! s#r͐!)!j! ~#fo͐Rls#r! ^#Vr+s͐n}ʣ)͐!)!jð)!)!j͐~#fo`is#r!)B <%s> <> !9DM*ٔ#"ٔ|*!'*!͏lͱv*ٔړ! nsToo many characters pushed back !9DM*ٔ|g**ٔړn`isà**۔}y**`isÏ*͐ͧl|g}o`is!"ٔړ`ins`in}ʳ*`in*ٔ+"ٔ`in} *͐H*`is`in} *`in&)! *`in&*!9!9DM*rn}P+*۔&!g+!j!ܔv!ܔRl`is#r`i^#Vr+sܔ6 ͐ܔ6ܔ"r*r#"r+n&^+!9%c!9DM͐Rl`is#r͐|ڮ+! ~#fo`i^#Vr+sn&)Á+!9!9DM@! s#r͐n`is`in} ,`in} ,`in} ,͐n`is! ^#Vr+s+`in} ,`in} -,͐n`is! ^#Vr+s,Z`in} I,!$-!jì,*! s#r! ^#Vr+s*s#r*"͐"`in&+h+|¬,*#"+`ins! ^#Vr+sn`isx,*#"+6*ď!@͸|-@! s#r*@}.,!@*|,- -!!! G*+6 ö,*#"+6!9.DM is UNnamed !9DM!-!j*`is#r͐|-͐##! s#r͐͐!-!j! ~#fo͐Rls#r! ^#Vr+s͐!-!j͐~#fo`is#rR-B !9DM>2{! ~#fo͐ ~#fo)"{! 6#6`i6#6͐͐ ~#foҟ2! w#w! ~#fo͐)~#fo! ^#Vr+sn}+|1)ʑ1}ʦ1]ʻ1>1{2*{&|g}o}2{:1*{&|g}o}2{:1*{&|g}o}2{:1*{&|g}o}2{:1! ~#fo͐)~#fo͐n}2!2!jͱv! ~#fo͐)~#fo͐!#j!{!2͈p#|N2!2!2!jͱv!{4͐ ͐s#r! ~#fo͐ ~#fo)w#wÓ2͐+|ʈ2R2! ^#Vr+s`i^#Vr+s1!9Bad redirection/pipe specifierTEMPOUT.$$$TEMPOUT.$$$ Can't create <%s> !9DM*͐ ].`is#r͐|3͐Ì3*`is#r͐*s#r͐##! s#r͐ ! s#r!! ! G*"͐`is#r͐6#6͐##"͐Ì3!9!e9DM! !@H!@ͼ`i!@\"! s#r! !@H! n}#4! n}4!'!*`in&͐!/#G4! 2! s#r!'!!`in&͐͐/#!9!`9DM`i!@H`i!@H+|ʓ4!6`i#j`i!6!j`i;*`i].! s#rz<5͐~#fo|95͐!`&s#rz%5͐~#fo`i͈p#|5`i!6!j"5`i!7!jͱv95`i!*7!jͱv,6*! s#r͐*s#r͐##! s#r! s#r`i! s#r!! ! G*"͐! s#r͐"͐͐s#r͐͐##s#rs#r͐!`&s#rz6͐~#fo`i͈p#|6`i!E7!jͱv,6`i!X7!jͱv*ď!@͸|6*@}.[6!@*|[66!@-! s#rz|6͐j+,6͐~#fo!@p͐^#Vr+s͐##~#fo!@Rls#r,6!9JUNK.$$$DIVERSION has no name, %s assumed <%s> rewritten for .DI <%s> cannot be rewritten Can't get space for <%s> Can't create <%s> Can't allocate buf for %s !h9DM! !@H! !@H+|ʭ7!i8!j`8! ;*! ].`is#rz7͐:*t|7*t#"t+)v*ďs#r 8!z8!jͱv!`&"ď|J8*ď! kj#|48`8! !8!j]8! !8!j .SO can't buffer <%s> !9DM!H9!j*`is#r͐|<9͐##! s#r͐!a9!j͐#͐Rl! s#r͐~#fo!e9!j͐~#fo`is#r8B: %s <%d> !9DM!>:!j*`is#r͐|2:͐##! s#r͐!P:!j͐#͐Rl! s#r͐~#fo͐##~#fo!U:!j͐~#fo|:!o:!j!:!v:!j͐~#fo`is#rÉ9B*+"*|%>**C*A!B$D<>**@*>!?$D**"!"CC!"ʑ"͒!"֓**"!"* |>*|ʭ>**I*G!H$D>**F*D!E$D*"!"*|>! e/>\h!"""`!"^C!9DM$**?*|&?q=*͐"**D?S>!9DM*|j?̓ !!@!j!  ~#fon} ʗ?!  ~#fon} ʗ?!  ~#fon} ¡?̓ _<*|?̓ ͐H̓ -@*+"@!  ~#fon} ?*?@*|?̓ -@@`i̓ H+|@`iA?! 9 TEXT:<%s>!9DM*|K@**N@q=**^*d?! s#r*`*V! s#r*`|ʎ@*V|™@! ^#Vr+s͐͐@! ~#fo*ds#r*#"Ù@!ͭ$͐ 8B*"**"**@S>!9![9DM͐ͼ͐cJ*.!!͐͟P! s#r**! s#r*N͐! s#r͐!͐jA!͐j*N#! s#r*P++On} ¾A! ^#Vr+s*|A*M͐!OJ$*N͐"N͐͂BʹB*.|BʹB*M#"M*R*VB*R"V*X*\/B*X"\!9!9DM*4F͐n`is{nB`in&ͬN! ^#Vr+sHB!ͬN;[!9!9DM*PO! ^#Vr+sns{ʲB*P#"PÊB*P#"P+O6 *PO6!9DM!C-@!C-@*! s*|g}o"`i6#6͐|*C͐! 6 `i^#Vr+sC! n! s! 6<*! s! 6>! 6`i6 #6͐|ҞC͐)*~#fo|ʒC͐! s! s! -@`i^#Vr+sWC! n&"!?!9GLOSSARY:USE !9DM*`is#r*֓"͐"֓*`is#r*ʑ"͐"ʑ*`is#r*͒"͐"͒!9!9DM͐!͐͟P`is#r*T"V*Z"\͐!͐͟P! s#r*T*V҂D*T"V͐!͐͟P! s#r*T*VҲD*T"V*͐͐͐!+l! s#r͐ ! s#r͐ ͐! s#r*! s#r͐͐ PE͙͐͐L! ~#fo͐s#r͐͐ ҁE͐4F! ~#fo͐s#r͐͐ ڸE͙͐͐L! ~#fo͐s#r͐͐ E͐4F! ~#fo͐s#r͐͐  F͙͐͐L! ~#fo͐s#r;[! e/!9!9DM͐|GF͐|fF! ͬN! ^#Vr+sGF!9DM*|ʋF͐!G!j͐n`is`in} F`in} F`in} F͐n`is! ^#Vr+sÔF`in} F`in} F͐n`is! ^#Vr+sF`in} G`in} G! ^#Vr+s͐ ! s#r`in&! ! G͐ ͐s#r`in&! ! G͐͐s#r`in&! ! G*|ʫG͐~#fo͐ ~#fo͐ `in&!G!j!9 GETTL3 sl =<%s> delim=<%c> T1=<%s> T2=<%s> T3=<%s>; !9DM͐~#fon`is`in! n}VH`in} VH`in}VH͐~#fo`ins͐^#Vr+s͐^#Vr+s͐~#fon`isH͐~#fo6͐^#Vr+s`in} ʇH`in}ʇH͐^#Vr+s!9!9DM!**!!͐͟P+l"*T"V*Z"\!9DM͐ ͼ! ! ͐ N͐ `is#r͐ ! s#r͐n! s!".! n} >I! n}eI͐ 6*|_I͐ !IJ!j!@J! n} ʴI! n} ʴI! n}ʴI! ^#Vr+s! ns͐6 `i^#Vr+sn! seI͐6͐+n! s͐#n! s! n}:I;I?I!I.I$J!".$J! n} J! n} J! n} $J!".*|:J͐ !VJj!@J!9 getwrd=<%s> getwrd=<%s>!9DM͐Rl! s#r! ~#fo͐+`is#r͐n} ʳJ͐n} ʳJ͐n} J`i^#Vr+s6ÒJ!9!9DM*|J͐͐͐ !oL!j͐|K͐|KfL*K|͝"K͐+! s#r͐ cJ͐ Rl+`is#r͐͐!j! s#r! ~#fo͐#6͐͐fL! ~#fo͐! ~#fo͐ns! ~#fo͐n} OL*K|K͐+͐#! s#rK͐͐! s#r͐͐! s#r͐+! s#r͐|OL! ~#fo! ^#Vr+s6 ! ^#Vr+sL`i^#Vr+s! ^#Vr+sxK!9spread:line=<%s>, nextra=%d, no_words=%d !9DM`iw#w͐n! s{L! n}#L! n&ͬNL͐ L! ^#Vr+sçL!9!9DM! ! ͐RM! s#r`iw#w͐͐IM͐! n&ͬN`i^#Vr+sM!9!9DM͐Hq`is#r! ~#fo6! w#w! ^#Vr+s͐ ! s#r! ~#fo͐͐0s͐ `is#r͐|M͐͐{M͐|N͐͐N! ^#Vr+s! ~#fo͐6-! w#w͐͐җN! ~#fo͐n! s#6! ~#fo͐! ~#fo͐ns! ~#fo͐͐s! ^#Vr+s! ^#Vr+sN͐RlãN! 9!9DM! n*N! 6 ! n} N! 6*Ő#"Ő+Ə! ns*ŐƏ6!9DM`iw#w! ~#fo͐n}`O! ~#fo͐n! n}TO! ~#fo͐! ns`i^#Vr+s O!9!9DM`iw#w͐ n&/P! s#r͐|O͐͐ O͐͐ ?͐`is#r! ^#Vr+s͐ n&/P! s#rËO͐ n! s! n}P! n} P! n} P! n} P͐&P&P!&P!9!9DM! n&=k! s! n&|fP! n&! n&|{P!! n&|ҘP! ng!!9DM͐! s#r! s#r! s#r! s#r! s#r! s#r! s#r͐n! s`is#r! s#r! n}S! n}#`Q`i^#Vr+s͐|1Q`i^#Vr+s͐|GQ`i^#Vr+s͐|]Q`i^#Vr+súS! n*ʯQ! n*0ʯQ! n&|ңQ͐|ʣQTìQ`i^#Vr+súS! n*0¤S! ^#Vr+sn! s! n*QT! n}hLRHLR+ʃR-ʭRBRbRDRdRuRURXRxR(R[R{R)S]0S}YSÂS͐͐hR͐! s#r͐|}R`i^#Vr+sÀRTáS! ^#Vr+s͐͐ ҪR͐! s#ráS! ^#Vr+s͐͐ R͐! s#ráSáS͐! s#ráS͐! s#ráS͐! s#ráS͐͐#S͐! s#r͐`is#ráS͐͐LS͐! s#r͐`is#ráS͐͐uS͐! s#r͐`is#ráS! n&)j~#fo|ʞSáSTúS͐#n&+h+|ʺST! ^#Vr+sn! sP͐|ST͐|S͐ "R͐ "XT͐ "T͐ "Z͐͐T͐:T͐!CT!j͐Rl:T!9STRLN3:<%s> is illegally formed !9DM͐|T`iw#w͐|T! ~#fo͐)! ~#fo͐#)~#fos#r`i^#Vr+sT! ~#fo͐ s#rzU`i6#6͐|#U! ~#fo͐)! ~#fo͐+)~#fos#r`i^#Vr+sT! n}+FU͐~#fo͐s#rzU! n}-lU͐~#fo͐s#rzU͐͐s#r͐͐͐͐~#fo+ljs#r*|U͐~#fo!U!j!9 setS: *param = %d!9DM`i6#6͐|V! ~#fo`i^#Vr+s)͐s#rU!9!g9DM! !@H! !@H+|YV! n`is\VäV*! s#r{W}.‹V`in&)*͐s#räV͐"!@!V!j!9 Error for .TR; error in line: %s!g9DM! !@H! !@H+|W! n`isWPW*! s#r{W}.7W`in&)j͐s#rPW͐"!@!YW!j!9 Error for .PC; error in line: %s!c9DM*!:ҞW!qY!j! !@H+|QX! n&=k>BW>W>OW>X>QW>X>DW>X>HW>X%X`i6#6-X`i6#6-X`i6 #6-X`i6#6-X!&hY*|NX͐! !Y!jYX!&hYZ*#"+! s#r͐! ss! n&|PY! !@H+|ʮX*ď!@͸ÊX*|X! !Y!j! n};X*ď!@͸MY! n}. Y͐! ns! n&hYMY! ͐iO! s#rz@Y*#"+͐s! 4MY! n&hYzX!Y!j!&hY!9 TR table full GETCODE:radix token=<%s>,base=<%d> GETTR: next token is <%s> GETCODE: code sequence too long!f9DM`i!@H*! s#r! s#r{W}.Z͐RZ-Z!@!=Z!j͐"!9 OCODE: error in: %s!9DM! ^#Vr+sn`is#6͐|ʙZ! ^#Vr+sn&e/`i^#Vr+soZ!9!h9DM! !@H! !@H+|Z! qk"dZ3[*d!+l"d!*dj"d*`is#r{W}.[͐"f3[͐"!@!<[!j!9 Error for .FR in: %s !h9DM! !@H*`is#r{W}.…[͐"hÞ[͐"!@![!j!9 Error for .WH in: %s !9DM*ŐƏ6*! s#r*! s#r*d**?**`is#r*`|\`i^#Vr+s! ! !Ə:_͐͐M\͐`is#r*͐"\͐͐ھ\!"ԓ*ԓ#"ԓ!͐h`ba|s\͐͐Ҳ\h! e/*#"`i^#Vr+s]\!͐h`!"Ő}2Ə͐""^͐"`͐"! 9!9DM**`is#r**! s#r͐|N]`i^#Vr+s! ~#fo*ds#r%]͐*dڀ]`i^#Vr+s! ~#fo*ds#rN]͐| ^**!^!jþ]͐*d?͐_ ^*͐"*͐"*|]*#"**d"]**d^*+"**d"]^*b|{^! ^#Vr+szK^! e/*#"(^͐|x^h`i^#Vr+szx^! e/*#"W^^`i^#Vr+szʜ^! e/*#"{^͐|^h! ^#Vr+sz^! e/*#"è^**d^*#"**d"^!9padv():VL=%d,PL=%d !9DM!&_!j Can't back up yet !9DM͐ ͐ `is#rs#rs#r͐n! s! n}_`! n*0I`! ^#Vr+sn! s{F`! n}+ʮ_-_0``i^#Vr+s͐͐ ~#fo_͐ ͐s#r! ^#Vr+sn! sF``i^#Vr+s͐͐ ~#fo`͐ ͐s#r! ^#Vr+sn! sF`! ^#Vr+sn! sF`\`! ^#Vr+sn! sg_!9!9DM!Ə͐a"ؓ!"ђ*ؓ|Ҝ`͐|`͐͐b! e/!"ђ! s#rÇ`*̑|a`iw#w͐*̑`͐ːn&e/`i^#Vr+s`! e/*ϒ|Fa`iw#w͐*ϒ>a͐Αn&e/`i^#Vr+sa! e/*ϒ|Va*̑|Ya}$!9!9DM*ғ#||a!aa`iw#w͐*ғa͐Ӓn}ʾa͐Ə͐Ӓns͐Ӓ6`i^#Vr+sÂa!"ғ!a!9!9DM! s! s#6͐ n`is`in}b`in*0“b! ^#Vr+sn`is{ʐb`in}+>b-]b|b! ^#Vr+s! ^#Vr+sn`isÐb! ^#Vr+s! ^#Vr+sn`isÐb! ^#Vr+sn`isÐbb`in&|b͐͐b`in*b! 4! ^#Vr+sn`isa! n&b!9!9DM*ʑ! s#r*͒! s#r*֓! s#r!"ɐ"ǐ"Ő! s#r! s#r! s#r! s#r*ŐƏn`is{g`in&+h>fc>ʱc>rc>ʻd>~c>d>Šc>e>–c>tg>¢c>ʀg>®c>gg*ɐ*ǐc͐͐c*ǐ#"ǐ*Ő#"Őgød*ǐ*ɐd! e/*ɐ#"ɐc`in*d! e/(d`in&e/*ɐ#"ɐ*֓*ԓdd*ŐӒ*ŐƏns*Ő*ғdd*Ő"ғ*Ő#"Ő+Ə6 *͒|ʎd*ђ|ʎd*ǐ"ϒΑ6_*ʑ|ʪd*ђ|ʪd*ǐ"̑ː6-*ؓ+"ؓ*ǐ#"ǐg*ǐ#"ǐ*Ő#"Őg*Ő#"ŐƏn`is*ɐ*ǐe͐͐e`in} e*ǐ#"ǐ*Ő#"Őge*ǐ*ɐ7e! e/*ɐ#"ɐe`in&i*ɐ#"ɐ*֓*ԓҒe*ŐӒ*ŐƏns*Ő+Ӓ*Ő+Əns*Ő*ғҒe*Ő"ғ*Ő#"Ő+Ə6 *͒|ʼe*ђ|ʼe*ǐ"ϒΑ6_*ʑ|e*ђ|e*ǐ"̑ː6-*ؓ+"ؓ*ǐ#"ǐg*Ő#"ŐƏn`is`in&)j~#fo|f`in&͎ijg`in}h~fH~f+ʐf-ʞfUʬfuʵfXʾfxfBfbfDfdg(g)-g[7g]Eg{Og}]ggg*ǐ|ʍf*ǐ+"ǐjg! ^#Vr+sjg! ^#Vr+sjg!"͒jg!"͒jg!"ʑjg!"ʑjg*֓?"֓jg*֓"֓|f!"֓jg*֓)"֓jg*֓"֓|g!"֓jg*ǐ! s#rjg͐ "ǐjg*ǐ! s#rjg͐ "ǐjg*ǐ! s#rjg͐ "ǐjgjg*Ő#"Őg*ŐƏ6g! w#w*ǐ|ڶg*ǐ*&"ǐ! ~#fo*&s#rÈg͐"ǐ*Ő#"Őg`in&!h!j*Ő#"Őg?c͐|h͐"ʑ͐"͒͐"֓!9 weird character value: %o !9DM! n*Jh!! n*0ah!! n&|vh!! n} †h!! n} –h!! n} ¦h!! n} ¶h!! n}h!!*b|h*f|h*d+|h*fRZ!"b*b|i*h|i*hRZ!"b!9DM! n&|Fi*e/! n&e/Åi! n&)*~#fo`is#r͐|ui͐RZÅi*e/!?e/!9!9DM! n&|ҽi*0e/! n&e/i! n&)j~#fo`is#r͐|i͐RZi*0e/!?e/!9!9DM͐!kq! ͪq!9DM͐`is#r! ^#Vr+s! ^#Vr+sns{[j5j͐bj!9!9DM͐!͐ws#rzҕj!͐##w#w͐6͐~#fo!9DM͐j!͐*o͐~#foFx!9DM͐͐k͐ k͐!9DM! n&|ͯ9k! n&|ͩ!9DM! n&̓u|dk! n&kk! n&&!9DM`iw#w! 6#6͐ n! s{ ʤk! n} ²k! ^#Vr+sÈk! n}-k! 6#6! ^#Vr+s! ^#Vr+sn! sk|l͐ ?! nѯg`is#rk͐͐?"l!9!9DM͐͐Jl͐Nl͐!9DM`iw#w! ^#Vr+sn}l`i^#Vr+s`l͐Æl!9!9DM!e/! ͪq!9DM͐|¾lIxjm͐+++|l!wjm͐##^#Vr+s|Sm!͐͐~#fo~x`is#r!|&m͐##^#Vr+sjm͐##͐?+s#r͐͐s#r͐^#Vr+sn&jm!9!9DM`iw#w! ~#fo͐n! ~#fo͐n}m! ~#fo`i^#Vr+sn}m!mÁm! ~#fo͐n! ~#fo͐nѯgWm!9!9DM͐ګn͐>%n>Ln>1n>Zn>=n>mn>In>ʀnën! n&e/! n&!w! n&!w! n} ˜n! !w! n&!w͐##^#Vr+s| o!͐͐~#fo'y|n!͐##6#6͐͐s#r͐^#Vr+s! ns&!9DM͐Co!p͐n&|g}o|bo!p͐##~#fo|{o!p͐##~#fo`is#r͐͐͐~#fo'y͐o!p͐+?`is#r͐##~#fo|Xp!͐͐͐y͐##~#fo͐s#r͐~#fo͐s#r!!͐~#fo,zp͐##6#6͐͐s#r!p!9!9DM͐͐wzs#rzҭp!͐͐s#r͐##6#6͐6͐~#fo!9DM! ^#Vr+sn`is{9q`in} q͐! n͐`in&n#|6q!?qp!?q!9!9DM͐|cq͐gq͐!9DM͐|Žq͐! kq͐͐n#|¨q!!Y9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{zu`in}%Ku! ! s#r! 6#6! s! s! s͐n}-:r! ^#Vr+s! 4͐n}0Jr! 4͐n&k}gr! Tvjr!! s#r! ^#Vr+sn`is{.²r! Tv! s#r! 4! ^#Vr+sn`is`in&=k}DrUsX#sO,sCrsSʣsu͐~#fo|s! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 2s! 62s! 6! ~#fo! n&! ^#Vr+s~#fo! Ͳuѯgs#rt! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+st! n}¶s! 6#6! ^#Vr+s~#fo! s#r͐n}t͐|t! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+ss͐6! ! s#r! n}‰t! ^#Vr+s!|ډt͐͐! n}ft!0it! !wt!9~#fo#|†t!zu7t͐n}t͐͐! ^#Vr+sn&!t!9~#fo#|t!zuÉt! n}u! ^#Vr+s!|u͐͐! !u!9~#fo#|u!zutHu͐͐`in&!9u!9~#fo#|Hu!zuwu͐͐`in&!hu!9~#fo#|wu!zuq!9!9DM! n&|ͯڮu! n&|ͩ!9DM͐͐ v͐^#Vr+s͐u͐0u͐7s!&Kv͐ ͐͐ ͉͐Ͳu`is͐ ͐͐ )͐Ͳu`in&#&Kv!9!9DM`iw#w͐~#fon&k}ʡv͐ ?͐^#Vr+snѯg`is#rbv͐èv!9 7*R*P:TOzvq#v "f !j96  #F#xw~#v *d/w+*f|/g}/o#93w/w#"dz{ !\/:q25!> 2?+7*P!w/:q2*R!w/w5!> 2?+Q:zJEËC–EQyQxQR7:PO*R7,w> 2h*P/:q2> =x:h):R)x=)x=> =x:qw#w#w:ho&552?#:noXx2n& !o {x . &7:P)V>!yz>!yz2:P,"j!"l*T|*l¹x5*R*j!ѷx2?xx!ôx*lôx*T+"T*R"R*l#"l*j! N#Fp+qx©x##6>2?îx2?7:P)"XV>yz> yz2:P,"j!"l*T|ƒy*j!^#V*X#^#V{yr+s*l5*R"R*j"*lʫy2?~y#"l*T+"T*j! N#Fp+qxUy##6>2?{y2?7*T|DM*R*P z><z~+ xz|}7:P,>Bz2?!^#V*R:Tkz=\zkz*PͰz*R!s#r7*P:w:q2\5¢z> 2?!*Pw ,z>2?)~2#"j!!~#fo#^#Vp+q*j~#fozs#r55!> 2?+Q:zJEËC–EQyQxQR7:PO*R7,w> 2h*P/:q2