delphi - How to correctly declare StreamLn -


i trying compile program getting error:

undeclared indentifier 'streamln' 

i tried download psock.dcu , put library doesnt compile, looks compactible delphi 5,

unit resourceinfo;  interface  uses   classes, sysutils, windows;  type   tresourceinfo = class;    tdfmmode = ( dfmdata, dfmresource, dfmascii, dfmbinary);    tdfm = class   private     fowner: tresourceinfo;     fname: string;     fdata: tstream;      procedure setname(const value: string);     procedure setowner(const value: tresourceinfo);    public     constructor create(aowner: tresourceinfo);     destructor destroy; override;      function savetofile(filename: tfilename; mode: tdfmmode): boolean;      property data: tstream read fdata;     property name: string read fname write setname;     property owner: tresourceinfo read fowner write fowner;   end; {tdfm}    tresourceinfo = class(tcomponent)   private     factive: boolean;     fdfms: tlist;     fexefilename: tfilename;     fmodule: thandle;     fonactivate: tnotifyevent;     fondeactivate: tnotifyevent;      procedure setexefilename(const value: tfilename);     procedure setactive(const value: boolean);     function  getdfms(index: cardinal): tdfm;     function  getdfmcount: cardinal;    protected     procedure clear;    public     constructor create(aowner: tcomponent); override;     destructor  destroy; override;      function  adddfm(const name: string; adata: tmemorystream): integer;     procedure deletedfm(const name: string);     property  dfmcount: cardinal read getdfmcount;     property  dfms[index: cardinal]: tdfm read getdfms;     procedure enumdfmnames;     property  module: thandle read fmodule;    published     property active: boolean read factive write setactive;     property exefilename: tfilename read fexefilename write setexefilename;      property onactivate: tnotifyevent read fonactivate write fonactivate;     property ondeactivate: tnotifyevent read fondeactivate write fondeactivate;   end; {tresourceinfo}  procedure register;  implementation  uses  winsock;  resourcestring   rserrorloadingexefile = 'an error ocurred loading file %s, may not executable module';  procedure register; begin   registercomponents('+hcu', [tresourceinfo]); end; {register}  { tresourceinfo }  function tresourceinfo.adddfm(const name: string; adata: tmemorystream): integer; var   fdfm: tdfm; begin   fdfm := tdfm.create(self);   fdfm.name := name;   fdfm.data.size := adata.size;   fdfm.data.seek(0, 0);   adata.seek(0, 0);   fdfm.data.copyfrom(adata, adata.size);   result := fdfms.add(fdfm); end; {tresourceinfo.adddfm}  constructor tresourceinfo.create(aowner: tcomponent); begin   inherited;    factive := false;   fdfms := tlist.create;   fmodule := 0; end; {tresourceinfo.create}  destructor tresourceinfo.destroy; begin   clear;   fdfms.free;    inherited; end; {tresourceinfo.destroy}  function cb_enumdfmnameproc(hmodule: thandle; lpsztype, lpszname: pchar; lparam: integer): boolean; stdcall; var   ms: tmemorystream;   rs: tresourcestream;   buffer: array of byte; begin   tresourceinfo(lparam)     begin       rs := tresourcestream.create(tresourceinfo(lparam).module, lpszname, lpsztype);       try         ms := tmemorystream.create;         try           try             setlength(buffer, 4);             rs.read(buffer[0], sizeof(buffer));             if string(buffer) = 'tpf0'               begin                 rs.seek(0, 0);                 objectbinarytotext(rs, ms);                 ms.seek(0, 0);                 adddfm(strpas(lpszname), ms);               end;           except             raise;           end;                   ms.free;         end;               rs.free;       end;     end;    result := true; end; {cb_enumdfmnameproc}  procedure tresourceinfo.enumdfmnames; begin   if fmodule > 0     enumresourcenames(fmodule, rt_rcdata, @cb_enumdfmnameproc, integer(self)); end; {tresourceinfo.enumdfmnames}  procedure tresourceinfo.deletedfm(const name: string); var   i: cardinal; begin   if fdfms.count > 0     := pred(fdfms.count) downto 0       if uppercase(tdfm(fdfms[i]).name) = uppercase(name)         begin           fdfms.delete(i);           break;         end; end; {tresourceinfo.deletedfm}  procedure tresourceinfo.setactive(const value: boolean); begin   if factive <> value     begin       if value         begin           if fmodule > 0             freelibrary(fmodule);              (* load_library_as_datafile                if value given, function simple mapping of file                address space. nothing done relative executing or preparing execute                code in mapped file. function loads module if data file.                can use module handle function returns in case win32                functions operate on resources. use flag when want load dll in                order extract messages or resources it, , have no intention of executing                code.if value not given, function maps file address                space in manner normal executable module. behavior of                function identical of loadlibrary in regard. *)            fmodule := loadlibraryex(pchar(fexefilename), 0, load_library_as_datafile);           if not (fmodule >= 32)             raise exception.createfmt(rserrorloadingexefile, [fexefilename]);           if assigned(fonactivate)             fonactivate(self);         end       else         begin           clear;           if fmodule > 0             begin               freelibrary(fmodule);               fmodule := 0;             end;           if assigned(fondeactivate)             fondeactivate(self);         end;       factive := value;     end; end; {tresourceinfo.setactive}  procedure tresourceinfo.setexefilename(const value: tfilename); begin   if fexefilename <> value     fexefilename := value; end; {tresourceinfo.setexefilename}  function tresourceinfo.getdfms(index: cardinal): tdfm; begin   result := tdfm(fdfms[index]); end; {tresourceinfo.getdfms}  function tresourceinfo.getdfmcount: cardinal; begin   result := fdfms.count; end; {tresourceinfo.getdfmcount}  procedure tresourceinfo.clear; begin   if fdfms.count > 0     while fdfms.count > 0       fdfms.delete(0); end; {tresourceinfo.clear}  { tdfm }  constructor tdfm.create(aowner: tresourceinfo); begin   inherited create;    fdata := tmemorystream.create;   fname := '';   setowner(aowner); end; {tdfm.create}  destructor tdfm.destroy; begin   fdata.free;   inherited; end; {tdfm.destroy}   function tdfm.savetofile(filename: tfilename; mode: tdfmmode): boolean;    function endofstream(stream: tstream): boolean;   begin     stream       result := position = size;   end; {endofstream}  var   fs: tfilestream;   ms: tmemorystream;   s: string;   i, j: byte; begin   fs := tfilestream.create(filename, fmcreate or fmshareexclusive);   try     fdata.seek(0, 0);      case mode of       dfmascii:         begin           ms := tmemorystream.create;           try             s := fname + ' rcdata' + #13#10 + '{';             streamln(fs, s);              objecttexttobinary(fdata, ms);             ms.seek(0, 0);              while not endofstream(ms)               begin                 s := '''';                  := 0 15                   begin                     if ms.read(j, sizeof(j)) = 0                       break;                     s := concat(s, format('%2.2x', [j]));                     if (i = 15) or endofstream(ms)                       s := concat(s, '''')                     else                       s := concat(s, ' ');                   end;                  if endofstream(ms)                   s := concat(s, #13#10 + '}');                 streamln(fs, s);               end;                        ms.free;           end;         end;        dfmbinary:         objecttexttobinary(fdata, fs);     end;        fs.free;   end; end; {tdfm.savetofile}  procedure tdfm.setname(const value: string); begin   if fname <> value     fname := value; end; {tdfm.setname}  procedure tdfm.setowner(const value: tresourceinfo); begin   fowner := value; end; {tdfm.setowner}  end. 

how can declare successfully?

appears me winsock unit not have streamln function (as powersock's psock.pas unit uses winsock imported unit).

the streamln function in psock.pas adds crlf sequence string passed parameter before calling tstream.writebuffer method of passed tstream parameter.

here's google cache snapshot powersock's source code of psock.pas


Comments