[BACK]Return to 64bit.ps CVS log [TXT][DIR] Up to [Development] / xfs-website / design_docs / xfsdocs93_ps

File: [Development] / xfs-website / design_docs / xfsdocs93_ps / 64bit.ps (download)

Revision 1.1, Wed Mar 29 22:55:47 2000 UTC (17 years, 7 months ago) by cattelan
Branch: MAIN
CVS Tags: HEAD

Add files with -kb flag

%!
%%BoundingBox: (atend)
%%Pages: (atend)
%%DocumentFonts: (atend)
%%EndComments
%
% FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0
% Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation.
% All rights reserved.
%
% Known Problems:
%	Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
/FMversion (3.0) def 
% Set up Color vs. Black-and-White
	/FMPrintInColor systemdict /colorimage known
		systemdict /currentcolortransfer known or def
% Uncomment this line to force b&w on color printer
%   /FMPrintInColor false def
/FrameDict 295 dict def 
systemdict /errordict known not {/errordict 10 dict def
		errordict /rangecheck {stop} put} if
% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
FrameDict /tmprangecheck errordict /rangecheck get put 
errordict /rangecheck {FrameDict /bug true put} put 
FrameDict /bug false put 
mark 
% Some PS machines read past the CR, so keep the following 3 lines together!
currentfile 5 string readline
00
0000000000
cleartomark 
errordict /rangecheck FrameDict /tmprangecheck get put 
FrameDict /bug get { 
	/readline {
		/gstring exch def
		/gfile exch def
		/gindex 0 def
		{
			gfile read pop 
			dup 10 eq {exit} if 
			dup 13 eq {exit} if 
			gstring exch gindex exch put 
			/gindex gindex 1 add def 
		} loop
		pop 
		gstring 0 gindex getinterval true 
		} def
	} if
/FMVERSION {
	FMversion ne {
		/Times-Roman findfont 18 scalefont setfont
		100 100 moveto
		(FrameMaker version does not match postscript_prolog!)
		dup =
		show showpage
		} if
	} def 
/FMLOCAL {
	FrameDict begin
	0 def 
	end 
	} def 
	/gstring FMLOCAL
	/gfile FMLOCAL
	/gindex FMLOCAL
	/orgxfer FMLOCAL
	/orgproc FMLOCAL
	/organgle FMLOCAL
	/orgfreq FMLOCAL
	/yscale FMLOCAL
	/xscale FMLOCAL
	/manualfeed FMLOCAL
	/paperheight FMLOCAL
	/paperwidth FMLOCAL
/FMDOCUMENT { 
	array /FMfonts exch def 
	/#copies exch def
	FrameDict begin
	0 ne dup {setmanualfeed} if
	/manualfeed exch def
	/paperheight exch def
	/paperwidth exch def
	/yscale exch def
	/xscale exch def
	currenttransfer cvlit /orgxfer exch def
	currentscreen cvlit /orgproc exch def
	/organgle exch def /orgfreq exch def
	setpapername 
	manualfeed {true} {papersize} ifelse 
	{manualpapersize} {false} ifelse 
	{desperatepapersize} if
	end 
	} def 
	/pagesave FMLOCAL
	/orgmatrix FMLOCAL
	/landscape FMLOCAL
/FMBEGINPAGE { 
	FrameDict begin 
	/pagesave save def
	3.86 setmiterlimit
	/landscape exch 0 ne def
	landscape { 
		90 rotate 0 exch neg translate pop 
		}
		{pop pop}
		ifelse
	xscale yscale scale
	/orgmatrix matrix def
	gsave 
	} def 
/FMENDPAGE {
	grestore 
	pagesave restore
	end 
	showpage
	} def 
/FMFONTDEFINE { 
	FrameDict begin
	findfont 
	ReEncode 
	1 index exch 
	definefont 
	FMfonts 3 1 roll 
	put
	end 
	} def 
/FMFILLS {
	FrameDict begin
	array /fillvals exch def
	end 
	} def 
/FMFILL {
	FrameDict begin
	 fillvals 3 1 roll put
	end 
	} def 
/FMNORMALIZEGRAPHICS { 
	newpath
	0.0 0.0 moveto
	1 setlinewidth
	0 setlinecap
	0 0 0 sethsbcolor
	0 setgray 
	} bind def
	/fx FMLOCAL
	/fy FMLOCAL
	/fh FMLOCAL
	/fw FMLOCAL
	/llx FMLOCAL
	/lly FMLOCAL
	/urx FMLOCAL
	/ury FMLOCAL
/FMBEGINEPSF { 
	end 
	/FMEPSF save def 
	/showpage {} def 
	FMNORMALIZEGRAPHICS 
	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
	fx fy translate 
	rotate
	fw urx llx sub div fh ury lly sub div scale 
	llx neg lly neg translate 
	} bind def
/FMENDEPSF {
	FMEPSF restore
	FrameDict begin 
	} bind def
FrameDict begin 
/setmanualfeed {
%%BeginFeature *ManualFeed True
	 statusdict /manualfeed true put
%%EndFeature
	} def
/max {2 copy lt {exch} if pop} bind def
/min {2 copy gt {exch} if pop} bind def
/inch {72 mul} def
/pagedimen { 
	paperheight sub abs 16 lt exch 
	paperwidth sub abs 16 lt and
	{/papername exch def} {pop} ifelse
	} def
	/papersizedict FMLOCAL
/setpapername { 
	/papersizedict 14 dict def 
	papersizedict begin
	/papername /unknown def 
		/Letter 8.5 inch 11.0 inch pagedimen
		/LetterSmall 7.68 inch 10.16 inch pagedimen
		/Tabloid 11.0 inch 17.0 inch pagedimen
		/Ledger 17.0 inch 11.0 inch pagedimen
		/Legal 8.5 inch 14.0 inch pagedimen
		/Statement 5.5 inch 8.5 inch pagedimen
		/Executive 7.5 inch 10.0 inch pagedimen
		/A3 11.69 inch 16.5 inch pagedimen
		/A4 8.26 inch 11.69 inch pagedimen
		/A4Small 7.47 inch 10.85 inch pagedimen
		/B4 10.125 inch 14.33 inch pagedimen
		/B5 7.16 inch 10.125 inch pagedimen
	end
	} def
/papersize {
	papersizedict begin
		/Letter {lettertray letter} def
		/LetterSmall {lettertray lettersmall} def
		/Tabloid {11x17tray 11x17} def
		/Ledger {ledgertray ledger} def
		/Legal {legaltray legal} def
		/Statement {statementtray statement} def
		/Executive {executivetray executive} def
		/A3 {a3tray a3} def
		/A4 {a4tray a4} def
		/A4Small {a4tray a4small} def
		/B4 {b4tray b4} def
		/B5 {b5tray b5} def
		/unknown {unknown} def
	papersizedict dup papername known {papername} {/unknown} ifelse get
	end
	/FMdicttop countdictstack 1 add def 
	statusdict begin stopped end 
	countdictstack -1 FMdicttop {pop end} for 
	} def
/manualpapersize {
	papersizedict begin
		/Letter {letter} def
		/LetterSmall {lettersmall} def
		/Tabloid {11x17} def
		/Ledger {ledger} def
		/Legal {legal} def
		/Statement {statement} def
		/Executive {executive} def
		/A3 {a3} def
		/A4 {a4} def
		/A4Small {a4small} def
		/B4 {b4} def
		/B5 {b5} def
		/unknown {unknown} def
	papersizedict dup papername known {papername} {/unknown} ifelse get
	end
	stopped 
	} def
