cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 5599|回复: 16

[TI-Nspire系列] dPicoc for Nspire Alpha1不稳定版本

[复制链接]
发表于 2013-6-5 18:12:31 | 显示全部楼层 |阅读模式
计算器程序
程序名称: dPicoc for Nspire
平台: TI-Nspire 
系统/软件要求: ndless
版本号: 2.1n
类型: 其他 
作者: 移植:diameter==安安~
大小(K): 87
更新日期: 2013-06-05
描述: nspire可用的on-Calc c语言解释器
已知缺陷: 标准库有问题
源代码: 闭源
移植成功,但是ndless的标准库有很多问题,很多函数能否正常使用未知 showtitle.png
具体的支持函数列表放在二楼
使用方法:在根目录下建一个叫“dpicoc”的文件夹,把要执行的源文件都放到里面
程序初始化为灰度模式,支持ndless的机器理论上都可以使用。程序已在clickpad上测试通过
想在机器上编辑文件的可以考虑使用nTxt

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

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

  3. long atol(char *nptr)
  4. {
  5.     int c;          /* current char */
  6.     long total;     /* current total */
  7.     int sign;       /* if '-', then negative, otherwise positive */

  8.     /* skip whitespace */
  9.     while ( isspace((int)(unsigned char)*nptr) )
  10.         ++nptr;

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

  15.     total = 0;

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

  20.     if (sign == '-')
  21.         return -total;
  22.     else
  23.         return total;   /* return result, negated if necessary */
  24. }
  25. int main()
  26. {
  27.     char buf[128];
  28.     int n;
  29.         puts("input a number:");
  30.     gets(buf);
  31.     n = atol(buf);
  32.     sprintf(buf,"1+2+3+...+%d = %d",n,n*(n+1)/2);
  33.     puts(buf);
  34.         return 0;
  35. }
复制代码
sum.png
例3:bmp文件读取(文件io正常~)
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int width,s,height,offset,x,y;
  5.         FILE * fp = fopen("/documents/dpicoc/C_C.bmp.tns","rb");
  6.         if (fp==NULL)
  7.         {
  8.                 puts("cannot open file");
  9.                 return -1;
  10.         }
  11.         fseek(fp,0x1C,SEEK_SET);
  12.         fread(&s,sizeof(short),1,fp);
  13.         if (s != 24)
  14.         {
  15.                 puts("not a 24-bit bitmap");
  16.                 fclose(fp);
  17.                 return -1;
  18.         }
  19.         fseek(fp,0x12,SEEK_SET);
  20.         fread(&width ,sizeof(int),1,fp);
  21.         fread(&height,sizeof(int),1,fp);
  22.         fseek(fp,0xA,SEEK_SET);
  23.         fread(&offset,sizeof(int),1,fp);
  24.         fseek(fp,offset,SEEK_SET);
  25.        
  26.         char buf[128];
  27.         unsigned char r,g,b,c;
  28.         int i;
  29.         sprintf(buf,"width = %d,height = %d\noffset = %d\n",width,height,offset);
  30.         puts(buf);
  31.         puts("press enter..");
  32.         gets(buf);
  33.         clrscr();
  34.         for (y = 0;y < height;++y)
  35.         {
  36.                 for (x = 0;x < width;++x)
  37.                 {
  38.                         fread(&b,1,1,fp);fread(&g,1,1,fp);fread(&r,1,1,fp);c = (r+g+b)/3>>4;
  39.                         setpixel(x,height-y,c);
  40.                 }
  41.         }
  42.         fclose(fp);
  43.         gets(buf);
  44.         return 0;
  45. }
复制代码
bitmap.png
附件:程序、一些例子:
dPicoc.zip (85.58 KB, 下载次数: 20)

评分

参与人数 1金钱 +2 收起 理由
.zyz + 2 要求改写ntxt,这货打不了#,%&amp;quot;;

查看全部评分

 楼主| 发表于 2013-6-5 18:12:51 | 显示全部楼层
本帖最后由 diameter 于 2013-6-5 18:30 编辑


ndless标准库很多有问题,请大家及时报错以便修正或者重写
标准库支持:
  1. stdio.h
  2. 常量:
  3. EOF
  4. SEEK_SET
  5. SEEK_CUR
  6. SEEK_END
  7. FILENAME_MAX
  8. 函数:
  9. int sprintf(char *, char *,...);
  10. int puts(char *);
  11. char * gets(char *);
  12. void cls();/这是清除控制台内容的,与下面的clrscr不同
  13.         
  14. FILE *fopen(char *, char *);
  15. FILE *freopen(char *, char *, FILE *);
  16. int fclose(FILE *);
  17. int fread(void *, int, int, FILE *);
  18. int fwrite(void *, int, int, FILE *);
  19. int fgetc(FILE *);
  20. int getc(FILE *);
  21. char *fgets(char *, int, FILE *);
  22. int fputc(int, FILE *);
  23. int fputs(char *, FILE *);
  24. int feof(FILE *);
  25. int ftell(FILE *);
  26. int fseek(FILE *, int, int);

  27. void setpixel(int,int,unsigned int);
  28. void clrscr();
