"Linux Kernel Source Code Screensaver (http://micrux.net/?p=66)" - как написать хранитель экрана, отображающий случайные части исходных текстов Linux ядра.URL: http://micrux.net/?p=66
Новость: http://www.opennet.me/opennews/art.shtml?num=13618
Вот еслиб он части исходных текстов Windows показывал ... :)
Амбиций автору не занимать, даже програмулину на си написал, какой! :)
хотя можно было все одним скриптом.
Хм! И как же вы такую графику скриптом то сделаете?
>Хм! И как же вы такую графику скриптом то сделаете?
>Хм! И как же вы такую графику скриптом то сделаете?Когда читать научимся?
"Now just to clarify, I did not write my own screensaver. I’m actually using the phosphor screensaver under xscreensaver."
Дохлый сайт уже.Вот, ещё живое - http://yurik-notes.blogspot.com/2008/01/linux.html
А сейчас все гораздо проще...
Открываем файл
# vi /usr/share/applications/screensavers/phosphor.desktopи заменяем параметр Exec на своё
Exec=phosphor -root -program "cat `find /usr/src/linux/ -name '*.c' -size -5k| argshuf`" -delay 27317 -scale 2 -ticks 13
Esc:wq
Программка argshuf выглядит так
/*
*
* # cc -g -O2 -Wall -pedantic argshuf.c -o argshuf
* # cp -vfi argshuf /usr/bin/
*
*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>#define INITSIZE 31
int main(void) {
char **list, **temp, input[200];
int size = INITSIZE, i = 0, j;
struct timeval time;gettimeofday(&time,NULL);
srand(time.tv_usec);
list = malloc(size*sizeof(char *));while(!feof(stdin)) {
fscanf(stdin,"%s\n",input);
if(i >= size) {
temp = (char **) calloc((size*=2),sizeof(char *));
for(j=0;j<i;++j) temp[j] = list[j];
free(list);
list = temp;
}
list[i] = (char *) malloc((strlen(input)+1)*sizeof(char));
strcpy(list[i++],input);
}printf("%s\n",list[(int)((double)i * (rand() / (RAND_MAX + 1.0)))]);
for(j=0;j<i;++j) free(list[j]);
free(list);return EXIT_SUCCESS;
}
argshuf скрипт, положить в /usr/bin#!/bin/bash
# argument shuffler, from input lines chooses random only one string
i=0
while read myline
do
lines[$i]=$myline
i=$i+1
done
N=${#lines[@]}-1
if ((($N) < 2)); then
exit -1
fiecho ${lines[(($RANDOM%($N)+1))]}
>[оверквотинг удален]
> strcpy(list[i++],input);
> }
>
> printf("%s\n",list[(int)((double)i * (rand() / (RAND_MAX + 1.0)))]);
>
> for(j=0;j<i;++j) free(list[j]);
> free(list);
>
> return EXIT_SUCCESS;
>}