/desperatepapersize {
	statusdict /setpageparams known
		{
		paperwidth paperheight 0 1 
		statusdict begin
		{setpageparams} stopped pop 
		end
		} if
	} def
/savematrix {
	orgmatrix currentmatrix pop
	} bind def
/restorematrix {
	orgmatrix setmatrix
	} bind def
/dmatrix matrix def
/dpi    72 0 dmatrix defaultmatrix dtransform
    dup mul exch   dup mul add   sqrt def
/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def
/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def
/DiacriticEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
/numbersign /dollar /percent /ampersand /quotesingle /parenleft
/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
/two /three /four /five /six /seven /eight /nine /colon /semicolon
/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
/udieresis /dagger /.notdef /cent /sterling /section /bullet
/paragraph /germandbls /registered /copyright /trademark /acute
/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
/periodcentered /quotesinglbase /quotedblbase /perthousand
/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
] def
/ReEncode { 
	dup 
	length 
	dict begin 
	{
	1 index /FID ne 
		{def} 
		{pop pop} ifelse 
	} forall 
	0 eq {/Encoding DiacriticEncoding def} if 
	currentdict 
	end 
	} bind def
/graymode true def
	/bwidth FMLOCAL
	/bpside FMLOCAL
	/bstring FMLOCAL
	/onbits FMLOCAL
	/offbits FMLOCAL
	/xindex FMLOCAL
	/yindex FMLOCAL
	/x FMLOCAL
	/y FMLOCAL
/setpattern {
	 /bwidth  exch def
	 /bpside  exch def
	 /bstring exch def
	 /onbits 0 def  /offbits 0 def
	 freq sangle landscape {90 add} if 
		{/y exch def
		 /x exch def
		 /xindex x 1 add 2 div bpside mul cvi def
		 /yindex y 1 add 2 div bpside mul cvi def
		 bstring yindex bwidth mul xindex 8 idiv add get
		 1 7 xindex 8 mod sub bitshift and 0 ne
		 {/onbits  onbits  1 add def 1}
		 {/offbits offbits 1 add def 0}
		 ifelse
		}
		setscreen
	 {} settransfer
	 offbits offbits onbits add div FMsetgray
	/graymode false def
	} bind def
/grayness {
	FMsetgray
	graymode not {
		/graymode true def
		orgxfer cvx settransfer
		orgfreq organgle orgproc cvx setscreen
		} if
	} bind def
	/HUE FMLOCAL
	/SAT FMLOCAL
	/BRIGHT FMLOCAL
	/Colors FMLOCAL
FMPrintInColor 
	
	{
	/HUE 0 def
	/SAT 0 def
	/BRIGHT 0 def
	% array of arrays Hue and Sat values for the separations [HUE BRIGHT]
	/Colors   
	[[0    0  ]    % black
	 [0    0  ]    % white
	 [0.00 1.0]    % red
	 [0.37 1.0]    % green
	 [0.60 1.0]    % blue
	 [0.50 1.0]    % cyan
	 [0.83 1.0]    % magenta
	 [0.16 1.0]    % comment / yellow
	 ] def
      
	/BEGINBITMAPCOLOR { 
		BITMAPCOLOR} def
	/BEGINBITMAPCOLORc { 
		BITMAPCOLORc} def
	/BEGINBITMAPTRUECOLOR { 
		BITMAPTRUECOLOR } def
	/BEGINBITMAPTRUECOLORc { 
		BITMAPTRUECOLORc } def
	/K { 
		Colors exch get dup
		0 get /HUE exch store 
		1 get /BRIGHT exch store
		  HUE 0 eq BRIGHT 0 eq and
			{1.0 SAT sub setgray}
			{HUE SAT BRIGHT sethsbcolor} 
		  ifelse
		} def
	/FMsetgray { 
		/SAT exch 1.0 exch sub store 
		  HUE 0 eq BRIGHT 0 eq and
			{1.0 SAT sub setgray}
			{HUE SAT BRIGHT sethsbcolor} 
		  ifelse
		} bind def
	}
	
	{
	/BEGINBITMAPCOLOR { 
		BITMAPGRAY} def
	/BEGINBITMAPCOLORc { 
		BITMAPGRAYc} def
	/BEGINBITMAPTRUECOLOR { 
		BITMAPTRUEGRAY } def
	/BEGINBITMAPTRUECOLORc { 
		BITMAPTRUEGRAYc } def
	/FMsetgray {setgray} bind def
	/K { 
		pop
		} def
	}
ifelse
/normalize {
	transform round exch round exch itransform
	} bind def
/dnormalize {
	dtransform round exch round exch idtransform
	} bind def
/lnormalize { 
	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
	} bind def
/H { 
	lnormalize setlinewidth
	} bind def
/Z {
	setlinecap
	} bind def
	/fillvals FMLOCAL
/X { 
	fillvals exch get
	dup type /stringtype eq
	{8 1 setpattern} 
	{grayness}
	ifelse
	} bind def
/V { 
	gsave eofill grestore
	} bind def
/N { 
	stroke
	} bind def
/M {newpath moveto} bind def
/E {lineto} bind def
/D {curveto} bind def
/O {closepath} bind def
	/n FMLOCAL
/L { 
 	/n exch def
	newpath
	normalize
	moveto 
	2 1 n {pop normalize lineto} for
	} bind def
/Y { 
	L 
	closepath
	} bind def
	/x1 FMLOCAL
	/x2 FMLOCAL
	/y1 FMLOCAL
	/y2 FMLOCAL
	/rad FMLOCAL
/R { 
	/y2 exch def
	/x2 exch def
	/y1 exch def
	/x1 exch def
	x1 y1
	x2 y1
	x2 y2
	x1 y2
	4 Y 
	} bind def
% The following commented out code did not work for tangent lines of zero
% length.  The code following it was provided by Frame to patch this error.
%
%/RR { 
%	/rad exch def
%	normalize
%	/y2 exch def
%	/x2 exch def
%	normalize
%	/y1 exch def
%	/x1 exch def
%	newpath
%	x1 y1 rad add moveto
%	x1 y2 x2 y2 rad arcto
%	x2 y2 x2 y1 rad arcto
%	x2 y1 x1 y1 rad arcto
%	x1 y1 x1 y2 rad arcto
%	closepath
%	16 {pop} repeat
%	} bind def
/rarc
    {rad
     {arcto} stopped
    } bind def
/RR {
    /rad exch def
    normalize
    /y2 exch def
    /x2 exch def
    normalize
    /y1 exch def
    /x1 exch def
    mark
    newpath
    x1 y1 rad add moveto
    x1 y2 x2 y2 rarc
    x2 y2 x2 y1 rarc
    x2 y1 x1 y1 rarc
 %   x2 y1 x1 y1 rarc
    x1 y1 x1 y2 rarc
    closepath
    cleartomark
    } bind def

/C { 
	grestore
	gsave
	R 
	clip
	} bind def
	/FMpointsize FMLOCAL
/F { 
	FMfonts exch get
	FMpointsize scalefont
	setfont
	} bind def
/Q { 
	/FMpointsize exch def
	F 
	} bind def
/T { 
	moveto show
	} bind def
/RF { 
	rotate
	0 ne {-1 1 scale} if
	} bind def
/TF { 
	gsave
	moveto 
	RF
	show
	grestore
	} bind def
/P { 
	moveto
	0 32 3 2 roll widthshow
	} bind def
/PF { 
	gsave
	moveto 
	RF
	0 32 3 2 roll widthshow
	grestore
	} bind def
/S { 
	moveto
	0 exch ashow
	} bind def
/SF { 
	gsave
	moveto
	RF
	0 exch ashow
	grestore
	} bind def
