TECO.C
上传用户:xiantiandi
上传日期:2007-01-06
资源大小:21k
文件大小:4k
源码类别:

编辑器/阅读器

开发平台:

DOS

  1. /*  TECO - Context Editor
  2. (C) COPYRIGHT 1986 by Y.N. Miles; ALL RIGHTS RESSERVED
  3. Description:
  4. This program implements a subset of the commands for the
  5. context editor TECO, which was developed at MIT in the
  6. early 1960s, and was supported on most of the earlier
  7. Digital Equipment machines (PDP-8, PDP-10, PDP-11).
  8. This program was based on the "PDP-11 Teco User's Guide",
  9. by Digital Equipment, 1980, Order Number DEC-11-UTECA-B-D,
  10. and was written by the author in utter *PANIC* when it was
  11. realized that Digital Equipment was quietly dropping the
  12. support for TECO in its MicroVax family of computers.
  13. By rewriting TECO in the popular portable programming
  14. language "C", the author hopes to be able to continue
  15. using TECO independent of Digital Equipment's corporate
  16. policies, and also hopes to be able to make it available
  17. to the many users who have been unfortunate enough not
  18. to have access to an Operating System which had a working
  19. version of the best non-visual text editor around...
  20. Instructions:
  21. This version is based on the "PDP-11 Teco Users Guide",
  22. published 1980 as order no "DEC-11-UTECA-B-D", from:
  23. TECO SIG,
  24. c/o DECUS, MR2-3/E55
  25. One Iron Way
  26. Marlboro, MA 01752
  27. Language:
  28. Microsoft "C" version 3.00
  29. License Agreement:
  30. All users are granted a limited license to make copies
  31. of this program, and to distribute them at will for
  32. non-commercial use, provided no fee or consideration
  33. is received without the express consent of the Author
  34. Y.N. Miles
  35. TRIUMF, U.B.C.
  36. 4004 Wesbrook Mall
  37. Vancouver, B.C.
  38. Canada, V6T 2A3
  39. Phone (604) 222-1047
  40. */
  41. #include <ctype.h>
  42. #include <fcntl.h>
  43. #include <io.h>
  44. #include <signal.h>
  45. #include <stdio.h>
  46. #include <string.h>
  47. char bkname[128],bkpath[128],bktype[5]; /* Backup name,path,type */
  48. char inname[128],inpath[128],intype[5]; /* Input  name,path,type */
  49. char otname[128],otpath[128],ottype[5]; /* Output name,path,type */
  50. FILE *in; /* Input  stream */
  51. FILE *ot; /* Output stream */
  52. char buffer[32001];/* Work buffer area */
  53. int  bufptr=0     ;/* --> last in bfr  */
  54. int  bufptx=0     ;/* --> char in bfr  */
  55. int  bufsiz=32000 ;/* Size of work buf */
  56. char getbuf[8193]; /* User keyboard buffer */
  57. int  getptr=0    ; /* --> last in key bfr  */
  58. int  getptx=0    ; /* --> char in key bfr  */
  59. int  getsiz=8192 ; /* Characters in getbuf */
  60. int adverb ;  /* Qualifier  for  verb */
  61. int cancel ;  /* Non-zero if ^O typed */
  62. int number ;  /* Value    for command */
  63. int verb ;  /* Name     of  command */
  64. main(argc,argv) /* Excized Teco Editor */
  65. int argc;
  66. char *argv[];
  67. {
  68. #include "teco.h"
  69. FILE *fopen();
  70. int abort();
  71. char *p,*q;
  72. fprintf(stderr,"TECO ver X1.04n");
  73. if (argc ==1 ) {
  74. fprintf(stderr,"?NFI, No file for inputn7");
  75.                 exit(1);
  76. } else {
  77. if (argc !=2 ) {
  78. fprintf(stderr,"? What does '%s",strupr(argv[2]));
  79. fprintf(stderr,"' mean ?n7");
  80. exit(1);
  81. }
  82. }
  83. p=strchr(argv[1],'=');
  84. if (!p) {
  85. strcpy(inname,strupr(argv[1]));
  86. q=strrchr(inname,'.');
  87. if (!q) strcat(inname,".");
  88. q=strrchr(inname,'.');
  89. strncpy(intype,q,4);
  90. *q='';
  91. strcpy(inpath,inname);
  92. strcat(inpath,intype);
  93. strcpy(otpath,inname);
  94. strcat(otpath,".TMP");
  95. } else {
  96. strcpy(inname,strupr(p+1));
  97. q=strrchr(inname,'.');
  98. if (!q) strcat(inname,".");
  99. q=strrchr(inname,'.');
  100. strncpy(intype,q,4);
  101. *q='';
  102. strcpy(inpath,inname);
  103. strcat(inpath,intype);
  104. strcpy(otname,strupr(argv[1]));
  105. q=strchr(otname,'=');
  106. *q='';
  107. q=strrchr(otname,'.');
  108. if (!q) strcat(otname,".");
  109. q=strrchr(otname,'.');
  110. strncpy(ottype,q,4);
  111. *q='';
  112. strcpy(otpath,otname);
  113. strcat(otpath,ottype);
  114. }
  115. if ((in = fopen(inpath,"r")) == NULL) {
  116. fprintf(stderr,"?FNF, File not found '%s'n7",inpath);
  117. exit(1);
  118. }
  119. setmode(fileno(in),O_BINARY);
  120. if ((ot = fopen(otpath,"w")) == NULL) {
  121. fprintf(stderr,"?FNC, File not created '%s'n7",otpath);
  122. exit(1);
  123. }
  124. setmode(fileno(ot),O_BINARY);
  125. signal(SIGINT,abort); /* Enable trap */
  126. work(); /* Do the teco */
  127. signal(SIGINT,SIG_DFL); /* Disabl trap */
  128. fclose(in);
  129. fclose(ot);
  130. if (!p) {
  131. strcpy(bkpath,inname);
  132. strcat(bkpath,".BAK");
  133. unlink(bkpath)       ; /* Ignore error */
  134. rename(bkpath,inpath);
  135. rename(inpath,otpath);
  136. }
  137. }