PEBL 2.2
Psychology Experiment Building Language - Cross-platform psychological experiment development system
PEBLStream Namespace Reference

Functions

Variant Print (Variant v)
 This prints the argument with a newline character.
 
Variant Print_ (Variant v)
 This prints the argument without a linebreak at the end.
 
Variant Format (Variant v)
 
Variant FileOpenRead (Variant v)
 This opens a filestream for reading.
 
Variant FileOpenWrite (Variant v)
 This opens a filestream for writing.
 
Variant FileOpenOverwrite (Variant v)
 This opens a filestream for writing, replacing current file, without making a backup.
 
Variant FileOpenAppend (Variant v)
 This opens a filestream for writing, appending to end of file.
 
Variant FileClose (Variant v)
 This Closes a filestream.
 
Variant FilePrint (Variant v)
 This prints contents of variant to file, followed by a newline.
 
Variant FilePrint_ (Variant v)
 This prints contents of variant to file, without appending a newline.
 
Variant FileReadCharacter (Variant v)
 Reads a character from a file.
 
Variant FileReadWord (Variant v)
 
Variant FileReadLine (Variant v)
 Reads until the next line.
 
Variant FileReadList (Variant v)
 Places all words in file into a list.
 
Variant FileReadTable (Variant v)
 Makes a list of lists, with each row contained in a list.
 
Variant FileReadText (Variant v)
 This will read all of the text in a file into a single variant.
 
Variant EndOfLine (Variant v)
 This detects if you are at the end of a line.
 
Variant EndOfFile (Variant v)
 This detects if you are at the end of a file.
 
Variant AppendFile (Variant v)
 
Variant CopyFile (Variant v)
 
Variant ConnectToIP (Variant v)
 
Variant ConnectToHost (Variant v)
 
Variant SetNetworkPort (Variant v)
 
Variant CheckForNetworkConnection (Variant v)
 
Variant OpenNetworkListener (Variant v)
 
Variant AcceptNetworkConnection (Variant v)
 
Variant WaitForNetworkConnection (Variant v)
 
Variant CloseNetworkConnection (Variant v)
 
Variant SendData (Variant v)
 
Variant GetData (Variant v)
 
Variant GetIPAddress (Variant v)
 
Variant GetMyIPAddress (Variant v)
 
Variant GetHTTPFile (Variant v)
 
Variant GetHTTPText (Variant v)
 
Variant PostHTTP (Variant v)
 
Variant PostHTTPFile (Variant v)
 
Variant MD5Sum (Variant v)
 
Variant MD5File (Variant v)
 
Variant WritePNG (Variant v)
 
Variant ParseJSON (Variant v)
 

Variables

PEBL_Function_Type FunctionTable []
 

Function Documentation

◆ AcceptNetworkConnection()

Variant PEBLStream::AcceptNetworkConnection ( Variant  v)

Definition at line 1018 of file PEBLStream.cpp.

1019{
1020 return Variant(0);
1021}

◆ AppendFile()

Variant PEBLStream::AppendFile ( Variant  v)

Definition at line 581 of file PEBLStream.cpp.

582{
583 //v[1] should have the filename
584 PList * plist = v.GetComplexData()->GetList();
585 Variant v1 = plist->First(); //plist->PopFront();
586 PError::AssertType(v1, PEAT_STRING, "Argument error in function [AppendFile(<file1>,<file2>)]: ");
587
588 string filename1 = v1.GetString();
589
590
591 Variant v2 = plist->Nth(2);
592 PError::AssertType(v2, PEAT_STRING, "Argument error in function [AppendFile(<file1>,<file2>)]: ");
593
594 //Search through the paths for the file, because it may be a 'special' file.
595 string filename2 = Evaluator::gPath.FindFile(v2.GetString());
596
597 if(filename2 == "")
598 PError::SignalFatalError(string("Unable to find file [") + v2.GetString() + string("] in AppendFile"));
599
600 //open files in binary mode so we can do a direct copy.
601
602 std::ifstream in(filename2.c_str(), ios_base::in|ios_base::binary);
603 std::ofstream out(filename1.c_str(), ios_base::out|ios_base::app|ios_base::binary);
604
605
606 if(!in.is_open())
607 {
608 PError::SignalWarning("Unable to open file ["+filename2+"]. No data copied.");
609 }
610 if(!out.is_open())
611 {
612 PError::SignalFatalError("Unable to open file ["+filename1+"]. Check permissions or determine whether directory exists.");
613 }
614
615
616 char buf[BSIZE];
617 do {
618 in.read(&buf[0],BSIZE);
619 out.write(&buf[0],in.gcount());
620 }while (in.gcount()>0);
621
622 in.close();
623 out.close();
624 return Variant(1);
625}
@ PEAT_STRING
Definition PError.h:46
static PEBLPath gPath
PList * GetList() const
std::string FindFile(const string &filename)
Definition PEBLPath.cpp:368
Definition PList.h:45
Variant Nth(unsigned int n)
Definition PList.cpp:181
Variant First()
Definition PList.cpp:169
std::string GetString() const
Definition Variant.cpp:1056
PComplexData * GetComplexData() const
Definition Variant.cpp:1299
void SignalWarning(const std::string &message)
Definition PError.cpp:119
void AssertType(Variant v, int type, const std::string &outsidemessage)
void SignalFatalError(const std::string &message)

