/* * DVIasm -- Construct test DVI files from an assembly-language-like * input file. * * Define data areas for assembling DVI files. * */ #if SHORT_EXTERNAL_NAMES #define open_DVIasm OPENDVA #define open_DVI OPENDVI #define parse_input PARSINP #define extract_token XTRTTOK #define classify_token CLASTOK #define match MATCH #define cmd_no_ops CMDNOOP #define cmd_1bytes CMD1BYS #define cmd_2bytes CMD2BYS #define cmd_3bytes CMD3BYS #define cmd_4bytes CMD4BYS #define cmd_vbytes CMDVBYS #define cmd_1byteu CMD1BYU #define cmd_2byteu CMD2BYU #define cmd_3byteu CMD3BYU #define cmd_vbyteu CMDVBYU #define cmd_rule CMDRULE #define cmd_bop CMDBOP #define cmd_1xxx CMD1XXX #define cmd_2xxx CMD2XXX #define cmd_3xxx CMD3XXX #define cmd_4xxx CMD4XXX #define cmd_vxxx CMDVXXX #define cmd_1fnt_def CMD1FND #define cmd_2fnt_def CMD2FND #define cmd_3fnt_def CMD3FND #define cmd_4fnt_def CMD4FND #define cmd_vfnt_def CMDVFND #define cmd_pre CMDPRE #define cmd_post CMDPOST #define cmd_post_post CMDPOPO #define cmd_fill CMDFILL #define write_DVI_s1 WRDVIS1 #define write_DVI_s2 WRDVIS2 #define write_DVI_s3 WRDVIS3 #define write_DVI_s4 WRDVIS4 #define write_DVI_u1 WRDVIU1 #define write_DVI_u2 WRDVIU2 #define write_DVI_u3 WRDVIU3 #define write_DVI_u4 WRDVIU4 #define write_DVI WRITDVI #define usage USAGE #define DVIcmds DVICMDS #define global GLOBAL #define cmdargs CMDARGS #endif #define MAXLINE 1000 /* maximum length of input lines */ #define MAX_STR_LEN 200 /* maximum length of a string */ #define MAX_NUM_TOKENS 20 /* maximum number of tokens per line */ extern cmd_no_ops(); /* Process DVI commands with no operands */ extern cmd_1bytes(); /* Process DVI cmds w/ 1-byte signed operand */ extern cmd_2bytes(); /* Process DVI cmds w/ 2-byte signed operand */ extern cmd_3bytes(); /* Process DVI cmds w/ 3-byte signed operand */ extern cmd_4bytes(); /* Process DVI cmds w/ 4-byte signed operand */ extern cmd_vbytes(); /* Process DVI cmds w/ var len signed operand */ extern cmd_1byteu(); /* Process DVI cmds w/ 1-byte unsigned operand */ extern cmd_2byteu(); /* Process DVI cmds w/ 2-byte unsigned operand */ extern cmd_3byteu(); /* Process DVI cmds w/ 3-byte unsigned operand */ /* cmd_4byteu() All four-byte operands are signed */ extern cmd_vbyteu(); /* Process DVI cmds w/ var len unsigned opreand */ extern cmd_rule(); /* Process DVI SET_RULE and PUT_RULE commands */ extern cmd_bop(); /* Process DVI BOP command */ extern cmd_1xxx(); /* Process DVI XXX command with 1-byte length */ extern cmd_2xxx(); /* Process DVI XXX command with 2-byte length */ extern cmd_3xxx(); /* Process DVI XXX command with 3-byte length */ extern cmd_4xxx(); /* Process DVI XXX command with 4-byte length */ extern cmd_vxxx(); /* Process DVI XXX command with variable length */ extern cmd_1fnt_def(); /* Process DVI FNT_DEF command with 1-byte font */ extern cmd_2fnt_def(); /* Process DVI FNT_DEF command with 2-byte font */ extern cmd_3fnt_def(); /* Process DVI FNT_DEF command with 3-byte font */ extern cmd_4fnt_def(); /* Process DVI FNT_DEF command with 4-byte font */ extern cmd_vfnt_def(); /* Process DVI FNT_DEF with variable length */ extern cmd_pre(); /* Process DVI PRE command */ extern cmd_post(); /* Process DVI POST command */ extern cmd_post_post(); /* Process DVI POST_POST command */ extern cmd_fill(); /* Process byte-fill command */ #define NUM_DVI_CMDS 262 struct { char command[20]; int code; int (*processing_function)(); } DVIcmds[NUM_DVI_CMDS] = { {"SET_CHAR_0", 0, cmd_no_ops }, {"SET_CHAR_1", 1, cmd_no_ops }, {"SET_CHAR_2", 2, cmd_no_ops }, {"SET_CHAR_3", 3, cmd_no_ops }, {"SET_CHAR_4", 4, cmd_no_ops }, {"SET_CHAR_5", 5, cmd_no_ops }, {"SET_CHAR_6", 6, cmd_no_ops }, {"SET_CHAR_7", 7, cmd_no_ops }, {"SET_CHAR_8", 8, cmd_no_ops }, {"SET_CHAR_9", 9, cmd_no_ops }, {"SET_CHAR_10", 10, cmd_no_ops }, {"SET_CHAR_11", 11, cmd_no_ops }, {"SET_CHAR_12", 12, cmd_no_ops }, {"SET_CHAR_13", 13, cmd_no_ops }, {"SET_CHAR_14", 14, cmd_no_ops }, {"SET_CHAR_15", 15, cmd_no_ops }, {"SET_CHAR_16", 16, cmd_no_ops }, {"SET_CHAR_17", 17, cmd_no_ops }, {"SET_CHAR_18", 18, cmd_no_ops }, {"SET_CHAR_19", 19, cmd_no_ops }, {"SET_CHAR_20", 20, cmd_no_ops }, {"SET_CHAR_21", 21, cmd_no_ops }, {"SET_CHAR_22", 22, cmd_no_ops }, {"SET_CHAR_23", 23, cmd_no_ops }, {"SET_CHAR_24", 24, cmd_no_ops }, {"SET_CHAR_25", 25, cmd_no_ops }, {"SET_CHAR_26", 26, cmd_no_ops }, {"SET_CHAR_27", 27, cmd_no_ops }, {"SET_CHAR_28", 28, cmd_no_ops }, {"SET_CHAR_29", 29, cmd_no_ops }, {"SET_CHAR_30", 30, cmd_no_ops }, {"SET_CHAR_31", 31, cmd_no_ops }, {"SET_CHAR_32", 32, cmd_no_ops }, {"SET_CHAR_33", 33, cmd_no_ops }, {"SET_CHAR_34", 34, cmd_no_ops }, {"SET_CHAR_35", 35, cmd_no_ops }, {"SET_CHAR_36", 36, cmd_no_ops }, {"SET_CHAR_37", 37, cmd_no_ops }, {"SET_CHAR_38", 38, cmd_no_ops }, {"SET_CHAR_39", 39, cmd_no_ops }, {"SET_CHAR_40", 40, cmd_no_ops }, {"SET_CHAR_41", 41, cmd_no_ops }, {"SET_CHAR_42", 42, cmd_no_ops }, {"SET_CHAR_43", 43, cmd_no_ops }, {"SET_CHAR_44", 44, cmd_no_ops }, {"SET_CHAR_45", 45, cmd_no_ops }, {"SET_CHAR_46", 46, cmd_no_ops }, {"SET_CHAR_47", 47, cmd_no_ops }, {"SET_CHAR_48", 48, cmd_no_ops }, {"SET_CHAR_49", 49, cmd_no_ops }, {"SET_CHAR_50", 50, cmd_no_ops }, {"SET_CHAR_51", 51, cmd_no_ops }, {"SET_CHAR_52", 52, cmd_no_ops }, {"SET_CHAR_53", 53, cmd_no_ops }, {"SET_CHAR_54", 54, cmd_no_ops }, {"SET_CHAR_55", 55, cmd_no_ops }, {"SET_CHAR_56", 56, cmd_no_ops }, {"SET_CHAR_57", 57, cmd_no_ops }, {"SET_CHAR_58", 58, cmd_no_ops }, {"SET_CHAR_59", 59, cmd_no_ops }, {"SET_CHAR_60", 60, cmd_no_ops }, {"SET_CHAR_61", 61, cmd_no_ops }, {"SET_CHAR_62", 62, cmd_no_ops }, {"SET_CHAR_63", 63, cmd_no_ops }, {"SET_CHAR_64", 64, cmd_no_ops }, {"SET_CHAR_65", 65, cmd_no_ops }, {"SET_CHAR_66", 66, cmd_no_ops }, {"SET_CHAR_67", 67, cmd_no_ops }, {"SET_CHAR_68", 68, cmd_no_ops }, {"SET_CHAR_69", 69, cmd_no_ops }, {"SET_CHAR_70", 70, cmd_no_ops }, {"SET_CHAR_71", 71, cmd_no_ops }, {"SET_CHAR_72", 72, cmd_no_ops }, {"SET_CHAR_73", 73, cmd_no_ops }, {"SET_CHAR_74", 74, cmd_no_ops }, {"SET_CHAR_75", 75, cmd_no_ops }, {"SET_CHAR_76", 76, cmd_no_ops }, {"SET_CHAR_77", 77, cmd_no_ops }, {"SET_CHAR_78", 78, cmd_no_ops }, {"SET_CHAR_79", 79, cmd_no_ops }, {"SET_CHAR_80", 80, cmd_no_ops }, {"SET_CHAR_81", 81, cmd_no_ops }, {"SET_CHAR_82", 82, cmd_no_ops }, {"SET_CHAR_83", 83, cmd_no_ops }, {"SET_CHAR_84", 84, cmd_no_ops }, {"SET_CHAR_85", 85, cmd_no_ops }, {"SET_CHAR_86", 86, cmd_no_ops }, {"SET_CHAR_87", 87, cmd_no_ops }, {"SET_CHAR_88", 88, cmd_no_ops }, {"SET_CHAR_89", 89, cmd_no_ops }, {"SET_CHAR_90", 90, cmd_no_ops }, {"SET_CHAR_91", 91, cmd_no_ops }, {"SET_CHAR_92", 92, cmd_no_ops }, {"SET_CHAR_93", 93, cmd_no_ops }, {"SET_CHAR_94", 94, cmd_no_ops }, {"SET_CHAR_95", 95, cmd_no_ops }, {"SET_CHAR_96", 96, cmd_no_ops }, {"SET_CHAR_97", 97, cmd_no_ops }, {"SET_CHAR_98", 98, cmd_no_ops }, {"SET_CHAR_99", 99, cmd_no_ops }, {"SET_CHAR_100", 100, cmd_no_ops }, {"SET_CHAR_101", 101, cmd_no_ops }, {"SET_CHAR_102", 102, cmd_no_ops }, {"SET_CHAR_103", 103, cmd_no_ops }, {"SET_CHAR_104", 104, cmd_no_ops }, {"SET_CHAR_105", 105, cmd_no_ops }, {"SET_CHAR_106", 106, cmd_no_ops }, {"SET_CHAR_107", 107, cmd_no_ops }, {"SET_CHAR_108", 108, cmd_no_ops }, {"SET_CHAR_109", 109, cmd_no_ops }, {"SET_CHAR_110", 110, cmd_no_ops }, {"SET_CHAR_111", 111, cmd_no_ops }, {"SET_CHAR_112", 112, cmd_no_ops }, {"SET_CHAR_113", 113, cmd_no_ops }, {"SET_CHAR_114", 114, cmd_no_ops }, {"SET_CHAR_115", 115, cmd_no_ops }, {"SET_CHAR_116", 116, cmd_no_ops }, {"SET_CHAR_117", 117, cmd_no_ops }, {"SET_CHAR_118", 118, cmd_no_ops }, {"SET_CHAR_119", 119, cmd_no_ops }, {"SET_CHAR_120", 120, cmd_no_ops }, {"SET_CHAR_121", 121, cmd_no_ops }, {"SET_CHAR_122", 122, cmd_no_ops }, {"SET_CHAR_123", 123, cmd_no_ops }, {"SET_CHAR_124", 124, cmd_no_ops }, {"SET_CHAR_125", 125, cmd_no_ops }, {"SET_CHAR_126", 126, cmd_no_ops }, {"SET_CHAR_127", 127, cmd_no_ops }, {"SET1", 128, cmd_1byteu }, {"SET2", 129, cmd_2byteu }, {"SET3", 130, cmd_3byteu }, {"SET4", 131, cmd_4bytes }, /* Note: 4-byte SIGNED */ {"SET", 1128, cmd_vbyteu }, /* generic SETn command */ {"SET_RULE", 132, cmd_rule }, {"PUT1", 133, cmd_1byteu }, {"PUT2", 134, cmd_2byteu }, {"PUT3", 135, cmd_3byteu }, {"PUT4", 136, cmd_4bytes }, /* Note: 4-byte SIGNED */ {"PUT", 1133, cmd_vbyteu }, /* generic PUTn command */ {"PUT_RULE", 137, cmd_rule }, {"NOP", 138, cmd_no_ops }, {"BOP", 139, cmd_bop }, {"EOP", 140, cmd_no_ops }, {"PUSH", 141, cmd_no_ops }, {"POP", 142, cmd_no_ops }, {"RIGHT1", 143, cmd_1bytes }, {"RIGHT2", 144, cmd_2bytes }, {"RIGHT3", 145, cmd_3bytes }, {"RIGHT4", 146, cmd_4bytes }, {"RIGHT", 1143, cmd_vbytes }, /* generic RIGHTn command */ {"W0", 147, cmd_no_ops }, {"W1", 148, cmd_1bytes }, {"W2", 149, cmd_2bytes }, {"W3", 150, cmd_3bytes }, {"W4", 151, cmd_4bytes }, {"W", 1148, cmd_vbytes }, /* generic Wn command */ {"X0", 152, cmd_no_ops }, {"X1", 153, cmd_1bytes }, {"X2", 154, cmd_2bytes }, {"X3", 155, cmd_3bytes }, {"X4", 156, cmd_4bytes }, {"X", 1153, cmd_vbytes }, /* generic Wn command */ {"DOWN1", 157, cmd_1bytes }, {"DOWN2", 158, cmd_2bytes }, {"DOWN3", 159, cmd_3bytes }, {"DOWN4", 160, cmd_4bytes }, {"DOWN", 1157, cmd_vbytes }, /* generic DOWNn command */ {"Y0", 161, cmd_no_ops }, {"Y1", 162, cmd_1bytes }, {"Y2", 163, cmd_2bytes }, {"Y3", 164, cmd_3bytes }, {"Y4", 165, cmd_4bytes }, {"Y", 1162, cmd_vbytes }, /* generic Yn command */ {"Z0", 166, cmd_no_ops }, {"Z1", 167, cmd_1bytes }, {"Z2", 168, cmd_2bytes }, {"Z3", 169, cmd_3bytes }, {"Z4", 170, cmd_4bytes }, {"Z", 1167, cmd_vbytes }, /* generic Zn command */ {"FNT_NUM_0", 171, cmd_no_ops }, {"FNT_NUM_1", 172, cmd_no_ops }, {"FNT_NUM_2", 173, cmd_no_ops }, {"FNT_NUM_3", 174, cmd_no_ops }, {"FNT_NUM_4", 175, cmd_no_ops }, {"FNT_NUM_5", 176, cmd_no_ops }, {"FNT_NUM_6", 177, cmd_no_ops }, {"FNT_NUM_7", 178, cmd_no_ops }, {"FNT_NUM_8", 179, cmd_no_ops }, {"FNT_NUM_9", 180, cmd_no_ops }, {"FNT_NUM_10", 181, cmd_no_ops }, {"FNT_NUM_11", 182, cmd_no_ops }, {"FNT_NUM_12", 183, cmd_no_ops }, {"FNT_NUM_13", 184, cmd_no_ops }, {"FNT_NUM_14", 185, cmd_no_ops }, {"FNT_NUM_15", 186, cmd_no_ops }, {"FNT_NUM_16", 187, cmd_no_ops }, {"FNT_NUM_17", 188, cmd_no_ops }, {"FNT_NUM_18", 189, cmd_no_ops }, {"FNT_NUM_19", 190, cmd_no_ops }, {"FNT_NUM_20", 191, cmd_no_ops }, {"FNT_NUM_21", 192, cmd_no_ops }, {"FNT_NUM_22", 193, cmd_no_ops }, {"FNT_NUM_23", 194, cmd_no_ops }, {"FNT_NUM_24", 195, cmd_no_ops }, {"FNT_NUM_25", 196, cmd_no_ops }, {"FNT_NUM_26", 197, cmd_no_ops }, {"FNT_NUM_27", 198, cmd_no_ops }, {"FNT_NUM_28", 199, cmd_no_ops }, {"FNT_NUM_29", 200, cmd_no_ops }, {"FNT_NUM_30", 201, cmd_no_ops }, {"FNT_NUM_31", 202, cmd_no_ops }, {"FNT_NUM_32", 203, cmd_no_ops }, {"FNT_NUM_33", 204, cmd_no_ops }, {"FNT_NUM_34", 205, cmd_no_ops }, {"FNT_NUM_35", 206, cmd_no_ops }, {"FNT_NUM_36", 207, cmd_no_ops }, {"FNT_NUM_37", 208, cmd_no_ops }, {"FNT_NUM_38", 209, cmd_no_ops }, {"FNT_NUM_39", 210, cmd_no_ops }, {"FNT_NUM_40", 211, cmd_no_ops }, {"FNT_NUM_41", 212, cmd_no_ops }, {"FNT_NUM_42", 213, cmd_no_ops }, {"FNT_NUM_43", 214, cmd_no_ops }, {"FNT_NUM_44", 215, cmd_no_ops }, {"FNT_NUM_45", 216, cmd_no_ops }, {"FNT_NUM_46", 217, cmd_no_ops }, {"FNT_NUM_47", 218, cmd_no_ops }, {"FNT_NUM_48", 219, cmd_no_ops }, {"FNT_NUM_49", 220, cmd_no_ops }, {"FNT_NUM_50", 221, cmd_no_ops }, {"FNT_NUM_51", 222, cmd_no_ops }, {"FNT_NUM_52", 223, cmd_no_ops }, {"FNT_NUM_53", 224, cmd_no_ops }, {"FNT_NUM_54", 225, cmd_no_ops }, {"FNT_NUM_55", 226, cmd_no_ops }, {"FNT_NUM_56", 227, cmd_no_ops }, {"FNT_NUM_57", 228, cmd_no_ops }, {"FNT_NUM_58", 229, cmd_no_ops }, {"FNT_NUM_59", 230, cmd_no_ops }, {"FNT_NUM_60", 231, cmd_no_ops }, {"FNT_NUM_61", 232, cmd_no_ops }, {"FNT_NUM_62", 233, cmd_no_ops }, {"FNT_NUM_63", 234, cmd_no_ops }, {"FNT1", 235, cmd_1byteu }, {"FNT2", 236, cmd_2byteu }, {"FNT3", 237, cmd_3byteu }, {"FNT4", 238, cmd_4bytes }, /* Note: 4-byte SIGNED */ {"FNT", 1235, cmd_vbyteu }, /* generic FNTn command */ {"XXX1", 239, cmd_1xxx }, {"XXX2", 240, cmd_2xxx }, {"XXX3", 241, cmd_3xxx }, {"XXX4", 242, cmd_4xxx }, {"XXX", 1239, cmd_vxxx }, /* generic XXXn command */ {"FNT_DEF1", 243, cmd_1fnt_def }, {"FNT_DEF2", 244, cmd_2fnt_def }, {"FNT_DEF3", 245, cmd_3fnt_def }, {"FNT_DEF4", 246, cmd_4fnt_def }, {"FNT_DEF", 1243, cmd_vfnt_def }, /* generic FNT_DEFn cmd */ {"PRE", 247, cmd_pre }, {"POST", 248, cmd_post }, {"POST_POST", 249, cmd_post_post}, /* unused 250--255 */ {"FILL", 2000, cmd_fill } /* fill for alignment */ }; struct { char in_file_name[200]; char out_file_name[200]; FILE *in_file; FILE *out_file; int error; int num_tokens; struct label *first_label; int current_DVI_position; } global; #define FOUND_TOKEN 1 #define NO_MORE_TOKENS 2 #define INVALID_TOKEN 3 #define LABEL_ASSIGNMENT_TOKEN 4 #define LABEL_VALUE_TOKEN 5 #define NUMBER_TOKEN 6 #define STRING_TOKEN 7 #define DVI_OPCODE_TOKEN 8 struct label { struct label *next_label; char label[MAX_STR_LEN]; int value; }; typedef struct label LABEL; struct { int token_type; union { int DVI_code; int DVIcmds_index; int number; int label; char string[MAX_STR_LEN]; } token; } cmdargs[MAX_NUM_TOKENS];