home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume5 / screens < prev    next >
Text File  |  1989-02-03  |  5KB  |  197 lines

  1. Path: xanth!nic.MR.NET!hal!ncoast!allbery
  2. From: russ%uokmax@uokmax.ecn.uoknor.edu (Russ 'Random' Smith)
  3. Newsgroups: comp.sources.misc
  4. Subject: v05i038: screens - displays randomly selected file
  5. Message-ID: <8811021857.AA20299@uunet.UU.NET>
  6. Date: 9 Nov 88 02:16:38 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: russ%uokmax@uokmax.ecn.uoknor.edu (Russ 'Random' Smith)
  9. Lines: 185
  10. Approved: allbery@ncoast.UUCP
  11.  
  12. Posting-number: Volume 5, Issue 38
  13. Submitted-by: "Russ 'Random' Smith" <russ%uokmax@uokmax.ecn.uoknor.edu>
  14. Archive-name: screens
  15.  
  16. [A quick scan reveals one BSDism (random()).  Otherwise only the terminal
  17. dependency should provide a problem.  ++bsa]
  18.  
  19. This is an interesting little "toy" that will dsiplay a randomly selected
  20. file from a directory $HOME/.screens.  I wrote it with .logout files in
  21. mind (I still use it in mine), but some enterprising mind might come up with
  22. another use (a terminal lock, perhaps).
  23.  
  24. There is an interesting feature for Zenith terminal users (check the README
  25. and the man page), which may be expanded for use with ANSI people someday.
  26.  
  27. ---- Cut Here and unpack ----
  28. #!/bin/sh
  29. # shar:    Shell Archiver  (v1.22)
  30. #
  31. #    Run the following text with /bin/sh to create:
  32. #      Makefile
  33. #      README
  34. #      screens.6
  35. #      screens.c
  36. #      screens.sh
  37. #
  38. sed 's/^X//' << 'SHAR_EOF' > Makefile &&
  39. XDESTBIN = /usr/local
  40. XDESTMAN = /usr/local/doc
  41. X
  42. X# you will probably want to chown screens to bin or root, but it isn't necessary
  43. X
  44. Xcreate:        screens screens.man
  45. X
  46. Xinstall:    screens screens.man
  47. X        mv screens $(DESTBIN)
  48. X        mv screens.man $(DESTMAN)
  49. X        
  50. Xscreens:    screens.c
  51. X        cc -O -o screens screens.c
  52. X        strip screens
  53. X        chmod 711 screens
  54. X
  55. Xscreens.man:    screens.6
  56. X        nroff -man screens.6 > screens.man
  57. SHAR_EOF
  58. chmod 0640 Makefile || echo "restore of Makefile fails"
  59. sed 's/^X//' << 'SHAR_EOF' > README &&
  60. XScreens is a simple utility to grab a random "screen" from the directory
  61. Xgiven by $HOME/.screens and put it on the terminal screen.  Normally, it's
  62. Xan ascii file, but if you have files in that directory that end in ".g",
  63. Xand have a terminal with Zenith emulation, it will display that file in
  64. XZenith graphics mode.  Naturally, you can always put the graphics escape
  65. Xcodes for whatever terminal in your file.
  66. X
  67. XAny bug reports go to russ@uokmax.UUCP or texsun!uokmax!russ.  Thanks.
  68. X
  69. X
  70. X
  71. SHAR_EOF
  72. chmod 0640 README || echo "restore of README fails"
  73. sed 's/^X//' << 'SHAR_EOF' > screens.6 &&
  74. X.TH SCREENS 6 "Local Manual                 7/19/88"
  75. X.SH NAME
  76. Xscreens \- Random screen displayer
  77. X.SH SYNOPSIS
  78. X.B screens
  79. X.SH DESCRIPTION
  80. X.I Screens 
  81. Xscans your
  82. X.BI $HOME/.screens
  83. Xdirectory, and picks a random file to display
  84. Xon the screen.  If the filename ends with
  85. X.I .g,
  86. Xit turns on z29a graphics
  87. Xmode first.
  88. X.SH FILES
  89. X$HOME/.screens/*
  90. X.SH BUGS
  91. XIf you have some mutant terminal type which starts with z but isn't zenith
  92. Xgraphics compatible,
  93. X.B screens
  94. Xmay select a zenith screen (if you have one).
  95. X.SH AUTHOR
  96. XRuss Smith
  97. SHAR_EOF
  98. chmod 0640 screens.6 || echo "restore of screens.6 fails"
  99. sed 's/^X//' << 'SHAR_EOF' > screens.c &&
  100. X#include <stdio.h>
  101. X#include <strings.h>
  102. X#include <sys/types.h>
  103. X#include <sys/dir.h>
  104. X#include <sys/stat.h>
  105. X
  106. Xmain()
  107. X{
  108. X    int i,q,filno;
  109. X    int graph = 0;
  110. X    struct direct **nlist;
  111. X    int select();
  112. X    char dirname[80],fname[80];
  113. X
  114. X    srandom(time(0));
  115. X    strcpy(dirname,getenv("HOME"));
  116. X    strcat(dirname,"/.screens");
  117. X    if (chdir(dirname)) {
  118. X        fprintf(stderr,"mode: You must have a $HOME/.screens directory.\n");
  119. X        exit(1);
  120. X    }
  121. X    q = scandir(dirname,&nlist,select,NULL);
  122. X    if (q < 1) {
  123. X        fprintf(stderr,"mode: You must have at least one file in ");
  124. X        fprintf(stderr,"your $HOME/.screens directory.\n");
  125. X        exit(1);
  126. X    }
  127. X    filno = ((random()>>4)%q);
  128. X    strcpy(fname,nlist[filno]->d_name);
  129. X    if ((strind(fname,".g") == strlen(fname) - 2) && (!strncmp(getenv("TERM"),"z",1)))
  130. X        graph = 1;
  131. X    if (graph)
  132. X        printf("\033[10m");
  133. X    shofile(fname);
  134. X    if (graph)
  135. X        printf("\033[11m");
  136. X    exit(0);
  137. X}
  138. X
  139. Xint select(dirpt)
  140. Xstruct direct *dirpt;
  141. X{
  142. X    struct stat s;
  143. X
  144. X    stat(dirpt->d_name,&s);
  145. X    if ((s.st_mode & S_IFMT) == S_IFREG)
  146. X        return(1);
  147. X    else
  148. X        return(0);
  149. X}
  150. X
  151. Xint strind(str1,str2)
  152. Xchar *str1,*str2;
  153. X
  154. X{
  155. X    int c,res;
  156. X
  157. X    res = 0;
  158. X    if (str1 != NULL)
  159. X        for (c=0; c<=strlen(str1)-strlen(str2); c++)
  160. X            if (!strncmp(&str1[c],str2,strlen(str2)))
  161. X                return(c);
  162. X}
  163. X
  164. Xnochar(string,c)
  165. Xchar *string,c;
  166. X
  167. X{
  168. X    char *p;
  169. X
  170. X    for (p=string;*p != c && *p != '\0'; ++p)
  171. X        ;
  172. X
  173. X    *p = '\0';
  174. X
  175. X    return;
  176. X}
  177. X
  178. Xshofile(fname)
  179. Xchar *fname;
  180. X
  181. X{
  182. X    FILE *f;
  183. X    int c;
  184. X
  185. X    f = fopen(fname,"r");
  186. X    
  187. X    while ((c=fgetc(f)) != EOF)
  188. X        putchar(c);
  189. X}
  190. X
  191. SHAR_EOF
  192. chmod 0640 screens.c || echo "restore of screens.c fails"
  193. sed 's/^X//' << 'SHAR_EOF' > screens.sh &&
  194. SHAR_EOF
  195. chmod 0640 screens.sh || echo "restore of screens.sh fails"
  196. exit 0
  197.