broehl@watale.UUCP (Bernie Roehl) (09/07/86)
This is a .ARC file which cantains a very good ramdisk. Read the documentation for details. I would like to get in touch with the author if any one knows who he/she is. Or even a similar program. begin 644 ramdisk.arc M&@(Q,C@N0D%4 , 34"P #\,E B=.@L !R86UD:7-K(#$R.!H",S8P M+D)!5 # $U L _#*H(/_P+ <F%M9&ES:R S-C : C8T+D)!5 M P !-0* /PRR">-O"@ ')A;61I<VL@-C0: D]&1BY"050 P !-0+ M /PRT"$/0"P ')A;61I<VL@;V9F&@A204U$25-++D-/30#46 , ! - MT@7M?P $ ,Z2H! " E2!,B(" = I0\$F((BDF;,&!)F)8<2P*4.F@0(2 M#R-.K!B&C9PR8<CD 5$&ST0Z<SR22.+&3LDT9$#,2:.GC$XX9<:D,9.&H\R0 M$BE:+&,GS1B?9.2DL5-&#@@W;^B 2.-F#IV2&SM^',@+0 !=E@+0TM LA*X! M:A^T50"L3I!%^HX5<1 0*Z^M$ZT=60@+;I$ .J\6)",#@83@'SH /"/#@IT M.Q)[0-<-P*)I,H#1BM'6A#$#DP&@>P) %XH ZQKH>@,;@2XKL ?HXJ$V05L/ M,X!!618%%YP!L0A,0Y=EF $H41P<6)0-';M_ [!-"30, ()%RV@I:;LCVY8L M=10L&K8B&*-G _#I (;EP# 3BSS@4$WLWPIL!C@R#"U)I&.$ ,/X$HAJ3/B% M1@!TN$#"%S,DP\,3=2#02@]&&%&'#>MXL(L" ,A #BOHY)"8 I'<,XX<)$0R M #+KP,,8'1L,D@\!<E@02#X@#' '!.A D-@"BP03BP'3@+,(,O,-P]@P3ABA M" $\@$!'/CPT, P+,,AQ \)W#% E$X,,T444EP!F0\W#$0' Y#9 , !)AF M0)R>91-+ =.L8T(B'K@ P* ^[(=.!*H)H=H:AYXVV3]?:)'%%FKN @( N/3U M(P @R,&!/\ ,L,VG4,@A :F? B*' JSF P H<@A J@FCQ' HH2P @"E^'N@: M2P+3C(.?!2D ,(TX TQC0BB]_MGD ,(\&=PB^!A@ F'[S:.*?=J"<B=^/B2[ MK0'[#3O-.:K@\L\_J]C'4 6+V,'/(,8(H(@1]RSB!0*(4&8$/__880 Z3?B# M"+_K=#*('_P 8$<$]?)CA+\( ((#"'44\(\3_*R3#BBP3 --G.(L,C &"-R M1 %&Z#)# !P,=V_C;P,A29PU'R )C8$8/,Q1N@S$-'X#+0R/CL,/(<2@P C M0"+&8*PQQP=$5LL$ - 10[WXX"N U1O7T4"]^H@-RM8!KS,!V&(OXD?:QXS] MKR( ( )ST?\8@<\ZKJRL3\LO[WN/*+-,\'#$=1@1"PLX.$#+!+!4%@ 04$26 M> .5TW&Y%B((D[D/DW-N.>:1)][YYZ%KH0!5<NSTAAL@Q.!"#'="0H !;1UP M;J\$]MX=)&$ &@A204U$25-++D1/0P#4[ ( -4,)V*-]:<$ ,(" 52.)F M#ITP;-B H(.F# @R<M+8*2,'A)0@38A(L>)B2I8I(-*X 9'G39V*0YXX,9+D M2,>/(,RD8>-03!X08<B0$7EF84,0;$26T=% 0=& %X@4L9)D2)$>%S-N?#FE M:%$42<R0- D"39B).+N&D4/F842P(@TBI$F&!8@V8=8XG'/2(<,P=$"D7-F2 M*DXW9:-JY.BQJH*Q-=\P##FRY$D0<MXH?IA&3IDQ=-[(R>,B!0@00=C,>>,6 MKEP0="W[Q.O3(9S(9^2$:6,1(Y$D4Y:X2-FD:)HY..V$F1E&#$W&6Q_#P8O& MA54% 0UD;8TZC\$RM'^#$".93IFR=](L9JA=\$:S$BDBW\O296&W82#/WCEG M3=$W6L.XN3DGC1Z'8^BW'8"6X?7==C?1D0<</#T7$ >"X;8$:L_=T9!JP&G' MD$-DE-&?967U]Q]R:\STADW>S>'"9T9H!D(9>,P&!TUN19@;"#;0 ,(8!:88 M5HX@3"A;&_2ML2((5*"AW9!%OA7&36(X9%D;;TQ4EDT++<A3;1E)",(31ACA M%D-U &>&965L60<<U+6!G68WE?G=D4& X$89=\A'Y&]K@(!?6#N9809%9;B1 MEX@.P95@0R-%N6./<SH(B0%"X#4&&C'-Y.%";SQ:AH%Z%@G<GS/8 (-;,>!P MJI\5Y=BG5V!%62@(KU691H=D.*? %&FT,6.""]KUDQMUM!%E16:\D= ;=QR( M97P!RA%1&&=(608=)[D!'V @V/$&<<F)!=:&177XX8%#4E9?")]-%U^@@UIF M*&K^.;1D&7'44=EW;JE19EX*PF'O2"* :80(VY9%K@+I-AE>0@.J6QQ;= +L M%<"]SM7KKUD*C)Q^BEU([XAGOM%&41ONJ"Q-F*7QQDA_BL&:3#2I*&D!22XY M'Y^TPI:N=G0)')&+F?FYH1S ?34<&Q/7=%D8<H:4%QEO;.J&8D59EN^^D)7! MG6);%EVT96.\+-,9=5''),^(ZJH!&@A204U$4E8N4UE3 #4@P$ ! -T@5= M\P " ,$@! (@"H"8!$ *0$:4($Q,!_ P& X'$00 "!!TP "#@HD4@ @?H M$VC@GT "+HP9V '@GXM$'F8 <,'(0 T RU*NW+BNW3, O8 *Q1$@J%&A1X\. M ^ -P#VA"XHB!4 D0-6D #AY, !E2A0I5JZX*!83@*(C @0 P[0(GPM /EC^ MHW/ Q;]*50"L*V"WTAL 7[QHR;(%RX$/G98%>C+ XC!C1QH$.'9$ @D C)Y0 MP)4K0*(C#C)#6-PXP# 7H&#,A'NC):T = 30^H?HC /2CBE+T)B9@L[6_W"; M?NM#1\LZ'] Q 5"' K$_#CR@NP( '1D 'Q(]D2!\&&D$@;PS%A#^>6ADJ[H3 M-_ZOCCET$YAODQX",S9'P!;Y^^"AV!T'Z_2R2&6+(+/(%10,((P+.QC@ @!W M"* #,,-$$4L!TXCCP@ 6X " (]K,8$\6%2X2#3H* )"+1?.4HD0=]9 8B#\M MR;$ (]@4 ,\#@;C3DB/8!&+2/S8R HR./+[S(X4"'0$: !H:&AH:&AH:&AH: M&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH: )&AH:&AH:&AH: end -- Michael A. Shiels clyde-\ decvax-\\ ihnp4-\\\ +++-----> watmath!watale!broehl tektronix-/// ubc-vision-// utzoo-/
bet@ecsvax.UUCP (Bennett E. Todd III) (09/09/86)
A friend of mine, John White, wrote the following. It is amazingly portable (MS-DOS, rather than PC-DOS, compatible). It works. I use it. I've included thhe (uuencoded) device driver and setram executable for two reasons: 1) small as they are, the convenience of not having to rebuild them might just be worth the cost of the additional text to transfer 2) DeSmet C (and assembler) has changed dramatically since this was written; I don't know for sure that this will recompile correctly with new releases. Note the warning in setram.doc. It basically warns you not to allocate and free chunks of memory in other than "stack order". I have never had a problem of any sort with this program, but it *does* make it possible to allocate and free chunks of memory in an order that DOS probably doesn't expect, and considering how buggy the *fundamentals* of DOS are, any unexercised functionality is highly suspect. If anyone does anything to this code, please let me know (I can forward it to John). Ports to other C/assembler systems are particularly of interest. -Bennett #!/bin/sh # Cut above the preceeding line, or cut here if you must. # This is a shar archive. Extract with sh, not csh. # The rest of this file will extract: # setram.doc makefile.dat makeram.bat ram.a setram.c ram.uue setram.uue sed 's/^X//' > setram.doc << '/*EOF' XFrom: jnw@mcnc XReceived: by mcnc (4.12/4.7) X id AA29677; Sun, 27 Jan 85 21:44:49 est XDate: Sun, 27 Jan 85 21:44:49 est XOriginal-From: John White <jnw@mcnc> XMessage-Id: <8501280244.AA29677@mcnc> XTo: ecsvax!bet XVia: Mcnc; 27 Jan 85 23:00-EDT XStatus: RO X XThis ramdisk starts out with no memory. To allocate memory for it use: X setram drive kbytes Xwhere drive is the drive letter and kbytes is the number of kbytes to alloc. XMemory can only be allocated when there is currently no memory allocated Xto the ramdisk. Xexample, if the ramdisk is drive e and a 68k ramdisk is desired X setram e 68 X XTo deallocate the memory that was allocated for the ramdisk, use: X setram drive Xwhere drive is the drive letter. Xexample, if the ramdisk is drive e X setram e X XThis ramdisk allows up to 32 directory entries in the root directory. XTo use it, there must be a line in the config.sys file X device=ram.sys Xand if an initial ramdisk is desired, the line X setram drive kbytes Xcan be put in the autoexec.bat file. X XDon't allocate memory if there is currently in memory a program that will Xterminate and free up its memory, as the setram memory will be allocated after Xthis program and memory will become segmented. Also, don't run a Xterminate-and-stay-resident program when memory is allocated for the ramdisk Xbecause when the ramdisk memory is deallocated memory will be segmented. XIf memory is deallocated in a .bat file, then memory will be segmented until Xthe .bat file terminates, so don't do anything in that bat file after Xa deallocation if this segmentation could cause a problem (such as Xreallocating memory with setram or running a terminate and stay resident Xprogram). /*EOF ls -l setram.doc sed 's/^X//' > makefile.dat << '/*EOF' Xsetram setram.exe cleansr Xram ram.sys cleanram Xsetram.exe setram.o X bind.exe setram -s1000 Xsetram.o setram.c X c88.exe setram td Xram.sys ram.exe X exe2bin.exe ram.exe ram.sys Xram.exe ram.o X bind.exe ram -a -sFFFF Xram.o ram.a X asm88.exe ram td Xcleansr X command.com /c=erase setram.o Xcleanram X command.com /c=erase ram.exe X command.com /c=erase ram.o /*EOF ls -l makefile.dat sed 's/^X//' > makeram.bat << '/*EOF' Xecho off Xrem make ram.sys and setram.exe using the DeSmet assembler X Xlater setram.c setram.exe Xif not errorlevel 1 goto nosetram Xc88 setram Xif errorlevel 1 goto stop Xecho Xbind setram -s1000 Xif errorlevel 1 goto stop Xecho Xdel setram.o X:nosetram X Xlater ram.a ram.sys Xif not errorlevel 1 goto stop Xasm88 ram Xif errorlevel 1 goto stop Xecho Xbind ram -a -sFFFF Xecho Xexe2bin ram Xdel ram.o Xdel ram.exe Xdel ram.sys Xren ram.bin ram.sys X:stop /*EOF ls -l makeram.bat sed 's/^X//' > ram.a << '/*EOF' X; RAM.A MS-DOS V2.0 RAM DISK PROGRAM X; assemble with the DeSmet assembler X; Like the IBM ramdisk but with a setram feature. - John N. White X XSRH_LEN EQU 13 ;LENGTH XSRH_STA_FLD EQU 3 ;STATUS FIELD X XDTA EQU SRH_LEN+1 ;DATA TRANSFER ADDRESS XCOUNT EQU DTA+4 XSSN EQU COUNT+2 ;START SECTOR NUMBER X XRET_BYTE EQU DTA ;RETURN BYTE X XBPBA_PTR EQU COUNT ;POINTER TO BPB X; INITIALIZE XUNITS EQU SRH_LEN XBR_ADDR_0 EQU SRH_LEN+1 XBR_ADDR_1 EQU BR_ADDR_0+2 XBPB_PTR_OFF EQU BR_ADDR_0+4 XBPB_PTR_SEG EQU BPB_PTR_OFF+2 X X CSEG X; DEVICE HEADER XNEXT_DEV DW -1,-1 XATTRIBUTE DW 6000H ;IOCTL supported XSTRATEGY DW DEV_STRATEGY XINTERRUPT DW DEV_INT XDEV_NAME DB 1 ;NUMBER OF DEVICES X DB 0,0,0,0,0,0,0 X XRH_OFF DW 0 ;REQUEST HEADER OFFSET XRH_SEG DW 0 ;SEGMENT X X; CURRENT INFORMATION XTOTAL DW 0 ;NUMBER OF SECTORS TO TRANSFER XSTART_SEC DW 0 ;FIRST SECTOR XVDISK_PTR DW 0 XUSER_DTA DW 0,0 ;USERS DATA TRANSFER ADDRESS XBPB DW 512 ;PER SECTOR X DB 1 ;ALLOCATION UNIT X DW 0 ;0 RESERVED X DB 1 ;1 FAT X DW 32 ;DIRECTORY ENTRIES XSECTORS DW 10H ;SECTORS TOTAL XMEDIA_TYPE DB 0FCH ;MEDIA BYTE XFAT_SIZE DW 3 ;SECTORS IN FATS XBPB_PTR DW BPB XMEDIA_IN DB -1 ;MEDIA IN DRIVE IF 1 X XFUNTAB: X DW INIT X DW MEDIA_CHECK X DW BUILD_BPB X DW IOCTLI X DW INPUT X DW EXIT X DW EXIT X DW EXIT X DW OUTPUT X DW OUTPUT ;DONT BOTHER VERIFYING X DW EXIT X DW EXIT X DW IOCTLO X XIN_SAVE:MOV AX,ES:WORD [BX+DTA] ;SAVE CALLERS DTA X MOV DS:WORD USER_DTA,AX X MOV AX,ES:WORD [BX+DTA+2] X MOV DS:WORD USER_DTA+2,AX X MOV AX,ES:WORD [BX+SSN] ;START SECTOR X MOV DS:START_SEC,AX X MOV AX,ES:WORD [BX+COUNT] ;COUNT OF SECTORS X MOV AH,0 X MOV DS:WORD TOTAL,AX X RET X XCALC_ADDR: X MOV AX,DS:START_SEC X MOV CL,5 ;TURN SECTORS INTO PARAGRAPHS X SHL AX,CL X ADD AX,DS:VDISK_PTR X MOV CH,DS:BYTE TOTAL ;CX=LENGTH IN WORDS X MOV CL,0 X MOV DS,AX ;MOVE ADDRESS TO DS:SI X XOR SI,SI X RET X X; STRATEGY ENTRY XDEV_STRATEGY: X MOV CS:RH_SEG,ES ;SAVE ES:BX X MOV CS:RH_OFF,BX X LRET X X; DEVICE INTERRUPT HANDLER XDEV_INT: X PUSH DS ;SAVE STATE X PUSH ES X PUSH AX X PUSH BX X PUSH CX X PUSH DX X PUSH SI X PUSH DI X; SET STATUS TO ALL OK X MOV ES:WORD [BX+SRH_STA_FLD],100H X MOV AL,ES:[BX+2] ;GET FUNCTION BYTE X SHL AL,1 ;TIMES 2 X MOV AH,0 X MOV DI,AX ;FUNCTION OFFSET X PUSH CS X POP DS X JMP WORD FUNTAB[DI] X X; MEDIA CHECK X;media status is -1 after release of memory XMEDIA_CHECK: X MOV AL,DS:MEDIA_IN X MOV ES:BYTE [BX+RET_BYTE],AL X JMP EXIT X X; BUILD BIOS PARAMETER BLOCK XBUILD_BPB: X MOV ES:WORD [BX+BPBA_PTR],OFFSET BPB X MOV ES:WORD [BX+BPBA_PTR+2],CS X CMP DS:MEDIA_IN,1 X JE EXIT X CMP DS:VDISK_PTR,0 X JZ EXIT X MOV DS:MEDIA_IN,1 X CLD X MOV ES,DS:VDISK_PTR X MOV DI,0 ;ZERO OUT FAT X MOV AL,DS:MEDIA_TYPE X XOR AL,1 ;FORCE MS-DOS TO LOOK AT SECTOR COUNT X MOV DS:MEDIA_TYPE,AL X STOSB ;SET FIRST 3 BYTES OF FAT X MOV AX,0FFFFH X STOSW X MOV CX,16*512-3 ;SIZE OF REST OF FAT + DIRECTORY X XOR AL,AL XREP STOSB ;FAT IS ZERO X JMP EXIT X X; READ A SECTOR XINPUT: X CMP DS:MEDIA_IN,1 ;MAKE SURE MEDIA IN DRIVE X JNE BAD_EXIT X CALL IN_SAVE X CALL CALC_ADDR ;GET SECTOR ADDRESS X LES DI,CS:USER_DTA ;LOAD DESTINATION ADDRESS X CLD XREP MOVSW ;MOVE READ DATA X JMP EXIT X X; WRITE A SECTOR XOUTPUT: X CMP DS:MEDIA_IN,1 ;MAKE SURE MEDIA IN DRIVE X JNE BAD_EXIT X CALL IN_SAVE X CALL CALC_ADDR ;GET DESTINATION ADDRESS X PUSH DS X POP ES ;PUT DESTINATION INTO ES:DI X MOV DI,SI X LDS SI,CS:USER_DTA ;LOAD SOURCE ADDRESS X CLD XREP MOVSW X JMP EXIT X XBAD_EXIT: X MOV ES:WORD [BX+SRH_STA_FLD],8002H X JMP EXIT X X; IOCTLI XIOCTLI: X CALL IN_SAVE X MOV AX,DS:VDISK_PTR X LDS DI,DS:USER_DTA X MOV DS:[DI],AX X JMP EXIT X X; IOCTLO XIOCTLO: X CALL IN_SAVE X PUSH DS X LDS DI,CS:USER_DTA X MOV AX,DS:[DI] X MOV CX,DS:[DI+2] X POP DS X MOV DS:VDISK_PTR,AX X MOV AX,CX X MOV DS:SECTORS,AX X SHR AX,1 ;FIND FAT SIZE X ADD AX,CX X MOV CL,9 X SHR AX,CL X INC AX X MOV DS:WORD FAT_SIZE,AX X MOV DS:BYTE MEDIA_IN,-1 X X X; COMMON EXIT XEXIT: POP DI X POP SI X POP DX X POP CX X POP BX X POP AX X POP ES X POP DS X LRET X X; INTILLIZATION XINIT: X MOV AX,OFFSET INIT ;RAM IS AT END OF THIS CODE X MOV CL,4 ;MAKE PARAS X SHR AX,CL X INC AX ;1 FOR ROUND UP X PUSH CS X POP DI X ADD AX,DI ;ADD CURRENT CS X PUSH ES X POP DS X MOV DS:WORD [BX+BR_ADDR_0],0 ;SET FREE ADDRESS X MOV DS:WORD [BX+BR_ADDR_1],AX X MOV DS:BYTE [BX+UNITS],1 ;ONE UNIT X MOV DS:WORD [BX+BPB_PTR_OFF],OFFSET BPB_PTR X MOV DS:WORD [BX+BPB_PTR_SEG],CS X JMP EXIT X X END /*EOF ls -l ram.a sed 's/^X//' > setram.c << '/*EOF' X/* Set the ramdisk to the specified number of kbytes */ X/* must be linked with -s1000 */ X/* written by John N. White */ X Xunsigned size; Xunsigned zero[2],loci[256]; Xint err,drive,loc,old; X Xmain(argc,argv) Xchar **argv;{ X int i; X if(argc<2){ Xusage: puts("setram - program to set size of ramdisk in kbytes\n"); X puts("usage:\n"); X puts("setram drive kbytes to allocate memory for ramdisk\n"); X puts("setram drive to free memory from ramdisk"); X exit(1); X } X i=argv[1][0]; X if(i>='a') i-=32; /* set to upper case */ X drive=i-'A'+1; X if(drive<0 || drive>31) goto usage; X getold(); X if(old){ X if(argc>2){ X puts("ramdisk already has memory"); X exit(1); X } X clear(); X exit(0); X } X if(argc<3){ X puts("no memory allocated to ramdisk"); X exit(1); X } X size=atoi(argv[2]); X if(size<8 || size>800) goto usage; X loci[1]=size<<1; X size<<=6; X#asm X mov ah,4ah ;modify programs allocated block X mov cx,cs X sub cx,10h X mov word loc_,cx X mov word loci_,cx X mov es,cx ;start of partition X mov bx,word size_ ;new size X int 21h X jc err X X mov ax,cs ;get pointer to environment block X sub ax,10h X mov es,ax X mov es,es:[2Ch] X mov ah,49h ;dealloc environment block X int 21h X jc err X X mov ax,4405h ;IOCTL call to ramdisk X mov bx,word drive_ X mov dx,offset loci_ X mov cx,4 X int 21h X jnc ok Xerr: X mov word err_,ax X jmp main_error_ Xok: X mov ax,3100h X mov dx,word size_ X int 21h X jmp err X# Xerror: X puts("error number "); X err&=63; X if(err>9) putchar(err/10+'0'); X putchar(err%10+'0'); X puts(" (decimal)"); X exit(1); X} X Xgetold(){ X#asm X mov ax,4404h ;IOCTL call to ramdisk X mov bx,word drive_ X mov dx,offset loci_ X mov cx,2 X int 21h X jc err X# X old=loci[0]; X} X X/* Clear the ramdisk */ Xclear(){ X#asm X mov ah,49h ;free mem X mov es,word old_ X int 21h X jc err X X mov ax,4405h ;IOCTL call to ramdisk X mov bx,word drive_ X mov dx,offset zero_ X mov cx,4 X int 21h X jc err X# X return; X} /*EOF ls -l setram.c sed 's/^X//' > ram.uue << '/*EOF' Xbegin 755 ram.sys XM_____P!@?P"* $ @$ $@ ! _ , XM( #_;@&I +, +P'U &4!90%E 0P!# %E 64!/0$FBT<.HQP )HM'$*,> ":+ XM1Q2C& FBT<2M "C%@##H1@ L073X ,&&@"*+A8 L0".V#/VPRZ,!A0 +HD> XM$@#+'@904U%25E<FQT<# $FBD<"T."T (OX#A\N_Z4P * O ":(1P[IL@ F XMQT<2( FC$\4@#XO %U ^F> (,^&@ =0/IE #&!B\ ?R.!AH OP H"H XM- &B*@"JN/__J[G]'S+ \ZKI< " /B\ 74KZ$O_Z&?_+L0^' #\\Z7K68 ^ XM+P !=13H-/_H4/\>!XO^+L4V' #\\Z7K/B;'1P,"@.LVZ!C_H1H Q3X< (D% XMZRCH"O\>+L4^' "+!8M- A^C&@"+P:,H -'H \&Q"=/H0*,K ,8&+P#_7UY: XM65M8!Q_+N&X!L033Z$ .7P/'!A_'1PX (E'$,9'#0''1Q(M (Q/%.O3%"P" XM= /IK0" /GLL!'51H4D +0$ B4;ZBW;Z@+P4+ %T!?].^NOQBT;ZT>"+\('& XM/BO_-.@7,X/$ CW__W47BT;ZT>"+\('&%T;_-+AL U#H("&#Q 2+=OK&A!0L X1 NL$_@9[++@ %"X.BI0Z'KZ X Xend /*EOF ls -l ram.uue sed 's/^X//' > setram.uue << '/*EOF' Xbegin 755 setram.exe XM35H 0 @ __] "D3 XM XM XM XM XM XM XM XM XM XM XM #I,P)5B^R#[ *#?@0"?3*X!@!0Z$<#@\0"N#D XM4.@] X/$ KA! %#H,P.#Q *X> !0Z"D#@\0"N $ 4.C& H/$ HMV!HMT HH$ XMM ")1OZ#?OYA? 2#;OX@BT;^+4$ !0$ HR$#@SXA P!\!X,^(0,??@+KF^@; XM 8,^)0, =">#?@0"?A2XJP!0Z-("@\0"N $ 4.AO H/$ N@3 ;@ %#H8@*# XMQ *#?@0#?12XQ@!0Z*L"@\0"N $ 4.A( H/$ HMV!O]T!.@, 8/$ J,9 8,^ XM&0$(<@B!/AD!( -V ^DO_Z$9 ='@HR$!L0:A&0'3X*,9 ;1*C,F#Z1")#B,# XMB0X? 8[!BQX9 <TA<B.,R"T0 ([ )HX&+ "T2<TA<A&X!42+'B$#NA\!N00 XMS2%S!:,? ^L+N QBQ89 <TAZ_"XY0!0Z!@"@\0"@R8? S^#/A\#"7X3H1\# XMF;D* /?Y!3 4.CD 8/$ J$? YFY"@#W^8/",%+HT0&#Q *X\P!0Z-P!@\0" XMN $ 4.AY 8/$ HOE7<-5B^RX!$2+'B$#NA\!N0( S2%RB*$? :,E UW#58OL XMM$F.!B4#S2%S ^EP_[@%1(L>(0.Z&P&Y! #-(7,#Z5S_7<-:6U-253/ ,^V^ XM "*#T. ^2!T^(#Y"73S@/DK=.Z ^2UU!KX! (H/0X#Y,'(D@/DY=Q]0N H XM]^6+Z%B Z3"U +\* /?G \&#T@ #ZHH/0^O7B]6#_@!T!_?2]]B#VO]=PS:, XM'A(!H0( C-,KPW<#Z=, 2#T $'(#N/\/L033X#O$<P/IOP VBQX #8#'@( XM@\-_.^-U HO@-HDF% &T,,TA/ )R!C;&!A8! <8&_P -Q@: ""Y 0"^__]& XMBH2! #P-= 0\"G7SN 4/?& 0!T 42+_"OFB^Q.@_[_=":*A($ /"!T!#P) XM=02P .L2@+R "!T!X"\@ )=02-&E-!B +KU%>+[%51C-".V(L^ "+#@( XMCL"P /SSJH/' H/G_HD^$ 'H _VP .L"6%B /A8! '0$M$S-(?\V$@&X !0 XMR[C^ %#H/ "#Q *P NO>@#X7 0!T"J 7 <8&%P$ ZP2T <TAM \&G0!P[C_ XM_\-86E)0@/H*=0>R#>@" +(*M +-(<-86U-0B@<*P'0,4U#HW/^#Q );0^ON XMPX ^%P$ = N@%P'&!A<! +0 P[0'S2&T ,.T!K+_S2&B%P&T ,-86E)0M ;- XM(<.A$ '#6HO$_^):6SOL=0*+ZXOC4__BC-C#C,C#6A\>_^)5B^R*9@2+5@;- XM(;0 7<,9 1 "T@-S971R86T@+2!P<F]G<F%M('1O('-E="!S:7IE(&]F(')A XM;61I<VL@&0$0 M(#<V5T<F%M("T@<')O9W)A;2!T;R!S970@<VEZ92!O9B!R XM86UD:7-K(&EN(&MB>71E<PH =7-A9V4Z"@!S971R86T@9')I=F4@:V)Y=&5S XM(" @('1O(&%L;&]C871E(&UE;6]R>2!F;W(@<F%M9&ES:PH <V5T<F%M(&1R XM:79E(" @(" @(" @("!T;R!F<F5E(&UE;6]R>2!F<F]M(')A;61I<VL <F%M XM9&ES:R!A;')E861Y(&AA<R!M96UO<GD ;F\@;65M;W)Y(&%L;&]C871E9"!T XM;R!R86UD:7-K &5R<F]R(&YU;6)E<B ("AD96-I;6%L*0!N;W0@96YO=6=H XM(&UE;6]R>0H XM XM XM XM X7 X Xend /*EOF ls -l setram.uue exit -- Bennett Todd -- Duke Computation Center, Durham, NC 27706-7756; (919) 684-3695 UUCP: ...{decvax,seismo,philabs,ihnp4,akgua}!mcnc!ecsvax!duccpc!bet