References PError::AssertType(), PEBLPath::FindFile(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), Variant::GetString(), Evaluator::gPath, PList::Nth(), PEAT_STRING, PError::SignalFatalError(), and PError::SignalWarning().

◆ CheckForNetworkConnection()

Variant PEBLStream::CheckForNetworkConnection ( Variant  v)

Definition at line 1007 of file PEBLStream.cpp.

1008{
1009 return Variant(0);
1010}

◆ CloseNetworkConnection()

Variant PEBLStream::CloseNetworkConnection ( Variant  v)

Definition at line 1029 of file PEBLStream.cpp.

1030{
1031 // Silently succeed - nothing to close
1032 return Variant(1);
1033}

◆ ConnectToHost()

Variant PEBLStream::ConnectToHost ( Variant  v)

Definition at line 995 of file PEBLStream.cpp.

996{
997 PError::SignalWarning("Network support not compiled in. ConnectToHost returning 0 (failed).");
998 return Variant(0);
999}

References PError::SignalWarning().

◆ ConnectToIP()

Variant PEBLStream::ConnectToIP ( Variant  v)

Definition at line 989 of file PEBLStream.cpp.

990{
991 PError::SignalWarning("Network support not compiled in. ConnectToIP returning 0 (failed).");
992 return Variant(0);
993}

References PError::SignalWarning().

◆ CopyFile()

Variant PEBLStream::CopyFile ( Variant  v)

Definition at line 632 of file PEBLStream.cpp.

633{
634 //v[1] should have the filename
635 PList * plist = v.GetComplexData()->GetList();
636 Variant v1 = plist->First(); //plist->PopFront();
637 PError::AssertType(v1, PEAT_STRING, "Argument error in function [CopyFile(<sourcefile>,<destfile>)]: ");
638
639
640 string srcfile = Evaluator::gPath.FindFile(v1.GetString());
641 if(srcfile == "")
642 PError::SignalFatalError(string("Unable to find file [") + v1.GetString() + string("] in CopyFile"));
643
644
645
646 Variant v2 = plist->Nth(2);
647 PError::AssertType(v2, PEAT_STRING, "Argument error in function [CopyFile(<sourcefile>,<destfile>)]: ");
648
649
650 string destfile = v1.GetString();
651
652
653 //open files in binary mode so we can do a direct copy.
654
655 std::ifstream in(srcfile.c_str(), ios_base::in|ios_base::binary);
656 std::ofstream out(destfile.c_str(), ios_base::out|ios_base::binary);
657
658
659 if(!in.is_open())
660 {
661 PError::SignalWarning("Unable to open file ["+srcfile+"]. File not copied.");
662 }
663 if(!out.is_open())
664 {
665 PError::SignalFatalError("Unable to open file ["+destfile+"]. Check permissions or determine whether directory exists.");
666 }
667
668
669 char buf[BSIZE];
670 do {
671 in.read(&buf[0],BSIZE);
672 out.write(&buf[0],in.gcount());
673 }while (in.gcount()>0);
674
675 in.close();
676 out.close();
677 return Variant(1);
678}

References PError::AssertType(), PEBLPath::FindFile(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), Variant::GetString(), Evaluator::gPath, PList::Nth(), PEAT_STRING, PError::SignalFatalError(), and PError::SignalWarning().

◆ EndOfFile()

Variant PEBLStream::EndOfFile ( Variant  v)

This detects if you are at the end of a file.

Definition at line 567 of file PEBLStream.cpp.

568{
569 //v[1] should have the file stream
570 PList * plist = v.GetComplexData()->GetList();
571 Variant v1 = plist->First(); //plist->PopFront();
572
573 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in function [EndOfFile(<file-stream>)]: ");
574 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
575 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
576 return Variant(mystream->Eof());
577}
@ PEAT_FILESTREAM
Definition PError.h:56
bool Eof()
Definition PStream.cpp:388
X * get() const
Definition rc_ptrs.h:110

