ref: 762f243bcb34fe46d482f004aac2864fea4aa7de
parent: 5c6821f2f83ee5317f6a094207ec13cc095cade4
author: glenda <glenda@krsna>
date: Sat Aug 16 19:32:44 EDT 2025
improvements
--- a/fc.c
+++ b/fc.c
@@ -104,6 +104,11 @@
int needredraw;
int gridsnap;
int gridsize;
+ int emoji_pos; /* Current x position */
+ int emoji_frame; /* Animation frame */
+ int emoji_dir; /* Direction: 1=right, -1=left */
+ char *emoji_frames[4]; /* ASCII emoji frames */
+ int emoji_enabled; /* Toggle emoji display */
} sheet;
typedef struct BoxType BoxType;
@@ -213,6 +218,10 @@
void draw_grid_lines(void);
void draw_all_boxes(void);
void draw_status_line(void);
+void init_emoji(void);
+void draw_emoji_banner(void);
+void cmd_toggle_emoji(void);
+void cmd_cycle_emoji(void);
int cistrcmp(char *s1, char *s2);
int tokenize_formula(char *formula, Token *tokens, int maxtokens);
int cellref_lookup(char *ref);
@@ -285,6 +294,8 @@
{'l', cmd_start_label},
{'g', cmd_toggle_grid},
{'d', cmd_delete_box},
+ {'E', cmd_toggle_emoji},
+ {'e', cmd_cycle_emoji},
{0, nil}
};
@@ -304,6 +315,43 @@
{nil, 0}
};
+char *happy_faces[] = {
+ "^_^",
+ "^o^",
+ "^_^",
+ "^-^"
+};
+
+char *dancing_guy[] = {
+ "\\o/",
+ "_o_",
+ "/o\\",
+ "_o_"
+};
+
+char *kirby_dance[] = {
+ "<('.')>",
+ "<('.')<",
+ "^('.')^",
+ "v('.')v"
+};
+
+/* Use pure ASCII lambda instead of UTF-8 */
+char *lambda_dance[] = {
+ "L(^_^)L",
+ "L(>_<)L",
+ "L(o_o)L",
+ "L(*_*)L"
+};
+
+/* Pure ASCII version of your rcc style */
+char *rcc_style[] = {
+ "(-(-_-(-_(-_-)_-)_-)-)",
+ "[~o-o]~",
+ "~(o_o)~",
+ "*(^o^)/*"
+};
+
void
handlekey(int key)
{
@@ -1344,7 +1392,12 @@
redraw(void)
{
DrawStep *step;
-
+ draw_emoji_banner();
+ /* Then draw everything else with offset */
+ Rectangle clip = screen->r;
+ clip.min.y += 25;
+ replclipr(screen, 0, clip);
+
/* Execute drawing steps from table */
for(step = draw_steps; step->draw; step++) {
if(step->condition == 0 ||
@@ -1352,7 +1405,8 @@
step->draw();
}
}
-
+ replclipr(screen, 0, screen->r);
+
/* Draw mode-specific overlay */
InputMode *mode = &input_modes[sheet.current_mode];
if(mode->draw)
@@ -1368,6 +1422,113 @@
return 1; /* Signal to exit edit mode */
}
+void
+init_emoji(void)
+{
+ sheet.emoji_pos = 0;
+ sheet.emoji_frame = 0;
+ sheet.emoji_dir = 1;
+ sheet.emoji_enabled = 1;
+
+ /* Choose your emoji set here */
+ int i;
+ for(i = 0; i < 4; i++)
+ sheet.emoji_frames[i] = rcc_style[i];
+}
+
+void
+draw_emoji_banner(void)
+{
+ if(!sheet.emoji_enabled)
+ return;
+
+ /* Safety check */
+ if(sheet.emoji_frame < 0 || sheet.emoji_frame >= 4)
+ sheet.emoji_frame = 0;
+
+ /* Get current emoji - with null check */
+ char *emoji = sheet.emoji_frames[sheet.emoji_frame];
+ if(emoji == nil)
+ return;
+
+ int emoji_width = strlen(emoji) * font->width;
+
+ /* Draw background bar */
+ Rectangle banner = Rect(screen->r.min.x, screen->r.min.y,
+ screen->r.max.x, screen->r.min.y + 25);
+ draw(screen, banner, colors[2], nil, ZP); /* Using tan color */
+
+ /* Draw the emoji */
+ Point pos = Pt(sheet.emoji_pos, screen->r.min.y + 5);
+ string(screen, pos, colors[0], ZP, font, emoji);
+
+ /* Add trailing effects */
+ if(sheet.emoji_frame > 0) {
+ Point trail = Pt(sheet.emoji_pos - (20 * sheet.emoji_dir), screen->r.min.y + 5);
+ string(screen, trail, colors[3], ZP, font, "~");
+ }
+
+ /* Update position */
+ sheet.emoji_pos += sheet.emoji_dir * 3;
+
+ /* Bounce at edges */
+ if(sheet.emoji_pos > screen->r.max.x - emoji_width) {
+ sheet.emoji_pos = screen->r.max.x - emoji_width;
+ sheet.emoji_dir = -1;
+ }
+ if(sheet.emoji_pos < screen->r.min.x) {
+ sheet.emoji_pos = screen->r.min.x;
+ sheet.emoji_dir = 1;
+ }
+
+ /* Animate frames every few redraws */
+ static int frame_counter = 0;
+ frame_counter++;
+ if(frame_counter % 10 == 0) {
+ sheet.emoji_frame = (sheet.emoji_frame + 1) % 4;
+ }
+}
+
+void
+cmd_cycle_emoji(void)
+{
+ static int emoji_set = 0;
+ int i;
+
+ emoji_set = (emoji_set + 1) % 5;
+
+ switch(emoji_set) {
+ case 0:
+ for(i = 0; i < 4; i++)
+ sheet.emoji_frames[i] = rcc_style[i];
+ break;
+ case 1:
+ for(i = 0; i < 4; i++)
+ sheet.emoji_frames[i] = kirby_dance[i];
+ break;
+ case 2:
+ for(i = 0; i < 4; i++)
+ sheet.emoji_frames[i] = lambda_dance[i];
+ break;
+ case 3:
+ for(i = 0; i < 4; i++)
+ sheet.emoji_frames[i] = dancing_guy[i];
+ break;
+ case 4:
+ for(i = 0; i < 4; i++)
+ sheet.emoji_frames[i] = happy_faces[i];
+ break;
+ }
+ sheet.needredraw = 1;
+}
+
+void
+cmd_toggle_emoji(void)
+{
+ sheet.emoji_enabled = !sheet.emoji_enabled;
+ sheet.needredraw = 1;
+}
+
int
edit_cancel(char *buf, int *pos, int maxlen)
{
@@ -1862,6 +2023,9 @@
sysfatal("initdraw: %r");
initcolors();
+
+ int ticks = 0;
+
einit(Emouse | Ekeyboard);
eresized(0);
@@ -1873,7 +2037,7 @@
sheet.current_mode = 0;
sheet.gridsize = 32;
sheet.gridsnap = 1;
-
+ init_emoji();
redraw();
for(;;){
@@ -1886,10 +2050,15 @@
handlekey(e.kbdc);
break;
}
-
- if(sheet.needredraw){
- redraw();
- sheet.needredraw = 0;
- }
+
+ ticks++;
+ if(ticks % 30 == 0) { /* Adjust for speed */
+ sheet.needredraw = 1;
+ }
+
+ if(sheet.needredraw){
+ redraw();
+ sheet.needredraw = 0;
+ }
}
}
--- a/mkfile
+++ b/mkfile
@@ -9,16 +9,18 @@
TARG=fc
# Source files
-GAME=fc.6
+APP=fc.6
# Build rules
all:V: $BIN/$TARG
-$GAME: $TARG.c
+$APP: $TARG.c
6c $CFLAGS $TARG.c
-$BIN/$TARG: $GAME
- 6l -o $target $GAME
+$BIN/$TARG: $APP
+ 6l -o $target $APP
nuke:
- rm -f *.6 $BIN/$TARG
+ rm -f *.6 $BIN/$TARG
+clean:
+ rm -f *.6
--
⑨