/B { 
	moveto
	0 32 4 2 roll 0 exch awidthshow
	} bind def
/BF { 
	gsave
	moveto
	RF
	0 32 4 2 roll 0 exch awidthshow
	grestore
	} bind def
/G { 
	gsave
	newpath
	normalize translate 0.0 0.0 moveto 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath fill
	grestore
	} bind def
/A { 
	gsave
	savematrix
	newpath
	2 index 2 div add exch 3 index 2 div sub exch 
	normalize 2 index 2 div sub exch 3 index 2 div add exch 
	translate 
	scale 
	0.0 0.0 1.0 5 3 roll arc 
	restorematrix
	stroke
	grestore
	} bind def
	/x FMLOCAL
	/y FMLOCAL
	/w FMLOCAL
	/h FMLOCAL
	/xx FMLOCAL
	/yy FMLOCAL
	/ww FMLOCAL
	/hh FMLOCAL
	/FMsaveobject FMLOCAL
	/FMoptop FMLOCAL
	/FMdicttop FMLOCAL
/BEGINPRINTCODE { 
	/FMdicttop countdictstack 1 add def 
	/FMoptop count 4 sub def 
	/FMsaveobject save def
	userdict begin 
	/showpage {} def 
	FMNORMALIZEGRAPHICS 
	3 index neg 3 index neg translate
	} bind def
/ENDPRINTCODE {
	count -1 FMoptop {pop pop} for 
	countdictstack -1 FMdicttop {pop end} for 
	FMsaveobject restore 
	} bind def
/gn { 
	0 
	{	46 mul 
		cf read pop 
		32 sub 
		dup 46 lt {exit} if 
		46 sub add 
		} loop
	add 
	} bind def
	/str FMLOCAL
/cfs { 
	/str sl string def 
	0 1 sl 1 sub {str exch val put} for 
	str def 
	} bind def
/ic [ 
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	0
	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
	] def
	/sl FMLOCAL
	/val FMLOCAL
	/ws FMLOCAL
	/im FMLOCAL
	/bs FMLOCAL
	/cs FMLOCAL
	/len FMLOCAL
	/pos FMLOCAL
/ms { 
	/sl exch def 
	/val 255 def 
	/ws cfs 
	/im cfs 
	/val 0 def 
	/bs cfs 
	/cs cfs 
	} bind def
400 ms 
/cip { 
	is 
	0 
	cf cs readline pop 
	{	ic exch get exec 
		add 
		} forall 
	pop 

    /tot w 1 sub def
    0 1 tot {
        /indx exch def
        /indxa is indx get def
        /placer nredt indxa get def
        /placeg ngreent indxa get def
        /placeb nbluet indxa get def
        cris indx placer 255 mul cvi put
        cgis indx placeg 255 mul cvi put
        cbis indx placeb 255 mul cvi put
    } for pop cris

	
	} bind def
/ip { 
	is 
	0 
	cf cs readline pop 
	{	ic exch get exec 
		add 
		} forall 
	pop 

	} bind def
/wh { 
	/len exch def 
	/pos exch def 
	ws 0 len getinterval im pos len getinterval copy pop
	pos len 
	} bind def
/bl { 
	/len exch def 
	/pos exch def 
	bs 0 len getinterval im pos len getinterval copy pop
	pos len 
	} bind def
/s1 1 string def
/fl { 
	/len exch def 
	/pos exch def 
	/val cf s1 readhexstring pop 0 get def
	pos 1 pos len add 1 sub {im exch val put} for
	pos len 
	} bind def
/hx { 
	3 copy getinterval 
	cf exch readhexstring pop pop 
	} bind def
	/h FMLOCAL
	/w FMLOCAL
	/d FMLOCAL
	/lb FMLOCAL
	/bitmapsave FMLOCAL
	/is FMLOCAL
	/cf FMLOCAL
/wbytes { 
	dup 
	8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse
	} bind def
/BEGINBITMAPBWc { 
	1 {} COMMONBITMAPc
	} bind def
/BEGINBITMAPGRAYc { 
	8 {} COMMONBITMAPc
	} bind def
/BEGINBITMAP2BITc { 
	2 {} COMMONBITMAPc
	} bind def
/COMMONBITMAPc { 
	/r exch def
	/d exch def
	gsave
	translate rotate scale /h exch def /w exch def
	/lb w d wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
	r                    
	/is im 0 lb getinterval def 
	ws 0 lb getinterval is copy pop 
	/cf currentfile def 
	w h d [w 0 0 h neg 0 h] 
	{ip} image 
	bitmapsave restore 
	grestore
	} bind def
/BEGINBITMAPBW { 
	1 {} COMMONBITMAP
	} bind def
/BEGINBITMAPGRAY { 
	8 {} COMMONBITMAP
	} bind def
/BEGINBITMAP2BIT { 
	2 {} COMMONBITMAP
	} bind def
/COMMONBITMAP { 
	/r exch def
	/d exch def
	gsave
	translate rotate scale /h exch def /w exch def
	/bitmapsave save def 
	r                    
	/is w d wbytes string def
	/cf currentfile def 
	w h d [w 0 0 h neg 0 h] 
	{cf is readhexstring pop} image
	bitmapsave restore 
	grestore
	} bind def
	/proc1 FMLOCAL
	/proc2 FMLOCAL
	/newproc FMLOCAL
/Fmcc {
    /proc2 exch cvlit def
    /proc1 exch cvlit def
    /newproc proc1 length proc2 length add array def
    newproc 0 proc1 putinterval
    newproc proc1 length proc2 putinterval
    newproc cvx
} bind def
/ngrayt 256 array def
/nredt 256 array def
/nbluet 256 array def
/ngreent 256 array def
	/gryt FMLOCAL
	/blut FMLOCAL
	/grnt FMLOCAL
	/redt FMLOCAL
	/indx FMLOCAL
	/cynu FMLOCAL
	/magu FMLOCAL
	/yelu FMLOCAL
	/k FMLOCAL
	/u FMLOCAL
/colorsetup {
    currentcolortransfer
    /gryt exch def
    /blut exch def
    /grnt exch def
    /redt exch def
    0 1 255 {
        /indx exch def
        /cynu 1 red indx get 255 div sub def
        /magu 1 green indx get 255 div sub def
        /yelu 1 blue indx get 255 div sub def
        /k cynu magu min yelu min def
        nredt indx 1 0 cynu max sub redt exec put
        ngreent indx 1 0 magu max sub grnt exec put
        nbluet indx 1 0 yelu max sub blut exec put
        ngrayt indx 1 k sub gryt exec put
    } for
	} bind def
	/tran FMLOCAL
/fakecolorsetup {
	/tran 256 string def
	0 1 255 {/indx exch def 
		tran indx
		red indx get 77 mul
		green indx get 151 mul
		blue indx get 28 mul
		add add 256 idiv put} for
	currenttransfer
	{255 mul cvi tran exch get 255.0 div}
	exch Fmcc settransfer
} bind def
/BITMAPCOLOR { 
	/d 8 def
	gsave
	translate rotate scale /h exch def /w exch def
	/bitmapsave save def 
	colorsetup
	/is w d wbytes string def
    /ris w d wbytes string def
    /gis w d wbytes string def
    /bis w d wbytes string def
	/cf currentfile def 
	w h d [w 0 0 h neg 0 h] 
	{cf is readhexstring pop
    /tot w 1 sub def
    0 1 tot {
        /indx exch def
        /indxa is indx get def
        /placer nredt indxa get def
        /placeg ngreent indxa get def
        /placeb nbluet indxa get def
        ris indx placer 255 mul cvi put
        gis indx placeg 255 mul cvi put
        bis indx placeb 255 mul cvi put
    } for pop ris}
	{gis} {bis} true 3 colorimage 
	bitmapsave restore 
	grestore
	} bind def