References PError::AssertType(), PStream::Eof(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_FILESTREAM.

◆ EndOfLine()

Variant PEBLStream::EndOfLine ( Variant  v)

This detects if you are at the end of a line.

Definition at line 553 of file PEBLStream.cpp.

554{
555 //v[1] should have the file stream
556 PList * plist = v.GetComplexData()->GetList();
557 Variant v1 = plist->First(); //plist->PopFront();
558
559 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in function [EndOfLine(<file-stream>)]: ");
560 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
561 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
562 return Variant(mystream->Eol());
563}
bool Eol()
Definition PStream.cpp:356

References PError::AssertType(), PStream::Eol(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_FILESTREAM.

◆ FileClose()

Variant PEBLStream::FileClose ( Variant  v)

This Closes a filestream.

This is a filestream.

Definition at line 285 of file PEBLStream.cpp.

286{
287 //v[1] should have the file stream to close
288 PList * plist = v.GetComplexData()->GetList();
289
290 Variant v1 = plist->First();// plist->PopFront();
291 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in function [FileClose(<file-stream>)]: ");
292
293
294 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
295 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
296 return Variant(mystream->Close());
297}
bool Close()
Definition PStream.cpp:394

References PError::AssertType(), PStream::Close(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_FILESTREAM.

◆ FileOpenAppend()

Variant PEBLStream::FileOpenAppend ( Variant  v)

This opens a filestream for writing, appending to end of file.

v1 contains the name of a file to open.

Definition at line 263 of file PEBLStream.cpp.

264{
265 PList * plist = v.GetComplexData()->GetList();
266 Variant v1 = plist->First(); //plist->PopFront();
267 PError::AssertType(v1, PEAT_STRING, "Argument error in function FileOpenAppend(<string>)]: ");
268
269
272 mystream->SetProperty("FILENAME",v1);
273 mystream->SetProperty("DIRECTION","WRITE");
274
275 PComplexData * pcd = new PComplexData(mystream);
276 Variant tmp = Variant(pcd);
277 delete pcd;
278 pcd=NULL;
279 return tmp;
280
281
282}
#define NULL
Definition BinReloc.cpp:317
@ sdAppend
Definition PStream.h:40
@ stASCII
Definition PStream.h:47

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), NULL, PEAT_STRING, sdAppend, and stASCII.

◆ FileOpenOverwrite()

Variant PEBLStream::FileOpenOverwrite ( Variant  v)

This opens a filestream for writing, replacing current file, without making a backup.

v1 contains the name of a file to open.

Definition at line 234 of file PEBLStream.cpp.

235{
236
237
238 // should be able to create the directory if it doesn't exist.
239 // char sysText[256];
240 // sprintf( systext, "mkdir -p %s", path ); // path is a char * to the string representing the directory you want to create
241 // system( systext );
242
243
244 PList * plist = v.GetComplexData()->GetList();
245 Variant v1 = plist->First(); //plist->PopFront();
246 PError::AssertType(v1, PEAT_STRING, "Argument error in function FileOpenOverWrite(<string>)]: ");
247
250 mystream->SetProperty("FILENAME",v1);
251 mystream->SetProperty("DIRECTION","WRITE");
252
253 PComplexData * pcd = new PComplexData(mystream);
254 Variant tmp = Variant(pcd);
255 delete pcd;
256 pcd=NULL;
257 return tmp;
258
259}
@ sdWrite
Definition PStream.h:39

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), NULL, PEAT_STRING, sdWrite, and stASCII.

◆ FileOpenRead()

Variant PEBLStream::FileOpenRead ( Variant  v)

This opens a filestream for reading.

v1 contains the name of a file to open.

Definition at line 149 of file PEBLStream.cpp.

150{
151 PList * plist = v.GetComplexData()->GetList();
152 Variant v1 = plist->First();// plist->PopFront();
153 PError::AssertType(v1, PEAT_STRING, "Argument error in function FileOpenRead(<string>)]: ");
154
157 mystream->SetProperty("FILENAME",v1);
158 mystream->SetProperty("DIRECTION","READ");
159 PComplexData * pcd = new PComplexData(mystream);
160 Variant tmp = Variant(pcd);
161 delete pcd;
162 pcd=NULL;
163 return tmp;
164}
@ sdRead
Definition PStream.h:38

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), NULL, PEAT_STRING, sdRead, and stASCII.

◆ FileOpenWrite()

Variant PEBLStream::FileOpenWrite ( Variant  v)

This opens a filestream for writing.

This opens a filestream for writing, replacing current file.

v1 contains the name of a file to open.

Definition at line 167 of file PEBLStream.cpp.

168{
169
170
171 // should be able to create the directory if it doesn't exist.
172 // char sysText[256];
173 // sprintf( systext, "mkdir -p %s", path ); // path is a char * to the string representing the directory you want to create
174 // system( systext );
175
176
177 PList * plist = v.GetComplexData()->GetList();
178 Variant v1 = plist->First(); //plist->PopFront();
179 PError::AssertType(v1, PEAT_STRING, "Argument error in function FileOpenWrite(<string>)]: ");
180
182 Variant v11=Variant(v1);
183 if(out)
184 {
185 // The file exists, so let's do some text munching and
186 // create a new filename to use.
187 std::string fname = (v1);
188 size_t i = fname.rfind(".");
189 std::string base, ext;
190 if(i != 0)
191 {
192 base = fname.substr(0,i);
193 ext = fname.substr(i+1,fname.length());
194 }
195 else
196 {
197 //No . found
198 base = fname;
199 ext = "";
200 }
201 //See if the last character of base is numeric
202 int version = base[base.length()];
203 if(version>0)
204 {
205 base = base.substr(0,base.length()-1);
206 }
207
208 v11= Variant(base) + Variant(version) + Variant(".")+Variant(ext);
209 while( PEBLUtility::FileExists(v11))
210 {
211
212 v11 = Variant(base) + Variant(version++) + Variant(".")+Variant(ext);
213
214 }
215
216 PError::SignalWarning(Variant("File [") + v1 + Variant("] already exists. Using [")+ v11 + Variant("] instead"));
217 }
220 mystream->SetProperty("FILENAME",v11);
221 mystream->SetProperty("DIRECTION","WRITE");
222 PComplexData * pcd = new PComplexData(mystream);
223 Variant tmp = Variant(pcd);
224 delete pcd;
225 pcd=NULL;
226 return tmp;
227
228}
Variant FileExists(std::string path)

