记录我很久以前登报的一篇文章(用DELPHI编写CCI程序)

电脑报2000年第24期

  随着Internet时代的来临,为WWW(World Wide Web)编写程序已经变得越来越普遍起来。大量的数据库应用和其他一些较为复杂的操作使得HTML越来越无法满足我们的需要,就算是JavaScript 也只能完成一些较为简单的程序,所以众多主页都使用了CGI。许多刚开始制作个人主页的“菜鸟”也渴望了解CGI的编程技术,下面我介绍一下CGI的编程 方法。
  首先,你必须会一种编译型的编程语言,如:Dlephi。然后,你需要一个Web服务器,如果没有的话,可以免费去微软的网站下载一个Personal Web Server。
  下面就让我们开始吧!
  先建立一个没有窗体的控制台应用程序(注:向代码中添加{SAPPTYPE CONSOLE}使程序转为控制台应用程序),然后输入相应的代码如下:
  PROGRAM XHCGI;
  {SAPPTYPE CONSOLE}
  USES
  WINDOWS,SYSUTILS;
  CONST
  CGIVAR:ARRAY[1..22]OF STRING[30]=
  (′SERVER_NAME′,
  ′SERVER_PROTOCOL′,
  ′SERVER_PORT′,
  ′SERVER_SOFTWARE′,
  ′PATH_TRANSLATED′,
  ′PATH_INFO′,
  ′REMOTE_HOST′,
  ′REMOTE_USER′,
  ′REMOTE_ADDR′,
  ′REMOTE_IDENT′,
  ′REQUEST_METHOD′,
  ′GATEWAY_INTERFACE′,
  ′DOCUMENT_ROOT′,
  ′SCRIPT_NAME′,
  ′QUERY_STRING′,
  ′HTTP_REFERER′,
  ′HTTP_ACCEPT′,
  ′HTTP_USER_AGENT′,
  ′HTTP_FROM′,
  ′CONTENT_TYPE′,
  ′CONTENT_LENGTH′,
  ′CONTENT_COOKIE′);
  //一些常用的CGI环境变量。
  VAR
  TESTSTR:ARRAY[0..255]OF CHAR;
  BEGIN
  WRITELN(′CONTENT TYPE:TEXT/HTML′);
  WRITELN;
  WRITELN(′$#@60;HTML$#@62;′);
  WRITELN(′$#@60;HEAD$#@62;′);
  WRITELN(′$#@60;META HTTP-EQUIV=″CONTENT-TYPE″ CONTENT=″TEXT/HTML; CHARSET=GB2312″$#@62;′);
  WRITELN(′$#@60;TITLE$#@62;星河创作室 >> CGI测试$#@60;/TITLE$#@62;′);
  WRITELN(′$#@60;/HEAD$#@62;′);
  WRITELN(′$#@60;BODY BGCOLOR=″#000000″ TEXT=″#FFFFFF″ LINK=″#00FF00″ VLINK=″#00FFFF″
  ALINK=″#FFFF ?#@62;′);
  GETENVIRONMENTVARIABLE(′REQUEST_METHOD′,TESTSTR,SIZEOF(TESTSTR));
  WRITELN(′星河创作室′);
  WRITELN(′$#@60;BR$#@62;′);
  FOR CGIVARS:=LOW(CGIVAR) TO HIGH(CGIVAR) DO
  BEGIN
  CGISTR:=CGIVAR[CGIVARS];
  GETENVIRONMENTVARIABLE(PCHAR(CGISTR),TESTSTR,SIZEOF(TESTSTR));
  WRITELN(CGISTR+′: ′+TESTSTR);
  WRITELN(′$#@60;BR$#@62;′);
  END;
  //FOR 为依次以CGIVAR数组中的CGI环境变量名来读取CGI环境变量,然后发给浏览器。
  WRITELN(′$#@60;/BODY$#@62;′);
  WRITELN(′$#@60;/HTML$#@62;′);
  END.
  在浏览器的地址栏中输入程序的地址,运行一下,你可以看到一些CGI环境变量。如Web服务器的主机名、HTTP请求的协议、Web 服务器的名称与版本等等。
  其实,以上的程序只是读取一些CGI环境变量,并没有实际的意义。使用CGI最主要的目的是要读取浏览器中HTML窗体送出的数据信息。
  代码如下:
  PROCEDURE GETPOST;
  VAR
  STRVAR,STRTEST:STRING;
  STRLEN:ARRAY[0..10]OF CHAR;
  BEGIN
  GETENVIRONMENTVARIABLE(′QUERY_STRING′,STRLEN,SIZEOF(STRLEN));
  //读取浏览器HTML窗体送出的信息
  SETLENGTH(STRVAR,STRTOINTDEF(STRLEN,100));
  READLN(STRVAR);
  STRTEST:=EXTRACTFROMDATA(STRVAR,′NAME′);
  //读取名为NAME的输入框中的输入信息
  STRTEST:=NAMECRC(STRTEST);
  WRITELN(′姓名:′+STRTEST);
  WRITELN(′$#@60;BR$#@62;′);
  END;
  下面是输入信息分解模块(上面的模块中要使用):
  FUNCTION EXTRACTFROMDATA(DATA,TAG:STRING):STRING;
  VAR NPOS:INTEGER;
  BEGIN
  NPOS:=POS(TAG+′=′,DATA);
  IF NPOS$#@62;0 THEN
  BEGIN
  RESULT:=COPY(DATA,NPOS+1+LENGTH(TAG),LENGTH(DATA)-NPOS);
  NPOS:=POS(′&′,RESULT);
  IF NPOS$#@62;0 THEN RESULT:=COPY(RESULT,1,NPOS-1);
  END ELSE RESULT:=′′;
  END;
  好了,一个简单的CGI程序已经完成了,你可以做一个网页试一下CGI的效果。下面就要靠你自己努力了,祝你早日成为CGI高手。

“七”乐无穷,尽在新浪新版博客,快来体验啊~~~请点击进入~

转载于:https://my.oschina.net/StreamWang/blog/4043

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的贪吃蛇游戏程序,使用了C语言和标准库函数: ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> // 定义界面大小 #define WIDTH 30 #define HEIGHT 20 // 定义蛇的最大长度 #define MAX_LENGTH WIDTH*HEIGHT // 定义蛇的方向 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 // 定义蛇身体和食物的标识符 #define BODY '*' #define FOOD '$' // 定义全局变量 int score = 0; // 得分 int direction = RIGHT; // 初始方向为向右 int length = 3; // 初始长度为3 int x[MAX_LENGTH] = {0}, y[MAX_LENGTH] = {0}; // 蛇的坐标数组 int food_x, food_y; // 食物的坐标 // 初始化游戏 void init() { // 隐藏光标 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(hOut, &cci); cci.bVisible = FALSE; SetConsoleCursorInfo(hOut, &cci); // 初始化蛇的坐标 x[0] = WIDTH/2; y[0] = HEIGHT/2; for (int i = 1; i < length; i++) { x[i] = x[i-1]-1; y[i] = y[i-1]; } // 随机生成食物的坐标 srand((unsigned) time(NULL)); food_x = rand()%WIDTH; food_y = rand()%HEIGHT; } // 绘制界面 void draw() { system("cls"); // 清屏 // 绘制上边界 for (int i = 0; i < WIDTH+2; i++) { printf("#"); } printf("\n"); // 绘制中间部分 for (int i = 0; i < HEIGHT; i++) { printf("#"); for (int j = 0; j < WIDTH; j++) { // 判断当前位置是否为蛇身体 int is_body = 0; for (int k = 0; k < length; k++) { if (x[k] == j && y[k] == i) { printf("%c", BODY); is_body = 1; break; } } // 判断当前位置是否为食物 if (!is_body && j == food_x && i == food_y) { printf("%c", FOOD); } else if (!is_body) { printf(" "); } } printf("#\n"); } // 绘制下边界 for (int i = 0; i < WIDTH+2; i++) { printf("#"); } printf("\n"); // 显示得分 printf("Score: %d\n", score); } // 控制蛇的移动 void move() { // 获取键盘输入 if (_kbhit()) { char ch = _getch(); switch (ch) { case 'w': case 'W': if (direction != DOWN) { direction = UP; } break; case 's': case 'S': if (direction != UP) { direction = DOWN; } break; case 'a': case 'A': if (direction != RIGHT) { direction = LEFT; } break; case 'd': case 'D': if (direction != LEFT) { direction = RIGHT; } break; } } // 更新蛇的坐标 for (int i = length-1; i > 0; i--) { x[i] = x[i-1]; y[i] = y[i-1]; } switch (direction) { case UP: y[0]--; break; case DOWN: y[0]++; break; case LEFT: x[0]--; break; case RIGHT: x[0]++; break; } // 判断是否吃到食物 if (x[0] == food_x && y[0] == food_y) { // 随机生成新的食物坐标 food_x = rand()%WIDTH; food_y = rand()%HEIGHT; // 增加蛇的长度 length++; score++; } // 判断是否撞墙或撞到自己 if (x[0] < 0 || x[0] >= WIDTH || y[0] < 0 || y[0] >= HEIGHT) { printf("Game Over!\n"); exit(0); } for (int i = 1; i < length; i++) { if (x[i] == x[0] && y[i] == y[0]) { printf("Game Over!\n"); exit(0); } } } int main() { init(); // 初始化游戏 // 主循环 while (1) { draw(); // 绘制界面 move(); // 控制蛇的移动 Sleep(100); // 暂停100毫秒 } return 0; } ``` 这个程序使用了Windows API中的一些函数,如`GetStdHandle`、`CONSOLE_CURSOR_INFO`和`SetConsoleCursorInfo`等,用于隐藏光标。`_kbhit`和`_getch`函数用于读取键盘输入,`Sleep`函数用于暂停程序一定的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值