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

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

教你在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webgl坐标转换_OpenGL/WebGL顶点坐标变换过程简介

世界坐标是按照笛卡尔坐标系定义出来的绝对坐标系&#xff0c;下面的各种坐标系都建立在世界坐标的基础上。对象坐标系对象被应用于任何变换之前的初始位置和方向所在的坐标系&#xff0c;也就是当前绘图坐标系&#xff1b;该坐标系不固定且仅对该对象适用&#xff1b;默认情况…

利用计算机制作多媒体最后一步,福建省高中会考 多媒体技术应用 选择题专项练习十一(201206)(有答案)...

多媒体技术应用选择题专项练习十一(201206)1.下列都属于数字图像采集工具的是( )A.数码照相机、扫描仪B.麦克风、扫描仪C.打印机、数码照相机D.数码摄像机、打印机2.下列关于制作多媒体作品的叙述&#xff0c;不正确的是( )A.规划与设计是制作多媒体作品的重要步骤B.制作多媒体…

工程师和科学家有什么区别

全世界有3.14 % 的人已经关注了数据与算法之美科学家和工程师有什么不同&#xff1f;通常民众认为&#xff0c;工程师就是搞技术的&#xff0c;科学家就是搞科研的。对科学领域有一定认识的人群会说&#xff0c;工程师是应用科研成果的人&#xff0c;科学家是发现科学规律的人。…

CHANGE MASTER TO语法--MySql数据库

CHANGE MASTER TOmaster_def[,master_def] ... 可以更改从属服务器用于与主服务器进行连接和通讯的参数。 MASTER_USER,MASTER_PASSWORD,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_KEY和MASTER_SSL_CIPHER用于向从属服务器提供有关如何与主服务器…

聊一聊Jmeter与多接口测试

背景 前面两篇聊过了 JMeter 的 简单使用 和 参数化&#xff0c;主要都还是单接口的。很多时候&#xff0c;一个业务要走完&#xff0c;它会依赖多个接口&#xff0c;而且这些接口会有依赖性。好比说&#xff0c;我想查询一个订单信息&#xff0c;那么大前提肯定是我已经下单了…

评价的等级优良差_满意程度等级划分

满意程度等级划分分四级&#xff1a;优良中差模块满意度评价标准优&#xff1a;程序运行&#xff1a;完全符合需求的要求&#xff0c;调试运行无BUG并无内部错误&#xff0c;与其他模块可以完全耦合&#xff0c;内部模块紧凑&#xff0c;运行效率高。代码编写界面设计&#xff…

计算机在学前教育和美术绘画中的应用,幼儿园美术教学活动中信息技术的应用...

随着现代经济社会的快速发展和科技水平的进一步提升&#xff0c;信息技术在多个领域内逐步渗透并获得了较为广泛的推广和应用&#xff0c;幼儿园美术教育行业同样如此。在此过程中&#xff0c;信息技术有效融合图像、声音、文字等多种元素&#xff0c;并严格根据幼儿教师教学目…

大数据时代,还不认识这些数据分析工具?

在大数据时代的现今&#xff0c;数据庞大且繁杂&#xff0c;因此&#xff0c;如何有效利用它们&#xff0c;达到资源不浪费的目的成为了相关工作者思考的问题&#xff0c;于是数据分析就应运而生。在实际生活中&#xff0c;数据分析已经成为人们作出判断和采取行动的基石。比如…

C# 强大的新特性 Source Generator

C# 强大的新特性 Source GeneratorIntro微软在 .NET 5 中引入了 Source Generator 的新特性&#xff0c;利用 Source Generator 我们可以在应用编译的期间根据当前编译信息动态生成代码&#xff0c;而且可以在我们的 C# 代码中直接引用动态生成的代码&#xff0c;从而大大减少重…

智商情商哪个重要_智商or情商 哪个对孩子更重要

