Overview
Comment: | Implement (attribute userflags) syntax, in order to access bit patterns of user flags directly in class codes (e.g. so that they can be passed to subroutines, etc). |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a724f442555a817273ad313e0690c954 |
User & Date: | user on 2022-01-25 06:31:07 |
Other Links: | manifest | tags |
Context
2022-01-29
| ||
05:55 | Implement the Sound instruction. (There are still a few problems such as clicks at the end of some sound effects, and a few problems with the sound test menu. However, it mostly works, now.) check-in: d15195a921 user: user tags: trunk | |
2022-01-25
| ||
06:31 | Implement (attribute userflags) syntax, in order to access bit patterns of user flags directly in class codes (e.g. so that they can be passed to subroutines, etc). check-in: a724f44255 user: user tags: trunk | |
2022-01-21
| ||
05:17 | Implement loading standard sounds, and working in sound test menu. (Free replacements for standard sounds are not yet available, though.) check-in: b43c838ca3 user: user tags: trunk | |
Changes
Modified class.c from [cfa005344c] to [633629bcf7].
︙ | ︙ | |||
1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 | } tokenv=x; goto numeric; case OP_CASE: cl->codes[ptr++]=OP_CASE; ptr=peep=case_block(cla,ptr,hash); break; default: ParseError("Invalid parenthesized instruction\n"); } } else if(tokent==TF_CLOSE) { if(flowdepth) ParseError("Unterminated flow control structure\n"); if(peep<ptr && cl->codes[ptr-1]==OP_RET) break; if(peep<ptr && (cl->codes[ptr-1]&0xFF00)==0x1E00) break; | > > > > > > > > > > > > > > > > > > > > > > > > > > | 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 | } tokenv=x; goto numeric; case OP_CASE: cl->codes[ptr++]=OP_CASE; ptr=peep=case_block(cla,ptr,hash); break; case OP_MISC4: y=0x000; goto uflags; case OP_MISC4_C: y=0x100; goto uflags; case OP_MISC5: y=0x020; goto uflags; case OP_MISC5_C: y=0x120; goto uflags; case OP_MISC6: y=0x040; goto uflags; case OP_MISC6_C: y=0x140; goto uflags; case OP_MISC7: y=0x060; goto uflags; case OP_MISC7_C: y=0x160; goto uflags; case OP_COLLISIONLAYERS: y=0x080; goto uflags; case OP_COLLISIONLAYERS_C: y=0x180; goto uflags; uflags: x=0; for(;;) { nxttok(); if(tokent==TF_CLOSE) break; if(Tokenf(TF_MACRO) || !Tokenf(TF_NAME) || tokenv!=OP_USERFLAG) ParseError("User flag or close parenthesis expected\n"); tokenv=look_hash(glohash,HASH_SIZE,0x1000,0x10FF,0,"user flags"); if(!tokenv) ParseError("User flag ^%s not defined\n",tokenstr); if((tokenv^y)&0xE0) { if(y&0x100) ParseError("User flag ^%s belongs to the wrong attribute\n",tokenstr); } else { if(Tokenf(TF_COMMA)) x&=~(1<<(tokenv&31)); else x|=1<<(tokenv&31); } } tokenv=x; goto numeric; default: ParseError("Invalid parenthesized instruction\n"); } } else if(tokent==TF_CLOSE) { if(flowdepth) ParseError("Unterminated flow control structure\n"); if(peep<ptr && cl->codes[ptr-1]==OP_RET) break; if(peep<ptr && (cl->codes[ptr-1]&0xFF00)==0x1E00) break; |
︙ | ︙ |
Modified class.doc from [e20d997f8f] to [28dfcc240c].
︙ | ︙ | |||
1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 | =<label> Go to a label. (Put the colon after the equal sign; this instruction, and the one below, are using a double sigil.) ,<label> Call a label as a subroutine; when it returns, comes back to here. . ( x -- ) + ( in1 in2 -- out ) Add two numbers together. - ( in1 in2 -- out ) Subtract in2 from in1. | > > > > > > > > > > > | 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 | =<label> Go to a label. (Put the colon after the equal sign; this instruction, and the one below, are using a double sigil.) ,<label> Call a label as a subroutine; when it returns, comes back to here. (<attribute> <userflags...>) ( -- number ) The attribute must be one of Misc4, Misc5, Misc6, Misc7, or CollisionLayers, and may optionally be preceded by a comma. This produces the number with all of the specified bits set only. If the attribute is preceded by a comma, then it is an error to specify any user flags not assigned to that variable, otherwise any user flags that do not belong are ignored. Any user flag may optionally be preceded by a comma, and may occur multiple times; only the last instance of each is used. If the last instance of a flag has a comma then that bit is clear, if without a comma then it is set. . ( x -- ) + ( in1 in2 -- out ) Add two numbers together. - ( in1 in2 -- out ) Subtract in2 from in1. |
︙ | ︙ |