home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / fweb140x.zip / ftangle.c < prev    next >
C/C++ Source or Header  |  1996-02-26  |  152KB  |  10,197 lines

  1. #if(0)
  2.   FTANGLE v1.40, created with IBM OS/2 2.x (ANSI/emx) on "Saturday, October 30, 1993 at 13:15." 
  3. Adapted to OS/2 by S. A. Deutscher (sad@utk.edu), 26-Feb-1996
  4.   COMMAND LINE: "ftangle ./ftangle -uANSI -mANSI -mGCC -= ftangle.c"
  5.   RUN TIME: "Monday, February 26, 1996 at 23:56."
  6.   WEB FILE:    "./ftangle.web"
  7.   CHANGE FILE: (none)
  8. #endif
  9. #if(0)
  10. "WARNING: "ANSI" is already undefined.  (Input l. 14 in ./ftangle.web.) "
  11. #endif
  12. #define _FTANGLE_h  
  13. #define _FWEB_h   \
  14.  
  15. #define semi  01 \
  16.  
  17. #define SILENT  (boolean)NO
  18. #define COMPLAIN  (boolean)YES \
  19.  
  20. #define OUTER_MACRO  0xFF
  21. #define OUTER_UNMACRO  0xFE
  22. #define UNDEFINED_MACRO  0xFD \
  23.  
  24. #define MAX_XLEVELS  200 \
  25.  
  26. #define equiv  equiv_or_xref \
  27.  
  28. #define EQUIV  ASCII HUGE* \
  29.  \
  30.  \
  31.  \
  32.  
  33. #define MAC_LOOKUP(cur_val)(cur_val<MODULE_NAME? \
  34. (text_pointer)(name_dir+(cur_val))->equiv:NULL) \
  35.  
  36. #define macro  0 \
  37.  \
  38.  \
  39.  \
  40.  \
  41.  
  42. #define NOT_DEFINED  0
  43. #define DEFERRED_MACRO  1 \
  44.  
  45. #define IMMEDIATE_MACRO  2
  46. #define FILE_NAME  3 \
  47.  \
  48.  
  49. #define MAKE_RECURSIVE  '*' \
  50.  \
  51.  \
  52.  
  53. #define AUTO_INSERT  '['
  54. #define END_AUTO_INSERT  ']' \
  55.  \
  56.  
  57. #define MCHECK(n,reason)if(mp+(n)>macrobuf_end) \
  58. mbuf_full((unsigned long)(n),(outer_char*)reason) \
  59.  
  60. #define RST_LAST_EXPR  {plast_char= last_char;last_xpr_overflowed= NO;} \
  61.  
  62. #define INDENT_SIZE  2 \
  63.  \
  64.  
  65. #define NO_INDENT  0
  66. #define INDENT  2 \
  67.  
  68. #define OUT_FILE  outp_file[lan_num(out_language)] \
  69.  \
  70.  \
  71.  
  72. #define C_printf(c,a) \
  73. { \
  74. if(!out_file)open_out(OC(""),YES); \
  75. if(fprintf(out_file,c,a)<0)out_error(OC("fprintf")); \
  76. } \
  77.  
  78. #define NOT_CONTINUATION  0
  79. #define CONTINUATION  1 \
  80.  
  81. #define N_STRBUF  150 \
  82.  
  83. #define send_new_line  RST_LAST_EXPR flush0();PUTC('\n') \
  84.  
  85. #define NEWLINE_TO_FORTRAN(continuation_flag) \
  86. flush_out(YES); \
  87.  \
  88. rst_out(continuation_flag) \
  89.  \
  90.  
  91. #define TO_BUFFER(type) \
  92. if(!nuweb_mode) \
  93. { \
  94. px= t_style.meta[lan_num(language)].msg.type; \
  95. STRCPY(outp_buf,px); \
  96. out_pos= STRLEN(px); \
  97. } \
  98.  
  99. #define CUR_BUF  (pai->text_buf[pai->ilevel]) \
  100.  
  101. #define module_flag  (sixteen_bits)max_texts \
  102.  \
  103.  
  104. #define cur_end  cur_state.end_field \
  105.  
  106. #define cur_byte  cur_state.byte_field \
  107.  
  108. #define cur_name  cur_state.name_field \
  109.  
  110. #define cur_repl  cur_state.repl_field \
  111.  
  112. #define cur_mod  cur_state.mod_field \
  113.  \
  114.  
  115. #define cur_language  cur_state.language \
  116.  
  117. #define cur_global_language  cur_state.global_params.Language \
  118.  \
  119.  \
  120.  \
  121.  
  122. #define cur_params  cur_state.params \
  123.  
  124. #define cur_global_params  cur_state.global_params \
  125.  \
  126.  \
  127.  
  128. #define macrobuf  cur_state.macro_buf
  129. #define macrobuf_end  cur_state.macro_buf_end \
  130.  
  131. #define UNNAMED_MODULE  0 \
  132.  
  133. #define UNNAMED_MOD  "unnamed"
  134. #define flush_buffer()C_putc('\n') \
  135.  
  136. #define NEWLINE  puts("") \
  137.  
  138. #define BP_MARKER  1 \
  139.  
  140. #define PROPER_END(end) \
  141. end= (np+1)->byte_start; \
  142. if(*end==BP_MARKER&&np!=npmax)end= ((BP*)end)->byte_start \
  143.  
  144. #define MAX_ID_LENGTH  32 \
  145.  \
  146.  
  147. #define GLOBAL_SCOPE  YES
  148. #define LOCAL_SCOPE  NO \
  149.  
  150. #define CHECK_OPEN  if(!out_file)open_out(OC(""),GLOBAL_SCOPE) \
  151.  
  152. #define OUT_OP(s)out_op(OC(s))
  153. #define OUT_STR(s)out_str(OC(s)) \
  154.  
  155. #define F_OP(op77,op88)(Fortran88?op88:op77) \
  156.  
  157. #define stringg  (eight_bits)'\2'
  158. #define constant  (eight_bits)'\3' \
  159.  
  160. #define begin_Xmeta  or_or
  161. #define end_Xmeta  star_star
  162. #define cdir  (eight_bits)'\6' \
  163.  
  164. #define colon_colon  (eight_bits)'\11' \
  165.  \
  166.  
  167. #define join  (eight_bits)'\177' \
  168.  \
  169.  
  170. #define ID0  0200 \
  171.  
  172. #define TOKEN1(a)((a)<ID0) \
  173.  \
  174.  
  175. #define MACRO_ARGUMENT  0377 \
  176.  
  177. #define BASE2  0400 \
  178.  
  179. #define MODULE_NAME  10240
  180. #define MODULE_NUM  20480
  181. #define LINE_NUM  53248L \
  182.  
  183. #define IDENTIFIER(left,right)(((left)-ID0)*BASE2+(right)) \
  184.  \
  185.  
  186. #define LEFT(a,id)((eight_bits)(((a)/BASE2+(id)))) \
  187.  
  188. #define RIGHT(a)((eight_bits)(((a)%BASE2))) \
  189.  
  190. #define ignore  0 \
  191.  \
  192.  
  193. #define begin_comment0  (eight_bits)'\xFE' \
  194.  
  195. #define begin_comment1  (eight_bits)'\xFD' \
  196.  \
  197.  
  198. #define module_number  (eight_bits)'\201' \
  199.  
  200. #define identifier  (eight_bits)'\202' \
  201.  
  202. #define id_keyword  (eight_bits)'\203' \
  203.  \
  204.  
  205. #define L_switch  (eight_bits)'\257' \
  206.  
  207. #define begin_FORTRAN  (eight_bits)'\260'
  208. #define begin_RATFOR  (eight_bits)'\261'
  209. #define begin_C  (eight_bits)'\262'
  210. #define begin_LITERAL  (eight_bits)'\263' \
  211.  
  212. #define verbatim  (eight_bits)'\264' \
  213.  \
  214.  
  215. #define invisible_cmnt  (eight_bits)'\265' \
  216.  
  217. #define compiler_directive  (eight_bits)'\266' \
  218.  
  219. #define Compiler_Directive  (eight_bits)'\267' \
  220.  
  221. #define no_index  (eight_bits)'\300' \
  222.  
  223. #define yes_index  (eight_bits)'\301' \
  224.  \
  225.  
  226. #define ascii_constant  (eight_bits)'\302' \
  227.  
  228. #define begin_vcmnt  (eight_bits)'\303' \
  229.  
  230. #define big_line_break  (eight_bits)'\304' \
  231.  \
  232.  
  233. #define begin_bp  (eight_bits)'\305'
  234. #define insert_bp  (eight_bits)'\306' \
  235.  
  236. #define begin_meta  (eight_bits)'\17' \
  237.  
  238. #define end_meta  (eight_bits)'\27' \
  239.  
  240. #define TeX_string  (eight_bits)'\307'
  241. #define xref_roman  (eight_bits)'\310'
  242. #define xref_typewriter  (eight_bits)'\311'
  243. #define xref_wildcard  (eight_bits)'\312' \
  244.  
  245. #define control_text  (eight_bits)'\313' \
  246.  \
  247.  
  248. #define begin_nuweb  (eight_bits)'\314'
  249. #define no_mac_expand  (eight_bits)'\315' \
  250.  \
  251.  
  252. #define formatt  (eight_bits)'\320' \
  253.  \
  254.  
  255. #define limbo_text  (eight_bits)'\323' \
  256.  
  257. #define op_def  (eight_bits)'\324' \
  258.  
  259. #define macro_def  (eight_bits)'\325' \
  260.  \
  261.  
  262. #define ignore_defn  (eight_bits)'\327' \
  263.  \
  264.  
  265. #define new_output_file  (eight_bits)'\331' \
  266.  \
  267.  
  268. #define definition  (eight_bits)'\332' \
  269.  
  270. #define undefinition  (eight_bits)'\333' \
  271.  
  272. #define WEB_definition  (eight_bits)'\334' \
  273.  \
  274.  
  275. #define m_ifdef  (eight_bits)'\335'
  276. #define m_ifndef  (eight_bits)'\336'
  277. #define m_if  (eight_bits)'\337'
  278. #define m_else  (eight_bits)'\340'
  279. #define m_elif  (eight_bits)'\341'
  280. #define m_endif  (eight_bits)'\342'
  281. #define m_for  (eight_bits)'\343'
  282. #define m_endfor  (eight_bits)'\344'
  283. #define m_pragma  (eight_bits)'\345'
  284. #define m_undef  (eight_bits)'\346' \
  285.  
  286. #define end_of_buffer  (eight_bits)'\347' \
  287.  
  288. #define begin_code  (eight_bits)'\350' \
  289.  
  290. #define module_name  (eight_bits)'\351' \
  291.  \
  292.  
  293. #define new_module  (eight_bits)'\352' \
  294.  \
  295.  
  296. #define MAYBE_SET_OUTPUT(l)if(last_char!='|')set_output_file(l) \
  297.  
  298. #define RETURN(pcode)return(eight_bits)pcode \
  299.  
  300. #define compress(c)if(loc++<=limit)return(eight_bits)(c)
  301. #define Fcompress(c)if(is_FORTRAN_(language)&&loc<limit) \
  302. return(eight_bits)(c)
  303. #define STOP  (boolean)YES
  304. #define DONT_STOP  (boolean)NO \
  305.  \
  306.  
  307. #define app_repl(c){if(tok_ptr==tok_m_end) \
  308. OVERFLW("tokens","tt"); \
  309. *tok_ptr++= (eight_bits)(c);} \
  310.  
  311. #define BP_BUF_SIZE  (13+MAX_ID_LENGTH) \
  312.  \
  313.  \
  314.  
  315. #define N_IDBUF  100
  316. #define MAX_LEVEL  20 \
  317.  \
  318.  \
  319.  
  320. #define EXPAND  YES \
  321.  
  322. #define DEF_OR_NDEF(flag) \
  323. found_else= NO; \
  324. if(!expand) \
  325. { \
  326. to_endif(m_ifdef); \
  327. goto next_macro_token; \
  328. } \
  329. else \
  330. { \
  331. text_pointer m; \
  332. if((next_control= get_next())!=identifier) \
  333. { \
  334.  \
  335. err0_print(ERR_T,OC("Expected identifier after @#ifdef  \
  336. or @#ifndef; assuming not defined"),0); \
  337. if_switch= NO; \
  338. } \
  339. else if_switch=  \
  340. BOOLEAN(flag((m= MAC_LOOKUP(ID_NUM(id_first,id_loc)))!=NULL \
  341. &&!(m->built_in))); \
  342.  \
  343. if(if_switch) \
  344. { \
  345. GET_LINE; \
  346.  \
  347. scan_text(text_type,p,if_switch); \
  348. } \
  349. else \
  350. { \
  351. expand= NO;to_else(); \
  352.  \
  353. if(next_control!=m_endif) \
  354. { \
  355. scanned_if= YES; \
  356. goto next_macro_token; \
  357. } \
  358. else \
  359. { \
  360. next_control= ignore; \
  361. expand= YES; \
  362. GET_LINE; \
  363.  \
  364. break; \
  365. } \
  366. } \
  367. } \
  368.  \
  369.  \
  370.  
  371. #define M_TRUE  
  372. #define M_FALSE  ! \
  373.  
  374. #define GET_LINE   \
  375. if(!from_buffer) \
  376. if(language!=TEX) \
  377. get_line() \
  378.  
  379. #define OUT_OF_ORDER(cmd)out_of_order((outer_char*)cmd) \
  380.  
  381. #define SPCS_AFTER_CMNT  1 \
  382.  \
  383.  
  384. /* 1: */
  385. #line 23 "./ftangle.web"
  386.  
  387. /* 6: */
  388. #line 16 "./typedefs.hweb"
  389.  
  390.  
  391. #ifndef part
  392. #define part 0 
  393. #else
  394. #if part != 1 && part != 2 && part != 3
  395. #define part 1 
  396. #endif
  397. #endif 
  398.  
  399.  
  400. /* :6 *//* 7: */
  401. #line 40 "./typedefs.hweb"
  402.  
  403.  
  404. #if(part == 0 || part == 1)
  405. #define part1_or_extern
  406. #define SET1(stuff) =  stuff
  407. #define TSET1(stuff) =  stuff
  408. #else
  409. #define part1_or_extern extern
  410. #define SET1(stuff)
  411. #define TSET1(stuff)
  412. #endif
  413.  
  414.  
  415. /* :7 */
  416. #line 24 "./ftangle.web"
  417.  
  418.  
  419. /* 35: */
  420. #line 418 "./typedefs.hweb"
  421.  
  422. #include "typedefs.h"
  423.  
  424.  
  425.  
  426. #line 83 "./ftangle.web"
  427.  
  428. #line 8 "./val.hweb"
  429.  
  430. /* :35 *//* 305: */
  431. #line 7942 "./ftangle.web"
  432.  
  433.  
  434. #include "map.h" 
  435.  
  436.  
  437. /* :305 */
  438. #line 26 "./ftangle.web"
  439.  
  440. /* 36: */
  441. #line 11 "./val.hweb"
  442.  
  443.  
  444.  
  445. typedef enum{BAD_TOKEN,OR_OR,AND_AND,BIT_OR,BIT_XOR,BIT_AND,LOG_EQ,LOG_LT,
  446. BIT_SHIFT,PLUS_MINUS,TIMES,EXP,UNARY,HIGHEST_UNARY}PRECEDENCE;
  447.  
  448.  
  449. typedef struct
  450. {
  451. eight_bits token;
  452. PRECEDENCE precedence;
  453. }OP;
  454.  
  455.  
  456. typedef union
  457. {
  458. long i;
  459.  
  460. double d;
  461.  
  462. sixteen_bits id;
  463.  
  464. OP op;
  465. }VALUE;
  466.  
  467.  
  468.  
  469. typedef enum{Int,Double,Id,Op}TYPE;
  470.  
  471.  
  472.  
  473. typedef struct val
  474. {
  475. VALUE value;
  476.  
  477. TYPE type;
  478.  
  479. struct val HUGE*last,HUGE*next;
  480.  
  481. }VAL;
  482. #line 85 "./ftangle.web"
  483.  
  484. #line 8 "./macs.hweb"
  485.  
  486. /* :36 *//* 37: */
  487. #line 56 "./macs.hweb"
  488.  
  489.  
  490. typedef struct
  491. {
  492. int token[MAX_XLEVELS];
  493. int level;
  494. }XIDS;
  495.  
  496. /* :37 *//* 70: */
  497. #line 868 "./ftangle.web"
  498.  
  499.  
  500.  
  501.  
  502. typedef struct
  503. {
  504. outer_char HUGE*start,HUGE*pos,HUGE*end;
  505. }TEXT_BUF;
  506.  
  507.  
  508. typedef struct
  509. {
  510. int ilevel;
  511.  
  512. TEXT_BUF HUGE*text_buf[10];
  513.  
  514. TEXT_BUF HUGE*last_buf;
  515.  
  516. }PAREN_LEVEL;
  517.  
  518. PAREN_LEVEL paren_level[10],HUGE*pai= paren_level;
  519.  
  520. int rparen= NO;
  521.  
  522.  
  523.  
  524. /* :70 *//* 76: */
  525. #line 41 "./texts.hweb"
  526.  
  527.  
  528. typedef struct
  529. {
  530. eight_bits HUGE*tok_start;
  531.  
  532. sixteen_bits text_link;
  533.  
  534. boolean Language;
  535.  
  536. eight_bits nargs;
  537.  
  538. unsigned moffset:8,
  539.  
  540. recursive:1,
  541.  
  542. var_args:1,
  543.  
  544. module_text:1,
  545.  
  546. built_in:1;
  547.  
  548. }text;
  549.  
  550. typedef text HUGE*text_pointer;
  551.  
  552. /* :76 *//* 88: */
  553. #line 46 "./stacks.hweb"
  554.  
  555.  
  556. typedef struct{
  557. eight_bits HUGE*end_field;
  558.  
  559. eight_bits HUGE*byte_field;
  560.  
  561. name_pointer name_field;
  562.  
  563. text_pointer repl_field;
  564.  
  565. sixteen_bits mod_field;
  566.  
  567. PARAMS global_params,params;
  568.  
  569. eight_bits HUGE*macro_buf,HUGE*macro_buf_end;
  570.  
  571. }output_state;
  572.  
  573. typedef output_state HUGE*stack_pointer;
  574.  
  575. /* :88 *//* 128: */
  576. #line 19 "./trunc.hweb"
  577.  
  578.  
  579. #if(0)
  580. IN_COMMON boolean truncate_ids;
  581. IN_COMMON unsigned short tr_max[];
  582. IN_COMMON name_pointer npmax;
  583. #endif
  584.  
  585.  
  586. typedef struct Bp
  587. {
  588. ASCII c;
  589.  
  590. LANGUAGE Language;
  591. CONST ASCII HUGE*byte_start,HUGE*byte_end;
  592.  
  593. struct Bp HUGE*next;
  594.  
  595. struct Trunc HUGE*Root;
  596. }BP;
  597.  
  598.  
  599. typedef struct Trunc
  600. {
  601. boolean Language;
  602.  
  603. size_t num[NUM_LANGUAGES];
  604.  
  605.  
  606. ASCII HUGE*id,HUGE*id_end;
  607.  
  608. BP HUGE*first,HUGE*last;
  609.  
  610. struct Trunc HUGE*next;
  611.  
  612. }TRUNC;
  613. #line 2219 "./ftangle.web"
  614.  
  615. /* :128 */
  616. #line 27 "./ftangle.web"
  617.  
  618. /* 39: */
  619. #line 90 "./ftangle.web"
  620.  
  621.  
  622. #include "t_type.h" 
  623.  
  624.  
  625. /* :39 */
  626. #line 28 "./ftangle.web"
  627.  
  628. /* 34: */
  629. #line 404 "./typedefs.hweb"
  630.  
  631.  
  632.  
  633.  
  634.  
  635. #ifdef SMALL_MEMORY
  636. #define N_MSGBUF 2000
  637. #else
  638. #define N_MSGBUF 10000
  639. #endif
  640.  
  641.  
  642.  
  643. /* :34 *//* 38: */
  644. #line 65 "./macs.hweb"
  645.  
  646.  
  647. IN_COMMON STMT_LBL max_stmt;
  648.  
  649. EXTERN sixteen_bits outp_line[NUM_LANGUAGES]
  650. #ifdef _FTANGLE_h
  651. #if(part == 0 || part == 1)
  652. = {1,1,1,1,1,1,1,1}
  653. #endif 
  654. #endif 
  655. ;
  656. #line 87 "./ftangle.web"
  657.  
  658.  
  659. /* :38 *//* 40: */
  660. #line 103 "./ftangle.web"
  661.  
  662.  
  663. EXTERN int indnt_size SET(INDENT_SIZE);
  664.  
  665.  
  666.  
  667. EXTERN outer_char HUGE*last_char,HUGE*last_end;
  668.  
  669. EXTERN outer_char HUGE*plast_char;
  670.  
  671. EXTERN BUF_SIZE max_expr_chars;
  672.  
  673.  
  674. EXTERN boolean last_xpr_overflowed SET(NO);
  675.  
  676. EXTERN int indent_level SET(0);
  677.  
  678.  
  679. /* :40 *//* 43: */
  680. #line 141 "./ftangle.web"
  681.  
  682.  
  683.  
  684. EXTERN outer_char HUGE*C_buffer,HUGE*pC_end;
  685.  
  686. EXTERN outer_char HUGE*pC_buffer;
  687.  
  688. EXTERN BUF_SIZE C_buf_size;
  689.  
  690.  
  691.  
  692. EXTERN outer_char HUGE*split_pos;
  693.  
  694.  
  695.  
  696. EXTERN outer_char HUGE*X_buffer,HUGE*pX_end;
  697.  
  698. EXTERN outer_char HUGE*pX_buffer;
  699.  
  700. EXTERN BUF_SIZE X_buf_size;
  701.  
  702.  
  703. /* :43 *//* 57: */
  704. #line 459 "./ftangle.web"
  705.  
  706.  
  707. EXTERN int rst_pos SET(0);
  708.  
  709. EXTERN int out_pos SET(0);
  710.  
  711. EXTERN boolean in_string SET(NO);
  712.  
  713. EXTERN boolean in_constant SET(NO);
  714.  
  715. EXTERN boolean started_vcmnt SET(NO);
  716. EXTERN boolean meta_mode SET(NO);
  717.  
  718. /* :57 *//* 60: */
  719. #line 528 "./ftangle.web"
  720.  
  721.  
  722. IN_COMMON outer_char outp_buf[];
  723.  
  724. IN_COMMON int nbuf_length;
  725.  
  726. EXTERN boolean out_at_beginning SET(YES);
  727.  
  728.  
  729. /* :60 *//* 77: */
  730. #line 60 "./texts.hweb"
  731.  
  732.  
  733. EXTERN long max_texts;
  734.  
  735. EXTERN text HUGE*text_info;
  736.  
  737. EXTERN text_pointer text_end;
  738.  
  739.  
  740. EXTERN long dtexts_max;
  741.  
  742. EXTERN text HUGE*txt_dinfo;
  743.  
  744. EXTERN text_pointer textd_end;
  745.  
  746. EXTERN text_pointer text_ptr,txt_dptr;
  747.  
  748.  
  749. EXTERN long max_toks;
  750.  
  751. EXTERN eight_bits HUGE*tok_mem;
  752.  
  753. EXTERN eight_bits HUGE*tok_m_end;
  754.  
  755. EXTERN long max_dtoks;
  756.  
  757. EXTERN eight_bits HUGE*tok_dmem;
  758.  
  759. EXTERN eight_bits HUGE*tokd_end;
  760.  
  761. EXTERN eight_bits HUGE*tok_ptr,HUGE*tok_dptr;
  762.  
  763. EXTERN eight_bits HUGE*mx_tok_ptr,HUGE*mx_dtok_ptr;
  764.  
  765.  
  766. EXTERN text_pointer macro_text;
  767. #line 1019 "./ftangle.web"
  768.  
  769.  
  770. /* :77 *//* 85: */
  771. #line 1117 "./ftangle.web"
  772.  
  773.  
  774. EXTERN text_pointer last_unnamed;
  775.  
  776.  
  777. /* :85 *//* 89: */
  778. #line 80 "./stacks.hweb"
  779.  
  780.  
  781. EXTERN output_state cur_state;
  782.  
  783.  
  784. EXTERN long stck_size;
  785.  
  786. EXTERN output_state HUGE*stack;
  787.  
  788. EXTERN stack_pointer stck_end;
  789.  
  790. EXTERN stack_pointer stck_ptr;
  791.  
  792. #line 1143 "./ftangle.web"
  793.  
  794. /* :89 *//* 94: */
  795. #line 1266 "./ftangle.web"
  796.  
  797.  
  798.  
  799.  
  800.  
  801. #undef begin_format_stmt
  802. #define begin_format_stmt (eight_bits)'\14'
  803.  
  804. #undef end_format_stmt
  805. #define end_format_stmt (eight_bits)'\15'
  806.  
  807. EXTERN long cur_val;
  808.  
  809.  
  810.  
  811.  
  812. /* :94 *//* 98: */
  813. #line 1358 "./ftangle.web"
  814.  
  815.  
  816. EXTERN eight_bits sent;
  817.  
  818. /* :98 *//* 103: */
  819. #line 1510 "./ftangle.web"
  820.  
  821.  
  822. IN_RATFOR sixteen_bits id_function,id_program,id_subroutine;
  823.  
  824. /* :103 *//* 105: */
  825. #line 1535 "./ftangle.web"
  826.  
  827.  
  828. EXTERN sixteen_bits cur_mod_no SET(0);
  829.  
  830. /* :105 *//* 113: */
  831. #line 1689 "./ftangle.web"
  832.  
  833.  
  834. EXTERN OUTPUT_STATE out_state;
  835.  
  836. EXTERN boolean protect;
  837.  
  838. EXTERN boolean copying_macros SET(NO);
  839.  
  840. EXTERN boolean in_cdir SET(NO);
  841.  
  842.  
  843. /* :113 *//* 129: */
  844. #line 2221 "./ftangle.web"
  845.  
  846.  
  847. EXTERN TRUNC sh;
  848.  
  849. /* :129 *//* 135: */
  850. #line 2403 "./ftangle.web"
  851.  
  852.  
  853. EXTERN boolean mac_protected SET(NO);
  854.  
  855. EXTERN boolean send_rp SET(NO);
  856.  
  857.  
  858.  
  859. EXTERN boolean in_version SET(NO);
  860.  
  861. EXTERN T_META*pmeta;
  862.  
  863. /* :135 *//* 146: */
  864. #line 2830 "./ftangle.web"
  865.  
  866.  
  867. EXTERN OPEN_FILE HUGE*open_file,HUGE*open_file_end,HUGE*last_file;
  868. EXTERN BUF_SIZE num_files;
  869.  
  870.  
  871. /* :146 *//* 176: */
  872. #line 3707 "./ftangle.web"
  873.  
  874.  
  875. EXTERN LINE_NUMBER nearest_line SET(0);
  876.  
  877. /* :176 *//* 182: */
  878. #line 3813 "./ftangle.web"
  879.  
  880.  
  881. IN_STYLE eight_bits ccode[128];
  882.  
  883.  
  884. /* :182 *//* 189: */
  885. #line 4163 "./ftangle.web"
  886.  
  887.  
  888. EXTERN boolean comment_continues SET(NO);
  889.  
  890.  
  891. /* :189 *//* 192: */
  892. #line 4237 "./ftangle.web"
  893.  
  894.  
  895. EXTERN name_pointer cur_module SET(NULL);
  896. EXTERN ASCII c;
  897. EXTERN boolean strt_cmnt;
  898. EXTERN boolean strt_point_cmnt;
  899. EXTERN boolean suppress_newline;
  900.  
  901. EXTERN boolean eat_blank_lines;
  902.  
  903. EXTERN boolean no_expand SET(NO);
  904.  
  905.  
  906. /* :192 *//* 204: */
  907. #line 4749 "./ftangle.web"
  908.  
  909.  
  910. EXTERN boolean starts_with_0,hex_constant,bin_constant,floating_constant;
  911.  
  912. /* :204 *//* 222: */
  913. #line 5535 "./ftangle.web"
  914.  
  915.  
  916. EXTERN text_pointer cur_text;
  917.  
  918.  
  919. EXTERN eight_bits next_control;
  920.  
  921. /* :222 *//* 225: */
  922. #line 5696 "./ftangle.web"
  923.  
  924.  
  925. EXTERN boolean breakpoints;
  926.  
  927. /* :225 *//* 239: */
  928. #line 6044 "./ftangle.web"
  929.  
  930.  
  931. EXTERN int n_unique SET(0);
  932. EXTERN boolean deferred_macro SET(NO);
  933.  
  934. /* :239 *//* 265: */
  935. #line 6694 "./ftangle.web"
  936.  
  937.  
  938. EXTERN boolean is_WEB_macro SET(NO);
  939. EXTERN boolean scanning_defn;
  940.  
  941. EXTERN boolean scanning_TeX;
  942.  
  943. EXTERN boolean nuweb_mode1;
  944.  
  945.  
  946. EXTERN int mlevel SET(0);
  947.  
  948.  
  949. /* :265 *//* 267: */
  950. #line 6743 "./ftangle.web"
  951.  
  952.  
  953. EXTERN boolean found_else SET(NO);
  954.  
  955. /* :267 *//* 293: */
  956. #line 7703 "./ftangle.web"
  957.  
  958.  
  959. EXTERN sixteen_bits num_distinct_modules SET(1);
  960.  
  961. EXTERN sixteen_bits num_modules;
  962.  
  963. /* :293 *//* 299: */
  964. #line 7796 "./ftangle.web"
  965.  
  966.  
  967. #if SMALL_MEMORY
  968. #define MSG_BUF_SIZE 5000
  969. #else
  970. #define MSG_BUF_SIZE 50000L
  971. #endif
  972.  
  973. /* :299 */
  974. #line 29 "./ftangle.web"
  975.  
  976.  
  977.  
  978.  
  979. #if(part == 0 || part == 1)
  980. /* 2: */
  981. #line 47 "./ftangle.web"
  982.  
  983.  
  984. int main FCN((ac,av))
  985. int ac C0("Number of arguments.")
  986. outer_char**av C1("Argument list.")
  987. {
  988. ini_timer();
  989.  
  990.  
  991.  
  992. argc= ac;argv= av;
  993.  
  994. ini_program(tangle);
  995.  
  996.  
  997. /* 3: */
  998. #line 72 "./ftangle.web"
  999.  
  1000. {
  1001. /* 147: */
  1002. #line 2838 "./ftangle.web"
  1003.  
  1004. {
  1005. ALLOC(OPEN_FILE,open_file,"nf",num_files,0);
  1006. last_file= open_file;
  1007. open_file_end= open_file+num_files;
  1008. }
  1009.  
  1010. /* :147 */
  1011. #line 74 "./ftangle.web"
  1012.  
  1013.  
  1014. common_init();
  1015.  
  1016. /* 41: */
  1017. #line 117 "./ftangle.web"
  1018.  
  1019.  
  1020. ALLOC(outer_char,last_char,"lx",max_expr_chars,0);
  1021. last_end= last_char+max_expr_chars;
  1022. plast_char= last_char;
  1023.  
  1024. /* :41 *//* 44: */
  1025. #line 157 "./ftangle.web"
  1026.  
  1027.  
  1028.  
  1029. ALLOC(outer_char,C_buffer,"cb",C_buf_size,0);
  1030. pC_end= C_buffer+C_buf_size-1;
  1031.  
  1032. pC_buffer= C_buffer;
  1033.  
  1034.  
  1035. #if FANCY_SPLIT
  1036. /* 47: */
  1037. #line 207 "./ftangle.web"
  1038.  
  1039. {
  1040. split_pos= C_buffer;
  1041. }
  1042.  
  1043. /* :47 */
  1044. #line 165 "./ftangle.web"
  1045.  
  1046. #endif 
  1047.  
  1048.  
  1049. ALLOC(outer_char,X_buffer,"xb",X_buf_size,0);
  1050. pX_end= X_buffer+X_buf_size;
  1051. pX_buffer= X_buffer;
  1052.  
  1053.  
  1054. /* :44 *//* 71: */
  1055. #line 891 "./ftangle.web"
  1056.  
  1057. {
  1058. pai->ilevel= 0;
  1059. pai->text_buf[0]= pai->last_buf= calloc(1,sizeof(TEXT_BUF));
  1060. }
  1061.  
  1062. /* :71 *//* 78: */
  1063. #line 1022 "./ftangle.web"
  1064.  
  1065.  
  1066. alloc_Rat();
  1067.  
  1068.  
  1069. ALLOC(text,text_info,"x",max_texts,0);
  1070. text_end= text_info+max_texts-1;
  1071.  
  1072. ALLOC(text,txt_dinfo,"dx",dtexts_max,0);
  1073. textd_end= txt_dinfo+dtexts_max-1;
  1074.  
  1075. ALLOC(eight_bits,tok_mem,"tt",max_toks,0);
  1076. tok_m_end= tok_mem+max_toks-1;
  1077.  
  1078. ALLOC(eight_bits,tok_dmem,"dt",max_dtoks,0);
  1079. tokd_end= tok_dmem+max_dtoks-1;
  1080.  
  1081. /* :78 *//* 90: */
  1082. #line 1145 "./ftangle.web"
  1083.  
  1084.  
  1085. ALLOC(output_state,stack,"kt",stck_size,1);
  1086. stck_end= stack+stck_size;
  1087.  
  1088.  
  1089. /* :90 *//* 148: */
  1090. #line 2848 "./ftangle.web"
  1091.  
  1092. {
  1093. BUF_SIZE cur_num= last_file-open_file;
  1094.  
  1095.  
  1096.  
  1097. alloc((outer_char*)"nf",(BUF_SIZE HUGE*)&num_files,
  1098. sizeof(*open_file),-1);
  1099.  
  1100.  
  1101. open_file= (OPEN_FILE*)REALLOC(open_file,num_files*sizeof(OPEN_FILE));
  1102. last_file= open_file+cur_num;
  1103. open_file_end= open_file+num_files;
  1104. }
  1105.  
  1106. /* :148 */
  1107. #line 76 "./ftangle.web"
  1108.  
  1109.  
  1110. /* 79: */
  1111. #line 1042 "./ftangle.web"
  1112.  
  1113.  
  1114. CAST(text_pointer,text_info)->tok_start= tok_ptr= tok_mem;
  1115. CAST(text_pointer,txt_dinfo)->tok_start= tok_dptr= tok_dmem;
  1116.  
  1117.  
  1118. text_ptr= text_info+1;text_ptr->tok_start= tok_mem;
  1119. txt_dptr= txt_dinfo+1;txt_dptr->tok_start= tok_dmem;
  1120.  
  1121. /* :79 *//* 81: */
  1122. #line 1056 "./ftangle.web"
  1123.  
  1124.  
  1125. CAST(name_pointer,name_dir)->equiv= (EQUIV)text_info;
  1126.  
  1127. /* :81 *//* 86: */
  1128. #line 1123 "./ftangle.web"
  1129.  
  1130.  
  1131. last_unnamed= text_info;
  1132.  
  1133. CAST(text_pointer,text_info)->text_link= 0;
  1134.  
  1135.  
  1136. /* :86 *//* 183: */
  1137. #line 3822 "./ftangle.web"
  1138.  
  1139.  
  1140. zero_ccodes();
  1141. ccode['/']= begin_vcmnt;
  1142.  
  1143.  
  1144.  
  1145. /* 184: */
  1146. #line 3841 "./ftangle.web"
  1147.  
  1148. {
  1149.  
  1150. ini_ccode((outer_char*)"new_module",(outer_char*)" \t*",new_module);
  1151.  
  1152.  
  1153. ini_ccode((outer_char*)"begin_code",(outer_char*)"aA",begin_code);
  1154.  
  1155. ini_ccode((outer_char*)"module_name",(outer_char*)"<",module_name);
  1156.  
  1157.  
  1158. ini_ccode((outer_char*)"definition",(outer_char*)"dD",definition);
  1159.  
  1160. ini_ccode((outer_char*)"undefinition",(outer_char*)"uU",undefinition);
  1161.  
  1162. ini_ccode((outer_char*)"WEB_definition",(outer_char*)"mM",WEB_definition);
  1163.  
  1164. ini_ccode((outer_char*)"formatt",(outer_char*)"fF",formatt);
  1165.  
  1166.  
  1167. ini_ccode((outer_char*)"ascii_constant",(outer_char*)"'\"",ascii_constant);
  1168.  
  1169. ini_ccode((outer_char*)"verbatim",(outer_char*)"=",verbatim);
  1170.  
  1171.  
  1172. ini_ccode((outer_char*)"TeX_string",(outer_char*)"tT",TeX_string);
  1173.  
  1174.  
  1175. ini_ccode((outer_char*)"L_switch",(outer_char*)"L",L_switch);
  1176.  
  1177. ini_ccode((outer_char*)"begin_C",(outer_char*)"cC",begin_C);
  1178.  
  1179. ini_ccode((outer_char*)"begin_RATFOR",(outer_char*)"rR",begin_RATFOR);
  1180.  
  1181. ini_ccode((outer_char*)"begin_FORTRAN",(outer_char*)"n",begin_FORTRAN);
  1182.  
  1183. ini_ccode((outer_char*)"begin_nuweb",(outer_char*)"N",begin_nuweb);
  1184.  
  1185.  
  1186. ini_ccode((outer_char*)"join",(outer_char*)"&",join);
  1187.  
  1188.  
  1189. ini_ccode((outer_char*)"Compiler_Directive",(outer_char*)"?",Compiler_Directive);
  1190.  
  1191. ini_ccode((outer_char*)"invisible_cmnt",(outer_char*)"%",invisible_cmnt);
  1192.  
  1193.  
  1194.  
  1195. ini_ccode((outer_char*)"xref_roman",(outer_char*)"^",xref_roman);
  1196.  
  1197. ini_ccode((outer_char*)"xref_typewriter",(outer_char*)".",xref_typewriter);
  1198.  
  1199. ini_ccode((outer_char*)"xref_wildcard",(outer_char*)"9",xref_wildcard);
  1200.  
  1201.  
  1202. ini_ccode((outer_char*)"big_line_break",(outer_char*)"#",big_line_break);
  1203.  
  1204.  
  1205. ini_ccode((outer_char*)"begin_meta",(outer_char*)"(",begin_meta);
  1206.  
  1207. ini_ccode((outer_char*)"end_meta",(outer_char*)")",end_meta);
  1208.  
  1209.  
  1210. ini_ccode((outer_char*)"limbo_text",(outer_char*)"l",limbo_text);
  1211.  
  1212. ini_ccode((outer_char*)"op_def",(outer_char*)"vV",op_def);
  1213.  
  1214. ini_ccode((outer_char*)"macro_def",(outer_char*)"wW",macro_def);
  1215.  
  1216.  
  1217. ini_ccode((outer_char*)"begin_bp",(outer_char*)"{",begin_bp);
  1218.  
  1219. ini_ccode((outer_char*)"insert_bp",(outer_char*)"}bB",insert_bp);
  1220.  
  1221.  
  1222. ini_ccode((outer_char*)"no_mac_expand",(outer_char*)"!",no_mac_expand);
  1223.  
  1224.  
  1225. ini_ccode((outer_char*)"new_output_file",(outer_char*)"oO",new_output_file);
  1226.  
  1227.  
  1228. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"\001",USED_BY_OTHER);
  1229.  
  1230.  
  1231. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"\\",USED_BY_OTHER);
  1232.  
  1233. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"_",USED_BY_OTHER);
  1234.  
  1235. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"[",USED_BY_OTHER);
  1236.  
  1237. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"`]",USED_BY_OTHER);
  1238.  
  1239. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"$",USED_BY_OTHER);
  1240. {
  1241. char temp[3];
  1242.  
  1243. sprintf(temp,";%c",XCHR(interior_semi));
  1244.  
  1245. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)temp,USED_BY_OTHER);
  1246. }
  1247.  
  1248. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"e",USED_BY_OTHER);
  1249.  
  1250. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)":",USED_BY_OTHER);
  1251.  
  1252. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)",",USED_BY_OTHER);
  1253.  
  1254. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"|",USED_BY_OTHER);
  1255.  
  1256. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"+",USED_BY_OTHER);
  1257.  
  1258. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"-",USED_BY_OTHER);
  1259.  
  1260. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"~",USED_BY_OTHER);
  1261. #if(DEBUG)
  1262.  
  1263. ini_ccode((outer_char*)"USED_BY_OTHER",(outer_char*)"012",USED_BY_OTHER);
  1264. #endif 
  1265. }
  1266.  
  1267. /* :184 */
  1268. #line 3829 "./ftangle.web"
  1269.  
  1270. /* 185: */
  1271. #line 3916 "./ftangle.web"
  1272.  
  1273. {
  1274. reassign(xref_roman,control_text);
  1275. reassign(xref_typewriter,control_text);
  1276. reassign(xref_wildcard,control_text);
  1277. reassign(TeX_string,control_text);
  1278.  
  1279. reassign(verbatim,stringg);
  1280. }
  1281.  
  1282. /* :185 */
  1283. #line 3830 "./ftangle.web"
  1284.  
  1285. prn_codes();
  1286.  
  1287. /* :183 *//* 215: */
  1288. #line 5300 "./ftangle.web"
  1289.  
  1290.  
  1291. mod_text[0]= ' ';
  1292.  
  1293. /* :215 */
  1294. #line 77 "./ftangle.web"
  1295.  
  1296. ini_internal_fcns();
  1297.  
  1298. ini_Ratfor();
  1299.  
  1300. }
  1301.  
  1302. #line 1 "./typedefs.hweb"
  1303.  
  1304.  
  1305. #line 8 "./formats.hweb"
  1306.  
  1307. /* :3 */
  1308. #line 61 "./ftangle.web"
  1309. ;
  1310.  
  1311. phase1();
  1312.  
  1313. phase2();
  1314.  
  1315.  
  1316. if(statistics)see_tstatistics();
  1317.  
  1318.  
  1319. return wrap_up();
  1320.  
  1321. }
  1322.  
  1323. /* :2 *//* 42: */
  1324. #line 124 "./ftangle.web"
  1325.  
  1326.  
  1327. SRTN rst_last(VOID)
  1328. RST_LAST_EXPR
  1329.  
  1330. /* :42 *//* 45: */
  1331. #line 176 "./ftangle.web"
  1332.  
  1333.  
  1334. SRTN split_C(VOID)
  1335. {
  1336. #if FANCY_SPLIT
  1337. /* 46: */
  1338. #line 191 "./ftangle.web"
  1339.  
  1340. {
  1341.  
  1342. if(in_string&&split_pos==C_buffer)
  1343. {
  1344. /* 48: */
  1345. #line 217 "./ftangle.web"
  1346.  
  1347. {
  1348. if(!meta_mode)
  1349. *pC_buffer++= '\\';
  1350.  
  1351.  
  1352. C_out(C_buffer,pC_buffer,&pC_buffer,OC("\n"),'\0',NO_INDENT);
  1353.  
  1354.  
  1355. }
  1356.  
  1357. /* :48 */
  1358. #line 196 "./ftangle.web"
  1359.  
  1360. return;
  1361. }
  1362.  
  1363. *pC_buffer= '\0';
  1364. split0_C(split_pos);
  1365. }
  1366.  
  1367. /* :46 */
  1368. #line 181 "./ftangle.web"
  1369.  
  1370. #else
  1371. /* 48: */
  1372. #line 217 "./ftangle.web"
  1373.  
  1374. {
  1375. if(!meta_mode)
  1376. *pC_buffer++= '\\';
  1377.  
  1378.  
  1379. C_out(C_buffer,pC_buffer,&pC_buffer,OC("\n"),'\0',NO_INDENT);
  1380.  
  1381.  
  1382. }
  1383.  
  1384. /* :48 */
  1385. #line 183 "./ftangle.web"
  1386.  
  1387. #endif 
  1388. }
  1389.  
  1390. /* :45 *//* 49: */
  1391. #line 227 "./ftangle.web"
  1392.  
  1393.  
  1394. #if FANCY_SPLIT
  1395.  
  1396. SRTN split0_C FCN((p))
  1397. outer_char*p C1("Position for the split")
  1398. {
  1399. int indent;
  1400.  
  1401.  
  1402. if(p==C_buffer)
  1403. {
  1404. *pC_buffer++= '\\';
  1405. p= pC_buffer;
  1406. indent= NO_INDENT;
  1407. }
  1408. else indent= INDENT;
  1409.  
  1410. C_out(C_buffer,p,&pC_buffer,OC("\n"),'\0',indent);
  1411.  
  1412.  
  1413.  
  1414. /* :49 *//* 49: */
  1415. #line 252 "./ftangle.web"
  1416. }
  1417. #endif 
  1418.  
  1419.  
  1420. /* :49 *//* 50: */
  1421. #line 256 "./ftangle.web"
  1422.  
  1423.  
  1424. SRTN C_out FCN((C_buffer,p,ppC_buffer,end_str,begin_char,indent))
  1425. outer_char HUGE*C_buffer C0("Buffer we're working with")
  1426. outer_char HUGE*p C0("End (next available pos)")
  1427. outer_char HUGE*HUGE*ppC_buffer C0("")
  1428. outer_char*end_str C0("")
  1429. outer_char begin_char C0("")
  1430. int indent C1("Should the next buffer be indented?")
  1431. {
  1432. int n= *ppC_buffer-p;
  1433.  
  1434. if(p>C_buffer)
  1435. WRITE1(C_buffer,p-C_buffer)
  1436.  
  1437.  
  1438. if(*end_str)WRITE1(end_str,STRLEN(end_str))
  1439.  
  1440.  
  1441. *ppC_buffer= C_buffer;
  1442. if(begin_char)*(*ppC_buffer)++= begin_char;
  1443.  
  1444.  
  1445. while(indent--)
  1446. *(*ppC_buffer)++= ' ';
  1447.  
  1448.  
  1449. if(n)
  1450. {
  1451. STRNCPY(*ppC_buffer,p,n);
  1452. *ppC_buffer+= n;
  1453.  
  1454. }
  1455.  
  1456. flush0();
  1457.  
  1458. /* 47: */
  1459. #line 207 "./ftangle.web"
  1460.  
  1461. {
  1462. split_pos= C_buffer;
  1463. }
  1464.  
  1465. /* :47 */
  1466. #line 290 "./ftangle.web"
  1467.  
  1468. }
  1469.  
  1470. /* :50 *//* 51: */
  1471. #line 304 "./ftangle.web"
  1472.  
  1473.  
  1474. SRTN C_putc FCN((c))
  1475. outer_char c C1("Character to be sent to output.")
  1476. {
  1477. CHECK_OPEN;
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483. if(compound_assignments&&FORTRAN_LIKE(language))
  1484. if(plast_char>=last_end)last_xpr_overflowed= YES;
  1485. else*plast_char++= c;
  1486.  
  1487. if(dbg_output)printf("c = '%c' (0x%x)\n",c,c);
  1488.  
  1489. if(at_beginning&&meta_mode&&!nuweb_mode&&in_string)
  1490. {
  1491. at_beginning= NO;
  1492.  
  1493. out_pos= 0;
  1494.  
  1495. pmeta= &t_style.meta[lan_num(language)];
  1496. OUT_STR(in_version?pmeta->hdr.prefx:pmeta->msg.prefx);
  1497. }
  1498.  
  1499. switch(language)
  1500. {
  1501. case RATFOR:
  1502. case RATFOR_90:
  1503. if(!Ratfor77)
  1504. {
  1505. RAT_out(c);
  1506.  
  1507. break;
  1508. }
  1509.  
  1510. case FORTRAN:
  1511. case FORTRAN_90:
  1512. if(reverse_indices&&!in_string)
  1513. /* 74: */
  1514. #line 963 "./ftangle.web"
  1515.  
  1516. {
  1517. switch(c)
  1518. {
  1519. case '(':
  1520. if(rparen)
  1521. {
  1522.  
  1523. pai->ilevel++;
  1524.  
  1525. /* 75: */
  1526. #line 1012 "./ftangle.web"
  1527.  
  1528. {
  1529. if(!CUR_BUF)
  1530. CUR_BUF= GET_MEM("CUR_BUF",1,TEXT_BUF);
  1531. }
  1532.  
  1533. #line 8 "./texts.hweb"
  1534.  
  1535. /* :75 */
  1536. #line 973 "./ftangle.web"
  1537.  
  1538.  
  1539. rparen= NO;
  1540. }
  1541. else
  1542. {
  1543.  
  1544. store(CUR_BUF,'(');
  1545.  
  1546. (pai+1)->last_buf= CUR_BUF;
  1547. pai++;
  1548. pai->ilevel= 0;
  1549.  
  1550. /* 75: */
  1551. #line 1012 "./ftangle.web"
  1552.  
  1553. {
  1554. if(!CUR_BUF)
  1555. CUR_BUF= GET_MEM("CUR_BUF",1,TEXT_BUF);
  1556. }
  1557.  
  1558. #line 8 "./texts.hweb"
  1559.  
  1560. /* :75 */
  1561. #line 986 "./ftangle.web"
  1562.  
  1563. }
  1564.  
  1565. break;
  1566.  
  1567. case ')':
  1568. if(!rparen)
  1569. rparen= YES;
  1570. else
  1571. unwind();
  1572.  
  1573. break;
  1574.  
  1575. default:
  1576. if(rparen)
  1577. {
  1578. unwind();
  1579. rparen= NO;
  1580. }
  1581.  
  1582. store(CUR_BUF,c);
  1583. break;
  1584. }
  1585. }
  1586.  
  1587. /* :74 */
  1588. #line 342 "./ftangle.web"
  1589.  
  1590. else
  1591. buffer_out(c);
  1592.  
  1593. break;
  1594.  
  1595. case LITERAL:
  1596. case TEX:
  1597. /* 53: */
  1598. #line 383 "./ftangle.web"
  1599.  
  1600. {
  1601. *pX_buffer++= c;
  1602.  
  1603. if(c=='\n')
  1604. C_out(X_buffer,pX_buffer,&pX_buffer,OC(""),
  1605. (outer_char)CHOICE(meta_mode&&language==TEX,'%','\0'),NO_INDENT);
  1606. else if(pX_buffer==pX_end)
  1607. split_X();
  1608. }
  1609.  
  1610. /* :53 */
  1611. #line 350 "./ftangle.web"
  1612.  
  1613. break;
  1614.  
  1615. case C:
  1616. case C_PLUS_PLUS:
  1617. default:
  1618. #ifndef mac 
  1619.  
  1620. /* 52: */
  1621. #line 371 "./ftangle.web"
  1622.  
  1623. {
  1624. *pC_buffer++= c;
  1625.  
  1626.  
  1627. if(c=='\n')
  1628. C_out(C_buffer,pC_buffer,&pC_buffer,OC(""),'\0',NO_INDENT);
  1629.  
  1630.  
  1631. else if(pC_buffer==pC_end)
  1632. split_C();
  1633. }
  1634.  
  1635. /* :52 */
  1636. #line 357 "./ftangle.web"
  1637.  
  1638.  
  1639.  
  1640. #else
  1641. if(c=='\n')flush0();
  1642.  
  1643. PUTC(c);
  1644. #endif 
  1645. break;
  1646. }
  1647.  
  1648. at_beginning= BOOLEAN(c=='\n');
  1649. }
  1650.  
  1651. /* :51 *//* 54: */
  1652. #line 395 "./ftangle.web"
  1653.  
  1654.  
  1655. SRTN split_X(VOID)
  1656. {
  1657. outer_char HUGE*p= pX_buffer;
  1658.  
  1659. WHILE()
  1660. {
  1661. if(p==X_buffer)/* 55: */
  1662. #line 426 "./ftangle.web"
  1663.  
  1664. {
  1665.  
  1666. err0_print(ERR_T,OC("Line had to be broken"),0);
  1667. C_out(X_buffer,pX_buffer,&pX_buffer,
  1668. language==TEX?OC("%\n"):OC("\n"),
  1669. '\0',NO_INDENT);
  1670. return;
  1671. }
  1672.  
  1673. /* :55 */
  1674. #line 404 "./ftangle.web"
  1675.  
  1676.  
  1677. if(*p==' ')
  1678. {
  1679. C_out(X_buffer,p+1,&pX_buffer,OC("\n"),
  1680. (outer_char)CHOICE(meta_mode&&language==TEX,'%','\0'),
  1681. NO_INDENT);
  1682. return;
  1683. }
  1684.  
  1685. if(*(p--)=='\\'&&*p!='\\')
  1686. {
  1687. C_out(X_buffer,p+1,&pX_buffer,
  1688. language==TEX?OC("%\n"):OC("\n"),
  1689. (outer_char)CHOICE(meta_mode&&language==TEX,'%','\0'),
  1690. NO_INDENT);
  1691. return;
  1692. }
  1693. }
  1694. }
  1695.  
  1696. /* :54 *//* 56: */
  1697. #line 445 "./ftangle.web"
  1698.  
  1699.  
  1700. static outer_char last_out= '\0';
  1701.  
  1702.  
  1703.  
  1704. static boolean is_label= NO;
  1705. static boolean should_continue= NO;
  1706. static continuation_line= NOT_CONTINUATION;
  1707.  
  1708. static STMT_LBL stmt_num[50];
  1709.  
  1710. static short do_level= 0;
  1711.  
  1712. /* :56 *//* 58: */
  1713. #line 476 "./ftangle.web"
  1714.  
  1715.  
  1716. SRTN C_sprintf FCN(VA_ALIST((fmt,n VA_ARGS)))
  1717. VA_DCL(
  1718. CONST outer_char fmt[]C0("String to be printed.")
  1719. int n C2("Number of arguments to follow."))
  1720. {
  1721. VA_LIST(arg_ptr)
  1722. outer_char temp[N_STRBUF];
  1723. outer_char HUGE*t;
  1724.  
  1725. VA_START(arg_ptr,n);
  1726.  
  1727. #if(NUM_VA_ARGS==1)
  1728. {
  1729. char*fmt0= va_arg(arg_ptr,char*);
  1730.  
  1731. va_arg(arg_ptr,int);
  1732. vsprintf((char*)(char*)temp,fmt0,arg_ptr);
  1733. }
  1734. #else
  1735. vsprintf((char*)temp,(CONST char*)fmt,arg_ptr);
  1736. #endif
  1737.  
  1738. va_end(arg_ptr);
  1739.  
  1740. for(t= temp;*t;++t)C_putc(*t);
  1741. }
  1742.  
  1743. /* :58 *//* 59: */
  1744. #line 499 "./ftangle.web"
  1745.  
  1746.  
  1747. SRTN RAT_out FCN((c))
  1748. outer_char c C1("Output this character to \Ratfor.")
  1749. {
  1750. switch(c)
  1751. {
  1752. case end_meta:
  1753. send_new_line;
  1754. return;
  1755.  
  1756. case begin_meta:
  1757. if(meta_mode)return;
  1758.  
  1759. meta_mode= YES;
  1760.  
  1761.  
  1762. case '\n':
  1763. send_new_line;
  1764. if(meta_mode)PUTC('#');
  1765.  
  1766. return;
  1767.  
  1768. default:
  1769. PUTC(c);
  1770. return;
  1771. }
  1772. }
  1773.  
  1774. /* :59 *//* 61: */
  1775. #line 539 "./ftangle.web"
  1776.  
  1777.  
  1778. SRTN buffer_out FCN((c))
  1779. outer_char c C1("Output this character to the \Fortran\ buffer.")
  1780. {
  1781. outer_char*px;
  1782.  
  1783.  
  1784. /* 62: */
  1785. #line 567 "./ftangle.web"
  1786.  
  1787.  
  1788. switch(c)
  1789. {
  1790. case '\0':if(!in_string)return;
  1791.  
  1792.  
  1793.  
  1794.  
  1795. if(in_string&&started_vcmnt)
  1796. {
  1797. NEWLINE_TO_FORTRAN(should_continue);
  1798. started_vcmnt= NO;
  1799. return;
  1800. }
  1801. break;
  1802.  
  1803. case '{':
  1804. case '}':
  1805.  
  1806. if(!in_string&&xpn_Ratfor)return;
  1807. break;
  1808.  
  1809.  
  1810. case ' ':
  1811. if(out_at_beginning)return;
  1812. break;
  1813.  
  1814. /* 63: */
  1815. #line 672 "./ftangle.web"
  1816.  
  1817.  
  1818. case '\n':
  1819. if(in_cdir)
  1820. {
  1821. out_pos= 0;
  1822. }
  1823. else if(!in_string||(in_string&&started_vcmnt))
  1824. {
  1825. NEWLINE_TO_FORTRAN(NOT_CONTINUATION);
  1826.  
  1827. if(in_string&&started_vcmnt)/* 66: */
  1828. #line 748 "./ftangle.web"
  1829.  
  1830. {
  1831. int k;
  1832.  
  1833. if(!meta_mode)
  1834. {
  1835. outp_buf[0]= begin_comment_char[lan_num(out_language)];
  1836.  
  1837. for(out_pos= 1,k= spcs_after_cmnt;k;k--)
  1838. outp_buf[out_pos++]= ' ';
  1839. }
  1840.  
  1841. nbuf_length= MAX(t_style.output_line_length,80);
  1842. out_at_beginning= NO;
  1843.  
  1844. }
  1845.  
  1846. /* :66 */
  1847. #line 683 "./ftangle.web"
  1848.  
  1849. }
  1850. else if(!started_vcmnt)
  1851. {
  1852.  
  1853. should_continue= BOOLEAN(out_pos>rst_pos);
  1854.  
  1855.  
  1856. if(should_continue){NEWLINE_TO_FORTRAN(NOT_CONTINUATION);}
  1857. should_continue= BOOLEAN((!free_Fortran)&&should_continue);
  1858. /* 66: */
  1859. #line 748 "./ftangle.web"
  1860.  
  1861. {
  1862. int k;
  1863.  
  1864. if(!meta_mode)
  1865. {
  1866. outp_buf[0]= begin_comment_char[lan_num(out_language)];
  1867.  
  1868. for(out_pos= 1,k= spcs_after_cmnt;k;k--)
  1869. outp_buf[out_pos++]= ' ';
  1870. }
  1871.  
  1872. nbuf_length= MAX(t_style.output_line_length,80);
  1873. out_at_beginning= NO;
  1874.  
  1875. }
  1876.  
  1877. /* :66 */
  1878. #line 693 "./ftangle.web"
  1879. ;
  1880. started_vcmnt= YES;
  1881. }
  1882.  
  1883. return;
  1884.  
  1885.  
  1886. /* :63 */
  1887. #line 594 "./ftangle.web"
  1888.  
  1889.  
  1890.  
  1891.  
  1892. case ';':
  1893. if(!(in_string||in_constant))
  1894. {
  1895. NEWLINE_TO_FORTRAN(NOT_CONTINUATION);
  1896. return;
  1897. }
  1898. break;
  1899.  
  1900. case interior_semi:
  1901. case semi:
  1902. c= ';';break;
  1903.  
  1904.  
  1905. case begin_meta:
  1906. if(!meta_mode&&last_out!='\n')flush_out(YES);
  1907. meta_mode= YES;
  1908. if(in_string)
  1909. {
  1910. TO_BUFFER(top);
  1911. if(out_pos>0)flush_out(YES);
  1912. }
  1913. rst_out(NOT_CONTINUATION);
  1914. return;
  1915.  
  1916. case end_meta:
  1917. if(in_string)
  1918. {
  1919. TO_BUFFER(bottom);
  1920. if(out_pos>0)flush_out(YES);
  1921. started_vcmnt= NO;
  1922. }
  1923. else flush_out(YES);
  1924.  
  1925. rst_out(NOT_CONTINUATION);
  1926. return;
  1927. }
  1928.  
  1929.  
  1930.  
  1931. if(out_pos>=nbuf_length)
  1932. {
  1933. if(free_Fortran)outp_buf[out_pos++]= '&';
  1934.  
  1935. flush_out(YES);
  1936. rst_out(CONTINUATION);
  1937.  
  1938. if(in_string&&started_vcmnt)/* 66: */
  1939. #line 748 "./ftangle.web"
  1940.  
  1941. {
  1942. int k;
  1943.  
  1944. if(!meta_mode)
  1945. {
  1946. outp_buf[0]= begin_comment_char[lan_num(out_language)];
  1947.  
  1948. for(out_pos= 1,k= spcs_after_cmnt;k;k--)
  1949. outp_buf[out_pos++]= ' ';
  1950. }
  1951.  
  1952. nbuf_length= MAX(t_style.output_line_length,80);
  1953. out_at_beginning= NO;
  1954.  
  1955. }
  1956.  
  1957. /* :66 */
  1958. #line 643 "./ftangle.web"
  1959. ;
  1960. }
  1961.  
  1962. if(out_at_beginning)
  1963. {
  1964. out_at_beginning= NO;
  1965.  
  1966.  
  1967.  
  1968. if(!in_string)
  1969. if(isdigit(c)&&!is_label)
  1970. {
  1971. is_label= YES;
  1972. out_pos= 0;
  1973. }
  1974. else if(c=='#')
  1975. {
  1976. outp_buf[0]= (outer_char)CHOICE(free_90,
  1977. begin_comment_char[lan_num(out_language)],'*');
  1978.  
  1979.  
  1980. out_pos= 1;
  1981. return;
  1982. }
  1983. }
  1984.  
  1985. /* :62 */
  1986. #line 546 "./ftangle.web"
  1987.  
  1988.  
  1989.  
  1990. if(is_label&&!isdigit(c))
  1991. {
  1992. is_label= NO;
  1993. out_pos= 6+indent_level*INDENT_SIZE;
  1994. if(c==':'||c==' ')return;
  1995.  
  1996. }
  1997.  
  1998. /* 64: */
  1999. #line 703 "./ftangle.web"
  2000.  
  2001.  
  2002. if(number_dos&&!continuation_line&&(language==FORTRAN||
  2003. language==FORTRAN_90||R66))
  2004. {
  2005. outer_char HUGE*do_pos;
  2006.  
  2007. do_pos= outp_buf+6;
  2008.  
  2009. if(out_pos==9)
  2010. {
  2011. if(STRNCMP(do_pos,"do ",3)==0&&!isdigit(c))
  2012. {
  2013. sprintf((char*)(do_pos+= 3),"%lu ",
  2014. stmt_num[do_level++]= max_stmt++);
  2015.  
  2016. while(*do_pos++!='\0')out_pos++;
  2017. }
  2018. }
  2019. else if((out_pos==10&&STRNCMP(do_pos,"endd",4)==0)||
  2020. (out_pos==11&&STRNCMP(do_pos,"end d",5)==0))
  2021. {
  2022. if(do_level==0)
  2023. {
  2024.  
  2025. err0_print(ERR_T,OC("Too many END DOs"),0);
  2026. *outp_buf= 'C';
  2027. }
  2028. else
  2029. {
  2030. sprintf((char*)outp_buf,"%-5lu CONTINUE",
  2031. stmt_num[--do_level]);
  2032. out_pos= 14;
  2033. return;
  2034. }
  2035. }
  2036. }
  2037.  
  2038. /* :64 */
  2039. #line 556 "./ftangle.web"
  2040.  
  2041.  
  2042.  
  2043. last_out= outp_buf[out_pos++]= c;
  2044.  
  2045. return;
  2046. }
  2047.  
  2048. /* :61 *//* 67: */
  2049. #line 765 "./ftangle.web"
  2050.  
  2051.  
  2052. SRTN flush_out FCN((prn_new_line))
  2053. boolean prn_new_line C1("Do we print a newline?")
  2054. {
  2055. outp_buf[out_pos]= '\0';
  2056.  
  2057.  
  2058.  
  2059. WRITE1(outp_buf,out_pos)
  2060.  
  2061. if(prn_new_line)
  2062. {
  2063. PUTC(last_out= '\n');
  2064. flush0();
  2065. }
  2066. }
  2067.  
  2068. /* :67 *//* 68: */
  2069. #line 792 "./ftangle.web"
  2070.  
  2071.  
  2072. int rst_out FCN((continuation))
  2073. boolean continuation C1("Is line a continuation?")
  2074. {
  2075. if(!continuation)RST_LAST_EXPR
  2076.  
  2077.  
  2078.  
  2079. for(out_pos= 0;out_pos<5;++out_pos)
  2080. outp_buf[out_pos]= ' ';
  2081.  
  2082.  
  2083. outp_buf[out_pos++]= continuation?t_style.cchar:(outer_char)' ';
  2084. continuation_line= continuation;
  2085. out_at_beginning= BOOLEAN(!continuation_line);
  2086.  
  2087. nbuf_length= t_style.output_line_length;
  2088.  
  2089. if(meta_mode)
  2090. {
  2091. if(!in_string)
  2092. {
  2093. outp_buf[0]= begin_comment_char[lan_num(out_language)];
  2094. if(!xpn_Ratfor)out_pos= 1+spcs_after_cmnt;
  2095. }
  2096.  
  2097. nbuf_length= MAX(nbuf_length,80);
  2098. }
  2099.  
  2100.  
  2101.  
  2102. if(out_at_beginning&&xpn_Ratfor)blank_out(indent_level);
  2103.  
  2104. return rst_pos= out_pos;
  2105. }
  2106.  
  2107. /* :68 *//* 69: */
  2108. #line 830 "./ftangle.web"
  2109.  
  2110.  
  2111. SRTN blank_out FCN((n))
  2112. int n C1("Number of levels to indent.")
  2113. {
  2114. outer_char HUGE*p;
  2115. int i;
  2116.  
  2117. for(i= 0,p= outp_buf+out_pos;i<n*INDENT_SIZE;i++)*p++= ' ';
  2118.  
  2119. out_pos+= i;
  2120. rst_pos= out_pos;
  2121. }
  2122.  
  2123. /* :69 *//* 72: */
  2124. #line 901 "./ftangle.web"
  2125.  
  2126.  
  2127. SRTN store FCN((t,c))
  2128. TEXT_BUF HUGE*t C0("")
  2129. outer_char c C1("")
  2130. {
  2131. if(pai==paren_level||t==paren_level[0].last_buf)
  2132. {
  2133. buffer_out(c);
  2134. return;
  2135. }
  2136.  
  2137.  
  2138. if(t->start==NULL)
  2139. {
  2140. t->pos= t->start= calloc(100,1);
  2141. t->end= t->start+100;
  2142. }
  2143.  
  2144. *t->pos++= c;
  2145. }
  2146.  
  2147. /* :72 *//* 73: */
  2148. #line 927 "./ftangle.web"
  2149.  
  2150.  
  2151. SRTN unwind(VOID)
  2152. {
  2153. int i;
  2154. TEXT_BUF HUGE*t;
  2155. outer_char HUGE*s1;
  2156.  
  2157. if(pai==paren_level)
  2158. {
  2159.  
  2160. err0_print(ERR_T,OC("Missing '('"),0);
  2161. buffer_out(')');
  2162. return;
  2163. }
  2164.  
  2165. for(i= pai->ilevel;i>=0;i--)
  2166. {
  2167. t= pai->text_buf[i];
  2168.  
  2169. for(s1= t->start;s1<t->pos;s1++)
  2170. store(pai->last_buf,*s1);
  2171.  
  2172. t->pos= t->start;
  2173.  
  2174.  
  2175. if(i>0)
  2176. store(pai->last_buf,',');
  2177. }
  2178.  
  2179. store(pai->last_buf,')');
  2180. pai--;
  2181.  
  2182. }
  2183.  
  2184.  
  2185. /* :73 *//* 82: */
  2186. #line 1063 "./ftangle.web"
  2187.  
  2188.  
  2189. boolean names_match FCN((p,first,l,dummy))
  2190. name_pointer p C0("Points to the proposed match.")
  2191. CONST ASCII HUGE*first C0("Position of first character of string.")
  2192. int l C0("length of identifier.")
  2193. eight_bits dummy C1("Not used here")
  2194. {
  2195. if(length(p)!=l)return NO;
  2196. return(boolean)(!STRNCMP(first,p->byte_start,l));
  2197. }
  2198.  
  2199. /* :82 *//* 83: */
  2200. #line 1076 "./ftangle.web"
  2201.  
  2202.  
  2203. SRTN ini_node FCN((node))
  2204. CONST name_pointer node C1("")
  2205. {
  2206. node->equiv= (EQUIV)text_info;
  2207. /* 25: */
  2208. #line 189 "./typedefs.hweb"
  2209.  
  2210. {
  2211.  
  2212.  
  2213. node->mod_info= GET_MEM("mod_info",1,MOD_INFO);
  2214.  
  2215. node->mod_info->Ilk= expr;
  2216. node->mod_info->params= params;
  2217.  
  2218.  
  2219. node->Language= (boolean)language;
  2220. }
  2221.  
  2222.  
  2223. /* :25 */
  2224. #line 1082 "./ftangle.web"
  2225.  
  2226. }
  2227.  
  2228. /* :83 *//* 84: */
  2229. #line 1088 "./ftangle.web"
  2230.  
  2231.  
  2232. SRTN ini_p FCN((p,t))
  2233. name_pointer p C0("")
  2234. eight_bits t C1("")
  2235. {}
  2236.  
  2237. SRTN open_tex_file(VOID)
  2238. {}
  2239.  
  2240. /* :84 *//* 87: */
  2241. #line 1131 "./ftangle.web"
  2242.  
  2243.  
  2244. SRTN store_two_bytes FCN((x))
  2245. sixteen_bits x C1("Two-byte token to be entered into |tok_mem|.")
  2246. {
  2247. if(tok_ptr+2>tok_m_end)OVERFLW("tokens","tt");
  2248.  
  2249. *tok_ptr++= (eight_bits)(x>>8);
  2250.  
  2251. *tok_ptr++= (eight_bits)(x&0377);
  2252.  
  2253. }
  2254.  
  2255. #line 8 "./stacks.hweb"
  2256.  
  2257. /* :87 *//* 92: */
  2258. #line 1174 "./ftangle.web"
  2259.  
  2260.  
  2261. SRTN push_level FCN((p,b0,b1))
  2262. name_pointer p C0("The new replacement text.")
  2263. CONST eight_bits HUGE*b0 C0("If |p == NULL|, beginning of new \
  2264. stuff in memory.")
  2265. CONST eight_bits HUGE*b1 C1("If |p == NULL|, end of new stuff in \
  2266. memory.")
  2267. {
  2268. if(stck_ptr==stck_end)OVERFLW("stack levels","kt");
  2269.  
  2270. *stck_ptr= cur_state;
  2271.  
  2272.  
  2273.  
  2274. cur_name= p;
  2275.  
  2276. if(p!=NULL)
  2277. {
  2278. cur_repl= (text_pointer)p->equiv;
  2279.  
  2280. if(cur_repl==NULL)CONFUSION("push_level","cur_repl is NULL");
  2281.  
  2282. cur_byte= cur_repl->tok_start;
  2283. cur_end= (cur_repl+1)->tok_start;
  2284. }
  2285. else
  2286. {
  2287. cur_repl= NULL;
  2288.  
  2289. cur_byte= (eight_bits HUGE*)b0;cur_end= (eight_bits HUGE*)b1;
  2290. new_mbuf();
  2291.  
  2292. }
  2293.  
  2294.  
  2295.  
  2296.  
  2297. (stck_ptr++)->params= cur_params= cur_global_params= 
  2298. (p!=NULL)?params:params;
  2299. set_output_file(cur_language);
  2300. cur_mod= UNNAMED_MODULE;
  2301.  
  2302. }
  2303.  
  2304. /* :92 *//* 93: */
  2305. #line 1221 "./ftangle.web"
  2306.  
  2307.  
  2308. boolean pop_level(VOID)
  2309. {
  2310. if(cur_repl!=NULL&&cur_repl->text_link<module_flag)
  2311. {
  2312.  
  2313. cur_repl= cur_repl->text_link+text_info;
  2314.  
  2315. cur_byte= cur_repl->tok_start;
  2316. cur_end= (cur_repl+1)->tok_start;
  2317.  
  2318.  
  2319. if(cur_repl->module_text)
  2320. {
  2321. params= cur_params= cur_global_params;
  2322. frz_params();
  2323. set_output_file(cur_language);
  2324. }
  2325.  
  2326. return YES;
  2327. }
  2328.  
  2329. stck_ptr--;
  2330.  
  2331.  
  2332. if(stck_ptr>stack)
  2333. {
  2334. cur_state= *stck_ptr;
  2335.  
  2336. set_output_file(cur_language);
  2337. return YES;
  2338.  
  2339. }
  2340.  
  2341. return NO;
  2342.  
  2343. }
  2344.  
  2345. /* :93 *//* 95: */
  2346. #line 1285 "./ftangle.web"
  2347.  
  2348. eight_bits get_output(VOID)
  2349. {
  2350. sixteen_bits a;
  2351.  
  2352.  
  2353. restart:
  2354. if(stck_ptr==stack)return NO;
  2355.  
  2356.  
  2357. if(cur_byte==cur_end)
  2358. {
  2359. cur_val= -((long)cur_mod);
  2360.  
  2361.  
  2362.  
  2363. if(cur_val!=ignore)OUT_CHAR(module_number);
  2364.  
  2365.  
  2366. pop_level();
  2367.  
  2368. if(cur_val==ignore)goto restart;
  2369.  
  2370. return module_number;
  2371. }
  2372.  
  2373. /* 102: */
  2374. #line 1472 "./ftangle.web"
  2375.  
  2376. {
  2377. a= *cur_byte++;
  2378.  
  2379. if(TOKEN1(a))
  2380. {
  2381. /* 99: */
  2382. #line 1366 "./ftangle.web"
  2383.  
  2384. {
  2385. send_single(a);
  2386. }
  2387.  
  2388. /* :99 */
  2389. #line 1478 "./ftangle.web"
  2390. ;
  2391. return sent;
  2392. }
  2393. else
  2394. {
  2395. a= IDENTIFIER(a,*cur_byte++);
  2396.  
  2397. switch(a/MODULE_NAME)
  2398. {
  2399. case 0:
  2400. cur_val= a;
  2401. /* 104: */
  2402. #line 1517 "./ftangle.web"
  2403.  
  2404. {
  2405. IN_RATFOR boolean balanced;
  2406. IN_RATFOR ASCII cur_delim;
  2407.  
  2408. if(!balanced&&language==RATFOR&&
  2409. (a==id_function||a==id_program||a==id_subroutine))
  2410. {
  2411.  
  2412. RAT_error(ERROR,OC("Inserted missing '%c' at beginning of function"),1,XCHR(cur_delim));
  2413. cur_byte-= 2;
  2414.  
  2415. return OUT_CHAR(cur_delim);
  2416.  
  2417. }
  2418. }
  2419.  
  2420. /* :104 */
  2421. #line 1489 "./ftangle.web"
  2422.  
  2423. return OUT_CHAR(identifier);
  2424.  
  2425. case 1:
  2426. /* 109: */
  2427. #line 1590 "./ftangle.web"
  2428.  
  2429. {
  2430. name_pointer np;
  2431.  
  2432. a-= MODULE_NAME;
  2433.  
  2434. np= name_dir+a;
  2435.  
  2436. if(np->equiv!=(EQUIV)text_info)push_level(np,NULL,NULL);
  2437. else if(a!=UNNAMED_MODULE)
  2438. {
  2439. SET_COLOR(error);
  2440. printf("\n! Not present: <");prn_id(np);
  2441. err0_print(ERR_NULL,OC(">"),0);
  2442.  
  2443. SET_COLOR(ordinary);
  2444. /* 111: */
  2445. #line 1631 "./ftangle.web"
  2446.  
  2447. {
  2448. #define TEMP_LEN 300
  2449.  
  2450. eight_bits temp[TEMP_LEN],temp1[TEMP_LEN];
  2451. sixteen_bits stub;
  2452. size_t n= length(np);
  2453.  
  2454. id_first= x__to_ASCII(OC("$STUB"));
  2455. stub= ID_NUM(id_first,id_first+5);
  2456.  
  2457. STRNCPY(temp1,np->byte_start,n);
  2458. temp1[n]= '\0';
  2459.  
  2460.  
  2461. if(
  2462. nsprintf(temp,OC("%c%c%c%c%s%c%c"),7,LEFT(stub,ID0),RIGHT(stub),'(',stringg,temp1,stringg,')')>=(int)(TEMP_LEN))OVERFLW("temp","");
  2463. push_level(NULL,temp,temp+STRLEN(temp));
  2464.  
  2465. #undef TEMP_LEN
  2466. }
  2467.  
  2468. /* :111 */
  2469. #line 1605 "./ftangle.web"
  2470.  
  2471. }
  2472. }
  2473.  
  2474. /* :109 */
  2475. #line 1493 "./ftangle.web"
  2476.  
  2477. goto restart;
  2478.  
  2479. default:
  2480. cur_val= a-MODULE_NUM;
  2481. if(cur_val>UNNAMED_MODULE)cur_mod= (sixteen_bits)cur_val;
  2482.  
  2483.  
  2484. return OUT_CHAR(module_number);
  2485.  
  2486. }
  2487. }
  2488. }
  2489.  
  2490. /* :102 */
  2491. #line 1309 "./ftangle.web"
  2492.  
  2493. }
  2494.  
  2495. /* :95 *//* 96: */
  2496. #line 1314 "./ftangle.web"
  2497.  
  2498.  
  2499. eight_bits get_saved_output FCN((stck_ptr0))
  2500. stack_pointer stck_ptr0 C1("")
  2501. {
  2502. sixteen_bits a;
  2503.  
  2504. restart:
  2505. if(stck_ptr==stack||stck_ptr!=stck_ptr0)return NO;
  2506.  
  2507. if(DONE_LEVEL)
  2508. {
  2509. if(!pop_level())CONFUSION("get_saved_output",
  2510. "Shouldn't encounter top level here");
  2511. return ignore;
  2512. }
  2513.  
  2514. /* 102: */
  2515. #line 1472 "./ftangle.web"
  2516.  
  2517. {
  2518. a= *cur_byte++;
  2519.  
  2520. if(TOKEN1(a))
  2521. {
  2522. /* 99: */
  2523. #line 1366 "./ftangle.web"
  2524.  
  2525. {
  2526. send_single(a);
  2527. }
  2528.  
  2529. /* :99 */
  2530. #line 1478 "./ftangle.web"
  2531. ;
  2532. return sent;
  2533. }
  2534. else
  2535. {
  2536. a= IDENTIFIER(a,*cur_byte++);
  2537.  
  2538. switch(a/MODULE_NAME)
  2539. {
  2540. case 0:
  2541. cur_val= a;
  2542. /* 104: */
  2543. #line 1517 "./ftangle.web"
  2544.  
  2545. {
  2546. IN_RATFOR boolean balanced;
  2547. IN_RATFOR ASCII cur_delim;
  2548.  
  2549. if(!balanced&&language==RATFOR&&
  2550. (a==id_function||a==id_program||a==id_subroutine))
  2551. {
  2552.  
  2553. RAT_error(ERROR,OC("Inserted missing '%c' at beginning of function"),1,XCHR(cur_delim));
  2554. cur_byte-= 2;
  2555.  
  2556. return OUT_CHAR(cur_delim);
  2557.  
  2558. }
  2559. }
  2560.  
  2561. /* :104 */
  2562. #line 1489 "./ftangle.web"
  2563.  
  2564. return OUT_CHAR(identifier);
  2565.  
  2566. case 1:
  2567. /* 109: */
  2568. #line 1590 "./ftangle.web"
  2569.  
  2570. {
  2571. name_pointer np;
  2572.  
  2573. a-= MODULE_NAME;
  2574.  
  2575. np= name_dir+a;
  2576.  
  2577. if(np->equiv!=(EQUIV)text_info)push_level(np,NULL,NULL);
  2578. else if(a!=UNNAMED_MODULE)
  2579. {
  2580. SET_COLOR(error);
  2581. printf("\n! Not present: <");prn_id(np);
  2582. err0_print(ERR_NULL,OC(">"),0);
  2583.  
  2584. SET_COLOR(ordinary);
  2585. /* 111: */
  2586. #line 1631 "./ftangle.web"
  2587.  
  2588. {
  2589. #define TEMP_LEN 300
  2590.  
  2591. eight_bits temp[TEMP_LEN],temp1[TEMP_LEN];
  2592. sixteen_bits stub;
  2593. size_t n= length(np);
  2594.  
  2595. id_first= x__to_ASCII(OC("$STUB"));
  2596. stub= ID_NUM(id_first,id_first+5);
  2597.  
  2598. STRNCPY(temp1,np->byte_start,n);
  2599. temp1[n]= '\0';
  2600.  
  2601.  
  2602. if(
  2603. nsprintf(temp,OC("%c%c%c%c%s%c%c"),7,LEFT(stub,ID0),RIGHT(stub),'(',stringg,temp1,stringg,')')>=(int)(TEMP_LEN))OVERFLW("temp","");
  2604. push_level(NULL,temp,temp+STRLEN(temp));
  2605.  
  2606. #undef TEMP_LEN
  2607. }
  2608.  
  2609. /* :111 */
  2610. #line 1605 "./ftangle.web"
  2611.  
  2612. }
  2613. }
  2614.  
  2615. /* :109 */
  2616. #line 1493 "./ftangle.web"
  2617.  
  2618. goto restart;
  2619.  
  2620. default:
  2621. cur_val= a-MODULE_NUM;
  2622. if(cur_val>UNNAMED_MODULE)cur_mod= (sixteen_bits)cur_val;
  2623.  
  2624.  
  2625. return OUT_CHAR(module_number);
  2626.  
  2627. }
  2628. }
  2629. }
  2630.  
  2631. /* :102 */
  2632. #line 1331 "./ftangle.web"
  2633.  
  2634. }
  2635.  
  2636. /* :96 *//* 97: */
  2637. #line 1340 "./ftangle.web"
  2638.  
  2639.  
  2640. SRTN copy_out FCN((p0,p1,is_expr))
  2641. CONST eight_bits HUGE*p0 C0("Start of memory buffer.")
  2642. CONST eight_bits HUGE*p1 C0("End of memory buffer.")
  2643. boolean is_expr C1("Flag for resetting pointer to last expression.")
  2644. {
  2645. stack_pointer stck_ptr0;
  2646.  
  2647.  
  2648. if(is_expr)rst_last();
  2649.  
  2650. push_level(NULL,p0,p1);
  2651. stck_ptr0= stck_ptr;
  2652. while(get_saved_output(stck_ptr0));
  2653. }
  2654.  
  2655. /* :97 *//* 100: */
  2656. #line 1372 "./ftangle.web"
  2657.  
  2658.  
  2659. SRTN send_single FCN((a))
  2660. sixteen_bits a C1("")
  2661. {
  2662. boolean scope;
  2663.  
  2664. switch(a)
  2665. {
  2666. case begin_language:
  2667.  
  2668. switch(sent= *cur_byte++)
  2669. {
  2670. case NO_LANGUAGE:
  2671.  
  2672. scope= *cur_byte++;
  2673. a= *cur_byte++;
  2674. a= IDENTIFIER(a,*cur_byte++);
  2675. new_out(scope,a);
  2676. sent= new_output_file;
  2677. break;
  2678.  
  2679. /* 142: */
  2680. #line 2732 "./ftangle.web"
  2681.  
  2682.  
  2683. case C:opn_output_file(C);break;
  2684. case C_PLUS_PLUS:opn_output_file(C_PLUS_PLUS);break;
  2685. case RATFOR:
  2686. if(!RAT_OK("(send_single)"))
  2687. CONFUSION("output default","Ratfor command during output");
  2688. opn_output_file(RATFOR);
  2689. break;
  2690. case RATFOR_90:
  2691. if(!RAT_OK("(send_single)"))
  2692. CONFUSION("output default","Ratfor command during output");
  2693. opn_output_file(RATFOR_90);
  2694. break;
  2695. case FORTRAN:opn_output_file(FORTRAN);break;
  2696. case FORTRAN_90:opn_output_file(FORTRAN_90);break;
  2697. case TEX:opn_output_file(TEX);break;
  2698. case LITERAL:opn_output_file(LITERAL);break
  2699.  
  2700. /* :142 */
  2701. #line 1393 "./ftangle.web"
  2702. ;
  2703.  
  2704. case NUWEB_OFF:
  2705. case NUWEB_ON:
  2706. nuweb_mode= BOOLEAN(0x0F&sent);
  2707. break;
  2708.  
  2709. case no_mac_expand:
  2710. mac_protected= no_expand= YES;
  2711. break;
  2712. }
  2713. break;
  2714.  
  2715. case dot_const:
  2716. cur_val= *cur_byte++;
  2717.  
  2718. sent= OUT_CHAR(a);
  2719. break;
  2720.  
  2721. default:
  2722. sent= OUT_CHAR(a);
  2723.  
  2724. break;
  2725. }
  2726. }
  2727.  
  2728. /* :100 *//* 101: */
  2729. #line 1421 "./ftangle.web"
  2730.  
  2731.  
  2732. #define TEMP_LEN (2*MAX_FILE_NAME_LENGTH)
  2733.  
  2734. SRTN new_out FCN((global_scope,a))
  2735. boolean global_scope C0("0 for local, 1 for global")
  2736. sixteen_bits a C1("")
  2737. {
  2738. name_pointer np= name_dir+a;
  2739. CONST ASCII HUGE*end;
  2740. size_t len;
  2741. outer_char temp_from[TEMP_LEN],temp_to[TEMP_LEN];
  2742. outer_char temp[MAX_FILE_NAME_LENGTH];
  2743.  
  2744. if(global_scope)
  2745. {
  2746.  
  2747. if(
  2748. nsprintf(temp_from,OC("\n\n  (This file was continued via @O from %s.)"),1,params.OUTPUT_FILE_NAME)>=(int)(TEMP_LEN))OVERFLW("temp_from","");
  2749. }
  2750. else
  2751. {
  2752.  
  2753. if(
  2754. nsprintf(temp_from,OC(" "),0)>=(int)(TEMP_LEN))OVERFLW("temp_from","");
  2755. }
  2756.  
  2757.  
  2758. PROPER_END(end);
  2759. len= end-np->byte_start;
  2760. STRNCPY(temp,np->byte_start,len);
  2761. TERMINATE(temp,len);
  2762. to_outer((ASCII HUGE*)temp);
  2763. new_fname(¶ms.OUTPUT_FILE_NAME,temp,NULL);
  2764.  
  2765.  
  2766. if(global_scope)
  2767. {
  2768. new_fname(&global_params.OUTPUT_FILE_NAME,temp,NULL);
  2769.  
  2770. if(
  2771. nsprintf(temp_to,OC("  (Continued via @O to %s.)"),1,params.OUTPUT_FILE_NAME)>=(int)(TEMP_LEN))OVERFLW("temp_to","");
  2772. OUT_MSG(to_ASCII(temp_to),NULL);
  2773. close_out(out_file);
  2774. }
  2775. else
  2776. fflush(out_file);
  2777.  
  2778. open_out(temp_from,global_scope);
  2779. }
  2780.  
  2781. #undef TEMP_LEN
  2782.  
  2783. /* :101 *//* 107: */
  2784. #line 1548 "./ftangle.web"
  2785.  
  2786.  
  2787. SRTN i_mod_name_ FCN((n,pargs))
  2788. int n C0("")
  2789. PARGS pargs C1("")
  2790. {
  2791. int len;
  2792. name_pointer np= cur_name;
  2793. eight_bits HUGE*p;
  2794.  
  2795. CHK_ARGS("$MODULE_NAME",0);
  2796.  
  2797. if(cur_name)cur_mod_no= np-name_dir;
  2798. else cur_mod_no= 0;
  2799.  
  2800. len= cur_mod_no?length(np):STRLEN(UNNAMED_MOD);
  2801. MCHECK(len,"current module name");
  2802.  
  2803. if(cur_mod_no)
  2804. for(p= np->byte_start;p<(np+1)->byte_start;)
  2805. *mp++= *p++;
  2806. else
  2807. {
  2808. STRCPY(mp,UNNAMED_MOD);
  2809. to_ASCII(mp);
  2810. mp+= len;
  2811. }
  2812. }
  2813.  
  2814. /* :107 *//* 108: */
  2815. #line 1578 "./ftangle.web"
  2816.  
  2817.  
  2818. SRTN i_sect_num_ FCN((n,pargs))
  2819. int n C0("")
  2820. PARGS pargs C1("")
  2821. {
  2822. num_to_mbuf(n,pargs,"$SECTION_NUM",0,"section number",cur_mod);
  2823. }
  2824.  
  2825. /* :108 *//* 112: */
  2826. #line 1653 "./ftangle.web"
  2827.  
  2828.  
  2829. SRTN x_mod_a FCN((a))
  2830. sixteen_bits a C1("")
  2831. {
  2832. /* 109: */
  2833. #line 1590 "./ftangle.web"
  2834.  
  2835. {
  2836. name_pointer np;
  2837.  
  2838. a-= MODULE_NAME;
  2839.  
  2840. np= name_dir+a;
  2841.  
  2842. if(np->equiv!=(EQUIV)text_info)push_level(np,NULL,NULL);
  2843. else if(a!=UNNAMED_MODULE)
  2844. {
  2845. SET_COLOR(error);
  2846. printf("\n! Not present: <");prn_id(np);
  2847. err0_print(ERR_NULL,OC(">"),0);
  2848.  
  2849. SET_COLOR(ordinary);
  2850. /* 111: */
  2851. #line 1631 "./ftangle.web"
  2852.  
  2853. {
  2854. #define TEMP_LEN 300
  2855.  
  2856. eight_bits temp[TEMP_LEN],temp1[TEMP_LEN];
  2857. sixteen_bits stub;
  2858. size_t n= length(np);
  2859.  
  2860. id_first= x__to_ASCII(OC("$STUB"));
  2861. stub= ID_NUM(id_first,id_first+5);
  2862.  
  2863. STRNCPY(temp1,np->byte_start,n);
  2864. temp1[n]= '\0';
  2865.  
  2866.  
  2867. if(
  2868. nsprintf(temp,OC("%c%c%c%c%s%c%c"),7,LEFT(stub,ID0),RIGHT(stub),'(',stringg,temp1,stringg,')')>=(int)(TEMP_LEN))OVERFLW("temp","");
  2869. push_level(NULL,temp,temp+STRLEN(temp));
  2870.  
  2871. #undef TEMP_LEN
  2872. }
  2873.  
  2874. /* :111 */
  2875. #line 1605 "./ftangle.web"
  2876.  
  2877. }
  2878. }
  2879.  
  2880. /* :109 */
  2881. #line 1658 "./ftangle.web"
  2882.  
  2883. }
  2884.  
  2885. /* :112 *//* 114: */
  2886. #line 1707 "./ftangle.web"
  2887.  
  2888.  
  2889. SRTN flush0()
  2890. {
  2891.  
  2892.  
  2893.  
  2894. if(phase==1)return;
  2895.  
  2896.  
  2897.  
  2898. if(cur_line%100==0)
  2899. {
  2900. if(cur_line%500==0){CLR_PRINTF(line_num,("%u",cur_line));}
  2901. else putchar('.');
  2902.  
  2903. UPDATE_TERMINAL;
  2904.  
  2905. }
  2906.  
  2907. cur_line++;
  2908. OUTPUT_LINE++;
  2909. }
  2910.  
  2911. /* :114 *//* 115: */
  2912. #line 1733 "./ftangle.web"
  2913.  
  2914.  
  2915. SRTN phase2(VOID)
  2916. {
  2917. phase= 2;
  2918.  
  2919. params= global_params;
  2920. frz_params();
  2921. set_output_file(global_language);
  2922.  
  2923.  
  2924. rst_out(NOT_CONTINUATION);
  2925.  
  2926. CLR_PRINTF(info,("\nWriting the %soutput file(s):",
  2927. compare_outfiles?"temporary ":""));
  2928. printf("  ");
  2929. UPDATE_TERMINAL;
  2930.  
  2931. cur_line= 1;
  2932.  
  2933. if(CAST(text_pointer,text_info)->text_link==0)
  2934. {
  2935. CLR_PRINTF(warning,("\n! No program text was specified."));
  2936. mark_harmless;
  2937.  
  2938. }
  2939. else
  2940. {
  2941. /* 125: */
  2942. #line 2025 "./ftangle.web"
  2943.  
  2944. {
  2945. name_pointer np;
  2946.  
  2947. npmax= name_ptr-1;
  2948.  
  2949.  
  2950. if(truncate_ids)
  2951. {
  2952. unsigned n= 0;
  2953.  
  2954.  
  2955. printf("\nTruncating %u identifiers...",name_ptr-name_dir);
  2956.  
  2957. for(np= name_dir+1;np<name_ptr;np++)
  2958. n+= trunc_id(np);
  2959.  
  2960. printf("\n%u truncation(s) performed.",n);
  2961. }
  2962.  
  2963. not_unique();
  2964.  
  2965. }
  2966.  
  2967. /* :125 */
  2968. #line 1761 "./ftangle.web"
  2969. ;
  2970.  
  2971. /* 91: */
  2972. #line 1158 "./ftangle.web"
  2973.  
  2974.  
  2975. stck_ptr= stack+1;cur_name= name_dir;
  2976. cur_repl= CAST(text_pointer,text_info)->text_link+text_info;
  2977. cur_byte= cur_repl->tok_start;cur_end= (cur_repl+1)->tok_start;
  2978. cur_mod= UNNAMED_MODULE;
  2979. params= cur_params= cur_global_params= global_params;
  2980. frz_params();
  2981.  
  2982. /* :91 */
  2983. #line 1763 "./ftangle.web"
  2984. ;
  2985. /* 122: */
  2986. #line 1919 "./ftangle.web"
  2987.  
  2988. {
  2989. sixteen_bits a;
  2990. text_pointer cur_text;
  2991. boolean is_def;
  2992.  
  2993.  
  2994. copying_macros= YES;
  2995.  
  2996. for(cur_text= text_info+1;cur_text<text_ptr;cur_text++)
  2997. if(cur_text->text_link==macro)
  2998. {
  2999. cur_byte= cur_text->tok_start;
  3000. cur_end= (cur_text+1)->tok_start;
  3001.  
  3002. is_WEB_macro= 
  3003. BOOLEAN(!((is_def= BOOLEAN(cur_text->nargs==OUTER_MACRO))||
  3004. cur_text->nargs==OUTER_UNMACRO));
  3005.  
  3006.  
  3007. if(is_WEB_macro)
  3008. {
  3009. #if(0)
  3010. see_macro(cur_byte,cur_end)
  3011. #endif
  3012. ;}
  3013. else
  3014. /* 123: */
  3015. #line 1956 "./ftangle.web"
  3016.  
  3017. {
  3018. LANGUAGE language0;
  3019. T_OUTER*po= &t_style.outer_start[lan_num(language)];
  3020. outer_char*outer_macro;
  3021.  
  3022. out_state= MISCELLANEOUS;
  3023.  
  3024. set_output_file((LANGUAGE)cur_text->Language);
  3025.  
  3026.  
  3027. protect= YES;
  3028.  
  3029.  
  3030. outer_macro= OC(is_def?po->def:po->undef);
  3031. language0= language;
  3032.  
  3033. C_sprintf(outer_macro,0);
  3034.  
  3035. stck_ptr= stack;
  3036. push_level(NULL,cur_byte,cur_end);
  3037.  
  3038. WHILE()
  3039. /* 124: */
  3040. #line 1987 "./ftangle.web"
  3041.  
  3042. {
  3043. if(DONE_LEVEL&&!pop_level())break;
  3044.  
  3045. a= *cur_byte++;
  3046.  
  3047. if(cur_byte==cur_end&&a=='\n')
  3048. continue;
  3049.  
  3050.  
  3051. if(TOKEN1(a))
  3052. /* 99: */
  3053. #line 1366 "./ftangle.web"
  3054.  
  3055. {
  3056. send_single(a);
  3057. }
  3058.  
  3059. /* :99 */
  3060. #line 1997 "./ftangle.web"
  3061.  
  3062. else
  3063. {
  3064. a= IDENTIFIER(a,*cur_byte++);
  3065.  
  3066. if(a<MODULE_NAME)
  3067. {
  3068. cur_val= a;
  3069. OUT_CHAR(identifier);
  3070.  
  3071. }
  3072. else if(a!=MODULE_NUM)
  3073. {
  3074. CONFUSION("copy outer","Macros defs have strange char");
  3075. }
  3076. else
  3077. {
  3078. cur_mod= a-MODULE_NUM;
  3079. cur_val= (long)cur_mod;
  3080. OUT_CHAR(module_number);
  3081. }
  3082.  
  3083. }
  3084. }
  3085.  
  3086. /* :124 */
  3087. #line 1978 "./ftangle.web"
  3088.  
  3089.  
  3090. set_output_file(language0);
  3091.  
  3092. protect= NO;
  3093. flush_buffer();
  3094. }
  3095.  
  3096. /* :123 */
  3097. #line 1946 "./ftangle.web"
  3098.  
  3099. }
  3100.  
  3101. copying_macros= NO;
  3102. }
  3103.  
  3104. /* :122 */
  3105. #line 1764 "./ftangle.web"
  3106. ;
  3107.  
  3108. /* 91: */
  3109. #line 1158 "./ftangle.web"
  3110.  
  3111.  
  3112. stck_ptr= stack+1;cur_name= name_dir;
  3113. cur_repl= CAST(text_pointer,text_info)->text_link+text_info;
  3114. cur_byte= cur_repl->tok_start;cur_end= (cur_repl+1)->tok_start;
  3115. cur_mod= UNNAMED_MODULE;
  3116. params= cur_params= cur_global_params= global_params;
  3117. frz_params();
  3118.  
  3119. /* :91 */
  3120. #line 1766 "./ftangle.web"
  3121. ;
  3122.  
  3123. while(get_output())
  3124. ;
  3125.  
  3126.  
  3127. flush_buffer();
  3128.  
  3129. if(compare_outfiles)
  3130. cmp_outfiles();
  3131.  
  3132.  
  3133. CLR_PRINTF(info,("\nDone."));
  3134. }
  3135. }
  3136.  
  3137. /* :115 *//* 116: */
  3138. #line 1782 "./ftangle.web"
  3139.  
  3140. SRTN out_version FCN((msg))
  3141. CONST outer_char*msg C1("")
  3142. {
  3143. outer_char HUGE*temp= GET_MEM("version:temp",N_MSGBUF,outer_char);
  3144. boolean in_string0= in_string;
  3145. OUTPUT_STATE out_state0= out_state;
  3146.  
  3147.  
  3148. if(
  3149. nsprintf(temp,OC("  FTANGLE v%s, created with %s on \"%s, %s at %s.\" %s\n"),6,"1.40",the_system,"Monday","February 26, 1996","23:56",local_banner)>=(int)(N_MSGBUF))OVERFLW("temp","");
  3150. STRCAT(temp,cmd_ln_buf);
  3151. STRCAT(temp,msg);
  3152.  
  3153. in_version= YES;
  3154. OUT_MSG(to_ASCII(temp),NULL);
  3155. FREE_MEM(temp,"version:temp",N_MSGBUF,outer_char);
  3156.  
  3157. in_version= NO;
  3158. in_string= in_string0;
  3159. out_state= out_state0;
  3160.  
  3161. if(line_info)
  3162. out_pos= 0;
  3163. else
  3164. {
  3165. started_vcmnt= NO;
  3166. rst_out(NOT_CONTINUATION);
  3167. }
  3168. }
  3169.  
  3170. /* :116 *//* 118: */
  3171. #line 1819 "./ftangle.web"
  3172.  
  3173.  
  3174. SRTN i_version_ FCN((n,pargs))
  3175. int n C0("")
  3176. PARGS pargs C1("")
  3177. {
  3178. CHK_ARGS("$VERSION",0);
  3179.  
  3180. mcopy(version);
  3181. }
  3182.  
  3183. /* :118 *//* 120: */
  3184. #line 1853 "./ftangle.web"
  3185.  
  3186.  
  3187. SRTN i_tm_ FCN((n,pargs))
  3188. int n C0("")
  3189. PARGS pargs C1("")
  3190. {
  3191. eight_bits HUGE*p;
  3192. struct tm*t;
  3193.  
  3194. CHK_ARGS("$TM",1);
  3195.  
  3196. p= pargs[0]+1;
  3197.  
  3198.  
  3199. if(*p++!=constant)
  3200. {
  3201.  
  3202. macro_err(OC("Argument of $TM must be numerical constant"),YES);
  3203. return;
  3204. }
  3205.  
  3206. t= the_localtime();
  3207.  
  3208.  
  3209. switch(*p-'0')
  3210. {
  3211. case 0:
  3212. mcopy(the_day(t));
  3213. break;
  3214.  
  3215. case 1:
  3216.  
  3217. MCHECK(2,"the_cdate");
  3218. *mp++= '`';
  3219. mcopy(the_cdate(t));
  3220. *mp++= '`';
  3221. break;
  3222.  
  3223. case 2:
  3224. mcopy(the_time(t));
  3225. break;
  3226.  
  3227. default:
  3228.  
  3229. macro_err(OC("Invalid case in _tm_"),YES);
  3230. break;
  3231. }
  3232. }
  3233.  
  3234. /* :120 *//* 121: */
  3235. #line 1900 "./ftangle.web"
  3236.  
  3237.  
  3238. SRTN mcopy FCN((s))
  3239. CONST outer_char*s C1("")
  3240. {
  3241. int n= STRLEN(s);
  3242.  
  3243. MCHECK(n,"mcopy");
  3244. STRCPY(mp,x_to_ASCII(s));
  3245. mp+= n;
  3246. }
  3247.  
  3248. /* :121 *//* 126: */
  3249. #line 2053 "./ftangle.web"
  3250.  
  3251.  
  3252. SRTN not_unique(VOID)
  3253. {
  3254. TRUNC HUGE*s,HUGE*HUGE*ss,HUGE*HUGE*ss0,HUGE*HUGE*ss1;
  3255. LANGUAGE Language;
  3256. int l;
  3257. size_t n;
  3258.  
  3259. size_t num_max;
  3260.  
  3261. BP HUGE*HUGE*bb0;
  3262. boolean found_dup= NO;
  3263.  
  3264. for(l= 0;l<NUM_LANGUAGES;l++)
  3265. {
  3266. Language= lan_enum(l);
  3267.  
  3268.  
  3269. n= 0;
  3270.  
  3271. for(s= &sh;s->next;s= s->next)
  3272. {
  3273. if(!((boolean)s->Language&(boolean)Language))continue;
  3274.  
  3275. if(s->num[l]>1)
  3276. {
  3277. char temp[10];
  3278. unsigned len= tr_max[l];
  3279.  
  3280. sprintf(temp,len?"%u":"*",len);
  3281.  
  3282. if(n==0)
  3283. {
  3284. printf("\n\n%c! Non-unique \
  3285. %s variables (filtered with {%s}, truncated to length %s):",
  3286. beep(1),languages[l],filter_char[l],temp);
  3287. found_dup= YES;
  3288. }
  3289. n++;
  3290. }
  3291. }
  3292.  
  3293. if(n==0)continue;
  3294.  
  3295.  
  3296. ss1= ss0= ss= GET_MEM("ss",n,TRUNC HUGE*);
  3297. num_max= 0;
  3298.  
  3299. for(s= &sh;s->next;s= s->next)
  3300. {
  3301. if(!((boolean)s->Language&(boolean)Language))continue;
  3302.  
  3303. if(s->num[l]>1)
  3304. {
  3305. *ss++= s;
  3306. num_max= MAX(num_max,s->num[l]);
  3307. }
  3308. }
  3309.  
  3310.  
  3311. QSORT(ss0,n,sizeof(TRUNC HUGE*),cmpr_trunc);
  3312.  
  3313.  
  3314. bb0= GET_MEM("bb",num_max,BP HUGE*);
  3315.  
  3316. while(ss1<ss)
  3317. see_dup(*ss1++,Language,bb0);
  3318.  
  3319. FREE_MEM(ss0,"ss",n,TRUNC HUGE*);
  3320. FREE_MEM(bb0,"bb",num_max,BP HUGE*);
  3321. }
  3322.  
  3323. if(found_dup)
  3324. NEWLINE;
  3325. }
  3326.  
  3327. SRTN see_dup FCN((s,Language,bb0))
  3328. CONST TRUNC HUGE*s C0("")
  3329. LANGUAGE Language C0("")
  3330. BP HUGE*HUGE*bb0 C1("")
  3331. {
  3332. BP HUGE*b,HUGE*HUGE*bb,HUGE*HUGE*bb1;
  3333. int n;
  3334.  
  3335. NEWLINE;
  3336. printf(" ");
  3337. n= see(s->id,s->id_end);
  3338.  
  3339.  
  3340.  
  3341. for(n= tr_max[lan_num(Language)]+1-n;n>0;n--)printf(" ");
  3342. printf("<=");
  3343.  
  3344.  
  3345. for(b= s->first,bb= bb0;b!=NULL;b= b->next)
  3346. {
  3347. if(!((boolean)b->Language&(boolean)Language))continue;
  3348.  
  3349. *bb++= b;
  3350. }
  3351.  
  3352. QSORT(bb0,bb-bb0,sizeof(BP HUGE*),cmpr_bp);
  3353.  
  3354. for(bb1= bb0;bb1<bb;bb1++)
  3355. {
  3356. printf(" ");
  3357. see((*bb1)->byte_start,(*bb1)->byte_end);
  3358. }
  3359. }
  3360.  
  3361. int see FCN((c0,c1))
  3362. CONST ASCII HUGE*c0 C0("Beginning.")
  3363. CONST ASCII HUGE*c1 C1("end.")
  3364. {
  3365. int n= c1-c0;
  3366.  
  3367. while(c0<c1)printf("%c",XCHR(*c0++));
  3368.  
  3369. return n;
  3370.  
  3371. }
  3372.  
  3373. /* :126 *//* 127: */
  3374. #line 2173 "./ftangle.web"
  3375.  
  3376.  
  3377. int cmpr_trunc FCN((t0,t1))
  3378. TRUNC HUGE**t0 C0("")
  3379. TRUNC HUGE**t1 C1("")
  3380. {
  3381. switch(web_strcmp((*t0)->id,(*t0)->id_end,(*t1)->id,(*t1)->id_end))
  3382. {
  3383. case EQUAL:
  3384. return 0;
  3385.  
  3386. case LESS:
  3387. case PREFIX:
  3388. return-1;
  3389.  
  3390. case GREATER:
  3391. case EXTENSION:
  3392. return 1;
  3393. }
  3394.  
  3395. return 0;
  3396. }
  3397.  
  3398. int cmpr_bp FCN((bb0,bb1))
  3399. BP HUGE**bb0 C0("")
  3400. BP HUGE**bb1 C1("")
  3401. {
  3402. switch(web_strcmp((*bb0)->byte_start,(*bb0)->byte_end,
  3403. (*bb1)->byte_start,(*bb1)->byte_end))
  3404. {
  3405. case EQUAL:
  3406. return 0;
  3407.  
  3408. case LESS:
  3409. case PREFIX:
  3410. return-1;
  3411.  
  3412. case GREATER:
  3413. case EXTENSION:
  3414. return 1;
  3415. }
  3416.  
  3417. return 0;
  3418. }
  3419.  
  3420. #line 8 "./trunc.hweb"
  3421.  
  3422. /* :127 *//* 130: */
  3423. #line 2226 "./ftangle.web"
  3424.  
  3425.  
  3426. BP HUGE*b_link FCN((s,Language,p0,p1))
  3427. TRUNC HUGE*s C0("")
  3428. LANGUAGE Language C0("")
  3429. CONST ASCII HUGE*p0 C0("")
  3430. CONST ASCII HUGE*p1 C1("")
  3431. {
  3432. BP HUGE*bp;
  3433.  
  3434. bp= GET_MEM("bp",1,BP);
  3435.  
  3436. bp->c= BP_MARKER;
  3437.  
  3438.  
  3439. bp->Language= Language;
  3440.  
  3441.  
  3442. bp->byte_start= p0;
  3443. bp->byte_end= p1;
  3444.  
  3445.  
  3446. bp->Root= s;
  3447. s->Language|= (boolean)Language;
  3448. s->num[lan_num(Language)]++;
  3449.  
  3450. return bp;
  3451. }
  3452.  
  3453. /* :130 *//* 131: */
  3454. #line 2257 "./ftangle.web"
  3455.  
  3456.  
  3457. TRUNC HUGE*s_link FCN((s,id,len))
  3458. TRUNC HUGE*s C0("Points to the current structure, to be \
  3459. filled with info.")
  3460. CONST ASCII HUGE*id C0("Truncated identifier.")
  3461. unsigned short len C1("Length of truncated identifier.")
  3462. {
  3463.  
  3464. s->id= GET_MEM("s->id",len,ASCII);
  3465.  
  3466. STRNCPY(s->id,id,len);
  3467.  
  3468. s->id_end= s->id+len;
  3469.  
  3470.  
  3471.  
  3472. s->next= GET_MEM("s->next",1,TRUNC);
  3473.  
  3474. return s;
  3475. }
  3476.  
  3477. /* :131 *//* 132: */
  3478. #line 2277 "./ftangle.web"
  3479.  
  3480.  
  3481. name_pointer id0_lookup FCN((start,end,l))
  3482. CONST ASCII HUGE*start C0("Start of name.")
  3483. CONST ASCII HUGE*end C0("end of name.")
  3484. LANGUAGE l C1("")
  3485. {
  3486. name_pointer np;
  3487. CONST ASCII HUGE*p0,HUGE*p1;
  3488.  
  3489. for(np= name_dir+1;np<name_ptr;np++)
  3490. {
  3491. if(!(np->Language&(boolean)l)||
  3492. np->equiv!=NULL||*(p0= np->byte_start)==BP_MARKER)
  3493. continue;
  3494.  
  3495. PROPER_END(p1);
  3496.  
  3497. if(web_strcmp(p0,p1,start,end)==EQUAL)
  3498. return np;
  3499. }
  3500.  
  3501. return NULL;
  3502. }
  3503.  
  3504. /* :132 *//* 134: */
  3505. #line 2314 "./ftangle.web"
  3506.  
  3507.  
  3508. unsigned trunc_id FCN((np0))
  3509. CONST name_pointer np0 C1("Points to current id structure.")
  3510. {
  3511. CONST ASCII HUGE*p,HUGE*p0,HUGE*p1;
  3512.  
  3513. ASCII temp[N_IDBUF];
  3514. ASCII HUGE*t;
  3515.  
  3516. unsigned short n;
  3517.  
  3518. TRUNC HUGE*s;
  3519. name_pointer np;
  3520. unsigned short nmax;
  3521.  
  3522. LANGUAGE Language;
  3523. int l;
  3524. unsigned count= 0;
  3525.  
  3526. if(np0->Language==(boolean)NO_LANGUAGE||np0->equiv!=NULL)
  3527. return 0;
  3528.  
  3529. for(l= 0;l<NUM_LANGUAGES;l++)
  3530. {
  3531. Language= lan_enum(l);
  3532. np= np0;
  3533.  
  3534.  
  3535.  
  3536.  
  3537. if((nmax= tr_max[l])==0||!(np->Language&(boolean)Language)
  3538. ||(np->reserved_word&(boolean)Language)
  3539. ||(np->intrinsic_word&(boolean)Language)
  3540. ||(np->keyword&(boolean)Language)
  3541. ||(np->macro_type!=NOT_DEFINED))
  3542. continue;
  3543.  
  3544.  
  3545. p0= np->byte_start;
  3546.  
  3547. if(*p0==BP_MARKER)
  3548. continue;
  3549.  
  3550. PROPER_END(p1);
  3551.  
  3552.  
  3553. for(p= p0,t= temp,n= 0;p<p1&&n<nmax;p++)
  3554. if(STRCHR(filter_char[l],(int)XCHR(*p))==NULL)
  3555. {
  3556. n++;
  3557. *t++= *p;
  3558. }
  3559.  
  3560. n= t-temp;
  3561.  
  3562.  
  3563. if(p1-p0==(long)n)
  3564. continue;
  3565.  
  3566.  
  3567. count++;
  3568.  
  3569.  
  3570.  
  3571. for(s= &sh;s->next!=NULL;s= s->next)
  3572. if(s->id_end-s->id==(long)n&&
  3573. web_strcmp(s->id,s->id_end,temp,t)==EQUAL)
  3574. {
  3575. another_bp:
  3576. s->last= s->last->next= b_link(s,Language,p0,p1);
  3577.  
  3578. np->byte_start= (ASCII*)s->last;
  3579.  
  3580. goto next_language;
  3581. }
  3582.  
  3583.  
  3584. s= s_link(s,temp,n);
  3585. s->first= s->last= b_link(s,Language,p0,p1);
  3586.  
  3587. np->byte_start= (ASCII*)s->first;
  3588.  
  3589.  
  3590.  
  3591.  
  3592. if((np= id0_lookup(temp,t,(LANGUAGE)np->Language))!=NULL)
  3593. {
  3594. p0= np->byte_start;PROPER_END(p1);
  3595. goto another_bp;
  3596. }
  3597.  
  3598. next_language:;
  3599. }
  3600.  
  3601. return count;
  3602. }
  3603.  
  3604. /* :134 *//* 145: */
  3605. #line 2789 "./ftangle.web"
  3606.  
  3607.  
  3608. SRTN open_out FCN((msg,global_scope))
  3609. CONST outer_char*msg C0("")
  3610. boolean global_scope C1("")
  3611. {
  3612. boolean is_stdout= BOOLEAN(STRCMP(params.OUTPUT_FILE_NAME,"stdout")==0);
  3613. boolean already_opened= NO;
  3614.  
  3615. if(is_stdout)
  3616. out_file= params.OUT_FILE= stdout;
  3617. else
  3618. {
  3619. already_opened= was_opened(params.OUTPUT_FILE_NAME,global_scope,
  3620. NULL,&out_file);
  3621.  
  3622. params.OUT_FILE= out_file;
  3623.  
  3624.  
  3625.  
  3626.  
  3627. if(top_version&&!(already_opened||compare_outfiles))
  3628. out_version(msg);
  3629. }
  3630.  
  3631.  
  3632.  
  3633.  
  3634. if(global_scope)
  3635. cur_global_params.OUT_FILE= global_params.OUT_FILE= out_file;
  3636.  
  3637.  
  3638. if(!already_opened)
  3639. {
  3640. CLR_PRINTF(out_file,("(%s)%s",params.OUTPUT_FILE_NAME,is_stdout?"\n":""));
  3641. UPDATE_TERMINAL;
  3642. }
  3643. }
  3644.  
  3645. /* :145 *//* 149: */
  3646. #line 2869 "./ftangle.web"
  3647.  
  3648.  
  3649. boolean was_opened FCN((file_name,global_scope,pname,pfile_ptr))
  3650. CONST outer_char HUGE*file_name C0("")
  3651. boolean global_scope C0("")
  3652. outer_char HUGE*HUGE*pname C0("")
  3653. FILE**pfile_ptr C1("")
  3654. {
  3655. OPEN_FILE HUGE*f;
  3656.  
  3657. if(!*file_name)
  3658. {
  3659. *pname= (outer_char HUGE*)"";
  3660. *pfile_ptr= NULL;
  3661. return NO;
  3662. }
  3663.  
  3664.  
  3665. for(f= open_file;f<last_file;f++)
  3666. if(STRCMP(f->name,file_name)==0)
  3667. {
  3668. if(pname)
  3669. {
  3670. *pname= f->name;
  3671. *pfile_ptr= f->ptr;
  3672. return f->previously_opened;
  3673. }
  3674. else
  3675. goto open_it;
  3676. }
  3677.  
  3678. /* 150: */
  3679. #line 2918 "./ftangle.web"
  3680.  
  3681. {
  3682.  
  3683. if(last_file==open_file_end)
  3684. {
  3685. OVERFLW("previously opened files","nf");
  3686. }
  3687.  
  3688. last_file->name= GET_MEM("last_file",STRLEN(file_name)+1,outer_char);
  3689. STRCPY(last_file->name,file_name);
  3690. last_file++;
  3691. }
  3692.  
  3693. /* :150 */
  3694. #line 2900 "./ftangle.web"
  3695.  
  3696.  
  3697. if(pname)
  3698. {
  3699.  
  3700. *pname= f->name;
  3701. f->ptr= NULL;
  3702. f->previously_opened= NO;
  3703. f->global_scope= global_scope;
  3704. }
  3705. else
  3706. /* 151: */
  3707. #line 2939 "./ftangle.web"
  3708.  
  3709. {
  3710. open_it:
  3711. f->previously_opened= BOOLEAN(f->previously_opened||(f->ptr!=NULL));
  3712.  
  3713. if(f->previously_opened)
  3714. {
  3715. if(f->ptr==NULL)
  3716. f->ptr= FOPEN(compare_outfiles?f->tmp_name:f->name,"a");
  3717. }
  3718. else
  3719. {
  3720. if(compare_outfiles)
  3721. /* 152: */
  3722. #line 2965 "./ftangle.web"
  3723.  
  3724. {
  3725. char*buffer;
  3726. IN_COMMON outer_char wbprefix[MAX_FILE_NAME_LENGTH];
  3727.  
  3728. #if(HAVE_TEMPNAM)
  3729. extern char*tempnam();
  3730.  
  3731. if(!*wbprefix)STRCPY(wbprefix,"./");
  3732. buffer= tempnam(wbprefix,"FTMP");
  3733.  
  3734.  
  3735. #else
  3736. buffer= tmpnam(NULL);
  3737.  
  3738. #endif
  3739.  
  3740. f->tmp_name= GET_MEM("f->tmp_name",STRLEN(buffer)+1,outer_char);
  3741.  
  3742. STRCPY(f->tmp_name,buffer);
  3743.  
  3744. f->ptr= FOPEN(f->tmp_name,"w");
  3745. }
  3746.  
  3747. /* :152 */
  3748. #line 2952 "./ftangle.web"
  3749.  
  3750. else
  3751. f->ptr= FOPEN(f->name,"w");
  3752.  
  3753. if(!(f->ptr))
  3754. {
  3755. FATAL("\n!! Can't open output file ",file_name);
  3756. }
  3757. }
  3758. }
  3759.  
  3760. /* :151 */
  3761. #line 2911 "./ftangle.web"
  3762.  
  3763.  
  3764. *pfile_ptr= f->ptr;
  3765. return f->previously_opened;
  3766. }
  3767.  
  3768. /* :149 *//* 153: */
  3769. #line 2988 "./ftangle.web"
  3770.  
  3771.  
  3772. SRTN close_out FCN((fp))
  3773. FILE*fp C1("")
  3774. {
  3775. OPEN_FILE*f;
  3776.  
  3777. for(f= open_file;f<last_file;f++)
  3778. if(f->ptr==fp)
  3779. {
  3780. close0(f);
  3781. return;
  3782. }
  3783.  
  3784. CONFUSION("close_out","Allegedly open file isn't in list");
  3785. }
  3786.  
  3787. /* :153 *//* 154: */
  3788. #line 3006 "./ftangle.web"
  3789.  
  3790.  
  3791. SRTN cls_local(VOID)
  3792. {
  3793. OPEN_FILE*f;
  3794.  
  3795. for(f= open_file;f<last_file;f++)
  3796. if(f->ptr&&!f->global_scope)
  3797. close0(f);
  3798. }
  3799.  
  3800. /* :154 *//* 155: */
  3801. #line 3018 "./ftangle.web"
  3802.  
  3803. SRTN close0 FCN((f))
  3804. OPEN_FILE*f C1("")
  3805. {
  3806. fclose(f->ptr);
  3807. f->ptr= NULL;
  3808. f->previously_opened= YES;
  3809. }
  3810.  
  3811. /* :155 *//* 156: */
  3812. #line 3032 "./ftangle.web"
  3813.  
  3814. SRTN cmp_outfiles(VOID)
  3815. {
  3816. OPEN_FILE*f;
  3817. boolean renamed= NO;
  3818.  
  3819. printf("\nRenaming temporary file(s):  ");
  3820. UPDATE_TERMINAL;
  3821.  
  3822. for(f= open_file;f<last_file;f++)
  3823. if(f->previously_opened||f->ptr)
  3824. {
  3825. FILE*old_ptr= FOPEN(f->name,"r");
  3826.  
  3827. if(f->ptr)
  3828. fflush(f->ptr);
  3829.  
  3830. if(old_ptr)
  3831. /* 157: */
  3832. #line 3063 "./ftangle.web"
  3833.  
  3834. {
  3835. int c_old,c_new;
  3836. FILE*new_ptr;
  3837.  
  3838. if(f->ptr)
  3839. new_ptr= freopen((CONST char*)f->tmp_name,"r",f->ptr);
  3840. else
  3841. new_ptr= FOPEN(f->tmp_name,"r");
  3842.  
  3843. if(!new_ptr)
  3844. FATAL("\n!! Can't reopen temporary file ",f->tmp_name);
  3845.  
  3846. do
  3847. {
  3848. c_old= getc(old_ptr);
  3849. c_new= getc(new_ptr);
  3850. }
  3851. while(c_old==c_new&&c_old!=EOF);
  3852.  
  3853. fclose(old_ptr);
  3854. fclose(new_ptr);
  3855.  
  3856. if(c_old==c_new)
  3857. remove((CONST char*)f->tmp_name);
  3858.  
  3859. else
  3860. /* 158: */
  3861. #line 3095 "./ftangle.web"
  3862.  
  3863. {
  3864.  
  3865. remove((CONST char*)f->name);
  3866.  
  3867. printf("(%s",f->name);
  3868.  
  3869.  
  3870. if(rename((CONST char*)f->tmp_name,(CONST char*)f->name)!=0)
  3871. {
  3872.  
  3873.  
  3874.  
  3875. #if ANSI_SYSTEM
  3876. if(!system(NULL))
  3877. {
  3878.  
  3879. err0_print(ERR_T,OC("Couldn't rename \"%s\" to \"%s\""),2,f->tmp_name,f->name);
  3880. perror("");
  3881. }
  3882. else
  3883. #endif 
  3884.  
  3885. {
  3886. char temp[256];
  3887.  
  3888.  
  3889.  
  3890. #ifndef MV
  3891. #ifdef ibmpc
  3892. #define MV rename
  3893. #else
  3894. #define MV mv
  3895. #endif
  3896. #endif
  3897. sprintf(temp,"%s %s %s","MV",f->tmp_name,f->name);
  3898. system(temp);
  3899. printf("*");
  3900.  
  3901. }
  3902. }
  3903.  
  3904. printf(")");UPDATE_TERMINAL;
  3905.  
  3906. renamed= YES;
  3907. }
  3908.  
  3909. /* :158 */
  3910. #line 3089 "./ftangle.web"
  3911.  
  3912. }
  3913.  
  3914. /* :157 */
  3915. #line 3050 "./ftangle.web"
  3916.  
  3917. else
  3918. /* 158: */
  3919. #line 3095 "./ftangle.web"
  3920.  
  3921. {
  3922.  
  3923. remove((CONST char*)f->name);
  3924.  
  3925. printf("(%s",f->name);
  3926.  
  3927.  
  3928. if(rename((CONST char*)f->tmp_name,(CONST char*)f->name)!=0)
  3929. {
  3930.  
  3931.  
  3932.  
  3933. #if ANSI_SYSTEM
  3934. if(!system(NULL))
  3935. {
  3936.  
  3937. err0_print(ERR_T,OC("Couldn't rename \"%s\" to \"%s\""),2,f->tmp_name,f->name);
  3938. perror("");
  3939. }
  3940. else
  3941. #endif 
  3942.  
  3943. {
  3944. char temp[256];
  3945.  
  3946.  
  3947.  
  3948. #ifndef MV
  3949. #ifdef ibmpc
  3950. #define MV rename
  3951. #else
  3952. #define MV mv
  3953. #endif
  3954. #endif
  3955. sprintf(temp,"%s %s %s","MV",f->tmp_name,f->name);
  3956. system(temp);
  3957. printf("*");
  3958.  
  3959. }
  3960. }
  3961.  
  3962. printf(")");UPDATE_TERMINAL;
  3963.  
  3964. renamed= YES;
  3965. }
  3966.  
  3967. /* :158 */
  3968. #line 3052 "./ftangle.web"
  3969.  
  3970.  
  3971. }
  3972.  
  3973. if(!renamed)
  3974. printf("[no changes]");
  3975. }
  3976.  
  3977. /* :156 *//* 159: */
  3978. #line 3145 "./ftangle.web"
  3979.  
  3980.  
  3981. SRTN out_op FCN((s))
  3982. CONST outer_char HUGE*s C1("String to translate.")
  3983. {
  3984. out_str(s);
  3985.  
  3986. out_state= MISCELLANEOUS;
  3987. }
  3988.  
  3989. SRTN out_str FCN((s))
  3990. CONST outer_char HUGE*s C1("")
  3991. {
  3992. while(*s)
  3993. C_putc(*s++);
  3994. }
  3995.  
  3996. /* :159 *//* 164: */
  3997. #line 3381 "./ftangle.web"
  3998.  
  3999.  
  4000. eight_bits x_identifier FCN((cur_char))
  4001. eight_bits cur_char C1("")
  4002. {
  4003. /* 168: */
  4004. #line 3524 "./ftangle.web"
  4005.  
  4006. {
  4007. boolean in_macro0= in_macro;
  4008. name_pointer np= name_dir+cur_val;
  4009. X_FCN(HUGE_FCN_PTR*pf)(VOID);
  4010.  
  4011.  
  4012. if(np->expandable&language)
  4013. {
  4014. expand_special:
  4015. in_macro= NO;
  4016.  
  4017. pf= np->x_translate[lan_num(language)];
  4018.  
  4019. if(pf)(*pf)();
  4020.  
  4021. else CONFUSION("possibly expand special",
  4022. "Allegedly expandable keyword has no associated function");
  4023.  
  4024. in_macro= in_macro0;
  4025.  
  4026. cur_char= id_keyword;
  4027. goto end_identifier;
  4028. }
  4029. else if(R77&&Fortran88&&!checking_label)
  4030. switch(chk_lbl())
  4031. {
  4032. case YES:goto expand_special;
  4033. case-1:goto end_identifier;
  4034. case NO:break;
  4035. }
  4036. }
  4037.  
  4038. /* :168 */
  4039. #line 3386 "./ftangle.web"
  4040. ;
  4041.  
  4042. if(is_deferred((sixteen_bits)cur_val))return cur_char;
  4043.  
  4044.  
  4045.  
  4046.  
  4047.  
  4048. if(!mac_protected&&(macro_text= MAC_LOOKUP(cur_val))!=NULL)
  4049. {
  4050. /* 169: */
  4051. #line 3558 "./ftangle.web"
  4052.  
  4053. {
  4054. eight_bits HUGE*p1;
  4055.  
  4056.  
  4057. in_macro= YES;
  4058.  
  4059.  
  4060. p1= xmacro(macro_text,&cur_byte,cur_end,macrobuf);
  4061.  
  4062.  
  4063.  
  4064.  
  4065.  
  4066.  
  4067. copy_out(p1,mp,macro);
  4068. in_macro= NO;
  4069. }
  4070.  
  4071. /* :169 */
  4072. #line 3396 "./ftangle.web"
  4073.  
  4074. return cur_char;
  4075. }
  4076. else
  4077. {
  4078. /* 139: */
  4079. #line 2701 "./ftangle.web"
  4080.  
  4081. {
  4082. #if FANCY_SPLIT
  4083. if(C_LIKE(language)&&out_state!=VERBATIM)
  4084. split_pos= pC_buffer;
  4085. #endif 
  4086. }
  4087.  
  4088. /* :139 */
  4089. #line 3401 "./ftangle.web"
  4090.  
  4091. if(out_state==NUM_OR_ID&&!nuweb_mode)
  4092. C_putc(' ');
  4093.  
  4094. /* 170: */
  4095. #line 3579 "./ftangle.web"
  4096.  
  4097. {
  4098. name_pointer np;
  4099.  
  4100.  
  4101. np= name_dir+cur_val;
  4102.  
  4103. if(truncate_ids)
  4104. out_trunc(np);
  4105. else
  4106. see_id(np->byte_start,(np+1)->byte_start);
  4107. }
  4108.  
  4109. /* :170 */
  4110. #line 3405 "./ftangle.web"
  4111. ;
  4112.  
  4113. if(no_expand)
  4114. no_expand= mac_protected= NO;
  4115. }
  4116.  
  4117. end_identifier:
  4118. out_state= in_format?MISCELLANEOUS:NUM_OR_ID;
  4119.  
  4120. return cur_char;
  4121. }
  4122.  
  4123. /* :164 *//* 165: */
  4124. #line 3422 "./ftangle.web"
  4125.  
  4126.  
  4127. boolean is_deferred FCN((cur_val))
  4128. sixteen_bits cur_val C1("")
  4129. {
  4130. name_pointer np;
  4131.  
  4132. np= name_dir+cur_val;
  4133.  
  4134. if(np->macro_type==DEFERRED_MACRO)
  4135. {
  4136. text_pointer tp;
  4137. eight_bits HUGE*p0;
  4138. eight_bits a0;
  4139.  
  4140. tp= (text_pointer)np->equiv;
  4141.  
  4142.  
  4143. for(p0= tp->tok_start;p0<(tp+1)->tok_start;)
  4144. if(TOKEN1(a0= *p0++))
  4145. if(a0=='#')
  4146. switch(*p0)
  4147. {
  4148. case '!':
  4149. if(*(p0+1)==MACRO_ARGUMENT)
  4150. app_repl(a0)
  4151. else/* 166: */
  4152. #line 3483 "./ftangle.web"
  4153.  
  4154. {
  4155. if(TOKEN1(*++p0))
  4156. macro_err(OC("! Macro token `#!' must be followed by \
  4157. identifier"),YES);
  4158. else
  4159. {
  4160. text_pointer m;
  4161.  
  4162. if((m= MAC_LOOKUP(IDENTIFIER(*p0,*(p0+1))))==NULL)
  4163.  
  4164. macro_err(OC("! Expecting macro identifier after \"#!\""),YES);
  4165. else
  4166. if(m->nargs>0)
  4167.  
  4168. macro_err(OC("! Macro after \"#!\" can't have arguments"),YES);
  4169. else/* 245: */
  4170. #line 6245 "./ftangle.web"
  4171.  
  4172. {
  4173. eight_bits HUGE*q0,HUGE*q1;
  4174.  
  4175.  
  4176. q0= m->tok_start+m->moffset;
  4177. q1= (m+1)->tok_start;
  4178.  
  4179.  
  4180. while(q0<q1)app_repl(*q0++);
  4181. }
  4182.  
  4183. /* :245 */
  4184. #line 3497 "./ftangle.web"
  4185.  
  4186.  
  4187. p0+= 2;
  4188. }
  4189. }
  4190.  
  4191. /* :166 */
  4192. #line 3448 "./ftangle.web"
  4193.  
  4194. break;
  4195.  
  4196. default:
  4197. app_repl(a0);
  4198. break;
  4199. }
  4200. else app_repl(a0)
  4201. else
  4202. {
  4203. app_repl(a0);
  4204. app_repl(*p0++);
  4205. }
  4206.  
  4207. cur_text= text_ptr;
  4208. cur_text->Language= (boolean)language;
  4209. cur_text->nargs= tp->nargs;
  4210. cur_text->moffset= tp->moffset;
  4211. cur_text->var_args= tp->var_args;
  4212. cur_text->recursive= NO;
  4213. cur_text->text_link= macro;
  4214.  
  4215. (++text_ptr)->tok_start= tok_ptr;
  4216.  
  4217. np= name_dir+IDENTIFIER(tp->tok_start[0],tp->tok_start[1]);
  4218. np->macro_type= IMMEDIATE_MACRO;
  4219.  
  4220. np->equiv= (EQUIV)cur_text;
  4221.  
  4222. return YES;
  4223.  
  4224. }
  4225.  
  4226. return NO;
  4227.  
  4228. }
  4229.  
  4230. /* :165 *//* 171: */
  4231. #line 3593 "./ftangle.web"
  4232.  
  4233.  
  4234. SRTN out_ptrunc FCN((cur_val))
  4235. sixteen_bits cur_val C1("")
  4236. {
  4237. /* 170: */
  4238. #line 3579 "./ftangle.web"
  4239.  
  4240. {
  4241. name_pointer np;
  4242.  
  4243.  
  4244. np= name_dir+cur_val;
  4245.  
  4246. if(truncate_ids)
  4247. out_trunc(np);
  4248. else
  4249. see_id(np->byte_start,(np+1)->byte_start);
  4250. }
  4251.  
  4252. /* :170 */
  4253. #line 3598 "./ftangle.web"
  4254.  
  4255. }
  4256.  
  4257. /* :171 *//* 172: */
  4258. #line 3602 "./ftangle.web"
  4259.  
  4260.  
  4261. SRTN see_id FCN((start,end))
  4262. CONST ASCII HUGE*start C0("Beginning of identifier name.")
  4263. CONST ASCII HUGE*end C1("End of identifier name.")
  4264. {
  4265. CONST ASCII HUGE*j;
  4266.  
  4267. for(j= start;j<end;j++)C_putc(XCHR(*j));
  4268. }
  4269.  
  4270. /* :172 *//* 173: */
  4271. #line 3615 "./ftangle.web"
  4272.  
  4273.  
  4274. int id FCN((n))
  4275. int n C1("Identifier number.")
  4276. {
  4277. printf(_Xx("Id %d (0x%x): \"%s\"\n"),n,n,name_of((sixteen_bits)n));
  4278. return n;
  4279. }
  4280.  
  4281. /* :173 *//* 174: */
  4282. #line 3627 "./ftangle.web"
  4283.  
  4284.  
  4285. outer_char HUGE*name_of FCN((id0))
  4286. sixteen_bits id0 C1("Identifier token whose name is sought.")
  4287. {
  4288. static ASCII temp[MAX_ID_LENGTH];
  4289. int k,n;
  4290. name_pointer np;
  4291. CONST ASCII HUGE*end;
  4292.  
  4293. np= name_dir+id0;
  4294.  
  4295.  
  4296. if(np>=name_ptr)
  4297. {
  4298. STRCPY(temp,"???");
  4299. return(outer_char HUGE*)temp;
  4300. }
  4301.  
  4302. PROPER_END(end);
  4303.  
  4304. #if 0 
  4305. n= MIN(end-np->byte_start,MAX_ID_LENGTH-1);
  4306. #else
  4307. if(end-np->byte_start<MAX_ID_LENGTH-1)
  4308. n= end-np->byte_start;
  4309. else
  4310. n= MAX_ID_LENGTH-1;
  4311. #endif
  4312.  
  4313. STRNCPY(temp,np->byte_start,n);
  4314.  
  4315.  
  4316. if(breakpoints)
  4317. for(k= 0;k<n;k++)
  4318. if(temp[k]=='\\')temp[k]= '/';
  4319.  
  4320. temp[n]= '\0';
  4321.  
  4322. return to_outer(temp);
  4323. }
  4324.  
  4325. /* :174 *//* 175: */
  4326. #line 3671 "./ftangle.web"
  4327.  
  4328.  
  4329. CONST ASCII HUGE*proper_end FCN((np))
  4330. name_pointer np C1("")
  4331. {
  4332. CONST ASCII HUGE*end;
  4333.  
  4334. PROPER_END(end);
  4335. return end;
  4336. }
  4337.  
  4338. SRTN out_trunc FCN((np))
  4339. CONST name_pointer np C1("")
  4340. {
  4341. TRUNC HUGE*s;
  4342. ASCII HUGE*pc;
  4343.  
  4344. pc= np->byte_start;
  4345.  
  4346. if(*pc!=BP_MARKER)
  4347. {
  4348. CONST ASCII HUGE*end;
  4349.  
  4350.  
  4351. PROPER_END(end);
  4352. see_id((CONST ASCII HUGE*)pc,end);
  4353. }
  4354. else
  4355. {
  4356. s= ((BP HUGE*)pc)->Root;
  4357. see_id(s->id,s->id_end);
  4358. }
  4359. }
  4360.  
  4361. /* :175 *//* 178: */
  4362. #line 3747 "./ftangle.web"
  4363.  
  4364.  
  4365. SRTN prn_mod_num FCN((fmt,val))
  4366. outer_char*fmt C0("")
  4367. long val C1("")
  4368. {
  4369. int l;
  4370.  
  4371. if(line_info)
  4372. {
  4373. l= lan_num(R77_or_F&&!free_90?FORTRAN:language);
  4374.  
  4375. if(val<0)
  4376. {
  4377. val= -val;
  4378. }
  4379.  
  4380. if(FORTRAN_LIKE(language))
  4381. {
  4382. if(out_pos>rst_pos)flush_out(YES);
  4383. out_pos= 0;
  4384. }
  4385.  
  4386. C_sprintf(fmt,3,begin_comment_char[l],val,end_comment_char[l]);
  4387. }
  4388. /* :178 *//* 178: */
  4389. #line 3797 "./ftangle.web"
  4390. }
  4391.  
  4392. /* :178 *//* 186: */
  4393. #line 3936 "./ftangle.web"
  4394.  
  4395.  
  4396. eight_bits skip_ahead FCN((last_control,skip_over_bars))
  4397. eight_bits last_control C0("Last token that was seen.")
  4398. boolean skip_over_bars C1("")
  4399. {
  4400. eight_bits cc;
  4401.  
  4402. int ncc= 0;
  4403.  
  4404.  
  4405. ASCII last_char;
  4406. ASCII HUGE*lc;
  4407. ASCII HUGE*l1= limit+1;
  4408.  
  4409. WHILE()
  4410. {
  4411. if(loc>limit)
  4412. {
  4413. another_line:
  4414. if(from_buffer)
  4415. {
  4416. undivert();
  4417.  
  4418. return ignore;
  4419. }
  4420. else
  4421. {
  4422. if(!get_line())
  4423. return new_module;
  4424.  
  4425. l1= limit+1;
  4426. }
  4427. }
  4428.  
  4429. *l1= '@';
  4430.  
  4431.  
  4432. more_stuff:
  4433. switch(*loc)
  4434. {
  4435. case '@':
  4436. break;
  4437.  
  4438. case '|':
  4439. if(skip_over_bars)
  4440. {
  4441. if(skip_bars()==new_module)return new_module;
  4442.  
  4443. continue;
  4444. }
  4445.  
  4446.  
  4447.  
  4448. default:
  4449. loc++;
  4450. if(loc>limit)
  4451. {
  4452. ncc= 2;
  4453. goto another_line;
  4454. }
  4455. goto more_stuff;
  4456. }
  4457.  
  4458. *l1= ' ';
  4459.  
  4460.  
  4461. if(loc>limit)ncc= 2;
  4462. else/* 188: */
  4463. #line 4077 "./ftangle.web"
  4464.  
  4465. {
  4466. last_char= ' ';
  4467.  
  4468.  
  4469. for(lc= loc-1;lc>=cur_buffer;lc--)
  4470. if(*lc!=' ')
  4471. {
  4472. last_char= *lc;
  4473.  
  4474. break;
  4475. }
  4476.  
  4477. ++loc;
  4478.  
  4479. ++ncc;
  4480.  
  4481.  
  4482. switch(cc= ccode[*(loc++)])
  4483. {
  4484. /* 10: */
  4485. #line 78 "./typedefs.hweb"
  4486.  
  4487.  
  4488. case begin_C:
  4489. case begin_RATFOR:
  4490. case begin_FORTRAN:
  4491. case begin_LITERAL
  4492.  
  4493.  
  4494.  
  4495. /* :10 */
  4496. #line 4093 "./ftangle.web"
  4497. :
  4498. loc--;
  4499.  
  4500. case L_switch:
  4501. {
  4502. if(last_char!='|')
  4503. {
  4504. /* 21: */
  4505. #line 137 "./typedefs.hweb"
  4506.  
  4507. {
  4508. ASCII l= *loc++;
  4509.  
  4510. switch(l)
  4511. {
  4512. /* 11: */
  4513. #line 93 "./typedefs.hweb"
  4514.  
  4515. case 'c':case 'C'
  4516.  
  4517. /* :11 */
  4518. #line 143 "./typedefs.hweb"
  4519. :
  4520. Cpp= BOOLEAN(*loc=='+');
  4521. break;
  4522.  
  4523. /* 12: */
  4524. #line 96 "./typedefs.hweb"
  4525.  
  4526. case 'r':case 'R'
  4527.  
  4528. /* :12 */
  4529. #line 147 "./typedefs.hweb"
  4530. :
  4531. /* 13: */
  4532. #line 99 "./typedefs.hweb"
  4533.  
  4534. case 'n':case 'N'
  4535.  
  4536. /* :13 */
  4537. #line 148 "./typedefs.hweb"
  4538. :
  4539. Fortran88= BOOLEAN(*loc=='9');
  4540. break;
  4541.  
  4542. /* 15: */
  4543. #line 105 "./typedefs.hweb"
  4544.  
  4545. case 'v':case 'V'
  4546.  
  4547.  
  4548.  
  4549. /* :15 */
  4550. #line 152 "./typedefs.hweb"
  4551. :
  4552. /* 14: */
  4553. #line 102 "./typedefs.hweb"
  4554.  
  4555. case 'x':case 'X'
  4556.  
  4557. /* :14 */
  4558. #line 153 "./typedefs.hweb"
  4559. :
  4560. break;
  4561.  
  4562. default:
  4563.  
  4564. err0_print(ERR_C,OC("! Invalid language command `@L%c' ignored"),1,XCHR(l));
  4565. break;
  4566. }
  4567.  
  4568. opt_args(l);
  4569.  
  4570. }
  4571.  
  4572.  
  4573. /* :21 */
  4574. #line 4100 "./ftangle.web"
  4575.  
  4576. if(module_count==0)global_params= params;
  4577. set_output_file(language);
  4578. }
  4579. continue;
  4580. }
  4581.  
  4582. case begin_nuweb:
  4583. nuweb_mode1= nuweb_mode= !NUWEB_MODE;
  4584. if(module_count==0)global_params= params;
  4585. continue;
  4586.  
  4587. case control_text:
  4588. while((c= skip_ahead(ignore,NO))=='@');
  4589.  
  4590.  
  4591. if(*(loc-1)!='>')
  4592. err0_print(ERR_T,OC("Improper @ within control text"),0);
  4593.  
  4594. continue;
  4595.  
  4596. case compiler_directive:
  4597. case Compiler_Directive:
  4598. if(scanning_TeX)
  4599.  
  4600. err0_print(ERR_T,OC("Compiler directives are allowed only in code"),0);
  4601. loc= limit+1;
  4602. continue;
  4603.  
  4604. case invisible_cmnt:
  4605. loc= limit+1;
  4606. continue;
  4607.  
  4608. case module_name:
  4609. if(ncc==1&&last_control==formatt)
  4610. {
  4611. loc-= 2;
  4612. get_next();
  4613.  
  4614. continue;
  4615. }
  4616. break;
  4617.  
  4618. case big_line_break:
  4619. if(loc>=limit)continue;
  4620.  
  4621. /* 33: */
  4622. #line 382 "./typedefs.hweb"
  4623.  
  4624. {
  4625. boolean mcode;
  4626.  
  4627. *limit= ' ';
  4628. id_first= loc;
  4629.  
  4630. while(isAlpha(*loc))loc++;
  4631.  
  4632. if((mcode= is_mcmd(mcmds,id_first,loc))!=0)
  4633. {
  4634. while(loc<limit&&(*loc==' '||*loc==tab_mark))
  4635. loc++;
  4636.  
  4637. return mcode;
  4638. }
  4639.  
  4640. loc= id_first;
  4641. }
  4642.  
  4643.  
  4644. /* :33 */
  4645. #line 4143 "./ftangle.web"
  4646. ;
  4647.  
  4648. continue;
  4649.  
  4650. case USED_BY_NEITHER:
  4651.  
  4652. err0_print(ERR_T,OC("Invalid `@%c' ignored"),1,XCHR(*(loc-1)));
  4653. continue;
  4654. }
  4655.  
  4656. if(cc!=ignore||(*(loc-1)=='>'&&(ncc!=2)&&last_control!=formatt))
  4657. return cc;
  4658.  
  4659. }
  4660.  
  4661. /* :188 */
  4662. #line 4000 "./ftangle.web"
  4663.  
  4664. }
  4665.  
  4666. DUMMY_RETURN(ignore);
  4667. }
  4668.  
  4669. /* :186 *//* 187: */
  4670. #line 4007 "./ftangle.web"
  4671.  
  4672.  
  4673. eight_bits skip_bars(VOID)
  4674. {
  4675. PARAMS params0;
  4676. LANGUAGE language0= language;
  4677. eight_bits ret_val;
  4678.  
  4679. params0= params;
  4680.  
  4681.  
  4682. loc++;
  4683.  
  4684.  
  4685. WHILE()
  4686. {
  4687. if(loc>limit&&!get_line())
  4688. {
  4689.  
  4690. err0_print(ERR_W,OC("Reached end of file while skipping code text %s"),1,BTRANS);
  4691. ret_val= new_module;
  4692. goto done;
  4693. }
  4694.  
  4695. switch(next_control= get_next())
  4696. {
  4697. case begin_bp:
  4698. case insert_bp:
  4699. case begin_meta:
  4700. case end_meta:
  4701. case formatt:
  4702. case limbo_text:
  4703. case op_def:
  4704. case macro_def:
  4705. case definition:
  4706. case undefinition:
  4707. case WEB_definition:
  4708. case m_ifdef:
  4709. case m_ifndef:
  4710. case m_else:
  4711. case m_elif:
  4712. case m_endif:
  4713. case m_for:
  4714. case m_endfor:
  4715. case m_pragma:
  4716. case m_undef:
  4717. case begin_code:
  4718.  
  4719. err0_print(ERR_T,OC("Control code not allowed within |...|; \
  4720. inserted '|' in %s"),1,MTRANS);
  4721. loc-= 2;
  4722. ret_val= '|';
  4723. goto done;
  4724.  
  4725. case new_module:
  4726.  
  4727. err0_print(ERR_T,OC("Module%s ended while skipping code text; \
  4728. inserted '|'"),1,MTRANS0);
  4729.  
  4730.  
  4731. case '|':
  4732. ret_val= next_control;
  4733. goto done;
  4734. }
  4735. }
  4736.  
  4737. done:
  4738. params= params0;
  4739. frz_params();
  4740. set_output_file(language0);
  4741.  
  4742. return ret_val;
  4743. }
  4744.  
  4745. /* :187 */
  4746. #line 34 "./ftangle.web"
  4747.  
  4748. #endif 
  4749.  
  4750.  
  4751. #if(part == 0 || part == 2)
  4752. /* 137: */
  4753. #line 2430 "./ftangle.web"
  4754.  
  4755.  
  4756. eight_bits out_char FCN((cur_char))
  4757. eight_bits cur_char C1("Token to control or be sent to the output.")
  4758. {
  4759. switch(cur_char)
  4760. {
  4761. case ignore:
  4762. if(R77_or_F&&started_vcmnt)C_putc(cur_char);
  4763. return ' ';
  4764.  
  4765.  
  4766.  
  4767. case bell:
  4768. return out_dflt(tab_mark);
  4769. case ',':
  4770. out_dflt(cur_char);
  4771. /* 139: */
  4772. #line 2701 "./ftangle.web"
  4773.  
  4774. {
  4775. #if FANCY_SPLIT
  4776. if(C_LIKE(language)&&out_state!=VERBATIM)
  4777. split_pos= pC_buffer;
  4778. #endif 
  4779. }
  4780.  
  4781. /* :139 */
  4782. #line 2449 "./ftangle.web"
  4783.  
  4784. break;
  4785.  
  4786. case interior_semi:
  4787. if(!(Fortran88||in_string))cur_char= ';';
  4788.  
  4789.  
  4790.  
  4791. case ';':
  4792. /* 136: */
  4793. #line 2416 "./ftangle.web"
  4794.  
  4795.  
  4796. if(send_rp)
  4797. {
  4798. C_putc(')');
  4799. send_rp= NO;
  4800.  
  4801. }
  4802.  
  4803. /* :136 */
  4804. #line 2457 "./ftangle.web"
  4805. ;
  4806. return out_dflt(cur_char);
  4807.  
  4808. case cdir:
  4809. in_cdir= BOOLEAN(!in_cdir);
  4810. if(FORTRAN_LIKE(language))
  4811. {
  4812. in_string= NO;
  4813. flush_buffer();
  4814. in_string= YES;
  4815. }
  4816. break;
  4817.  
  4818. case '\n':
  4819. if((copying_macros||!nuweb_mode)
  4820. &&(protect||out_state==VERBATIM))
  4821. {
  4822.  
  4823.  
  4824.  
  4825.  
  4826.  
  4827. if(copying_macros&&protect)
  4828. C_putc(' ');
  4829.  
  4830. out_str(t_style.protect_chars[lan_num(language)]);
  4831.  
  4832. }
  4833. /* 136: */
  4834. #line 2416 "./ftangle.web"
  4835.  
  4836.  
  4837. if(send_rp)
  4838. {
  4839. C_putc(')');
  4840. send_rp= NO;
  4841.  
  4842. }
  4843.  
  4844. /* :136 */
  4845. #line 2485 "./ftangle.web"
  4846. ;
  4847. flush_buffer();
  4848. if(out_state!=VERBATIM)
  4849. out_state= MISCELLANEOUS;
  4850. break;
  4851.  
  4852. /* 163: */
  4853. #line 3362 "./ftangle.web"
  4854.  
  4855. case end_format_stmt:
  4856. in_format= NO;
  4857. C_putc(';');
  4858. out_state= NUM_OR_ID;
  4859. break;
  4860.  
  4861. case begin_format_stmt:
  4862. in_format= YES;
  4863. OUT_OP(" format");
  4864. out_state= MISCELLANEOUS;
  4865. break;
  4866.  
  4867. case identifier:
  4868. cur_char= x_identifier(cur_char);
  4869. break;
  4870.  
  4871.  
  4872. /* :163 */
  4873. #line 2491 "./ftangle.web"
  4874. ;
  4875. /* 177: */
  4876. #line 3717 "./ftangle.web"
  4877.  
  4878.  
  4879. case module_number:
  4880. if(cur_val>0)prn_mod_num(OC("%c* %ld: *%c"),cur_val);
  4881.  
  4882. else if(cur_val<0)prn_mod_num(OC("%c* :%ld *%c"),cur_val);
  4883.  
  4884. else
  4885. {
  4886.  
  4887. if(line_info)
  4888. {
  4889. nearest_line= BASE2*(*cur_byte++);
  4890. nearest_line+= *cur_byte++;
  4891.  
  4892.  
  4893. C_sprintf(OC("\n%cline %u \""),2,
  4894. language==TEX?'%':'#',nearest_line);
  4895.  
  4896.  
  4897. cur_val= BASE2*(*cur_byte++);
  4898. cur_val+= *cur_byte++;
  4899.  
  4900. /* 170: */
  4901. #line 3579 "./ftangle.web"
  4902.  
  4903. {
  4904. name_pointer np;
  4905.  
  4906.  
  4907. np= name_dir+cur_val;
  4908.  
  4909. if(truncate_ids)
  4910. out_trunc(np);
  4911. else
  4912. see_id(np->byte_start,(np+1)->byte_start);
  4913. }
  4914.  
  4915. /* :170 */
  4916. #line 3736 "./ftangle.web"
  4917.  
  4918. C_sprintf(OC("\"\n"),0);
  4919. }
  4920.  
  4921. }
  4922.  
  4923. break;
  4924.  
  4925. /* :177 */
  4926. #line 2492 "./ftangle.web"
  4927. ;
  4928. /* 160: */
  4929. #line 3166 "./ftangle.web"
  4930.  
  4931.  
  4932. case plus_plus:
  4933. if(FORTRAN_LIKE(language))
  4934. {
  4935. /* 162: */
  4936. #line 3329 "./ftangle.web"
  4937.  
  4938. {
  4939. outer_char HUGE*l;
  4940.  
  4941.  
  4942.  
  4943. buffer_out('=');
  4944. out_state= MISCELLANEOUS;
  4945.  
  4946.  
  4947.  
  4948. if(compound_assignments)
  4949. {
  4950. if(last_xpr_overflowed)
  4951. OVERFLW("last expression","lx");
  4952.  
  4953. for(l= last_char;isdigit(*l)||!isalpha(*l);l++)
  4954. ;
  4955.  
  4956. if(plast_char-l>=3&&STRNCMP(last_char,"if(",3)==0)
  4957.  
  4958. err0_print(ERR_T,OC("Sorry, can't expand compound assignment \
  4959. operators correctly after simple IF; use an IF...THEN construction"),0);
  4960.  
  4961. while(l<plast_char)
  4962. buffer_out(*l++);
  4963. }
  4964. else FATAL("!! Operators ++, --, +=, -=, *=, and /= are not allowed; \
  4965. they were turned off by option \"-+\".","");
  4966. }
  4967.  
  4968. /* :162 */
  4969. #line 3171 "./ftangle.web"
  4970. ;
  4971. buffer_out('+');buffer_out('1');
  4972. out_state= MISCELLANEOUS;
  4973. }
  4974. else
  4975. {
  4976. if(*(pC_buffer-1)=='+'&&!nuweb_mode)
  4977. C_putc(' ');
  4978.  
  4979. OUT_OP("++");
  4980. }
  4981.  
  4982. /* 139: */
  4983. #line 2701 "./ftangle.web"
  4984.  
  4985. {
  4986. #if FANCY_SPLIT
  4987. if(C_LIKE(language)&&out_state!=VERBATIM)
  4988. split_pos= pC_buffer;
  4989. #endif 
  4990. }
  4991.  
  4992. /* :139 */
  4993. #line 3182 "./ftangle.web"
  4994.  
  4995. break;
  4996.  
  4997. case minus_minus:
  4998. if(FORTRAN_LIKE(language))
  4999. {
  5000. /* 162: */
  5001. #line 3329 "./ftangle.web"
  5002.  
  5003. {
  5004. outer_char HUGE*l;
  5005.  
  5006.  
  5007.  
  5008. buffer_out('=');
  5009. out_state= MISCELLANEOUS;
  5010.  
  5011.  
  5012.  
  5013. if(compound_assignments)
  5014. {
  5015. if(last_xpr_overflowed)
  5016. OVERFLW("last expression","lx");
  5017.  
  5018. for(l= last_char;isdigit(*l)||!isalpha(*l);l++)
  5019. ;
  5020.  
  5021. if(plast_char-l>=3&&STRNCMP(last_char,"if(",3)==0)
  5022.  
  5023. err0_print(ERR_T,OC("Sorry, can't expand compound assignment \
  5024. operators correctly after simple IF; use an IF...THEN construction"),0);
  5025.  
  5026. while(l<plast_char)
  5027. buffer_out(*l++);
  5028. }
  5029. else FATAL("!! Operators ++, --, +=, -=, *=, and /= are not allowed; \
  5030. they were turned off by option \"-+\".","");
  5031. }
  5032.  
  5033. /* :162 */
  5034. #line 3188 "./ftangle.web"
  5035. ;
  5036. buffer_out('-');buffer_out('1');
  5037. out_state= MISCELLANEOUS;
  5038. }
  5039. else
  5040. {
  5041. if(*(pC_buffer-1)=='-'&&!nuweb_mode)
  5042. C_putc(' ');
  5043.  
  5044. OUT_OP("--");
  5045. }
  5046.  
  5047. /* 139: */
  5048. #line 2701 "./ftangle.web"
  5049.  
  5050. {
  5051. #if FANCY_SPLIT
  5052. if(C_LIKE(language)&&out_state!=VERBATIM)
  5053. split_pos= pC_buffer;
  5054. #endif 
  5055. }
  5056.  
  5057. /* :139 */
  5058. #line 3199 "./ftangle.web"
  5059.  
  5060. break;
  5061.  
  5062. case minus_gt:OUT_OP(FORTRAN_LIKE(language)?".EQV.":"->");break;
  5063.  
  5064. case gt_gt:
  5065. /* 139: */
  5066. #line 2701 "./ftangle.web"
  5067.  
  5068. {
  5069. #if FANCY_SPLIT
  5070. if(C_LIKE(language)&&out_state!=VERBATIM)
  5071. split_pos= pC_buffer;
  5072. #endif 
  5073. }
  5074.  
  5075. /* :139 */
  5076. #line 3205 "./ftangle.web"
  5077.  
  5078. OUT_OP(">>");break;
  5079.  
  5080. case eq_eq:
  5081. /* 139: */
  5082. #line 2701 "./ftangle.web"
  5083.  
  5084. {
  5085. #if FANCY_SPLIT
  5086. if(C_LIKE(language)&&out_state!=VERBATIM)
  5087. split_pos= pC_buffer;
  5088. #endif 
  5089. }
  5090.  
  5091. /* :139 */
  5092. #line 3209 "./ftangle.web"
  5093.  
  5094. OUT_OP(R77_or_F?F_OP(".EQ.","=="):"==");break;
  5095.  
  5096. case lt_lt:
  5097. /* 139: */
  5098. #line 2701 "./ftangle.web"
  5099.  
  5100. {
  5101. #if FANCY_SPLIT
  5102. if(C_LIKE(language)&&out_state!=VERBATIM)
  5103. split_pos= pC_buffer;
  5104. #endif 
  5105. }
  5106.  
  5107. /* :139 */
  5108. #line 3213 "./ftangle.web"
  5109.  
  5110. OUT_OP("<<");break;
  5111.  
  5112. case '>':
  5113. if(in_string)
  5114. out_dflt(cur_char);
  5115. else
  5116. OUT_OP(R77_or_F?F_OP(".GT.",">"):">");
  5117.  
  5118. /* 139: */
  5119. #line 2701 "./ftangle.web"
  5120.  
  5121. {
  5122. #if FANCY_SPLIT
  5123. if(C_LIKE(language)&&out_state!=VERBATIM)
  5124. split_pos= pC_buffer;
  5125. #endif 
  5126. }
  5127.  
  5128. /* :139 */
  5129. #line 3222 "./ftangle.web"
  5130.  
  5131. break;
  5132.  
  5133. case gt_eq:
  5134. OUT_OP(R77_or_F?F_OP(".GE.",">="):">=");
  5135. /* 139: */
  5136. #line 2701 "./ftangle.web"
  5137.  
  5138. {
  5139. #if FANCY_SPLIT
  5140. if(C_LIKE(language)&&out_state!=VERBATIM)
  5141. split_pos= pC_buffer;
  5142. #endif 
  5143. }
  5144.  
  5145. /* :139 */
  5146. #line 3227 "./ftangle.web"
  5147.  
  5148. break;
  5149.  
  5150. case '<':
  5151. if(in_string)
  5152. out_dflt(cur_char);
  5153. else
  5154. OUT_OP(R77_or_F?F_OP(".LT.","<"):"<");
  5155.  
  5156. /* 139: */
  5157. #line 2701 "./ftangle.web"
  5158.  
  5159. {
  5160. #if FANCY_SPLIT
  5161. if(C_LIKE(language)&&out_state!=VERBATIM)
  5162. split_pos= pC_buffer;
  5163. #endif 
  5164. }
  5165.  
  5166. /* :139 */
  5167. #line 3236 "./ftangle.web"
  5168.  
  5169. break;
  5170.  
  5171. case lt_eq:
  5172. OUT_OP(R77_or_F?F_OP(".LE.","<="):"<=");
  5173. /* 139: */
  5174. #line 2701 "./ftangle.web"
  5175.  
  5176. {
  5177. #if FANCY_SPLIT
  5178. if(C_LIKE(language)&&out_state!=VERBATIM)
  5179. split_pos= pC_buffer;
  5180. #endif 
  5181. }
  5182.  
  5183. /* :139 */
  5184. #line 3241 "./ftangle.web"
  5185.  
  5186. break;
  5187.  
  5188. case not_eq:
  5189. OUT_OP(R77_or_F?F_OP(".NE.","<>"):"!=");
  5190. /* 139: */
  5191. #line 2701 "./ftangle.web"
  5192.  
  5193. {
  5194. #if FANCY_SPLIT
  5195. if(C_LIKE(language)&&out_state!=VERBATIM)
  5196. split_pos= pC_buffer;
  5197. #endif 
  5198. }
  5199.  
  5200. /* :139 */
  5201. #line 3246 "./ftangle.web"
  5202.  
  5203. break;
  5204.  
  5205. case and_and:
  5206. OUT_OP(R77_or_F?".AND.":"&&");
  5207. /* 139: */
  5208. #line 2701 "./ftangle.web"
  5209.  
  5210. {
  5211. #if FANCY_SPLIT
  5212. if(C_LIKE(language)&&out_state!=VERBATIM)
  5213. split_pos= pC_buffer;
  5214. #endif 
  5215. }
  5216.  
  5217. /* :139 */
  5218. #line 3251 "./ftangle.web"
  5219.  
  5220. break;
  5221.  
  5222. case or_or:
  5223. if(language==TEX)meta_mode= YES;
  5224. else
  5225. {
  5226. OUT_OP(R77_or_F?".OR.":"||");
  5227. /* 139: */
  5228. #line 2701 "./ftangle.web"
  5229.  
  5230. {
  5231. #if FANCY_SPLIT
  5232. if(C_LIKE(language)&&out_state!=VERBATIM)
  5233. split_pos= pC_buffer;
  5234. #endif 
  5235. }
  5236.  
  5237. /* :139 */
  5238. #line 3259 "./ftangle.web"
  5239.  
  5240. }
  5241. break;
  5242.  
  5243. case star_star:
  5244. if(language==TEX)meta_mode= NO;
  5245. else OUT_OP(C_LIKE(language)?"^^":"**");
  5246. break;
  5247.  
  5248. case '!':
  5249. /* 139: */
  5250. #line 2701 "./ftangle.web"
  5251.  
  5252. {
  5253. #if FANCY_SPLIT
  5254. if(C_LIKE(language)&&out_state!=VERBATIM)
  5255. split_pos= pC_buffer;
  5256. #endif 
  5257. }
  5258.  
  5259. /* :139 */
  5260. #line 3269 "./ftangle.web"
  5261.  
  5262. if(in_string)
  5263. return out_dflt(cur_char);
  5264. else
  5265. OUT_OP(R77_or_F?".NOT.":"!");
  5266. break;
  5267.  
  5268. case slash_slash:OUT_OP("//");break;
  5269.  
  5270. case colon_colon:
  5271. if(in_string)
  5272. return out_dflt(cur_char);
  5273. else
  5274. OUT_OP("::");
  5275. break;
  5276.  
  5277. case ellipsis:
  5278. OUT_OP(FORTRAN_LIKE(language)?".NEQV.":"...");
  5279. /* 139: */
  5280. #line 2701 "./ftangle.web"
  5281.  
  5282. {
  5283. #if FANCY_SPLIT
  5284. if(C_LIKE(language)&&out_state!=VERBATIM)
  5285. split_pos= pC_buffer;
  5286. #endif 
  5287. }
  5288.  
  5289. /* :139 */
  5290. #line 3287 "./ftangle.web"
  5291.  
  5292. break;
  5293.  
  5294. case paste:OUT_OP("##");break;
  5295.  
  5296. case dot_const:
  5297. C_putc('.');
  5298. STRCPY(dot_op.name+1,dots[cur_val].symbol);
  5299. to_outer(dot_op.name+1);
  5300. OUT_OP(OC(dot_op.name+1));
  5301. C_putc('.');
  5302. break;
  5303.  
  5304. /* :160 */
  5305. #line 2493 "./ftangle.web"
  5306. ;
  5307. /* 161: */
  5308. #line 3302 "./ftangle.web"
  5309.  
  5310. case '+':
  5311. case '-':
  5312. case '*':
  5313. case '/':
  5314.  
  5315.  
  5316. if(!FORTRAN_LIKE(language)||
  5317. cur_byte==cur_end||*cur_byte!='='||
  5318. out_state==VERBATIM||!xpn_Ratfor)
  5319. {
  5320. if(cur_char=='*'&&C_LIKE(language)&&out_state!=VERBATIM
  5321. &&*(pC_buffer-1)=='/'&&!nuweb_mode)
  5322. C_putc(' ');
  5323.  
  5324. /* 139: */
  5325. #line 2701 "./ftangle.web"
  5326.  
  5327. {
  5328. #if FANCY_SPLIT
  5329. if(C_LIKE(language)&&out_state!=VERBATIM)
  5330. split_pos= pC_buffer;
  5331. #endif 
  5332. }
  5333.  
  5334. /* :139 */
  5335. #line 3316 "./ftangle.web"
  5336.  
  5337. return out_dflt(cur_char);
  5338. }
  5339.  
  5340. cur_byte++;
  5341. /* 162: */
  5342. #line 3329 "./ftangle.web"
  5343.  
  5344. {
  5345. outer_char HUGE*l;
  5346.  
  5347.  
  5348.  
  5349. buffer_out('=');
  5350. out_state= MISCELLANEOUS;
  5351.  
  5352.  
  5353.  
  5354. if(compound_assignments)
  5355. {
  5356. if(last_xpr_overflowed)
  5357. OVERFLW("last expression","lx");
  5358.  
  5359. for(l= last_char;isdigit(*l)||!isalpha(*l);l++)
  5360. ;
  5361.  
  5362. if(plast_char-l>=3&&STRNCMP(last_char,"if(",3)==0)
  5363.  
  5364. err0_print(ERR_T,OC("Sorry, can't expand compound assignment \
  5365. operators correctly after simple IF; use an IF...THEN construction"),0);
  5366.  
  5367. while(l<plast_char)
  5368. buffer_out(*l++);
  5369. }
  5370. else FATAL("!! Operators ++, --, +=, -=, *=, and /= are not allowed; \
  5371. they were turned off by option \"-+\".","");
  5372. }
  5373.  
  5374. /* :162 */
  5375. #line 3321 "./ftangle.web"
  5376. ;
  5377. out_dflt(cur_char);
  5378. C_putc('(');
  5379. send_rp= YES;
  5380.  
  5381. break;
  5382.  
  5383. /* :161 */
  5384. #line 2494 "./ftangle.web"
  5385. ;
  5386.  
  5387. case '=':
  5388. C_putc('=');
  5389. if(out_state!=VERBATIM)
  5390. {
  5391. if(C_LIKE(language)&&!nuweb_mode)
  5392. C_putc(' ');
  5393.  
  5394.  
  5395. out_state= MISCELLANEOUS;
  5396. }
  5397. /* 139: */
  5398. #line 2701 "./ftangle.web"
  5399.  
  5400. {
  5401. #if FANCY_SPLIT
  5402. if(C_LIKE(language)&&out_state!=VERBATIM)
  5403. split_pos= pC_buffer;
  5404. #endif 
  5405. }
  5406.  
  5407. /* :139 */
  5408. #line 2505 "./ftangle.web"
  5409.  
  5410. break;
  5411.  
  5412. case join:out_state= UNBREAKABLE;break;
  5413.  
  5414. case constant:
  5415. if(out_state==VERBATIM)
  5416. out_state= in_format?MISCELLANEOUS:NUM_OR_ID;
  5417.  
  5418.  
  5419. else
  5420. {
  5421. /* 139: */
  5422. #line 2701 "./ftangle.web"
  5423.  
  5424. {
  5425. #if FANCY_SPLIT
  5426. if(C_LIKE(language)&&out_state!=VERBATIM)
  5427. split_pos= pC_buffer;
  5428. #endif 
  5429. }
  5430.  
  5431. /* :139 */
  5432. #line 2516 "./ftangle.web"
  5433.  
  5434.  
  5435. if(out_state==NUM_OR_ID&&!nuweb_mode)
  5436. C_putc(' ');
  5437.  
  5438. out_state= VERBATIM;
  5439. }
  5440.  
  5441. in_constant= BOOLEAN(!in_constant);
  5442. break;
  5443.  
  5444. case stringg:
  5445. if(in_string)
  5446. out_state= MISCELLANEOUS;
  5447.  
  5448. else
  5449. {
  5450. /* 139: */
  5451. #line 2701 "./ftangle.web"
  5452.  
  5453. {
  5454. #if FANCY_SPLIT
  5455. if(C_LIKE(language)&&out_state!=VERBATIM)
  5456. split_pos= pC_buffer;
  5457. #endif 
  5458. }
  5459.  
  5460. /* :139 */
  5461. #line 2532 "./ftangle.web"
  5462.  
  5463.  
  5464. if(out_state==NUM_OR_ID&&!nuweb_mode)
  5465. C_putc(' ');
  5466.  
  5467.  
  5468. out_state= VERBATIM;
  5469. }
  5470.  
  5471. in_string= BOOLEAN(!in_string);
  5472. break;
  5473.  
  5474. case begin_meta:
  5475.  
  5476.  
  5477.  
  5478. pmeta= &t_style.meta[lan_num(language)];
  5479.  
  5480. switch(language)
  5481. {
  5482. outer_char*t;
  5483.  
  5484. case C:
  5485. case C_PLUS_PLUS:
  5486. case LITERAL:
  5487. case TEX:
  5488. if(meta_mode)break;
  5489.  
  5490. if(!nuweb_mode)
  5491. {
  5492. if(in_string&&!in_version)
  5493. OUT_STR(t= pmeta->msg.top);
  5494. else
  5495. OUT_OP(t= pmeta->hdr.top);
  5496.  
  5497. if(*t)OUT_STR("\n");
  5498.  
  5499. }
  5500. meta_mode= YES;
  5501. break;
  5502.  
  5503. case RATFOR:
  5504. case RATFOR_90:
  5505. case FORTRAN:
  5506. case FORTRAN_90:
  5507. if(meta_mode)
  5508. xpn_Ratfor= NO;
  5509. C_putc(cur_char);
  5510. out_state= MISCELLANEOUS;
  5511. break;
  5512.  
  5513. default:
  5514. CONFUSION("out_char:begin_meta","Language not defined");
  5515. }
  5516. break;
  5517.  
  5518. case end_meta:
  5519. meta_mode= NO;
  5520.  
  5521. switch(language)
  5522. {
  5523. outer_char*t;
  5524.  
  5525. case C:
  5526. case C_PLUS_PLUS:
  5527. case LITERAL:
  5528. case TEX:
  5529. if(meta_mode)break;
  5530.  
  5531. if(!nuweb_mode)
  5532. {
  5533. if(in_string&&!in_version)
  5534. OUT_OP(t= pmeta->msg.bottom);
  5535. else
  5536. OUT_OP(t= pmeta->hdr.bottom);
  5537.  
  5538. if(*t)OUT_OP("\n");
  5539.  
  5540. }
  5541. break;
  5542.  
  5543. case RATFOR:
  5544. case RATFOR_90:
  5545. case FORTRAN:
  5546. case FORTRAN_90:
  5547. xpn_Ratfor= YES;
  5548. C_putc(cur_char);
  5549. out_state= MISCELLANEOUS;
  5550. break;
  5551.  
  5552. default:
  5553. CONFUSION("out_char:end_meta","Language not defined");
  5554. }
  5555.  
  5556. break;
  5557.  
  5558. case '{':
  5559. if(R77&&!in_string)
  5560. /* 140: */
  5561. #line 2711 "./ftangle.web"
  5562.  
  5563. {
  5564. cp_fcn_body();
  5565. cur_char= 01;
  5566. }
  5567.  
  5568. /* :140 */
  5569. #line 2628 "./ftangle.web"
  5570.  
  5571. else
  5572. {
  5573. /* 139: */
  5574. #line 2701 "./ftangle.web"
  5575.  
  5576. {
  5577. #if FANCY_SPLIT
  5578. if(C_LIKE(language)&&out_state!=VERBATIM)
  5579. split_pos= pC_buffer;
  5580. #endif 
  5581. }
  5582.  
  5583. /* :139 */
  5584. #line 2631 "./ftangle.web"
  5585.  
  5586. return out_dflt(cur_char);
  5587. }
  5588. break;
  5589.  
  5590.  
  5591. case '}':
  5592. {
  5593. if(R77&&!in_string&&brace_level==0)
  5594.  
  5595. RAT_error(WARNING,OC("Spurious '}' ignored, \
  5596. or missing program, module, subroutine, or function statement"),0);
  5597. else
  5598. {
  5599. out_dflt(cur_char);
  5600. /* 139: */
  5601. #line 2701 "./ftangle.web"
  5602.  
  5603. {
  5604. #if FANCY_SPLIT
  5605. if(C_LIKE(language)&&out_state!=VERBATIM)
  5606. split_pos= pC_buffer;
  5607. #endif 
  5608. }
  5609.  
  5610. /* :139 */
  5611. #line 2645 "./ftangle.web"
  5612.  
  5613. }
  5614. }
  5615.  
  5616. break;
  5617.  
  5618. case '[':
  5619. out_bracket(cur_char,'(');
  5620. break;
  5621.  
  5622. case ']':
  5623. out_bracket(cur_char,')');
  5624. break;
  5625.  
  5626.  
  5627. case '`':
  5628. if(!(in_string||language==LITERAL))
  5629. {
  5630. mac_protected= BOOLEAN(!mac_protected);
  5631. break;
  5632. }
  5633. else
  5634. return out_dflt(cur_char);
  5635.  
  5636. case '&':
  5637. if(C_LIKE(language)&&out_state!=VERBATIM
  5638. &&*(pC_buffer-1)=='&'&&!nuweb_mode)
  5639. C_putc(' ');
  5640.  
  5641. /* 139: */
  5642. #line 2701 "./ftangle.web"
  5643.  
  5644. {
  5645. #if FANCY_SPLIT
  5646. if(C_LIKE(language)&&out_state!=VERBATIM)
  5647. split_pos= pC_buffer;
  5648. #endif 
  5649. }
  5650.  
  5651. /* :139 */
  5652. #line 2673 "./ftangle.web"
  5653.  
  5654. return out_dflt(cur_char);
  5655.  
  5656. case '\\':
  5657. if(R66)
  5658. cur_char= '$';
  5659.  
  5660.  
  5661. default:
  5662. return out_dflt(cur_char);
  5663. }
  5664.  
  5665. return cur_char;
  5666. }
  5667.  
  5668. /* :137 *//* 138: */
  5669. #line 2689 "./ftangle.web"
  5670.  
  5671.  
  5672. eight_bits out_bracket FCN((cur_char,new_char))
  5673. eight_bits cur_char C0("")
  5674. eight_bits new_char C1("")
  5675. {
  5676. if(out_state!=VERBATIM&&FORTRAN_LIKE(language)&&translate_brackets)
  5677. cur_char= new_char;
  5678. return out_dflt(cur_char);
  5679. }
  5680.  
  5681. /* :138 *//* 141: */
  5682. #line 2718 "./ftangle.web"
  5683.  
  5684.  
  5685. eight_bits out_dflt FCN((c))
  5686. eight_bits c C1("")
  5687. {
  5688. C_putc(XCHR(c));
  5689.  
  5690. if(out_state!=VERBATIM)
  5691. out_state= MISCELLANEOUS;
  5692.  
  5693. return c;
  5694. }
  5695.  
  5696. /* :141 *//* 143: */
  5697. #line 2754 "./ftangle.web"
  5698.  
  5699.  
  5700. LANGUAGE set_output_file FCN((language0))
  5701. LANGUAGE language0 C1("")
  5702. {
  5703. language= language0;
  5704.  
  5705. out_file= params.OUT_FILE;
  5706.  
  5707. ini0_language();
  5708.  
  5709.  
  5710. return language;
  5711.  
  5712. }
  5713.  
  5714. /* :143 *//* 144: */
  5715. #line 2770 "./ftangle.web"
  5716.  
  5717.  
  5718. LANGUAGE opn_output_file FCN((language0))
  5719. LANGUAGE language0 C1("")
  5720. {
  5721. set_output_file(language0);
  5722. flush_buffer();
  5723. open_out(OC(""),LOCAL_SCOPE);
  5724.  
  5725. return language;
  5726. }
  5727.  
  5728. /* :144 *//* 190: */
  5729. #line 4168 "./ftangle.web"
  5730.  
  5731.  
  5732. boolean skip_comment(VOID)
  5733. {
  5734. ASCII c;
  5735. PARSING_MODE outer_mode;
  5736.  
  5737. outer_mode= parsing_mode;
  5738. parsing_mode= OUTER;
  5739.  
  5740. if(comment_continues)loc--;
  5741.  
  5742.  
  5743. else if(*(loc-1)=='/')loc++;
  5744.  
  5745.  
  5746. WHILE()
  5747. {
  5748. if(loc>limit)
  5749. if(!long_comment)/* 191: */
  5750. #line 4229 "./ftangle.web"
  5751.  
  5752. {
  5753. comment_continues= NO;
  5754. break;
  5755. }
  5756.  
  5757. /* :191 */
  5758. #line 4187 "./ftangle.web"
  5759.  
  5760. else if(get_line())
  5761. {
  5762. comment_continues= YES;
  5763. break;
  5764. }
  5765. else
  5766. {
  5767.  
  5768. err0_print(ERR_T,OC("Input ended in middle of comment %s"),1,BTRANS);
  5769.  
  5770. comment_continues= NO;
  5771. break;
  5772.  
  5773. }
  5774.  
  5775. c= *(loc++);
  5776.  
  5777. if(c=='*'&&*loc=='/')
  5778. {
  5779. loc++;
  5780. /* 191: */
  5781. #line 4229 "./ftangle.web"
  5782.  
  5783. {
  5784. comment_continues= NO;
  5785. break;
  5786. }
  5787.  
  5788. /* :191 */
  5789. #line 4207 "./ftangle.web"
  5790.  
  5791. }
  5792.  
  5793. if(c=='@')
  5794. {
  5795. if(ccode[*loc]==new_module)
  5796. {
  5797.  
  5798. err0_print(ERR_T,OC("Section name ended in middle of comment %s"),1,BTRANS);
  5799. loc--;
  5800.  
  5801. /* 191: */
  5802. #line 4229 "./ftangle.web"
  5803.  
  5804. {
  5805. comment_continues= NO;
  5806. break;
  5807. }
  5808.  
  5809. /* :191 */
  5810. #line 4218 "./ftangle.web"
  5811.  
  5812. }
  5813. else loc++;
  5814. }
  5815. }
  5816.  
  5817. parsing_mode= outer_mode;
  5818. return comment_continues;
  5819. }
  5820.  
  5821. /* :190 *//* 193: */
  5822. #line 4257 "./ftangle.web"
  5823.  
  5824.  
  5825. eight_bits get_next(VOID)
  5826. {
  5827. GOTO_CODE pcode;
  5828.  
  5829.  
  5830. strt_point_cmnt= suppress_newline= NO;
  5831.  
  5832. WHILE()
  5833. {
  5834. /* 194: */
  5835. #line 4359 "./ftangle.web"
  5836.  
  5837.  
  5838. if(preprocessing&&at_beginning)
  5839. {
  5840. at_beginning= NO;
  5841.  
  5842.  
  5843.  
  5844. for(;loc<limit;loc++)
  5845. if(!(*loc==' '||*loc==tab_mark))break;
  5846.  
  5847. *(loc-1)= '#';
  5848.  
  5849. return(eight_bits)prs_regular_code(GOTO_GET_IDENTIFIER);
  5850. }
  5851.  
  5852. /* :194 */
  5853. #line 4267 "./ftangle.web"
  5854. ;
  5855. /* 195: */
  5856. #line 4379 "./ftangle.web"
  5857.  
  5858.  
  5859. if(*loc==cont_char&&loc==limit-1&&(preprocessing||free_Fortran))
  5860. {
  5861. loc+= 2;
  5862. return(eight_bits)CHOICE(free_Fortran,'&',cont_char);
  5863.  
  5864.  
  5865. }
  5866.  
  5867. /* :195 */
  5868. #line 4268 "./ftangle.web"
  5869. ;
  5870.  
  5871. if(loc>limit)
  5872. if(from_buffer)
  5873. {
  5874. undivert();
  5875.  
  5876. if(stop_the_scan)
  5877. return WEB_definition;
  5878. continue;
  5879. }
  5880. else
  5881. {
  5882. if(preprocessing&&*(limit-1)!=cont_char)
  5883. {
  5884. preprocessing= NO;
  5885. if(in_cdir)
  5886. {
  5887. id_first= id_loc= mod_text+1;
  5888. *id_loc++= cdir;
  5889. *id_loc++= '\0';
  5890. in_cdir= NO;
  5891. return stringg;
  5892. }
  5893. }
  5894. if(stop_the_scan)
  5895. return WEB_definition;
  5896. else if(!get_line())
  5897. return new_module;
  5898.  
  5899. if(eat_blank_lines)
  5900. {
  5901. eat_blank_lines= NO;
  5902.  
  5903. while(loc>=limit)
  5904. if(!get_line())
  5905. return new_module;
  5906. }
  5907.  
  5908. at_beginning= BOOLEAN(!preprocessing);
  5909.  
  5910. if(prn_where)
  5911. {
  5912. prn_where= NO;
  5913.  
  5914. if(!scanning_defn)
  5915. /* 230: */
  5916. #line 5734 "./ftangle.web"
  5917. ins_ln_no()
  5918.  
  5919. /* :230 */
  5920. #line 4314 "./ftangle.web"
  5921. ;
  5922. }
  5923. else if(!suppress_newline&&
  5924. (!R77_or_F||limit==cur_buffer||free_Fortran))
  5925. return '\n';
  5926. }
  5927. else at_beginning= BOOLEAN(!preprocessing&&(loc==cur_buffer));
  5928.  
  5929. if(preprocessing)
  5930. /* 196: */
  5931. #line 4392 "./ftangle.web"
  5932.  
  5933. {
  5934. boolean found_white_space= NO;
  5935.  
  5936. do
  5937. {
  5938. if((c= *loc++)!=' '||c!=tab_mark)
  5939. break;
  5940.  
  5941. found_white_space= YES;
  5942. }
  5943. while(loc<limit);
  5944.  
  5945. /* :196 *//* 196: */
  5946. #line 4412 "./ftangle.web"
  5947.  
  5948. if(found_white_space)
  5949. return ' ';
  5950. }
  5951.  
  5952. /* :196 */
  5953. #line 4323 "./ftangle.web"
  5954.  
  5955. else
  5956. /* 197: */
  5957. #line 4423 "./ftangle.web"
  5958.  
  5959. {
  5960. if(language==TEX)
  5961. c= *loc++;
  5962. else
  5963. {
  5964. ASCII HUGE*loc0= loc;
  5965.  
  5966.  
  5967. do
  5968. {
  5969. c= *loc++;
  5970. }
  5971. while(loc<=limit&&(c==' '||c==tab_mark));
  5972.  
  5973. if(nuweb_mode)
  5974. {
  5975. if(!(c=='@'&&*loc=='#'))
  5976. {
  5977. loc= loc0;
  5978. c= *loc++;
  5979. }
  5980. }
  5981. }
  5982. }
  5983.  
  5984. /* :197 */
  5985. #line 4325 "./ftangle.web"
  5986.  
  5987.  
  5988. strt_cmnt= NO;
  5989.  
  5990. switch(language)
  5991. {
  5992. case TEX:
  5993. if(!scanning_defn)
  5994. {
  5995. if((pcode= prs_TeX_code())==MORE_PARSE)
  5996. break;
  5997. else if(pcode<0)
  5998. CONFUSION("prs_TEX_code","Negative pcode");
  5999. else
  6000. RETURN(pcode);
  6001. }
  6002.  
  6003. default:
  6004. if((pcode= prs_regular_code(MORE_PARSE))==MORE_PARSE)
  6005. break;
  6006. else if((int)pcode<0)
  6007. CONFUSION("prs_regular_code","Negative pcode");
  6008. else
  6009. RETURN(pcode);
  6010. }
  6011. }
  6012.  
  6013. DUMMY_RETURN(ignore);
  6014. }
  6015.  
  6016. /* :193 *//* 198: */
  6017. #line 4449 "./ftangle.web"
  6018.  
  6019. GOTO_CODE prs_TeX_code(VOID)
  6020. {
  6021. GOTO_CODE icode;
  6022.  
  6023.  
  6024. if(loc>limit)
  6025. return MORE_PARSE;
  6026.  
  6027. if(TeX[c]==TeX_comment)
  6028. /* 199: */
  6029. #line 4479 "./ftangle.web"
  6030.  
  6031. {
  6032. long_comment= NO;
  6033.  
  6034. if((all_cmnts_verbatim||(keep_trailing_comments&&!at_beginning))
  6035. &&!(scanning_defn&&is_WEB_macro))
  6036. {
  6037. strt_cmnt= YES;
  6038. }
  6039. else
  6040. {
  6041. loc= limit+1;
  6042.  
  6043. return MORE_PARSE;
  6044. }
  6045. }
  6046.  
  6047. /* :199 */
  6048. #line 4458 "./ftangle.web"
  6049.  
  6050.  
  6051. if(c=='@')
  6052. {
  6053. icode= get_control_code();
  6054.  
  6055. if(icode==MORE_PARSE)
  6056. return icode;
  6057.  
  6058. if((int)(icode)<0)
  6059. return prs_regular_code(icode);
  6060. else
  6061. return(eight_bits)icode;
  6062. }
  6063. else
  6064. /* 200: */
  6065. #line 4496 "./ftangle.web"
  6066.  
  6067. {
  6068. loc--;
  6069. id_first= id_loc= mod_text+1;
  6070.  
  6071. if(strt_cmnt)
  6072. *id_loc++= begin_Xmeta;
  6073.  
  6074. while(loc<limit)
  6075. {
  6076. if(*loc=='@')
  6077. {
  6078. if(*(loc+1)=='@')
  6079. *id_loc++= *loc++;
  6080. /* :200 *//* 200: */
  6081. #line 4513 "./ftangle.web"
  6082. }
  6083. else if(!strt_cmnt&&TeX[*loc]==TeX_comment&&*(loc-1)!='\\')
  6084. break;
  6085.  
  6086. *id_loc++= *loc++;
  6087. }
  6088.  
  6089. if(strt_cmnt)
  6090. *id_loc++= end_Xmeta;
  6091.  
  6092. return stringg;
  6093. }
  6094.  
  6095. /* :200 */
  6096. #line 4473 "./ftangle.web"
  6097.  
  6098. }
  6099.  
  6100. /* :198 *//* 201: */
  6101. #line 4528 "./ftangle.web"
  6102.  
  6103. GOTO_CODE prs_regular_code FCN((iswitch))
  6104. GOTO_CODE iswitch C1("")
  6105. {
  6106. GOTO_CODE icode;
  6107.  
  6108.  
  6109. switch(iswitch)
  6110. {
  6111. case MORE_PARSE:break;
  6112.  
  6113. case GOTO_MISTAKE:goto mistake;
  6114. case GOTO_GET_IDENTIFIER:goto get_identifier;
  6115. case GOTO_GET_A_STRING:goto get_a_string;
  6116. case GOTO_SKIP_A_COMMENT:goto skip_a_comment;
  6117. }
  6118.  
  6119. if(language!=LITERAL)
  6120. /* 202: */
  6121. #line 4617 "./ftangle.web"
  6122.  
  6123. {
  6124. switch(c)
  6125. {
  6126. case(ASCII)begin_comment0:
  6127. long_comment= strt_cmnt= YES;
  6128. break;
  6129.  
  6130. case(ASCII)begin_comment1:
  6131. strt_cmnt= strt_point_cmnt= YES;
  6132. long_comment= NO;
  6133. break;
  6134.  
  6135. case '/':
  6136. if(*loc=='*')
  6137. long_comment= strt_cmnt= YES;
  6138. else if(*loc=='/'&&(C_LIKE(language)||(Cpp_comments&&
  6139. !in_format&&FORTRAN_LIKE(language))))
  6140. {
  6141.  
  6142. long_comment= NO;
  6143. strt_cmnt= YES;
  6144. }
  6145. break;
  6146.  
  6147. case '!':
  6148.  
  6149.  
  6150. if((*loc=='!'||point_comments)&&FORTRAN_LIKE(language))
  6151. {
  6152. *(loc-1)= (ASCII)begin_comment1;
  6153.  
  6154. strt_cmnt= strt_point_cmnt= YES;
  6155. long_comment= NO;
  6156. }
  6157. break;
  6158. }
  6159.  
  6160. if(strt_cmnt&&all_cmnts_verbatim&&!(scanning_defn&&is_WEB_macro))
  6161. {
  6162. loc--;
  6163.  
  6164. /* 211: */
  6165. #line 5086 "./ftangle.web"
  6166.  
  6167. switch(icode= get_control_code())
  6168. {
  6169. case GOTO_MISTAKE:goto mistake;
  6170. case GOTO_GET_A_STRING:goto get_a_string;
  6171. case GOTO_GET_IDENTIFIER:goto get_identifier;
  6172. case GOTO_SKIP_A_COMMENT:goto skip_a_comment;
  6173.  
  6174. case MORE_PARSE:
  6175. default:return icode;
  6176. }
  6177.  
  6178. /* :211 */
  6179. #line 4658 "./ftangle.web"
  6180.  
  6181. }
  6182. else if(strt_cmnt||comment_continues)
  6183. {
  6184. skip_a_comment:
  6185. skip_comment();
  6186.  
  6187. if((comment_continues||!long_comment)&&
  6188. !(scanning_defn&&is_WEB_macro))return '\n';
  6189. else return MORE_PARSE;
  6190. }
  6191.  
  6192. if(loc==limit&&c==cont_char&&
  6193. (preprocessing||(auto_semi&&R77)))return MORE_PARSE;
  6194. /* :202 *//* 202: */
  6195. #line 4675 "./ftangle.web"
  6196. }
  6197.  
  6198. /* :202 */
  6199. #line 4545 "./ftangle.web"
  6200.  
  6201.  
  6202.  
  6203. if(c=='.'&&*loc=='.'&&*(loc+1)=='.')
  6204. {
  6205. ++loc;
  6206. compress(ellipsis);
  6207. }
  6208.  
  6209.  
  6210. else if(FORTRAN_LIKE(language)&&dot_constants&&
  6211. (c==wt_style.dot_delimiter.begin)&&!isDigit(*loc))
  6212. /* 208: */
  6213. #line 4893 "./ftangle.web"
  6214.  
  6215. {
  6216. ASCII HUGE*p0;
  6217. int n;
  6218. eight_bits c;
  6219. ASCII dot_end= wt_style.dot_delimiter.end;
  6220.  
  6221.  
  6222.  
  6223. for(p0= loc,n= 0;n<MAX_DOT_LENGTH;n++,loc++)
  6224. if(*loc==dot_end||!isAlpha(*loc))break;
  6225.  
  6226.  
  6227. if(*loc!=dot_end)
  6228. {
  6229. loc= p0;
  6230. goto mistake;
  6231. }
  6232.  
  6233. c= dot_code(dots,uppercase(p0,n),loc++,dot_const);
  6234.  
  6235. if(c)return c;
  6236. else
  6237. {
  6238. loc= p0;
  6239. goto mistake;
  6240. }
  6241.  
  6242. }
  6243.  
  6244. /* :208 */
  6245. #line 4557 "./ftangle.web"
  6246.  
  6247.  
  6248.  
  6249. else if(isDigit(c)||c=='\\'||c=='.')
  6250. /* 205: */
  6251. #line 4754 "./ftangle.web"
  6252.  
  6253. {
  6254. boolean decimal_point;
  6255.  
  6256.  
  6257. if(loc==limit&&c==cont_char)
  6258. {
  6259. if(preprocessing)loc++;
  6260. return(eight_bits)c;
  6261. }
  6262.  
  6263. starts_with_0= hex_constant= bin_constant= floating_constant= NO;
  6264.  
  6265. id_first= loc-1;
  6266.  
  6267. if(*id_first=='.'&&!isDigit(*loc))goto mistake;
  6268.  
  6269. if(*id_first=='\\')
  6270. {
  6271. if(*loc=='/')goto mistake;
  6272. while(isOdigit(*loc))loc++;
  6273. goto found;
  6274. }
  6275. else
  6276. {
  6277. starts_with_0= BOOLEAN(*id_first=='0');
  6278. if(starts_with_0)
  6279. {
  6280. hex_constant= BOOLEAN(*loc=='x'||*loc=='X');
  6281.  
  6282. if(hex_constant)
  6283. {
  6284. loc++;while(isXdigit(*loc))loc++;goto found;
  6285. }
  6286. else if((bin_constant= BOOLEAN(*loc=='b'||*loc=='B'))!=0)
  6287. {
  6288. loc++;
  6289. while(isBdigit(*loc))loc++;
  6290. goto found;
  6291. }
  6292. }
  6293.  
  6294. while(isDigit(*loc))loc++;
  6295. decimal_point= BOOLEAN(*loc=='.');
  6296. if(decimal_point)loc++;
  6297. while(isDigit(*loc))loc++;
  6298.  
  6299. if(FORTRAN_LIKE(language))
  6300. if(*(loc-1)=='.')
  6301. {
  6302.  
  6303.  
  6304. if(is_dot())
  6305. {
  6306. loc--;
  6307. goto found;
  6308. }
  6309. }
  6310. else if(*loc=='h'||*loc=='H')
  6311. /* 207: */
  6312. #line 4877 "./ftangle.web"
  6313.  
  6314. {
  6315. int l,n;
  6316.  
  6317.  
  6318. *loc++= '\0';
  6319.  
  6320. n= ATOI(id_first);
  6321. *(loc-1)= 'H';
  6322.  
  6323. for(l= 0;l<n;++l)++loc;
  6324.  
  6325. goto found;
  6326. }
  6327.  
  6328. /* :207 */
  6329. #line 4813 "./ftangle.web"
  6330.  
  6331.  
  6332. floating_constant= BOOLEAN(*loc=='e'||*loc=='E'||
  6333. (FORTRAN_LIKE(language)
  6334. &&(*loc=='d'||*loc=='D'||*loc=='q'||*loc=='Q')));
  6335.  
  6336. if(floating_constant)
  6337. {
  6338. if(*++loc=='+'||*loc=='-')loc++;
  6339. while(isDigit(*loc))loc++;
  6340. }
  6341.  
  6342. floating_constant|= decimal_point;
  6343. }
  6344.  
  6345. found:
  6346. if(C_LIKE(language))
  6347. {
  6348. boolean its_long= NO,its_unsigned= NO,its_constant= NO;
  6349.  
  6350. switch(*loc)
  6351. {
  6352. case 'l':
  6353. case 'L':
  6354. its_constant= its_long= YES;
  6355. break;
  6356.  
  6357. case 'u':
  6358. case 'U':
  6359. its_constant= its_unsigned= YES;
  6360. break;
  6361.  
  6362. case 'f':
  6363. case 'F':
  6364. its_constant= YES;
  6365. break;
  6366. }
  6367.  
  6368. if(its_constant)
  6369. {
  6370.  
  6371. loc++;
  6372.  
  6373.  
  6374.  
  6375. if(its_long&&(*loc=='u'||*loc=='U'))
  6376. loc++;
  6377.  
  6378. else if(its_unsigned&&(*loc=='l'||*loc=='L'))
  6379. loc++;
  6380.  
  6381. }
  6382. }
  6383. else if(Fortran88)/* 206: */
  6384. #line 4870 "./ftangle.web"
  6385.  
  6386. {
  6387. if(*loc=='_')
  6388. while(is_kind(*loc))loc++;
  6389. }
  6390.  
  6391. /* :206 */
  6392. #line 4863 "./ftangle.web"
  6393.  
  6394.  
  6395. id_loc= loc;
  6396. return constant;
  6397. }
  6398.  
  6399. /* :205 */
  6400. #line 4561 "./ftangle.web"
  6401.  
  6402.  
  6403.  
  6404. else if(is_identifier(c))
  6405. /* 30: */
  6406. #line 306 "./typedefs.hweb"
  6407.  
  6408. {
  6409. IN_COMMON ASCII HUGE*pformat,HUGE*pdata;
  6410.  
  6411. get_identifier:
  6412. /* 31: */
  6413. #line 340 "./typedefs.hweb"
  6414.  
  6415. {
  6416. id_first= --loc;
  6417.  
  6418.  
  6419. for(++loc;isAlpha(*loc)||isDigit(*loc)
  6420. ||*loc=='_'||*loc=='$'||(in_format&&*loc=='.');loc++)
  6421. ;
  6422.  
  6423. id_loc= loc;
  6424. }
  6425.  
  6426.  
  6427. /* :31 */
  6428. #line 311 "./typedefs.hweb"
  6429.  
  6430.  
  6431. if(FORTRAN_LIKE(language))
  6432. {
  6433. if(web_strcmp(pformat,pformat+6,id_first,id_loc)==EQUAL)
  6434. {
  6435.  
  6436. in_format= YES;
  6437. return begin_format_stmt;
  6438. }
  6439. else if(program==weave)
  6440. {
  6441. if(web_strcmp(pdata,pdata+4,id_first,id_loc)==EQUAL)
  6442. {
  6443. in_data= YES;
  6444. return identifier;
  6445. }
  6446. else if(at_beginning&&*loc==':'&&
  6447. !is_in(non_labels,id_first,id_loc))
  6448. return stmt_label;
  6449. }
  6450. }
  6451.  
  6452. if(is_include_like())sharp_include_line= YES;
  6453. return identifier;
  6454. }
  6455.  
  6456.  
  6457. /* :30 */
  6458. #line 4565 "./ftangle.web"
  6459.  
  6460.  
  6461.  
  6462. else if((c=='\''||c=='"')
  6463. ||(is_RATFOR_(language)&&sharp_include_line==YES&&c=='('))
  6464. {
  6465. if(language==LITERAL)
  6466. return c;
  6467. else
  6468. /* 209: */
  6469. #line 4930 "./ftangle.web"
  6470.  
  6471. get_a_string:
  6472. {
  6473. ASCII delim= c;
  6474. ASCII right_delim= c;
  6475. int level;
  6476. boolean equal_delims;
  6477.  
  6478. id_first= mod_text+1;
  6479. id_loc= mod_text;*++id_loc= delim;
  6480.  
  6481. if(delim=='(')
  6482. {
  6483. right_delim= ')';
  6484. sharp_include_line= NO;
  6485. }
  6486.  
  6487. level= 1;
  6488.  
  6489. equal_delims= BOOLEAN(right_delim==delim);
  6490.  
  6491. WHILE()
  6492. {
  6493. if(loc>=limit)
  6494. {
  6495. if((equal_delims||chk_ifelse)&&*(limit-1)!=cont_char)
  6496.  
  6497. {
  6498.  
  6499. err0_print(ERR_T,OC("String %s with '%s%c' didn't end"),3,BTRANS,delim=='\''?"\\":"",XCHR(delim));
  6500. loc= limit;break;
  6501.  
  6502. }
  6503.  
  6504. if(!get_line())
  6505. {
  6506.  
  6507. err0_print(ERR_T,OC("Input ended in middle of string \
  6508. %s with '%s%c'"),3,BTRANS,delim=='\''?"\\":"",XCHR(delim));
  6509. loc= cur_buffer;
  6510. break;
  6511.  
  6512. }
  6513. else
  6514. {
  6515. if(C_LIKE(language)&&++id_loc<=mod_end)*id_loc= '\n';
  6516.  
  6517.  
  6518.  
  6519.  
  6520. if(bslash_continued_strings)
  6521. {
  6522. for(;loc<limit;loc++)
  6523. if(*loc!=' '&&*loc!=tab_mark)break;
  6524.  
  6525. if(*loc==cont_char)loc++;
  6526. else
  6527. err0_print(ERR_T,OC("Inserted '%c' at beginning of continued \
  6528. string"),1,XCHR(cont_char));
  6529. }
  6530. }
  6531. }
  6532.  
  6533. if(!equal_delims)/* 210: */
  6534. #line 5062 "./ftangle.web"
  6535.  
  6536.  
  6537. if(*loc=='/'&&*(loc+1)=='*')
  6538. for(loc+= 2;;loc++)
  6539. {
  6540. if(loc>=limit)
  6541. if(!get_line())
  6542. {
  6543.  
  6544. err0_print(ERR_T,OC("Input ended in middle of embedded comment %s"),1,BTRANS);
  6545. loc= cur_buffer;
  6546. goto found_string;
  6547. }
  6548.  
  6549. if(*loc=='*'&&*(loc+1)=='/')
  6550. {
  6551. loc+= 2;
  6552. break;
  6553. }
  6554. }
  6555.  
  6556. /* :210 */
  6557. #line 4991 "./ftangle.web"
  6558. ;
  6559.  
  6560. if((c= *loc++)==delim)
  6561. {
  6562. level++;
  6563.  
  6564. if(++id_loc<=mod_end)*id_loc= c;
  6565.  
  6566. if(!equal_delims)continue;
  6567.  
  6568. if(*loc==delim&&!(C_LIKE(language)||
  6569. (is_RATFOR_(language)&&Ratfor77)))
  6570. ++loc;
  6571. else break;
  6572. }
  6573.  
  6574. if(c==right_delim)
  6575. if(--level==0)
  6576. {
  6577. if(++id_loc<=mod_end)*id_loc= c;
  6578. break;
  6579. }
  6580.  
  6581.  
  6582. if(R77&&c=='\'')
  6583. if(++id_loc<=mod_end)*id_loc= c;
  6584.  
  6585. if(c==cont_char)
  6586. {
  6587. if(loc>=limit&&(!is_FORTRAN_(language)||free_form_input))
  6588. continue;
  6589.  
  6590.  
  6591. if(!is_FORTRAN_(language))
  6592. {
  6593. c= *loc++;
  6594.  
  6595. if(R77)
  6596. switch(c)
  6597. {
  6598. #if(0)
  6599. #define n c
  6600. /* 258: */
  6601. #line 6453 "./ftangle.web"
  6602.  
  6603. case '0':n= '\0';break;
  6604. case '\\':n= '\\';break;
  6605. case '\'':n= '\'';break;
  6606. case '"':n= '\"';break;
  6607. case '?':n= '\?';break;
  6608. case 'a':n= '\007';break;
  6609. case 'b':n= '\b';break;
  6610. case 'f':n= '\f';break;
  6611. case 'n':n= '\n';break;
  6612. case 'r':n= '\r';break;
  6613. case 't':n= '\t';break;
  6614. case 'v':n= '\v';break;
  6615.  
  6616. /* :258 */
  6617. #line 5033 "./ftangle.web"
  6618.  
  6619. #undef n
  6620. #endif
  6621.  
  6622. case '\'':
  6623. if(++id_loc<=mod_end)*id_loc= c;
  6624. break;
  6625. }
  6626. else{if(++id_loc<=mod_end)*id_loc= '\\';}
  6627. }
  6628. }
  6629.  
  6630. if(++id_loc<=mod_end)*id_loc= c;
  6631. }
  6632.  
  6633. found_string:
  6634. if(id_loc>=mod_end){
  6635. SET_COLOR(error);
  6636. printf("\n! String too long: ");
  6637.  
  6638. ASCII_write(mod_text+1,25);
  6639. printf("...");mark_error;
  6640. }
  6641.  
  6642. id_loc++;
  6643. return stringg;
  6644. }
  6645.  
  6646. /* :209 */
  6647. #line 4574 "./ftangle.web"
  6648.  
  6649. }
  6650.  
  6651.  
  6652. else if(c=='@')
  6653. /* 211: */
  6654. #line 5086 "./ftangle.web"
  6655.  
  6656. switch(icode= get_control_code())
  6657. {
  6658. case GOTO_MISTAKE:goto mistake;
  6659. case GOTO_GET_A_STRING:goto get_a_string;
  6660. case GOTO_GET_IDENTIFIER:goto get_identifier;
  6661. case GOTO_SKIP_A_COMMENT:goto skip_a_comment;
  6662.  
  6663. case MORE_PARSE:
  6664. default:return icode;
  6665. }
  6666.  
  6667. /* :211 */
  6668. #line 4579 "./ftangle.web"
  6669.  
  6670.  
  6671.  
  6672. else if(c==' '||c==tab_mark)
  6673. if(nuweb_mode)
  6674. return(c==tab_mark?bell:c);
  6675. else
  6676. {
  6677. if(!preprocessing||loc>limit)return MORE_PARSE;
  6678.  
  6679. else return ' ';
  6680.  
  6681.  
  6682. }
  6683.  
  6684.  
  6685. else if(c=='#'&&at_beginning&&C_LIKE(language))
  6686. {
  6687. preprocessing= YES;
  6688. return MORE_PARSE;
  6689. }
  6690.  
  6691.  
  6692. else if(in_format&&c==';')
  6693. {
  6694. in_format= NO;
  6695. return end_format_stmt;
  6696. }
  6697.  
  6698.  
  6699. mistake:
  6700. if(language!=LITERAL)
  6701. /* 203: */
  6702. #line 4686 "./ftangle.web"
  6703.  
  6704. switch(c)
  6705. {
  6706. case '/':
  6707. case '\\':
  6708. if(FORTRAN_LIKE(language)&&!in_format&&(*loc=='/'))
  6709. {
  6710. if(Cpp_comments&&c=='/')break;
  6711.  
  6712.  
  6713.  
  6714. compress(slash_slash);
  6715.  
  6716. }
  6717. break;
  6718. case '+':if(*loc=='+')compress(plus_plus);break;
  6719.  
  6720. case '-':if(*loc=='-'){compress(minus_minus);}
  6721. else if(*loc=='>')compress(minus_gt);break;
  6722.  
  6723. case '=':if(*loc=='=')compress(eq_eq);break;
  6724.  
  6725. case '>':if(*loc=='='){compress(gt_eq);}
  6726. else if(*loc=='>'){compress(gt_gt);}
  6727. break;
  6728.  
  6729. case '<':if(*loc=='='){compress(lt_eq);}
  6730. else if(*loc=='<'){compress(lt_lt);}
  6731. else if(*loc=='>'){compress(not_eq);}
  6732. break;
  6733.  
  6734. case '&':if(*loc=='&')compress(and_and);break;
  6735.  
  6736. case '|':if(*loc=='|')compress(or_or);break;
  6737.  
  6738. case '!':if(*loc=='='){compress(not_eq);}break;
  6739.  
  6740. case '*':
  6741. if(FORTRAN_LIKE(language)&&(*loc=='*'))
  6742. {compress(star_star);}
  6743. break;
  6744.  
  6745. case '^':
  6746. if(*loc=='^'){compress(star_star);}
  6747. else if(FORTRAN_LIKE(language)&&(loc<limit))return star_star;
  6748. break;
  6749.  
  6750. case '#':
  6751. if(*loc=='#'){compress(paste);}
  6752. else if(*loc=='<')
  6753. {
  6754. loc++;
  6755. mac_mod_name= YES;
  6756. /* 214: */
  6757. #line 5273 "./ftangle.web"
  6758.  
  6759. {
  6760. ASCII HUGE*k;
  6761. static ASCII ell[]= "...";
  6762.  
  6763.  
  6764. /* 216: */
  6765. #line 5305 "./ftangle.web"
  6766.  
  6767. {
  6768. int mlevel= 1;
  6769.  
  6770.  
  6771. k= mod_text;
  6772.  
  6773. WHILE()
  6774. {
  6775. if(loc>limit&&!get_line())
  6776. {
  6777.  
  6778. err0_print(ERR_T,OC("Input ended in section name %s"),1,BTRANS);
  6779.  
  6780. loc= cur_buffer+1;break;
  6781. }
  6782.  
  6783. c= *loc;
  6784. /* 217: */
  6785. #line 5353 "./ftangle.web"
  6786.  
  6787.  
  6788. if(c=='@')
  6789. {
  6790. c= *(loc+1);
  6791.  
  6792. if(c=='>')
  6793. {
  6794. if(--mlevel==0)
  6795. {
  6796. loc+= 2;break;
  6797.  
  6798. }
  6799. }
  6800. else if(c=='<')mlevel++;
  6801.  
  6802. if(ccode[c]==new_module)
  6803. {
  6804.  
  6805. err0_print(ERR_T,OC("Section name %s didn't end"),1,BTRANS);
  6806.  
  6807. break;
  6808. }
  6809.  
  6810. *(++k)= '@';loc++;
  6811.  
  6812. }
  6813.  
  6814. /* :217 */
  6815. #line 5321 "./ftangle.web"
  6816. ;
  6817. loc++;
  6818.  
  6819. if(k<mod_end)k++;
  6820.  
  6821. switch(c)
  6822. {
  6823. case ' ':
  6824. case tab_mark:
  6825. c= ' ';if(*(k-1)==' ')k--;
  6826.  
  6827. break;
  6828.  
  6829. case ';':
  6830. c= interior_semi;
  6831. break;
  6832. }
  6833.  
  6834. *k= c;
  6835. }
  6836.  
  6837. if(k>=mod_end){
  6838. SET_COLOR(warning);
  6839. printf("\n! Section name too long: ");
  6840.  
  6841. ASCII_write(mod_text+1,25);
  6842. printf("...");mark_harmless;
  6843. }
  6844.  
  6845. if(*k==' '&&k>mod_text)k--;
  6846.  
  6847. }
  6848.  
  6849. /* :216 */
  6850. #line 5279 "./ftangle.web"
  6851.  
  6852.  
  6853. if(k-mod_text>3&&STRNCMP(k-2,ell,3)==0)
  6854. cur_module= prefix_lookup(mod_text+1,k-3);
  6855. else cur_module= mod_lookup(mod_text+1,k);
  6856.  
  6857. if(cur_module!=NULL)
  6858. {
  6859. set_output_file(cur_module->mod_info->language);
  6860.  
  6861. }
  6862.  
  6863. return module_name;
  6864. }
  6865.  
  6866. /* :214 */
  6867. #line 4739 "./ftangle.web"
  6868. ;
  6869. }
  6870. break;
  6871.  
  6872. case ':':if(*loc==':')compress(colon_colon);break;
  6873.  
  6874. }
  6875.  
  6876.  
  6877. /* :203 */
  6878. #line 4610 "./ftangle.web"
  6879.  
  6880.  
  6881. return(eight_bits)c;
  6882. }
  6883.  
  6884.  
  6885. /* :201 *//* 212: */
  6886. #line 5099 "./ftangle.web"
  6887.  
  6888. GOTO_CODE get_control_code(VOID)
  6889. {
  6890. eight_bits cc;
  6891.  
  6892. c= *loc++;
  6893. SET_CASE(c);
  6894.  
  6895.  
  6896. if(c==(ASCII)begin_comment1||c==(ASCII)begin_comment0)
  6897. {
  6898. c= *(loc-1)= '/';
  6899.  
  6900. strt_cmnt= YES;
  6901. }
  6902.  
  6903. switch(cc= ccode[c])
  6904. {
  6905. case ignore:return MORE_PARSE;
  6906.  
  6907.  
  6908.  
  6909.  
  6910. /* 10: */
  6911. #line 78 "./typedefs.hweb"
  6912.  
  6913.  
  6914. case begin_C:
  6915. case begin_RATFOR:
  6916. case begin_FORTRAN:
  6917. case begin_LITERAL
  6918.  
  6919.  
  6920.  
  6921. /* :10 */
  6922. #line 5121 "./ftangle.web"
  6923. :
  6924. loc--;
  6925.  
  6926. case L_switch:
  6927. {
  6928. /* 21: */
  6929. #line 137 "./typedefs.hweb"
  6930.  
  6931. {
  6932. ASCII l= *loc++;
  6933.  
  6934. switch(l)
  6935. {
  6936. /* 11: */
  6937. #line 93 "./typedefs.hweb"
  6938.  
  6939. case 'c':case 'C'
  6940.  
  6941. /* :11 */
  6942. #line 143 "./typedefs.hweb"
  6943. :
  6944. Cpp= BOOLEAN(*loc=='+');
  6945. break;
  6946.  
  6947. /* 12: */
  6948. #line 96 "./typedefs.hweb"
  6949.  
  6950. case 'r':case 'R'
  6951.  
  6952. /* :12 */
  6953. #line 147 "./typedefs.hweb"
  6954. :
  6955. /* 13: */
  6956. #line 99 "./typedefs.hweb"
  6957.  
  6958. case 'n':case 'N'
  6959.  
  6960. /* :13 */
  6961. #line 148 "./typedefs.hweb"
  6962. :
  6963. Fortran88= BOOLEAN(*loc=='9');
  6964. break;
  6965.  
  6966. /* 15: */
  6967. #line 105 "./typedefs.hweb"
  6968.  
  6969. case 'v':case 'V'
  6970.  
  6971.  
  6972.  
  6973. /* :15 */
  6974. #line 152 "./typedefs.hweb"
  6975. :
  6976. /* 14: */
  6977. #line 102 "./typedefs.hweb"
  6978.  
  6979. case 'x':case 'X'
  6980.  
  6981. /* :14 */
  6982. #line 153 "./typedefs.hweb"
  6983. :
  6984. break;
  6985.  
  6986. default:
  6987.  
  6988. err0_print(ERR_C,OC("! Invalid language command `@L%c' ignored"),1,XCHR(l));
  6989. break;
  6990. }
  6991.  
  6992. opt_args(l);
  6993.  
  6994. }
  6995.  
  6996.  
  6997. /* :21 */
  6998. #line 5126 "./ftangle.web"
  6999.  
  7000. set_output_file(language);
  7001. return begin_language;
  7002. }
  7003.  
  7004. case control_text:while((c= skip_ahead(ignore,NO))=='@');
  7005.  
  7006.  
  7007. if(*(loc-1)!='>')
  7008.  
  7009. err0_print(ERR_T,OC("Improper @ within control text %s"),1,BTRANS);
  7010.  
  7011.  
  7012. return MORE_PARSE;
  7013.  
  7014. case module_name:
  7015. mac_mod_name= NO;
  7016. /* 214: */
  7017. #line 5273 "./ftangle.web"
  7018.  
  7019. {
  7020. ASCII HUGE*k;
  7021. static ASCII ell[]= "...";
  7022.  
  7023.  
  7024. /* 216: */
  7025. #line 5305 "./ftangle.web"
  7026.  
  7027. {
  7028. int mlevel= 1;
  7029.  
  7030.  
  7031. k= mod_text;
  7032.  
  7033. WHILE()
  7034. {
  7035. if(loc>limit&&!get_line())
  7036. {
  7037.  
  7038. err0_print(ERR_T,OC("Input ended in section name %s"),1,BTRANS);
  7039.  
  7040. loc= cur_buffer+1;break;
  7041. }
  7042.  
  7043. c= *loc;
  7044. /* 217: */
  7045. #line 5353 "./ftangle.web"
  7046.  
  7047.  
  7048. if(c=='@')
  7049. {
  7050. c= *(loc+1);
  7051.  
  7052. if(c=='>')
  7053. {
  7054. if(--mlevel==0)
  7055. {
  7056. loc+= 2;break;
  7057.  
  7058. }
  7059. }
  7060. else if(c=='<')mlevel++;
  7061.  
  7062. if(ccode[c]==new_module)
  7063. {
  7064.  
  7065. err0_print(ERR_T,OC("Section name %s didn't end"),1,BTRANS);
  7066.  
  7067. break;
  7068. }
  7069.  
  7070. *(++k)= '@';loc++;
  7071.  
  7072. }
  7073.  
  7074. /* :217 */
  7075. #line 5321 "./ftangle.web"
  7076. ;
  7077. loc++;
  7078.  
  7079. if(k<mod_end)k++;
  7080.  
  7081. switch(c)
  7082. {
  7083. case ' ':
  7084. case tab_mark:
  7085. c= ' ';if(*(k-1)==' ')k--;
  7086.  
  7087. break;
  7088.  
  7089. case ';':
  7090. c= interior_semi;
  7091. break;
  7092. }
  7093.  
  7094. *k= c;
  7095. }
  7096.  
  7097. if(k>=mod_end){
  7098. SET_COLOR(warning);
  7099. printf("\n! Section name too long: ");
  7100.  
  7101. ASCII_write(mod_text+1,25);
  7102. printf("...");mark_harmless;
  7103. }
  7104.  
  7105. if(*k==' '&&k>mod_text)k--;
  7106.  
  7107. }
  7108.  
  7109. /* :216 */
  7110. #line 5279 "./ftangle.web"
  7111.  
  7112.  
  7113. if(k-mod_text>3&&STRNCMP(k-2,ell,3)==0)
  7114. cur_module= prefix_lookup(mod_text+1,k-3);
  7115. else cur_module= mod_lookup(mod_text+1,k);
  7116.  
  7117. if(cur_module!=NULL)
  7118. {
  7119. set_output_file(cur_module->mod_info->language);
  7120.  
  7121. }
  7122.  
  7123. return module_name;
  7124. }
  7125.  
  7126. /* :214 */
  7127. #line 5142 "./ftangle.web"
  7128. ;
  7129.  
  7130. case stringg:
  7131. /* 221: */
  7132. #line 5488 "./ftangle.web"
  7133.  
  7134. {
  7135. id_first= loc;
  7136.  
  7137.  
  7138. *(limit+1)= '@';*(limit+2)= '>';
  7139.  
  7140.  
  7141. while(*loc!='@'||*(loc+1)!='>')
  7142. loc++;
  7143.  
  7144.  
  7145. if(loc>=limit)
  7146. err0_print(ERR_T,OC("Verbatim string %s didn't end"),1,BTRANS);
  7147.  
  7148.  
  7149. id_loc= loc;
  7150. loc+= 2;
  7151.  
  7152. return stringg;
  7153. }
  7154.  
  7155. /* :221 */
  7156. #line 5145 "./ftangle.web"
  7157. ;
  7158.  
  7159. case begin_vcmnt:
  7160.  
  7161.  
  7162. if(strt_cmnt||*loc=='*'||*loc=='/')
  7163. if(!(scanning_defn&&is_WEB_macro)&&!deferred_macro)
  7164. {
  7165. if(!strt_point_cmnt)long_comment= 
  7166. BOOLEAN(!(*loc=='/'));
  7167. /* 218: */
  7168. #line 5383 "./ftangle.web"
  7169.  
  7170. {
  7171. loc--;
  7172.  
  7173.  
  7174. id_first= id_loc= mod_text+1;
  7175.  
  7176.  
  7177. if(!C_LIKE(language))
  7178. {
  7179. loc++;
  7180. /* 220: */
  7181. #line 5476 "./ftangle.web"
  7182.  
  7183. {
  7184. if(R66)*id_loc++= '#';
  7185. else*id_loc++= '\n';
  7186.  
  7187. }
  7188.  
  7189. /* :220 */
  7190. #line 5394 "./ftangle.web"
  7191. ;
  7192. }
  7193.  
  7194. WHILE()
  7195. {
  7196. if(loc>limit)
  7197. if(!long_comment)/* 219: */
  7198. #line 5455 "./ftangle.web"
  7199.  
  7200. {
  7201. if(C_LIKE(language))
  7202. {
  7203.  
  7204. if(!long_comment&&!Cpp)
  7205. {
  7206. *id_loc++= id_first[1]= '*';
  7207. *id_loc++= id_first[0]= '/';
  7208. }
  7209. }
  7210. else
  7211. {
  7212. if(long_comment)id_loc-= 2;
  7213. }
  7214.  
  7215. break;
  7216. }
  7217.  
  7218. /* :219 */
  7219. #line 5400 "./ftangle.web"
  7220.  
  7221. else if(!get_line())
  7222. {
  7223.  
  7224. err0_print(ERR_T,OC("Input ended in verbatim comment %s"),1,BTRANS);
  7225.  
  7226. loc= cur_buffer+1;
  7227. break;
  7228. }
  7229. else
  7230. {
  7231. *id_loc++= '\n';
  7232.  
  7233. if(R66)
  7234. {
  7235. *id_loc++= '#';
  7236. *id_loc++= ' ';
  7237. }
  7238. }
  7239.  
  7240. if(id_loc<mod_end-3)
  7241. *id_loc++= *loc++;
  7242. else
  7243. {
  7244. SET_COLOR(warning);
  7245. printf("\n! Verbatim comment too long: ");
  7246.  
  7247. ASCII_write(mod_text,25);
  7248. printf("...");mark_harmless;
  7249.  
  7250. id_loc= mod_end-3;
  7251. *id_loc++= '*';*id_loc++= '/';
  7252.  
  7253. comment_continues= YES;
  7254.  
  7255. goto finish_vcmnt;
  7256. }
  7257.  
  7258.  
  7259. if(long_comment&&*loc=='/'&&*(loc-1)=='*')
  7260. {
  7261. *id_loc++= *loc++;
  7262. /* 219: */
  7263. #line 5455 "./ftangle.web"
  7264.  
  7265. {
  7266. if(C_LIKE(language))
  7267. {
  7268.  
  7269. if(!long_comment&&!Cpp)
  7270. {
  7271. *id_loc++= id_first[1]= '*';
  7272. *id_loc++= id_first[0]= '/';
  7273. }
  7274. }
  7275. else
  7276. {
  7277. if(long_comment)id_loc-= 2;
  7278. }
  7279.  
  7280. break;
  7281. }
  7282.  
  7283. /* :219 */
  7284. #line 5441 "./ftangle.web"
  7285.  
  7286. }
  7287. }
  7288.  
  7289. finish_vcmnt:
  7290. if(!C_LIKE(language))
  7291. {
  7292. *id_loc++= '\0';
  7293. }
  7294. return stringg;
  7295. }
  7296.  
  7297.  
  7298. /* :218 */
  7299. #line 5155 "./ftangle.web"
  7300.  
  7301. }
  7302. else return GOTO_SKIP_A_COMMENT;
  7303. else return MORE_PARSE;
  7304.  
  7305.  
  7306. case invisible_cmnt:
  7307.  
  7308.  
  7309. if(*loc=='%')
  7310. eat_blank_lines= YES;
  7311.  
  7312. loc= limit+1;
  7313.  
  7314. suppress_newline= YES;
  7315. return MORE_PARSE;
  7316.  
  7317. case compiler_directive:
  7318. {
  7319. int n;
  7320. outer_char*s= t_style.cdir_start[language_num];
  7321.  
  7322. id_first= id_loc= mod_text+1;
  7323.  
  7324. *id_loc++= cdir;
  7325.  
  7326.  
  7327. STRCPY(id_loc,s);
  7328. to_ASCII((outer_char HUGE*)id_loc);
  7329. id_loc+= STRLEN(s);
  7330.  
  7331.  
  7332. STRNCPY(id_loc,loc,n= limit-loc);
  7333. id_loc+= n;
  7334.  
  7335. *id_loc++= cdir;
  7336. *id_loc++= '\0';
  7337.  
  7338. loc= limit+1;
  7339. return stringg;
  7340. }
  7341.  
  7342. case Compiler_Directive:
  7343. {
  7344. outer_char*s= t_style.cdir_start[language_num];
  7345.  
  7346. id_first= id_loc= mod_text+1;
  7347.  
  7348. *id_loc++= cdir;
  7349. preprocessing= in_cdir= YES;
  7350. at_beginning= NO;
  7351.  
  7352.  
  7353. STRCPY(id_loc,s);
  7354. to_ASCII((outer_char HUGE*)id_loc);
  7355. id_loc+= STRLEN(s);
  7356.  
  7357. return stringg;
  7358. }
  7359.  
  7360. case new_output_file:
  7361.  
  7362. /* 32: */
  7363. #line 354 "./typedefs.hweb"
  7364.  
  7365. {
  7366. while(*loc==' '||*loc==tab_mark)
  7367. {
  7368. loc++;
  7369. if(loc>limit)return ignore;
  7370. }
  7371.  
  7372. id_first= loc;
  7373. while(*loc!=' '&&*loc!=tab_mark)loc++;
  7374. id_loc= loc;
  7375. if(*id_first=='"')id_first++;
  7376. if(*(id_loc-1)=='"')id_loc--;
  7377. if(id_loc-id_first>=MAX_FILE_NAME_LENGTH)
  7378. {
  7379.  
  7380. err0_print(ERR_T,OC("Output file name too long; allowed only %d characters"),1,MAX_FILE_NAME_LENGTH-1);
  7381. id_loc= id_first+MAX_FILE_NAME_LENGTH-1;
  7382. }
  7383. }
  7384.  
  7385.  
  7386. /* :32 */
  7387. #line 5215 "./ftangle.web"
  7388.  
  7389. loc= limit+1;
  7390.  
  7391. return cc;
  7392.  
  7393. case ascii_constant:
  7394. if(translate_ASCII)/* 213: */
  7395. #line 5243 "./ftangle.web"
  7396.  
  7397. {
  7398. ASCII delim= *(loc-1);
  7399.  
  7400.  
  7401. id_first= loc-1;
  7402.  
  7403.  
  7404. while(*loc!=delim)
  7405. {
  7406. if(*loc=='\\')
  7407. if(*++loc==delim)
  7408. {
  7409.  
  7410. loc++;
  7411. continue;
  7412. }
  7413.  
  7414. loc++;
  7415.  
  7416. if(loc>limit)
  7417. {
  7418.  
  7419. err0_print(ERR_T,OC("ASCII string %s didn't end"),1,BTRANS);
  7420. loc= limit-1;break;
  7421. }
  7422. }
  7423.  
  7424. loc++;
  7425.  
  7426. return ascii_constant;
  7427. }
  7428.  
  7429. /* :213 */
  7430. #line 5220 "./ftangle.web"
  7431.  
  7432. else
  7433. {
  7434. c= *(loc-1);
  7435.  
  7436. return GOTO_GET_A_STRING;
  7437. }
  7438.  
  7439. case big_line_break:
  7440.  
  7441. if(loc>=limit)return MORE_PARSE;
  7442.  
  7443. /* 33: */
  7444. #line 382 "./typedefs.hweb"
  7445.  
  7446. {
  7447. boolean mcode;
  7448.  
  7449. *limit= ' ';
  7450. id_first= loc;
  7451.  
  7452. while(isAlpha(*loc))loc++;
  7453.  
  7454. if((mcode= is_mcmd(mcmds,id_first,loc))!=0)
  7455. {
  7456. while(loc<limit&&(*loc==' '||*loc==tab_mark))
  7457. loc++;
  7458.  
  7459. return mcode;
  7460. }
  7461.  
  7462. loc= id_first;
  7463. }
  7464.  
  7465.  
  7466. /* :33 */
  7467. #line 5231 "./ftangle.web"
  7468. ;
  7469. return MORE_PARSE;
  7470.  
  7471. case USED_BY_NEITHER:
  7472.  
  7473. err0_print(ERR_T,OC("Invalid `@%c' ignored"),1,XCHR(c));
  7474. return ignore;
  7475.  
  7476. default:return cc;
  7477. }
  7478. }
  7479.  
  7480. /* :212 */
  7481. #line 38 "./ftangle.web"
  7482.  
  7483. #endif 
  7484.  
  7485.  
  7486. #if(part == 0 || part == 3)
  7487. /* 223: */
  7488. #line 5542 "./ftangle.web"
  7489.  
  7490.  
  7491. SRTN scan_repl FCN((t,stop))
  7492. eight_bits t C0("Either |macro| or |module_name|.")
  7493. boolean stop C1("IF |YES|, stops the scan at the end of current\
  7494. line.")
  7495. {
  7496. eight_bits a0= ignore;
  7497. sixteen_bits a;
  7498. LANGUAGE language0;
  7499. int ntoken= 2;
  7500. boolean auto_bp= YES;
  7501.  
  7502. boolean scanning_meta= NO;
  7503.  
  7504. language0= language;
  7505.  
  7506. stop_the_scan= stop;
  7507.  
  7508. if(t==module_name)
  7509. /* 230: */
  7510. #line 5734 "./ftangle.web"
  7511. ins_ln_no()
  7512.  
  7513. /* :230 */
  7514. #line 5562 "./ftangle.web"
  7515. ;
  7516. else if(stop)
  7517. /* 229: */
  7518. #line 5726 "./ftangle.web"
  7519.  
  7520. {
  7521. *limit= ' ';
  7522. *(limit+1)= '@';
  7523. *(limit+2)= 'm';
  7524. }
  7525.  
  7526. /* :229 */
  7527. #line 5564 "./ftangle.web"
  7528.  
  7529.  
  7530. WHILE()
  7531. {
  7532. if(stop)
  7533. {
  7534. while(loc<=limit)
  7535. if(*loc!=' ')break;
  7536. else loc++;
  7537.  
  7538. if(loc>limit)goto done;
  7539. }
  7540.  
  7541.  
  7542.  
  7543.  
  7544. if(ntoken)
  7545. ntoken--;
  7546.  
  7547. a0= (ntoken&&nuweb_mode&&t==module_name)
  7548. ?begin_meta:get_next();
  7549.  
  7550.  
  7551. reswitch:
  7552. switch(a0)
  7553. {
  7554. case '\\':
  7555. if(loc==limit&&language!=LITERAL)
  7556. {
  7557. if(!get_line())
  7558. FATAL("!! Input ended while scanning \
  7559. WEB preprocessor statement","");
  7560. /* 229: */
  7561. #line 5726 "./ftangle.web"
  7562.  
  7563. {
  7564. *limit= ' ';
  7565. *(limit+1)= '@';
  7566. *(limit+2)= 'm';
  7567. }
  7568.  
  7569. /* :229 */
  7570. #line 5595 "./ftangle.web"
  7571.  
  7572. }
  7573. else
  7574. {
  7575. app_repl(a0);
  7576.  
  7577. if(language==LITERAL)
  7578. loc++;
  7579. }
  7580. break;
  7581.  
  7582. case '#':
  7583. if(t==macro&&is_WEB_macro)
  7584. /* 241: */
  7585. #line 6120 "./ftangle.web"
  7586.  
  7587. {
  7588. switch(*loc)
  7589. {
  7590. case ':':
  7591. /* 242: */
  7592. #line 6146 "./ftangle.web"
  7593.  
  7594. {
  7595. outer_char temp[N_IDBUF];
  7596. ASCII HUGE*t;
  7597.  
  7598.  
  7599. loc++;
  7600.  
  7601.  
  7602.  
  7603. if(*loc!='0')
  7604. {
  7605. app_repl('#');
  7606. app_repl(':');
  7607. break;
  7608. }
  7609.  
  7610. loc++;
  7611.  
  7612. if(
  7613. nsprintf(temp,OC("%lu"),1,max_stmt++)>=(int)(N_IDBUF))OVERFLW("temp","");
  7614. to_ASCII(temp);
  7615.  
  7616.  
  7617. app_repl(constant);
  7618.  
  7619. for(t= (ASCII*)temp;*t!='\0';t++)app_repl(*t);
  7620.  
  7621. app_repl(constant);
  7622. }
  7623.  
  7624. /* :242 */
  7625. #line 6125 "./ftangle.web"
  7626. break;
  7627.  
  7628. case '!':
  7629. if(scanning_defn)/* 244: */
  7630. #line 6212 "./ftangle.web"
  7631.  
  7632. {
  7633. sixteen_bits a;
  7634.  
  7635.  
  7636. loc++;
  7637.  
  7638. if(get_next()!=identifier)
  7639.  
  7640. err0_print(ERR_M,OC("Identifier must follow #!; command ignored"),0);
  7641. else
  7642. {
  7643. text_pointer m;
  7644.  
  7645.  
  7646. a= ID_NUM(id_first,id_loc);
  7647.  
  7648.  
  7649.  
  7650. if((m= MAC_LOOKUP(a))==NULL)
  7651. {
  7652. app_repl('#');
  7653. app_repl('!');
  7654. /* 232: */
  7655. #line 5763 "./ftangle.web"
  7656.  
  7657. {
  7658. app_repl(LEFT(a,ID0));
  7659. app_repl(RIGHT(a));
  7660. }
  7661.  
  7662. /* :232 */
  7663. #line 6234 "./ftangle.web"
  7664. ;
  7665. break;
  7666. }
  7667. else
  7668. if(m->nargs>0)
  7669.  
  7670. err0_print(ERR_M,OC("Macro after #! may not have arguments"),0);
  7671. else/* 245: */
  7672. #line 6245 "./ftangle.web"
  7673.  
  7674. {
  7675. eight_bits HUGE*q0,HUGE*q1;
  7676.  
  7677.  
  7678. q0= m->tok_start+m->moffset;
  7679. q1= (m+1)->tok_start;
  7680.  
  7681.  
  7682. while(q0<q1)app_repl(*q0++);
  7683. }
  7684.  
  7685. /* :245 */
  7686. #line 6240 "./ftangle.web"
  7687.  
  7688. }
  7689. }
  7690.  
  7691. /* :244 */
  7692. #line 6128 "./ftangle.web"
  7693.  
  7694. else app_repl('#');
  7695. break;
  7696.  
  7697. case '\'':
  7698. case '"':
  7699. app_repl(a0);
  7700. app_repl(*loc++);
  7701. break;
  7702.  
  7703. default:
  7704. /* 243: */
  7705. #line 6176 "./ftangle.web"
  7706.  
  7707. {
  7708. sixteen_bits a;
  7709.  
  7710.  
  7711. if(isDigit(*loc)||*loc==','||*loc=='&'||*loc=='*'||*loc=='.'||
  7712. *loc=='['||*loc=='{')
  7713.  
  7714.  
  7715. {app_repl('#');}
  7716. else if(get_next()!=identifier)
  7717.  
  7718. macro_err(OC("! '#' should be followed by identifier"),YES);
  7719. else
  7720. {
  7721. a= ID_NUM(id_first,id_loc);
  7722.  
  7723.  
  7724.  
  7725.  
  7726. if((MAC_LOOKUP(a))==NULL)
  7727. {
  7728. app_repl('#');
  7729. /* 232: */
  7730. #line 5763 "./ftangle.web"
  7731.  
  7732. {
  7733. app_repl(LEFT(a,ID0));
  7734. app_repl(RIGHT(a));
  7735. }
  7736.  
  7737. /* :232 */
  7738. #line 6198 "./ftangle.web"
  7739. ;
  7740. break;
  7741. }
  7742.  
  7743.  
  7744.  
  7745. macro_err(OC("! Immediate expansion of macro \"%s\" not implemented"),YES,name_of(a));
  7746. /* 232: */
  7747. #line 5763 "./ftangle.web"
  7748.  
  7749. {
  7750. app_repl(LEFT(a,ID0));
  7751. app_repl(RIGHT(a));
  7752. }
  7753.  
  7754. /* :232 */
  7755. #line 6205 "./ftangle.web"
  7756. ;
  7757. }
  7758. }
  7759.  
  7760. /* :243 */
  7761. #line 6139 "./ftangle.web"
  7762.  
  7763. break;
  7764. }
  7765. }
  7766.  
  7767. /* :241 */
  7768. #line 5608 "./ftangle.web"
  7769.  
  7770. else
  7771. {
  7772. app_repl(a0);
  7773. }
  7774. break;
  7775.  
  7776. /* 234: */
  7777. #line 5776 "./ftangle.web"
  7778.  
  7779.  
  7780. case identifier:
  7781. /* 233: */
  7782. #line 5770 "./ftangle.web"
  7783.  
  7784.  
  7785. a= ID_NUM(id_first,id_loc);
  7786. /* 232: */
  7787. #line 5763 "./ftangle.web"
  7788.  
  7789. {
  7790. app_repl(LEFT(a,ID0));
  7791. app_repl(RIGHT(a));
  7792. }
  7793.  
  7794. /* :232 */
  7795. #line 5773 "./ftangle.web"
  7796.  
  7797.  
  7798. /* :233 */
  7799. #line 5779 "./ftangle.web"
  7800.  
  7801. break;
  7802.  
  7803. case module_name:
  7804.  
  7805.  
  7806.  
  7807. if(t==macro&&!mac_mod_name)
  7808. goto done;
  7809. else
  7810. {
  7811. /* 246: */
  7812. #line 6258 "./ftangle.web"
  7813.  
  7814. {
  7815. ASCII HUGE*try_loc= loc;
  7816.  
  7817.  
  7818. while(*try_loc==' '&&try_loc<limit)try_loc++;
  7819. if(*try_loc=='+'&&try_loc<limit)try_loc++;
  7820. while(*try_loc==' '&&try_loc<limit)try_loc++;
  7821. if(*try_loc=='=')
  7822.  
  7823. err0_print(ERR_T,OC("Nested named modules.  Missing `@*' or `@ '?"),0);
  7824.  
  7825. }
  7826.  
  7827. /* :246 */
  7828. #line 5790 "./ftangle.web"
  7829. ;
  7830. a= cur_module-name_dir;
  7831. app_repl(LEFT(a,0250));
  7832. app_repl(RIGHT(a));
  7833. /* 230: */
  7834. #line 5734 "./ftangle.web"
  7835. ins_ln_no()
  7836.  
  7837. /* :230 */
  7838. #line 5794 "./ftangle.web"
  7839. ;
  7840. if(nuweb_mode)
  7841. {
  7842. a0= begin_meta;
  7843. goto reswitch;
  7844. }
  7845. break;
  7846. }
  7847.  
  7848. case constant:
  7849. case stringg:
  7850. /* 247: */
  7851. #line 6272 "./ftangle.web"
  7852.  
  7853.  
  7854. if(C_LIKE(language))
  7855. if(bin_constant&&a0==constant)/* 255: */
  7856. #line 6404 "./ftangle.web"
  7857.  
  7858. {
  7859. app_converted(btoi(id_first,id_loc));
  7860.  
  7861. }
  7862.  
  7863. /* :255 */
  7864. #line 6275 "./ftangle.web"
  7865.  
  7866. else copy_string(a0);
  7867. else if(a0==constant)
  7868. if(hex_constant)/* 250: */
  7869. #line 6341 "./ftangle.web"
  7870.  
  7871. {
  7872. app_converted(xtoi(id_first,id_loc));
  7873.  
  7874. }
  7875.  
  7876. /* :250 */
  7877. #line 6278 "./ftangle.web"
  7878.  
  7879. else if(bin_constant)/* 255: */
  7880. #line 6404 "./ftangle.web"
  7881.  
  7882. {
  7883. app_converted(btoi(id_first,id_loc));
  7884.  
  7885. }
  7886.  
  7887. /* :255 */
  7888. #line 6279 "./ftangle.web"
  7889.  
  7890. else if(starts_with_0&&!floating_constant)/* 253: */
  7891. #line 6383 "./ftangle.web"
  7892.  
  7893. {
  7894. app_converted(otoi(id_first,id_loc));
  7895. }
  7896.  
  7897. /* :253 */
  7898. #line 6281 "./ftangle.web"
  7899.  
  7900. else copy_string(a0);
  7901. else if(R77&&a0==stringg&&!in_format)
  7902. if(*id_first=='\'')rdc_char_constant();
  7903. else
  7904. {
  7905.  
  7906.  
  7907. if(*id_first=='"')*id_first= *(id_loc-1)= '\'';
  7908. copy_string(a0);
  7909. }
  7910. else copy_string(a0);
  7911.  
  7912. break;
  7913.  
  7914. /* :247 */
  7915. #line 5805 "./ftangle.web"
  7916. ;
  7917.  
  7918. case ascii_constant:
  7919. cp_ASCII();
  7920. break;
  7921.  
  7922. case begin_meta:
  7923. /* 235: */
  7924. #line 5941 "./ftangle.web"
  7925.  
  7926. {
  7927. app_repl(stringg);
  7928. app_repl(a0);
  7929.  
  7930.  
  7931. if(FORTRAN_LIKE(language))
  7932. {
  7933. column_mode= NO;
  7934. app_repl('\n');
  7935. }
  7936.  
  7937. scanning_meta= YES;
  7938.  
  7939. }
  7940.  
  7941. /* :235 */
  7942. #line 5812 "./ftangle.web"
  7943.  
  7944. break;
  7945.  
  7946. case end_meta:
  7947. /* 288: */
  7948. #line 7600 "./ftangle.web"
  7949.  
  7950.  
  7951. if(FORTRAN_LIKE(language)&&!free_form_input)
  7952. /* 289: */
  7953. #line 7606 "./ftangle.web"
  7954.  
  7955. {
  7956. loc= limit+1;
  7957. column_mode= YES;
  7958. parsing_mode= OUTER;
  7959. }
  7960.  
  7961. /* :289 */
  7962. #line 7603 "./ftangle.web"
  7963.  
  7964.  
  7965. /* :288 */
  7966. #line 5816 "./ftangle.web"
  7967. ;
  7968. get_line();
  7969. app_repl(end_meta);
  7970. app_repl(stringg);
  7971. scanning_meta= NO;
  7972. break;
  7973.  
  7974. case dot_const:
  7975. app_repl(a0);
  7976. app_repl(dot_op.num);
  7977.  
  7978. break;
  7979.  
  7980. case begin_language:
  7981. switch(language)
  7982. {
  7983. case NO_LANGUAGE:
  7984. CONFUSION("scan_repl:begin_language","Language isn't defined");
  7985.  
  7986. case RATFOR:
  7987. case RATFOR_90:
  7988. if(!RAT_OK("(scan_repl)"))
  7989. CONFUSION("scan_repl:begin_language",
  7990. "Attempting to append @Lr");
  7991.  
  7992. case C:
  7993. case C_PLUS_PLUS:
  7994. case LITERAL:
  7995. column_mode= NO;
  7996. break;
  7997.  
  7998. case FORTRAN:
  7999. case FORTRAN_90:
  8000. case TEX:
  8001. if(!(scanning_defn||free_form_input))
  8002. /* 289: */
  8003. #line 7606 "./ftangle.web"
  8004.  
  8005. {
  8006. loc= limit+1;
  8007. column_mode= YES;
  8008. parsing_mode= OUTER;
  8009. }
  8010.  
  8011. /* :289 */
  8012. #line 5851 "./ftangle.web"
  8013.  
  8014. break;
  8015.  
  8016. default:
  8017. CONFUSION("app_id","Invalid language");
  8018. }
  8019.  
  8020.  
  8021.  
  8022.  
  8023. set_output_file(language);
  8024. if(!scanning_defn)
  8025. {app_repl(a0);app_repl((eight_bits)language);}
  8026. /* 290: */
  8027. #line 7614 "./ftangle.web"
  8028.  
  8029. {
  8030. store_two_bytes((sixteen_bits)(LINE_NUM+module_count));
  8031. }
  8032.  
  8033. /* :290 */
  8034. #line 5864 "./ftangle.web"
  8035.  
  8036. /* 230: */
  8037. #line 5734 "./ftangle.web"
  8038. ins_ln_no()
  8039.  
  8040. /* :230 */
  8041. #line 5865 "./ftangle.web"
  8042. ;
  8043. break;
  8044.  
  8045. case no_mac_expand:
  8046. app_repl(begin_language);
  8047. app_repl(a0);
  8048. break;
  8049.  
  8050. case new_output_file:
  8051. if(t==macro)
  8052. goto done;
  8053. else
  8054. {
  8055. name_pointer np;
  8056.  
  8057. app_repl(begin_language);
  8058.  
  8059. app_repl(NO_LANGUAGE);
  8060. app_repl(upper_case_code);
  8061.  
  8062. a= ID_NUM_ptr(np,id_first,id_loc);
  8063. /* 232: */
  8064. #line 5763 "./ftangle.web"
  8065.  
  8066. {
  8067. app_repl(LEFT(a,ID0));
  8068. app_repl(RIGHT(a));
  8069. }
  8070.  
  8071. /* :232 */
  8072. #line 5885 "./ftangle.web"
  8073.  
  8074. np->macro_type= FILE_NAME;
  8075.  
  8076.  
  8077. if(nuweb_mode)
  8078. {
  8079. a0= begin_meta;
  8080. goto reswitch;
  8081. }
  8082. }
  8083. break;
  8084.  
  8085. case WEB_definition:
  8086. if(t==macro)
  8087. goto done;
  8088. else
  8089. {
  8090. /* 240: */
  8091. #line 6056 "./ftangle.web"
  8092.  
  8093. {
  8094. #define NAME_LEN 100
  8095.  
  8096. name_pointer np;
  8097. eight_bits HUGE*tok_ptr0,HUGE*tok_m_end0;
  8098. text_pointer text_ptr0,text_end0;
  8099. outer_char new_name[NAME_LEN];
  8100. ASCII HUGE*nn,HUGE*b;
  8101. sixteen_bits a;
  8102.  
  8103. if(!deferred_macros)
  8104. {
  8105.  
  8106. err0_print(ERR_T,OC("Sorry, deferred WEB macros (defined in code part) are \
  8107. prohibited; use option `-TD' to permit them"),0);
  8108. continue;
  8109. }
  8110.  
  8111. tok_ptr0= tok_ptr;
  8112. tok_m_end0= tok_m_end;
  8113. text_ptr0= text_ptr;
  8114. text_end0= text_end;
  8115.  
  8116. tok_ptr= tok_dptr;
  8117. tok_m_end= tokd_end;
  8118. text_ptr= txt_dptr;
  8119. text_end= textd_end;
  8120.  
  8121. deferred_macro= YES;
  8122. np= app_macro(WEB_definition);
  8123. deferred_macro= NO;
  8124.  
  8125. tok_dptr= tok_ptr;
  8126. tok_ptr= tok_ptr0;
  8127. tok_m_end= tok_m_end0;
  8128.  
  8129. txt_dptr= text_ptr;
  8130. text_ptr= text_ptr0;
  8131. text_end= text_end0;
  8132.  
  8133. if(np==NULL)continue;
  8134.  
  8135.  
  8136.  
  8137. if(
  8138. nsprintf(new_name,OC("@%d"),1,n_unique++)>=(int)(NAME_LEN))OVERFLW("new_name","");
  8139. to_ASCII(new_name);
  8140. for(nn= (ASCII*)new_name+STRLEN(new_name),b= np->byte_start;
  8141. b<(np+1)->byte_start;)
  8142. *nn++= *b++;
  8143.  
  8144. a= ID_NUM_ptr(np,(ASCII*)new_name,nn);
  8145. /* 232: */
  8146. #line 5763 "./ftangle.web"
  8147.  
  8148. {
  8149. app_repl(LEFT(a,ID0));
  8150. app_repl(RIGHT(a));
  8151. }
  8152.  
  8153. /* :232 */
  8154. #line 6106 "./ftangle.web"
  8155. ;
  8156.  
  8157. np->macro_type= DEFERRED_MACRO;
  8158. np->equiv= (EQUIV)cur_text;
  8159.  
  8160. #undef NAME_LEN
  8161. }
  8162.  
  8163. /* :240 */
  8164. #line 5901 "./ftangle.web"
  8165. ;
  8166. continue;
  8167. }
  8168.  
  8169. case begin_nuweb:
  8170. if(t!=module_name)
  8171. {
  8172. nuweb_mode1= !NUWEB_MODE;
  8173. goto done;
  8174. }
  8175. else
  8176. {
  8177.  
  8178. err0_print(ERR_W,OC("@N ignored; must appear before beginning of code part"),0);
  8179. continue;
  8180. }
  8181.  
  8182. case formatt:
  8183. case limbo_text:case op_def:case macro_def:
  8184. case definition:case undefinition:
  8185. case begin_code:
  8186. if(t!=module_name)
  8187. goto done;
  8188. else
  8189. {
  8190.  
  8191. err0_print(ERR_T,OC("@d, @l, @v, @w, @u, @f, and @a \
  8192. are ignored in code text"),0);
  8193. continue;
  8194.  
  8195. }
  8196.  
  8197. case end_of_buffer:
  8198. a0= ignore;
  8199.  
  8200. case m_ifdef:case m_ifndef:
  8201. case m_if:case m_else:case m_elif:case m_endif:case m_undef:case m_pragma:
  8202. case m_for:case m_endfor:
  8203. case new_module:
  8204. goto done;
  8205.  
  8206. /* :234 */
  8207. #line 5618 "./ftangle.web"
  8208.  
  8209.  
  8210. /* :223 *//* 223: */
  8211. #line 5624 "./ftangle.web"
  8212.  
  8213. case '\n':
  8214.  
  8215.  
  8216. if(ntoken)ntoken++;
  8217. app_repl(a0);
  8218. break;
  8219.  
  8220. case '{':
  8221. app_repl(a0);
  8222.  
  8223. if(ntoken&&breakpoints&&t==module_name&&auto_bp)
  8224. /* 224: */
  8225. #line 5680 "./ftangle.web"
  8226.  
  8227. {
  8228. ASCII bp_cmd[BP_BUF_SIZE];
  8229.  
  8230. if(cur_module!=NULL)
  8231. {
  8232.  
  8233. if(
  8234. nsprintf(bp_cmd,OC("_BP(%d,\"%s\")"),2,module_count,name_of((sixteen_bits)(cur_module-name_dir)))>=(int)(BP_BUF_SIZE))OVERFLW("bp_cmd","");
  8235. to_ASCII(OC(bp_cmd));
  8236. divert(bp_cmd,bp_cmd+STRLEN(bp_cmd),DONT_STOP);
  8237. }
  8238. }
  8239.  
  8240. /* :224 */
  8241. #line 5636 "./ftangle.web"
  8242.  
  8243.  
  8244. break;
  8245.  
  8246. case begin_bp:
  8247. auto_bp= NO;
  8248.  
  8249. app_repl('{');
  8250. break;
  8251.  
  8252. case insert_bp:
  8253. if(breakpoints)
  8254. /* 224: */
  8255. #line 5680 "./ftangle.web"
  8256.  
  8257. {
  8258. ASCII bp_cmd[BP_BUF_SIZE];
  8259.  
  8260. if(cur_module!=NULL)
  8261. {
  8262.  
  8263. if(
  8264. nsprintf(bp_cmd,OC("_BP(%d,\"%s\")"),2,module_count,name_of((sixteen_bits)(cur_module-name_dir)))>=(int)(BP_BUF_SIZE))OVERFLW("bp_cmd","");
  8265. to_ASCII(OC(bp_cmd));
  8266. divert(bp_cmd,bp_cmd+STRLEN(bp_cmd),DONT_STOP);
  8267. }
  8268. }
  8269.  
  8270. /* :224 */
  8271. #line 5647 "./ftangle.web"
  8272.  
  8273. break;
  8274.  
  8275. default:
  8276. app_repl(a0);
  8277.  
  8278. break;
  8279. }
  8280. }
  8281.  
  8282. done:
  8283. if(stop_the_scan&&!from_buffer)
  8284. {
  8285. stop_the_scan= NO;
  8286. next_control= ignore;
  8287. }
  8288. else next_control= 
  8289. (eight_bits)CHOICE((from_buffer&&loc>limit)||stop,
  8290. ignore,a0);
  8291.  
  8292. /* 228: */
  8293. #line 5717 "./ftangle.web"
  8294.  
  8295. {
  8296. if(text_ptr>text_end)OVERFLW("texts","x");
  8297. cur_text= text_ptr;
  8298. (++text_ptr)->tok_start= tok_ptr;
  8299. }
  8300.  
  8301. /* :228 */
  8302. #line 5666 "./ftangle.web"
  8303. ;
  8304. cur_text->Language= (boolean)language0;
  8305.  
  8306. }
  8307.  
  8308. /* :223 *//* 231: */
  8309. #line 5743 "./ftangle.web"
  8310.  
  8311. SRTN ins_ln_no(VOID)
  8312. {
  8313. name_pointer np;
  8314.  
  8315. store_two_bytes((sixteen_bits)LINE_NUM);
  8316.  
  8317.  
  8318. if(line_info)
  8319. {
  8320. id_first= x_to_ASCII(changing?change_file_name:cur_file_name);
  8321. id_loc= id_first+STRLEN(id_first);
  8322.  
  8323. store_two_bytes((sixteen_bits)(changing?change_line:cur_line));
  8324.  
  8325. store_two_bytes(ID_NUM_ptr(np,id_first,id_loc));
  8326. np->Language= (boolean)NO_LANGUAGE;
  8327.  
  8328. }
  8329. }
  8330.  
  8331. /* :231 *//* 248: */
  8332. #line 6297 "./ftangle.web"
  8333.  
  8334. SRTN copy_string FCN((a0))
  8335. eight_bits a0 C1("")
  8336. {
  8337. app_repl(a0);
  8338.  
  8339. while(id_first<id_loc)
  8340. {
  8341. if(*id_first=='@')/* 249: */
  8342. #line 6317 "./ftangle.web"
  8343.  
  8344.  
  8345. if(language==TEX&&*(id_first+1)=='@')id_first++;
  8346. else
  8347. {
  8348. id_first++;
  8349.  
  8350.  
  8351. switch(ccode[*id_first])
  8352. {
  8353. case '@':
  8354. break;
  8355.  
  8356.  
  8357. /* 10: */
  8358. #line 78 "./typedefs.hweb"
  8359.  
  8360.  
  8361. case begin_C:
  8362. case begin_RATFOR:
  8363. case begin_FORTRAN:
  8364. case begin_LITERAL
  8365.  
  8366.  
  8367.  
  8368. /* :10 */
  8369. #line 6329 "./ftangle.web"
  8370. :
  8371. case L_switch:
  8372. app_repl('@');
  8373. break;
  8374.  
  8375.  
  8376. default:
  8377. id_first++;
  8378.  
  8379. continue;
  8380. }
  8381. }
  8382.  
  8383. /* :249 */
  8384. #line 6305 "./ftangle.web"
  8385.  
  8386.  
  8387. app_repl(*id_first++);
  8388. }
  8389.  
  8390. app_repl(a0);
  8391. }
  8392.  
  8393. /* :248 *//* 251: */
  8394. #line 6347 "./ftangle.web"
  8395.  
  8396.  
  8397. unsigned long xtoi FCN((b,b1))
  8398. CONST ASCII HUGE*b C0("Beginning of string.")
  8399. CONST ASCII HUGE*b1 C1("End of string.")
  8400. {
  8401. unsigned long n= 0;
  8402.  
  8403. for(b+= 2;b<b1;b++)
  8404. {
  8405. n*= 16;
  8406.  
  8407. if(isDigit(*b))n+= *b-'0';
  8408. else n+= A_TO_UPPER(*b)-'A'+10;
  8409. }
  8410.  
  8411. return n;
  8412. }
  8413.  
  8414. /* :251 *//* 252: */
  8415. #line 6367 "./ftangle.web"
  8416.  
  8417. SRTN app_converted FCN((n))
  8418. unsigned long n C1("")
  8419. {
  8420. ASCII temp[N_IDBUF];
  8421. ASCII HUGE*b;
  8422.  
  8423.  
  8424. if(
  8425. nsprintf((outer_char*)(temp),OC("%lu"),1,n)>=(int)(N_IDBUF))OVERFLW("(outer_char*)(temp)","");
  8426. to_ASCII((outer_char*)(temp));
  8427.  
  8428. app_repl(constant);
  8429. for(b= temp;*b!='\0';b++)app_repl(*b)
  8430. app_repl(constant);
  8431. }
  8432.  
  8433. /* :252 *//* 254: */
  8434. #line 6389 "./ftangle.web"
  8435.  
  8436.  
  8437. unsigned long otoi FCN((b,b1))
  8438. CONST ASCII HUGE*b C0("Beginning of string.")
  8439. CONST ASCII HUGE*b1 C1("End of string.")
  8440. {
  8441. unsigned long n= 0;
  8442.  
  8443. for(b++;b<b1;b++)
  8444. n= 8*n+*b-'0';
  8445.  
  8446. return n;
  8447. }
  8448.  
  8449. /* :254 *//* 256: */
  8450. #line 6410 "./ftangle.web"
  8451.  
  8452.  
  8453. unsigned long btoi FCN((b,b1))
  8454. CONST ASCII HUGE*b C0("Beginning of string.")
  8455. CONST ASCII HUGE*b1 C1("End of string.")
  8456. {
  8457. unsigned long n= 0;
  8458.  
  8459. for(b+= 2;b<b1;b++)
  8460. n= 2*n+*b-'0';
  8461.  
  8462. return n;
  8463. }
  8464.  
  8465. /* :256 *//* 257: */
  8466. #line 6426 "./ftangle.web"
  8467.  
  8468. SRTN rdc_char_constant(VOID)
  8469. {
  8470. int n;
  8471.  
  8472. if(*++id_first=='\\')
  8473. switch(*++id_first)
  8474. {
  8475. /* 258: */
  8476. #line 6453 "./ftangle.web"
  8477.  
  8478. case '0':n= '\0';break;
  8479. case '\\':n= '\\';break;
  8480. case '\'':n= '\'';break;
  8481. case '"':n= '\"';break;
  8482. case '?':n= '\?';break;
  8483. case 'a':n= '\007';break;
  8484. case 'b':n= '\b';break;
  8485. case 'f':n= '\f';break;
  8486. case 'n':n= '\n';break;
  8487. case 'r':n= '\r';break;
  8488. case 't':n= '\t';break;
  8489. case 'v':n= '\v';break;
  8490.  
  8491. /* :258 */
  8492. #line 6434 "./ftangle.web"
  8493.  
  8494. default:
  8495.  
  8496. err0_print(ERR_T,OC("Invalid escape sequence '\\%c' \
  8497. in Ratfor character constant; null assumed"),1,XCHR(*id_first));
  8498. n= 0;
  8499. break;
  8500. }
  8501. else n= *id_first;
  8502.  
  8503. if(*(id_first+1)!='\'')
  8504. err0_print(ERR_T,OC("Ratfor character constant longer \
  8505. than one byte; extra characters ignored"),0);
  8506.  
  8507. app_converted(n);
  8508. }
  8509.  
  8510. /* :257 *//* 259: */
  8511. #line 6471 "./ftangle.web"
  8512.  
  8513. SRTN cp_ASCII(VOID)
  8514. {
  8515. if(*id_first++=='\'')
  8516. {
  8517. if(C_LIKE(language))app_aconst('o',YES);
  8518.  
  8519. else app_aconst('d',NO);
  8520.  
  8521. }
  8522. else
  8523. {
  8524. if(C_LIKE(language))
  8525. {
  8526. app_repl('"');
  8527.  
  8528. while(*id_first!='"')
  8529. {
  8530. app_repl('\\');
  8531. app_aconst('o',NO);
  8532.  
  8533. }
  8534.  
  8535. app_repl('"');
  8536. }
  8537. else
  8538. {
  8539. sixteen_bits a;
  8540. ASCII delim= (ASCII)(is_RATFOR_(language)?'"':'\'');
  8541. int n= STRLEN(t_style.ASCII_fcn);
  8542.  
  8543.  
  8544. a= ID_NUM(t_style.ASCII_fcn,t_style.ASCII_fcn+n);
  8545. /* 232: */
  8546. #line 5763 "./ftangle.web"
  8547.  
  8548. {
  8549. app_repl(LEFT(a,ID0));
  8550. app_repl(RIGHT(a));
  8551. }
  8552.  
  8553. /* :232 */
  8554. #line 6501 "./ftangle.web"
  8555.  
  8556. app_repl('(');
  8557. app_repl(delim);
  8558. while(*id_first!='"')
  8559. app_repl(*id_first++);
  8560. app_repl(delim);
  8561. app_repl(')');
  8562. }
  8563. }
  8564.  
  8565. #if(0) 
  8566.  
  8567.  
  8568. app_repl('{');
  8569.  
  8570. while(*id_first!='"')
  8571. {
  8572. app_aconst(YES);
  8573. app_repl(',');
  8574. }
  8575.  
  8576. app_repl('0');
  8577.  
  8578. app_repl('}');
  8579. }
  8580. #endif
  8581. }
  8582.  
  8583. /* :259 *//* 260: */
  8584. #line 6529 "./ftangle.web"
  8585.  
  8586.  
  8587. SRTN app_aconst FCN((fmt_char,leading_zero))
  8588. outer_char fmt_char C0("Either 'o' (octal) or 'd' (decimal)")
  8589. boolean leading_zero C1("For octal format")
  8590. {
  8591. eight_bits n;
  8592.  
  8593. outer_char value[10],*v;
  8594.  
  8595. if(*id_first=='@')
  8596. {
  8597. n= *id_first++;
  8598.  
  8599.  
  8600. if(*id_first!='@')
  8601. err0_print(ERR_T,OC("Should use double @ within \
  8602. ASCII constant"),0);
  8603. else id_first++;
  8604. }
  8605. else if(*id_first=='\\')
  8606. {
  8607.  
  8608. id_first++;
  8609.  
  8610.  
  8611. n= esc_achar((CONST ASCII HUGE*HUGE*)&id_first);
  8612.  
  8613. /* :260 *//* 260: */
  8614. #line 6563 "./ftangle.web"
  8615. }
  8616. else n= *id_first++;
  8617.  
  8618.  
  8619.  
  8620.  
  8621.  
  8622.  
  8623.  
  8624.  
  8625.  
  8626.  
  8627. #ifdef scramble_ASCII
  8628. n= xxord[n];
  8629. #endif
  8630.  
  8631. #ifdef unscramble_ASCII
  8632. n= XCHR(n);
  8633. #endif
  8634.  
  8635.  
  8636.  
  8637.  
  8638. app_repl(constant);
  8639.  
  8640.  
  8641. if(
  8642. nsprintf(value,OC(fmt_char=='o'?"%s%o":"%s%d"),2,leading_zero?"0":"",n)>=(int)(10))OVERFLW("value","");
  8643.  
  8644. for(v= value;*v;v++)
  8645. app_repl(XORD(*v));
  8646.  
  8647. app_repl(constant);
  8648.  
  8649. #if(0) 
  8650. int l;
  8651.  
  8652. if(leading_zero)app_repl('0');
  8653.  
  8654.  
  8655. value[0]= '0'+(n>>6);
  8656.  
  8657. value[1]= '0'+((n-0100*(n>>6))>>3);
  8658.  
  8659. value[2]= '0'+(n-010*(n>>3));
  8660.  
  8661.  
  8662. for(l= 0;l<3;l++)
  8663. if(value[l]!='0')break;
  8664.  
  8665.  
  8666. for(;l<3;l++)
  8667. app_repl(value[l]);
  8668.  
  8669.  
  8670. #endif
  8671. }
  8672.  
  8673. /* :260 *//* 262: */
  8674. #line 6627 "./ftangle.web"
  8675.  
  8676.  
  8677. SRTN i_ascii_ FCN((n,pargs))
  8678. int n C0("")
  8679. PARGS pargs C1("")
  8680. {
  8681. int len;
  8682.  
  8683. eight_bits*start= pargs[0]+1;
  8684.  
  8685.  
  8686. CHK_ARGS("$A",1);
  8687.  
  8688. if(translate_ASCII)
  8689. {
  8690. eight_bits HUGE*tok_ptr0= tok_ptr;
  8691.  
  8692.  
  8693. if(*start==stringg)id_first= (ASCII HUGE*)(start+1);
  8694. else
  8695. {
  8696.  
  8697. err0_print(ERR_T,OC("Argument of _A should be quoted; \
  8698. just returning argument"),0);
  8699. goto just_return;
  8700. }
  8701.  
  8702. cp_ASCII();
  8703.  
  8704.  
  8705. len= tok_ptr-tok_ptr0;
  8706. MCHECK(len,"_ascii_");
  8707. memcpy(mp,tok_ptr0,len);
  8708. tok_ptr= tok_ptr0;
  8709.  
  8710. }
  8711. else
  8712. {
  8713. just_return:
  8714. len= pargs[1]-start;
  8715. MCHECK(len,"_ascii_");
  8716. STRNCPY(mp,start,len);
  8717. }
  8718.  
  8719. mp+= len;
  8720. }
  8721.  
  8722. /* :262 *//* 264: */
  8723. #line 6675 "./ftangle.web"
  8724.  
  8725.  
  8726. SRTN scan_module(VOID)
  8727. {
  8728. name_pointer p= NULL;
  8729.  
  8730. module_count++;
  8731.  
  8732. params= global_params;
  8733. frz_params();
  8734. set_output_file(global_language);
  8735.  
  8736. progress();
  8737.  
  8738. /* 266: */
  8739. #line 6708 "./ftangle.web"
  8740.  
  8741. {
  8742. parsing_mode= INNER;
  8743. nuweb_mode1= nuweb_mode;
  8744.  
  8745. next_control= ignore;
  8746.  
  8747. if(module_count==1)
  8748. {
  8749. *(mp-1)= '@';
  8750. *mp= 'm';
  8751. divert((ASCII HUGE*)macrobuf,(ASCII HUGE*)mp,STOP);
  8752.  
  8753.  
  8754.  
  8755.  
  8756. }
  8757.  
  8758.  
  8759. scanning_TeX= YES;
  8760. scan_text(macro,p,EXPAND);
  8761. scanning_TeX= NO;
  8762.  
  8763. if(module_count==1)/* 226: */
  8764. #line 5701 "./ftangle.web"
  8765.  
  8766. {
  8767. IN_COMMON ASCII HUGE*pbp;
  8768.  
  8769.  
  8770. breakpoints= BOOLEAN(MAC_LOOKUP(ID_NUM(pbp,pbp+3))!=NULL);
  8771. }
  8772.  
  8773. /* :226 */
  8774. #line 6731 "./ftangle.web"
  8775. ;
  8776.  
  8777. if(mlevel!=0)
  8778. {
  8779.  
  8780. err0_print(ERR_M,OC("Invalid preprocessor block structure (level %d). \
  8781. Missing @#endif?"),1,mlevel);
  8782. mlevel= 0;
  8783. }
  8784. }
  8785.  
  8786. /* :266 */
  8787. #line 6689 "./ftangle.web"
  8788. ;
  8789.  
  8790. /* 286: */
  8791. #line 7526 "./ftangle.web"
  8792.  
  8793. switch(next_control)
  8794. {
  8795. case begin_code:
  8796. {
  8797. params= global_params;
  8798.  
  8799. frz_params();
  8800. set_output_file(global_language);
  8801.  
  8802. p= name_dir;
  8803. /* 288: */
  8804. #line 7600 "./ftangle.web"
  8805.  
  8806.  
  8807. if(FORTRAN_LIKE(language)&&!free_form_input)
  8808. /* 289: */
  8809. #line 7606 "./ftangle.web"
  8810.  
  8811. {
  8812. loc= limit+1;
  8813. column_mode= YES;
  8814. parsing_mode= OUTER;
  8815. }
  8816.  
  8817. /* :289 */
  8818. #line 7603 "./ftangle.web"
  8819.  
  8820.  
  8821. /* :288 */
  8822. #line 7536 "./ftangle.web"
  8823. ;
  8824. break;
  8825. }
  8826.  
  8827. case module_name:
  8828. if(cur_module)
  8829. {
  8830. p= cur_module;
  8831. params= cur_module->mod_info->params;
  8832.  
  8833. }
  8834. else
  8835. {
  8836.  
  8837. /* :286 *//* 286: */
  8838. #line 7553 "./ftangle.web"
  8839.  
  8840. while((next_control= skip_ahead(ignore,NO))!=new_module);
  8841. return;
  8842. }
  8843.  
  8844. /* 287: */
  8845. #line 7583 "./ftangle.web"
  8846.  
  8847. {
  8848. while((next_control= get_next())=='+');
  8849.  
  8850.  
  8851. if(next_control!='='&&next_control!=eq_eq)
  8852. {
  8853.  
  8854. err0_print(ERR_T,OC("Code text of %s flushed; = sign is missing"),1,MTRANS);
  8855.  
  8856.  
  8857. while((next_control= skip_ahead(ignore,NO))!=new_module);
  8858.  
  8859. return;
  8860. }
  8861. }
  8862.  
  8863. /* :287 */
  8864. #line 7558 "./ftangle.web"
  8865. ;
  8866. frz_params();
  8867. /* 288: */
  8868. #line 7600 "./ftangle.web"
  8869.  
  8870.  
  8871. if(FORTRAN_LIKE(language)&&!free_form_input)
  8872. /* 289: */
  8873. #line 7606 "./ftangle.web"
  8874.  
  8875. {
  8876. loc= limit+1;
  8877. column_mode= YES;
  8878. parsing_mode= OUTER;
  8879. }
  8880.  
  8881. /* :289 */
  8882. #line 7603 "./ftangle.web"
  8883.  
  8884.  
  8885. /* :288 */
  8886. #line 7560 "./ftangle.web"
  8887. ;
  8888. break;
  8889.  
  8890. default:return;
  8891. }
  8892.  
  8893. nuweb_mode= nuweb_mode1;
  8894.  
  8895.  
  8896. app_repl(begin_language);
  8897. app_repl(NUWEB_OFF|nuweb_mode);
  8898. /* 228: */
  8899. #line 5717 "./ftangle.web"
  8900.  
  8901. {
  8902. if(text_ptr>text_end)OVERFLW("texts","x");
  8903. cur_text= text_ptr;
  8904. (++text_ptr)->tok_start= tok_ptr;
  8905. }
  8906.  
  8907. /* :228 */
  8908. #line 7571 "./ftangle.web"
  8909. ;
  8910.  
  8911. next_control= ignore;
  8912. scan_text(module_name,p,EXPAND);
  8913.  
  8914. column_mode= NO;
  8915.  
  8916.  
  8917. app_repl(begin_language);
  8918. app_repl(NUWEB_OFF|global_params.Nuweb_mode);
  8919. /* 228: */
  8920. #line 5717 "./ftangle.web"
  8921.  
  8922. {
  8923. if(text_ptr>text_end)OVERFLW("texts","x");
  8924. cur_text= text_ptr;
  8925. (++text_ptr)->tok_start= tok_ptr;
  8926. }
  8927.  
  8928. /* :228 */
  8929. #line 7580 "./ftangle.web"
  8930. ;
  8931.  
  8932. /* :286 */
  8933. #line 6690 "./ftangle.web"
  8934. ;
  8935.  
  8936. }
  8937.  
  8938. /* :264 *//* 268: */
  8939. #line 6757 "./ftangle.web"
  8940.  
  8941.  
  8942. SRTN scan_text FCN((text_type,p,expand))
  8943. int text_type C0("Either |macro| or |module_name|.")
  8944. CONST name_pointer p C0("Module name.")
  8945. boolean expand C1("Do we expand?")
  8946. {
  8947. boolean if_switch;
  8948. boolean scanned_if= NO;
  8949. boolean first_text= YES;
  8950. eight_bits HUGE*pp;
  8951. text_pointer q;
  8952.  
  8953. scanning_defn= BOOLEAN(text_type==macro);
  8954.  
  8955. if(++mlevel>=MAX_LEVEL)
  8956. FATAL("!! Conditional nesting depth exceeded","");
  8957.  
  8958.  
  8959. WHILE()
  8960. {
  8961. if(scanning_defn&&expand)
  8962. {
  8963. while(next_control<=ignore_defn)
  8964. {
  8965.  
  8966. if((next_control= 
  8967. skip_ahead(next_control,YES))==module_name)
  8968. {
  8969. loc-= 2;next_control= get_next();
  8970. }
  8971. }
  8972. scanning_TeX= NO;
  8973. }
  8974. else
  8975. if(!expand)
  8976. {
  8977. while((next_control= 
  8978. skip_ahead(next_control,YES))==module_name)
  8979. if((next_control= skip_ahead(next_control,YES))!=ignore)
  8980.  
  8981. err0_print(ERR_T,OC("Expected @> after @<"),0);
  8982. }
  8983. else
  8984. {
  8985. /* 290: */
  8986. #line 7614 "./ftangle.web"
  8987.  
  8988. {
  8989. store_two_bytes((sixteen_bits)(LINE_NUM+module_count));
  8990. }
  8991.  
  8992. /* :290 */
  8993. #line 6800 "./ftangle.web"
  8994.  
  8995. scan_repl(module_name,stop_the_scan);
  8996.  
  8997. /* 291: */
  8998. #line 7620 "./ftangle.web"
  8999.  
  9000. {
  9001. if(p==name_dir||p==NULL)
  9002. {
  9003. cur_text->module_text= (first_text&&mlevel==1);
  9004.  
  9005.  
  9006.  
  9007.  
  9008. if(cur_text->module_text)
  9009. cur_text->Language= (boolean)global_language;
  9010.  
  9011. last_unnamed->text_link= cur_text-text_info;
  9012.  
  9013.  
  9014. last_unnamed= cur_text;
  9015.  
  9016. }
  9017. else if(p->equiv==(EQUIV)text_info)
  9018. {
  9019. cur_text->module_text= YES;
  9020. p->equiv= (EQUIV)cur_text;
  9021. }
  9022. else
  9023. {
  9024. LANGUAGE language0;
  9025.  
  9026. q= (text_pointer)p->equiv;
  9027.  
  9028. language0= (LANGUAGE)q->Language;
  9029.  
  9030.  
  9031.  
  9032.  
  9033.  
  9034.  
  9035.  
  9036. cur_text->module_text= (first_text&&mlevel==1);
  9037.  
  9038. if(cur_text->module_text)
  9039. cur_text->Language= (boolean)language0;
  9040.  
  9041.  
  9042.  
  9043. while(q->text_link<module_flag)q= q->text_link+text_info;
  9044.  
  9045. q->text_link= cur_text-text_info;
  9046.  
  9047.  
  9048. }
  9049.  
  9050.  
  9051.  
  9052. cur_text->text_link= module_flag;
  9053. }
  9054.  
  9055. /* :291 */
  9056. #line 6804 "./ftangle.web"
  9057.  
  9058. first_text= NO;
  9059. }
  9060.  
  9061. next_macro_token:
  9062. switch(next_control)
  9063. {
  9064. /* 269: */
  9065. #line 6900 "./ftangle.web"
  9066.  
  9067.  
  9068. case m_ifdef:
  9069. DEF_OR_NDEF(M_TRUE);
  9070. break;
  9071.  
  9072. case m_ifndef:
  9073. DEF_OR_NDEF(M_FALSE);
  9074. break;
  9075.  
  9076. case m_if:
  9077. found_else= NO;
  9078.  
  9079. if(!expand)
  9080. {
  9081. to_endif(m_if);
  9082. goto next_macro_token;
  9083. }
  9084. else
  9085. /* 270: */
  9086. #line 7031 "./ftangle.web"
  9087.  
  9088. {
  9089. /* 275: */
  9090. #line 7208 "./ftangle.web"
  9091.  
  9092. {
  9093. boolean scan0= scanning_defn;
  9094.  
  9095. scanning_defn= YES;
  9096. scan_repl(macro,STOP);
  9097. scanning_defn= scan0;
  9098.  
  9099. cur_text->nargs= UNDEFINED_MACRO;
  9100.  
  9101. pp= xmac_text(macrobuf,cur_text->tok_start,tok_ptr);
  9102.  
  9103. if_switch= eval(pp,mp);
  9104.  
  9105. }
  9106.  
  9107. /* :275 */
  9108. #line 7033 "./ftangle.web"
  9109. ;
  9110. GET_LINE;
  9111.  
  9112.  
  9113. if(if_switch)
  9114. scan_text(text_type,p,if_switch);
  9115. else
  9116. /* 271: */
  9117. #line 7049 "./ftangle.web"
  9118.  
  9119. {
  9120. expand= NO;to_else();
  9121.  
  9122. if(next_control!=m_endif)
  9123. {
  9124. scanned_if= YES;
  9125. goto next_macro_token;
  9126. }
  9127. else
  9128. {
  9129. next_control= ignore;
  9130. expand= YES;
  9131. GET_LINE;
  9132.  
  9133. break;
  9134. }
  9135. }
  9136.  
  9137. /* :271 */
  9138. #line 7039 "./ftangle.web"
  9139.  
  9140. }
  9141.  
  9142. /* :270 */
  9143. #line 6919 "./ftangle.web"
  9144.  
  9145.  
  9146. break;
  9147.  
  9148. case m_elif:
  9149.  
  9150.  
  9151.  
  9152.  
  9153.  
  9154.  
  9155. next_control= ignore;
  9156.  
  9157. if((mlevel==1&&!scanned_if)||found_else)
  9158. {
  9159. OUT_OF_ORDER("elif");
  9160. break;
  9161. }
  9162.  
  9163. scanned_if= NO;
  9164.  
  9165. if(expand)
  9166. {
  9167. to_endif(m_elif);
  9168. goto next_macro_token;
  9169. }
  9170. else
  9171. /* 270: */
  9172. #line 7031 "./ftangle.web"
  9173.  
  9174. {
  9175. /* 275: */
  9176. #line 7208 "./ftangle.web"
  9177.  
  9178. {
  9179. boolean scan0= scanning_defn;
  9180.  
  9181. scanning_defn= YES;
  9182. scan_repl(macro,STOP);
  9183. scanning_defn= scan0;
  9184.  
  9185. cur_text->nargs= UNDEFINED_MACRO;
  9186.  
  9187. pp= xmac_text(macrobuf,cur_text->tok_start,tok_ptr);
  9188.  
  9189. if_switch= eval(pp,mp);
  9190.  
  9191. }
  9192.  
  9193. /* :275 */
  9194. #line 7033 "./ftangle.web"
  9195. ;
  9196. GET_LINE;
  9197.  
  9198.  
  9199. if(if_switch)
  9200. scan_text(text_type,p,if_switch);
  9201. else
  9202. /* 271: */
  9203. #line 7049 "./ftangle.web"
  9204.  
  9205. {
  9206. expand= NO;to_else();
  9207.  
  9208. if(next_control!=m_endif)
  9209. {
  9210. scanned_if= YES;
  9211. goto next_macro_token;
  9212. }
  9213. else
  9214. {
  9215. next_control= ignore;
  9216. expand= YES;
  9217. GET_LINE;
  9218.  
  9219. break;
  9220. }
  9221. }
  9222.  
  9223. /* :271 */
  9224. #line 7039 "./ftangle.web"
  9225.  
  9226. }
  9227.  
  9228. /* :270 */
  9229. #line 6946 "./ftangle.web"
  9230.  
  9231.  
  9232. expand= YES;
  9233. break;
  9234.  
  9235. case m_else:
  9236.  
  9237.  
  9238.  
  9239.  
  9240.  
  9241.  
  9242. next_control= ignore;
  9243.  
  9244. if((mlevel==1&&!scanned_if)||found_else)
  9245. {
  9246. OUT_OF_ORDER("else");
  9247. break;
  9248. }
  9249.  
  9250. found_else= YES;
  9251. scanned_if= NO;
  9252.  
  9253. expand= BOOLEAN(!expand);
  9254.  
  9255. GET_LINE;
  9256.  
  9257.  
  9258. if(expand)
  9259. scan_text(text_type,p,expand);
  9260. else
  9261. {
  9262. to_endif(m_else);
  9263. expand= YES;
  9264. goto next_macro_token;
  9265. }
  9266.  
  9267. break;
  9268.  
  9269. case m_endif:
  9270. next_control= ignore;
  9271.  
  9272. if(mlevel==1)
  9273. {
  9274. OUT_OF_ORDER("endif");
  9275. break;
  9276. }
  9277.  
  9278. found_else= NO;
  9279. GET_LINE;
  9280.  
  9281. mlevel--;
  9282. return;
  9283.  
  9284.  
  9285. case m_undef:
  9286. if(!expand)
  9287. next_control= ignore;
  9288. else
  9289. {
  9290. if((next_control= get_next())!=identifier)
  9291.  
  9292. err0_print(ERR_M,OC("Identifier must follow @#undef"),0);
  9293. else
  9294. {
  9295. undef(ID_NUM(id_first,id_loc),COMPLAIN);
  9296. GET_LINE;
  9297.  
  9298. }
  9299. }
  9300. break;
  9301.  
  9302. case m_for:
  9303. case m_endfor:
  9304. case m_pragma:
  9305. if(!expand)next_control= ignore;
  9306. else
  9307. {
  9308.  
  9309. err0_print(ERR_M,OC("Sorry, preprocessor command isn't implemented yet"),0);
  9310. }
  9311. break;
  9312.  
  9313. /* :269 */
  9314. #line 6811 "./ftangle.web"
  9315.  
  9316.  
  9317. case new_output_file:
  9318.  
  9319. err0_print(ERR_T,OC("@O and @o are allowed only in the code \
  9320. section; command ignored"),0);
  9321. next_control= ignore;
  9322. loc= limit+1;
  9323. break;
  9324.  
  9325. case definition:case undefinition:
  9326. case WEB_definition:
  9327. if(!expand)
  9328. next_control= ignore;
  9329. else
  9330. {
  9331. name_pointer np;
  9332. eight_bits last_control;
  9333.  
  9334. if((np= app_macro(last_control= next_control))
  9335. ==NULL)continue;
  9336. else if(last_control==WEB_definition)
  9337. np->equiv= (EQUIV)cur_text;
  9338. }
  9339. break;
  9340.  
  9341.  
  9342. default:
  9343. if(next_control<=ignore_defn)
  9344. break;
  9345.  
  9346. mlevel--;
  9347. return;
  9348. }
  9349. }
  9350. }
  9351.  
  9352. /* :268 *//* 272: */
  9353. #line 7071 "./ftangle.web"
  9354.  
  9355.  
  9356. SRTN out_of_order FCN((cmd))
  9357. CONST outer_char cmd[]C1("Name of bad preprocessor command.")
  9358. {
  9359.  
  9360. err0_print(ERR_M,OC("Ignored out-of-order \"@#%s\" (mlevel = %d)"),2,cmd,mlevel);
  9361. }
  9362.  
  9363. /* :272 *//* 273: */
  9364. #line 7084 "./ftangle.web"
  9365.  
  9366.  
  9367. SRTN to_else(VOID)
  9368. {
  9369. int elevel= 0,elifs[MAX_LEVEL],elses[MAX_LEVEL],k;
  9370.  
  9371. for(k= 0;k<MAX_LEVEL;k++)
  9372. elifs[k]= elses[k]= 0;
  9373.  
  9374. WHILE()
  9375. switch(next_control= skip_ahead(next_control,NO))
  9376. {
  9377. case m_if:
  9378. case m_ifdef:
  9379. case m_ifndef:
  9380. elevel++;
  9381. break;
  9382.  
  9383. case m_elif:
  9384. if(elses[elevel])
  9385.  
  9386. err0_print(ERR_M,OC("Can't have @#elif after @#else"),0);
  9387. elifs[elevel]++;
  9388. if(elevel==0)return;
  9389. break;
  9390.  
  9391. case m_else:
  9392. if(elses[elevel]++)
  9393.  
  9394. err0_print(ERR_M,OC("Only one @#else allowed \
  9395. (scanning to @else)"),0);
  9396. if(elevel==0)
  9397. {
  9398. if(language==TEX&&!get_line())
  9399. loc= limit+1;
  9400. return;
  9401. }
  9402. break;
  9403.  
  9404. case m_endif:
  9405.  
  9406. elifs[elevel]= elses[elevel]= 0;
  9407.  
  9408. if(elevel--==0)
  9409. {
  9410. found_else= NO;
  9411. if(language==TEX&&!get_line())
  9412. loc= limit+1;
  9413. return;
  9414. }
  9415. break;
  9416.  
  9417. case new_module:
  9418.  
  9419. err0_print(ERR_M,OC("Section ended during scan for \
  9420. \"@#else\", \"@#elif\", or \"@#endif\". Inserted \"@#endif\". \
  9421. (elevel = %d)"),1,elevel);
  9422. if(elevel==0)
  9423. found_else= NO;
  9424.  
  9425. return;
  9426.  
  9427. }
  9428. }
  9429.  
  9430. /* :273 *//* 274: */
  9431. #line 7146 "./ftangle.web"
  9432.  
  9433.  
  9434. SRTN to_endif FCN((m_case))
  9435. int m_case C1("Case that called to_endif")
  9436. {
  9437. int elevel= 1,elifs[MAX_LEVEL],elses[MAX_LEVEL],k;
  9438.  
  9439. for(k= 0;k<MAX_LEVEL;k++)
  9440. elifs[k]= elses[k]= 0;
  9441.  
  9442. if(m_case==m_elif)
  9443. elifs[elevel]= 1;
  9444. else
  9445. {
  9446. if(m_case==m_else)
  9447. elses[elevel]= 1;
  9448. }
  9449.  
  9450. WHILE()
  9451. switch(next_control= skip_ahead(next_control,NO))
  9452. {
  9453. case m_if:
  9454. case m_ifdef:
  9455. case m_ifndef:
  9456. elevel++;
  9457. break;
  9458.  
  9459. case m_elif:
  9460. if(elses[elevel])
  9461.  
  9462. err0_print(ERR_M,OC("Can't have @#elif after @#else"),0);
  9463. elifs[elevel]++;
  9464. break;
  9465.  
  9466. case m_else:
  9467. if(elses[elevel]++)
  9468.  
  9469. err0_print(ERR_M,OC("Only one @#else allowed \
  9470. (scanning to @endif)"),0);
  9471. break;
  9472.  
  9473. case m_endif:
  9474.  
  9475. elifs[elevel]= elses[elevel]= 0;
  9476.  
  9477. if(--elevel==0)
  9478. {
  9479. found_else= NO;
  9480. if(language==TEX&&!get_line())
  9481. loc= limit+1;
  9482. return;
  9483. }
  9484. break;
  9485.  
  9486. case new_module:
  9487.  
  9488. err0_print(ERR_M,OC("Section ended during scan for \
  9489. \"endif\"; inserted \"endif\". (elevel = %d)"),1,elevel);
  9490. if(elevel==0)
  9491. found_else= NO;
  9492. return;
  9493. }
  9494. }
  9495.  
  9496. /* :274 *//* 276: */
  9497. #line 7227 "./ftangle.web"
  9498.  
  9499.  
  9500. name_pointer app_macro FCN((last_control))
  9501. eight_bits last_control C1("Last token processed.")
  9502. {
  9503. sixteen_bits a;
  9504. name_pointer np= NULL;
  9505. boolean make_recursive= NO;
  9506. ASCII insert_type[6];
  9507. int insert_num= 0;
  9508. eight_bits temp[2];
  9509.  
  9510. boolean nuweb_mode0= nuweb_mode;
  9511.  
  9512. nuweb_mode= NO;
  9513.  
  9514.  
  9515. is_WEB_macro= BOOLEAN(last_control==WEB_definition);
  9516.  
  9517. if(is_WEB_macro||C_LIKE(language))
  9518. {
  9519. while((next_control= get_next())=='\n')
  9520. ;
  9521.  
  9522.  
  9523. if(is_WEB_macro)
  9524. if(next_control==MAKE_RECURSIVE)
  9525. {
  9526. make_recursive= YES;
  9527. next_control= get_next();
  9528. }
  9529. else if(next_control==AUTO_INSERT)
  9530. /* 277: */
  9531. #line 7314 "./ftangle.web"
  9532.  
  9533. {
  9534. ASCII c;
  9535.  
  9536. while((c= *loc++)!=END_AUTO_INSERT)
  9537. {
  9538. if(*loc==' ')
  9539. {
  9540.  
  9541. err0_print(ERR_M,OC("Found space instead of ']' after automatic \
  9542. insertion material"),0);
  9543. break;
  9544. }
  9545.  
  9546. if(loc==limit)break;
  9547.  
  9548. if(insert_num>=6)
  9549. {
  9550. if(insert_num++==6)
  9551.  
  9552. err0_print(ERR_M,OC("Can't have more than 6 types of automatic \
  9553. insertion material; remaining ignored"),0);
  9554. continue;
  9555. }
  9556.  
  9557. switch(c)
  9558. {
  9559. case '*':
  9560. STRNCPY(insert_type,"pmsfbi",insert_num= 6);
  9561. break;
  9562.  
  9563. case 'p':case 'P':
  9564. case 'm':case 'M':
  9565. case 's':case 'S':
  9566. case 'f':case 'F':
  9567. case 'b':case 'B':
  9568. case 'i':case 'I':
  9569. insert_type[insert_num++]= c;
  9570. break;
  9571.  
  9572. default:
  9573.  
  9574. err0_print(ERR_M,OC("Auto insertion type must be one of \
  9575. \"ibfmps\""),0);
  9576. continue;
  9577. }
  9578. }
  9579.  
  9580. next_control= get_next();
  9581. }
  9582.  
  9583. /* :277 */
  9584. #line 7256 "./ftangle.web"
  9585.  
  9586.  
  9587. if(next_control!=identifier)
  9588. {
  9589.  
  9590. err0_print(ERR_M,OC("Definition flushed in %s; must start with \
  9591. identifier"),1,MTRANS);
  9592.  
  9593. np= NULL;
  9594. goto done_append;
  9595. }
  9596.  
  9597. a= ID_NUM_ptr(np,id_first,id_loc);
  9598.  
  9599.  
  9600.  
  9601. temp[0]= LEFT(a,ID0);temp[1]= RIGHT(a);
  9602. /* 278: */
  9603. #line 7369 "./ftangle.web"
  9604.  
  9605. {
  9606. while(insert_num-->0)
  9607. switch(insert_type[insert_num])
  9608. {
  9609. case 'p':case 'P':
  9610. if(insert.program.end>insert.program.start)
  9611.  
  9612. err0_print(ERR_M,OC("Overriding previous auto insertion type %s"),1,"program");
  9613. STRNCPY(insert.program.start,temp,2);
  9614. insert.program.end= insert.program.start+2;
  9615. break;
  9616.  
  9617. case 'm':case 'M':
  9618. if(insert.module.end>insert.module.start)
  9619.  
  9620. err0_print(ERR_M,OC("Overriding previous auto insertion type %s"),1,"module");
  9621. STRNCPY(insert.module.start,temp,2);
  9622. insert.module.end= insert.module.start+2;
  9623. break;
  9624.  
  9625. case 's':case 'S':
  9626. if(insert.subroutine.end>insert.subroutine.start)
  9627.  
  9628. err0_print(ERR_M,OC("Overriding previous auto insertion type %s"),1,"subroutine");
  9629. STRNCPY(insert.subroutine.start,temp,2);
  9630. insert.subroutine.end= insert.subroutine.start+2;
  9631. break;
  9632.  
  9633. case 'f':case 'F':
  9634. if(insert.function.end>insert.function.start)
  9635.  
  9636. err0_print(ERR_M,OC("Overriding previous auto insertion type %s"),1,"function");
  9637. STRNCPY(insert.function.start,temp,2);
  9638. insert.function.end= insert.function.start+2;
  9639. break;
  9640.  
  9641. case 'b':case 'B':
  9642. if(insert.blockdata.end>insert.blockdata.start)
  9643.  
  9644. err0_print(ERR_M,OC("Overriding previous auto insertion type %s"),1,"blockdata");
  9645. STRNCPY(insert.blockdata.start,temp,2);
  9646. insert.blockdata.end= insert.blockdata.start+2;
  9647. break;
  9648.  
  9649. case 'i':case 'I':
  9650. if(insert.interface.end>insert.interface.start)
  9651.  
  9652. err0_print(ERR_M,OC("Overriding previous auto insertion type %s"),1,"interface");
  9653. STRNCPY(insert.interface.start,temp,2);
  9654. insert.interface.end= insert.interface.start+2;
  9655. break;
  9656. }
  9657. }
  9658.  
  9659. /* :278 */
  9660. #line 7271 "./ftangle.web"
  9661.  
  9662.  
  9663.  
  9664. app_repl(temp[0]);
  9665. app_repl(temp[1]);
  9666.  
  9667. np->macro_type= IMMEDIATE_MACRO;
  9668.  
  9669.  
  9670. if(*loc!='(')
  9671. {
  9672. if(is_WEB_macro)
  9673. {app_repl(' ');}
  9674. else if(C_LIKE(language))
  9675. {
  9676.  
  9677. app_repl(stringg);app_repl(' ');app_repl(stringg);
  9678. }
  9679. }
  9680. }
  9681.  
  9682. nuweb_mode= nuweb_mode0;
  9683. scan_repl((eight_bits)macro,(boolean)(!scanning_defn));
  9684.  
  9685.  
  9686.  
  9687. if(is_WEB_macro)
  9688. /* 279: */
  9689. #line 7402 "./ftangle.web"
  9690.  
  9691. {
  9692. text_ptr->tok_start= tok_ptr= argize(cur_text->tok_start,tok_ptr);
  9693.  
  9694. cur_text->Language= (boolean)global_language;
  9695.  
  9696. cur_text->recursive= make_recursive;
  9697. }
  9698.  
  9699. /* :279 */
  9700. #line 7298 "./ftangle.web"
  9701.  
  9702. else
  9703. cur_text->nargs= (eight_bits)CHOICE(last_control==definition,
  9704. OUTER_MACRO,OUTER_UNMACRO);
  9705.  
  9706.  
  9707. cur_text->text_link= macro;
  9708.  
  9709.  
  9710. done_append:
  9711. is_WEB_macro= NO;
  9712.  
  9713. return np;
  9714. }
  9715.  
  9716. /* :276 *//* 280: */
  9717. #line 7412 "./ftangle.web"
  9718.  
  9719.  
  9720. SRTN app_dmacro FCN((p,p1))
  9721. CONST eight_bits HUGE*p C0("Start")
  9722. CONST eight_bits HUGE*p1 C1("End.")
  9723. {
  9724. eight_bits a0,a1;
  9725. sixteen_bits a;
  9726. name_pointer np;
  9727. boolean make_recursive= NO;
  9728.  
  9729. if(*p==MAKE_RECURSIVE)
  9730. {
  9731. make_recursive= YES;
  9732. p++;
  9733. }
  9734.  
  9735. if(p+2>p1)
  9736. {
  9737.  
  9738. macro_err(OC("Invalid argument to $DEFINE"),YES);
  9739. return;
  9740. }
  9741.  
  9742. if(TOKEN1(a0= *p++))
  9743. {
  9744.  
  9745. macro_err(OC("$DEFINE flushed; must start with identifier"),YES);
  9746. return;
  9747. }
  9748.  
  9749. a= IDENTIFIER(a0,a1= *p++);
  9750. app_repl(a0);
  9751. app_repl(a1);
  9752.  
  9753. np= name_dir+a;
  9754.  
  9755. np->macro_type= IMMEDIATE_MACRO;
  9756.  
  9757. if(*p=='='){p++;app_repl(' ');}
  9758.  
  9759.  
  9760. while(p<p1){app_repl(*p++);}
  9761.  
  9762. /* 228: */
  9763. #line 5717 "./ftangle.web"
  9764.  
  9765. {
  9766. if(text_ptr>text_end)OVERFLW("texts","x");
  9767. cur_text= text_ptr;
  9768. (++text_ptr)->tok_start= tok_ptr;
  9769. }
  9770.  
  9771. /* :228 */
  9772. #line 7453 "./ftangle.web"
  9773. ;
  9774. /* 279: */
  9775. #line 7402 "./ftangle.web"
  9776.  
  9777. {
  9778. text_ptr->tok_start= tok_ptr= argize(cur_text->tok_start,tok_ptr);
  9779.  
  9780. cur_text->Language= (boolean)global_language;
  9781.  
  9782. cur_text->recursive= make_recursive;
  9783. }
  9784.  
  9785. /* :279 */
  9786. #line 7454 "./ftangle.web"
  9787. ;
  9788. cur_text->text_link= macro;
  9789. np->equiv= (EQUIV)cur_text;
  9790. }
  9791.  
  9792. /* :280 *//* 282: */
  9793. #line 7469 "./ftangle.web"
  9794.  
  9795.  
  9796. SRTN i_define_ FCN((n,pargs))
  9797. int n C0("")
  9798. PARGS pargs C1("")
  9799. {
  9800. CHK_ARGS("$M",1);
  9801.  
  9802. app_dmacro(pargs[0]+1,pargs[1]);
  9803. }
  9804.  
  9805. /* :282 *//* 284: */
  9806. #line 7487 "./ftangle.web"
  9807.  
  9808.  
  9809. SRTN i_undef_ FCN((n,pargs))
  9810. int n C0("")
  9811. PARGS pargs C1("")
  9812. {
  9813. eight_bits a0;
  9814. eight_bits HUGE*p= pargs[0]+1;
  9815.  
  9816. CHK_ARGS("$UNDEF",1);
  9817.  
  9818. if(p+2>pargs[1])
  9819. {
  9820.  
  9821. macro_err(OC("Invalid argument to $UNDEF"),YES);
  9822. return;
  9823. }
  9824.  
  9825. if(TOKEN1(a0= *p++))
  9826. {
  9827.  
  9828. macro_err(OC("$UNDEF flushed; must start with identifier"),YES);
  9829. return;
  9830. }
  9831.  
  9832. undef(IDENTIFIER(a0,*p),COMPLAIN);
  9833. }
  9834.  
  9835. /* :284 *//* 292: */
  9836. #line 7673 "./ftangle.web"
  9837.  
  9838.  
  9839. SRTN phase1(VOID)
  9840. {
  9841. LANGUAGE language0= language;
  9842.  
  9843. phase= 1;
  9844. module_count= 0;
  9845. rst_input();rst_out(NOT_CONTINUATION);
  9846. reading(web_file_name,NO);
  9847.  
  9848. while((next_control= skip_ahead(ignore,NO))!=new_module)
  9849. ;
  9850.  
  9851.  
  9852. chk_override(language0);
  9853. fin_language();
  9854. global_params= params;
  9855. set_output_file(global_language);
  9856.  
  9857.  
  9858. while(!input_has_ended)
  9859. scan_module();
  9860.  
  9861.  
  9862. chk_complete();
  9863.  
  9864. /* 294: */
  9865. #line 7709 "./ftangle.web"
  9866.  
  9867. {
  9868. name_pointer np;
  9869.  
  9870.  
  9871. for(np= name_dir;np<name_ptr;np++)
  9872. if(np->equiv!=NULL&&np->equiv!=(EQUIV)text_info
  9873. &&np->macro_type==NOT_DEFINED)
  9874. num_distinct_modules++;
  9875.  
  9876. num_modules= module_count;
  9877. }
  9878.  
  9879. /* :294 */
  9880. #line 7697 "./ftangle.web"
  9881.  
  9882. }
  9883.  
  9884. /* :292 *//* 296: */
  9885. #line 7733 "./ftangle.web"
  9886.  
  9887.  
  9888. SRTN i_modules_ FCN((n,pargs))
  9889. int n C0("")
  9890. PARGS pargs C1("")
  9891. {
  9892. outer_char temp[50];
  9893. int m= 
  9894. nsprintf(temp,OC("%c%u%c"),3,XCHR(constant),*(pargs[0]+2)=='0'?num_distinct_modules:num_modules,XCHR(constant));
  9895.  
  9896. CHK_ARGS("$MODULES",1);
  9897.  
  9898. MCHECK(m,"_modules_");
  9899. STRCPY(mp,to_ASCII(temp));
  9900. mp+= m;
  9901. }
  9902.  
  9903. /* :296 *//* 297: */
  9904. #line 7752 "./ftangle.web"
  9905.  
  9906.  
  9907. SRTN see_tstatistics(VOID)
  9908. {
  9909. CLR_PRINTF(info,("\n\nMEMORY USAGE STATISTICS:\n"));
  9910. STAT0("names",sizeof(*name_ptr),
  9911. SUB_PTRS(name_ptr,name_dir),max_names,smin0(MAX_VAL("n")),"n",",");
  9912.  
  9913. STAT0("replacement texts",sizeof(*text_ptr),
  9914. SUB_PTRS(text_ptr,text_info),max_texts,smin0(MAX_VAL("x")),"x",",");
  9915.  
  9916. STAT0("deferred texts",sizeof(*txt_dptr),
  9917. SUB_PTRS(txt_dptr,txt_dinfo),dtexts_max,smin0(MAX_VAL("dx")),"dx",";");
  9918.  
  9919. STAT0("bytes",sizeof(*byte_ptr),
  9920. SUB_PTRS(byte_ptr,byte_mem),max_bytes,smin0(MAX_VAL("b")),"b",",");
  9921.  
  9922. STAT0("tokens",sizeof(*tok_ptr),
  9923. SUB_PTRS((mx_tok_ptr>tok_ptr?mx_tok_ptr:tok_ptr),tok_mem),
  9924. max_toks,smin0(MAX_VAL("tt")),"tt",",");
  9925.  
  9926. STAT0("deferred tokens",sizeof(*tok_dptr),
  9927. SUB_PTRS((mx_dtok_ptr>tok_dptr?mx_dtok_ptr:tok_dptr),tok_dmem),
  9928. max_dtoks,smin0(MAX_VAL("dt")),"dt",".");
  9929.  
  9930. mem_avail(1);
  9931. }
  9932.  
  9933. /* :297 *//* 298: */
  9934. #line 7781 "./ftangle.web"
  9935.  
  9936.  
  9937. SRTN t_macros(VOID)
  9938. {
  9939. /* 106: */
  9940. #line 1541 "./ftangle.web"
  9941.  
  9942.  
  9943. SAVE_MACRO("_MODULE_NAME $STRING($$MODULE_NAME)");
  9944. SAVE_MACRO("$MODULE_NAME $STRING($$MODULE_NAME)");
  9945.  
  9946. /* :106 *//* 110: */
  9947. #line 1613 "./ftangle.web"
  9948.  
  9949.  
  9950. SAVE_MACRO("_STUB(s)$IFCASE($LANGUAGE_NUM,\
  9951. {missing_mod(#s);},{missing_mod(#s);},\
  9952. call nomod(#s),call nomod(#s),\
  9953. call nomod(#s),call nomod(#s),\
  9954. \\missingmod{s},\
  9955. %nomod(s),%nomod(s))");
  9956.  
  9957. SAVE_MACRO("$STUB(s)$IFCASE($LANGUAGE_NUM,\
  9958. {missing_mod(#s);},{missing_mod(#s);},\
  9959. call nomod(#s),call nomod(#s),\
  9960. call nomod(#s),call nomod(#s),\
  9961. \\missingmod{s},\
  9962. %nomod(s),%nomod(s))");
  9963.  
  9964. /* :110 *//* 117: */
  9965. #line 1813 "./ftangle.web"
  9966.  
  9967.  
  9968. SAVE_MACRO("_VERSION $STRING($$VERSION)");
  9969. SAVE_MACRO("$VERSION $STRING($$VERSION)");
  9970.  
  9971. /* :117 *//* 119: */
  9972. #line 1839 "./ftangle.web"
  9973.  
  9974.  
  9975. SAVE_MACRO("_DAY $TM(0)");
  9976. SAVE_MACRO("_DATE $TM(1)");
  9977. SAVE_MACRO("_TIME $TM(2)");
  9978.  
  9979. SAVE_MACRO("$DAY $TM(0)");
  9980. SAVE_MACRO("$DATE $TM(1)");
  9981. SAVE_MACRO("$TIME $TM(2)");
  9982.  
  9983. SAVE_MACRO("_TM(i)$STRING($$TM(i))");
  9984. SAVE_MACRO("$TM(i)$STRING($$TM(i))");
  9985.  
  9986. /* :119 *//* 227: */
  9987. #line 5710 "./ftangle.web"
  9988.  
  9989.  
  9990. /* :227 *//* 227: */
  9991. #line 5715 "./ftangle.web"
  9992.  
  9993. /* :227 *//* 261: */
  9994. #line 6618 "./ftangle.web"
  9995.  
  9996.  
  9997. SAVE_MACRO("_A(s)$$ASCII(s)");
  9998. SAVE_MACRO("$A(s)$$ASCII(s)");
  9999.  
  10000. SAVE_MACRO("_ASCII(s)$$ASCII(s)");
  10001. SAVE_MACRO("$ASCII(s)$$ASCII(s)");
  10002.  
  10003. /* :261 *//* 281: */
  10004. #line 7460 "./ftangle.web"
  10005.  
  10006.  
  10007. SAVE_MACRO("_DEFINE(defn)$$DEFINE(defn)");
  10008. SAVE_MACRO("$DEFINE(defn)$$DEFINE(defn)");
  10009.  
  10010. SAVE_MACRO("_M(defn)$$DEFINE(defn)");
  10011. SAVE_MACRO("$M(defn)$$DEFINE(defn)");
  10012.  
  10013. /* :281 *//* 283: */
  10014. #line 7481 "./ftangle.web"
  10015.  
  10016.  
  10017. SAVE_MACRO("_UNDEF(id)$$UNDEF(#!id)");
  10018. SAVE_MACRO("$UNDEF(id)$$UNDEF(#!id)");
  10019.  
  10020. /* :283 *//* 285: */
  10021. #line 7514 "./ftangle.web"
  10022.  
  10023.  
  10024. SAVE_MACRO("_INCR(N,...)$INCR0(#!N,$EVAL(N+$IFELSE(#0,0,1,#1)))");
  10025. SAVE_MACRO("$INCR(N,...)$INCR0(#!N,$EVAL(N+$IFELSE(#0,0,1,#1)))");
  10026.  
  10027. SAVE_MACRO("_DECR(N,...)$INCR0(#!N,$EVAL(N-$IFELSE(#0,0,1,#1)))");
  10028. SAVE_MACRO("$DECR(N,...)$INCR0(#!N,$EVAL(N-$IFELSE(#0,0,1,#1)))");
  10029.  
  10030. SAVE_MACRO("_INCR0(N,N1)$$DEFINE(#!N N1)");
  10031. SAVE_MACRO("$INCR0(N,N1)$$DEFINE(#!N N1)");
  10032.  
  10033. /* :285 *//* 295: */
  10034. #line 7724 "./ftangle.web"
  10035.  
  10036.  
  10037. SAVE_MACRO("_MODULES $$MODULES(0)");
  10038. SAVE_MACRO("$MODULES $$MODULES(0)");
  10039.  
  10040. SAVE_MACRO("_SECTIONS $$MODULES(1)");
  10041. SAVE_MACRO("$SECTIONS $$MODULES(1)");
  10042.  
  10043. /* :295 *//* 302: */
  10044. #line 7876 "./ftangle.web"
  10045.  
  10046.  
  10047. SAVE_MACRO("_DO(k,kmin,kmax,...)$UNROLL(k,kmin,kmax,$IFCASE(#0,1,#.))");
  10048. SAVE_MACRO("$DO(k,kmin,kmax,...)$UNROLL(k,kmin,kmax,$IFCASE(#0,1,#.))");
  10049.  
  10050. /* :302 */
  10051. #line 7785 "./ftangle.web"
  10052. ;
  10053. }
  10054.  
  10055. /* :298 *//* 300: */
  10056. #line 7805 "./ftangle.web"
  10057.  
  10058.  
  10059. SRTN out_msg FCN((msg,msg1))
  10060. CONST ASCII*msg C0("Start of message.")
  10061. CONST ASCII*msg1 C1("See the description below.")
  10062. {
  10063. eight_bits HUGE*temp;
  10064. eight_bits HUGE*mp0= mp,
  10065. HUGE*macrobuf0= macrobuf,HUGE*macrobuf_end0= macrobuf_end;
  10066. char HUGE*new_msg;
  10067.  
  10068. boolean nuweb_mode0,in_string0,meta_mode0;
  10069.  
  10070.  
  10071. mp= macrobuf= temp= GET_MEM("out_msg:temp",MSG_BUF_SIZE,eight_bits);
  10072. macrobuf_end= temp+MSG_BUF_SIZE;
  10073.  
  10074.  
  10075.  
  10076. if(msg1==NULL)
  10077. msg1= msg+STRLEN(msg);
  10078.  
  10079. new_msg= (char HUGE*)str_to_mb((eight_bits HUGE*)msg,
  10080. (eight_bits HUGE*)msg1,NO);
  10081.  
  10082.  
  10083. spcs_after_cmnt= SPCS_AFTER_CMNT;
  10084.  
  10085.  
  10086.  
  10087.  
  10088. nuweb_mode0= nuweb_mode;
  10089. in_string0= in_string;
  10090. meta_mode0= meta_mode;
  10091.  
  10092. meta_mode= nuweb_mode= NO;
  10093. OUT_CHAR(begin_meta);
  10094. OUT_CHAR(begin_meta);
  10095.  
  10096. while(*new_msg)
  10097. OUT_CHAR(*new_msg++);
  10098. OUT_CHAR(end_meta);
  10099.  
  10100. nuweb_mode= nuweb_mode0;
  10101. in_string= in_string0;
  10102. meta_mode= meta_mode0;
  10103.  
  10104. spcs_after_cmnt= 0;
  10105.  
  10106. FREE_MEM(temp,"out_msg:temp",MSG_BUF_SIZE,eight_bits);
  10107. macrobuf= macrobuf0;mp= mp0;macrobuf_end= macrobuf_end0;
  10108. }
  10109.  
  10110. /* :300 *//* 301: */
  10111. #line 7859 "./ftangle.web"
  10112.  
  10113.  
  10114. static sixteen_bits id_unroll;
  10115.  
  10116. SPEC univ_tokens[]= {
  10117. {"_UNROLL",0,x_unroll,&id_unroll},
  10118. {"$UNROLL",0,x_unroll,&id_unroll},
  10119. {"",0,NULL,NULL}
  10120. };
  10121.  
  10122. SRTN ini_univ_tokens FCN((language0))
  10123. LANGUAGE language0 C1("")
  10124. {
  10125. ini_special_tokens(language0,univ_tokens);
  10126. }
  10127.  
  10128. /* :301 *//* 303: */
  10129. #line 7882 "./ftangle.web"
  10130.  
  10131.  
  10132. SRTN ini_tokens FCN((language0))
  10133. LANGUAGE language0 C1("")
  10134. {
  10135. switch(language0)
  10136. {
  10137. case C:
  10138. break;
  10139.  
  10140. case C_PLUS_PLUS:
  10141. break;
  10142.  
  10143. case FORTRAN:
  10144. break;
  10145.  
  10146. case FORTRAN_90:
  10147. break;
  10148.  
  10149. case TEX:
  10150. break;
  10151.  
  10152. default:
  10153. break;
  10154. }
  10155.  
  10156. ini_univ_tokens(language0);
  10157. }
  10158.  
  10159. /* :303 *//* 304: */
  10160. #line 7912 "./ftangle.web"
  10161.  
  10162.  
  10163. int get_constant FCN((e))
  10164. eight_bits HUGE*e C1("")
  10165. {
  10166. boolean positive= YES;
  10167. int i= 1;
  10168.  
  10169.  
  10170. if(*e=='-')
  10171. {
  10172. positive= NO;
  10173. e++;
  10174. }
  10175.  
  10176. if(*e++!=constant)
  10177. {
  10178.  
  10179. err0_print(ERR_T,OC("Invalid loop constant"),0);
  10180. return i;
  10181. }
  10182.  
  10183. to_outer(e);
  10184. i= ATOI(e);
  10185. return(positive)?i:-i;
  10186. }
  10187.  
  10188.  
  10189.  
  10190. /* :304 */
  10191. #line 42 "./ftangle.web"
  10192.  
  10193. #endif 
  10194.  
  10195.  
  10196. /* :1 */
  10197.