References PError::AssertType(), PEBLUtility::FileExists(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), NULL, PEAT_STRING, sdWrite, PError::SignalWarning(), and stASCII.

◆ FilePrint()

Variant PEBLStream::FilePrint ( Variant  v)

This prints contents of variant to file, followed by a newline.

Definition at line 300 of file PEBLStream.cpp.

301{
302 //v[1] should have the file stream
303 //v[2] should have the variant to print
304 PList * plist = v.GetComplexData()->GetList();
305
306 Variant v1 = plist->First(); //plist->PopFront();
307
308
309 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in first parameter of function [FilePrint(<file-stream>, <text>)]: ");
310
311 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
312 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
313
314
315 Variant v2 = plist->Nth(2); //plist->PopFront();
316 std::string s = v2.GetString();
317
318 mystream->WriteString(s + "\n");
319 return (v2+Variant("\n"));
320}
void WriteString(const std::string &buffer)
This method just writes the char* string to the stream.
Definition PStream.cpp:211

References PError::AssertType(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), Variant::GetString(), PList::Nth(), PEAT_FILESTREAM, and PStream::WriteString().

◆ FilePrint_()

Variant PEBLStream::FilePrint_ ( Variant  v)

This prints contents of variant to file, without appending a newline.

Definition at line 322 of file PEBLStream.cpp.

323{
324 //v[1] should have the file stream
325 //v[2] should have the variant to print
326 PList * plist = v.GetComplexData()->GetList();
327
328 Variant v1 = plist->First(); //plist->PopFront();
329
330 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in first parameter of function [FilePrint_(<file-stream>, <text>)]: ");
331
332 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
333 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
334
335 Variant v2 = plist->Nth(2); //plist->PopFront();
336 mystream->WriteString(v2);
337 return v2;
338}

References PError::AssertType(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), PList::Nth(), PEAT_FILESTREAM, and PStream::WriteString().

◆ FileReadCharacter()

Variant PEBLStream::FileReadCharacter ( Variant  v)

Reads a character from a file.

Definition at line 340 of file PEBLStream.cpp.

341{
342 //v[1] should have the file stream
343 PList * plist = v.GetComplexData()->GetList();
344
345 Variant v1 = plist->First(); //plist->PopFront();
346
347 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in function [FileReadCharacter(<file-stream>)]: ");
348 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
349
350 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
351 char c = (mystream->ReadChar());
352 return Variant((char)c);
353}
char ReadChar()
Definition PStream.cpp:230

References PError::AssertType(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), PEAT_FILESTREAM, and PStream::ReadChar().

◆ FileReadLine()

Variant PEBLStream::FileReadLine ( Variant  v)

Reads until the next line.

Definition at line 372 of file PEBLStream.cpp.

373{
374 PList * plist = v.GetComplexData()->GetList();
375 //v[1] should have the file stream
376 Variant v1 = plist->First();// plist->PopFront();
377
378 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in function [FileReadLine(<file-stream>)]: ");
379 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
380 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
381
382 return Variant(mystream->ReadLineClean());
383}
std::string ReadLineClean()
Definition PStream.cpp:323

References PError::AssertType(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), PEAT_FILESTREAM, and PStream::ReadLineClean().

◆ FileReadList()

Variant PEBLStream::FileReadList ( Variant  v)

Places all words in file into a list.

This function takes a filename as an argument. It Opens the file, and reads in each line of the file into a string, which it places in a list that it returns. It closes the file afterward.

Definition at line 391 of file PEBLStream.cpp.

392{
393
394 //v[1] should have the filename
395 PList * plist = v.GetComplexData()->GetList();
396
397 Variant v1 = plist->First(); //plist->PopFront();
398 PError::AssertType(v1, PEAT_STRING, "Argument error in function [FileReadList(<filename>)]: ");
399
400 //Search through the paths for the file, because it may be a 'special' file.
401 string filename = Evaluator::gPath.FindFile(v1.GetString());
402
403 if(filename == "")
404 PError::SignalFatalError(string("Unable to find file [") + v1.GetString() + string("]."));
405
406 //It must be good, so open it.
407 PStream * mystream = new PStream(filename,sdRead, stASCII);
408
409
410
411 PList * returnlist = new PList();
412 std::string tmpstring;
413 while(!mystream->Eof())
414 {
415 tmpstring = mystream->ReadLineClean();
416
417 if(strcmp("",tmpstring.c_str()) && //Ignore blank lines
418 strncmp("#",tmpstring.c_str(),1) //Ignore lines starting with #
419 )
420 {
421 returnlist->PushBack(tmpstring);
422 }
423 }
424 mystream->Close();
425 delete mystream;
426
428 PComplexData * pcd = new PComplexData(tmp2);
429 Variant tmp3 = Variant(pcd);
430 delete pcd;
431 pcd=NULL;
432 return tmp3;
433}
void PushBack(const Variant &v)
Definition PList.cpp:149

References PError::AssertType(), PStream::Close(), PStream::Eof(), PEBLPath::FindFile(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), Variant::GetString(), Evaluator::gPath, NULL, PEAT_STRING, PList::PushBack(), PStream::ReadLineClean(), sdRead, PError::SignalFatalError(), and stASCII.

