Skip to content

Commit

Permalink
Merge pull request cc65#2382 from colinleroy/asm-gets
Browse files Browse the repository at this point in the history
Rewrite gets in asm
  • Loading branch information
mrdudz authored Jan 26, 2024
2 parents 6593768 + aa6f850 commit 782dad2
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 63 deletions.
63 changes: 0 additions & 63 deletions libsrc/common/gets.c

This file was deleted.

47 changes: 47 additions & 0 deletions libsrc/common/gets.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
;
; Colin Leroy-Mira, 2024
;
; char* __fastcall__ gets (char* s)
;

.export _gets
.import _fgets, _stdin, popax, pushax
.importzp ptr4

_gets:
; Push buffer
sta ptr4
stx ptr4+1
jsr pushax

; Push size (there's no limit!)
lda #$FF
tax
jsr pushax

lda _stdin
ldx _stdin+1

jsr _fgets

; Check return value
bne :+
cpx #$00
bne :+
rts

: ; At least one byte written.
jsr pushax ; Store returned pointer

; Remove \n if there is one.
lda ptr4 ; _fgets returns with ptr4 at
bne :+ ; end of buffer
dec ptr4+1
: dec ptr4
lda (ptr4),y ; _fgets returns with Y=0
cmp #$0A
bne :+
tya
sta (ptr4),y ; Set terminator over \n

: jmp popax
46 changes: 46 additions & 0 deletions test/ref/test_gets.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
!!DESCRIPTION!! gets test
!!LICENCE!! Public domain
*/

#include "common.h"

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>

char buf[512];

#define INFILE "cf.in"

#ifndef __CC65__
/* Force declaration on host compiler, as gets() is deprecated for
* being dangerous as hell */
char *gets (char *__s);
#endif

#ifdef NO_OLD_FUNC_DECL
int main(int argc,char **argv)
#else
main(argc, argv)
int argc;
char *argv[];
#endif
{
/* Fake stdin with the reference file */
fclose(stdin);
stdin = fopen(INFILE, "r");
if (stdin == NULL) {
return EXIT_FAILURE;
}

while (gets(buf) != NULL)
{
printf("%s",buf);
}

fclose(stdin);
return 0;
}

0 comments on commit 782dad2

Please sign in to comment.