1578 lines
56 KiB
C
1578 lines
56 KiB
C
#include "../../emit.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
char uxn_temp_strbuf[256];
|
|
|
|
#define UXN_OP_2 (1 << 5)
|
|
#define UXN_OP_R (1 << 6)
|
|
#define UXN_OP_K (1 << 7)
|
|
|
|
enum uxn_opcode {
|
|
BRK = 0x00,
|
|
EQU = 0x08,
|
|
LDZ = 0x10,
|
|
ADD = 0x18,
|
|
INC = 0x01,
|
|
NEQ = 0x09,
|
|
STZ = 0x11,
|
|
SUB = 0x19,
|
|
POP = 0x02,
|
|
GTH = 0x0A,
|
|
LDR = 0x12,
|
|
MUL = 0x1A,
|
|
NIP = 0x03,
|
|
LTH = 0x0B,
|
|
STR = 0x13,
|
|
DIV = 0x1B,
|
|
SWP = 0x04,
|
|
JMP = 0x0C,
|
|
LDA = 0x14,
|
|
AND = 0x1C,
|
|
ROT = 0x05,
|
|
JCN = 0x0D,
|
|
STA = 0x15,
|
|
ORA = 0x1D,
|
|
DUP = 0x06,
|
|
JSR = 0x0E,
|
|
DEI = 0x16,
|
|
EOR = 0x1E,
|
|
OVR = 0x07,
|
|
STH = 0x0F,
|
|
DEO = 0x17,
|
|
SFT = 0x1F,
|
|
LIT = 0x80,
|
|
JCI = 0x20,
|
|
JMI = 0x40,
|
|
JSI = 0x60,
|
|
};
|
|
char emit_uxn_lib_undar_tal[] = {
|
|
0x40, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x23, 0x38, 0x30, 0x20,
|
|
0x41, 0x4e, 0x44, 0x6b, 0x20, 0x45, 0x51, 0x55, 0x20, 0x23, 0x66, 0x66,
|
|
0x20, 0x4d, 0x55, 0x4c, 0x20, 0x53, 0x57, 0x50, 0x20, 0x4a, 0x4d, 0x50,
|
|
0x32, 0x72, 0x0a, 0x40, 0x73, 0x64, 0x69, 0x76, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x4f, 0x56, 0x52, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44,
|
|
0x20, 0x3f, 0x26, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20, 0x26, 0x62,
|
|
0x5f, 0x70, 0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32,
|
|
0x20, 0x50, 0x4f, 0x50, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44,
|
|
0x20, 0x3f, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x70,
|
|
0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4a,
|
|
0x4d, 0x50, 0x32, 0x72, 0x20, 0x20, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67,
|
|
0x5f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x53, 0x57,
|
|
0x50, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50,
|
|
0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20,
|
|
0x44, 0x49, 0x56, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53,
|
|
0x57, 0x50, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x4a, 0x4d, 0x50,
|
|
0x32, 0x72, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20,
|
|
0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50,
|
|
0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20,
|
|
0x50, 0x4f, 0x50, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44, 0x20,
|
|
0x3f, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x6e, 0x65,
|
|
0x67, 0x20, 0x20, 0x20, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x55, 0x42,
|
|
0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x26, 0x61,
|
|
0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x52, 0x4f, 0x54, 0x32,
|
|
0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x44,
|
|
0x49, 0x56, 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40,
|
|
0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x20, 0x28, 0x20, 0x73, 0x69,
|
|
0x7a, 0x65, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
|
0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52,
|
|
0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30,
|
|
0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d,
|
|
0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x20, 0x4c,
|
|
0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53,
|
|
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d,
|
|
0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x6b, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
|
|
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53,
|
|
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d,
|
|
0x5f, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
|
|
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x72, 0x65, 0x74, 0x75,
|
|
0x72, 0x6e, 0x5f, 0x20, 0x28, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2a, 0x20,
|
|
0x73, 0x72, 0x63, 0x2a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f,
|
|
0x69, 0x6e, 0x74, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75,
|
|
0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56,
|
|
0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30,
|
|
0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44,
|
|
0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36,
|
|
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20,
|
|
0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38,
|
|
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41,
|
|
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
|
0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
|
0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44,
|
|
0x41, 0x32, 0x20, 0x4e, 0x45, 0x51, 0x32, 0x20, 0x3f, 0x26, 0x65, 0x6e,
|
|
0x64, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44,
|
|
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64, 0x2e,
|
|
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
|
|
0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c,
|
|
0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23,
|
|
0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44,
|
|
0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20,
|
|
0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
|
0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
|
0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44,
|
|
0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44,
|
|
0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f,
|
|
0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e,
|
|
0x75, 0x65, 0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x21,
|
|
0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a, 0x0a, 0x20, 0x20,
|
|
0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34,
|
|
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41,
|
|
0x44, 0x44, 0x32, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e,
|
|
0x67, 0x74, 0x68, 0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x3b, 0x6d, 0x65, 0x6d,
|
|
0x5f, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74,
|
|
0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32,
|
|
0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
|
|
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21,
|
|
0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65,
|
|
0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
|
|
0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61,
|
|
0x66, 0x72, 0x65, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x2d, 0x2d, 0x20, 0x72,
|
|
0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30,
|
|
0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
|
|
0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
|
|
0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32,
|
|
0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x6d,
|
|
0x63, 0x70, 0x79, 0x5f, 0x20, 0x28, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74,
|
|
0x68, 0x2a, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x2a, 0x20, 0x2d, 0x2d, 0x20,
|
|
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32,
|
|
0x72, 0x20, 0x30, 0x30, 0x30, 0x38, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72,
|
|
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23,
|
|
0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
|
|
0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32,
|
|
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
|
|
0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53,
|
|
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e,
|
|
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
|
0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30,
|
|
0x30, 0x20, 0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, 0x61,
|
|
0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44,
|
|
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
|
0x4c, 0x44, 0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41,
|
|
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74,
|
|
0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20,
|
|
0x49, 0x4e, 0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, 0x53,
|
|
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32,
|
|
0x20, 0x21, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a,
|
|
0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20,
|
|
0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
|
|
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
|
|
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
|
|
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
|
|
0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x5f,
|
|
0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73,
|
|
0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f,
|
|
0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30,
|
|
0x30, 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41,
|
|
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62,
|
|
0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20,
|
|
0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x61, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, 0x52,
|
|
0x32, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32, 0x20,
|
|
0x53, 0x55, 0x42, 0x32, 0x20, 0x23, 0x30, 0x30, 0x33, 0x30, 0x20, 0x41,
|
|
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50,
|
|
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
|
|
0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41,
|
|
0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x61, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x53, 0x57, 0x50,
|
|
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63,
|
|
0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44,
|
|
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20,
|
|
0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a, 0x20,
|
|
0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32,
|
|
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x61,
|
|
0x6d, 0x63, 0x70, 0x79, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26,
|
|
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
|
|
0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32,
|
|
0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e,
|
|
0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x5f, 0x20, 0x28, 0x20,
|
|
0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
|
0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32,
|
|
0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x63,
|
|
0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32,
|
|
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x36, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
|
0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45,
|
|
0x4f, 0x52, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x4c, 0x54,
|
|
0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x23,
|
|
0x30, 0x30, 0x30, 0x30, 0x20, 0x4e, 0x45, 0x51, 0x32, 0x20, 0x23, 0x30,
|
|
0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
|
|
0x20, 0x4c, 0x44, 0x41, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x48, 0x72, 0x20,
|
|
0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30,
|
|
0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x32, 0x20, 0x3f, 0x26, 0x65, 0x6e,
|
|
0x64, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30,
|
|
0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
|
|
0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
|
0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64,
|
|
0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e,
|
|
0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32,
|
|
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20,
|
|
0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x73, 0x64,
|
|
0x69, 0x76, 0x2f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x4d, 0x55, 0x4c, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x23,
|
|
0x30, 0x30, 0x33, 0x30, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41,
|
|
0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42,
|
|
0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44,
|
|
0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
|
|
0x4f, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x73, 0x64, 0x69,
|
|
0x76, 0x2f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20,
|
|
0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x32,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20,
|
|
0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38,
|
|
0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c, 0x54, 0x48,
|
|
0x32, 0x20, 0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a,
|
|
0x0a, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x32, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x72, 0x20, 0x53, 0x54,
|
|
0x48, 0x72, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x32, 0x20, 0x3f,
|
|
0x26, 0x65, 0x6e, 0x64, 0x2e, 0x33, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
|
|
0x30, 0x30, 0x32, 0x64, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
|
0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30,
|
|
0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50,
|
|
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54,
|
|
0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20,
|
|
0x20, 0x26, 0x65, 0x6e, 0x64, 0x2e, 0x33, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c,
|
|
0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44,
|
|
0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
|
|
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x61, 0x6d, 0x63, 0x70, 0x79, 0x5f,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72,
|
|
0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a,
|
|
0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20,
|
|
0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50,
|
|
0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f,
|
|
0x6e, 0x61, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d,
|
|
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20,
|
|
0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54,
|
|
0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32,
|
|
0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75,
|
|
0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30,
|
|
0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d,
|
|
0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f,
|
|
0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d,
|
|
0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49,
|
|
0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55, 0x42,
|
|
0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54,
|
|
0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
|
|
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x61,
|
|
0x64, 0x64, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20,
|
|
0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c,
|
|
0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55,
|
|
0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32,
|
|
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
|
|
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
|
|
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
|
|
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x20, 0x28, 0x20,
|
|
0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73,
|
|
0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f,
|
|
0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30,
|
|
0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
|
|
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6d,
|
|
0x75, 0x6c, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20,
|
|
0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c,
|
|
0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55,
|
|
0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41,
|
|
0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
|
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32,
|
|
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
|
|
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
|
|
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
|
|
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x76, 0x5f, 0x20, 0x28, 0x20,
|
|
0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73,
|
|
0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f,
|
|
0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30,
|
|
0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
|
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41,
|
|
0x32, 0x20, 0x73, 0x64, 0x69, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21,
|
|
0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65,
|
|
0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
|
|
0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69,
|
|
0x6e, 0x74, 0x5f, 0x65, 0x71, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20,
|
|
0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
|
0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32,
|
|
0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34,
|
|
0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20,
|
|
0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x45,
|
|
0x51, 0x55, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20,
|
|
0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72,
|
|
0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f,
|
|
0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40,
|
|
0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a,
|
|
0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
|
0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52,
|
|
0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30,
|
|
0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
|
|
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
|
0x4e, 0x45, 0x51, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50,
|
|
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
|
|
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
|
|
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
|
|
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x62,
|
|
0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75,
|
|
0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56,
|
|
0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30,
|
|
0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43,
|
|
0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20,
|
|
0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32,
|
|
0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
|
0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c,
|
|
0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20,
|
|
0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20,
|
|
0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72,
|
|
0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f,
|
|
0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40,
|
|
0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a,
|
|
0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
|
0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52,
|
|
0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30,
|
|
0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
|
|
0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
|
|
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
|
0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53,
|
|
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23,
|
|
0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x47, 0x54,
|
|
0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x23,
|
|
0x30, 0x31, 0x20, 0x45, 0x4f, 0x52, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
|
|
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x67,
|
|
0x74, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d,
|
|
0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49,
|
|
0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42,
|
|
0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e,
|
|
0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
|
0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
|
|
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30,
|
|
0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
|
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20,
|
|
0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30,
|
|
0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75,
|
|
0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30,
|
|
0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d,
|
|
0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x67, 0x65,
|
|
0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d,
|
|
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20,
|
|
0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54,
|
|
0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32,
|
|
0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
|
|
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a,
|
|
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53,
|
|
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30,
|
|
0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20,
|
|
0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45,
|
|
0x4f, 0x52, 0x32, 0x20, 0x47, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30,
|
|
0x20, 0x53, 0x57, 0x50, 0x20, 0x23, 0x30, 0x31, 0x20, 0x45, 0x4f, 0x52,
|
|
0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20,
|
|
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26,
|
|
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50,
|
|
0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a,
|
|
0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x20, 0x28, 0x20,
|
|
0x66, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
|
0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32,
|
|
0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32,
|
|
0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
|
|
0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
|
0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x21, 0x26,
|
|
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23,
|
|
0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32,
|
|
0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e,
|
|
0x74, 0x5f, 0x61, 0x62, 0x73, 0x5f, 0x20, 0x28, 0x20, 0x66, 0x2a, 0x20,
|
|
0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c,
|
|
0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55,
|
|
0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53,
|
|
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
|
|
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30,
|
|
0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30,
|
|
0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x3f, 0x26, 0x74, 0x68, 0x65, 0x6e,
|
|
0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
|
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x65, 0x6e, 0x64,
|
|
0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x74, 0x68, 0x65, 0x6e, 0x2e,
|
|
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20,
|
|
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
|
0x53, 0x55, 0x42, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64,
|
|
0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74,
|
|
0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
|
0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
|
|
0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a,
|
|
0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x40, 0x73,
|
|
0x74, 0x72, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x3e, 0x20, 0x28,
|
|
0x20, 0x73, 0x74, 0x72, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x29, 0x0a, 0x20,
|
|
0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x20, 0x44, 0x55, 0x50, 0x20,
|
|
0x3f, 0x7b, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20,
|
|
0x4a, 0x4d, 0x50, 0x32, 0x72, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x23, 0x31, 0x38, 0x20, 0x44, 0x45, 0x4f, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
|
0x49, 0x4e, 0x43, 0x32, 0x20, 0x21, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e,
|
|
0x74, 0x3e, 0x0a, 0x0a, 0x40, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e,
|
|
0x67, 0x74, 0x68, 0x5f, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x40,
|
|
0x6d, 0x65, 0x6d, 0x5f, 0x20, 0x20, 0x20, 0x20};
|
|
unsigned int emit_uxn_lib_undar_tal_len = 6212;
|
|
|
|
void
|
|
uxn_emit_error(const char *str, i32 length, i32 line)
|
|
{
|
|
fprintf(stderr, "\n===\nError at line: %d '%.*s'\n===\n", line, length, str);
|
|
exit(1);
|
|
}
|
|
|
|
void
|
|
uxn_mem(u32 a)
|
|
{
|
|
USED(a);
|
|
}
|
|
|
|
void
|
|
uxn_prolog(Arena *a, List *out)
|
|
{
|
|
/*StrBuf_append(a, out, "|100\n\tLIT2r 0000 main_ POP2r BRK\n\n");*/
|
|
StrBuf_append(a, out, "|100\n\tLIT2r 0000\n\n");
|
|
}
|
|
|
|
void
|
|
uxn_epilogue(Arena *a, List *out)
|
|
{
|
|
StrBuf_append_exactly(a, out, emit_uxn_lib_undar_tal,
|
|
emit_uxn_lib_undar_tal_len);
|
|
}
|
|
|
|
void
|
|
uxn_emit_add(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "ADD2 ");
|
|
else
|
|
StrBuf_append(a, out, "ADD ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_sub(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "SUB2 ");
|
|
else
|
|
StrBuf_append(a, out, "SUB ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_mul(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "MUL2 ");
|
|
else
|
|
StrBuf_append(a, out, "MUL ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_div(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "DIV2 ");
|
|
else
|
|
StrBuf_append(a, out, "DIV ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_lt(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "LTH2 ");
|
|
else
|
|
StrBuf_append(a, out, "LTH ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_le(Arena *a, List *out, u32 size)
|
|
{
|
|
USED(size);
|
|
StrBuf_append(a, out, "ROT SWP LTH ?{ LTH #00 EQU JMPr } GTH JMPr ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_gt(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "GTH2 ");
|
|
else
|
|
StrBuf_append(a, out, "GTH ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_ge(Arena *a, List *out, u32 size)
|
|
{
|
|
USED(size);
|
|
StrBuf_append(a, out, "ROT SWP GTH ?{ GTH #00 EQU JMPr } LTH JMPr ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_ne(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "NEQ2 ");
|
|
else
|
|
StrBuf_append(a, out, "NEQ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_eq(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "EQU2 ");
|
|
else
|
|
StrBuf_append(a, out, "EQU ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_false(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#0000 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_true(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#0001 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_nil(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#0000 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_neg(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#0000 SUB2 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_not(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#0000 EQU2 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_void(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
u32
|
|
uxn_get_size(SymbolType t)
|
|
{
|
|
switch(t) {
|
|
case SYMBOL_BOOL:
|
|
return 1;
|
|
case SYMBOL_BYTE:
|
|
return 1;
|
|
case SYMBOL_INT:
|
|
return 2;
|
|
case SYMBOL_NAT:
|
|
return 2;
|
|
case SYMBOL_REAL:
|
|
return 2;
|
|
case SYMBOL_STR:
|
|
return 2;
|
|
case SYMBOL_U8:
|
|
return 1;
|
|
case SYMBOL_I8:
|
|
return 1;
|
|
case SYMBOL_I16:
|
|
return 2;
|
|
case SYMBOL_U16:
|
|
return 2;
|
|
case SYMBOL_I32:
|
|
return 4;
|
|
case SYMBOL_U32:
|
|
return 4;
|
|
case SYMBOL_F32:
|
|
return 4;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void
|
|
uxn_emit_type(Arena *a, List *out, Symbol *sym, bool local)
|
|
{
|
|
if(local) {
|
|
if(sym->ref) {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr #%04x ADD2 LDA2\n", sym->ref);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr LDA2\n");
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, "!{ @%.*s $%d } ", sym->name_length, sym->name,
|
|
uxn_get_size(sym->type));
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
}
|
|
|
|
void
|
|
uxn_emit_int(Arena *a, List *out, const char *str, i32 length)
|
|
{
|
|
i32 i = (i32)strtol(str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "#%04x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
USED(length);
|
|
}
|
|
|
|
void
|
|
uxn_emit_nat(Arena *a, List *out, const char *str, i32 length)
|
|
{
|
|
u32 i = (u32)strtol(str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "#%04x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
USED(length);
|
|
}
|
|
|
|
void
|
|
uxn_emit_real(Arena *a, List *out, const char *str, i32 length)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
USED(str);
|
|
USED(length);
|
|
/// TODO: implement this
|
|
}
|
|
|
|
void
|
|
uxn_emit_byte(Arena *a, List *out, const char *str, i32 length)
|
|
{
|
|
u8 i = (u8)strtol(str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "#%04x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
USED(length);
|
|
}
|
|
|
|
void
|
|
uxn_emit_char(Arena *a, List *out, const char *str, i32 length)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "#%02x ", (char)str[1]);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
USED(length);
|
|
}
|
|
|
|
void
|
|
uxn_emit_constant(Arena *a, List *out, Symbol *sym, bool local)
|
|
{
|
|
if(local) {
|
|
if(sym->ref) {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr #%04x ADD2 STA2\n", sym->ref);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr STA2\n");
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, ";%.*s STA2 ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
}
|
|
|
|
void
|
|
uxn_emit_array(Arena *a, List *out, Symbol *sym, List *in)
|
|
{
|
|
Node *curr;
|
|
SymbolType t = sym->secondary_type;
|
|
|
|
sprintf(uxn_temp_strbuf, "@%.*s ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
|
|
if (!in) return;
|
|
|
|
sprintf(uxn_temp_strbuf, "%04x ", in->count);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
|
|
switch(t) {
|
|
case SYMBOL_BOOL: {
|
|
curr = in->head;
|
|
while (curr) {
|
|
char* tmp_str = node_value(curr);
|
|
if (sleq(tmp_str, "true", 4)) {
|
|
StrBuf_append(a, out, "0001 ");
|
|
} else {
|
|
StrBuf_append(a, out, "0000 ");
|
|
}
|
|
curr = curr->next;
|
|
}
|
|
break;
|
|
}
|
|
case SYMBOL_U8:
|
|
case SYMBOL_BYTE: {
|
|
curr = in->head;
|
|
while (curr) {
|
|
char* tmp_str = node_value(curr);
|
|
u8 i = (u8)strtol(tmp_str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "%04x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
curr = curr->next;
|
|
}
|
|
break;
|
|
}
|
|
case SYMBOL_I16:
|
|
case SYMBOL_INT: {
|
|
curr = in->head;
|
|
while (curr) {
|
|
char* tmp_str = node_value(curr);
|
|
i16 i = (i16)strtol(tmp_str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "%04x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
curr = curr->next;
|
|
}
|
|
break;
|
|
}
|
|
case SYMBOL_U16:
|
|
case SYMBOL_ARRAY:
|
|
case SYMBOL_PLEX:
|
|
case SYMBOL_STR:
|
|
case SYMBOL_NAT: {
|
|
curr = in->head;
|
|
while (curr) {
|
|
char* tmp_str = node_value(curr);
|
|
u16 i = (u16)strtol(tmp_str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "%04x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
curr = curr->next;
|
|
}
|
|
break;
|
|
}
|
|
case SYMBOL_I8: {
|
|
curr = in->head;
|
|
while (curr) {
|
|
char* tmp_str = node_value(curr);
|
|
i8 i = (i8)strtol(tmp_str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "%04x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
curr = curr->next;
|
|
}
|
|
break;
|
|
}
|
|
case SYMBOL_U32:{
|
|
curr = in->head;
|
|
while (curr) {
|
|
char* tmp_str = node_value(curr);
|
|
u32 i = (u32)strtol(tmp_str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "%08x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
curr = curr->next;
|
|
}
|
|
break;
|
|
}
|
|
case SYMBOL_I32: {
|
|
curr = in->head;
|
|
while (curr) {
|
|
char* tmp_str = node_value(curr);
|
|
i32 i = (i32)strtol(tmp_str, nil, 10);
|
|
sprintf(uxn_temp_strbuf, "%08x ", i);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
curr = curr->next;
|
|
}
|
|
break;
|
|
}
|
|
case SYMBOL_F32:
|
|
case SYMBOL_REAL: {
|
|
break;
|
|
}
|
|
default: {
|
|
break;
|
|
}
|
|
}
|
|
StrBuf_append(a, out, "\n\n");
|
|
}
|
|
|
|
|
|
void
|
|
uxn_emit_inline_str(Arena *a, List *out, const char *str, i32 length)
|
|
{
|
|
/* set a pointer to the string literal and then jump over it */
|
|
StrBuf_append(a, out, ";{ #0002 ADD2 } !{ ");
|
|
|
|
i32 i = 1;
|
|
while(i < length - 1) {
|
|
char c = str[i++];
|
|
if(c == '\\' && i < length - 1) {
|
|
switch(str[i++]) {
|
|
case 'n':
|
|
c = '\n';
|
|
break;
|
|
case 't':
|
|
c = '\t';
|
|
break;
|
|
case 'r':
|
|
c = '\r';
|
|
break;
|
|
case '\\':
|
|
case '"':
|
|
case '\'':
|
|
break;
|
|
default:
|
|
i--; /* Rewind for unknown escapes */
|
|
}
|
|
}
|
|
sprintf(uxn_temp_strbuf, "%02x ", c);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
StrBuf_append(a, out, "00 } ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_str(Arena *a, List *out, Symbol *sym, const char *str, u32 length)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "@%.*s %04x ", sym->name_length, sym->name, length - 2);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
|
|
u32 i = 1;
|
|
while(i < length - 1) {
|
|
char c = str[i++];
|
|
if(c == '\\' && i < length - 1) {
|
|
switch(str[i++]) {
|
|
case 'n':
|
|
c = '\n';
|
|
break;
|
|
case 't':
|
|
c = '\t';
|
|
break;
|
|
case 'r':
|
|
c = '\r';
|
|
break;
|
|
case '\\':
|
|
case '"':
|
|
case '\'':
|
|
break;
|
|
default:
|
|
i--; /* Rewind for unknown escapes */
|
|
}
|
|
}
|
|
sprintf(uxn_temp_strbuf, "%02x ", c);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
StrBuf_append(a, out, "00 ");
|
|
}
|
|
|
|
bool
|
|
fn_loop_emit_args(Arena *a, List *out, void *data)
|
|
{
|
|
Symbol *sym = ((Symbol *)data);
|
|
|
|
if(sym->ref) {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr #%04x ADD2 STA2\n", sym->ref);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr STA2\n");
|
|
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
fn_loop_emit_args_comment(Arena *a, List *out, void *data)
|
|
{
|
|
Symbol *sym = ((Symbol *)data);
|
|
sprintf(uxn_temp_strbuf, "%.*s ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
return true;
|
|
}
|
|
|
|
void
|
|
uxn_emit_function(Arena *a, List *out, Symbol *sym)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "@%.*s_ ( ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
List_map_out(a, out, sym->args, fn_loop_emit_args_comment);
|
|
sprintf(uxn_temp_strbuf, " -- ");
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
if(sym->secondary_type != SYMBOL_UNDEFINED &&
|
|
sym->secondary_type != SYMBOL_VOID) {
|
|
sprintf(uxn_temp_strbuf, " res ");
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
sprintf(uxn_temp_strbuf, ")\n");
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
if(sym->size > 0) {
|
|
sprintf(uxn_temp_strbuf, "\tOVR2r LIT2r %04x SUB2r\n", sym->size);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
List_map_out(a, out, sym->args, fn_loop_emit_args);
|
|
StrBuf_append(a, out, "\n");
|
|
}
|
|
|
|
void
|
|
uxn_emit_arena_fn_return(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "\t&return\n\t\tPOP2r JMP2r\n\n");
|
|
}
|
|
|
|
void
|
|
uxn_emit_arena_fn_call(Arena *a, List *out, Symbol *sym)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "%.*s_ ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_plex(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_method(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_trait(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_const(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_open_paren(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_close_paren(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_variable(Arena *a, List *out, Symbol *sym, bool local)
|
|
{
|
|
if(local) {
|
|
if(sym->ref) {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr #%04x ADD2 LDA2 ", sym->ref);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr LDA2 ");
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, ";%.*s LDA2 ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
}
|
|
|
|
void
|
|
uxn_emit_set_variable(Arena *a, List *out, Symbol *sym, bool local)
|
|
{
|
|
if(local) {
|
|
if(sym->ref) {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr #%04x ADD2 STA2 ", sym->ref);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, "\tSTH2kr STA2 ");
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
} else {
|
|
sprintf(uxn_temp_strbuf, ";%.*s STA2 ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
}
|
|
|
|
void
|
|
uxn_emit_write(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#18 DEO ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_read(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#12 DEI ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_open(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_close(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_stat(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_end_statement(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "\n");
|
|
}
|
|
|
|
void
|
|
uxn_emit_set_value(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_plex_def(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_int_to_nat(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "int_to_nat_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_int_to_real(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "int_to_real_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_int_to_str(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "int_to_str_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_nat_to_int(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "nat_to_int_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_nat_to_real(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "nat_to_real_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_nat_to_str(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "nat_to_str_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_real_to_int(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "real_to_int_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_real_to_nat(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "real_to_nat_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_real_to_str(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "real_to_str_ ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_strbuf_init(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_strbuf_append(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_strbuf_to_str(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_arena_fn_return_plex(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_arena_fn_return_array(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_arena_fn_return_strbuf(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_cast_str_to_int(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
void
|
|
uxn_emit_cast_str_to_nat(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
void
|
|
uxn_emit_cast_str_to_real(Arena *a, List *out)
|
|
{
|
|
USED(a);
|
|
USED(out);
|
|
}
|
|
|
|
void
|
|
uxn_emit_sll(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#40 SFT SFT ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_srl(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "SFT ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_xor(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "EOR2 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_mod(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "DIV2k MUL2 SUB2 ");
|
|
}
|
|
void
|
|
uxn_emit_or(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "ORA2 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_and(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "AND2 ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_print(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "str/<print> ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_if(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#03 JCN !{ \n");
|
|
}
|
|
|
|
void
|
|
uxn_emit_patch_if(Arena *a, List *out, i32 local_ifs)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "!&if_end.%d } ", local_ifs);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_patch_if_done(Arena *a, List *out, i32 local_ifs)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "&if_end.%d \n", local_ifs);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_while(Arena *a, List *out, i32 local_whiles)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "&while.%d ", local_whiles);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_while_postfix(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "#03 JCN !{ \n");
|
|
}
|
|
|
|
void
|
|
uxn_emit_patch_while(Arena *a, List *out, i32 local_whiles)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "!&while.%d } \n", local_whiles);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_early_return(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "!&return ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_halt(Arena *a, List *out)
|
|
{
|
|
StrBuf_append(a, out, "POP2r BRK ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_deref_prolog(Arena *a, List *out, Symbol *sym)
|
|
{
|
|
sprintf(uxn_temp_strbuf, ";%.*s ", sym->name_length, sym->name);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_deref(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "LDA2 ");
|
|
else
|
|
StrBuf_append(a, out, "LDA ");
|
|
|
|
}
|
|
|
|
void
|
|
uxn_emit_ref_store(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "STA2 ");
|
|
else
|
|
StrBuf_append(a, out, "STA ");
|
|
|
|
}
|
|
|
|
void
|
|
uxn_emit_address(Arena *a, List *out, u32 ptr)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "#%04x ", ptr);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_zero_block(Arena *a, List *out, u32 ptr)
|
|
{
|
|
sprintf(uxn_temp_strbuf, "%04x ", ptr);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
|
|
sprintf(uxn_temp_strbuf, "$%d ", ptr);
|
|
StrBuf_append(a, out, uxn_temp_strbuf);
|
|
}
|
|
|
|
void
|
|
uxn_emit_stack_swap(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "SWP2 ");
|
|
else
|
|
StrBuf_append(a, out, "SWP ");
|
|
}
|
|
|
|
void
|
|
uxn_emit_stack_rot(Arena *a, List *out, u32 size)
|
|
{
|
|
if (size > 1)
|
|
StrBuf_append(a, out, "ROT2 ");
|
|
else
|
|
StrBuf_append(a, out, "ROT ");
|
|
}
|
|
|
|
Emitter
|
|
uxn_emitter()
|
|
{
|
|
return (Emitter){
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
uxn_emit_error,
|
|
uxn_get_size,
|
|
uxn_prolog,
|
|
uxn_epilogue,
|
|
uxn_emit_add,
|
|
uxn_emit_sub,
|
|
uxn_emit_mul,
|
|
uxn_emit_div,
|
|
uxn_emit_lt,
|
|
uxn_emit_le,
|
|
uxn_emit_gt,
|
|
uxn_emit_ge,
|
|
uxn_emit_ne,
|
|
uxn_emit_eq,
|
|
uxn_emit_false,
|
|
uxn_emit_true,
|
|
uxn_emit_nil,
|
|
uxn_emit_void,
|
|
uxn_emit_int,
|
|
uxn_emit_nat,
|
|
uxn_emit_real,
|
|
uxn_emit_byte,
|
|
uxn_emit_str,
|
|
uxn_emit_type,
|
|
uxn_emit_array,
|
|
uxn_emit_function,
|
|
uxn_emit_plex,
|
|
uxn_emit_method,
|
|
uxn_emit_trait,
|
|
uxn_emit_const,
|
|
uxn_emit_print,
|
|
uxn_emit_neg,
|
|
uxn_emit_not,
|
|
uxn_emit_open_paren,
|
|
uxn_emit_close_paren,
|
|
uxn_emit_constant,
|
|
uxn_emit_variable,
|
|
uxn_emit_set_variable,
|
|
uxn_emit_write,
|
|
uxn_emit_read,
|
|
uxn_emit_open,
|
|
uxn_emit_close,
|
|
uxn_emit_stat,
|
|
uxn_emit_end_statement,
|
|
uxn_emit_set_value,
|
|
uxn_emit_plex_def,
|
|
uxn_emit_cast_int_to_nat,
|
|
uxn_emit_cast_int_to_real,
|
|
uxn_emit_cast_int_to_str,
|
|
uxn_emit_cast_nat_to_int,
|
|
uxn_emit_cast_nat_to_real,
|
|
uxn_emit_cast_nat_to_str,
|
|
uxn_emit_cast_real_to_int,
|
|
uxn_emit_cast_real_to_nat,
|
|
uxn_emit_cast_real_to_str,
|
|
uxn_emit_strbuf_init,
|
|
uxn_emit_strbuf_append,
|
|
uxn_emit_strbuf_to_str,
|
|
uxn_emit_arena_fn_call,
|
|
uxn_emit_arena_fn_return,
|
|
uxn_emit_arena_fn_return_plex,
|
|
uxn_emit_arena_fn_return_array,
|
|
uxn_emit_arena_fn_return_strbuf,
|
|
uxn_emit_cast_str_to_int,
|
|
uxn_emit_cast_str_to_nat,
|
|
uxn_emit_cast_str_to_real,
|
|
uxn_emit_sll,
|
|
uxn_emit_srl,
|
|
uxn_emit_xor,
|
|
uxn_emit_mod,
|
|
uxn_emit_and,
|
|
uxn_emit_or,
|
|
uxn_emit_if,
|
|
uxn_emit_patch_if,
|
|
uxn_emit_patch_if_done,
|
|
uxn_emit_while,
|
|
uxn_emit_while_postfix,
|
|
uxn_emit_patch_while,
|
|
uxn_emit_early_return,
|
|
uxn_emit_halt,
|
|
uxn_emit_deref_prolog,
|
|
uxn_emit_deref,
|
|
uxn_emit_address,
|
|
uxn_emit_zero_block,
|
|
uxn_emit_char,
|
|
uxn_emit_inline_str,
|
|
uxn_emit_ref_store,
|
|
uxn_emit_stack_swap,
|
|
uxn_emit_stack_rot,
|
|
};
|
|
}
|