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