summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cgram/cgram.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/cgram/cgram.c b/cgram/cgram.c
index 76ea55fb..5e5dd556 100644
--- a/cgram/cgram.c
+++ b/cgram/cgram.c
@@ -120,16 +120,13 @@ static void readquote(void) {
}
static void encode(void) {
- int used[26];
- for (int i=0; i<26; i++) used[i] = 0;
-
int key[26];
- int keypos=0;
- while (keypos < 26) {
- int c = random()%26;
- if (used[c]) continue;
- key[keypos++] = c;
- used[c] = 1;
+ for (int i=0; i<26; i++) key[i] = i;
+ for (int i=26; i>1; i--) {
+ int c = random() % i;
+ int t = key[i-1];
+ key[i-1] = key[c];
+ key[c] = t;
}
for (int y=0; y<lines.num; y++) {
@@ -244,9 +241,11 @@ static void loop(void) {
int ch = getch();
switch (ch) {
case 1: /* ^A */
+ case KEY_BEG:
curx=0;
break;
case 2: /* ^B */
+ case KEY_LEFT:
if (curx > 0) {
curx--;
}
@@ -256,9 +255,11 @@ static void loop(void) {
}
break;
case 5: /* ^E */
+ case KEY_END:
curx = strlen(lines.v[cury]);
break;
case 6: /* ^F */
+ case KEY_RIGHT:
if (curx < strlen(lines.v[cury])) {
curx++;
}
@@ -271,6 +272,7 @@ static void loop(void) {
clear();
break;
case 14: /* ^N */
+ case KEY_DOWN:
if (cury < lines.num-1) {
cury++;
}
@@ -282,6 +284,7 @@ static void loop(void) {
}
break;
case 16: /* ^P */
+ case KEY_UP:
if (cury > 0) {
cury--;
}
@@ -335,6 +338,7 @@ int main(void) {
encode();
opencurses();
+ keypad(stdscr, TRUE);
loop();
closecurses();