This file is indexed.

/usr/share/texmf-texlive/metapost/bbcard/bbcard.mp is in texlive-metapost 2009-15.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
% bullshit bingo card
% prepared by patrick tj mcphee, december 2002 ptjm@interlog.com
% released to the public domain. have fun

% concept and many phrases taken from
%  http://www.perkigoth.com/home/kermit/stuff/BullshitBingo
% others from the list of banished words of Lake Superior State University:
%  http://www.lssu.edu/banished
% my thanks to all who have contributed to these efforts

% to run off a single card, give a command like
%  mpost bbcard
% and the card will written to bbcard.ps

% to run off cards for several players, try
%  mpost '\nocards := 7; input bbcard'
% and the cards will be written to bbcard.1, bbcard.2, .., bbcard.7

% to add additional phrases, duplicate one of the lines starting with
%  i := i + 1; bs[i] :=
% and replace the phrase in quotes
% I keep them in alphabetical order to ease maintenance, but you don't
% have to. I suggest commenting out phrases which are not known in
% your community and adding the irritating ones which are.

input breakwidth;

defaultfont := "ptmr8r";

prologues := 2;

string bs[];
i := 0;

i := i + 1; bs[i] := "action item";
i := i + 1; bs[i] := "actual facts";
i := i + 1; bs[i] := "articulate";
i := i + 1; bs[i] := "as we speak";
i := i + 1; bs[i] := "at the end of the day";
i := i + 1; bs[i] := "at this point in time";
i := i + 1; bs[i] := "backward compatible";
i := i + 1; bs[i] := "ballpark";
i := i + 1; bs[i] := "bandwidth";
i := i + 1; bs[i] := "basically";
i := i + 1; bs[i] := "been there, done that";
i := i + 1; bs[i] := "benchmark";
i := i + 1; bs[i] := "best of breed";
i := i + 1; bs[i] := "best practice";
i := i + 1; bs[i] := "buzz";
i := i + 1; bs[i] := "by and large";
i := i + 1; bs[i] := "challenge";
i := i + 1; bs[i] := "client-focused";
i := i + 1; bs[i] := "collaborative";
i := i + 1; bs[i] := "conceptualize";
i := i + 1; bs[i] := "core business";
i := i + 1; bs[i] := "core competency";
i := i + 1; bs[i] := "critical path";
i := i + 1; bs[i] := "down the road";
i := i + 1; bs[i] := "down time";
i := i + 1; bs[i] := "downsizing";
i := i + 1; bs[i] := "drill down";
i := i + 1; bs[i] := "dynamic";
i := i + 1; bs[i] := "each and every";
i := i + 1; bs[i] := "empower employees";
i := i + 1; bs[i] := "extreme";
i := i + 1; bs[i] := "fast-track";
i := i + 1; bs[i] := "fault tolerant";
i := i + 1; bs[i] := "front lines";
i := i + 1; bs[i] := "game plan";
i := i + 1; bs[i] := "gap analysis";
i := i + 1; bs[i] := "go public";
i := i + 1; bs[i] := "go the extra mile";
i := i + 1; bs[i] := "going forward";
i := i + 1; bs[i] := "hard-won lessons";
i := i + 1; bs[i] := "hardball";
i := i + 1; bs[i] := "having said that";
i := i + 1; bs[i] := "heads up";
i := i + 1; bs[i] := "issues";
i := i + 1; bs[i] := "knock-on effect";
i := i + 1; bs[i] := "knowledgebase";
i := i + 1; bs[i] := "lessons learned";
i := i + 1; bs[i] := "make no mistake";
i := i + 1; bs[i] := "manage expectations";
i := i + 1; bs[i] := "meaningful";
i := i + 1; bs[i] := "metrics";
i := i + 1; bs[i] := "mind share";
i := i + 1; bs[i] := "mindset";
i := i + 1; bs[i] := "mission critical";
i := i + 1; bs[i] := "move the goal posts";
i := i + 1; bs[i] := "movers and shakers";
i := i + 1; bs[i] := "new economy";
i := i + 1; bs[i] := "no blame";
i := i + 1; bs[i] := "no-brainer";
i := i + 1; bs[i] := "now, more than ever";
i := i + 1; bs[i] := "off-site meeting";
i := i + 1; bs[i] := "off-the-shelf";
i := i + 1; bs[i] := "offload";
i := i + 1; bs[i] := "on the same page";
i := i + 1; bs[i] := "open source";
i := i + 1; bs[i] := "out of the loop";
i := i + 1; bs[i] := "out-source";
i := i + 1; bs[i] := "outside the box";
i := i + 1; bs[i] := "paradigm";
i := i + 1; bs[i] := "partnership";
i := i + 1; bs[i] := "proactive, not reactive";
i := i + 1; bs[i] := "profitability";
i := i + 1; bs[i] := "progressing";
i := i + 1; bs[i] := "pushback";
i := i + 1; bs[i] := "put this one to bed";
i := i + 1; bs[i] := "results-driven";
i := i + 1; bs[i] := "revenue";
i := i + 1; bs[i] := "revisit";
i := i + 1; bs[i] := "robust";
i := i + 1; bs[i] := "run it up the flagpole";
i := i + 1; bs[i] := "run the numbers";
i := i + 1; bs[i] := "sales driven";
i := i + 1; bs[i] := "scope";
i := i + 1; bs[i] := "service oriented";
i := i + 1; bs[i] := "slippery slide";
i := i + 1; bs[i] := "speaks to";
i := i + 1; bs[i] := "strategic fit";
i := i + 1; bs[i] := "stretch the envelope";
i := i + 1; bs[i] := "synergy";
i := i + 1; bs[i] := "take that offline";
i := i + 1; bs[i] := "target audience";
i := i + 1; bs[i] := "team player";
i := i + 1; bs[i] := "the big picture";
i := i + 1; bs[i] := "the bottom line";
i := i + 1; bs[i] := "think outside the box";
i := i + 1; bs[i] := "ticks in boxes";
i := i + 1; bs[i] := "time to market";
i := i + 1; bs[i] := "timeline";
i := i + 1; bs[i] := "to be perfectly honest";
i := i + 1; bs[i] := "total quality";
i := i + 1; bs[i] := "touch base";
i := i + 1; bs[i] := "up to speed";
i := i + 1; bs[i] := "user friendly";
i := i + 1; bs[i] := "value-added";
i := i + 1; bs[i] := "vast majority";
i := i + 1; bs[i] := "very unique";
i := i + 1; bs[i] := "walk the talk";
i := i + 1; bs[i] := "web-enabled";
i := i + 1; bs[i] := "win-win situation";
i := i + 1; bs[i] := "wow factor";

