2019独角兽企业重金招聘Python工程师标准>>>

教你在C 程序里调用TI-BASIC程序,看看是否有人对这个感兴趣
昨天翻TIGCC的文档,先瞅了瞅FAQ,话说我看文档有个习惯,就是先看目录,再看FAQ,因为FAQ汇集了很多人曾经遇到过的问题、犯过的错误, 而且涵盖各种不同难度,非常值得一看。

在FAQ中看到教人用C程序调用TI-BASIC程序的示范代码,正好我最近在 研究TI-BASIC,就想试试,原来的例程如下,我加了一下注释,你会发现C语言的特点是从右往左执行:

// 在C中定义一个 函数,参数是TI-BASIC的程序名称
void progrun(const char *name)
{ // 定义字符串变量 char fname[25]; // 定义一个HANDLE型指针变量 h,h 将来使用时会按照HANDLE结构动态分配一个内存块,把内存块入口地址关联到 h ,h 实际是一个HANDLE结构型的内存指针变量 HANDLE h; // 把TI-BASIC程序名称拷贝到我们定义的字符串变量 fname 中 strcpy (fname, name); // 在 fname 追加"()",假设fname里原来的数据是"myprgm",执行strcat后就变成"myprgm()" strcat (fname, "()"); // 解析字符串fname里的表达式,并且把tokenized(标识化)的表达式内容全部压入到表达式栈中   push_parse_text (fname); // 这个语句要从后往前分析:HS_popEStack () 做的是分配一个内存区域,然后把刚才压栈的表达式出栈,并且把出栈的内容拷贝到新分配的内存块里,最后把这个内存块的地址当做一个结构指针变量返回给 h h = HS_popEStack (); TRY // 调用 NG_execute 来执行 h ,也就是执行 TI-BASIC 程序 NG_execute (h, FALSE); FINALLY // 最终执行完毕,释放 h 使用的内存 空间 HeapFree (h); ENDFINAL
}

最后在你的 main 函数里调用 progrun 就可以了,这里假设你已经在 计算器上准备好了一个名为 testprog 的TI-BASIC 程序
progrun ("testprog");

我用TIGCC在PC上编译了一次,OK,又在 计算器上用GTC编译了一次,也OK,下面是我稍作修改后的代码,因为例子里没有让TI-BASIC程序带参数,我改写了一个带参数版本的,其实简单,就是把你的PRGM的内容全部传到 progrun 里就可以了,然后把追加括号的语句注释掉即可。不过这个带参数的 功能不完全,因为TIGCC的 main函数没有 argc 和 argv,所以我还没搞清楚 如何在主程序中带参数,因此这里默认的PRGM程序名称为 apic(1,2) ,有两个参数,所以你需要事先在计算器上创建一个名称为apic的PRGM程序,这个程序带两个参数。

下面是代码:

#define USE_TI89
#define OPTIMIZE_ROM_CALLS
#define MIN_AMS 101
#include <tigcclib.h>
void progrun(const char *name)
{ char fname[25]; HANDLE h; strcpy (fname, name); //strcat (fname, "()"); push_parse_text (fname); h = HS_popEStack (); TRY NG_execute (h, FALSE); FINALLY HeapFree (h); ENDFINAL
} // Main Function
void _main(void)
{ progrun ("apic(0,0)"); //progrun ("apic(0,100)"); ngetchx();
}

这里是编译好的程序,用法就是直接在home界面执行:
cb()

转载于:https://my.oschina.net/freeblues/blog/62925

