shithub: fc

Download patch

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
--