History

CWEB — release 3.64ae, 2016-01-20.

I removed backup files and executables.

Andreas Scherer committed 10 years ago

Commit 32934261 parent 6be350c16 files · +297 −281Browse files

Unified · Split

16 files
  1. README +9 −3
  2. common.c +115 −115
  3. common.h +1 −1
  4. common.w +1 −1
  5. ctang-bs.ch +2 −2
  6. ctangle.c +6 −6
  7. cweav-bs.ch +2 −2
  8. cweb.el +3 −0
  9. cwebmac.tex +9 −6
  10. cwebman.tex +1 −1
  11. examples/extex.c +25 −24
  12. examples/extex.w +1 −0
  13. examples/wmerge.c +69 −69
  14. examples/wmerge.w +1 −1
  15. examples/wordtest.c +51 −50
  16. examples/wordtest.w +1 −0
README+9−3
@@ -1,9 +1,9 @@
11 % This file is part of CWEB.
22 % The CWEB programs by Silvio Levy are based on programs by D. E. Knuth.
33 % They are distributed WITHOUT ANY WARRANTY, express or implied.
4−% This README file last updated May 2000 by Don Knuth
4+% This README file last updated January 2016 by Don Knuth
55
6−% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
6+% Copyright (C) 1987,1990,1993,2000,2016 Silvio Levy and Donald E. Knuth
77
88 % Permission is granted to make and distribute verbatim copies of this
99 % document provided that the copyright notice and this permission notice
@@ -14,7 +14,13 @@ · 4 unmodified lines
1414 % entire resulting derived work is given a different name and distributed
1515 % under the terms of a permission notice identical to this one.
1616
17−% Please send comments, suggestions, etc. to levy@math.berkeley.edu.
17+% Please send comments, suggestions, etc. to tex-k@tug.org, and people
18+% there will verify and forward bug reports.
19+%
20+% DEK takes no responsibility for the changefiles; they should be
21+% maintained independently. His job is to correct errors in
22+% ctangle.w, cweave.w, common.w, cwebmac.tex, cwebman.tex,
23+% and in the files of examples/*.w, nothing more.
1824
1925 This directory contains the following files:
2026
common.c+115−115
@@ -1,23 +1,23 @@
11 /*1:*/
2−#line 58 "common.w"
2+#line 58 "./common.w"
33
44 /*5:*/
5−#line 102 "common.w"
5+#line 102 "./common.w"
66
77 #include <ctype.h>
88
99 /*:5*//*8:*/
10−#line 165 "common.w"
10+#line 165 "./common.w"
1111
1212 #include <stdio.h>
1313
1414 /*:8*//*22:*/
15−#line 471 "common.w"
15+#line 471 "./common.w"
1616
1717 #include <stdlib.h>
1818
1919 /*:22*/
20−#line 59 "common.w"
20+#line 59 "./common.w"
2121
2222 #define ctangle 0
2323 #define cweave 1 \
@@ -121,16 +121,16 @@ err_print("! Include file name too long") ;goto restart;} \ · 97 unmodified lines
121121 #define C_putc(c) putc(c,C_file) \
122122
123123
124−#line 60 "common.w"
124+#line 60 "./common.w"
125125
126126 /*2:*/
127−#line 73 "common.w"
127+#line 73 "./common.w"
128128
129129 typedef short boolean;
130130 boolean program;
131131
132132 /*:2*//*7:*/
133−#line 159 "common.w"
133+#line 159 "./common.w"
134134
135135 char buffer[long_buf_size];
136136 char*buffer_end= buffer+buf_size-2;
@@ -138,7 +138,7 @@ char*limit= buffer; · 1 unmodified line
138138 char*loc= buffer;
139139
140140 /*:7*//*10:*/
141−#line 214 "common.w"
141+#line 214 "./common.w"
142142
143143 int include_depth;
144144 FILE*file[max_include_depth];
@@ -155,7 +155,7 @@ boolean changing; · 10 unmodified lines
155155 boolean web_file_open= 0;
156156
157157 /*:10*//*20:*/
158−#line 418 "common.w"
158+#line 418 "./common.w"
159159
160160 typedef unsigned short sixteen_bits;
161161 sixteen_bits section_count;
@@ -165,17 +165,17 @@ boolean change_pending; · 3 unmodified lines
165165 boolean print_where= 0;
166166
167167 /*:20*//*27:*/
168−#line 594 "common.w"
168+#line 594 "./common.w"
169169
170170 typedef struct name_info{
171171 char*byte_start;
172172 /*31:*/
173−#line 631 "common.w"
173+#line 631 "./common.w"
174174
175175 struct name_info*link;
176176
177177 /*:31*//*40:*/
178−#line 730 "common.w"
178+#line 730 "./common.w"
179179
180180 union{
181181 struct name_info*Rlink;
@@ -184,12 +184,12 @@ char Ilk; · 2 unmodified lines
184184 }dummy;
185185
186186 /*:40*//*55:*/
187−#line 1062 "common.w"
187+#line 1062 "./common.w"
188188
189189 char*equiv_or_xref;
190190
191191 /*:55*/
192−#line 597 "common.w"
192+#line 597 "./common.w"
193193
194194 }name_info;
195195 typedef name_info*name_pointer;
@@ -199,13 +199,13 @@ name_info name_dir[max_names]; · 3 unmodified lines
199199 name_pointer name_dir_end= name_dir+max_names-1;
200200
201201 /*:27*//*29:*/
202−#line 617 "common.w"
202+#line 617 "./common.w"
203203
204204 name_pointer name_ptr;
205205 char*byte_ptr;
206206
207207 /*:29*//*32:*/
208−#line 644 "common.w"
208+#line 644 "./common.w"
209209
210210 typedef name_pointer*hash_pointer;
211211 name_pointer hash[hash_size];
@@ -213,12 +213,12 @@ hash_pointer hash_end= hash+hash_size-1; · 1 unmodified line
213213 hash_pointer h;
214214
215215 /*:32*//*56:*/
216−#line 1082 "common.w"
216+#line 1082 "./common.w"
217217
218218 int history= spotless;
219219
220220 /*:56*//*67:*/
221−#line 1220 "common.w"
221+#line 1220 "./common.w"
222222
223223 int argc;
224224 char**argv;
@@ -229,7 +229,7 @@ char scn_file_name[max_file_name_length]; · 4 unmodified lines
229229 boolean flags[128];
230230
231231 /*:67*//*77:*/
232−#line 1370 "common.w"
232+#line 1370 "./common.w"
233233
234234 FILE*C_file;
235235 FILE*tex_file;
@@ -238,64 +238,64 @@ FILE*scn_file; · 2 unmodified lines
238238 FILE*active_file;
239239
240240 /*:77*/
241−#line 61 "common.w"
241+#line 61 "./common.w"
242242
243243 /*3:*/
244−#line 83 "common.w"
244+#line 83 "./common.w"
245245 int phase;
246246
247247 /*:3*//*11:*/
248−#line 240 "common.w"
248+#line 240 "./common.w"
249249
250250 char change_buffer[buf_size];
251251 char*change_limit;
252252
253253 /*:11*/
254−#line 62 "common.w"
254+#line 62 "./common.w"
255255
256256 /*33:*/
257−#line 650 "common.w"
257+#line 650 "./common.w"
258258
259259 extern int names_match();
260260
261261 /*:33*//*38:*/
262−#line 703 "common.w"
262+#line 703 "./common.w"
263263
264264 void init_p();
265265
266266 /*:38*//*46:*/
267−#line 852 "common.w"
267+#line 852 "./common.w"
268268
269269 extern void init_node();
270270
271271 /*:46*//*53:*/
272−#line 1017 "common.w"
272+#line 1017 "./common.w"
273273
274274 int section_name_cmp();
275275
276276 /*:53*//*57:*/
277−#line 1092 "common.w"
277+#line 1092 "./common.w"
278278
279279 void err_print();
280280
281281 /*:57*//*60:*/
282−#line 1140 "common.w"
282+#line 1140 "./common.w"
283283
284284 int wrap_up();
285285 extern void print_stats();
286286
287287 /*:60*//*63:*/
288−#line 1173 "common.w"
288+#line 1173 "./common.w"
289289
290290 void fatal(),overflow();
291291
292292 /*:63*//*69:*/
293−#line 1251 "common.w"
293+#line 1251 "./common.w"
294294
295295 void scan_args();
296296
297297 /*:69*//*81:*/
298−#line 1411 "common.w"
298+#line 1411 "./common.w"
299299
300300 extern int strlen();
301301 extern int strcmp();
@@ -304,45 +304,45 @@ extern int strncmp(); · 2 unmodified lines
304304 extern char*strncpy();
305305
306306 /*:81*/
307−#line 63 "common.w"
307+#line 63 "./common.w"
308308
309309
310310 /*:1*//*4:*/
311−#line 89 "common.w"
311+#line 89 "./common.w"
312312
313313 void
314314 common_init()
315315 {
316316 /*30:*/
317−#line 621 "common.w"
317+#line 621 "./common.w"
318318
319319 name_dir->byte_start= byte_ptr= byte_mem;
320320 name_ptr= name_dir+1;
321321 name_ptr->byte_start= byte_mem;
322322
323323 /*:30*//*34:*/
324−#line 655 "common.w"
324+#line 655 "./common.w"
325325
326326 for(h= hash;h<=hash_end;*h++= NULL);
327327
328328 /*:34*//*41:*/
329−#line 737 "common.w"
329+#line 737 "./common.w"
330330
331331 root= NULL;
332332
333333 /*:41*/
334−#line 93 "common.w"
334+#line 93 "./common.w"
335335 ;
336336 /*68:*/
337−#line 1233 "common.w"
337+#line 1233 "./common.w"
338338
339339 show_banner= show_happiness= show_progress= 1;
340340
341341 /*:68*/
342−#line 94 "common.w"
342+#line 94 "./common.w"
343343 ;
344344 /*78:*/
345−#line 1377 "common.w"
345+#line 1377 "./common.w"
346346
347347 scan_args();
348348 if(program==ctangle){
@@ -356,12 +356,12 @@ fatal("! Cannot open output file ",tex_file_name); · 7 unmodified lines
356356 }
357357
358358 /*:78*/
359−#line 95 "common.w"
359+#line 95 "./common.w"
360360 ;
361361 }
362362
363363 /*:4*//*9:*/
364−#line 172 "common.w"
364+#line 172 "./common.w"
365365
366366 int input_ln(fp)
367367 FILE*fp;
@@ -383,14 +383,14 @@ return(1); · 15 unmodified lines
383383 }
384384
385385 /*:9*//*12:*/
386−#line 251 "common.w"
386+#line 251 "./common.w"
387387
388388 void
389389 prime_the_change_buffer()
390390 {
391391 change_limit= change_buffer;
392392 /*13:*/
393−#line 265 "common.w"
393+#line 265 "./common.w"
394394
395395 while(1){
396396 change_line++;
@@ -407,10 +407,10 @@ err_print("! Missing @x in change file"); · 10 unmodified lines
407407 }
408408
409409 /*:13*/
410−#line 256 "common.w"
410+#line 256 "./common.w"
411411 ;
412412 /*14:*/
413−#line 282 "common.w"
413+#line 282 "./common.w"
414414
415415 do{
416416 change_line++;
@@ -422,10 +422,10 @@ return; · 5 unmodified lines
422422 }while(limit==buffer);
423423
424424 /*:14*/
425−#line 257 "common.w"
425+#line 257 "./common.w"
426426 ;
427427 /*15:*/
428−#line 292 "common.w"
428+#line 292 "./common.w"
429429
430430 {
431431 change_limit= change_buffer+(limit-buffer);
@@ -433,12 +433,12 @@ strncpy(change_buffer,buffer,limit-buffer+1); · 1 unmodified line
433433 }
434434
435435 /*:15*/
436−#line 258 "common.w"
436+#line 258 "./common.w"
437437 ;
438438 }
439439
440440 /*:12*//*16:*/
441−#line 320 "common.w"
441+#line 320 "./common.w"
442442
443443 void
444444 check_change()
@@ -461,7 +461,7 @@ return; · 16 unmodified lines
461461 if(limit> buffer+1&&buffer[0]=='@'){
462462 char xyz_code= xisupper(buffer[1])?tolower(buffer[1]):buffer[1];
463463 /*17:*/
464−#line 358 "common.w"
464+#line 358 "./common.w"
465465
466466 if(xyz_code=='x'||xyz_code=='z'){
467467 loc= buffer+2;err_print("! Where is the matching @y?");
@@ -479,11 +479,11 @@ return; · 11 unmodified lines
479479 }
480480
481481 /*:17*/
482−#line 342 "common.w"
482+#line 342 "./common.w"
483483 ;
484484 }
485485 /*15:*/
486−#line 292 "common.w"
486+#line 292 "./common.w"
487487
488488 {
489489 change_limit= change_buffer+(limit-buffer);
@@ -491,7 +491,7 @@ strncpy(change_buffer,buffer,limit-buffer+1); · 1 unmodified line
491491 }
492492
493493 /*:15*/
494−#line 344 "common.w"
494+#line 344 "./common.w"
495495 ;
496496 changing= 0;cur_line++;
497497 while(!input_ln(cur_file)){
@@ -507,14 +507,14 @@ if(lines_dont_match)n++; · 9 unmodified lines
507507 }
508508
509509 /*:16*//*18:*/
510−#line 378 "common.w"
510+#line 378 "./common.w"
511511
512512 void
513513 reset_input()
514514 {
515515 limit= buffer;loc= buffer+1;buffer[0]= ' ';
516516 /*19:*/
517−#line 393 "common.w"
517+#line 393 "./common.w"
518518
519519 if((web_file= fopen(web_file_name,"r"))==NULL){
520520 strcpy(web_file_name,alt_web_file_name);
@@ -528,7 +528,7 @@ if((change_file= fopen(change_file_name,"r"))==NULL) · 7 unmodified lines
528528 fatal("! Cannot open change file ",change_file_name);
529529
530530 /*:19*/
531−#line 383 "common.w"
531+#line 383 "./common.w"
532532 ;
533533 include_depth= 0;cur_line= 0;change_line= 0;
534534 change_depth= include_depth;
@@ -537,14 +537,14 @@ limit= buffer;loc= buffer+1;buffer[0]= ' ';input_has_ended= 0; · 2 unmodified lines
537537 }
538538
539539 /*:18*//*21:*/
540−#line 426 "common.w"
540+#line 426 "./common.w"
541541
542542 int get_line()
543543 {
544544 restart:
545545 if(changing&&include_depth==change_depth)
546546 /*25:*/
547−#line 537 "common.w"
547+#line 537 "./common.w"
548548 {
549549 change_line++;
550550 if(!input_ln(change_file)){
@@ -575,11 +575,11 @@ prime_the_change_buffer();changing= !changing;print_where= 1; · 24 unmodified lines
575575 }
576576
577577 /*:25*/
578−#line 431 "common.w"
578+#line 431 "./common.w"
579579 ;
580580 if(!changing||include_depth> change_depth){
581581 /*24:*/
582−#line 520 "common.w"
582+#line 520 "./common.w"
583583 {
584584 cur_line++;
585585 while(!input_ln(cur_file)){
@@ -598,7 +598,7 @@ if(change_limit> change_buffer)check_change(); · 12 unmodified lines
598598 }
599599
600600 /*:24*/
601−#line 433 "common.w"
601+#line 433 "./common.w"
602602 ;
603603 if(changing&&include_depth==change_depth)goto restart;
604604 }
@@ -619,7 +619,7 @@ goto restart; · 14 unmodified lines
619619 }
620620 include_depth++;
621621 /*23:*/
622−#line 474 "common.w"
622+#line 474 "./common.w"
623623 {
624624 char temp_file_name[max_file_name_length];
625625 char*cur_file_name_end= cur_file_name+max_file_name_length-1;
@@ -667,14 +667,14 @@ include_depth--;err_print("! Cannot open include file");goto restart; · 41 unmodified lines
667667 }
668668
669669 /*:23*/
670−#line 452 "common.w"
670+#line 452 "./common.w"
671671 ;
672672 }
673673 return 1;
674674 }
675675
676676 /*:21*//*26:*/
677−#line 569 "common.w"
677+#line 569 "./common.w"
678678
679679 void
680680 check_complete(){
@@ -688,7 +688,7 @@ err_print("! Change file entry did not match"); · 7 unmodified lines
688688 }
689689
690690 /*:26*//*35:*/
691−#line 660 "common.w"
691+#line 660 "./common.w"
692692
693693 name_pointer
694694 id_lookup(first,last,t)
@@ -703,17 +703,17 @@ name_pointer p; · 8 unmodified lines
703703 if(last==NULL)for(last= first;*last!='\0';last++);
704704 l= last-first;
705705 /*36:*/
706−#line 683 "common.w"
706+#line 683 "./common.w"
707707
708708 h= (unsigned char)*i;
709709 while(++i<last)h= (h+h+(int)((unsigned char)*i))%hash_size;
710710
711711
712712 /*:36*/
713−#line 673 "common.w"
713+#line 673 "./common.w"
714714 ;
715715 /*37:*/
716−#line 691 "common.w"
716+#line 691 "./common.w"
717717
718718 p= hash[h];
719719 while(p&&!names_match(p,first,l,t))p= p->link;
@@ -723,10 +723,10 @@ p->link= hash[h];hash[h]= p; · 3 unmodified lines
723723 }
724724
725725 /*:37*/
726−#line 674 "common.w"
726+#line 674 "./common.w"
727727 ;
728728 if(p==name_ptr)/*39:*/
729−#line 706 "common.w"
729+#line 706 "./common.w"
730730 {
731731 if(byte_ptr+l> byte_mem_end)overflow("byte memory");
732732 if(name_ptr>=name_dir_end)overflow("name");
@@ -736,13 +736,13 @@ if(program==cweave)init_p(p,t); · 3 unmodified lines
736736 }
737737
738738 /*:39*/
739−#line 675 "common.w"
739+#line 675 "./common.w"
740740 ;
741741 return(p);
742742 }
743743
744744 /*:35*//*42:*/
745−#line 764 "common.w"
745+#line 764 "./common.w"
746746
747747 void
748748 print_section_name(p)
@@ -763,7 +763,7 @@ if(q)term_write("...",3); · 14 unmodified lines
763763 }
764764
765765 /*:42*//*43:*/
766−#line 783 "common.w"
766+#line 783 "./common.w"
767767
768768 void
769769 sprint_section_name(dest,p)
@@ -786,7 +786,7 @@ s= p->byte_start; · 16 unmodified lines
786786 }
787787
788788 /*:43*//*44:*/
789−#line 804 "common.w"
789+#line 804 "./common.w"
790790
791791 void
792792 print_prefix_name(p)
@@ -799,7 +799,7 @@ if(s+l<(p+1)->byte_start)term_write("...",3); · 6 unmodified lines
799799 }
800800
801801 /*:44*//*45:*/
802−#line 825 "common.w"
802+#line 825 "./common.w"
803803
804804 int web_strcmp(j,j_len,k,k_len)
805805 char*j,*k;
@@ -815,7 +815,7 @@ else return greater; · 9 unmodified lines
815815 }
816816
817817 /*:45*//*47:*/
818−#line 855 "common.w"
818+#line 855 "./common.w"
819819
820820 name_pointer
821821 add_section_name(par,c,first,last,ispref)
@@ -846,7 +846,7 @@ return par==NULL?(root= p):c==less?(par->llink= p):(par->rlink= p); · 24 unmodified lines
846846 }
847847
848848 /*:47*//*48:*/
849−#line 884 "common.w"
849+#line 884 "./common.w"
850850
851851 void
852852 extend_section_name(p,first,last,ispref)
@@ -870,7 +870,7 @@ if(ispref)*(byte_ptr-1)= ' '; · 17 unmodified lines
870870 }
871871
872872 /*:48*//*49:*/
873−#line 912 "common.w"
873+#line 912 "./common.w"
874874
875875 name_pointer
876876 section_lookup(first,last,ispref)
@@ -885,7 +885,7 @@ name_pointer par= NULL; · 8 unmodified lines
885885
886886 int name_len= last-first+1;
887887 /*50:*/
888−#line 936 "common.w"
888+#line 936 "./common.w"
889889
890890 while(p){
891891 c= web_strcmp(first,name_len,first_chunk(p),prefix_length(p));
@@ -912,19 +912,19 @@ p= q,q= NULL; · 20 unmodified lines
912912 }
913913
914914 /*:50*/
915−#line 926 "common.w"
915+#line 926 "./common.w"
916916 ;
917917 /*51:*/
918−#line 961 "common.w"
918+#line 961 "./common.w"
919919
920920 if(r==NULL)
921921 return add_section_name(par,c,first,last+1,ispref);
922922
923923 /*:51*/
924−#line 927 "common.w"
924+#line 927 "./common.w"
925925 ;
926926 /*52:*/
927−#line 969 "common.w"
927+#line 969 "./common.w"
928928
929929 switch(section_name_cmp(&first,name_len,r)){
930930
@@ -958,12 +958,12 @@ return r; · 27 unmodified lines
958958 }
959959
960960 /*:52*/
961−#line 928 "common.w"
961+#line 928 "./common.w"
962962 ;
963963 }
964964
965965 /*:49*//*54:*/
966−#line 1020 "common.w"
966+#line 1020 "./common.w"
967967
968968 int section_name_cmp(pfirst,len,r)
969969 char**pfirst;
@@ -997,7 +997,7 @@ default:return c; · 27 unmodified lines
997997 }
998998
999999 /*:54*//*58:*/
1000−#line 1095 "common.w"
1000+#line 1095 "./common.w"
10011001
10021002 void
10031003 err_print(s)
@@ -1006,7 +1006,7 @@ char*s; · 2 unmodified lines
10061006 char*k,*l;
10071007 printf(*s=='!'?"\n%s":"%s",s);
10081008 if(web_file_open)/*59:*/
1009−#line 1115 "common.w"
1009+#line 1115 "./common.w"
10101010
10111011 {if(changing&&include_depth==change_depth)
10121012 printf(". (l. %d of change file)\n",change_line);
@@ -1026,20 +1026,20 @@ putchar(' '); · 13 unmodified lines
10261026 }
10271027
10281028 /*:59*/
1029−#line 1102 "common.w"
1029+#line 1102 "./common.w"
10301030 ;
10311031 update_terminal;mark_error;
10321032 }
10331033
10341034 /*:58*//*61:*/
1035−#line 1150 "common.w"
1035+#line 1150 "./common.w"
10361036
10371037 int wrap_up(){
10381038 putchar('\n');
10391039 if(show_stats)
10401040 print_stats();
10411041 /*62:*/
1042−#line 1160 "common.w"
1042+#line 1160 "./common.w"
10431043
10441044 switch(history){
10451045 case spotless:if(show_happiness)printf("(No errors were found.)\n");break;
@@ -1051,14 +1051,14 @@ case fatal_message:printf("(That was a fatal error, my friend.)\n"); · 5 unmodified lines
10511051 }
10521052
10531053 /*:62*/
1054−#line 1155 "common.w"
1054+#line 1155 "./common.w"
10551055 ;
10561056 if(history> harmless_message)return(1);
10571057 else return(0);
10581058 }
10591059
10601060 /*:61*//*64:*/
1061−#line 1179 "common.w"
1061+#line 1179 "./common.w"
10621062 void
10631063 fatal(s,t)
10641064 char*s,*t;
@@ -1069,7 +1069,7 @@ history= fatal_message;exit(wrap_up()); · 4 unmodified lines
10691069 }
10701070
10711071 /*:64*//*65:*/
1072−#line 1190 "common.w"
1072+#line 1190 "./common.w"
10731073 void
10741074 overflow(t)
10751075 char*t;
@@ -1079,7 +1079,7 @@ printf("\n! Sorry, %s capacity exceeded",t);fatal("",""); · 3 unmodified lines
10791079
10801080
10811081 /*:65*//*70:*/
1082−#line 1254 "common.w"
1082+#line 1254 "./common.w"
10831083
10841084 void
10851085 scan_args()
@@ -1093,7 +1093,7 @@ boolean flag_change; · 7 unmodified lines
10931093
10941094 while(--argc> 0){
10951095 if((**(++argv)=='-'||**argv=='+')&&*(*argv+1))/*74:*/
1096−#line 1344 "common.w"
1096+#line 1344 "./common.w"
10971097
10981098 {
10991099 if(**argv=='-')flag_change= 0;
@@ -1103,7 +1103,7 @@ flags[*dot_pos]= flag_change; · 3 unmodified lines
11031103 }
11041104
11051105 /*:74*/
1106−#line 1266 "common.w"
1106+#line 1266 "./common.w"
11071107
11081108 else{
11091109 s= name_pos= *argv;dot_pos= NULL;
@@ -1113,17 +1113,17 @@ else if(*s=='/')dot_pos= NULL,name_pos= ++s; · 3 unmodified lines
11131113 else s++;
11141114 }
11151115 if(!found_web)/*71:*/
1116−#line 1292 "common.w"
1116+#line 1292 "./common.w"
11171117
11181118 {
11191119 if(s-*argv> max_file_name_length-5)
11201120 /*76:*/
1121−#line 1364 "common.w"
1121+#line 1364 "./common.w"
11221122 fatal("! Filename too long\n",*argv);
11231123
11241124
11251125 /*:76*/
1126−#line 1295 "common.w"
1126+#line 1295 "./common.w"
11271127 ;
11281128 if(dot_pos==NULL)
11291129 sprintf(web_file_name,"%s.w",*argv);
@@ -1140,22 +1140,22 @@ found_web= 1; · 10 unmodified lines
11401140 }
11411141
11421142 /*:71*/
1143−#line 1275 "common.w"
1143+#line 1275 "./common.w"
11441144
11451145 else if(!found_change)/*72:*/
1146−#line 1310 "common.w"
1146+#line 1310 "./common.w"
11471147
11481148 {
11491149 if(strcmp(*argv,"-")==0)found_change= -1;
11501150 else{
11511151 if(s-*argv> max_file_name_length-4)
11521152 /*76:*/
1153−#line 1364 "common.w"
1153+#line 1364 "./common.w"
11541154 fatal("! Filename too long\n",*argv);
11551155
11561156
11571157 /*:76*/
1158−#line 1315 "common.w"
1158+#line 1315 "./common.w"
11591159 ;
11601160 if(dot_pos==NULL)
11611161 sprintf(change_file_name,"%s.ch",*argv);
@@ -1165,20 +1165,20 @@ found_change= 1; · 3 unmodified lines
11651165 }
11661166
11671167 /*:72*/
1168−#line 1276 "common.w"
1168+#line 1276 "./common.w"
11691169
11701170 else if(!found_out)/*73:*/
1171−#line 1323 "common.w"
1171+#line 1323 "./common.w"
11721172
11731173 {
11741174 if(s-*argv> max_file_name_length-5)
11751175 /*76:*/
1176−#line 1364 "common.w"
1176+#line 1364 "./common.w"
11771177 fatal("! Filename too long\n",*argv);
11781178
11791179
11801180 /*:76*/
1181−#line 1326 "common.w"
1181+#line 1326 "./common.w"
11821182 ;
11831183 if(dot_pos==NULL){
11841184 sprintf(tex_file_name,"%s.tex",*argv);
@@ -1198,10 +1198,10 @@ found_out= 1; · 13 unmodified lines
11981198 }
11991199
12001200 /*:73*/
1201−#line 1277 "common.w"
1201+#line 1277 "./common.w"
12021202
12031203 else/*75:*/
1204−#line 1352 "common.w"
1204+#line 1352 "./common.w"
12051205
12061206 {
12071207 if(program==ctangle)
@@ -1215,12 +1215,12 @@ else fatal( · 7 unmodified lines
12151215 }
12161216
12171217 /*:75*/
1218−#line 1278 "common.w"
1218+#line 1278 "./common.w"
12191219 ;
12201220 }
12211221 }
12221222 if(!found_web)/*75:*/
1223−#line 1352 "common.w"
1223+#line 1352 "./common.w"
12241224
12251225 {
12261226 if(program==ctangle)
@@ -1234,7 +1234,7 @@ else fatal( · 7 unmodified lines
12341234 }
12351235
12361236 /*:75*/
1237−#line 1281 "common.w"
1237+#line 1281 "./common.w"
12381238 ;
12391239 if(found_change<=0)strcpy(change_file_name,"/dev/null");
12401240 }
common.h+1−1
@@ -101,7 +101,7 @@ extern char byte_mem[]; /* characters of names */ · 100 unmodified lines
101101 extern char *byte_mem_end; /* end of |byte_mem| */
102102 extern name_info name_dir[]; /* information about names */
103103 extern name_pointer name_dir_end; /* end of |name_dir| */
104−extern name_pointer name_ptr; /* first unused position in |byte_start| */
104+extern name_pointer name_ptr; /* first unused position in |name_dir| */
105105 extern char *byte_ptr; /* first unused position in |byte_mem| */
106106 extern name_pointer hash[]; /* heads of hash lists */
107107 extern hash_pointer hash_end; /* end of |hash| */
common.w+1−1
@@ -615,7 +615,7 @@ usually have |name_ptr->byte_start==byte_ptr|, and certainly · 614 unmodified lines
615615 we want to keep |name_ptr<=name_dir_end| and |byte_ptr<=byte_mem_end|.
616616
617617 @<Defini...@>=
618−name_pointer name_ptr; /* first unused position in |byte_start| */
618+name_pointer name_ptr; /* first unused position in |name_dir| */
619619 char *byte_ptr; /* first unused position in |byte_mem| */
620620
621621 @ @<Init...@>=
ctang-bs.ch+2−2
@@ -93,7 +93,7 @@ extern char byte_mem[]; /* characters of names */ · 92 unmodified lines
9393 extern char *byte_mem_end; /* end of |byte_mem| */
9494 extern name_info name_dir[]; /* information about names */
9595 extern name_pointer name_dir_end; /* end of |name_dir| */
96−extern name_pointer name_ptr; /* first unused position in |byte_start| */
96+extern name_pointer name_ptr; /* first unused position in |name_dir| */
9797 extern char *byte_ptr; /* first unused position in |byte_mem| */
9898 extern name_pointer hash[]; /* heads of hash lists */
9999 extern hash_pointer hash_end; /* end of |hash| */
@@ -126,7 +126,7 @@ extern char huge byte_mem[]; /* characters of names */ · 26 unmodified lines
126126 extern char huge* byte_mem_end; /* end of |byte_mem| */
127127 extern name_info name_dir[]; /* information about names */
128128 extern name_pointer name_dir_end; /* end of |name_dir| */
129−extern name_pointer name_ptr; /* first unused position in |byte_start| */
129+extern name_pointer name_ptr; /* first unused position in |name_dir| */
130130 extern char huge* byte_ptr; /* first unused position in |byte_mem| */
131131 extern name_pointer hash[]; /* heads of hash lists */
132132 extern hash_pointer hash_end; /* end of |hash| */
ctangle.c+6−6
@@ -11,7 +11,7 @@ · 10 unmodified lines
1111
1212 #include <ctype.h>
1313 #include <stdlib.h>
14−
14+#include <string.h>
1515 /*:62*/
1616 #line 65 "ctangle.w"
1717
@@ -366,11 +366,11 @@ extern sixteen_bits section_count; · 348 unmodified lines
366366 /*2:*/
367367 #line 77 "ctangle.w"
368368
369−extern int strlen();
370−extern int strcmp();
371−extern char*strcpy();
372−extern int strncmp();
373−extern char*strncpy();
369+
370+
371+
372+
373+
374374
375375 /*:2*//*41:*/
376376 #line 533 "ctangle.w"
cweav-bs.ch+2−2
@@ -49,7 +49,7 @@ extern char byte_mem[]; /* characters of names */ · 48 unmodified lines
4949 extern char *byte_mem_end; /* end of |byte_mem| */
5050 extern name_info name_dir[]; /* information about names */
5151 extern name_pointer name_dir_end; /* end of |name_dir| */
52−extern name_pointer name_ptr; /* first unused position in |byte_start| */
52+extern name_pointer name_ptr; /* first unused position in |name_dir| */
5353 extern char *byte_ptr; /* first unused position in |byte_mem| */
5454 extern name_pointer hash[]; /* heads of hash lists */
5555 extern hash_pointer hash_end; /* end of |hash| */
@@ -82,7 +82,7 @@ extern char huge byte_mem[]; /* characters of names */ · 26 unmodified lines
8282 extern char huge* byte_mem_end; /* end of |byte_mem| */
8383 extern name_info name_dir[]; /* information about names */
8484 extern name_pointer name_dir_end; /* end of |name_dir| */
85−extern name_pointer name_ptr; /* first unused position in |byte_start| */
85+extern name_pointer name_ptr; /* first unused position in |name_dir| */
8686 extern char huge* byte_ptr; /* first unused position in |byte_mem| */
8787 extern name_pointer hash[]; /* heads of hash lists */
8888 extern hash_pointer hash_end; /* end of |hash| */
cweb.el+3−0
@@ -110,6 +110,8 @@ otherwise do an ordinary Meta-y." · 109 unmodified lines
110110 (insert ch)
111111 (setq arg (1- arg)))))
112112 (global-set-key "\M-\"" 'ditto)
113+; If "ditto" suddenly fails to work, you have probably set goal-column
114+; inadvertently. To unset it, say C-u C-x C-n.
113115
114116 ;; OK, here's part (2): Changes to TeX mode.
115117 ; The WEB modes below are very much like TeX mode, but some improvements were
@@ -210,6 +212,7 @@ for relative module movement. The automatic \" feature is disabled." · 94 unmodified lines
210212 (modify-syntax-entry ?% "@")
211213 (setq mode-name "CWEB")
212214 (setq major-mode 'cweb-mode)
215+ (setq tex-fontify-script nil) ;; needed in GNU Emacs version 22?
213216 (run-hooks 'cweb-mode-hook))
214217 (setq auto-mode-alist (cons '("\\.w$" . cweb-mode) auto-mode-alist))
215218 (setq auto-mode-alist (cons '("\\.ch$" . cweb-mode) auto-mode-alist))
cwebmac.tex+9−6
@@ -1,8 +1,8 @@
11 % standard macros for CWEB listings (in addition to plain.tex)
2−% Version 3.67 --- July 2006
2+% Version 3.68 --- January 2016
33 \ifx\renewenvironment\undefined\else\endinput\fi % LaTeX will use other macros
4−\xdef\fmtversion{\fmtversion+CWEB3.67}
5−\chardef\cwebversion=3 \chardef\cwebrevision=67
4+\xdef\fmtversion{\fmtversion+CWEB3.68}
5+\chardef\cwebversion=3 \chardef\cwebrevision=68
66 \newif\ifpdf
77 \ifx\pdf+\pdftrue\fi
88 % Uncomment the following line if you want PDF goodies to be the default
@@ -278,7 +278,8 @@ · 269 unmodified lines
278278 \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50
279279 \noindent{\let\*=\lapstar\bf\secstar.\quad}%
280280 \ifpdftex\smash{\raise\baselineskip\hbox to0pt{%
281− \let\*=\empty\pdfdest num \secstar fith}}
281+% \let\*=\empty\pdfdest num \secstar fith}} % bad space in versions < 3.68
282+ \let\*=\empty\pdfdest num \secstar fith}}% changed in version 3.68
282283 \else\ifpdf\smash{\raise\baselineskip\hbox to0pt{%
283284 \let\*=\empty\special{%
284285 pdf: dest (\romannumeral\secstar) [ @thispage /FitH @ypos ]}}}\fi\fi}
@@ -340,7 +341,7 @@ · 55 unmodified lines
340341 \def\T#1{\leavevmode % octal, hex or decimal constant
341342 \hbox{$\def\?{\kern.2em}%
342343 % \def\$##1{\egroup_{\,\rm##1}\bgroup}% suffix to constant % versions < 3.67
343− \def\$##1{\egroup_{\rm##1}\bgroup}% suffix to constant
344+ \def\$##1{\egroup_{\rm##1}\bgroup}% suffix to constant % in version 3.67
344345 \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick)
345346 \let\~=\oct \let\^=\hex {#1}$}}
346347 \def\U{\note{This code is used in section}} % xref for use of a section
@@ -457,6 +458,7 @@ · 110 unmodified lines
457458 \def\fin{\par\vfill\eject % this is done when we are ending the index
458459 \ifpagesaved\null\vfill\eject\fi % output a null index column
459460 \if L\lr\else\null\vfill\eject\fi % finish the current page
461+ \ifpdftex \makebookmarks \fi % added in Version 3.68
460462 \parfillskip 0pt plus 1fil
461463 \def\grouptitle{NAMES OF THE SECTIONS}
462464 \let\topsecno=\nullsec
@@ -470,7 +472,8 @@ · 7 unmodified lines
470472 \def\Us{\note{Used in sections}} % crossref for uses of a section
471473 \def\I{\par\hangindent 2em}\let\*=*
472474 \ifacro \def\outsecname{Names of the sections} \let\Xpdf\X
473− \ifpdftex \makebookmarks \pdfdest name {NOS} fitb
475+% \ifpdftex \makebookmarks \pdfdest name {NOS} fitb % in versions < 3.68
476+ \ifpdftex \pdfdest name {NOS} fitb % changed in version 3.68
474477 \pdfoutline goto name {NOS} count -\secno {\outsecname}
475478 \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
476479 {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
cwebman.tex+1−1
@@ -1514,7 +1514,7 @@ is to explain some of the possibilities. · 1513 unmodified lines
15141514
15151515 \point 1. Four fonts have been declared in addition to the standard fonts of
15161516 \.{PLAIN} format: You can say `\.{\{\\mc UNIX\}}' to get {\mc UNIX} in
1517−xmedium-size caps; you can say `\.{\{\\sc STUFF\}}' to get {\sc STUFF}
1517+medium-size caps; you can say `\.{\{\\sc STUFF\}}' to get {\sc STUFF}
15181518 in small caps; and you can select the largish fonts \.{\\titlefont}
15191519 and \.{\\ttitlefont} in the title of your document, where \.{\\ttitlefont}
15201520 is a typewriter style of type. There are macros \.{\\UNIX/} and \.{\\CEE/}
examples/extex.c+25−24
@@ -14,19 +14,20 @@ if(cc=='\\'&&c==cc) c= '\0';} \ · 13 unmodified lines
1414 #define ignore_line 7 \
1515
1616 /*2:*/
17−#line 47 "extex.w"
17+#line 47 "./extex.w"
1818
1919 #include <stdio.h>
2020 #include <ctype.h>
21+#include <string.h>
2122 extern void exit();
2223
2324 /*3:*/
24−#line 75 "extex.w"
25+#line 76 "./extex.w"
2526
2627 int c;
2728
2829 /*:3*//*14:*/
29−#line 233 "extex.w"
30+#line 234 "./extex.w"
3031
3132 char ptab[]= {0,1,1,1,1,0,
3233 1,1,1,1,1,0,0,1,
@@ -39,7 +40,7 @@ char ptab[]= {0,1,1,1,1,0, · 6 unmodified lines
3940 0,0,0,1,1,1,0};
4041
4142 /*:14*//*17:*/
42−#line 290 "extex.w"
43+#line 291 "./extex.w"
4344
4445 char wtab[]= {start_section,nop,nop,nop,nop,nop,nop,nop,
4546 start_name,nop,start_section,nop,nop,nop,start_index,nop,
@@ -55,10 +56,10 @@ nop,ignore_line,nop,nop,ignore_line,nop,nop,nop, · 9 unmodified lines
5556 start_C,start_insert,nop,start_C,start_insert};
5657
5758 /*:17*/
58−#line 52 "extex.w"
59+#line 53 "./extex.w"
5960
6061 /*6:*/
61−#line 109 "extex.w"
62+#line 110 "./extex.w"
6263
6364 int get()
6465 {register int x;
@@ -68,7 +69,7 @@ return x; · 3 unmodified lines
6869 }
6970
7071 /*:6*//*12:*/
71−#line 188 "extex.w"
72+#line 189 "./extex.w"
7273
7374 int controlseq()
7475 {
@@ -83,7 +84,7 @@ if(l==1)b= c; · 8 unmodified lines
8384 }
8485 if(l==0)c= getchar();
8586 /*13:*/
86−#line 208 "extex.w"
87+#line 209 "./extex.w"
8788
8889 if((a>='"'&&a<='~'&&ptab[a-'"']==l)||
8990 (l==2&&(pair('a','e')||pair('A','E')
@@ -107,13 +108,13 @@ return 1; · 17 unmodified lines
107108 }
108109
109110 /*:13*/
110−#line 202 "extex.w"
111+#line 203 "./extex.w"
111112 ;
112113 return 0;
113114 }
114115
115116 /*:12*/
116−#line 53 "extex.w"
117+#line 54 "./extex.w"
117118
118119
119120 int main(argc,argv)
@@ -121,7 +122,7 @@ int argc; · 1 unmodified line
121122 char*argv[];
122123 {
123124 /*4:*/
124−#line 78 "extex.w"
125+#line 79 "./extex.w"
125126
126127 int web;
127128 int comment;
@@ -130,17 +131,17 @@ int save_skipping; · 2 unmodified lines
130131 register int cc;
131132
132133 /*:4*/
133−#line 59 "extex.w"
134+#line 60 "./extex.w"
134135 ;
135136 if(strlen(*argv)>=6&&strcmp(*argv+strlen(*argv)-6,"excweb")==0){
136137 web= 1;
137138 /*15:*/
138−#line 248 "extex.w"
139+#line 249 "./extex.w"
139140
140141 ptab[12]= 1;
141142
142143 /*:15*/
143−#line 62 "extex.w"
144+#line 63 "./extex.w"
144145 ;
145146 }else web= 0;
146147 comment= skipping= c= 0;
@@ -148,7 +149,7 @@ main_cycle:if(c)goto big_switch; · 1 unmodified line
148149 restart:c= get();
149150 big_switch:switch(c){
150151 /*5:*/
151−#line 94 "extex.w"
152+#line 95 "./extex.w"
152153
153154 case'%':discard_to('\n');goto restart;
154155 case'$':c= getchar();
@@ -160,7 +161,7 @@ while(getchar()!='$'); · 5 unmodified lines
160161 goto restart;
161162
162163 /*:5*//*7:*/
163−#line 121 "extex.w"
164+#line 122 "./extex.w"
164165
165166 case'a':case'A':
166167 case'b':case'B':
@@ -191,13 +192,13 @@ case'z':case'Z': · 24 unmodified lines
191192 goto out_word;
192193
193194 /*:7*//*11:*/
194−#line 184 "extex.w"
195+#line 185 "./extex.w"
195196
196197 case'\\':if(controlseq())goto control_seq_in_word;
197198 goto main_cycle;
198199
199200 /*:11*//*16:*/
200−#line 262 "extex.w"
201+#line 263 "./extex.w"
201202
202203 case'@':if(web)goto do_web;
203204 goto restart;
@@ -215,13 +216,13 @@ goto skip_C; · 11 unmodified lines
215216 goto big_switch;
216217
217218 /*:16*/
218−#line 68 "extex.w"
219+#line 69 "./extex.w"
219220
220221 case EOF:exit(0);
221222 default:goto restart;
222223 }
223224 /*8:*/
224−#line 154 "extex.w"
225+#line 155 "./extex.w"
225226
226227 out_word:putchar(c);
227228 continue_word:c= getchar();
@@ -239,13 +240,13 @@ end_word:putchar('\n'); · 11 unmodified lines
239240 goto main_cycle;
240241
241242 /*:8*//*10:*/
242−#line 180 "extex.w"
243+#line 181 "./extex.w"
243244
244245 control_seq_in_word:if(!c)goto continue_word;
245246 goto checkout_word;
246247
247248 /*:10*//*18:*/
248−#line 306 "extex.w"
249+#line 307 "./extex.w"
249250
250251 do_web:c= getchar();
251252 if(c<' '||c> 't')goto restart;
@@ -264,7 +265,7 @@ goto restart; · 12 unmodified lines
264265 }
265266
266267 /*:18*//*19:*/
267−#line 328 "extex.w"
268+#line 329 "./extex.w"
268269
269270 skip_C:save_skipping= 2;
270271 skip_C_prime:skipping= 1;
@@ -303,7 +304,7 @@ default:continue; · 32 unmodified lines
303304 }
304305
305306 /*:19*/
306−#line 72 "extex.w"
307+#line 73 "./extex.w"
307308 ;
308309 }
309310
examples/extex.w+1−0
@@ -47,6 +47,7 @@ any other programs that simulate finite-state automata.) · 46 unmodified lines
4747 @c
4848 #include <stdio.h>
4949 #include <ctype.h>
50+#include <string.h>
5051 extern void exit(); /* system routine that terminates execution */
5152 @#
5253 @<Global variables@>@;
examples/wmerge.c+69−69
@@ -33,20 +33,20 @@ history= fatal_message;exit(wrap_up() ) ; \ · 32 unmodified lines
3333 #define update_terminal fflush(stderr) \
3434
3535 /*1:*/
36−#line 15 "wmerge.w"
36+#line 15 "./wmerge.w"
3737
3838 #include <stdio.h>
3939 #include <stdlib.h>
4040 #include <ctype.h>
4141 /*2:*/
42−#line 37 "wmerge.w"
42+#line 37 "./wmerge.w"
4343
4444 typedef short boolean;
4545 typedef unsigned char eight_bits;
4646 typedef char ASCII;
4747
4848 /*:2*//*5:*/
49−#line 70 "wmerge.w"
49+#line 70 "./wmerge.w"
5050
5151 ASCII buffer[buf_size];
5252 ASCII*buffer_end= buffer+buf_size-2;
@@ -54,7 +54,7 @@ ASCII*limit; · 1 unmodified line
5454 ASCII*loc;
5555
5656 /*:5*//*7:*/
57−#line 136 "wmerge.w"
57+#line 136 "./wmerge.w"
5858
5959 int include_depth;
6060 FILE*file[max_include_depth];
@@ -71,18 +71,18 @@ boolean changing; · 10 unmodified lines
7171 boolean web_file_open= 0;
7272
7373 /*:7*//*8:*/
74−#line 162 "wmerge.w"
74+#line 162 "./wmerge.w"
7575
7676 char change_buffer[buf_size];
7777 char*change_limit;
7878
7979 /*:8*//*23:*/
80−#line 486 "wmerge.w"
80+#line 486 "./wmerge.w"
8181
8282 int history= spotless;
8383
8484 /*:23*//*30:*/
85−#line 584 "wmerge.w"
85+#line 584 "./wmerge.w"
8686
8787 int argc;
8888 char**argv;
@@ -90,40 +90,40 @@ char out_file_name[max_file_name_length]; · 1 unmodified line
9090 boolean flags[128];
9191
9292 /*:30*//*40:*/
93−#line 700 "wmerge.w"
93+#line 700 "./wmerge.w"
9494
9595 FILE*out_file;
9696
9797 /*:40*/
98−#line 19 "wmerge.w"
98+#line 19 "./wmerge.w"
9999
100100 /*3:*/
101−#line 47 "wmerge.w"
101+#line 47 "./wmerge.w"
102102
103−extern int strlen();
103+extern size_t strlen();
104104 extern char*strcpy();
105105 extern int strncmp();
106106 extern char*strncpy();
107107
108108 /*:3*//*4:*/
109−#line 53 "wmerge.w"
109+#line 53 "./wmerge.w"
110110
111111
112112 /*:4*//*24:*/
113−#line 498 "wmerge.w"
113+#line 498 "./wmerge.w"
114114
115115 void err_print();
116116
117117 /*:24*//*32:*/
118−#line 608 "wmerge.w"
118+#line 608 "./wmerge.w"
119119
120120 void scan_args();
121121
122122 /*:32*/
123−#line 20 "wmerge.w"
123+#line 20 "./wmerge.w"
124124
125125 /*6:*/
126−#line 95 "wmerge.w"
126+#line 95 "./wmerge.w"
127127
128128 input_ln(fp)
129129 FILE*fp;
@@ -145,14 +145,14 @@ return(1); · 15 unmodified lines
145145 }
146146
147147 /*:6*//*9:*/
148−#line 173 "wmerge.w"
148+#line 173 "./wmerge.w"
149149
150150 void
151151 prime_the_change_buffer()
152152 {
153153 change_limit= change_buffer;
154154 /*10:*/
155−#line 187 "wmerge.w"
155+#line 187 "./wmerge.w"
156156
157157 while(1){
158158 change_line++;
@@ -169,10 +169,10 @@ err_print("! Missing @x in change file"); · 10 unmodified lines
169169 }
170170
171171 /*:10*/
172−#line 178 "wmerge.w"
172+#line 178 "./wmerge.w"
173173 ;
174174 /*11:*/
175−#line 204 "wmerge.w"
175+#line 204 "./wmerge.w"
176176
177177 do{
178178 change_line++;
@@ -184,10 +184,10 @@ return; · 5 unmodified lines
184184 }while(limit==buffer);
185185
186186 /*:11*/
187−#line 179 "wmerge.w"
187+#line 179 "./wmerge.w"
188188 ;
189189 /*12:*/
190−#line 214 "wmerge.w"
190+#line 214 "./wmerge.w"
191191
192192 {
193193 change_limit= change_buffer+(limit-buffer);
@@ -195,12 +195,12 @@ strncpy(change_buffer,buffer,limit-buffer+1); · 1 unmodified line
195195 }
196196
197197 /*:12*/
198−#line 180 "wmerge.w"
198+#line 180 "./wmerge.w"
199199 ;
200200 }
201201
202202 /*:9*//*13:*/
203−#line 232 "wmerge.w"
203+#line 232 "./wmerge.w"
204204
205205 void
206206 check_change()
@@ -218,7 +218,7 @@ return; · 11 unmodified lines
218218 if(limit> buffer+1&&buffer[0]=='@'){
219219 char xyz_code= isupper(buffer[1])?tolower(buffer[1]):buffer[1];
220220 /*14:*/
221−#line 265 "wmerge.w"
221+#line 265 "./wmerge.w"
222222
223223 if(xyz_code=='x'||xyz_code=='z'){
224224 loc= buffer+2;err_print("! Where is the matching @y?");
@@ -236,11 +236,11 @@ return; · 11 unmodified lines
236236 }
237237
238238 /*:14*/
239−#line 249 "wmerge.w"
239+#line 249 "./wmerge.w"
240240 ;
241241 }
242242 /*12:*/
243−#line 214 "wmerge.w"
243+#line 214 "./wmerge.w"
244244
245245 {
246246 change_limit= change_buffer+(limit-buffer);
@@ -248,7 +248,7 @@ strncpy(change_buffer,buffer,limit-buffer+1); · 1 unmodified line
248248 }
249249
250250 /*:12*/
251−#line 251 "wmerge.w"
251+#line 251 "./wmerge.w"
252252 ;
253253 changing= 0;cur_line++;
254254 while(!input_ln(cur_file)){
@@ -264,14 +264,14 @@ if(lines_dont_match)n++; · 9 unmodified lines
264264 }
265265
266266 /*:13*//*15:*/
267−#line 284 "wmerge.w"
267+#line 284 "./wmerge.w"
268268
269269 void
270270 reset_input()
271271 {
272272 limit= buffer;loc= buffer+1;buffer[0]= ' ';
273273 /*16:*/
274−#line 299 "wmerge.w"
274+#line 299 "./wmerge.w"
275275
276276 if((web_file= fopen(web_file_name,"r"))==NULL){
277277 strcpy(web_file_name,alt_web_file_name);
@@ -285,7 +285,7 @@ if((change_file= fopen(change_file_name,"r"))==NULL) · 7 unmodified lines
285285 fatal("! Cannot open change file ",change_file_name);
286286
287287 /*:16*/
288−#line 289 "wmerge.w"
288+#line 289 "./wmerge.w"
289289 ;
290290 include_depth= 0;cur_line= 0;change_line= 0;
291291 change_depth= include_depth;
@@ -294,14 +294,14 @@ limit= buffer;loc= buffer+1;buffer[0]= ' ';input_has_ended= 0; · 2 unmodified lines
294294 }
295295
296296 /*:15*//*17:*/
297−#line 317 "wmerge.w"
297+#line 317 "./wmerge.w"
298298
299299 int get_line()
300300 {
301301 restart:
302302 if(changing&&include_depth==change_depth)
303303 /*21:*/
304−#line 431 "wmerge.w"
304+#line 431 "./wmerge.w"
305305 {
306306 change_line++;
307307 if(!input_ln(change_file)){
@@ -326,11 +326,11 @@ prime_the_change_buffer();changing= !changing; · 18 unmodified lines
326326 }
327327
328328 /*:21*/
329−#line 322 "wmerge.w"
329+#line 322 "./wmerge.w"
330330 ;
331331 if(!changing||include_depth> change_depth){
332332 /*20:*/
333−#line 415 "wmerge.w"
333+#line 415 "./wmerge.w"
334334 {
335335 cur_line++;
336336 while(!input_ln(cur_file)){
@@ -348,7 +348,7 @@ if(change_limit> change_buffer)check_change(); · 11 unmodified lines
348348 }
349349
350350 /*:20*/
351−#line 324 "wmerge.w"
351+#line 324 "./wmerge.w"
352352 ;
353353 if(changing&&include_depth==change_depth)goto restart;
354354 }
@@ -369,7 +369,7 @@ goto restart; · 14 unmodified lines
369369 }
370370 include_depth++;
371371 /*19:*/
372−#line 369 "wmerge.w"
372+#line 369 "./wmerge.w"
373373 {
374374 char temp_file_name[max_file_name_length];
375375 char*cur_file_name_end= cur_file_name+max_file_name_length-1;
@@ -417,7 +417,7 @@ include_depth--;err_print("! Cannot open include file");goto restart; · 41 unmodified lines
417417 }
418418
419419 /*:19*/
420−#line 343 "wmerge.w"
420+#line 343 "./wmerge.w"
421421 ;
422422 }
423423 return 1;
@@ -431,7 +431,7 @@ putc('\n',out_file); · 7 unmodified lines
431431 }
432432
433433 /*:17*//*22:*/
434−#line 457 "wmerge.w"
434+#line 457 "./wmerge.w"
435435
436436 void
437437 check_complete(){
@@ -445,7 +445,7 @@ err_print("! Change file entry did not match"); · 7 unmodified lines
445445 }
446446
447447 /*:22*//*25:*/
448−#line 502 "wmerge.w"
448+#line 502 "./wmerge.w"
449449
450450 void
451451 err_print(s)
@@ -454,7 +454,7 @@ char*s; · 2 unmodified lines
454454 char*k,*l;
455455 fprintf(stderr,*s=='!'?"\n%s":"%s",s);
456456 if(web_file_open)/*26:*/
457−#line 523 "wmerge.w"
457+#line 523 "./wmerge.w"
458458
459459 {if(changing&&include_depth==change_depth)
460460 fprintf(stderr,". (l. %d of change file)\n",change_line);
@@ -473,18 +473,18 @@ putc('\n',stderr); · 12 unmodified lines
473473 }
474474
475475 /*:26*/
476−#line 509 "wmerge.w"
476+#line 509 "./wmerge.w"
477477
478478 else putc('\n',stderr);
479479 update_terminal;mark_error;
480480 }
481481
482482 /*:25*//*28:*/
483−#line 555 "wmerge.w"
483+#line 555 "./wmerge.w"
484484
485485 wrap_up(){
486486 /*29:*/
487−#line 562 "wmerge.w"
487+#line 562 "./wmerge.w"
488488
489489 switch(history){
490490 case spotless:if(show_happiness)fprintf(stderr,"(No errors were found.)\n");break;
@@ -496,14 +496,14 @@ case fatal_message:fprintf(stderr,"(That was a fatal error, my friend.)\n"); · 5 unmodified lines
496496 }
497497
498498 /*:29*/
499−#line 557 "wmerge.w"
499+#line 557 "./wmerge.w"
500500 ;
501501 if(history> harmless_message)return(1);
502502 else return(0);
503503 }
504504
505505 /*:28*//*33:*/
506−#line 612 "wmerge.w"
506+#line 612 "./wmerge.w"
507507
508508 void
509509 scan_args()
@@ -516,7 +516,7 @@ boolean flag_change; · 6 unmodified lines
516516
517517 while(--argc> 0){
518518 if(**(++argv)=='-'||**argv=='+')/*37:*/
519−#line 682 "wmerge.w"
519+#line 682 "./wmerge.w"
520520
521521 {
522522 if(**argv=='-')flag_change= 0;
@@ -526,7 +526,7 @@ flags[*dot_pos]= flag_change; · 3 unmodified lines
526526 }
527527
528528 /*:37*/
529−#line 623 "wmerge.w"
529+#line 623 "./wmerge.w"
530530
531531 else{
532532 s= *argv;dot_pos= NULL;
@@ -536,16 +536,16 @@ else if(*s=='/')dot_pos= NULL,++s; · 3 unmodified lines
536536 else s++;
537537 }
538538 if(!found_web)/*34:*/
539−#line 648 "wmerge.w"
539+#line 648 "./wmerge.w"
540540
541541 {
542542 if(s-*argv> max_file_name_length-5)
543543 /*39:*/
544−#line 695 "wmerge.w"
544+#line 695 "./wmerge.w"
545545 fatal("! Filename too long\n",*argv);
546546
547547 /*:39*/
548−#line 651 "wmerge.w"
548+#line 651 "./wmerge.w"
549549 ;
550550 if(dot_pos==NULL)
551551 sprintf(web_file_name,"%s.w",*argv);
@@ -559,19 +559,19 @@ found_web= 1; · 7 unmodified lines
559559 }
560560
561561 /*:34*/
562−#line 631 "wmerge.w"
562+#line 631 "./wmerge.w"
563563
564564 else if(!found_change)/*35:*/
565−#line 663 "wmerge.w"
565+#line 663 "./wmerge.w"
566566
567567 {
568568 if(s-*argv> max_file_name_length-4)
569569 /*39:*/
570−#line 695 "wmerge.w"
570+#line 695 "./wmerge.w"
571571 fatal("! Filename too long\n",*argv);
572572
573573 /*:39*/
574−#line 666 "wmerge.w"
574+#line 666 "./wmerge.w"
575575 ;
576576 if(dot_pos==NULL)
577577 sprintf(change_file_name,"%s.ch",*argv);
@@ -580,19 +580,19 @@ found_change= 1; · 2 unmodified lines
580580 }
581581
582582 /*:35*/
583−#line 632 "wmerge.w"
583+#line 632 "./wmerge.w"
584584
585585 else if(!found_out)/*36:*/
586−#line 673 "wmerge.w"
586+#line 673 "./wmerge.w"
587587
588588 {
589589 if(s-*argv> max_file_name_length-5)
590590 /*39:*/
591−#line 695 "wmerge.w"
591+#line 695 "./wmerge.w"
592592 fatal("! Filename too long\n",*argv);
593593
594594 /*:39*/
595−#line 676 "wmerge.w"
595+#line 676 "./wmerge.w"
596596 ;
597597 if(dot_pos==NULL)sprintf(out_file_name,"%s.out",*argv);
598598 else strcpy(out_file_name,*argv);
@@ -600,50 +600,50 @@ found_out= 1; · 1 unmodified line
600600 }
601601
602602 /*:36*/
603−#line 633 "wmerge.w"
603+#line 633 "./wmerge.w"
604604
605605 else/*38:*/
606−#line 690 "wmerge.w"
606+#line 690 "./wmerge.w"
607607
608608 {
609609 fatal("! Usage: wmerge webfile[.w] [changefile[.ch] [outfile[.out]]]\n","")
610610 }
611611
612612 /*:38*/
613−#line 634 "wmerge.w"
613+#line 634 "./wmerge.w"
614614 ;
615615 }
616616 }
617617 if(!found_web)/*38:*/
618−#line 690 "wmerge.w"
618+#line 690 "./wmerge.w"
619619
620620 {
621621 fatal("! Usage: wmerge webfile[.w] [changefile[.ch] [outfile[.out]]]\n","")
622622 }
623623
624624 /*:38*/
625−#line 637 "wmerge.w"
625+#line 637 "./wmerge.w"
626626 ;
627627 if(!found_change)strcpy(change_file_name,"/dev/null");
628628 }
629629
630630 /*:33*/
631−#line 21 "wmerge.w"
631+#line 21 "./wmerge.w"
632632
633633 main(ac,av)
634634 int ac;char**av;
635635 {
636636 argc= ac;argv= av;
637637 /*31:*/
638−#line 592 "wmerge.w"
638+#line 592 "./wmerge.w"
639639
640640 show_banner= show_happiness= 1;
641641
642642 /*:31*/
643−#line 26 "wmerge.w"
643+#line 26 "./wmerge.w"
644644 ;
645645 /*41:*/
646−#line 703 "wmerge.w"
646+#line 703 "./wmerge.w"
647647
648648 scan_args();
649649 if(out_file_name[0]=='\0')out_file= stdout;
@@ -652,7 +652,7 @@ fatal("! Cannot open output file ",out_file_name); · 2 unmodified lines
652652
653653
654654 /*:41*/
655−#line 27 "wmerge.w"
655+#line 27 "./wmerge.w"
656656 ;
657657 reset_input();
658658 while(get_line())
examples/wmerge.w+1−1
@@ -45,7 +45,7 @@ are not as standard as the names of the functions. (There's confusion · 44 unmodified lines
4545 between \.{<string.h>} and \.{<strings.h>}.)
4646
4747 @<Predecl...@>=
48−extern int strlen(); /* length of string */
48+extern size_t strlen(); /* length of string */
4949 extern char* strcpy(); /* copy one string to another */
5050 extern int strncmp(); /* compare up to $n$ string characters */
5151 extern char* strncpy(); /* copy up to $n$ string characters */
examples/wordtest.c+51−50
@@ -9,17 +9,18 @@ · 8 unmodified lines
99 return x;} \
1010
1111 /*3:*/
12−#line 92 "wordtest.w"
12+#line 92 "./wordtest.w"
1313
1414 #include <stdio.h>
15+#include <stdlib.h>
1516
1617 /*4:*/
17−#line 107 "wordtest.w"
18+#line 108 "./wordtest.w"
1819
1920 typedef unsigned char byte;
2021
2122 /*:4*//*9:*/
22−#line 195 "wordtest.w"
23+#line 196 "./wordtest.w"
2324
2425 typedef struct node_struct{
2526 struct node_struct*left,*right;
@@ -28,7 +29,7 @@ unsigned long rank; · 2 unmodified lines
2829 }node;
2930
3031 /*:9*//*20:*/
31−#line 391 "wordtest.w"
32+#line 392 "./wordtest.w"
3233
3334 typedef struct filenode_struct{
3435 struct filenode_struct*link;
@@ -40,14 +41,14 @@ byte*endword; · 5 unmodified lines
4041 }filenode;
4142
4243 /*:20*/
43−#line 95 "wordtest.w"
44+#line 96 "./wordtest.w"
4445
4546 int main(argc,argv)
4647 int argc;
4748 char*argv[];
4849 {
4950 /*5:*/
50−#line 110 "wordtest.w"
51+#line 111 "./wordtest.w"
5152
5253 int targc;
5354 byte**targv;
@@ -59,12 +60,12 @@ register int c; · 5 unmodified lines
5960 register byte*u,*v;
6061
6162 /*:5*//*12:*/
62−#line 251 "wordtest.w"
63+#line 252 "./wordtest.w"
6364
6465 unsigned long current_rank= 0;
6566
6667 /*:12*//*16:*/
67−#line 309 "wordtest.w"
68+#line 310 "./wordtest.w"
6869
6970 node*next_node= NULL,*bad_node= NULL;
7071 byte*next_string= NULL,*bad_string= NULL;
@@ -73,23 +74,23 @@ byte*buffer; · 2 unmodified lines
7374 int l;
7475
7576 /*:16*//*22:*/
76−#line 409 "wordtest.w"
77+#line 410 "./wordtest.w"
7778
7879 filenode*curfile;
7980 filenode*f;
8081
8182 /*:22*/
82−#line 100 "wordtest.w"
83+#line 101 "./wordtest.w"
8384 ;
8485 /*6:*/
85−#line 122 "wordtest.w"
86+#line 123 "./wordtest.w"
8687
8788 for(c= 0;c<256;c++)ord[c]= c;
8889 delta= 0;
8990 targc= argc-1;targv= (byte**)argv+1;
9091 while(targc&&**targv=='-'){
9192 /*7:*/
92−#line 139 "wordtest.w"
93+#line 140 "./wordtest.w"
9394
9495 switch((*targv)[1]){
9596 case'a':for(c= delta,u= *targv+2;*u;u++)ord[*u]= ++c;break;
@@ -110,7 +111,7 @@ return-1; · 14 unmodified lines
110111 }
111112
112113 /*:7*/
113−#line 127 "wordtest.w"
114+#line 128 "./wordtest.w"
114115 ;
115116 targc--;targv++;
116117 }
@@ -119,7 +120,7 @@ else{ · 2 unmodified lines
119120 breakchar= '\0';
120121 for(c= 255;c;c--)if(ord[c]<0)breakchar= c;
121122 if(!breakchar)/*8:*/
122−#line 158 "wordtest.w"
123+#line 159 "./wordtest.w"
123124
124125 {
125126 ord['\n']= -1;
@@ -128,11 +129,11 @@ for(c= 1;c<=26;c++)ord['a'-1+c]= 'A'-1+c; · 2 unmodified lines
128129 }
129130
130131 /*:8*/
131−#line 134 "wordtest.w"
132+#line 135 "./wordtest.w"
132133 ;
133134 }
134135 /*21:*/
135−#line 401 "wordtest.w"
136+#line 402 "./wordtest.w"
136137
137138 if(targc){
138139 curfile= (filenode*)calloc(targc,sizeof(filenode));
@@ -142,10 +143,10 @@ f->link= curfile; · 3 unmodified lines
142143 }else curfile= NULL;
143144
144145 /*:21*/
145−#line 136 "wordtest.w"
146+#line 137 "./wordtest.w"
146147 ;
147148 for(;targc;targc--,targv++)/*23:*/
148−#line 413 "wordtest.w"
149+#line 414 "./wordtest.w"
149150
150151 {
151152 curfile->dfile= fopen((char*)*targv,"r");
@@ -161,20 +162,20 @@ curfile= curfile->link; · 9 unmodified lines
161162 }
162163
163164 /*:23*/
164−#line 137 "wordtest.w"
165+#line 138 "./wordtest.w"
165166 ;
166167
167168 /*:6*/
168−#line 101 "wordtest.w"
169+#line 102 "./wordtest.w"
169170 ;
170171 /*17:*/
171−#line 319 "wordtest.w"
172+#line 320 "./wordtest.w"
172173
173174 buffer= (byte*)malloc(max_length+1);
174175 if(buffer==NULL)out_of_mem(-5);
175176 while(1){
176177 /*18:*/
177−#line 332 "wordtest.w"
178+#line 333 "./wordtest.w"
178179
179180 u= buffer;l= 0;
180181 while(l<max_length){
@@ -196,11 +197,11 @@ l++; · 15 unmodified lines
196197 *u= breakchar;
197198
198199 /*:18*/
199−#line 323 "wordtest.w"
200+#line 324 "./wordtest.w"
200201 ;
201202 if(l){
202203 /*10:*/
203−#line 213 "wordtest.w"
204+#line 214 "./wordtest.w"
204205
205206 {register node*p= root;
206207 while(p){
@@ -212,10 +213,10 @@ else p= p->right; · 5 unmodified lines
212213 }
213214
214215 /*:10*/
215−#line 325 "wordtest.w"
216+#line 326 "./wordtest.w"
216217 ;
217218 /*11:*/
218−#line 235 "wordtest.w"
219+#line 236 "./wordtest.w"
219220
220221 {register node*p,**q,**qq,*r;
221222 current_rank+= PHICLONE;
@@ -227,7 +228,7 @@ if(ord[*u]<ord[*v])q= &(p->left),p= *q; · 5 unmodified lines
227228 else q= &(p->right),p= *q;
228229 }
229230 /*14:*/
230−#line 285 "wordtest.w"
231+#line 286 "./wordtest.w"
231232
232233 if(next_node==bad_node){
233234 next_node= (node*)calloc(NODES_PER_BLOCK,sizeof(node));
@@ -236,7 +237,7 @@ bad_node= next_node+NODES_PER_BLOCK; · 2 unmodified lines
236237 }
237238 r= next_node++;
238239 /*15:*/
239−#line 295 "wordtest.w"
240+#line 296 "./wordtest.w"
240241
241242 if(next_string+l+1>=bad_string){int block_size= CHARS_PER_BLOCK+l+1;
242243 next_string= (byte*)malloc(block_size);
@@ -249,16 +250,16 @@ for(u= buffer,v= next_string;ord[*u]> 0;u++,v++)*v= *u; · 6 unmodified lines
249250 next_string= v+1;
250251
251252 /*:15*/
252−#line 293 "wordtest.w"
253+#line 294 "./wordtest.w"
253254 ;
254255
255256 /*:14*/
256−#line 245 "wordtest.w"
257+#line 246 "./wordtest.w"
257258 ;
258259 r->rank= current_rank;
259260 *q= r;
260261 /*13:*/
261−#line 259 "wordtest.w"
262+#line 260 "./wordtest.w"
262263
263264 q= &(r->left);qq= &(r->right);
264265 while(p){
@@ -276,12 +277,12 @@ p= *q; · 11 unmodified lines
276277 *q= *qq= NULL;
277278
278279 /*:13*/
279−#line 248 "wordtest.w"
280+#line 249 "./wordtest.w"
280281 ;
281282 }
282283
283284 /*:11*/
284−#line 326 "wordtest.w"
285+#line 327 "./wordtest.w"
285286 ;
286287 found:;
287288 }
@@ -289,10 +290,10 @@ found:; · 1 unmodified line
289290 done:;
290291
291292 /*:17*/
292−#line 102 "wordtest.w"
293+#line 103 "./wordtest.w"
293294 ;
294295 /*19:*/
295−#line 358 "wordtest.w"
296+#line 359 "./wordtest.w"
296297
297298 if(root!=NULL){register node*p,*q;
298299 p= root;
@@ -305,7 +306,7 @@ root= p; · 6 unmodified lines
305306 p= q;
306307 }
307308 visit:/*25:*/
308−#line 437 "wordtest.w"
309+#line 438 "./wordtest.w"
309310
310311 while(curfile!=NULL){
311312 for(u= p->keyword,v= curfile->curword;ord[*u]==ord[*v];u++,v++);
@@ -313,10 +314,10 @@ if(*u=='\0'&&*v==breakchar)goto word_done; · 1 unmodified line
313314
314315 if(ord[*u]<ord[*v])break;
315316 /*27:*/
316−#line 452 "wordtest.w"
317+#line 453 "./wordtest.w"
317318
318319 /*28:*/
319−#line 472 "wordtest.w"
320+#line 473 "./wordtest.w"
320321
321322 v= curfile->curword;
322323 l= max_length;
@@ -342,7 +343,7 @@ break; · 19 unmodified lines
342343 }
343344 if(u==w){
344345 /*29:*/
345−#line 504 "wordtest.w"
346+#line 505 "./wordtest.w"
346347
347348 if(ferror(curfile->dfile)){
348349 fprintf(stderr,"%s: File read error on dictionary file!\n",*argv);
@@ -363,7 +364,7 @@ curfile->limit= curfile->buf+fread(curfile->buf,1,BUFSIZ,curfile->dfile); · 14 unmodified lines
363364 curfile->pos= curfile->buf;
364365
365366 /*:29*/
366−#line 497 "wordtest.w"
367+#line 498 "./wordtest.w"
367368 ;
368369 }else curfile->pos= u+1;
369370 }
@@ -372,15 +373,15 @@ curfile->endword= v; · 2 unmodified lines
372373 update_done:;
373374
374375 /*:28*/
375−#line 453 "wordtest.w"
376+#line 454 "./wordtest.w"
376377 ;
377378 /*30:*/
378−#line 523 "wordtest.w"
379+#line 524 "./wordtest.w"
379380
380381 if(curfile!=NULL){filenode*sentinel= curfile;
381382 for(f= curfile->link;f!=sentinel;f= f->link)
382383 /*31:*/
383−#line 529 "wordtest.w"
384+#line 530 "./wordtest.w"
384385
385386 {
386387 *f->endword= '\0';
@@ -390,31 +391,31 @@ if(ord[*u]<ord[*v])curfile= f; · 3 unmodified lines
390391 }
391392
392393 /*:31*/
393−#line 526 "wordtest.w"
394+#line 527 "./wordtest.w"
394395 ;
395396 }
396397
397398 /*:30*/
398−#line 455 "wordtest.w"
399+#line 456 "./wordtest.w"
399400 ;
400401
401402 /*:27*/
402−#line 443 "wordtest.w"
403+#line 444 "./wordtest.w"
403404 ;
404405 }
405406 /*26:*/
406−#line 448 "wordtest.w"
407+#line 449 "./wordtest.w"
407408
408409 for(u= p->keyword;*u;u++)putchar(*u);
409410 putchar(breakchar);
410411
411412 /*:26*/
412−#line 445 "wordtest.w"
413+#line 446 "./wordtest.w"
413414
414415 word_done:;
415416
416417 /*:25*/
417−#line 369 "wordtest.w"
418+#line 370 "./wordtest.w"
418419 ;
419420 if(p->right==NULL){
420421 if(root==NULL)break;
@@ -426,7 +427,7 @@ goto visit; · 5 unmodified lines
426427 }
427428
428429 /*:19*/
429−#line 103 "wordtest.w"
430+#line 104 "./wordtest.w"
430431 ;
431432 return 0;
432433 }
examples/wordtest.w+1−0
@@ -91,6 +91,7 @@ a nonzero value is returned. · 90 unmodified lines
9191
9292 @p
9393 #include <stdio.h>
94+#include <stdlib.h>
9495 @#
9596 @<Typedefs@>@;
9697 int main(argc,argv)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t