/*********************环境块内存段********************************************/ /***************************************************************************** 每次执行一个程序时,dos系统对当前环境进行备份,并将环境备份段地址提供给程序, psp环境块中包含程序备份的段地址。 下述程序利用该区域定位和显示程序的环境。 ******************************************************************************/ #include<dos.h> #include<stdio.h> int main(void) { char far *environment;/*环境块远指针*/ /*定义文件控制块结构*/ typedef struct fcbs{ /*指定包含文件的磁盘驱动器,0是当前驱动器,1是A驱动器,2是b驱动器*/ char drive; char filename[8]; /*文件名,若文件名小于8个字符,则以空格填充*/ char extension[3]; /*文件扩展名,若扩展名少于3个字符,则以空格填充*/ int current_block;/*当前记录的块的数目。每块包含128个字符*/ int record_size; /*指定以字节表示的每个记录的大小,默认为128个记录*/ }fcb; /*定义程序段前缀结构*/ struct program_segment_prefix { char near *int20; /*int 20h指令,可以终止程序*/ char near *next_paragraph_segment; /*程序后第一个段的段地址*/ char reserved_1; /*保留*/ char dos_dispatchr[5]; /*远程调用dos功能调度程序指令*/ char far *terminate_vector; /*指定程序终止DOS赋予INT 22H处理程序的向量*/ char far *ctrlc_vector; /*程序终止DOS赋予Ctrl-c INT 23H处理程序的向量*/ /*指定程序终止时DOS赋予INT 24H关键错误处理程序的向量*/ char far *criticle_error_segment;
char reserved_2[22]; /*保留*/ char near *environment_block_segment;/*程序环境拷贝的段地址*/ char reserved_3[46]; /*保留*/ fcb fcb1; /*程序的缺省文件控制块1*/ fcb fcb2; /*程序的缺省文件控制块2*/ char reserved_4[4]; /*保留*/ char command_tail[128]; /*程序的命令行*/ }far *psp; psp=(struct program_segment_prefix far *)((long)_psp<<16); environment=(char far *)((long)psp->environment_block_segment<<16); /*environment ends with double nulls \0\0*/ while((*environment!='\0')||(*(environment+1)!='\0')) { if(*environment=='\0') { printf("\n"); environment++; } else printf("%c",*environment++); } getch(); return 0; }