# Casio FX-870P

[![casio-FX-879P.jpg](https://wiki.hexadust.net/uploads/images/gallery/2024-11/scaled-1680-/opofC7yKSpi3BzXX-casio-fx-879p.jpg)](https://wiki.hexadust.net/uploads/images/gallery/2024-11/opofC7yKSpi3BzXX-casio-fx-879p.jpg)

Manual (Japanese with English commentary): [CasioVX-4-Manual-Peter-Rost.pdf](https://wiki.hexadust.net/attachments/37)

## Programming in C

### Navigation

<table border="1" id="bkmrk-s-%28red%29-%2B-f.com-%28blu" style="border-collapse: collapse; width: 100%; height: 177.167px; border-width: 0px; border-style: hidden;"><colgroup><col style="width: 53.6905%;"></col><col style="width: 46.3095%;"></col></colgroup><tbody><tr style="height: 29.7833px;"><td class="align-right" style="height: 29.7833px; border-width: 0px;">`S` (red), `F.COM` (blue)</td><td style="height: 29.7833px; border-width: 0px;">Enter C programming mode</td></tr><tr style="height: 29.7833px;"><td class="align-right" style="height: 29.7833px; border-width: 0px;">`S`  
</td><td style="height: 29.7833px; border-width: 0px;">Source - edit code  
</td></tr><tr style="height: 29.7833px;"><td class="align-right" style="height: 29.7833px; border-width: 0px;">`R`  
</td><td style="height: 29.7833px; border-width: 0px;">Run - compile and run code  
</td></tr><tr style="height: 29.4667px;"><td class="align-right" style="height: 29.4667px; border-width: 0px;">Arrow keys  
</td><td style="height: 29.4667px; border-width: 0px;">Select program  
</td></tr><tr style="height: 29.2333px;"><td class="align-right" style="height: 29.2333px; border-width: 0px;">(after program run) `S`, `M` or type `edit`  
</td><td style="height: 29.2333px; border-width: 0px;">Edit code

</td></tr><tr style="height: 29.1167px;"><td class="align-right" style="border-width: 0px; height: 29.1167px;">`S` (red), `MEMO` (line)  
</td><td style="border-width: 0px; height: 29.1167px;">Go to line

</td></tr></tbody></table>

### Types

<table border="1" id="bkmrk-char-8-bit-short-16-" style="border-collapse: collapse; width: 100%; border-width: 0px; height: 173px;"><colgroup><col style="width: 49.9316%;"></col><col style="width: 49.9316%;"></col></colgroup><tbody><tr style="height: 29.1167px;"><td class="align-right" style="border-width: 0px; height: 29.1167px;">`char`  
</td><td style="border-width: 0px; height: 29.1167px;">8 bit  
</td></tr><tr style="height: 29.1167px;"><td class="align-right" style="border-width: 0px; height: 29.1167px;">`short`  
</td><td style="border-width: 0px; height: 29.1167px;">16 bit  
</td></tr><tr style="height: 29.1167px;"><td class="align-right" style="border-width: 0px; height: 29.1167px;">`int`  
</td><td style="border-width: 0px; height: 29.1167px;">16 bit  
</td></tr><tr><td class="align-right" style="border-width: 0px;">`unsigned`  
</td><td style="border-width: 0px;">16 bit  
</td></tr><tr style="height: 29.1167px;"><td class="align-right" style="border-width: 0px; height: 29.1167px;">`long`  
</td><td style="border-width: 0px; height: 29.1167px;">32 bit  
</td></tr><tr style="height: 29.1167px;"><td class="align-right" style="border-width: 0px; height: 29.1167px;">`float`  
</td><td style="border-width: 0px; height: 29.1167px;">32 bit  
</td></tr><tr style="height: 29.1167px;"><td class="align-right" style="border-width: 0px; height: 29.1167px;">`double`  
</td><td style="border-width: 0px; height: 29.1167px;">64 bit  
</td></tr></tbody></table>

<p class="callout warning">`structs` or `unions` are not supported.</p>

### Flow control

```c
if (C)
  expr;

if (C) {
  expr;
  expr;
}

if (C) {
  expr;
} else {
  expr;
}
```

```c
while (C) {
  expr;
}

do {
  expr;
} while(C);

for (A; C; I) {
  expr;
}
```

```c
goto LABEL;

LABEL;
```

<p class="callout warning">`switch`/`case` are not supported.</p>

### Functions

Entry function:

```c
main() {
  expr;
}
```

Custom function:

```c
int foo(buf,x,y)
  char buf[];
  int x;
  int y;
{
  int i;
  expr;
}
```

<p class="callout info">Variables need to be declared first then assigned.</p>

<p class="callout info">Functions are declared in pre-ANSI style. Inner variables need to be defined at body top.  
</p>

<table border="1" id="bkmrk-int-getchar%28%29-int-ge" style="border-collapse: collapse; width: 100%; height: 1383.87px; border-width: 1px; border-style: dotted;"><colgroup><col style="width: 50.9636%;"></col><col style="width: 49.0364%;"></col></colgroup><tbody><tr style="height: 29.7833px;"><td style="height: 29.7833px; border-width: 1px;">`int getchar()`  
</td><td style="height: 29.7833px; border-width: 1px;">  
</td></tr><tr style="height: 29.7833px;"><td style="height: 29.7833px; border-width: 1px;">`int getc(FILE)` / `int fgetc(FILE)`  
</td><td style="height: 29.7833px; border-width: 1px;">For `stdin` file: `extern FILE *stdin;`

</td></tr><tr style="height: 29.7833px;"><td style="height: 29.7833px; border-width: 1px;">`int putchar(char)`  
</td><td style="height: 29.7833px; border-width: 1px;">  
</td></tr><tr style="height: 64.0167px;"><td style="height: 64.0167px; border-width: 1px;">`int putc(char, FILE)` / `int fputc(char, FILE)`  
</td><td style="height: 64.0167px; border-width: 1px;">For `stdout` file: `extern FILE *stdout;`

There is also printer(?): `extern File *stdprn`

</td></tr><tr style="height: 96.4px;"><td style="height: 96.4px; border-width: 1px;">`char *gets(char *)` (unsafe)  
</td><td style="height: 96.4px; border-width: 1px;">```
char msg[8];
gets(msg);
pringf("Hello: %s",msg);
```

</td></tr><tr style="height: 146.8px;"><td style="height: 146.8px; border-width: 1px;">`char fgets<em>(char *</em>, int buflen, FILE)`  
</td><td style="height: 146.8px; border-width: 1px;">```
extern FILE *stdin;
main() {
  char msg[8];
  fgets(msg,8,stdin);
  pringf("Hello: %s",msg);
}
```

</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int puts(char *<em>)</em>`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int fputs(char *,FILE)`</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`printf(format, args, ...)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`fpritf(FILE, format, args, ...)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`sprintf(char *buf, format, args, ...)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int scanf(format, args, ...)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int fscanf(FILE, format, args, ...)`</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int sscanf(char *buf, format, args, ...)`</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int fflush(FILE)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int inport(int n)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`outport(int n, int i)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`clearerr(FILE in)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`breakpt()`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`exit()` / `abort()`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`char *malloc(unsigned size)`</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`char *calloc(unsigned n,unsigned size)`</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int free(char *)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int strlen(char *)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`char *strcpy(char *dest, char *src)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`char *?strcat(char *dest, char *src)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int strcmp(char *, char *)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`char strchr(char *,char)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`int abs(int)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 64.0167px;"><td style="border-width: 1px; height: 64.0167px;">`double sin(double)` \[`cos`, `tan`, `asin`, `acos`, `atan`, `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh`\]  
</td><td style="border-width: 1px; height: 64.0167px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`double pow(double, double)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`double sqrt(double)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`double exp(double)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`double log(double)` / `double log10(double)`  
</td><td style="border-width: 1px; height: 29.7833px;">  
</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`angle(unsigned)`  
</td><td style="border-width: 1px; height: 29.7833px;">mode for `sin` etc.: `0` - deg, `1` - rad, `2` - gra

</td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`beep(unsigned)`  
</td><td style="border-width: 1px; height: 29.7833px;"></td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`clrscr()`  
</td><td style="border-width: 1px; height: 29.7833px;"></td></tr><tr style="height: 29.7833px;"><td style="border-width: 1px; height: 29.7833px;">`gotoxy(unsigned x, unsigned y)`  
</td><td style="border-width: 1px; height: 29.7833px;">`x` - between 0 and 31 (inc), `y` - between 0 and 3 (inc)

</td></tr></tbody></table>