亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? primary.c

?? Outputs messages to a 2line LCD
?? C
字號:
/* File primary.c: 2.4 (84/11/27,16:26:07) */
/*% cc -O -c %
 *
 */

#include <stdio.h>
#include <string.h>
#include "defs.h"
#include "data.h"
#include "headers.h"



// return 1 if the item is scalar.

int primary (STATE *stpt) {
	char sname[NAMESIZE];
	int num;
	int k, ptr, Unsigned;
	static int ret;
	struct s_symtab;
	static struct m_tmpsym oldstate, *ostpt;

	stpt->ident = 0;  	// clear pointer/array type
   stpt->offset = 0;		// clear any structure offset
   stpt->index = -1;		// index and flag for structures
   TheIndex = 0;
   ItemWasZero = 0;
   if (match("(")) {
   	Unsigned = 0;
      if (match("unsigned"))
      	Unsigned = 1;
      if (match("char")) {
      	if (match("*")) {
         	CastType = POINTER;
            PointerFlag = 1;
            }
         else {
         	if (Unsigned)
            	CastType = UCCHAR;
            else
         		CastType = CCHAR;
            }
        	needbrack(")");
         k = heir10(stpt);
         if (!PointerFlag) {
         	if (Unsigned)
	         	stpt->cast = UCCHAR;
	        	else
	        		stpt->cast = CCHAR;        // define the cast for heir1
          	}
         if (match("*"))
            stpt->pointing = 1;
      	CastType = 0;
//			Check1Cast(stpt);
         funcptr = -1;
         if (Unsigned)
         	TheCast = UCCHAR;
         else
         	TheCast = CCHAR;
         return (k);
         }
      else
      if (match("int")) {
      	if (match("*")) {
         	CastType = POINTER;
         	PointerFlag = 1;
            }
         else {
	         if (Unsigned)
	         	CastType = UCINT;
	         else
	         	CastType = CINT;
           	}
         needbrack(")");
         k = heir10(stpt);
			if (!PointerFlag) {
         	if (Unsigned)
         		stpt->cast = UCINT;
	         else
	         	stpt->cast = CINT;
            }
         if (match("*"))
            stpt->pointing = 1;
      	CastType = 0;
//			Check1Cast(stpt);
         funcptr = -1;
         if (Unsigned)
         	TheCast = UCINT;
         else
         	TheCast = CINT;
         return (k);
         }
      else
      if (match("long")) {
      	if (match("*")) {
         	CastType = POINTER;
            PointerFlag = 1;
            }
         else
         	CastType = CLONG;
         needbrack(")");
         k = heir10(stpt);
        	if (!PointerFlag)
        		stpt->cast = CLONG;
         if (match("*"))
            stpt->pointing = 1;
      	CastType = 0;
//			Check1Cast(stpt);
         funcptr = -1;
         TheCast = CLONG;
         return (k);
         }
      else {
         k = heir1(stpt);
         needbrack(")");
         funcptr = -1;
         return (k);
         }
      }
  	else
	if (amatch("sizeof")) {
		needbrack("(");
		immed(stpt);
		if (amatch("int"))
			onum(intsize());
		else 
		if (amatch("char"))
			onum(1);
      else
      if (amatch("long"))
      	onum(4);
		else 
		if (symname(sname)) {
			if ((ptr = findloc(sname)) || (ptr = findglb(sname))) {
				if (symtab[ptr].storage == LSTATIC)
					error("sizeof local static");
				k = glint(ptr);
				if ((symtab[ptr].type == CINT) || (symtab[ptr].ident == POINTER))
					k *= intsize();
            else
            if (symtab[ptr].type == CLONG)
            	k = 4;
				onum(k);
				} 
			else {
				error("sizeof undeclared variable");
				onum(0);
				}
			} 
		else {
			error("sizeof only on type or variable");
			}
		needbrack(")");
		nl();
		return (stpt->ptr = stpt->type = 0);
		}
	if (symname(sname)) {
		if (ptr = findloc(sname)) {
      	if (CINTpushPending) {
         	gpush(CINT);
            CINTpushPending = FALSE;
            }
      	Constant = 0;
			stpt->ptr = ptr;
			stpt->ident = symtab[ptr].ident;
			stpt->storage = symtab[ptr].storage;
			stpt->type = symtab[ptr].type;
         stpt->funcpar = symtab[ptr].funcpar;
         if (stpt->type > TheType)
         	TheType = stpt->type;
//         stpt->unsyned = symtab[ptr].unsyned;
         if (osymptr && symtab[osymptr].type == CSTRUCT)
         	symtab[osymptr].pntrpntr = ptr;
			if (stpt->ident == FUNCPTR)
				stpt->pointing = 1;
			if (osymptr && stpt->ident == POINTER && symtab[osymptr].reg & CONSTANT)
            symtab[stpt->ptr].reg |= CONSTANT;
			if (!PointerFlag && osymptr && stpt->ident == POINTER && symtab[ptr].reg & CONSTANT)
            symtab[osymptr].reg |= CONSTANT;
      	if (stpt->storage != REGISTER) {
//      		if (osymptr && symtab[osymptr].ident == POINTER)
//					error("Cannot take the address of a register variable");
//            }
//         else {
//         	if (stpt->ident == POINTER || (ch() == '-' && nch() == '>'))
//            	PointerFlag = 1;
         	if (stpt->storage != REGISTER)
         		getloc(stpt);
            if (!PointerFlag && stpt->ident == POINTER && rhs) {
            	if (InX) {
               	ol("ld\tr31,x+");
                  ol("ld\tr30,x+");
                  InX = 0;
                  }
               else {
               	ol("ld\tr27,z+");
                  ol("ld\tr26,z+");
                  InX = 1;
                  }
               }
            Emitting = 1;
            }
         oldstate = *stpt;
         return (1);
			}
		if (ptr = findglb(sname)) {
      	Constant = 0;
         symtab[ptr].used = 1;
			stpt->ptr = ptr;
			stpt->type = symtab[ptr].type;
         if (stpt->type > TheType)
         	TheType = stpt->type;
//         stpt->unsyned = symtab[ptr].unsyned;
			stpt->ident = symtab[ptr].ident;
			stpt->storage = symtab[ptr].storage;
         if (osymptr && symtab[ptr].label)
      		symtab[osymptr].reg |= CONSTANT;
			if (!PointerFlag && osymptr && symtab[osymptr].ident == POINTER && stpt->ident == POINTER && symtab[ptr].reg & CONSTANT)
            symtab[osymptr].reg |= CONSTANT;
         if (symtab[osymptr].type == CSTRUCT)
         	symtab[osymptr].pntrpntr = ptr;
			if (stpt->ident == FUNCTION || stpt->ident == FUNCDEF) {
            if (osymptr && symtab[osymptr].ident == FUNCPTR)
            	symtab[osymptr].args = ptr;	// link the function pointer
            funcptr = 0;
         	oldstate = *stpt;
            return (0);
         	}
         else {
         	if (stpt->type == STRUCTINST && stkptr) {
            	ostpt = &oldstate;
            	if (ostpt->storage == AUTO) {
            		rvalue(ostpt);
            		gpush(ostpt->type);
               	stkptr--;
                  }
               }
        		LoadBase(stpt);
            Emitting = 1;
         	oldstate = *stpt;
				return (1);
            }
			}
		  
		blanks();
		if (ch() != '(')
			error("undeclared variable");
		ptr = addglb(sname, FUNCDEF, CINT, 0, PUBLIC, 0);
		stpt->ptr = ptr;
		stpt->type = CINT;
		return (0);
		}
	if (constant(&num, stpt)) {
		stpt->ptr = 0;
      symtab[0].type = stpt->type;
      TheIndex = num;
      return (0);
      }
	else {
		error("invalid expression");
		immed(stpt);
		onum(0);
		nl();
		junk();
		return (0);
		}
}