TI-89T 教你在C程序里调用TI-BASIC程序,看看是否有人对这个感兴趣相关推荐

  1. java中web错误返回码,关于在java程序里调用webservice报500返回码的有关问题

    关于在java程序里调用webservice报500返回码的问题 我现在写了个程序,是调用webservice的,执行后我打印返回码是500  错误信息是 java.io.IOException: S ...

  2. android系统应用程序,Android调用系统应用程序

    Android调用系统应用程序: 1.直接拨打电话: Intent callIntent = new Intent(Intent.ACTION_CALL, Uri .parse("tel:1 ...

  3. java调用应用程序_java调用第三方应用程序

    1. java调用第三方应用使用 ProcessBuilder 对象来调用 例子位置: xc-service-manage-media-processor/test/TestProcessBuilde ...

  4. java女程序员工作_女生适合做java程序员吗 女java程序员好找工作

    女生适合做java程序员吗 女java程序员好找工作?随着IT行业的飞速发展,程序员越来越受到重视,一些性格比较强势的女生,就也想加入到Java程序员的行列,因为他们感觉女生做这样的事情不会比男生差, ...

  5. 微信小程序开发-视频多大小程序就会缓存多大,导致小程序内存不足自动闪退的问题解决方法

    微信小程序开发- 一开始添加的视频是mp4 格式的,视频多大微信小程序就会缓存多大, 但是我如果直接在微信聊天打开视频链接就不会,缓存就很少. 比如我有个视频1G, 把它放到腾讯云对象存储,把视频链接 ...

  6. 在VB应用程序中调用Excel2000

    Visual Basic简称(VB)是设计Windows应用程序强有力的开发工具,"全球绝大多数Windows应用程序都是用VB开发的": Excel是目前使用最广泛的办公应用软件 ...

  7. JAVA调用C语言程序

    JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...

  8. Java程序调用c语言程序

    Java程序调用自定义c语言程序 计算机中有很多的编程语言,各有各的特色和应用范围.Java混合编程就是Java程序和其它应用程序进行通讯和数据交互,比如我们都知道c语言的计算性能要比Java的略好一 ...

  9. 教你如何在linux里安装应用程序

    文章目录 一.linux应用程序概念 1.应用程序与系统命令的关系 2. 典型应用程序的目录结构 3.常见软件包封装类型 二.RPM 1. 常用命令 01.查询已安装的应用程序信息 02.查询未安装的 ...

最新文章

  1. Python 删除list 里面的空值
  2. Effective Java之用EnumSet代替位域(三十二)
  3. java常用算法分析和实现 amp,Java常用算法实现
  4. python中sklearn中的Imputer模块改动
  5. 江阴南菁高考2021高考成绩查询,江阴8所四星级高中高考成绩公布 南菁高中本一进线率达到了92.97%...
  6. 谷歌补丁Android官网,谷歌已发布 19年12月 Android 安全补丁
  7. 使用ExposedObject对Asp.net MVC中匿名类型的JsonResult做单元测试
  8. 蓝桥杯 ALGO-129 算法训练 特殊的数字四十
  9. 《http权威指南》阅读笔记(六)
  10. vs2013使用remote debug
  11. 从第一范式(2nf)到第二范式(3nf)_关系数据模型-范式
  12. Unity Drawcall、渲染顺序、打包图集、特效清理、代码优化
  13. paip.XXListener is already configured监听器已经被配置的解决
  14. VS2015产品密钥
  15. 将linux系统移动硬盘,着手打造你的随身系统---将linux装进移动硬盘
  16. zbox mysql_centos6.5搭建禅道
  17. ContextCapture User Guide V4.4.11 Welcome(Smart3D 帮助文档 第一章 欢迎)
  18. 数据库系列7:事务与锁的实现原理
  19. DSSD : Deconvolutional Single Shot Detector
  20. ETL和ELT的区别

热门文章

  1. 流水线上的思考——异步程序开发模型(2)
  2. RDS for MySQL Mysqldump常见问题及处理
  3. PHP下操作Linux消息队列完成进程间通信的方法
  4. 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡【转载】
  5. nginx+tomcat8+memcached实现session共享具体操作
  6. 域名服务器(DNS)工作原理
  7. 数据源的配置和使用 视频下载
  8. Request.ServerVariables的详细应用(转)
  9. http服务详解(1)——一次完整的http服务请求处理过程
  10. [luoguP2601] [ZJOI2009]对称的正方形(二维Hash + 二分 || Manacher)