对于一个正在为未来的人生储备能量的孩子而言&#xff0c;到底是拥有希望、拥有百折不挠的勇气重要&#xff0c;还是理解一首诗的标准答案重要&#xff1f;也许有人会说&#xff0c;培养孩子的那些品质&#xff0c;自有别的渠道&#xff0c;何必非要在这件事上钻牛角尖&#xf…

cefsharp49显示html,CefSharp-cefshar

压缩包 : fca120b77964c5c83f670e8d8723556c.zip 列表CefSharp-cefsharp-49/CefSharp-cefsharp-49/.gitattributesCefSharp-cefsharp-49/.gitignoreCefSharp-cefsharp-49/Build.batCefSharp-cefsharp-49/CONTRIBUTING.mdCefSharp-cefsharp-49/CefSharp.BrowserSubprocess.Core/…

为什么Kubernetes从节点会join失败

有段时间没有鼓捣Kubernetes了&#xff0c;今天重置Kubernetes集群后&#xff0c;slave节点不能加入master节点了&#xff0c;我把问题和解决方案分享给大家。我本地的Kubernetes集群包括一个主节点和一个从节点&#xff0c;如下图&#xff1a;问题主节点启动后&#xff0c;从节…

SharePoint 2007 Select People and Groups中搜索不到其他Domain账户的问题[已解决]

问题描述&#xff1a; 在一个SiteCollection中添加用户的时候发现来自另外一个Domain的账户无法添加。我们要添加NNEAS\HIKC到当前网站并赋予Full Control权限。但是当点击Add Users后发现在弹出的Select People and Groups中搜索不到这个用户&#xff0c;导致无法添加成功。仅…

简单计算机面试题库及答案_计算机专业复试面试问题含答案

1 .用预处理指令#define声明一个常数&#xff0c;用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL2.嵌入式系统中经常要用到无限循环&#xff0c;你怎么样用C编写死循环呢&#xff1f;while(1){}或者for(;;){}3.用变量a给出下面的定义a)一…

关于计算机英语阅读,一篇摘选的关于计算机的英语阅读材料,对大家的英语也许会有提高!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Name : UserNameDocName : "Travel Request for " Name ", " GetDate()DocSumSet(DescriptiveType!; "Travel Request")DocSumSet(DescriptiveName!; DocName)DocSumSet(Author!; Name)This frag…

推荐7个高质量的学术公众号

全世界有3.14 % 的人已经关注了数据与算法之美在这个知识千变万化的时代&#xff0c;只有不断学习、充实自我&#xff0c;才能跟上时代。以下几个优质公众号&#xff0c;能让你在闲暇的时候&#xff0c;扩宽视野。考虑到有些人可能还不知道这些号&#xff0c;今天给大家都一一列…

井底飞天

这又是孔庆东&#xff0c;孔老师的作品。 因为第一篇便是《我看语文第一课》觉得言之有理&#xff0c;于是从图书馆借出来看。 书通篇算是还好。 前两天&#xff0c;国文国史三十年和这本井底飞天的书并行看时&#xff0c;需要切换自己的思维。当和时间简史并行看时&#xff0c…

WPF 用装饰器制作抽屉效果

wpf实现抽屉效果&#xff0c;一般就一个动画显示就完事了&#xff0c;我这用到了&#xff0c;就研究了一下&#xff0c;用装饰器给控件添加遮罩层&#xff0c;然后在上面添加抽屉控件&#xff0c;虽然麻烦了点&#xff0c;也算是自己研究的成果了。看看效果&#xff1a;下面就看…

ueditor 编辑html文件名,UEditor编辑器自定义上传图片或文件路径的修改方法,ueditor修改方法...

UEditor编辑器自定义上传图片或文件路径的修改方法&#xff0c;ueditor修改方法使用ueditor编辑器&#xff0c;附件默认在ueditor/php/upload/, 我的附件地址是网站根目录下/data/upload/ ,需要修改ueditor如下&#xff1a;第一步&#xff1a;打开php/config.php修改图片目录复…