diameter 发表于 2013-6-5 18:12:31

dPicoc for Nspire Alpha1不稳定版本

移植成功,但是ndless的标准库有很多问题,很多函数能否正常使用未知
具体的支持函数列表放在二楼
使用方法:在根目录下建一个叫“dpicoc”的文件夹,把要执行的源文件都放到里面
程序初始化为灰度模式,支持ndless的机器理论上都可以使用。程序已在clickpad上测试通过
想在机器上编辑文件的可以考虑使用nTxt

例1:hello world#include <stdio.h>

int main()
{
    puts("Hello world!\n");
    return 0;
}例2:求和(标准库的atol无法使用,只能自己实现)#include <stdio.h>
#include <ctype.h>

long atol(char *nptr)
{
    int c;          /* current char */
    long total;   /* current total */
    int sign;       /* if '-', then negative, otherwise positive */

    /* skip whitespace */
    while ( isspace((int)(unsigned char)*nptr) )
      ++nptr;

    c = (int)(unsigned char)*nptr++;
    sign = c;       /* save sign indication */
    if (c == '-' || c == '+')
      c = (int)(unsigned char)*nptr++;    /* skip sign */

    total = 0;

    while (isdigit(c)) {
      total = 10 * total + (c - '0');   /* accumulate digit */
      c = (int)(unsigned char)*nptr++;    /* get next char */
    }

    if (sign == '-')
      return -total;
    else
      return total;   /* return result, negated if necessary */
}
int main()
{
    char buf;
    int n;
        puts("input a number:");
    gets(buf);
    n = atol(buf);
    sprintf(buf,"1+2+3+...+%d = %d",n,n*(n+1)/2);
    puts(buf);
        return 0;
}
例3:bmp文件读取(文件io正常~)#include <stdio.h>
int main()
{
        int width,s,height,offset,x,y;
        FILE * fp = fopen("/documents/dpicoc/C_C.bmp.tns","rb");
        if (fp==NULL)
        {
                puts("cannot open file");
                return -1;
        }
        fseek(fp,0x1C,SEEK_SET);
        fread(&s,sizeof(short),1,fp);
        if (s != 24)
        {
                puts("not a 24-bit bitmap");
                fclose(fp);
                return -1;
        }
        fseek(fp,0x12,SEEK_SET);
        fread(&width ,sizeof(int),1,fp);
        fread(&height,sizeof(int),1,fp);
        fseek(fp,0xA,SEEK_SET);
        fread(&offset,sizeof(int),1,fp);
        fseek(fp,offset,SEEK_SET);
       
        char buf;
        unsigned char r,g,b,c;
        int i;
        sprintf(buf,"width = %d,height = %d\noffset = %d\n",width,height,offset);
        puts(buf);
        puts("press enter..");
        gets(buf);
        clrscr();
        for (y = 0;y < height;++y)
        {
                for (x = 0;x < width;++x)
                {
                        fread(&b,1,1,fp);fread(&g,1,1,fp);fread(&r,1,1,fp);c = (r+g+b)/3>>4;
                        setpixel(x,height-y,c);
                }
        }
        fclose(fp);
        gets(buf);
        return 0;
}
附件:程序、一些例子:

diameter 发表于 2013-6-5 18:12:51

本帖最后由 diameter 于 2013-6-5 18:30 编辑


ndless标准库很多有问题,请大家及时报错以便修正或者重写
标准库支持:stdio.h
常量:
EOF
SEEK_SET
SEEK_CUR
SEEK_END
FILENAME_MAX
函数:
int sprintf(char *, char *,...);
int puts(char *);
char * gets(char *);
void cls();/这是清除控制台内容的,与下面的clrscr不同
      
FILE *fopen(char *, char *);
FILE *freopen(char *, char *, FILE *);
int fclose(FILE *);
int fread(void *, int, int, FILE *);
int fwrite(void *, int, int, FILE *);
int fgetc(FILE *);
int getc(FILE *);
char *fgets(char *, int, FILE *);
int fputc(int, FILE *);
int fputs(char *, FILE *);
int feof(FILE *);
int ftell(FILE *);
int fseek(FILE *, int, int);