/BITMAPCOLORc { 
	/d 8 def
	gsave
	translate rotate scale /h exch def /w exch def
	/lb w d wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
	colorsetup
	/is im 0 lb getinterval def 
    /cris lb string def
    /cgis lb string def
    /cbis lb string def
	ws 0 lb getinterval is copy pop 
	/cf currentfile def 
	w h d [w 0 0 h neg 0 h] 
	{cip} {cgis} {cbis} true 3 colorimage
	bitmapsave restore 
	grestore
	} bind def
/BITMAPTRUECOLORc { 
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def 
        
        /is w string def
        
        ws 0 w getinterval is copy pop 
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        {ip} {gip} {bip} true 3 colorimage
        bitmapsave restore 
        grestore
        } bind def
/BITMAPTRUECOLOR { 
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def 
        /is w string def
        /gis w string def
        /bis w string def
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        { cf is readhexstring pop } 
        { cf gis readhexstring pop } 
        { cf bis readhexstring pop } 
        true 3 colorimage 
        bitmapsave restore 
        grestore
        } bind def
/BITMAPTRUEGRAYc { 
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def 
        
        /is w string def
        
        ws 0 w getinterval is copy pop 
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        {ip gip bip w gray} image
        bitmapsave restore 
        grestore
        } bind def
/ww FMLOCAL
/r FMLOCAL
/g FMLOCAL
/b FMLOCAL
/i FMLOCAL
/gray { 
        /ww exch def
        /b exch def
        /g exch def
        /r exch def
        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
			b i get .114 mul add add r i 3 -1 roll floor cvi put } for
        r
        } bind def
/BITMAPTRUEGRAY { 
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def 
        /is w string def
        /gis w string def
        /bis w string def
        /cf currentfile def 
        w h 8 [w 0 0 h neg 0 h] 
        { cf is readhexstring pop 
          cf gis readhexstring pop 
          cf bis readhexstring pop w gray}  image
        bitmapsave restore 
        grestore
        } bind def
/BITMAPGRAY { 
	8 {fakecolorsetup} COMMONBITMAP
	} bind def
/BITMAPGRAYc { 
	8 {fakecolorsetup} COMMONBITMAPc
	} bind def
/ENDBITMAP {
	} bind def
end 
	/ALDsave FMLOCAL
	/ALDmatrix matrix def ALDmatrix currentmatrix pop
/StartALD {
	/ALDsave save def
	 savematrix
	 ALDmatrix setmatrix
	} bind def
/InALD {
	 restorematrix
	} bind def
/DoneALD {
	 ALDsave restore
	} bind def
