aboutsummaryrefslogtreecommitdiff
path: root/src/getsmess.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/getsmess.c')
-rw-r--r--src/getsmess.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/getsmess.c b/src/getsmess.c
new file mode 100644
index 0000000..1a8494b
--- /dev/null
+++ b/src/getsmess.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <peekpoke.h>
+
+
+void getlnasm(char *buf, char len) {
+ asm("ldy #$00");
+ asm("lda (sp),y");
+ asm("sta $e2");
+
+ asm("ldy #$02");
+ asm("jsr ldaxysp");
+ asm("sta $e0");
+ asm("stx $e0+1");
+
+ asm("@loop: lda _stdin");
+ asm("ldx _stdin+1");
+ asm("jsr _fgetc");
+
+ asm("cmp #$9B");
+ asm("beq @out");
+
+ asm("ldy #$00");
+ asm("sta ($e0),y");
+ asm("inc $e0");
+ asm("bne @noinc");
+ asm("inc $e0+1");
+ asm("@noinc:");
+
+ asm("dec $e2");
+ asm("bne @loop");
+
+ asm("@out:");
+ asm("ldy #$00");
+ asm("tya");
+ asm("sta ($e0),y");
+}
+
+void getln(char *buf, char len) {
+ char *p = buf;
+
+ do {
+ *p = fgetc(stdin);
+ if(*p == '\n') break;
+ } while(++p, --len);
+ *p = '\0';
+}
+
+void main(void) {
+ char buf[100] = "HELLO";
+ while(1) {
+ /*
+ puts("gets");
+ gets(buf);
+ puts(buf);
+ puts("fgets");
+ fgets(buf, 99, stdin);
+ puts(buf);
+ puts("getln");
+ getln(buf, 99);
+ puts(buf);
+ */
+ puts("getlnasm");
+ getlnasm(buf, 99);
+ puts(buf);
+ }
+}