/*
 * true if val1 -> int pointer or int array and val2 not pointer or array
 */

int dbltest(STATE *st1pt, STATE *st2pt) {
	if (st1pt == NULL)
		return (FALSE);
	if (st1pt->ident != CINT)
		return (FALSE);
	if (st2pt->ident)
		return (FALSE);
	return (TRUE);
}

/*
 * determine type of binary operation
 */

void result(STATE *st1pt, STATE *st2pt) {
	if (st1pt->ident && st2pt->ident)
		st1pt->ident = 0;
	else 
	if (st2pt->ident) {
		st1pt->ptr = st2pt->ptr;
		st1pt->type = st2pt->type;
		st1pt->ident = st2pt->ident;
		}
}
	  

int constant(int *valptr, STATE *stpt) {
	
	if (qstr(valptr)) {
		immed(stpt);
      outstr("(");
		printlabel(litlab);
		if (*valptr != 0) {
			outbyte('+');
			onum(*valptr);
			}
      outstr(")");
//      outstr("+0x8000");
		nl();
      if (symtab[osymptr].ident == POINTER)
      	symtab[osymptr].reg |= CONSTANT;
      stpt->ident = POINTER;
      stpt->type = 1;
		return (1);
		} 

	if (number(valptr) || pstr(valptr)) {
   	if (*valptr == 0 && ArrayFlag)
			ItemWasZero = 1;
		if (Returning && testmatch(";"))
      	osymptr = Returning;
      if ((match("L") || match("l")) && symtab[osymptr].type == CLONG && Indexing)
      	error("Cannot use a long variable as index");
      else
      if (osymptr && symtab[osymptr].type == CLONG && !Indexing && !CallFunction) {
//8-9			if (symtab[osymptr].storage == REGISTER || CINTpushPending)
//8-9            gpush(CINT);
	     	long_immed();
	      stpt->type = CLONG;
	      if (osymptr && symtab[osymptr].type != CLONG && CastType == 0)
	        	error("Requires cast");
       	}
//      else
//      if (TheType == CCHAR) {
//      	ot("ldi\tr30,");
//         stpt->type = CCHAR;
//         }
      else {
//      if (!IfFlag && symtab[osymptr].type == CCHAR) {
//      if (symtab[osymptr].type == CCHAR || symtab[osymptr].type == UCCHAR) {
//      	ot("ldi\tr30,");
//         stpt->type = CCHAR;
//         }
//      else {
//8-9			if (symtab[osymptr].storage == REGISTER || CINTpushPending)
//8-9            gpush(CINT);
			if (!ItemWasZero)
				ot("ldiz\t");
         stpt->type = VOID;
         }
      if (StructureOffset)
        	TheVal = *valptr * StructureOffset;
      if (symtab[osymptr].type == CCHAR || symtab[osymptr].type == UCCHAR) {
         if (*valptr > 255 || *valptr <- 128)
         	error("Constant is probably out of range");
         }
     	if (stpt->type == CLONG || !ItemWasZero) {
     		onum(*valptr);
			nl();
      	InX = 0;
         }
		return (1);
		}
	
	return (0);	  
}


