EMUED.C
上传用户:wesley
上传日期:2007-01-07
资源大小:266k
文件大小:9k
源码类别:

通讯/手机编程

开发平台:

C/C++

  1. /* Copyright (C) 1992 Peter Edward Cann, all rights reserved.
  2.  */
  3. #include<stdio.h>
  4. #include<fcntl.h>
  5. #include<systypes.h>
  6. #include<sysstat.h>
  7. #include<bios.h>
  8. #include<graph.h>
  9. #include"emu.h"
  10. main(argc, argv)
  11. int argc;
  12. char **argv;
  13. {
  14. int emufd, major, minor, scan, value;
  15. char c, fpname[256];
  16. _settextposition(25,1);
  17. printf("Copyright (C) 1992 Peter Edward Cann, all rights reserved.n");
  18. printf("You may set the environment variable PCCPPATH.n");
  19. printf("If not set we use the current directory.nn");
  20. printf("You should have a copy of emu.h to consult to program display functions.nn");
  21. printf("Making a variable length substitution token last in an");
  22. printf("function sequence is highly questionable.nn");
  23. if(!strcmp(getenv("REMOTE"), "YES"))
  24. {
  25. printf("You appear to be logged in remotely, judging by the environmentn");
  26. printf("variable REMOTE, so this is probably a very bad idea.n");
  27. printf("Are you sure you want to run EMUED? (y or n) --> ");
  28. if(getchar()!='y') /* Note getchar() and not getch()! */
  29. {
  30. printf("I didn't think so!n");
  31. exit(99);
  32. }
  33. else
  34. printf("OK, you're the boss!n");
  35. }
  36. if(argc!=2)
  37. {
  38. printf("USAGE: emued <emu file basename>n");
  39. exit(1);
  40. }
  41. if(getenv("PCCPPATH")==NULL)
  42. sprintf(fpname, "%s.emu", argv[1]);
  43. else
  44. sprintf(fpname, "%s\%s.emu", getenv("PCCPPATH"), argv[1]);
  45. if((emufd=open(fpname, O_RDONLY|O_BINARY))==-1)
  46. {
  47. printf("Error opening existing emu file %s for read.nStarting from scratch.nn", fpname);
  48. nullemu();
  49. }
  50. else if(read(emufd, &emu, sizeof(emu))!=sizeof(emu))
  51. {
  52. printf("Error reading existing emu file %s.nStarting from scratch.nn", fpname);
  53. nullemu();
  54. }
  55. if(emufd!=-1)
  56. close(emufd);
  57. if((emufd=open(fpname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, S_IWRITE))==-1)
  58. {
  59. printf("Error opening emu file for write.n");
  60. exit(2);
  61. }
  62. printf("First column numeric address = %dn", emu.firstcoladdr);
  63. printf("First row numeric address = %dn", emu.firstrowaddr);
  64. printf("Modify? --> ");
  65. if(getch()=='y')
  66. {
  67. printf("ynEnter first column numeric address (decimal): --> ");
  68. scanf("%d", &value);
  69. emu.firstcoladdr=value;
  70. printf("Enter first row numeric address (decimal): --> ");
  71. scanf("%d", &value);
  72. emu.firstrowaddr=value;
  73. }
  74. else
  75. printf("nn");
  76. printf("ntophi_p = %d {1 => top row is 24; 0 => top is 1}n", (int)emu.tophi_p);
  77. printf("Binary row offset = %02xn", emu.binrowoff);
  78. printf("Binary column offset = %02xn", emu.bincoloff);
  79. printf("default_wrap_p = %dn", emu.default_wrap_p);
  80. printf("Modify? --> ");
  81. if(getch()=='y')
  82. {
  83. printf("ynEnter tophi_p (0 or 1): --> ");
  84. scanf("%d", &value);
  85. emu.tophi_p=value;
  86. printf("Enter binary row offset (hex): --> ");
  87. scanf("%x", &value);
  88. emu.binrowoff=value;
  89. printf("Enter binary column offset (hex): --> ");
  90. scanf("%x", &value);
  91. emu.bincoloff=value;
  92. printf("Enter default_wrap_p (0 or 1): --> ");
  93. scanf("%d", &value);
  94. emu.default_wrap_p=value;
  95. }
  96. else
  97. printf("nn");
  98. printf("nBinary attribute zero bitmap offest char = %02xn", emu.attroffset);
  99. printf("Bold attribute bitmask = %02xn", emu.boldmask);
  100. printf("Faint attribute bitmask = %02xn", emu.faintmask);
  101. printf("Blink attribute bitmask = %02xn", emu.blinkmask);
  102. printf("Inverse attribute bitmask = %02xn", emu.inversemask);
  103. printf("Modify? --> ");
  104. if(getch()=='y')
  105. {
  106. printf("ynEnter binary attribute zero bitmap offest char (hex): --> ");
  107. scanf("%x", &value);
  108. emu.attroffset=value;
  109. printf("Enter bold attribute bitmask (hex): -- > ");
  110. scanf("%x", &value);
  111. emu.boldmask=value;
  112. printf("Enter faint attribute bitmask (hex): --> ");
  113. scanf("%x", &value);
  114. emu.faintmask=value;
  115. printf("Enter blink attribute bitmask (hex): --> ");
  116. scanf("%x", &value);
  117. emu.blinkmask=value;
  118. printf("Enter inverse attribute bitmask (hex): --> ");
  119. scanf("%x", &value);
  120. emu.inversemask=value;
  121. }
  122. else
  123. printf("nn");
  124. while(1)
  125. {
  126. printf("nnk(ey), f(unc), g(raphics char) or e(xit)? --> ");
  127. c=getch();
  128. printf("%cn", c);
  129. if(c=='k')
  130. {
  131. printf("Operate the key --> ");
  132. while(!_bios_keybrd(_KEYBRD_READY));
  133. major=_bios_keybrd(_KEYBRD_READ);
  134. if(major&0xff)
  135. printf("n07Not a programmable key!n");
  136. else
  137. {
  138. major=(major>>8)&0xff;
  139. printf("nScancode 0x%02x selected.", major);
  140. if(emu.keys[major].nullpause_p)
  141. printf("  Zero presently means pause 1.1 seconds and ff means break.n");
  142. else
  143. printf("  No special translations are in effect.n");
  144. printf("Present contents (blank line means empty):n");
  145. for(minor=0;minor<emu.keys[major].len;++minor)
  146. printf(" %02x", emu.keys[major].chars[minor]);
  147. printf("nModify? (y or n): --> ");
  148. if(getch()=='y')
  149. {
  150. printf("ynZero means 1.1 sec pause and ff means break? (y or n): --> ");
  151. if(getch()=='y')
  152. {
  153. printf("yn");
  154. emu.keys[major].nullpause_p=1;
  155. }
  156. else
  157. {
  158. printf("nn");
  159. emu.keys[major].nullpause_p=0;
  160. }
  161. printf("Enter chars (up to %d). INSERT to enter in hex. END to end:n-->nn", KEYLEN);
  162. _settextposition(23,4);
  163. minor=0;
  164. while(1)
  165. {
  166. value=_bios_keybrd(_KEYBRD_READ);
  167. if(value==0x5200)
  168. {
  169. printf("nEnter hex code: --> ");
  170. scanf("%x", &value);
  171. _settextposition(24,1);
  172. printf("tttttttttr");
  173. }
  174. else
  175. if(value==0x4f00)
  176. value=END;
  177. else
  178. value&=0xff;
  179. if(value==END)
  180. {
  181. printf("n");
  182. emu.keys[major].len=minor;
  183. break;
  184. }
  185. else
  186. if(minor<KEYLEN)
  187. {
  188. emu.keys[major].chars[minor++]=value;
  189. _settextposition(23,1);
  190. for(scan=0;scan<minor;scan++)
  191. printf(" %02x", emu.keys[major].chars[scan]);
  192. printf(" -->");
  193. }
  194. else
  195. {
  196. printf("nExcess char ignored.n");
  197. emu.keys[major].len=KEYLEN;
  198. break;
  199. }
  200. }
  201. }
  202. else
  203. printf("nn");
  204. }
  205. }
  206. if(c=='f')
  207. {
  208. printf("Sequence number (decimal): --> ");
  209. scanf("%d", &major);
  210. if((major<0)||(major>=NFUNCS))
  211. printf("Bad sequence number.n");
  212. else
  213. {
  214. printf("Function is presently #%d decimal.n", emu.funcs[major].func);
  215. for(minor=0;emu.funcs[major].codes[minor]!=END;++minor)
  216. printf(" %03x", emu.funcs[major].codes[minor]);
  217. printf("nModify? (y or n): --> ");
  218. if(getch()=='y')
  219. {
  220. printf("ynEnter function number in decimal. --> ");
  221. scanf("%d", &value);
  222. if((value<0)||(value>LASTFUN))
  223. printf("Bad function number.n");
  224. else
  225. {
  226. emu.funcs[major].func=value;
  227. printf("Enter chars (up to %d). INSERT to enter in hex. END at end:n-->nn", FUNLEN-1);
  228. _settextposition(23,4);
  229. minor=0;
  230. while(1)
  231. {
  232. value=_bios_keybrd(_KEYBRD_READ);
  233. if(value==0x5200)
  234. {
  235. printf("nEnter hex code: --> ");
  236. scanf("%x", &value);
  237. _settextposition(24,1);
  238. printf("tttttttr");
  239. }
  240. else
  241. if(value==0x4f00)
  242. value=END;
  243. else
  244. value&=0xff;
  245. emu.funcs[major].codes[minor++]=value;
  246. if(value==END)
  247. {
  248. printf("n");
  249. break;
  250. }
  251. else
  252. if(minor<FUNLEN)
  253. {
  254. _settextposition(23,1);
  255. for(scan=0;scan<minor;scan++)
  256. printf(" %03x", emu.funcs[major].codes[scan]);
  257. printf(" -->");
  258. }
  259. else
  260. {
  261. minor--;
  262. printf("nExcess code ignored.n");
  263. emu.funcs[major].codes[FUNLEN-1]=END;
  264. break;
  265. }
  266. }
  267. }
  268. }
  269. else
  270. printf("nn");
  271. }
  272. }
  273. if(c=='g')
  274. {
  275. printf("Enter char or INSERT to enter in hex: --> ");
  276. value=_bios_keybrd(_KEYBRD_READ);
  277. if(value==0x5200)
  278. {
  279. printf("Enter hex: --> ");
  280. scanf("%x", &value);
  281. }
  282. else
  283. {
  284. value&=0xff;
  285. printf("%cn", value);
  286. }
  287. if(emu.gchars[value])
  288. printf("Hex code %02x  Current char: -->%c<--  Modify? (y or n) --> ", value, emu.gchars[value]);
  289. else
  290. printf("Hex code %02x  Current char is zero (unspecified).  Modify? (y or n) --> ", value);
  291. if(getch()=='y')
  292. {
  293. printf("ynEnter hex code of new graphics character: --> ");
  294. scanf("%x", &emu.gchars[value]);
  295. if(emu.gchars[value])
  296. printf("gchar %02x hex is now: -->%c<--n", value, emu.gchars[value]);
  297. else
  298. printf("gchar %02x hex is now zero (unspecified).n", value);
  299. }
  300. else
  301. printf("nn");
  302. }
  303. if(c=='e')
  304. break;
  305. }
  306. if(write(emufd, &emu, sizeof(emu))!=sizeof(emu))
  307. printf("Damn!  Couldn't write the file!n");
  308. close(emufd);
  309. exit(0);
  310. }