复制代码
重要::puts和gets基于一个console,不是stdout和stdin
  1. stdlib
  2. 函数:
  3. float atof(char *);
  4. int atoi(char *);
  5. int atol(char *);
  6. int strtol(char *,char **,int);
  7. void *malloc(int);
  8. void *calloc(int,int);
  9. void *realloc(void *,int);
  10. void free(void *);
  11. int rand();
  12. void srand(int);
  13. void abort();
  14. void exit(int);
  15. char *getenv(char *);
  16. int abs(int);
  17. int labs(int);
复制代码
  1. string
  2. 函数:
  3. void *memcpy(void *,void *,int);
  4. void *memmove(void *,void *,int);
  5. void *memchr(char *,int,int);
  6. int memcmp(void *,void *,int);
  7. void *memset(void *,int,int);
  8. char *strcat(char *,char *);
  9. char *strncat(char *,char *,int);
  10. char *strchr(char *,int);
  11. char *strrchr(char *,int);
  12. int strcmp(char *,char *);
  13. int strncmp(char *,char *,int);
  14. char *strcpy(char *,char *);
  15. char *strncpy(char *,char *,int);
  16. int strlen(char *);
  17. char *strstr(char *,char *);
复制代码
常量NULL在以上每个文件都有定义
  1. errno
  2. 常量:
  3. errno
复制代码
  1. ctype
  2. 函数:
  3. int isalnum(int);
  4. int isalpha(int);
  5. int isblank(int);
  6. int iscntrl(int);
  7. int isdigit(int);
  8. int isgraph(int);
  9. int islower(int);
  10. int isprint(int);
  11. int ispunct(int);
  12. int isspace(int);
  13. int isupper(int);
  14. int isxdigit(int);
  15. int tolower(int);
  16. int toupper(int);
复制代码
发表于 2013-6-5 18:23:27 | 显示全部楼层
板凳
发表于 2013-6-5 19:17:14 来自手机 | 显示全部楼层
支持一下,有时间就测试(最早今晚最晚高考以后…)
另外请问lz能否提供一个ntxt,现在上omnimaga巨慢…
发表于 2013-6-5 20:01:38 | 显示全部楼层
本帖最后由 haoxuan0532 于 2013-6-6 07:00 编辑

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

图片太大了= =。。。

点评

呃....发的硬盘图吧....  发表于 2013-6-5 21:36
D:\360data\重要数据\桌面\先进思想学习\毛泽东语录\新建文件夹\新建文件夹\高清.rmvb  发表于 2013-6-5 20:22
发表于 2013-6-5 21:13:01 | 显示全部楼层
小饕好敬业啊   
要高考了好好努力呦!!
发表于 2013-6-5 21:27:45 来自手机 | 显示全部楼层
不错,另外建议提供彩色模式和灰度模式的切换(可考虑重启生效),做个好看点的GUI(以后的事了。
发表于 2013-6-5 23:09:32 来自手机 | 显示全部楼层
还有,我记得c的输出函数是printf啊
发表于 2013-6-6 08:37:37 | 显示全部楼层
又要和谐系统,我的3.2最新版的系统不知道和谐的了吗?
发表于 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
还有,我记得c的输出函数是printf啊

同问。。弄的我疑惑了半天 这是啥语言?
发表于 2013-6-6 14:16:43 | 显示全部楼层
不知道 cx 能不能用 晚上回去试试
发表于 2013-6-6 23:27:01 来自手机 | 显示全部楼层
还有,if语句似乎有问题。
if(a == b)
{
      puts("unlocked");
}
无论条件是否成立,均按成立处理。
也可能是gets的毛病。
另外拜托发个函数列表过来,我不会ndless。
[email protected]
 楼主| 发表于 2013-6-7 11:56:28 | 显示全部楼层
本帖最后由 diameter 于 2013-6-7 13:01 编辑
DAS 发表于 2013-6-6 23:27
还有,if语句似乎有问题。
if(a == b)
{

请把完整代码发上。下面的程序能正确执行,if应该没有问题
  1. #include <stdio.h>
  2. int main()
  3. {
  4.   int a,b;
  5.   a = 1;
  6.   b = 2;
  7.   if (a==b)
  8.     puts("a==b");
  9.   else
  10.     puts("a!=b");
  11.   return 0;
  12. }
复制代码
ps:函数列表不就在二楼么...
发表于 2013-6-7 12:15:31 | 显示全部楼层
好吧,是代码有问题,不过gets那个没看懂啊.................还有,缺少了一个os.h,压缩包里没有。
发表于 2013-6-7 19:49:15 来自手机 | 显示全部楼层
同样求os.h支持~
发表于 2013-6-20 23:23:42 | 显示全部楼层
DAS 发表于 2013-6-5 23:09
还有,我记得c的输出函数是printf啊

puts是输出字符串
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-4-19 01:58 , Processed in 0.062516 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表