◆ FileReadTable()

Variant PEBLStream::FileReadTable ( Variant  v)

Makes a list of lists, with each row contained in a list.

Give this function a filename, and it will read it into a list of lists; each line is a list, and the (optional) token-separated elements are the items of the list.

Definition at line 439 of file PEBLStream.cpp.

440{
441 //v[1] should have the file stream
442 PList * plist = v.GetComplexData()->GetList();
443 Variant v1 = plist->First(); //plist->PopFront();
444 PError::AssertType(v1, PEAT_STRING, "Argument error in first parameter of function [FileReadTable(<list>,opt:<sep>)]: ");
445
446 //Search through the paths for the file, because it may be a 'special' file.
447 string filename = Evaluator::gPath.FindFile(v1.GetString());
448
449 if(filename == "")
450 PError::SignalFatalError(string("Unable to find file [") +v1.GetString() + string("]."));
451
452 //It must be good, so open it.
453 PStream * myStream = new PStream(filename,sdRead, stASCII);
454
455 char separator;
456 //See if there is another parameter; if there is, it is the token separator.
457 if(plist->Length()>1)
458 {
459 PError::AssertType(plist->Nth(2), PEAT_STRING, "Argument error in second parameter of function [FileReadTable(<list>,opt:<sep>)]: ");
460 std::string tmp = plist->Nth(2);
461 separator = tmp[0];
462
463 }
464 else
465 {
466 separator = ' ';
467 }
468
469 //Make an outer list to put everything in.
470
471 PList * returnlist = new PList();
472
473 //Make an inner list
474 Variant innerlist;
475
476 std::string tmpstring;
477
478 while(!myStream->Eof())
479 {
480
481 tmpstring = myStream->ReadLineClean();
482 if((strcmp("",tmpstring.c_str()) == 0) || //Ignore blank lines
483 (strncmp("#",tmpstring.c_str(),1)==0) //Ignore lines starting with #
484 )
485 {
486
487 //This line is garbage, so read it and throw it away.
488
489 }
490 else
491 {
492 innerlist = PEBLUtility::Tokenize(tmpstring.c_str(),separator);
493 returnlist->PushBack(innerlist);
494 }
495 }
496 myStream->Close();
497 delete myStream;
499 PComplexData * pcd = new PComplexData(tmp2);
500 Variant tmp3 = Variant(pcd);
501 delete pcd;
502 pcd=NULL;
503 return tmp3;
504
505}
unsigned long Length() const
Definition PList.h:89
Variant Tokenize(const char *line, char separator)

References PError::AssertType(), PStream::Close(), PStream::Eof(), PEBLPath::FindFile(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), Variant::GetString(), Evaluator::gPath, PList::Length(), PList::Nth(), NULL, PEAT_STRING, PList::PushBack(), PStream::ReadLineClean(), sdRead, PError::SignalFatalError(), stASCII, and PEBLUtility::Tokenize().

◆ FileReadText()

Variant PEBLStream::FileReadText ( Variant  v)

This will read all of the text in a file into a single variant.

This function takes a filename as an argument. It Opens the file, and reads in the entire file as a string, which it returns, and closes the file afterward. It ignores any lines that begin with #, and converts '
' to [10], which is later parsed as a carriage return.

Definition at line 513 of file PEBLStream.cpp.

514{
515
516 //v[1] should have the filename
517 PList * plist = v.GetComplexData()->GetList();
518 Variant v1 = plist->First(); //plist->PopFront();
519 PError::AssertType(v1, PEAT_STRING, "Argument error in function [FileReadText(<filename>)]: ");
520
521 //Search through the paths for the file, because it may be a 'special' file.
522 string filename = Evaluator::gPath.FindFile(v1.GetString());
523
524 if(filename == "")
525 PError::SignalFatalError(string("Unable to find file [") + v1.GetString() + string("]."));
526
527 //It must be good, so open it.
528 PStream * mystream = new PStream(filename,sdRead, stASCII);
529
530
531 Variant returnText = "";
532 std::string tmpstring;
533 while(!mystream->Eof())
534 {
535 tmpstring = mystream->ReadLine();
536
537 if( strncmp("#",tmpstring.c_str(),1) //Ignore lines starting with #
538 )
539 {
540 //This is wrong--it will add extra space where it is not needed.
541 returnText = returnText + Variant(tmpstring);
542 }
543 }
544 mystream->Close();
545 delete mystream;
546
547 return returnText;
548}
std::string ReadLine()
Definition PStream.cpp:290

References PError::AssertType(), PStream::Close(), PStream::Eof(), PEBLPath::FindFile(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), Variant::GetString(), Evaluator::gPath, PEAT_STRING, PStream::ReadLine(), sdRead, PError::SignalFatalError(), and stASCII.

◆ FileReadWord()

Variant PEBLStream::FileReadWord ( Variant  v)

Reads everything up until the next space/newline, dropping all initial spaces/newlines

Definition at line 355 of file PEBLStream.cpp.