void setpixel(int,int,unsigned int);
void clrscr();重要::puts和gets基于一个console,不是stdout和stdinstdlib
函数:
float atof(char *);
int atoi(char *);
int atol(char *);
int strtol(char *,char **,int);
void *malloc(int);
void *calloc(int,int);
void *realloc(void *,int);
void free(void *);
int rand();
void srand(int);
void abort();
void exit(int);
char *getenv(char *);
int abs(int);
int labs(int);string
函数:
void *memcpy(void *,void *,int);
void *memmove(void *,void *,int);
void *memchr(char *,int,int);
int memcmp(void *,void *,int);
void *memset(void *,int,int);
char *strcat(char *,char *);
char *strncat(char *,char *,int);
char *strchr(char *,int);
char *strrchr(char *,int);
int strcmp(char *,char *);
int strncmp(char *,char *,int);
char *strcpy(char *,char *);
char *strncpy(char *,char *,int);
int strlen(char *);
char *strstr(char *,char *);常量NULL在以上每个文件都有定义errno
常量:
errnoctype
函数:
int isalnum(int);
int isalpha(int);
int isblank(int);
int iscntrl(int);
int isdigit(int);
int isgraph(int);
int islower(int);
int isprint(int);
int ispunct(int);
int isspace(int);
int isupper(int);
int isxdigit(int);
int tolower(int);
int toupper(int);

meizhiguo 发表于 2013-6-5 18:23:27

板凳

rphero 发表于 2013-6-5 19:17:14

支持一下,有时间就测试(最早今晚最晚高考以后…)
另外请问lz能否提供一个ntxt,现在上omnimaga巨慢…

HHX-XXM 发表于 2013-6-5 20:01:38

本帖最后由 haoxuan0532 于 2013-6-6 07:00 编辑

BUG提交:
有时退出程序会出现显示紊乱现象D:\360data\重要数据\桌面\DSCF5562.JPG

图片太大了= =。。。

panyaolin123 发表于 2013-6-5 21:13:01

小饕好敬业啊   
要高考了好好努力呦!!

DAS 发表于 2013-6-5 21:27:45

不错,另外建议提供彩色模式和灰度模式的切换(可考虑重启生效),做个好看点的GUI(以后的事了。

DAS 发表于 2013-6-5 23:09:32

还有,我记得c的输出函数是printf啊

chuxianbing 发表于 2013-6-6 08:37:37

又要和谐系统,我的3.2最新版的系统不知道和谐的了吗?

rphero 发表于 2013-6-6 08:46:07

chuxianbing 发表于 2013-6-6 08:37
又要和谐系统,我的3.2最新版的系统不知道和谐的了吗?

能降级,前几天我亲测成功

白菜白 发表于 2013-6-6 14:15:34

DAS 发表于 2013-6-5 23:09 static/image/common/back.gif
还有,我记得c的输出函数是printf啊

同问。。弄的我疑惑了半天 这是啥语言?

白菜白 发表于 2013-6-6 14:16:43

不知道 cx 能不能用 晚上回去试试

DAS 发表于 2013-6-6 23:27:01

还有,if语句似乎有问题。
if(a == b)
{
      puts("unlocked");
}
无论条件是否成立,均按成立处理。
也可能是gets的毛病。
另外拜托发个函数列表过来,我不会ndless。
[email protected]

diameter 发表于 2013-6-7 11:56:28

本帖最后由 diameter 于 2013-6-7 13:01 编辑

DAS 发表于 2013-6-6 23:27 static/image/common/back.gif
还有,if语句似乎有问题。
if(a == b)
{

请把完整代码发上。下面的程序能正确执行,if应该没有问题#include <stdio.h>
int main()
{
int a,b;
a = 1;
b = 2;
if (a==b)
    puts("a==b");
else
    puts("a!=b");
return 0;
}ps:函数列表不就在二楼么...

DAS 发表于 2013-6-7 12:15:31

好吧,是代码有问题,不过gets那个没看懂啊.................还有,缺少了一个os.h,压缩包里没有。

rphero 发表于 2013-6-7 19:49:15

同样求os.h支持~

yzskyt 发表于 2013-6-20 23:23:42

DAS 发表于 2013-6-5 23:09 static/image/common/back.gif
还有,我记得c的输出函数是printf啊

puts是输出字符串
页: [1]
查看完整版本: dPicoc for Nspire Alpha1不稳定版本