bsmax := i;

radius := .5 cm;

offset := 1 cm;
boxwid := 1.9 cm;


% co-ordinates for the grid
pair bpos[], bpos[].ll, bpos[].ul, bpos[].ur, bpos[].lr;
   for i = 0 upto 4:
      for j = 0 upto 4:
        bpos[i+j*5+1] := ((j+0.5)*boxwid, (i+0.5)*boxwid);
        bpos[i+j*5+1].ll := (j*boxwid, i*boxwid);
        bpos[i+j*5+1].ul := (j*boxwid, (i+1)*boxwid);
        bpos[i+j*5+1].lr := ((j+1)*boxwid, i*boxwid);
        bpos[i+j*5+1].ur := ((j+1)*boxwid, (i+1)*boxwid);
      endfor;
   endfor;

picture bbcard[];

% the grid itself
bbcard[0] := image(
   z1 = (0, radius) = z2 - (0, 5boxwid - 2radius) =
        z6 - (5boxwid, 0) = z8 - (radius, -radius);
   z3 = z8 + (0, 5boxwid) = z4 - (5boxwid-2radius, 0);
   x5 = x6; y5 = y2;
   x7 = x4;
   y7 = y8;

   pickup pencircle xscaled 4pt yscaled 1pt rotated 30;

   draw z1---z2..z3---z4..z5---z6..z7---z8..cycle;

   fill ((unitsquare shifted -(.5,.5)) scaled boxwid) shifted bpos[13] withcolor .8 white;

   pickup pencircle scaled 1pt;
   for i = 2 upto 5:
	draw bpos[i].ll--bpos[i+20].lr;
   endfor;

   for i = 10 step 5 until 25:
	draw bpos[i].ul--bpos[i-4].ll;
   endfor;
);

% handle > 1 card if nocards was set on the command-line
if known nocards:
 for bsno = 1 upto nocards:
else:
 if unknown bsno:
   bsno := -1;
 fi;
fi;

 % select the strings for each card
 % after we're done, we set the middle square to `Free Square'
 % dups[] is used to keep track of already used values to eliminate
 % duplicates within each grid (a playing card has four grids on it)

 for bb = 1 upto 4:
    string bstring[];
    numeric dups[];

    for i = 1 upto 25:
      j := 1+floor(uniformdeviate bsmax);

      forever:
         exitif unknown dups[j];
         j := 1+floor(uniformdeviate bsmax);
      endfor;
      dups[j] := i;
      bstring[i] = bs[j];
    endfor;

    bstring[13] := "Free Square";

    bbcard[bb] := image(
	draw bbcard[0];
	for i = 1 upto 25:
	   label(breaktowidth(bstring[i], 1.5cm, 11pt), bpos[i]);
	endfor;
    );
 endfor;

 beginfig(bsno);
  picture p;
  p := ("Bullshit Bingo" infont defaultfont scaled 2)
   shifted ((offset, 3offset)+2.25*ulcorner bbcard[0]);

  fill ((llcorner p)..(ulcorner p).. tension 2 .. (urcorner p)..
        (lrcorner p) .. tension 2 .. cycle)
   withcolor .5 white;
  draw p withcolor white;

  draw ("Advanced Playing Card" infont defaultfont scaled 1.2)
    shifted ((lrcorner p) + (10pt, 6pt));
  draw ("Stay awake!" infont defaultfont)
    shifted ((lrcorner p) + (10pt, -14pt));
  draw ("Watch for duplicates!" infont defaultfont)
    shifted ((lrcorner p) + (10pt, -25pt));
  draw ("Have fun!" infont defaultfont)
    shifted ((lrcorner p) + (10pt, -36pt));

  draw bbcard[1] shifted (offset, offset);
  draw bbcard[2] shifted ((1.25offset, offset)+lrcorner bbcard[0]);
  draw bbcard[3] shifted ((1.25offset, 2offset)+urcorner bbcard[0]);
  draw bbcard[4] shifted ((offset, 2offset)+ulcorner bbcard[0]);
 endfig;

if known nocards:
 endfor;
fi;

end;