Four Letter Word generator based on an associative word dictionary.

Dependencies:   _24LCXXX

Dependents:   vfd_modular_clock_mbed

Four Letter Word generator based on an associative word dictionary.

Needs an EEPROM to function (can be programmed onto a 24LC512 I2C EEPROM, or available as a pre-programmed add-on board)

Comes with a censored mode that removes expletives as well as a fully uncensored mode.

For details see:

Committer:
Backstrom
Date:
Fri Jan 13 06:58:52 2017 +0000
Revision:
9:93f52963c4ff
Parent:
6:f3455eff2ae4
New version of _24LCXXX

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Backstrom 0:4d3dec05a4b7 1 /*
Backstrom 0:4d3dec05a4b7 2 * Four Letter Word Generator
Backstrom 0:4d3dec05a4b7 3 * (C) 2015 Akafugu Corporation
Backstrom 0:4d3dec05a4b7 4 *
Backstrom 0:4d3dec05a4b7 5 * This program is free software; you can redistribute it and/or modify it under the
Backstrom 0:4d3dec05a4b7 6 * terms of the GNU General Public License as published by the Free Software
Backstrom 0:4d3dec05a4b7 7 * Foundation; either version 2 of the License, or (at your option) any later
Backstrom 0:4d3dec05a4b7 8 * version.
Backstrom 0:4d3dec05a4b7 9 *
Backstrom 0:4d3dec05a4b7 10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY
Backstrom 0:4d3dec05a4b7 11 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
Backstrom 0:4d3dec05a4b7 12 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
Backstrom 0:4d3dec05a4b7 13 *
Backstrom 0:4d3dec05a4b7 14 */
Backstrom 0:4d3dec05a4b7 15
Backstrom 0:4d3dec05a4b7 16 #ifndef FLW_H__
Backstrom 0:4d3dec05a4b7 17 #define FLW_H__
Backstrom 0:4d3dec05a4b7 18
Backstrom 0:4d3dec05a4b7 19 #include <inttypes.h>
Backstrom 0:4d3dec05a4b7 20 #include <stdbool.h>
Backstrom 0:4d3dec05a4b7 21
Backstrom 0:4d3dec05a4b7 22 #include "_24LCXXX.h"
Backstrom 0:4d3dec05a4b7 23
perjg 6:f3455eff2ae4 24 class FourLetterWordBase
Backstrom 0:4d3dec05a4b7 25 {
perjg 6:f3455eff2ae4 26 protected:
Backstrom 0:4d3dec05a4b7 27 bool m_censored;
Backstrom 0:4d3dec05a4b7 28 unsigned long m_offset;
Backstrom 0:4d3dec05a4b7 29 char m_current_word[6];
Backstrom 0:4d3dec05a4b7 30 uint32_t m_lfsr;
Backstrom 0:4d3dec05a4b7 31
Backstrom 0:4d3dec05a4b7 32 uint32_t randomize();
Backstrom 0:4d3dec05a4b7 33
Backstrom 0:4d3dec05a4b7 34 void rot13(char* w);
Backstrom 0:4d3dec05a4b7 35 bool binary_search(const char *key, int imin, int imax);
Backstrom 0:4d3dec05a4b7 36
Backstrom 0:4d3dec05a4b7 37 char* get_word_censored();
Backstrom 0:4d3dec05a4b7 38 char* get_word_uncensored();
Backstrom 0:4d3dec05a4b7 39
Backstrom 0:4d3dec05a4b7 40 public:
perjg 6:f3455eff2ae4 41 FourLetterWordBase() :
perjg 6:f3455eff2ae4 42 m_censored(true),
perjg 6:f3455eff2ae4 43 m_offset(0),
perjg 6:f3455eff2ae4 44 m_lfsr(0xbeefcace) {}
perjg 6:f3455eff2ae4 45
perjg 6:f3455eff2ae4 46 virtual uint8_t read_byte(unsigned int addr) = 0;
perjg 6:f3455eff2ae4 47 virtual void read_buffer(unsigned int addr, uint8_t *buffer, int length) = 0;
Backstrom 0:4d3dec05a4b7 48
Backstrom 0:4d3dec05a4b7 49 void begin(uint32_t seed = 0xbeefcace, bool censored = true);
Backstrom 0:4d3dec05a4b7 50 void setCensored(bool c) { m_censored = c; }
Backstrom 0:4d3dec05a4b7 51 bool hasEeprom();
perjg 2:ff0163bc298d 52 char* getWord(bool adjustCase = false);
Backstrom 0:4d3dec05a4b7 53 };
Backstrom 0:4d3dec05a4b7 54
perjg 6:f3455eff2ae4 55 class FourLetterWord : public FourLetterWordBase
perjg 6:f3455eff2ae4 56 {
perjg 6:f3455eff2ae4 57 private:
perjg 6:f3455eff2ae4 58 _24LCXXX _24lc;
perjg 6:f3455eff2ae4 59
perjg 6:f3455eff2ae4 60 public:
perjg 6:f3455eff2ae4 61 FourLetterWord(I2C *i2c, uint8_t addr = 0x50) : FourLetterWordBase(), _24lc(i2c, addr) {}
perjg 6:f3455eff2ae4 62
perjg 6:f3455eff2ae4 63 virtual uint8_t read_byte(unsigned int addr);
perjg 6:f3455eff2ae4 64 virtual void read_buffer(unsigned int addr, uint8_t *buffer, int length);
perjg 6:f3455eff2ae4 65 };
perjg 6:f3455eff2ae4 66
perjg 6:f3455eff2ae4 67 extern const unsigned char flw_data[];
perjg 6:f3455eff2ae4 68
perjg 6:f3455eff2ae4 69 class FourLetterWordLocal : public FourLetterWordBase
perjg 6:f3455eff2ae4 70 {
perjg 6:f3455eff2ae4 71 private:
perjg 6:f3455eff2ae4 72 const unsigned char* data;
perjg 6:f3455eff2ae4 73
perjg 6:f3455eff2ae4 74 public:
perjg 6:f3455eff2ae4 75 FourLetterWordLocal() : FourLetterWordBase(), data(flw_data) {}
perjg 6:f3455eff2ae4 76
perjg 6:f3455eff2ae4 77 virtual uint8_t read_byte(unsigned int addr);
perjg 6:f3455eff2ae4 78 virtual void read_buffer(unsigned int addr, uint8_t *buffer, int length);
perjg 6:f3455eff2ae4 79 };
perjg 6:f3455eff2ae4 80
Backstrom 0:4d3dec05a4b7 81 #endif