int number(int *val) {
	int minus, base;
	char c;
   int k;

   if (NegFlag) {
   	lptr--;
      while (*(line+lptr) == ' ')
      	lptr--;
      NegFlag = 0;
      }
	k = minus = 1;
	while (k) {
		k = 0;
		if (match("+"))
			k = 1;
		if (match("-")) {
			minus = (-minus);
			k = 1;
			}
		}
	if (!numeric(c = ch()))
		return (0);
	if (match("0x") || match("0X")) {
		while (numeric(c = ch()) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) {
			inbyte();
			k = k * 16 + (numeric (c) ? (c - '0') : ((c & 07) + 9));
			}
		}
	else {
		base = (c == '0') ? 8 : 10;
		while (numeric(ch())) {
			c = inbyte();
			k = k * base + (c - '0');
			}
		}
	if (minus < 0)
		k = (-k);
	*val = k;
	return (1);
}



int pstr(int *val) {
	int k;
	char c;

	k = 0;
	if (!match("'"))
		return (0);
	while ((c = gch()) != 39) {
		c = (c == '\\') ? spechar(): c;
		k = (k & 255) * 256 + (c & 255);
		}
	*val = k;
	return (1);
}



int qstr(int *val) {
	char c;

	if (!match(quote))
		return (0);
	*val = litptr;
	while (ch() != '"') {
		if (ch() == 0)
			break;
		if (litptr >= LITMAX) {
			error ("string space exhausted");
			while (!match(quote))
				if (gch() == 0)
					break;
			return (1);
			}
		c = gch();
		litq[litptr++] = (c == '\\') ? spechar(): c;
		}
	gch();
	litq[litptr++] = 0;
	return (1);
}

/*
 * decode special characters (preceeded by back slashes)
 */

char spechar(void) {
	char c;
	c = ch();

	if (c == 'n') 
		c = EOL;
	else 
	if (c == 't') 
		c = TAB;
	else 
	if (c == 'r') 
		c = CR;
	else 
	if (c == 'f') 
		c = FFEED;
	else 
	if (c == 'b') 
		c = BKSP;
	else 
	if (c == '0') 
		c = EOS;
	else 
		if (c == EOS) 
			return 0;

	gch();
	return (c);
}

