1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)setfmt.c	5.1 (Berkeley) 6/7/85";
   9: #endif not lint
  10: 
  11: #include "defs.h"
  12: #include "format.h"
  13: 
  14: #define GLITCH '\2'
  15: 
  16: extern char *fmtptr, *s_init;
  17: extern int fmt_strings;
  18: 
  19: setfmt(lp)
  20: struct Labelblock *lp;
  21: {
  22: int fmt_len, frmt_str_lab;
  23: char *s, *lexline();
  24: 
  25: s = lexline(&fmt_len);
  26: preven(ALILONG);
  27: prlabel(asmfile, lp->labelno);
  28: if( pars_f(s) != 0) {
  29:     err_fmt(fmt_len);
  30: } else {
  31:     fprintf( asmfile, ".word %d\n", FMT_COMP ); /* precompiled format */
  32:     fprintf( asmfile, ".word %d\n", pc );
  33:     frmt_str_lab = newlabel();  /* to mark loc of format string */
  34:     prcona( asmfile, frmt_str_lab );
  35:     putshrts( syl, sizeof(struct syl)/SZSHORT*pc );
  36: }
  37: if( fmt_strings ) pruse( asmfile, USEINIT) ;
  38: prlabel(asmfile, frmt_str_lab );
  39: putstr(asmfile, s, fmt_len);
  40: if( fmt_strings ) pruse( asmfile, USECONST) ;
  41: flline();
  42: }
  43: 
  44: LOCAL
  45: putshrts( words, count )
  46: short *words;
  47: {
  48:     while ( count-- > 0 )
  49:     fprintf( asmfile, ".word %d\n", *words++ );
  50: }
  51: 
  52: static char *fmt_seg_ptr;
  53: 
  54: LOCAL
  55: err_fmt(fmt_len)
  56: {
  57:     int i;
  58:     char *ep, *end_ptr = s_init+fmt_len;
  59:     char fmt_seg[50];
  60: 
  61:     fmt_seg_ptr = fmt_seg;
  62:     i = fmtptr - s_init;
  63:     ep = fmtptr - (i<25?i:25);
  64:     i = i + 5;
  65:     while(i && *ep && ep<end_ptr)
  66:     {
  67:         if(ep==fmtptr) save_char('|',fmt_seg);
  68:         save_char(*ep);
  69:         ep++; i--;
  70:     }
  71:     *fmt_seg_ptr++ = '\0';
  72:     errstr("Error in format:  %s", fmt_seg);
  73: }
  74: 
  75: LOCAL
  76: save_char(c)
  77: int c;
  78: {
  79:     c &= 0177;
  80:     if( c == GLITCH ) {
  81:         c = '"';
  82:     } else if (c < ' ' || c == 0177) {
  83:         *fmt_seg_ptr++ ='^';
  84:         c ^= 0100;
  85:     }
  86:     *fmt_seg_ptr++ = c;
  87: }

Defined functions

err_fmt defined in line 54; used 1 times
  • in line 29
putshrts defined in line 44; used 1 times
  • in line 35
save_char defined in line 75; used 2 times
setfmt defined in line 19; used 1 times

Defined variables

fmt_seg_ptr defined in line 52; used 4 times
sccsid defined in line 8; never used

Defined macros

GLITCH defined in line 14; used 1 times
  • in line 80
Last modified: 1985-06-08
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1015
Valid CSS Valid XHTML 1.0 Strict