003
21.04.2004, 03:46 Uhr
Pablo
Supertux (Operator)
|
Gut, ich hab folgendes in C gemacht, leider hab ich ein paar kleine Bugs entdeckt, und ich weiß nicht warum.
C++: |
#include <stdio.h> #include <stdlib.h> #define MAX_LENGTH 4096
void print_pages(int current, int pages, int links, int lastlink) { int i; char umgebung[MAX_LENGTH]; char templinks[MAX_LENGTH]; char temprechts[MAX_LENGTH]; char temp[MAX_LENGTH]; char* verify; int firstumgebung=0; int lastlinks=0; int lastumgebung=0; int firstright=0; sprintf(umgebung, ">%d<", current); *temp=0; *templinks=0; *temprechts=0; for (i=1; i<=links; ++i) { strcpy(temp, templinks); if (current-i > 0) sprintf(templinks, "[%d], ", current-i); else *temp=0; strcat(templinks, temp); if (current+i <= pages) { sprintf(temp, "[%d], ", current + i); lastumgebung=i+current; } else *temp=0; if (umgebung[strlen(umgebung)-1]!=' ') strcat(umgebung, ", "); strcat(umgebung, temp); } strcat(templinks, umgebung); strcpy(umgebung, templinks); sscanf(umgebung, "[%d]", &firstumgebung);
*templinks=0;
for(i=1; i<=lastlink && i<current-links; ++i) { sprintf(temp, "[%d]", i); verify = strstr(umgebung,temp); if (!verify) { strcat(temp, ", "); strcat(templinks, temp); lastlinks=i; } }
if (current < lastlink) { for(i=current+1; i<=lastlink; ++i) { sprintf(temp, "[%d], ", i); strcat(umgebung, temp); lastlinks=i; } }
if (firstumgebung-1!=lastlinks) { verify=strrchr(templinks, ','); if (verify) { *verify=0; if (current < lastlink) { if (lastlink+1==firstumgebung) strcat(templinks, " ... "); else strcat(templinks, ", "); } else strcat(templinks, " ... "); } } strcat(templinks, umgebung); strcpy(umgebung, templinks);
*templinks=0;
for(i=pages; i>pages-lastlink && i>current+links; --i) { sprintf(temp, "[%d]", i); verify = strstr(umgebung,temp); if (!verify) { strcat(temp, ", "); strcpy(templinks, temprechts); strcpy(temprechts, temp); strcat(temprechts, templinks); firstright=i; } }
temprechts[strlen(temprechts)-2]=0;
if (lastumgebung+1==firstright) { strcat(umgebung, temprechts); } else { umgebung[strlen(umgebung)-2]=0; if (current!=pages) strcat(umgebung, " ... "); strcat(umgebung, temprechts); }
printf ("%d Seite(n) %s %s %s\n", pages, current!=1 ? "Zurück" : "", umgebung, current!=pages ? "Weiter" : ""); }
int main(int argc, char** argv) {
if (argc != 5) { fprintf(stderr, "usage: %s currentpage numofpages numoflinks firstlink\n", argv[0]); return 0; }
print_pages(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), atoi(argv[4]));
return 0; }
|
bash: |
$ ./pager 31 276 3 3 276 Seite(n) Zurück [1], [2], [3] ... [28], [29], [30], >31<, [32], [33], [34] ... [274], [275], [276] Weiter
|
So hab ich es mir vorgestellt. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! |