// Perform a function call
//
// called from "heir11", this routine will either call the named
// function, or if the supplied ptr is zero, will call the contents
// of HL

void callfunction(int ptr) {
	int i, bytes, p;

	nargs = bytes = 0;
	blanks();
   CallFunction = TRUE;
//	if (ptr == 0)
//		gpush(CINT);
	while (!streq(line + lptr, ")")) {
   	osymptr = 0;
		if (endst())
			break;
		expression(NO);
		if (ptr == 0)
			swapstk();
		bytes += gpush(FuncArgType);
      nargs++;
		if (!match(","))
			break;
		}
	needbrack(")");
   p = ptr;
   if (ptr == 0)
   	p = funcptr;
   if (nargs != symtab[p].args)
  		error("Arguments do not match definition");
	i = 0;
	while (symtab[OrgFptr].regs[i]) {
//   	ot("st\t-y,r");
		ot("push\tr");
      onum(symtab[OrgFptr].regs[i]);
      nl();
      i++;
//      bytes++;
      }
//   prologue(i);

	// Now do a check on the hardware/software stack limits if required
   if (stkchk && !(strcmp(symtab[ptr].name, "outp") == 0)) {
   	if (hardstklimit != 0xffff)
	   	ol("rcall\t_ChkHardStk");
      ol("rcall\t_ChkSoftStk");
      }
	if (ptr) {
		ucall(symtab[ptr].name);
		stkp = modstk(stkp + bytes);
      }
	else {
		callstk();
//      bytes += 2;								// original
//		stkp = modstk(stkp + bytes) - 2;		// first mod
		stkp = modstk(stkp + bytes);
      }

   while (i > 0) {
   	i--;
//   	ot("ld\tr");
		ot("pop\tr");
      onum(symtab[OrgFptr].regs[i]);
//      outstr(",y+");
      nl();
      }
   if (stkchk && !(strcmp(symtab[ptr].name, "outp") == 0)) {
   	if (hardstklimit != 0xffff)
	   	ol("rcall\t_ChkHardStk");
      ol("rcall\t_ChkSoftStk");
      }
   CallFunction = FALSE;
}


