home *** CD-ROM | disk | FTP | other *** search
/ Geek 6 / Geek-006.iso / linux / video / xmovie-1.5.3.tar.gz / xmovie-1.5.3.tar / xmovie-1.5.3 / guicast / stringfile.C < prev    next >
C/C++ Source or Header  |  2000-11-29  |  4KB  |  253 lines

  1. #include "stringfile.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. StringFile::StringFile(long length)
  7. {
  8.     pointer = 0;
  9.     if(length == 0)
  10.     {
  11.         this->length = 100000;
  12.     }
  13.     else
  14.     {
  15.         this->length = length;
  16.     }
  17.     string = new char[this->length + 1];
  18.     available = this->length;
  19. }
  20.  
  21. StringFile::StringFile(char *filename)
  22. {
  23.     FILE *in;
  24.     if(in = fopen(filename, "rb"))
  25.     {
  26.         fseek(in, 0, SEEK_END);
  27.         length = ftell(in);
  28.         available = length;
  29.         fseek(in, 0, SEEK_SET);
  30.         string = new char[length + 5];
  31.  
  32.         fread(string, length, 1, in);
  33.         for(int i = 0; i < 5; i++) string[length + i] = 0;
  34.         fclose(in);
  35.     }
  36.     else
  37.     {
  38.         //printf("File not found: %s\n", filename);
  39.         length = 0;
  40.         available = 1;
  41.         string = new char[1];
  42.         string[0] = 0;
  43.     }
  44.     
  45.     pointer = 0;
  46. }
  47.  
  48. StringFile::~StringFile()
  49. {
  50.     delete string;
  51. }
  52.  
  53. int StringFile::write_to_file(char *filename)
  54. {
  55.     FILE *out;
  56.     if(out = fopen(filename, "wb"))
  57.     {
  58.         fwrite(string, pointer, 1, out);
  59.     }
  60.     else
  61.     {
  62.         printf("Couldn't open %s for writing.\n", filename);
  63.         return 1;
  64.     }
  65.     fclose(out);
  66.     return 0;
  67. }
  68.  
  69. int StringFile::read_from_string(char *string)
  70. {
  71.     int i;
  72.     
  73.     delete this->string;
  74.     length = strlen(string);
  75.     available = length;
  76.     this->string = new char[length + 5];
  77.     strcpy(this->string, string);
  78.     for(i = 0; i < 5; i++) this->string[length + i] = 0;
  79.     return 0;
  80. }
  81.  
  82. long StringFile::get_length()
  83. {
  84.     return strlen(string);
  85. }
  86.  
  87. long StringFile::get_pointer()
  88. {
  89.     return pointer;
  90. }
  91.  
  92. int StringFile::readline(char *arg2)
  93. {    
  94.     readline(string1, arg2);
  95.     return 0;
  96. }
  97.  
  98. int StringFile::readline()
  99. {    
  100.     readline(string1, string1);
  101.     return 0;
  102. }
  103.  
  104. int StringFile::readline(float *arg2)
  105. {
  106.     readline(string1, arg2);
  107.     return 0;
  108. }
  109.  
  110. int StringFile::readline(int *arg2)
  111. {
  112.     readline(string1, arg2);
  113.     return 0;
  114. }
  115.  
  116. int StringFile::readline(long *arg2)
  117. {
  118.     readline(string1, arg2);
  119.     return 0;
  120. }
  121.  
  122. int StringFile::readline(Freq *arg2)
  123. {
  124.     readline(string1, &(arg2->freq));
  125.     return 0;
  126. }
  127.  
  128. int StringFile::readline(char *arg1, char *arg2)
  129. {
  130.     int i, len, max;
  131.     len = 0; max = 1024;
  132.     
  133.     while(string[pointer] == ' ') pointer++; // skip indent
  134.     arg1[0] = 0;    arg2[0] = 0;
  135.     
  136.     for(i = 0; string[pointer] != ' ' && string[pointer] != '\n' && len < max; i++, pointer++)
  137.     {     // get title
  138.         arg1[i] = string[pointer];
  139.         len++;
  140.     }
  141.     arg1[i] = 0;
  142.  
  143.     if(string[pointer] != '\n')
  144.     {       // get value
  145.         pointer++;      // skip space
  146.         for(i = 0; string[pointer] != '\n' && len < max; i++, pointer++)
  147.         {
  148.             arg2[i] = string[pointer];
  149.             len++;
  150.         }
  151.         arg2[i] = 0;
  152.     }
  153.     pointer++;      // skip eoln
  154.     return 0;
  155. }
  156.  
  157. int StringFile::backupline()
  158. {
  159.     while(string[pointer] != 10 && pointer > 0)
  160.     {
  161.         pointer--;     // first eoln
  162.     }
  163.     if(string[pointer] == 10) pointer--;        // skip eoln
  164.     
  165.     while(string[pointer] != 10 && pointer > 0)
  166.     {
  167.         pointer--;     // second eoln
  168.     }
  169.     
  170.     if(string[pointer] == 10) pointer++;      // skip eoln
  171.     return 0;
  172. }
  173.  
  174. int StringFile::readline(char *arg1, long *arg2)
  175. {
  176.     readline(arg1, string1);
  177.     *arg2 = atol(string1);
  178.     return 0;
  179. }
  180.  
  181. int StringFile::readline(char *arg1, int *arg2)
  182. {
  183.     long arg;
  184.     readline(arg1, &arg);
  185.     *arg2 = (int)arg;
  186.     return 0;
  187. }
  188.  
  189. int StringFile::readline(char *arg1, float *arg2)
  190. {
  191.     readline(arg1, string1);
  192.     *arg2 = atof(string1);
  193.     return 0;
  194. }
  195.  
  196. int StringFile::writeline(char *arg1, int indent)
  197. {
  198.     int i;
  199.     
  200. // reallocate the string
  201.     if(pointer + strlen(arg1) > available)
  202.     {
  203.         char *newstring = new char[available * 2];
  204.         strcpy(newstring, string);
  205.         delete string;
  206.         available *= 2;
  207.         length *= 2;
  208.         string = newstring;
  209.     }
  210.     
  211.     for(i = 0; i < indent; i++, pointer++) string[pointer] = ' ';
  212.     sprintf(&string[pointer], arg1);
  213.     pointer += strlen(arg1);
  214.     return 0;
  215. }
  216.  
  217. int StringFile::writeline(char *arg1, char *arg2, int indent)
  218. {
  219.     int i;
  220.     
  221.     sprintf(string1, "%s %s\n", arg1, arg2);
  222.     writeline(string1, indent);
  223.     return 0;
  224. }
  225.  
  226. int StringFile::writeline(char *arg1, long arg2, int indent)
  227. {
  228.     sprintf(string1, "%s %ld\n", arg1, arg2);
  229.     writeline(string1, indent);
  230.     return 0;
  231. }
  232.  
  233. int StringFile::writeline(char *arg1, int arg2, int indent)
  234. {
  235.     sprintf(string1, "%s %d\n", arg1, arg2);
  236.     writeline(string1, indent);
  237.     return 0;
  238. }
  239.  
  240. int StringFile::writeline(char *arg1, float arg2, int indent)
  241. {
  242.     sprintf(string1, "%s %f\n", arg1, arg2);
  243.     writeline(string1, indent);
  244.     return 0;
  245. }
  246.  
  247. int StringFile::writeline(char *arg1, Freq arg2, int indent)
  248. {    
  249.     sprintf(string1, "%s %d\n", arg1, arg2.freq);
  250.     writeline(string1, indent);
  251.     return 0;
  252. }
  253.