个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈
前言
介绍 Prolog IDEs 的很多,但是专门介绍 Strawberry Prolog 的文章几乎没有。不要看它的官方网站还是上世纪的风格,也没有什么移动版视图,但是其到2020年1月23日仍有更新,推出了5.0版本的二进制包,相应地提供了其源码包。自 3.0 Beta 4 推出的示例小游戏 WarCraft.pro(位于
安装目录/Games/
下)至今仍吸引着我。希望能转化为其他编程语言实现,研究 IDE 如何实现了 Prolog 脚本是其中一项重要内容,在此写下自己的分析进展。Assert.cpp - 编译入口
文件内只定义了一个函数:
void assert(DWORD iii, DWORD where)
在 Linux 下编译会提示
assert
函数只需要一个参数却给了两个,这是因为与系统定义的assert
函数冲突了,虽然stdafx.h
中似乎取消了assert
原来的定义:#undef assert //???plam
重命名这个函数为
prologAssert
之类的别的名称可以避免错误,在HeadFunc.h
中的下述声明也需要修改:extern void assert(DWORD, DWORD);
assert
函数体内的Program
在Intelig.cpp
文件中声明:DWORD *Functors, *Program, *Program2, *ProgTail, *Pointers;
在
Global.cpp
中赋值:Program=(LPDWORD)GlobalLock(hProgram);
Intelig.cpp - 加载语法文件(.add和.def)
void compile(int flag) { ... file.SeekToBegin(); f_end=file.Read(string, L_BUFER); ... }
string
即 IDE 读取到的Standard.def
的文件内容。stdafx.h - 引入MFC库
... #include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC extensions #include <afxole.h> // MFC OLE classes #include <afxodlgs.h> // MFC OLE dialog classes #include <afxdisp.h> // MFC Automation classes #include <afxdocob.h> // Here, minimal DB support is requested. No view is chosen. #include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT #include <afxsock.h> // MFC socket extensions #include <afxrich.h> // MFC rich edit classes ...
在不同版本的 Visual Studio 构建时,下面的宏可能需要修改,按照构建提示修改即可
// Modify the following defines if you have to target a platform prior to the ones specified below. // Refer to MSDN for the latest info on corresponding values for different platforms. #ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later. #define WINVER 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later. #endif // This was 0x0400 for 95 and later but now is 98 and later #ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later. #define _WIN32_WINNT _WIN32_WINNT_WINXP // Change this to the appropriate value to target Windows 98 and Windows 2000 or later. #endif #ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. #endif
Graphic.h - Strawberry Prolog 图形相关函数的实现
示例:
case 166: // get_selection Temp->GetSel((long &)i,(long &)j); Buda1[Buda2[Arguments+1]]=Buda1[Buda2[Arguments+2]]=TT_INT; Buda2[Buda2[Arguments+1]]=i; Buda2[Buda2[Arguments+2]]=j; WILL_CLEAN(Buda2[Arguments+1]); WILL_CLEAN(Buda2[Arguments+2]); return(1);
Strawberry.rc - 界面定义
顶部工具栏:
/ // // Toolbar // IDR_MAINFRAME_BIG TOOLBAR 24, 24 BEGIN BUTTON ID_FILE_NEW BUTTON ID_FILE_OPEN_ST BUTTON ID_FILE_SAVE SEPARATOR BUTTON ID_EDIT_CUT BUTTON ID_EDIT_COPY BUTTON ID_EDIT_PASTE SEPARATOR BUTTON ID_RUN_RUN BUTTON ID_RUN_COMPILE BUTTON ID_RUN_BUILD_EXE BUTTON ID_TRACE_STEP SEPARATOR BUTTON ID_TRACE_PROOFTREE BUTTON ID_TOOLS_OBJBROW SEPARATOR BUTTON ID_FILE_PRINT BUTTON ID_FILE_PRINT_PREVIEW BUTTON ID_APP_ABOUT BUTTON ID_CONTEXT_HELP SEPARATOR BUTTON ID_TRACE_TRACE BUTTON ID_TRACE_STOP END
菜单
/ // // Menu // IDR_ProjectTYPE_CNTR_IP MENU BEGIN POPUP "&File" BEGIN MENUITEM "&New\tCtrl+N", ID_FILE_NEW MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN_ST MENUITEM "&Close", ID_FILE_CLOSE MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE MENUITEM "Save &As...", ID_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "&Print...\tCtrl+P", ID_FILE_PRINT MENUITEM "Print Pre&view", ID_FILE_PRINT_PREVIEW MENUITEM "P&rint Setup...", ID_FILE_PRINT_SETUP MENUITEM SEPARATOR MENUITEM "Sen&d...", ID_FILE_SEND_MAIL MENUITEM SEPARATOR MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED MENUITEM SEPARATOR MENUITEM "E&xit", ID_APP_EXIT END MENUITEM SEPARATOR MENUITEM SEPARATOR POPUP "&Window" BEGIN MENUITEM "&New Window", ID_WINDOW_NEW MENUITEM "&Cascade", ID_WINDOW_CASCADE MENUITEM "&Tile", ID_WINDOW_TILE_HORZ MENUITEM "&Arrange Icons", ID_WINDOW_ARRANGE END END
附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:
(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。