356{
357 //v[1] should have the file stream
358 PList * plist = v.GetComplexData()->GetList();
359
360 Variant v1 = plist->First(); //plist->PopFront();
361
362 PError::AssertType(v1, PEAT_FILESTREAM, "Argument error in function [FileReadWord(<file-stream>)]: ");
363
364 counted_ptr<PEBLObjectBase> tmp2 = (v1.GetComplexData())->GetObject();
365 PStream * mystream = dynamic_cast<PStream*>(tmp2.get());
366
367 return Variant(mystream->ReadToken(' '));
368}
std::string ReadToken(const char separator)
This reads up until the next separator token (or eof character)
Definition PStream.cpp:251

References PError::AssertType(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PComplexData::GetList(), PEAT_FILESTREAM, and PStream::ReadToken().

◆ Format()

Variant PEBLStream::Format ( Variant  v)

This operates like print but without the printing. Useless right now, but could be used for formatting output, changing numbers to text, etc.

Definition at line 138 of file PEBLStream.cpp.

139{
140
141 PList * plist = v.GetComplexData()->GetList();
142 Variant v1 = plist->First();
143 PError::SignalFatalError("Function [Format()] not implemented.");
144 return v1;
145}

References PList::First(), Variant::GetComplexData(), PComplexData::GetList(), and PError::SignalFatalError().

◆ GetData()

Variant PEBLStream::GetData ( Variant  v)

Definition at line 1040 of file PEBLStream.cpp.

1041{
1042 return Variant("");
1043}

◆ GetHTTPFile()

Variant PEBLStream::GetHTTPFile ( Variant  v)

Definition at line 1190 of file PEBLStream.cpp.

1191{
1192 // Return 503 Service Unavailable status code
1193 return Variant(503);
1194}

◆ GetHTTPText()

Variant PEBLStream::GetHTTPText ( Variant  v)

Definition at line 1196 of file PEBLStream.cpp.

1197{
1198 // Return [503, ""] list (status code 503, empty text)
1199 PList * returnlist = new PList();
1200 returnlist->PushBack(Variant(503));
1201 returnlist->PushBack(Variant(""));
1203 PComplexData * pcd = new PComplexData(tmp2);
1204 Variant tmp3 = Variant(pcd);
1205 delete pcd;
1206 pcd=NULL;
1207 return tmp3;
1208}

References NULL, and PList::PushBack().

◆ GetIPAddress()

Variant PEBLStream::GetIPAddress ( Variant  v)

Definition at line 1045 of file PEBLStream.cpp.

1046{
1047 return Variant("0.0.0.0");
1048}

◆ GetMyIPAddress()

Variant PEBLStream::GetMyIPAddress ( Variant  v)

Definition at line 1050 of file PEBLStream.cpp.

1051{
1052 return Variant("0.0.0.0");
1053}

◆ MD5File()

Variant PEBLStream::MD5File ( Variant  v)

Definition at line 1235 of file PEBLStream.cpp.

1236{
1237 PList * plist = v.GetComplexData()->GetList();
1238 Variant v1 = plist->First();// plist->PopFront();
1239 PError::AssertType(v1, PEAT_STRING, "Argument error in first parameter of function [MD5File(<fname>)]:");
1240 std::string sum = PEBLUtility::MD5File(v1);
1241 return Variant(sum);
1242}
std::string MD5File(const std::string &filename)

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PEBLUtility::MD5File(), and PEAT_STRING.

◆ MD5Sum()

Variant PEBLStream::MD5Sum ( Variant  v)

Definition at line 1225 of file PEBLStream.cpp.

1226{
1227 PList * plist = v.GetComplexData()->GetList();
1228 Variant v1 = plist->First();// plist->PopFront();
1229 PError::AssertType(v1, PEAT_STRING, "Argument error in first parameter of function [MD5Sum(<text>)]:");
1230 std::string sum = PEBLUtility::MD5String(v1);
1231 return Variant(sum);
1232}
std::string MD5String(const std::string &text)

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PEBLUtility::MD5String(), and PEAT_STRING.

◆ OpenNetworkListener()

Variant PEBLStream::OpenNetworkListener ( Variant  v)

Definition at line 1012 of file PEBLStream.cpp.

1013{
1014 PError::SignalWarning("Network support not compiled in. OpenNetworkListener returning 0 (failed).");
1015 return Variant(0);
1016}

References PError::SignalWarning().

◆ ParseJSON()

Variant PEBLStream::ParseJSON ( Variant  v)

Definition at line 1323 of file PEBLStream.cpp.

1324{
1325 PList * plist = v.GetComplexData()->GetList();
1326 Variant v1 = plist->First();
1327 PError::AssertType(v1, PEAT_STRING, "Argument error in first parameter of function [ParseJSON(<json-text>)]: ");
1328
1330 return out;
1331}
Variant ParseJSON(const std::string &text)

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PEBLUtility::ParseJSON(), and PEAT_STRING.

◆ PostHTTP()

Variant PEBLStream::PostHTTP ( Variant  v)

Definition at line 1210 of file PEBLStream.cpp.

1211{
1212 // Return 503 Service Unavailable
1213 return Variant(503);
1214}

◆ PostHTTPFile()

Variant PEBLStream::PostHTTPFile ( Variant  v)

Definition at line 1216 of file PEBLStream.cpp.

1217{
1218 // Return 503 Service Unavailable
1219 return Variant(503);
1220}

◆ Print()

Variant PEBLStream::Print ( Variant  v)

This prints the argument with a newline character.

Definition at line 115 of file PEBLStream.cpp.

116{
117
118 PList * plist = v.GetComplexData()->GetList();
119 Variant v1 = plist->First();
120 //No type assertion is needed, because everything should work.
121 cout << v1 << endl;
122
123 return v1;
124}

References PList::First(), Variant::GetComplexData(), and PComplexData::GetList().

◆ Print_()

Variant PEBLStream::Print_ ( Variant  v)

This prints the argument without a linebreak at the end.

Definition at line 127 of file PEBLStream.cpp.

128{
129
130 PList * plist = v.GetComplexData()->GetList();
131 Variant v1 = plist->First();
132 //No type assertion is needed, because everything should work.
133 cout << v1 << flush;
134
135 return v1;
136}

References PList::First(), Variant::GetComplexData(), and PComplexData::GetList().

◆ SendData()

Variant PEBLStream::SendData ( Variant  v)

Definition at line 1035 of file PEBLStream.cpp.

1036{
1037 return Variant(0);
1038}

◆ SetNetworkPort()

Variant PEBLStream::SetNetworkPort ( Variant  v)

Definition at line 1001 of file PEBLStream.cpp.

1002{
1003 PError::SignalWarning("Network support not compiled in. SetNetworkPort has no effect.");
1004 return Variant(0);
1005}

References PError::SignalWarning().

◆ WaitForNetworkConnection()

Variant PEBLStream::WaitForNetworkConnection ( Variant  v)

Definition at line 1023 of file PEBLStream.cpp.

1024{
1025 PError::SignalWarning("Network support not compiled in. WaitForNetworkConnection returning 0 (failed).");
1026 return Variant(0);
1027}

References PError::SignalWarning().

◆ WritePNG()

Variant PEBLStream::WritePNG ( Variant  v)

Definition at line 1245 of file PEBLStream.cpp.

1246{
1247 //v[1] should have an object/window name.
1248 //v[2] should have a filename
1249
1250 PList * plist = v.GetComplexData()->GetList();
1251 Variant v1 = plist->First();// plist->PopFront();
1252 PError::AssertType(v1, PEAT_STRING, "Argument error in first parameter of function [WritePNG(<filename>,<object>,<range>)]: ");
1253
1254
1255 Variant v2 = plist->Nth(2);
1256 PError::AssertType(v2, PEAT_WINDOW, "Argument error in second parameter of function [WritePNG(<filename>,<object>,<range>)]: ");
1257 counted_ptr<PEBLObjectBase> tmp2 = (v2.GetComplexData())->GetObject();
1258
1259
1260 Variant v3 = plist->Nth(3);
1261
1262
1263 PError::AssertType(v3, PEAT_LIST, "Argument error in third parameter of function [WritePNG(<filename>,<object>,<range>)]: ");
1264 // counted_ptr<PEBLObjectBase> tmp3 = (range.GetComplexData())->GetObject();
1265
1266 PList * range = (PList*)(v3.GetComplexData()->GetObject().get());
1267
1268
1269
1270 PlatformWindow * myWin = dynamic_cast<PlatformWindow*>(tmp2.get());
1271
1272 //range must have four numeric values
1273 //start off with entire window.
1274 int x=0;
1275 int y=0;
1276 int w = myWin->GetWidth();
1277 int h = myWin->GetHeight();
1278
1279 //if third argument is properly formed, select the subrange
1280 long int length = range->Length();
1281 if(length == 4)
1282 {
1283 int newx=range->Nth(1);
1284 int newy=range->Nth(2);
1285 int neww=range->Nth(3);
1286 int newh=range->Nth(4);
1287
1288 if(newx<0 || newx > myWin->GetWidth() ||
1289 newy < 0 || newy > myWin->GetHeight() ||
1290 neww < 0 || (neww + newx ) > myWin->GetWidth() ||
1291 newh < 0 || (newh + newy) > myWin->GetHeight())
1292 {
1293 PError::SignalWarning("Screenshot bounds outside range of screen. Using entire screen");
1294 } else
1295 {
1296 x = newx;
1297 y = newy;
1298 h = newh;
1299 w = neww;
1300
1301 }
1302
1303
1304 }
1305
1306
1307
1308
1309 int result = myWin->SaveScreenShot(x,y,w,h,v1);
1310
1311
1312 if(result != 0)
1313 {
1314 PError::SignalWarning(Variant("Failed to write png file ") + v2);
1315 }
1316
1317 return Variant(result);
1318}
@ PEAT_LIST
Definition PError.h:61
@ PEAT_WINDOW
Definition PError.h:70
counted_ptr< PEBLObjectBase > GetObject() const
int SaveScreenShot(int x, int y, int w, int h, const Variant fname)
virtual pInt GetHeight() const
virtual pInt GetWidth() const

References PError::AssertType(), PList::First(), counted_ptr< X >::get(), Variant::GetComplexData(), PlatformWindow::GetHeight(), PComplexData::GetList(), PComplexData::GetObject(), PlatformWindow::GetWidth(), PList::Length(), PList::Nth(), PEAT_LIST, PEAT_STRING, PEAT_WINDOW, PlatformWindow::SaveScreenShot(), and PError::SignalWarning().

Variable Documentation

◆ FunctionTable

PEBL_Function_Type PEBLStream::FunctionTable[]

Definition at line 123 of file Functions.h.

124 {
125 {(char*)"PRINT", Print, 1, 1},
126 {(char*)"PRINT_", Print_, 1, 1},
127 {(char*)"FORMAT", Format, 1, 1},
128 {(char*)"FILEOPENREAD", FileOpenRead, 1, 1},
129 {(char*)"FILEOPENWRITE", FileOpenWrite, 1, 1},
130 {(char*)"FILEOPENOVERWRITE", FileOpenOverwrite, 1,1},
131 {(char*)"FILEOPENAPPEND", FileOpenAppend, 1, 1},
132 {(char*)"FILECLOSE", FileClose, 1, 1},
133 {(char*)"FILEPRINT", FilePrint, 2, 2},
134 {(char*)"FILEPRINT_", FilePrint_, 2, 2},
135 {(char*)"FILEREADCHARACTER", FileReadCharacter,1, 1},
136 {(char*)"FILEREADWORD", FileReadWord, 1, 1},
137 {(char*)"FILEREADLINE", FileReadLine, 1, 1},
138 {(char*)"FILEREADLIST", FileReadList, 1, 1},
139 {(char*)"FILEREADTABLE", FileReadTable, 1, 2},
140 {(char*)"FILEREADTEXT", FileReadText, 1, 1},
141
142 {(char*)"ENDOFLINE", EndOfLine, 1, 1},
143 {(char*)"ENDOFFILE", EndOfFile, 1, 1},
144 {(char*)"APPENDFILE", AppendFile, 2, 2},
145 {(char*)"COPYFILE", CopyFile, 2, 2},
146
147 // Network functions - now always available (stub implementations when PEBL_NETWORK not defined)
148 {(char*)"CONNECTTOIP", ConnectToIP, 2, 2},
149 {(char*)"CONNECTTOHOST", ConnectToHost, 2, 2},
150
151 {(char*)"SETNETWORKPORT", SetNetworkPort, 1, 1},
152 {(char*)"CHECKFORNETWORKCONNECTION", CheckForNetworkConnection, 1, 1},
153 {(char*)"OPENNETWORKLISTENER", OpenNetworkListener, 1, 1},
154
155 {(char*)"ACCEPTNETWORKCONNECTION", AcceptNetworkConnection, 2,2},
156 {(char*)"WAITFORNETWORKCONNECTION", WaitForNetworkConnection, 1,1},
157 {(char*)"CLOSENETWORKCONNECTION", CloseNetworkConnection, 1,1},
158
159 {(char*)"SENDDATA", SendData, 2,2},
160 {(char*)"GETDATA", GetData, 2,2},
161 {(char*)"GETMYIPADDRESS", GetMyIPAddress, 1,1},
162
163 // HTTP functions - now always available (stub implementations when PEBL_HTTP not defined)
164 {(char*)"GETHTTPFILE", GetHTTPFile, 4,4},
165 {(char*)"GETHTTPTEXT", GetHTTPText, 3,3},
166 {(char*)"POSTHTTP", PostHTTP, 5,5},
167 {(char*)"POSTHTTPFILE", PostHTTPFile, 6,6},
168
169 {(char*)"MD5SUM", MD5Sum, 1,1},
170 {(char*)"MD5FILE", MD5File, 1,1},
171
172
173 {(char*)"WRITEPNG", WritePNG, 3,3},
174 {(char*)"PARSEJSON", ParseJSON, 1,1},
175
176 // LSL (Lab Streaming Layer) functions - now always available (stub implementations when PEBL_USE_LSL not defined)
177 {(char*)"CREATELSLOUTLET", CreateLSLOutlet, 1,3},
178 {(char*)"SENDLSLMARKER", SendLSLMarker, 1,1},
179 {(char*)"CLOSELSLOUTLET", CloseLSLOutlet, 0,0},
180 {(char*)"LSLHASCONSUMERS", LSLHasConsumers, 0,0},
181 {(char*)"LSLLOCALCLOCK", LSLLocalClock, 0,0},
182
183#ifdef PEBL_USEPORTS
184 {(char*)"OPENPPORT",OpenPPort, 1,1},
185 {(char*)"SETPPORTSTATE",SetPPortState, 2,2},
186 {(char*)"GETPPORTSTATE",GetPPortState, 1,1},
187 {(char*)"SETPPORTMODE", SetPPortMode, 2,2},
188
189 {(char*)"OPENCOMPORT", OpenComPort, 2,3},
190 {(char*)"COMPORTSENDBYTE", ComPortSendByte, 2,2},
191 {(char*)"COMPORTGETBYTE", ComPortGetByte, 1,1},
192
193
194#endif
195
196
197 {0, 0, 0, 0}
198 };
Variant SendLSLMarker(Variant v)
Definition PEBLLSL.cpp:204
Variant CloseLSLOutlet(Variant v)
Definition PEBLLSL.cpp:210
Variant LSLHasConsumers(Variant v)
Definition PEBLLSL.cpp:216
Variant CreateLSLOutlet(Variant v)
Definition PEBLLSL.cpp:198
Variant LSLLocalClock(Variant v)
Definition PEBLLSL.cpp:222

Referenced by Loader::LoadLibraryFunctions().