void needlval(void) {
	error("Must be lvalue");
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕亚洲区| 精品国产乱码久久久久久闺蜜| 国产麻豆精品一区二区| 日韩二区三区四区| 日韩专区中文字幕一区二区| 亚洲一区二区三区四区中文字幕 | 亚洲电影一区二区| 亚洲视频狠狠干| 亚洲一区二区在线观看视频| 亚洲免费在线电影| 亚洲第一久久影院| 日本最新不卡在线| 极品少妇xxxx精品少妇偷拍| 黄网站免费久久| 高清免费成人av| 91麻豆蜜桃一区二区三区| 色婷婷国产精品久久包臀| 欧洲色大大久久| 日韩午夜电影av| 久久蜜桃av一区二区天堂| 国产精品午夜免费| 亚洲第四色夜色| 国产在线精品一区在线观看麻豆| 风间由美一区二区三区在线观看 | 久久国产精品99精品国产| 国产麻豆视频一区二区| av成人老司机| 欧美夫妻性生活| 国产视频在线观看一区二区三区| 国产精品久久久久久久久久久免费看| 亚洲黄色小视频| 久久国产精品99久久人人澡| 成人av电影观看| 欧美嫩在线观看| 亚洲国产成人私人影院tom| 亚洲一区二区欧美日韩 | 国产亚洲欧美日韩日本| 国产精品情趣视频| 奇米888四色在线精品| 国产福利一区二区三区视频| 欧美日韩在线不卡| 久久精品人人爽人人爽| 亚洲高清久久久| eeuss影院一区二区三区 | 国产欧美精品一区二区色综合| 亚洲三级视频在线观看| 国模冰冰炮一区二区| 欧美日精品一区视频| 国产日本欧洲亚洲| 日韩—二三区免费观看av| 91啪亚洲精品| 日本一区二区免费在线观看视频 | 日韩一区二区三区视频| 日韩伦理电影网| 国产黄色91视频| 欧美一区二区美女| 亚洲综合一区二区| 9色porny自拍视频一区二区| 精品国产91乱码一区二区三区| 一区二区三区在线观看欧美| 成人免费高清在线| 久久精品日韩一区二区三区| 久久av中文字幕片| 777奇米四色成人影色区| 亚洲色图.com| 99re6这里只有精品视频在线观看| 久久久久久久久久电影| 日韩精品电影在线| 欧美日韩一区二区电影| 亚洲一区在线看| 日本高清免费不卡视频| 亚洲色欲色欲www在线观看| 成人a免费在线看| 国产欧美日韩精品在线| 国产91精品在线观看| 国产亚洲人成网站| 国产精品18久久久久| 久久久久97国产精华液好用吗| 九九精品一区二区| 2020日本不卡一区二区视频| 国产一级精品在线| 久久精品一区二区三区四区| 国产在线精品一区二区三区不卡| 日韩欧美国产综合在线一区二区三区| 三级久久三级久久| 欧美一区二区三区视频在线观看| 午夜久久电影网| 欧美一区永久视频免费观看| 日本va欧美va精品发布| 欧美一级爆毛片| 国产乱码字幕精品高清av| 日本一区二区三区高清不卡| 91在线高清观看| 亚洲国产精品一区二区久久| 制服丝袜亚洲网站| 狠狠色丁香婷综合久久| 国产精品乱人伦| 在线观看日韩精品| 日韩av在线发布| 国产亚洲人成网站| 色久综合一二码| 青青国产91久久久久久| 2014亚洲片线观看视频免费| 成人av先锋影音| 亚洲综合一区二区三区| 日韩欧美不卡一区| 粉嫩绯色av一区二区在线观看| 亚洲免费在线电影| 精品成人私密视频| 色综合久久久久综合99| 日本麻豆一区二区三区视频| 久久久蜜桃精品| 欧美无砖砖区免费| 国产成人综合精品三级| 亚洲在线观看免费| 国产亚洲一区二区三区在线观看| 91色乱码一区二区三区| 久久av资源网| 亚洲一区在线电影| 欧美精品一区二区三区高清aⅴ | 亚洲图片欧美综合| 久久一区二区三区四区| 在线观看视频一区二区| 国产在线精品一区二区不卡了 | 亚洲黄色性网站| 欧美精品一区二区三区蜜桃视频 | 国产精品福利一区二区三区| 欧美丰满美乳xxx高潮www| 国产a级毛片一区| 日韩av一区二区三区四区| 亚洲视频一区二区在线观看| 日韩欧美不卡在线观看视频| 欧美性一级生活| 成人动漫av在线| 久久国产视频网| 视频一区二区三区在线| 亚洲精品伦理在线| 国产欧美日韩另类视频免费观看| 制服丝袜亚洲网站| 欧美日韩精品系列| 欧美亚洲一区三区| 日本韩国一区二区| 色视频一区二区| av在线这里只有精品| 国产露脸91国语对白| 日本vs亚洲vs韩国一区三区二区 | 欧美精品一区二区高清在线观看| 欧美性受xxxx| 91福利精品视频| 欧美午夜精品一区| 欧洲激情一区二区| 欧美色图天堂网| 色94色欧美sute亚洲线路一ni| 成人三级在线视频| av电影一区二区| 91在线码无精品| 色婷婷久久综合| 色拍拍在线精品视频8848| 色女孩综合影院| 色老汉一区二区三区| 欧美自拍偷拍一区| 欧美色老头old∨ideo| 欧美日韩的一区二区| 制服丝袜成人动漫| 精品久久国产97色综合| 欧美电视剧免费观看| 欧美精品一区二区蜜臀亚洲| 国产调教视频一区| 亚洲欧美aⅴ...| 亚洲一级电影视频| 蜜乳av一区二区三区| 国模无码大尺度一区二区三区| 国产美女精品在线| 91免费国产在线| 欧美日韩黄色一区二区| 日韩欧美中文一区二区| 久久久美女毛片| 亚洲你懂的在线视频| 五月天激情综合网| 国产综合一区二区| av午夜精品一区二区三区| 在线一区二区观看| 欧美成人欧美edvon| 国产欧美精品日韩区二区麻豆天美| 综合自拍亚洲综合图不卡区| 视频一区二区欧美| 国产精品一区二区久久不卡| 91视频国产观看| 精品欧美一区二区久久| 中文字幕在线观看一区| 五月天网站亚洲| 成人h精品动漫一区二区三区| 欧美视频中文一区二区三区在线观看| 欧美日本一区二区三区四区| 久久精品日韩一区二区三区| 亚洲韩国精品一区| 国产福利91精品| 欧美精品 日韩| 国产精品大尺度| 精品影院一区二区久久久|