#include <string>
#include <vector>
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[]) {
if (argc != 3) {
cerr << "Usage: pics2html <num-hour-split> <num-min-split>" << endl;
cerr << "Reads from standard input, and outputs SHTML to standard output." << endl;
cerr << "For example: " << endl;
cerr << " pics2shtml 10 10 < data.txt > include.shtml" << endl;
cerr << "will split each hour into 10 parts (6 min each), and each minute" << endl;
cerr << "into 10 parts (6 sec each). Every 6 sec, a different picture will" << endl;
cerr << "appear, but cycling every minute for 6 minutes, after which a" << endl;
cerr << "different set of 10 pictures will be used." << endl;
cerr << endl;
cerr << "Standard input is interpreted as chunks, delimited by blank lines." << endl;
cerr << "Each chunk corresponds to a possible outcome of the program." << endl;
return 0;
}
time_t tim;
time(&tim);
srandom(tim);
int Nmin, Nsec;
int min[60], sec[60];
sscanf(argv[1], "%d", &Nmin);
sscanf(argv[2], "%d", &Nsec);
int left = 60;
int gap = 60/Nmin;
for (int k = 0; k < Nmin; ++k) {
left -= gap;
min[k] = left;
}
gap = 60/Nsec;
left = 60;
for (int k = 0; k < Nsec; ++k) {
left -= gap;
sec[k] = left;
}
int total = Nmin*Nsec;
vector<string> lines;
// now read in the lines of pictures
string line;
string glob = "";
while (getline(cin, line)) {
if (line.size() == 0) {
if (glob.size() != 0)
lines.push_back(glob);
glob = "";
}
else
glob += " " + line;
}
if (glob.size() != 0)
lines.push_back(glob);
int Nlines_orig = lines.size();
if (lines.size() > total) {
cerr << "Insufficient space for images! Slots = " << total << " but images = " << lines.size() << endl;
}
// now pad the back with random images to make it up to total
cerr << "padding the back with " << total - lines.size() << " images" << endl;
while (lines.size() < total)
lines.push_back(lines[random()%Nlines_orig]);
// now prepare the output
// this is the header, to capture sec and min
cout << "<!--#config timefmt='%S' -->" << endl;
cout << "<!--#set var='sec' value='${DATE_LOCAL}' -->" << endl;
cout << "<!--#config timefmt='%M' -->" << endl;
cout << "<!--#set var='min' value='${DATE_LOCAL}' -->" << endl;
cout << endl;
// loop time
for (int m = 0; m < Nmin; ++m) {
cout << "<!--#";
if (m != 0)
cout << "el";
cout << "if expr='${min} >= " << min[m] << "' -->" << endl;
for (int s = 0; s < Nsec; ++s) {
cout << " <!--#";
if (s != 0)
cout << "el";
cout << "if expr='${sec} >= " << sec[s] << "' -->" << endl;
cout << " " << lines[m*Nsec + s] << endl;
}
cout << " <!--#endif -->" << endl;
}
cout << "<!--#endif -->" << endl;
return 0;
}