%%EndProlog
%%BeginSetup
(3.0) FMVERSION
1 1 612 792 0 1 9 FMDOCUMENT
0 0 /Palatino-Roman FMFONTDEFINE
1 0 /Times-Roman FMFONTDEFINE
2 0 /Times-Bold FMFONTDEFINE
3 0 /Courier-Bold FMFONTDEFINE
32 FMFILLS
0 0 FMFILL
1 0.1 FMFILL
2 0.3 FMFILL
3 0.5 FMFILL
4 0.7 FMFILL
5 0.9 FMFILL
6 0.97 FMFILL
7 1 FMFILL
8 <0f1e3c78f0e1c387> FMFILL
9 <0f87c3e1f0783c1e> FMFILL
10 <cccccccccccccccc> FMFILL
11 <ffff0000ffff0000> FMFILL
12 <8142241818244281> FMFILL
13 <03060c183060c081> FMFILL
14 <8040201008040201> FMFILL
16 1 FMFILL
17 0.9 FMFILL
18 0.7 FMFILL
19 0.5 FMFILL
20 0.3 FMFILL
21 0.1 FMFILL
22 0.03 FMFILL
23 0 FMFILL
24 <f0e1c3870f1e3c78> FMFILL
25 <f0783c1e0f87c3e1> FMFILL
26 <3333333333333333> FMFILL
27 <0000ffff0000ffff> FMFILL
28 <7ebddbe7e7dbbd7e> FMFILL
29 <fcf9f3e7cf9f3f7e> FMFILL
30 <7fbfdfeff7fbfdfe> FMFILL
%%EndSetup
%%Page: "1" 1
%%BeginPaperSize: Letter
%%EndPaperSize
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(1) 500 42.62 T
1 24 Q
(64 Bit File Access) 217.72 704 T
2 12 Q
(Adam Sweeney) 266.86 664 T
2 16 Q
(1.0  Intr) 72 621.33 T
(oduction) 127.23 621.33 T
1 12 Q
1.55 (In order to support the access of 64 bit \336les from 32 bit applications, new interfaces must be) 72 594 P
0.88 (de\336ned which take 64 bit parameters. These interfaces must be cleanly supported in the kernel,) 72 580 P
0.14 (without the information of whether an application is 64 or 32 bit \336ltering down below the system) 72 566 P
0.22 (call level.This document describes the new interfaces to be used to access 64 bit \336les from 32 bit) 72 552 P
0.18 (applications, the policies involved in 64 bit \336le access, and the changes necessary to kernel inter-) 72 538 P
(nals to support 64 bit \336les.) 72 524 T
0.04 (It is important to understand that the need for these extensions is only to allow 32 bit applications) 72 498 P
0.52 (to access 64 bit \336les. They are not needed by 64 bit applications or by 32 bit applications which) 72 484 P
(have no need to deal with 64 bit \336les.) 72 470 T
2 16 Q
(2.0  New Interfaces) 72 429.33 T
2 14 Q
(2.1  New User V) 72 394.67 T
(isible T) 167.46 394.67 T
(ypes) 210.36 394.67 T
1 12 Q
-0.04 (T) 72 368 P
-0.04 (o support the access of 64 bit \336les, the following new types will be exported for use by user pro-) 78.49 368 P
(grams.) 72 354 T
2 F
(2.1.1  off64_t) 72 322 T
1 F
0.24 (The of) 72 296 P
0.24 (f64_t type will be de\336ned as \322long long.\323 This will make it a 64 bit value useful for speci-) 103.66 296 P
(fying 64 bit \336le of) 72 282 T
(fsets and sizes.) 159.07 282 T
2 F
(2.1.2  stat64) 72 250 T
1 F
0.71 (The new system calls will include extended stat\0502\051 calls. They will all use the new stat64 struc-) 72 224 P
(ture.) 72 210 T
2 10 Q
(T) 85.75 167.33 T
(ABLE 1. stat64 structur) 91.67 167.33 T
(e de\336nition) 194.21 167.33 T
(\336eld name) 85.78 149.33 T
(\336eld type) 193.78 149.33 T
(comments) 301.78 149.33 T
1 F
(st_dev) 85.78 137.83 T
(dev_t) 193.78 137.83 T
(st_pad1) 85.78 126.33 T
(long[3]) 193.78 126.33 T
(st_ino) 85.78 114.83 T
(ino_t) 193.78 114.83 T
(st_mode) 85.78 103.33 T
(mode_t) 193.78 103.33 T
(st_nlink) 85.78 91.83 T
(nlink_t) 193.78 91.83 T
(st_uid) 85.78 80.33 T
(uid_t) 193.78 80.33 T
(st_gid) 85.78 68.83 T
(gid_t) 193.78 68.83 T
79.78 161 403.78 161 2 L
V
0.5 H
0 Z
N
FMENDPAGE
%%EndPage: "1" 2
%%Page: "2" 2
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(2) 500 42.62 T
2 12 Q
(2.1.3  \337ock64) 72 525 T
1 F
1.25 (In order to allow \336le record locking on lar) 72 499 P
1.25 (ge \336les, the fcntl\0502\051 system call will be extended to) 283.61 499 P
(accept a \337ock64 structure as de\336ned below) 72 485 T
(.) 277.72 485 T
2 F
(2.1.4  rlim64_t and rlimit64) 72 312 T
1 F
1.04 (The addition of lar) 72 286 P
1.04 (ge \336les requires the resource limit subsystem to understand limits which are) 164.5 286 P
0.69 (greater than 32 bits in length. For this we will add extended setrlimit\0502\051 and getrlimit\0502\051 system) 72 272 P
(calls which work with 64 bit values.) 72 258 T
(The rlim64_t will be de\336ned as \322unsigned long long rlim64_t.\323 The rlimit64 structure will be:) 72 232 T
2 F
(2.1.5  fpos64_t) 72 116.5 T
1 F
0.73 (The standard I/O library routines fsetpos\050\051 and fgetpos\050\051 use the fpos_t type to describe \336le of) 72 90.5 P
0.73 (f-) 532.01 90.5 P
0.98 (sets. It would be nice if we could just extend this type to 64 bits, but then we would break old) 72 76.5 P
1 10 Q
(st_rdev) 85.78 683.83 T
(dev_t) 193.78 683.83 T
(st_pad) 85.78 672.33 T
(long[2]) 193.78 672.33 T
(st_size) 85.78 660.83 T
(of) 193.78 660.83 T
(f64_t) 201.92 660.83 T
(now 64 bits) 301.78 660.83 T
(st_pad3) 85.78 649.33 T
(long) 193.78 649.33 T
(st_atim) 85.78 637.83 T
(timestruc_t) 193.78 637.83 T
(st_mtim) 85.78 626.33 T
(timestruc_t) 193.78 626.33 T
(st_ctim) 85.78 614.83 T
(timestruct_t) 193.78 614.83 T
(st_blksize) 85.78 603.33 T
(long) 193.78 603.33 T
(st_blocks) 85.78 591.83 T
(long) 193.78 591.83 T
(st_fstype) 85.78 580.33 T
(char[_ST_FSTYPSZ]) 193.78 580.33 T
(st_pad4) 85.78 568.83 T
(long[8]) 193.78 568.83 T
2 F
(T) 85.75 442.33 T
(ABLE 2. \337ock64 structur) 91.67 442.33 T
(e de\336nition) 199.21 442.33 T
(\336eld name) 85.78 424.33 T
(\336eld type) 193.78 424.33 T
(comments) 301.78 424.33 T
1 F
(l_type) 85.78 412.83 T
(short) 193.78 412.83 T
(l_whence) 85.78 401.33 T
(short) 193.78 401.33 T
(l_start) 85.78 389.83 T
(of) 193.78 389.83 T
(f64_t) 201.92 389.83 T
(64 bits) 301.78 389.83 T
(l_len) 85.78 378.33 T
(of) 193.78 378.33 T
(f64_t) 201.92 378.33 T
(64 bits) 301.78 378.33 T
(l_sysid) 85.78 366.83 T
(long) 193.78 366.83 T
(l_pid) 85.78 355.33 T
(pid_t) 193.78 355.33 T
(pad) 85.78 343.83 T
(long[4]) 193.78 343.83 T
2 F
(T) 85.75 189.33 T
(ABLE 3. rlimit64 structur) 91.67 189.33 T
(e de\336nition) 203.09 189.33 T
(\336eld name) 85.78 171.33 T
(\336eld type) 193.78 171.33 T
(comments) 301.78 171.33 T
1 F
(rlim_cur) 85.78 159.83 T
(rlim64_t) 193.78 159.83 T
(64 bits) 301.78 159.83 T
(rlim_max) 85.78 148.33 T
(rlim64_t) 193.78 148.33 T
(64 bits) 301.78 148.33 T
2 F
(T) 85.75 713.33 T
(ABLE 1. stat64 structur) 91.67 713.33 T
(e de\336nition) 194.21 713.33 T
(\336eld name) 85.78 695.33 T
(\336eld type) 193.78 695.33 T
(comments) 301.78 695.33 T
79.78 707 403.78 707 2 L
V
0.5 H
0 Z
N
79.78 436 403.78 436 2 L
V
N
79.78 183 403.78 183 2 L
V
N
FMENDPAGE
%%EndPage: "2" 3
%%Page: "3" 3
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(3) 500 42.62 T
1 12 Q
0.42 (applications which use it. Therefore we will de\336ne the new type fpos64_t which will be fpos_t\325) 72 712 P
0.42 (s) 535.33 712 P
(64 bit equivalent. It will be de\336ned as \322long long fpos64_t.\323) 72 698 T
2 14 Q
(2.2  New and Extended System Calls) 72 664.67 T
1 12 Q
-0.17 (This section describes each of the new and extended system calls to be added to support 64 bit \336le) 72 638 P
(access.) 72 624 T
2 F
(2.2.1  stat64\050\051, fstat64\050\051, lstat64\050\051) 72 592 T
1 F
0.25 (These routines are the 64 bit equivalents of the 32 bit stat\050\051, fstat\050\051, and lstat\050\051 system calls. They) 72 566 P
(take a pointer to a stat64 structure in place of the stat structure accepted by the 32 bit versions.) 72 552 T
2 F
(2.2.2  truncate64\050\051, ftruncate64\050\051) 72 466.5 T
1 F
-0.11 (These are the 64 bit equivalents of the 32 bit truncate\050\051 and ftruncate\050\051 system calls. In place of an) 72 440.5 P
(of) 72 426.5 T
(f_t they take a of) 81.78 426.5 T
(f64_t to specify the new length of the \336le.) 162.83 426.5 T
2 F
(2.2.3  lseek64\050\051) 72 352.5 T
1 F
-0.03 (This is the 64 bit equivalent of the 32 bit lseek\050\051 system call. It takes a of) 72 326.5 P
-0.03 (f64_t in place of an of) 420.78 326.5 P
-0.03 (f_t) 526.67 326.5 P
(to specify the of) 72 312.5 T
(fset amount, and it returns a of) 149.39 312.5 T
(f64_t in place of an of) 296.07 312.5 T
(f_t.) 402.11 312.5 T
2 F
(2.2.4  mmap64\050\051) 72 250 T
1 F
-0.19 (This is a version of the mmap\050\051 system call which allows the caller to specify a 64 bit \336le of) 72 224 P
-0.19 (fset. It) 509.55 224 P
(replaces mmap\050\051\325) 72 210 T
(s of) 155.59 210 T
(f_t \336le of) 173.03 210 T
(fset parameter with a 64 bit of) 217.46 210 T
(f64_t value.) 361.8 210 T
2 10 Q
(T) 85.75 535.33 T
(ABLE 4. stat64 system call pr) 91.67 535.33 T
(ototypes) 218.08 535.33 T
1 F
(int stat64\050const char *path, struct stat64 *buf\051;) 85.78 521.33 T
(int fstat64\050int \336ldes, struct stat64 *buf\051;) 85.78 509.83 T
(int lstat64\050const char *path, struct stat64 *buf\051;) 85.78 498.33 T
2 F
(T) 85.75 409.83 T
(ABLE 5. truncate64 system call pr) 91.67 409.83 T
(ototypes) 238.62 409.83 T
1 F
(int truncate64\050const char *path, of) 85.78 395.83 T
(f64_t length\051;) 222.99 395.83 T
(int ftruncate64\050int \336ldes, of) 85.78 384.33 T
(f64_t length\051;) 195.53 384.33 T
2 F
(T) 85.75 295.83 T
(ABLE 6. lseek64 system call pr) 91.67 295.83 T
(ototype) 223.64 295.83 T
1 F
(of) 85.78 281.83 T
(f64_t lseek64\050int \336ldes, of) 93.92 281.83 T
(f64_t of) 199.23 281.83 T
(fset, int whence\051;) 230.98 281.83 T
2 F
(T) 85.75 193.33 T
(ABLE 7. mmap64 system call pr) 91.67 193.33 T
(ototype) 229.75 193.33 T
1 F
(void *mmap64\050void *addr) 85.78 179.33 T
(, size_t len, int prot, int \337ags, int \336ldes, of) 191.98 179.33 T
(f64_t of) 358.94 179.33 T
(fset\051;) 390.68 179.33 T
79.78 529 295.78 529 2 L
V
0.5 H
0 Z
N
79.78 403.5 295.78 403.5 2 L
V
N
79.78 289.5 367.78 289.5 2 L
V
N
79.78 187 439.78 187 2 L
V
N
FMENDPAGE
%%EndPage: "3" 4
%%Page: "4" 4
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(4) 500 42.62 T
2 12 Q
(2.2.5  getrlimit64\050\051, setrlimit64\050\051) 72 712 T
1 F
0.1 (In order to access or set \336le size limits which are greater than 64 bits, 64 bit versions of the rlimit) 72 686 P
(system calls will be added. These will use the rlimit64 structure in place of the rlimit structure.) 72 672 T
2 F
(2.2.6  fcntl\050\051) 72 598 T
1 F
(The fcntl\050\051 system call will be extended by adding new operations. These new operations are:) 72 572 T
3 F
(\245) 72 552 T
1 F
(F_GETLK64) 85.75 552 T
3 F
(\245) 72 532 T
1 F
(F_SETLK64) 85.75 532 T
3 F
(\245) 72 512 T
1 F
(F_SETLKW64) 85.75 512 T
3 F
(\245) 72 492 T
1 F
(F_FREESP64) 85.75 492 T
3 F
(\245) 72 472 T
1 F
(F_ALLOCSP64) 85.75 472 T
0.07 (All of these operations are equivalent to those without the \32464,\325 and they are dif) 72 446 P
0.07 (ferent only in that) 454.18 446 P
(they take a pointer to a \337ock64 structure in place of an \337ock structure.) 72 432 T
2 14 Q
(2.3  New Library Interfaces) 72 398.67 T
1 12 Q
-0.13 (The standard I/O library will be extended so that 64 bit \336les can be accessed with the standard I/O) 72 372 P
(\336le access model. The new interfaces are described below) 72 358 T
(.) 349.31 358 T
2 F
(2.3.1  fseek64\050\051) 72 326 T
1 F
-0.15 (This is a version of the fseek\050\051 call which takes a 64 bit value for an of) 72 300 P
-0.15 (fset and returns the new \336le) 407.84 300 P
(of) 72 286 T
(fset as a 64 bit value.) 81.78 286 T
2 F
(2.3.2  ftell64\050\051) 72 223.5 T
1 F
(This is a version of the ftell\050\051 call which returns a 64 bit value for the current \336le of) 72 197.5 T
(fset.) 471.49 197.5 T
2 10 Q
(T) 85.75 655.33 T
(ABLE 8. rlimit64 system call pr) 91.67 655.33 T
(ototypes) 226.97 655.33 T
1 F
(int getrlimit64\050int resource, struct rlimit64 *rlp\051;) 85.78 641.33 T
(int setrlimit64\050int resource, const struct rlimit64 *rlp\051;) 85.78 629.83 T
2 F
(T) 85.75 269.33 T
(ABLE 9. fseek64 function pr) 91.67 269.33 T
(ototype) 213.37 269.33 T
1 F
(of) 85.78 255.33 T
(f64_t fseek64\050FILE *\336le, of) 93.92 255.33 T
(f64_t of) 206.44 255.33 T
(fset, int whence\051;) 238.18 255.33 T
2 F
(T) 85.75 180.83 T
(ABLE 10. ftell64 function pr) 91.67 180.83 T
(ototype) 213.37 180.83 T
1 F
(of) 85.78 166.83 T
(f64_t ftell64\050FILE *\336le\051;) 93.92 166.83 T
79.78 649 331.78 649 2 L
V
0.5 H
0 Z
N
79.78 263 331.78 263 2 L
V
N
79.78 174.5 331.78 174.5 2 L
V
N
FMENDPAGE
%%EndPage: "4" 5
%%Page: "5" 5
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(5) 500 42.62 T
2 12 Q
(2.3.3  fgetpos64\050\051, fsetpos64\050\051) 72 712 T
1 F
-0.12 (These are versions of the fgetpos\050\051 and fsetpos\050\051 routines which take pointers to fpos64_t parame-) 72 686 P
(ters rather than fpos_t.) 72 672 T
2 F
(2.3.4  ftw64\050\051, nftw64\050\051) 72 598 T
1 F
-0.08 (If it is considered worthwhile, the \336le tree walk library routines will be extended to support stat64) 72 572 P
(structures instead of stat structures.) 72 558 T
2 16 Q
(3.0  Semantics and Err) 72 517.33 T
(or Returns) 227.63 517.33 T
1 12 Q
1.3 (This section explains what happens when the old interfaces are used to access lar) 72 490 P
1.3 (ge \336les. It is) 477.45 490 P
1.67 (important to make this behavior consistent, but there do not seem to be any clearly \322correct\323) 72 476 P
(answers here.) 72 462 T
2 14 Q
(3.1  The Model) 72 428.67 T
1 12 Q
1.01 (The model described below is almost identical to one presented by Convex in the W) 72 402 P
1.01 (inter 1992) 490.02 402 P
0.64 (USENIX conference proceedings. Their model seems to be consistent and easily implementable) 72 388 P
(without any major drawbacks, so I am using most of it.) 72 374 T
0.38 (32 bit programs either recognize the existence of lar) 72 348 P
0.38 (ge \336les or they do not. Those that do will be) 324.64 348 P
-0.19 (using new interfaces to access these \336les. Those that do not will see all \336les as having a maximum) 72 334 P
-0.28 (size of 2GB-1 bytes. Data beyond of) 72 320 P
-0.28 (fset 2GB-1 in a \336le will be inaccessible by applications which) 245.65 320 P
-0.15 (do not recognize the existence of lar) 72 306 P
-0.15 (ge \336les, and the size of a \336le which is greater than 2GB-1 will) 244.77 306 P
-0.14 (not be visible to an application which does not know of such \336les. The implications of these state-) 72 292 P
(ments are explained below) 72 278 T
(.) 199.45 278 T
2 F
(3.1.1  open\050\051) 72 246 T
1 F
0.17 (In order for the system to be able to determine that a program is aware of lar) 72 220 P
0.17 (ge \336les, the program) 440.89 220 P
0.77 (must \322tell\323 the system. This will be done with a new open \337ag O_LARGEFILE. Opening a \336le) 72 206 P
(with this \337ag allows the program to see the \336le as lar) 72 192 T
(ger then 2GB-1 if it is so.) 325.29 192 T
0.56 (This \337ag will be inherited across both fork\0502\051 and exec\0502\051. This behavior is pretty much de\336ned) 72 166 P
(by the implementation, because the \336le structure in the kernel is shared across these calls and that) 72 152 T
(is where the open \337ags are kept.) 72 138 T
2 10 Q
(T) 85.75 655.33 T
(ABLE 1) 91.67 655.33 T
(1. fgetpos64 and fsetpos64 function pr) 125.83 655.33 T
(ototypes) 287.23 655.33 T
1 F
(int fgetpos64\050FILE *\336le, fpos64_t *pos\051;) 85.78 641.33 T
(int fsetpos64\050FILE *\336le, const fpos64_t *pos\051;) 85.78 629.83 T
79.78 649 331.78 649 2 L
V
0.5 H
0 Z
N
FMENDPAGE
%%EndPage: "5" 6
%%Page: "6" 6
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(6) 500 42.62 T
2 12 Q
(3.1.2  fcntl\050\051) 72 712 T
1 F
1.66 (In addition to specifying the O_LARGEFILE \337ag to open, a program may get the equivalent) 72 686 P
(ef) 72 672 T
(fect by setting the FLARGEFILE \337ag for the \336le with fcntl\050F_SETFL\051.) 81.1 672 T
2 F
(3.1.3  fopen\050\051, fdopen\050\051, fr) 72 640 T
(eopen\050\051) 203.03 640 T
1 F
0.13 (These open routines will accept an added \337ag, the \322l\323 \337ag. This will have the equivalent ef) 72 614 P
0.13 (fect of) 508.9 614 P
(specifying O_LARGEFILE to the open\050\051 system call.) 72 600 T
2 F
(3.1.4  write\050\051) 72 568 T
1 F
-0.26 (In order for a 32 bit program to write beyond of) 72 542 P
-0.26 (fset 2GB-1 in a \336le, it must have set the FLARGE-) 298.38 542 P
0.24 (FILE \337ag for the \336le. If the program has not done so and it attempts to write beyond of) 72 528 P
0.24 (fset 2GB-) 492.8 528 P
0.82 (1in the \336le, write\050\051 will return -1 and errno will be set to EFBIG. Actually) 72 514 P
0.82 (, a write which starts) 437.13 514 P
0.73 (before 2GB-1 and extends beyond it will \336rst return as a partial write with write\050\051 returning the) 72 500 P
1.34 (number of bytes written before the 2GB-1 boundary was reached. The next write\050\051 call would) 72 486 P
(then return -1 with errno set to EFBIG.) 72 472 T
2 F
(3.1.5  r) 72 440 T
(ead\050\051) 107.09 440 T
1 F
-0.06 (In order for a 32 bit program to read beyond of) 72 414 P
-0.06 (fset 2GB-1 in a \336le, it must have set the FLARGE-) 296.37 414 P
0.13 (FILE \337ag for the \336le. If the program has not done so and it attempts to read beyond of) 72 400 P
0.13 (fset 2GB-1) 486.9 400 P
-0.3 (in the \336le, read\050\051 will return -1 and errno will be set to EFBIG. As with write\050\051, read\050\051 will actually) 72 386 P
(do a partial read up to the 2GB-1 boundary and return EFBIG on the subsequent read\050\051 call.) 72 372 T
2 F
(3.1.6  lseek\050\051) 72 340 T
1 F
1.23 (It is not possible for a 32 bit program to use seek to manipulate the \336le of) 72 314 P
1.23 (fset beyond 2GB-1,) 443.27 314 P
-0.07 (because the 32 bit value returned by lseek\050\051 cannot correctly describe the new of) 72 300 P
-0.07 (fset. If a program) 456.94 300 P
0.57 (attempts to manipulate the seek of) 72 286 P
0.57 (fset beyond of) 238.85 286 P
0.57 (fset 2GB-1 in the \336le, lseek\050\051 will return -1 and) 308.38 286 P
(errno will be set to EFBIG) 72 272 T
2 F
(3.1.7  truncate\050\051, ftruncate\050\051) 72 240 T
1 F
-0.26 (Since these system calls take only 32 bit values for the new \336le size, the worst they could be doing) 72 214 P
(is to shrink a \336le from greater than 2GB-1 in size to less than 2GB-1. This will be allowed.) 72 200 T
2 F
(3.1.8  mmap\050\051) 72 168 T
1 F
-0.26 (If the sum of the of) 72 142 P
-0.26 (fset and length parameters to mmap\050\051 is greater than 2GB-1 and the application) 162.75 142 P
0.37 (has not set the FLARGEFILE \337ag in the \336le, then the call will fail returning -1 and setting errno) 72 128 P
(to EFBIG.) 72 114 T
FMENDPAGE
%%EndPage: "6" 7
%%Page: "7" 7
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(7) 500 42.62 T
2 12 Q
(3.1.9  stat\050\051, fstat\050\051, lstat\050\051) 72 712 T
1 F
0.45 (Each of these calls returns the attributes of the speci\336ed \336le in a stat structure. The stat structure) 72 686 P
-0.03 (has only a signed 32 bit \336eld in which to store the size of the \336le. If any of these calls is used on a) 72 672 P
0.54 (\336le whose size is greater than 2GB-1, then the system call will return -1 and errno will be set to) 72 658 P
(EFBIG.) 72 644 T
0.27 (It has been suggested that the stat calls return successfully instead of failing and put 2GB-1 or -1) 72 618 P
0.7 (in the st_size \336eld of the stat structure. This behavior) 72 604 P
0.7 (, however friendly) 332.34 604 P
0.7 (, will not notify the user) 421.22 604 P
1.79 (that he or she is doing something wrong, and it can lead to incorrect and possibly damaging) 72 590 P
0.73 (behavior by a correctly written program. Returning the EFBIG error should make it clear to the) 72 576 P
(user what the problem is, and it should also cause most applications to exit somewhat cleanly) 72 562 T
(.) 518.93 562 T
2 14 Q
(3.2  Mor) 72 528.67 T
(e Implications) 122.65 528.67 T
1 12 Q
-0.02 (The FLARGFILE \337ag will be set explicitly by the open\050\051 and fcntl\050\051 calls. It will be set implicitly) 72 502 P
0.91 (by calls to lseek64\050\051, fstat64\050\051, and ftruncate64\050\051. The reason for this is that these calls indicate) 72 488 P
0.09 (that the caller understands 64 bit \336les even if he or she did not say so explicitly) 72 474 P
0.09 (. For the lseek64\050\051) 451.79 474 P
-0.24 (call it is necessary to turn on the \337ag or fail the call. This is because if we allow the call to succeed) 72 460 P
0.21 (and set the \336le of) 72 446 P
0.21 (fset beyond 2GB-1 but do not set the \337ag, subsequent reads and writes will fail.) 155.25 446 P
(The other two will set the \337ag just to be consistent.) 72 432 T
0.92 (Another issue involves NFS access to lar) 72 406 P
0.92 (ge \336les. There is no way to communicate O_LARGE-) 273.83 406 P
1.68 (FILE or a 64 bit \336le size or of) 72 392 P
1.68 (fset across the network using the NFS protocol. NFS accesses) 228.44 392 P
(requiring information on the size of the \336le, which is all of them, will just have to fail.) 72 378 T
2 16 Q
(4.0  Requir) 72 337.33 T
(ed Library Changes) 147.67 337.33 T
1 12 Q
-0.12 (Some parts of the libraries will need to be changed to use the new and extended interfaces de\336ned) 72 310 P
0.57 (above. The standard I/O code will be changed to use 64 bit \336le of) 72 296 P
0.57 (fsets and the new system calls) 392.93 296 P
0.83 (internally) 72 282 P
0.83 (. Other routines within libc such as opendir\050\051 and remove\050\051 will be changed to use the) 117.19 282 P
0.33 (new system calls as well. It is not yet clear what changes if any will be necessary in other librar-) 72 268 P
(ies.) 72 254 T
2 16 Q
(5.0  Requir) 72 213.33 T
(ed Utility Changes) 147.67 213.33 T
1 12 Q
0.09 (This section attempts to list the utility programs which must be changed to use the new 64 bit \336le) 72 186 P
0.25 (access primitives. It does not include those which are \336le system speci\336c and must be changed if) 72 172 P
(the \336le supports 64 bit \336les anyway \050e.g. dump, fsck\051.) 72 158 T
0.45 (ls, cp, mv) 72 132 P
0.45 (, rcp, ftp, \336nd, tail, cat, sh, csh, ksh, tcsh, dd, tar) 118.76 132 P
0.45 (, cpio, cmp, od, compress, quotas, tail,) 353.08 132 P
(bru, dif) 72 118 T
(f, wc, du, odif) 107.09 118 T
(f) 174.16 118 T
FMENDPAGE
%%EndPage: "7" 8
%%Page: "8" 8
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(8) 500 42.62 T
2 16 Q
(6.0  Requir) 72 709.33 T
(ed Kernel Changes) 147.67 709.33 T
1 12 Q
(The goal of the changes to the kernel will be to support the following:) 72 682 T
3 F
(\245) 72 662 T
1 F
(32 bit kernels without 64 bit \336les \050K32FS32\051) 85.75 662 T
3 F
(\245) 72 642 T
1 F
(32 bit kernels with 64 bit \336les \050K32FS64\051) 85.75 642 T
3 F
(\245) 72 622 T
1 F
(64 bit kernels with 64 bit \336les \050K64FS64\051) 85.75 622 T
1.55 (This support will be based on the compile time de\336nitions indicated in parantheses in the list) 72 596 P
0.03 (above. Whether or not we want to ship both the K32FS32 and the K32FS64 versions, however) 72 582 P
0.03 (, is) 525.97 582 P
(questionable. The ar) 72 568 T
(guments for each are:) 169.37 568 T
0.75 (For small systems we do not want to pay the increased memory and computational overhead) 85.75 548 P
(associated with supporting 64 bit \336les.) 85.75 534 T
-0.25 (Not supporting 64 bit \336les on all systems implies that we will have hardware independent func-) 85.75 516 P
0.08 (tionality available on some platforms and not on others. While the 64 bit access interfaces will) 85.75 502 P
(remain, there will be no way to access beyond 2GB-1 bytes in a \336le.) 85.75 488 T
-0.08 (This is more a policy decision than anything else. The code will support all three types of kernels.) 72 462 P
2 14 Q
(6.1  Kernel T) 72 428.67 T
(ype Changes) 149.48 428.67 T
1 12 Q
0.66 (All of the types associated with \336le of) 72 402 P
0.66 (fsets will need to be expanded to 64 bits in K32FS64 and) 258.6 402 P
0.89 (K64FS64 kernels. These changes will all be con\336ned to the kernel and will not be user visible.) 72 388 P
(The types to be changed are listed below) 72 374 T
(.) 266.74 374 T
3 F
(\245) 72 354 T
1 F
(of) 85.75 354 T
(f_t -- This will become a 64 bit value.) 95.52 354 T
3 F
(\245) 72 334 T
1 F
(daddr_t -- This will become a 64 bit value.) 85.75 334 T
3 F
(\245) 72 314 T
1 F
0.88 (vattr_t -- The vnode attributes structure will be changed to contain a 64 bit value for the \336le) 85.75 314 P
(size.) 85.75 300 T
3 F
(\245) 72 280 T
1 F
0.58 (uio_t -- The uio structure\325) 85.75 280 P
0.58 (s uio_of) 211.96 280 P
0.58 (fset, uio_limit, and uio_blkno \336elds will be expanded to 64) 251.3 280 P
(bits.) 85.75 266 T
3 F
(\245) 72 246 T
1 F
-0.23 (pfdat_t -- The pfdata structure\325) 85.75 246 P
-0.23 (s pf_pageno \336eld will be expanded to 52 bits, increasing the size) 232.71 246 P
(of the pfdat structure by 32 bits.) 85.75 232 T
3 F
(\245) 72 212 T
1 F
0.59 (pgno_t -- This will become a 64 bit value for describing pages associated with very lar) 85.75 212 P
0.59 (ge \336le) 509.76 212 P
(of) 85.75 198 T
(fsets.) 95.53 198 T
3 F
(\245) 72 178 T
1 F
(\336le_t -- The f_of) 85.75 178 T
(fset \336eld will be expanded to 64 bits.) 165.8 178 T
3 F
(\245) 72 158 T
1 F
0.39 (user_t -- The \336le of) 85.75 158 P
0.39 (fset \336elds in the user structure, u_r) 180.35 158 P
0.39 (.r_of) 348.24 158 P
0.39 (f and u_of) 371 158 P
0.39 (fset, will be expanded to) 420.86 158 P
(64 bits.) 85.75 144 T
3 F
(\245) 72 124 T
1 F
(rlim_t -- This will become a 64 bit value for describing \336le size limits in a 64 bit \336le system.) 85.75 124 T
3 F
(\245) 72 104 T
1 F
0.83 (rlimit -- The rlim_cur and rlim_max \336elds of this structure are both rlim_ts, so this structure) 85.75 104 P
(will be expanding.) 85.75 90 T
3 F
(\245) 72 70 T
1 F
(\337ock_t -- The l_start and l_len \336elds are of type of) 85.75 70 T
(f_t, so they will be growing to 64 bits.) 328.02 70 T
FMENDPAGE
%%EndPage: "8" 9
%%Page: "9" 9
612 792 0 FMBEGINPAGE
0 8 Q
0 X
0 K
(Silicon Graphics Pr) 72 750.67 T
(oprietary) 139.57 750.67 T
72 54 540 54 2 L
0.25 H
2 Z
N
(64 Bit File Access) 72 42.62 T
(October 7, 1993) 260.9 42.62 T
(9) 500 42.62 T
3 12 Q
(\245) 72 712 T
1 F
0.96 (reg_t -- The r_\336leof) 85.75 712 P
0.96 (f \336eld of the region structure is an of) 184 712 P
0.96 (f_t that will expand to 64 bits. The) 367.36 712 P
0.43 (r_maxsize \336eld may not need to be expanded and if not its type will be changed. The pregion) 85.75 698 P
1.12 (structure will not need to be expanded, although the types of its p_of) 85.75 684 P
1.12 (fset adn p_pglen \336elds) 428.38 684 P
(will be changed to they are 32 bit values in a K32FS64 kernel.) 85.75 670 T
3 F
(\245) 72 650 T
1 F
0.96 (swapres_t, xswapres_t, swapent_t, swapinfo_t -- These structures will be modi\336ed so that in) 85.75 650 P
(K32FS64 kernels the of) 85.75 636 T
(f_t and pgno_t type \336elds will remain 32 bit values.) 199.8 636 T
3 F
(\245) 72 616 T
1 F
(buf_t -- The b_of) 85.75 616 T
(fset and b_blkno \336elds of the buf_t will be growing to 64 bits.) 168.46 616 T
2 14 Q
(6.2  Kernel Routine Changes) 72 582.67 T
1 12 Q
0.15 (All of the code in the kernel manipulating of) 72 556 P
0.15 (f_ts will need to be checked to make sure it does not) 286.85 556 P
(depend on an of) 72 542 T
(f_t being the same size as an int or a long.) 148.72 542 T
FMENDPAGE
%%EndPage: "9" 10
%%Trailer
%%BoundingBox: 0 0 612 792
%%Pages: 9 1
%%DocumentFonts: Palatino-Roman
%%+ Times-Roman
%%+ Times-Bold
%%+ Courier-Bold