📄 fileio.hhf
字号:
#if( ! @defined( fileio_hhf ))?fileio_hhf := true;#includeOnce( "os.hhf" )#includeOnce( "hla.hhf" )#includeOnce( "stdio.hhf" )/*********************************************************************//* *//* *//* fileio namespace *//* *//* *//*********************************************************************/const _fileio_save_enumSize_ := @enumSize; namespace fileio; @fast;type ?@enumSize := 4; accessMode :enum { r, // Open file for reading. w, // Open file for writing. rw, // Open file for reading and writing. a // Open file for append (write) }; seekPosns :enum{ fromBOF, curPosn, fromEOF }; ?@enumSize := @global:_fileio_save_enumSize_; procedure open( FileName: string; Access:accessMode ); @returns( "EAX" ); @external( "FILEIO_OPEN" ); procedure openNew( FileName: string ); @returns( "EAX" ); @external( "FILEIO_OPENNEW" ); procedure close( Handle:dword ); @external( "FILEIO_CLOSE" ); procedure flush( Handle:dword ); @external( "FILEIO_FLUSH" ); procedure eof( Handle:dword ); @returns( "AL" ); @external( "FILEIO_EOF" ); procedure write( Handle:dword; var buffer:var; count:uns32 ); @external( "FILEIO_WRITE" ); procedure read( Handle:dword; var buffer:var; count:uns32 ); @returns( "eax" ); @external( "FILEIO_READ" ); procedure rewind( Handle:dword ); @external( "FILEIO_REWIND" ); procedure append( Handle:dword ); @external( "FILEIO_APPEND" ); procedure position( Handle:dword ); @returns( "EDX:EAX" ); @external( "FILEIO_POSITION" ); #macro seek( parms[] ); hla.overload( parms ) hla.signature( @global:fileio.seek2d(dword, dword) ) hla.signature( @global:fileio.seek3d(dword, dword, seekPosns) ) hla.signature( @global:fileio.seek3q(dword, qword, seekPosns) ) hla.signature( @global:fileio.seek4(dword, dword, dword, seekPosns ) ) hla.endoverload #endmacro #macro seek2d( h, d ); @global:fileio.seek4( h, 0, d, @global:fileio.fromBOF ) #endmacro #macro seek3d( h, d, f ); @global:fileio.seek4( h, 0, d, f ) #endmacro procedure seek3q( Handle:dword; posn:qword; from:seekPosns ); @returns( "EDX:EAX" ); @external( "FILEIO_SEEK4" ); procedure seek4 ( Handle :dword; HOposn :dword; LOposn :dword; from :seekPosns ); @returns( "EDX:EAX" ); @external( "FILEIO_SEEK4" ); procedure truncate( Handle:dword ); @returns( "EAX" ); @external( "FILEIO_TRUNCATE" ); /* ** File output routines: */ procedure putc( Handle:dword; c:char ); @external( "FILEIO_PUTC" ); procedure putcSize ( Handle:dword; c:char; width:int32; fill:char ); @external( "FILEIO_PUTCSIZE" ); procedure newln( Handle:dword ); @external( "FILEIO_NEWLN" ); procedure putbool( Handle:dword; b:boolean ); @external( "FILEIO_PUTBOOL" ); procedure putcset( Handle:dword; cs:cset ); @external( "FILEIO_PUTCSET" ); procedure putz( Handle:dword; zs:zstring ); @external( "FILEIO_PUTZ" ); procedure puts( Handle:dword; s:string ); @external( "FILEIO_PUTS" ); procedure putsSize ( Handle:dword; s:string; width:int32; fill:char ); @external( "FILEIO_PUTSSIZE" ); procedure putzSize ( Handle :dword; zs :zstring; width :int32; fill :char ); @external( "FILEIO_PUTZSIZE" ); procedure putb( Handle:dword; h:byte ); @external( "FILEIO_PUTB" ); procedure putw( Handle:dword; w:word ); @external( "FILEIO_PUTW" ); procedure putd( Handle:dword; dw:dword ); @external( "FILEIO_PUTD" ); procedure putq( Handle:dword; qw:qword ); @external( "FILEIO_PUTQ" ); procedure puttb( Handle:dword; tb:tbyte ); @external( "FILEIO_PUTTB" ); procedure putl( Handle:dword; l:lword ); @external( "FILEIO_PUTL" ); procedure puth8( Handle:dword; b:byte ); @external( "FILEIO_PUTH8" ); procedure puth16( Handle:dword; w:word ); @external( "FILEIO_PUTH16" ); procedure puth32( Handle:dword; d:dword ); @external( "FILEIO_PUTH32" ); procedure puth64( Handle:dword; q:qword ); @external( "FILEIO_PUTH64" ); procedure puth80( Handle:dword; tb:tbyte ); @external( "FILEIO_PUTH80" ); procedure puth128( Handle:dword; l:lword ); @external( "FILEIO_PUTH128" ); procedure putbSize( Handle:dword; b:byte; width:dword; fill:char ); @external( "FILEIO_PUTH8SIZE" ); procedure putwSize( Handle:dword; w:word; width:dword; fill:char ); @external( "FILEIO_PUTH16SIZE" ); procedure putdSize( Handle:dword; d:dword; width:dword; fill:char ); @external( "FILEIO_PUTH32SIZE" ); procedure putqSize( Handle:dword; q:qword; width:dword; fill:char ); @external( "FILEIO_PUTH64SIZE" ); procedure puttbSize( Handle:dword; tb:tbyte; width:dword; fill:char ); @external( "FILEIO_PUTH80SIZE" ); procedure putlSize( Handle:dword; l:lword; width:dword; fill:char ); @external( "FILEIO_PUTH128SIZE" ); procedure puth8Size( Handle:dword; b:byte; width:dword; fill:char ); @external( "FILEIO_PUTH8SIZE" ); procedure puth16Size( Handle:dword; w:word; width:dword; fill:char ); @external( "FILEIO_PUTH16SIZE" ); procedure puth32Size( Handle:dword; d:dword; width:dword; fill:char ); @external( "FILEIO_PUTH32SIZE" ); procedure puth64Size( Handle:dword; q:qword; width:dword; fill:char ); @external( "FILEIO_PUTH64SIZE" ); procedure puth80Size( Handle:dword; tb:tbyte; width:dword; fill:char ); @external( "FILEIO_PUTH80SIZE" ); procedure puth128Size( Handle:dword; l:lword; width:dword; fill:char ); @external( "FILEIO_PUTH128SIZE" ); procedure puti8Size ( Handle:dword; b:byte; width:int32; fill:char ); @external( "FILEIO_PUTI8SIZE" ); procedure puti16Size( Handle:dword; w:word; width:int32; fill:char ); @external( "FILEIO_PUTI16SIZE" ); procedure puti32Size( Handle:dword; d:dword; width:int32; fill:char ); @external( "FILEIO_PUTI32SIZE" ); procedure puti64Size( Handle:dword; q:qword; width:int32; fill:char ); @external( "FILEIO_PUTI64SIZE" ); procedure puti128Size( Handle:dword; l:lword; width:int32; fill:char ); @external( "FILEIO_PUTI128SIZE" ); procedure puti8 ( Handle:dword; b:byte ); @external( "FILEIO_PUTI8" ); procedure puti16( Handle:dword; w:word ); @external( "FILEIO_PUTI16" ); procedure puti32( Handle:dword; d:dword ); @external( "FILEIO_PUTI32" ); procedure puti64( Handle:dword; q:qword ); @external( "FILEIO_PUTI64" ); procedure puti128( Handle:dword; l:lword ); @external( "FILEIO_PUTI128" ); procedure putu8Size( Handle:dword; b:byte; width:int32; fill:char ); @external( "FILEIO_PUTU8SIZE" ); procedure putu16Size( Handle:dword; w:word; width:int32; fill:char ); @external( "FILEIO_PUTU16SIZE" ); procedure putu32Size( Handle:dword; d:dword; width:int32; fill:char ); @external( "FILEIO_PUTU32SIZE" ); procedure putu64Size( Handle:dword; q:qword; width:int32; fill:char ); @external( "FILEIO_PUTU64SIZE" ); procedure putu128Size( Handle:dword; l:lword; width:int32; fill:char ); @external( "FILEIO_PUTU128SIZE" ); procedure putu8 ( Handle:dword; b:byte ); @external( "FILEIO_PUTU8" ); procedure putu16( Handle:dword; w:word ); @external( "FILEIO_PUTU16" ); procedure putu32( Handle:dword; d:dword ); @external( "FILEIO_PUTU32" ); procedure putu64( Handle:dword; q:qword ); @external( "FILEIO_PUTU64" ); procedure putu128( Handle:dword; l:lword ); @external( "FILEIO_PUTU128" ); procedure pute80( Handle:dword; e80:real80; width:uns32 ); @external( "FILEIO_PUTE80" ); procedure pute64( Handle:dword; e64:real64; width:uns32 ); @external( "FILEIO_PUTE64" ); procedure pute32( Handle:dword; e32:real32; width:uns32 ); @external( "FILEIO_PUTE32" ); procedure putr80 ( Handle :dword; r :real80; width :uns32; decpts :uns32; pad:char ); @external( "FILEIO_PUTR80" ); procedure putr64 ( Handle :dword; r :real64; width :uns32; decpts :uns32; pad :char ); @external( "FILEIO_PUTR64" ); procedure putr32 ( Handle :dword; r :real32; width :uns32; decpts :uns32; pad :char ); @external( "FILEIO_PUTR32" ); procedure readLn( Handle:dword ); @external( "FILEIO_READLN" ); procedure eoln( Handle:dword ); @returns( "al" ); @external( "FILEIO_EOLN" ); procedure getc( Handle:dword in eax ); @returns( "AL" ); @external( "FILEIO_GETC" ); procedure gets( Handle:dword; s:string ); @external( "FILEIO_GETS" ); procedure a_gets( Handle:dword in eax ); @external( "FILEIO_A_GETS" ); procedure geti8( Handle:dword in eax ); @returns( "al" ); @external( "FILEIO_GETI8" ); procedure geti16( Handle:dword in eax ); @returns( "ax" ); @external( "FILEIO_GETI16" ); procedure geti32( Handle:dword in eax ); @returns( "eax" ); @external( "FILEIO_GETI32" ); procedure geti64( _Handle:dword in eax ); @returns( "edx:eax" ); @external( "FILEIO_GETI64" ); procedure geti128( Handle:dword; var dest:lword ); @external( "FILEIO_GETI128" ); procedure getu8( Handle:dword in eax ); @returns( "al" ); @external( "FILEIO_GETU8" ); procedure getu16( Handle:dword in eax ); @returns( "ax" ); @external( "FILEIO_GETU16" ); procedure getu32( _Handle:dword in eax ); @returns( "eax" ); @external( "FILEIO_GETU32" ); procedure getu64( Handle:dword ); @returns( "edx:eax" ); @external( "FILEIO_GETU64" ); procedure getu128( Handle:dword; var dest:lword ); @external( "FILEIO_GETU128" ); procedure geth8( Handle:dword in eax ); @returns( "al" ); @external( "FILEIO_GETH8" ); procedure geth16( Handle:dword in eax ); @returns( "ax" ); @external( "FILEIO_GETH16" ); procedure geth32( Handle:dword in eax ); @returns( "eax" ); @external( "FILEIO_GETH32" ); procedure geth64( Handle:dword in eax ); @returns( "edx:eax" ); @external( "FILEIO_GETH64" ); procedure geth128( Handle:dword; var dest:lword ); @external( "FILEIO_GETH128" ); procedure getf( Handle:dword ); @returns( "st0" ); @external( "FILEIO_GETF" ); // The following macros provide the same interface to pute32, pute64, // and pute80 as the plain (without size/fill char) integer output // routines: #macro _pute80( _pute80_h_, _pute80_r_ ); @global:fileio.pute80( _pute80_h_, _pute80_r_, 28 ) #endmacro #macro _pute64( _pute64_h_, _pute64_r_ ); @global:fileio.pute64( _pute64_h_, _pute64_r_, 22 ) #endmacro #macro _pute32( _pute32_h_, _pute32_r_ ); @global:fileio.pute32( _pute32_h_, _pute32_r_, 15 ) #endmacro // The following macros provide the same interface (for the PUT macro) // as the integerSize functions: #macro pute80_( _pute80_h_, _pute80_r_, _pute80_w_, f ); @global:fileio.pute80( _pute80_h_, _pute80_r_, _pute80_w_ ) #endmacro #macro pute64_( _pute64_h_, _pute64_r_, _pute64_w_, _pute64_f_ ); @global:fileio.pute64( _pute64_h_, _pute64_r_, _pute64_w_ ) #endmacro #macro pute32_( _pute32_h_, _pute32_r_, _pute32_w_, _pute32_f_ ); @global:fileio.pute32( _pute32_h_, _pute32_r_, _pute32_w_ ) #endmacroconst validPutType :boolean[ @global:hla.sizePTypes ] := [ @global:false, // Undefined @global:true, // tBoolean //1 @global:false, // enum //2 @global:true, // tUns8, //3 @global:true, // tUns16, //4 @global:true, // tUns32, //5 @global:true, // tUns64, //6 @global:true, // tUns128, //7 @global:true, // tByte, //8 @global:true, // tWord, //9 @global:true, // tDWord, //10 @global:true, // tQWord, //11 @global:true, // tTByte, //12 @global:true, // tLWord, //13 @global:true, // tInt8, //14 @global:true, // tInt16, //15 @global:true, // tInt32, //16 @global:true, // tInt64, //17 @global:true, // tInt128, //18 @global:true, // tChar, //19 @global:false, // tWChar, //20 @global:true, // tReal32, //21 @global:true, // tReal64, //22 @global:true, // tReal80, //23 @global:false, // tReal128, //24 @global:true, // tString, //25 @global:false, // tZString, //26 @global:false, // tWString, //27 @global:true, // tCset, //28 @global:false, // tArray, //29 @global:false, // tRecord, //30 @global:false, // tUnion, //31 @global:false, // tRegEx //32 @global:true, // tClass, //33 @global:false, // tProcptr, //34 @global:false, // tThunk, //35 @global:true, // tPointer //36 @global:false, // tLabel //37 @global:false, // tProc //38 @global:false, // tMethod //39 @global:false, // tClassProc //40 @global:false, // tClassIter //41 @global:false, // tIterator //42 @global:false, // tProgram //43 @global:false, // tMacro //44 @global:false, // tText //45 @global:false, // tRegExMac //46 @global:false, // tNamespace //47 @global:false, // tSegment //48 @global:false, // tAnonRec //49 @global:false, // tAnonUnion //50 @global:false, // tVariant //51 @global:false // tError //52 ]; validPutSizeType :boolean[ @global:hla.sizePTypes ] := [ @global:false, // Undefined @global:true, // tBoolean //1 @global:false, // enum //2 @global:true, // tUns8, //3 @global:true, // tUns16, //4 @global:true, // tUns32, //5 @global:true, // tUns64, //6 @global:true, // tUns128, //7 @global:true, // tByte, //8 @global:true, // tWord, //9 @global:true, // tDWord, //10 @global:true, // tQWord, //11 @global:true, // tTByte, //12 @global:true, // tLWord, //13 @global:true, // tInt8, //14 @global:true, // tInt16, //15 @global:true, // tInt32, //16 @global:true, // tInt64, //17 @global:true, // tInt128, //18 @global:true, // tChar, //19 @global:false, // tWChar, //20 @global:true, // tReal32, //21 @global:true, // tReal64, //22 @global:true, // tReal80, //23 @global:false, // tReal128, //24 @global:true, // tString, //25 @global:false, // tZString, //26 @global:false, // tWString, //27 @global:false, // tCset, //28 @global:false, // tArray, //29 @global:false, // tRecord, //30 @global:false, // tUnion, //31 @global:false, // tRegEx //32 @global:false, // tClass, //33 @global:false, // tProcptr, //34 @global:false, // tThunk, //35 @global:true, // tPointer //36 @global:false, // tLabel //37 @global:false, // tProc //38 @global:false, // tMethod //39 @global:false, // tClassProc //40 @global:false, // tClassIter //41 @global:false, // tIterator //42 @global:false, // tProgram //43 @global:false, // tMacro //44
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -