TI-89T 教你在C程序里调用TI-BASIC程序,看看是否有人对这个感兴趣
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程序,看看是否有人对这个感兴趣相关推荐
- java中web错误返回码,关于在java程序里调用webservice报500返回码的有关问题
关于在java程序里调用webservice报500返回码的问题 我现在写了个程序,是调用webservice的,执行后我打印返回码是500 错误信息是 java.io.IOException: S ...
- android系统应用程序,Android调用系统应用程序
Android调用系统应用程序: 1.直接拨打电话: Intent callIntent = new Intent(Intent.ACTION_CALL, Uri .parse("tel:1 ...
- java调用应用程序_java调用第三方应用程序
1. java调用第三方应用使用 ProcessBuilder 对象来调用 例子位置: xc-service-manage-media-processor/test/TestProcessBuilde ...
- java女程序员工作_女生适合做java程序员吗 女java程序员好找工作
女生适合做java程序员吗 女java程序员好找工作?随着IT行业的飞速发展,程序员越来越受到重视,一些性格比较强势的女生,就也想加入到Java程序员的行列,因为他们感觉女生做这样的事情不会比男生差, ...
- 微信小程序开发-视频多大小程序就会缓存多大,导致小程序内存不足自动闪退的问题解决方法
微信小程序开发- 一开始添加的视频是mp4 格式的,视频多大微信小程序就会缓存多大, 但是我如果直接在微信聊天打开视频链接就不会,缓存就很少. 比如我有个视频1G, 把它放到腾讯云对象存储,把视频链接 ...
- 在VB应用程序中调用Excel2000
Visual Basic简称(VB)是设计Windows应用程序强有力的开发工具,"全球绝大多数Windows应用程序都是用VB开发的": Excel是目前使用最广泛的办公应用软件 ...
- JAVA调用C语言程序
JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...
- Java程序调用c语言程序
Java程序调用自定义c语言程序 计算机中有很多的编程语言,各有各的特色和应用范围.Java混合编程就是Java程序和其它应用程序进行通讯和数据交互,比如我们都知道c语言的计算性能要比Java的略好一 ...
- 教你如何在linux里安装应用程序
文章目录 一.linux应用程序概念 1.应用程序与系统命令的关系 2. 典型应用程序的目录结构 3.常见软件包封装类型 二.RPM 1. 常用命令 01.查询已安装的应用程序信息 02.查询未安装的 ...
最新文章
- Python 删除list 里面的空值
- Effective Java之用EnumSet代替位域(三十二)
- java常用算法分析和实现 amp,Java常用算法实现
- python中sklearn中的Imputer模块改动
- 江阴南菁高考2021高考成绩查询,江阴8所四星级高中高考成绩公布 南菁高中本一进线率达到了92.97%...
- 谷歌补丁Android官网,谷歌已发布 19年12月 Android 安全补丁
- 使用ExposedObject对Asp.net MVC中匿名类型的JsonResult做单元测试
- 蓝桥杯 ALGO-129 算法训练 特殊的数字四十
- 《http权威指南》阅读笔记(六)
- vs2013使用remote debug
- 从第一范式(2nf)到第二范式(3nf)_关系数据模型-范式
- Unity Drawcall、渲染顺序、打包图集、特效清理、代码优化
- paip.XXListener is already configured监听器已经被配置的解决
- VS2015产品密钥
- 将linux系统移动硬盘,着手打造你的随身系统---将linux装进移动硬盘
- zbox mysql_centos6.5搭建禅道
- ContextCapture User Guide V4.4.11 Welcome(Smart3D 帮助文档 第一章 欢迎)
- 数据库系列7:事务与锁的实现原理
- DSSD : Deconvolutional Single Shot Detector
- ETL和ELT的区别
热门文章
- 流水线上的思考——异步程序开发模型(2)
- RDS for MySQL Mysqldump常见问题及处理
- PHP下操作Linux消息队列完成进程间通信的方法
- 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡【转载】
- nginx+tomcat8+memcached实现session共享具体操作
- 域名服务器(DNS)工作原理
- 数据源的配置和使用 视频下载
- Request.ServerVariables的详细应用(转)
- http服务详解(1)——一次完整的http服务请求处理过程
- [luoguP2601] [ZJOI2009]对称的正方形(二维Hash + 二分 || Manacher)