# LIST_ON : REM CHANGE TO COMMENT LINE IF NOT WANTED # XREF_ON : REM CHANGE TO COMMENT LINE IF NOT WANTED # CONSTANT UBN~VERSION$ = "1.060202 RC0" # CONSTANT UBN_TITLE$ = "Urbane XUBN~VERSION$ - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor." ' Original Left Hello A. Nani Mouse Inx. # CONSTANT IN_FILE$ = "UBN_IN.TXT" # CONSTANT OUT_FILE$ = "UBN_OUT.TXT" # CONSTANT LST_FILE$ = "UBN_LST.TXT" # CONSTANT XRF_FILE$ = "UBN_XRF.TXT" # CONSTANT NUM_M1 = -1 # CONSTANT NUM_0 = 0 # CONSTANT NUM_1 = 1 # CONSTANT NUM_2 = 2 # CONSTANT NUM_3 = 3 # CONSTANT NUM_4 = 4 # CONSTANT TRUE = 1 # CONSTANT FALSE = 0 # CONSTANT UBN_XREF_LIST_INITIAL = 0 : REM ON = 1, OFF = 0 # CONSTANT UBN_LIST_LIST_INITIAL = 0 : REM ON = 1, OFF = 0 # CONSTANT UBN_MEM_PCLEAR = 1 # CONSTANT UBN_MEM_FILES_COUNT = 4 # CONSTANT UBN_MEM_FILES_SPACE = 100 # CONSTANT UBN_MEM_CLEAR = 8500 # CONSTANT UBN_MEM_LINE_LABEL_MAX_COUNT = 100 # CONSTANT UBN_MEM_VARIABLE_NAMES_MAX_COUNT = 150 # CONSTANT UBN_MEM_KEYWORD_TABLE_MAX_COUNT = 200 # CONSTANT UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT = 10 # CONSTANT ASC_TAB = 09 : REM TAB # CONSTANT ASC_BLANK = 32 : REM ASC(" ") # CONSTANT ASC_DOUBLE_QUOTE = 34 : REM ASC(""") ' CONSTANT ASC_DOUBLE_QUOTE$ is Defined as a program value, not a constant! # CONSTANT ASC_POUND = 35 : REM ASC("#") # CONSTANT ASC_DOLLAR = 36 : REM ASC("$") # CONSTANT ASC_PERCENT = 37 : REM ASC("%") # CONSTANT ASC_AMPERSAND = 38 : REM ASC("&") # CONSTANT ASC_SINGLE_QUOTE = 39 : REM ASC("'") # CONSTANT ASC_PLUS = 43 : REM ASC("+") # CONSTANT ASC_MINUS = 45 : REM ASC("-") # CONSTANT ASC_PERIOD = 46 : REM ASC(".") # CONSTANT ASC_0 = 48 : REM ASC("0") # CONSTANT ASC_7 = 55 : REM ASC("7") # CONSTANT ASC_8 = 56 : REM ASC("8") # CONSTANT ASC_9 = 57 : REM ASC("9") # CONSTANT ASC_COLON = 58 : REM ASC(":") # CONSTANT ASC_EQUALS = 61 : REM ASC("=") # CONSTANT ASC_TILDE = 64 : REM ASC("~") # CONSTANT ASC_A_U = 65 : REM ASC("A") # CONSTANT ASC_E_U = 69 : REM ASC("E") # CONSTANT ASC_F_U = 70 : REM ASC("F") # CONSTANT ASC_H_U = 72 : REM ASC("H") # CONSTANT ASC_O_U = 79 : REM ASC("O") # CONSTANT ASC_X_U = 88 : REM ASC("X") # CONSTANT ASC_Z_U = 90 : REM ASC("Z") # CONSTANT ASC_UNDERSCORE = 95 : REM ASC("_") # CONSTANT ASC_a_L = 97 : REM ASC("a") # CONSTANT ASC_e_L = 101 : REM ASC("e") # CONSTANT ASC_f_L = 102 : REM ASC("f") # CONSTANT ASC_h_L = 104 : REM ASC("h") # CONSTANT ASC_o_L = 111 : REM ASC("o") # CONSTANT ASC_x_L = 120 : REM ASC("x") # CONSTANT ASC_z_L = 122 : REM ASC("z") # CONSTANT UBN_XRF_TITLE = 1 # CONSTANT UBN_XRF_LINE_LABEL = 2 # CONSTANT UBN_XRF_LINE_REFERENCE = 3 # CONSTANT UBN_XRF_VARIABLE = 4 # CONSTANT UBN_XRF_VARIABLE_REFERENCE = 5 ' CONSTANT UBN_XRF_CONSTANT = 6 ' CONSTANT UBN_XRF_CONSTANT_REFERENCE = 7 # CONSTANT UBN_XRF_KEYWORD_REFERENCE = 8 ' Start of Executation GOTO UBN_START GET_IN_LINE_CHAR IN_LINE_CHAR_COUNTER = IN_LINE_CHAR_COUNTER + NUM_1 IF IN_LINE_CHAR_COUNTER > I_LINE_LENGTH GOTO END_IN_LINE LAST_CH = IN_LINE_CH IN_LINE_CH$ = MID$(IN_LINE$, IN_LINE_CHAR_COUNTER, NUM_1) IN_LINE_CH = ASC(IN_LINE_CH$) IF IN_LINE_CH >= ASC_BLANK THEN RETURN IF IN_LINE_CH = ASC_TAB GOTO SUBSTUTE_SPACE_FOR_TAB PRINT #FILE_L, LINE_NUMBER; " " ; IN_LINE$ PRINT #FILE_L, LINE_NUMBER; " Control Character "; IN_LINE_CH; " Found in Input Line at "; IN_LINE_CHAR_COUNTER RETURN SUBSTUTE_SPACE_FOR_TAB IN_LINE_CH$ = CHR$(ASC_BLANK) IN_LINE_CH = ASC_BLANK RETURN END_IN_LINE IN_LINE_CH = NUM_M1 IN_LINE_CH$ = CHR$(ASC_TILDE) RETURN ''' ' On Entry, first character of label or variable is in "IN_LINE_CH$" and "IN_LINE_CH" ' On Exit, "IN_LINE_CH$" and "IN_LINE_CH" have terminating character (next character not part of VLString). GET_VLSTRING VLSTRING$ = IN_LINE_CH$ NEXT_VLSTRING_CH GOSUB GET_IN_LINE_CHAR IF IN_LINE_CH < NUM_0 THEN RETURN IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO VLSTRING_ADD_UPPER_ALPHA IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO VLSTRING_ADD_LOWER_ALPHA IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_9 GOTO VLSTRING_ADD_NUMBER IF IN_LINE_CH = ASC_UNDERSCORE GOTO VLSTRING_ADD_SPECIAL IF IN_LINE_CH = ASC_TILDE GOTO VLSTRING_ADD_SPECIAL IF IN_LINE_CH = ASC_DOLLAR GOTO VLSTRING_ADD_DOLLAR ' REM Character Found that cannot be in Variable or line Label RETURN VLSTRING_ADD_LOWER_ALPHA IN_LINE_CH = IN_LINE_CH - ( ASC_a_L - ASC_A_U ) IN_LINE_CH$ = CHR$(IN_LINE_CH) VLSTRING_ADD_UPPER_ALPHA REM VLSTRING_ADD_NUMBER REM VLSTRING_ADD_SPECIAL REM VLSTRING_ADD_DOLLAR REM VLSTRING$ = VLSTRING$ + IN_LINE_CH$ ' If an "ASC_DOLLAR" is found, declare label or variable end found IF IN_LINE_CH = ASC_DOLLAR THEN LAST_CH = IN_LINE_CH : GOSUB GET_IN_LINE_CHAR : RETURN GOTO NEXT_VLSTRING_CH ''' ' On Entry, "ASC_DOUBLE_QUOTE" is in "IN_LINE_CH$" and "IN_LINE_CH" ' On Exit, "IN_LINE_CH$" and "IN_LINE_CH" have terminating character or next character. GET_QSTRING QSTRING$ = IN_LINE_CH$ QSTRING_SKIP_VARIABLE = FALSE MORE_QSTRING GOSUB GET_IN_LINE_CHAR IF IN_LINE_CH <= NUM_0 GOTO BAD_QSTRING QSTRING$ = QSTRING$ + IN_LINE_CH$ IF IN_LINE_CH = ASC_BLANK THEN QSTRING_SKIP_VARIABLE = FALSE IF QSTRING_SKIP_VARIABLE = TRUE GOTO SKIP_VARIABLE IF IN_LINE_CH = ASC_X_U OR IN_LINE_CH = ASC_x_L GOTO GET_QSTRING_VARIABLE SKIP_VARIABLE IF IN_LINE_CH <> ASC_DOUBLE_QUOTE GOTO MORE_QSTRING GOSUB GET_IN_LINE_CHAR RETURN GET_QSTRING_VARIABLE GOSUB GET_IN_LINE_CHAR IF IN_LINE_CH <= NUM_0 GOTO BAD_QSTRING IF IN_LINE_CH = ASC_DOUBLE_QUOTE GOTO NO_QSVARIABLE IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO GET_QSTRING_VAR IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO GET_QSTRING_VAR IF IN_LINE_CH = ASC_UNDERSCORE GOTO GET_QSTRING_VAR GOTO MORE_QSTRING NO_QSVARIABLE QSTRING$ = QSTRING$ + IN_LINE_CH$ GOSUB GET_IN_LINE_CHAR RETURN GET_QSTRING_VAR QSTRING_CHAR_COUNTER_SAVE = IN_LINE_CHAR_COUNTER QSTRING_LAST_CHAR_SAVE$ = IN_LINE_CH$ GOSUB GET_VLSTRING IF LAST_CH <> ASC_DOLLAR GOTO NOT_QSTRING_VAR FOR VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_START TO VARIABLE_NAMES_COUNT IF VLSTRING$ = VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_NAME) GOTO HAVE_QSTRING_VARIABLE NEXT VARIABLE_NAMES_COUNTER ' Have New Variable VARIABLE_NAMES_COUNT = VARIABLE_NAMES_COUNT + NUM_1 IF VARIABLE_NAMES_COUNT > VARIABLE_NAMES_MAX_COUNT THEN PRINT #FILE_L, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_NAME) = VLSTRING$ VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = "Pending" GOSUB GET_NEW_2CH_VARIABLE VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = NEW_2CH_VARIABLE$ + "$" VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_COUNT HAVE_QSTRING_VARIABLE IF ASC(VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH)) = ASC_DOUBLE_QUOTE GOTO ADD_QSTRING_CONSTANT ' Add existing 2ch variable to QUOTE string QSTRING$ = QSTRING$ + VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH) GOTO MORE_QSTRING ' Do Not Include the 'X' ' Add Constant Without Leading and Trailing Quotes ADD_QSTRING_CONSTANT QSTRING_LENGTH = LEN(QSTRING$) - NUM_1 QSTRING$ = LEFT$(QSTRING$,QSTRING_LENGTH) QSTRING_CONSTANT_LENGTH = LEN(VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH)) - NUM_2 QSTRING$ = QSTRING$ + MID$(VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH),NUM_2,QSTRING_CONSTANT_LENGTH) GOTO MORE_QSTRING NOT_QSTRING_VAR IN_LINE_CHAR_COUNTER = QSTRING_CHAR_COUNTER_SAVE IN_LINE_CH$ = QSTRING_LAST_CHAR_SAVE$ QSTRING_SKIP_VARIABLE = TRUE QSTRING$ = QSTRING$ + IN_LINE_CH$ ' PRINT #FILE_L, LINE_NUMBER ; " QSTRING$ = "; QSTRING$; ", IN_LINE_CH = "; IN_LINE_CH ' PRINT #FILE_L, LINE_NUMBER ; " VLSTRING$ = "; VLSTRING$ GOTO MORE_QSTRING GOSUB GET_IN_LINE_CHAR RETURN BAD_QSTRING PRINT #FILE_L, LINE_NUMBER ; " ERROR - Missing end of Quoted String " ; QSTRING$ ERRORS = ERRORS + NUM_1 RETURN GET_NEW_2CH_VARIABLE NEW_2CH_VARIABLE$ = CHR$(HIGH_2CH_VARIABLE) + CHR$(LOW_2CH_VARIABLE) LOW_2CH_VARIABLE = LOW_2CH_VARIABLE + NUM_1 IF LOW_2CH_VARIABLE <= ASC_Z_U GOTO CHECK_NEW_2CH_VARIABLE LOW_2CH_VARIABLE = ASC_A_U HIGH_2CH_VARIABLE = HIGH_2CH_VARIABLE + NUM_1 IF HIGH_2CH_VARIABLE <= ASC_Z_U GOTO CHECK_NEW_2CH_VARIABLE HIGH_2CH_VARIABLE = ASC_A_U : REM Ignore Possibility of 'ZZ' being exceeded FOR NOW (676 Variables) CHECK_NEW_2CH_VARIABLE FOR ILLEGAL_2CH_VARIABLE_TABLE_COUNTER = ILLEGAL_2CH_VARIABLE_TABLE_START TO ILLEGAL_2CH_VARIABLE_TABLE_COUNT IF NEW_2CH_VARIABLE$ = ILLEGAL_2CH_VARIABLE_TABLE$(ILLEGAL_2CH_VARIABLE_TABLE_COUNTER) GOTO GET_NEW_2CH_VARIABLE NEXT ILLEGAL_2CH_VARIABLE_TABLE_COUNTER RETURN ' This is checking if only allowable characters are present ' It does NOT check for valid number syntax CHECK_IF_NUMBER IS_NUMBER = FALSE NUMBER_LENGTH = LEN(VLSTRING$) FOR NUMBER_COUNTER = NUM_1 TO NUMBER_LENGTH NUMBER_CH$ = MID$(VLSTRING$, NUMBER_COUNTER, NUM_1) NUMBER_CH = ASC(NUMBER_CH$) IF NUMBER_CH >= ASC_0 AND NUMBER_CH <= ASC_9 GOTO MORE_NUMBERS IF NUMBER_CH = ASC_PERIOD OR NUMBER_CH = ASC_PLUS OR NUMBER_CH = ASC_MINUS GOTO MORE_NUMBERS IF NUMBER_CH = ASC_E_U OR NUMBER_CH = ASC_e_L GOTO MORE_NUMBERS RETURN : REM Not a number MORE_NUMBERS NEXT NUMBER_COUNTER IS_NUMBER = TRUE RETURN ' Prepare line number for output, no leading space, No trailing space PREPARE_LINE_NUMBER LNR_$ = STR$(LINE_NUMBER) ' IF LEN(LNR_$) < 2 THEN PRINT #FILE_L, "LINE NUMBER LENGTH LESS THAN 2 >>" ; LEN(LNR_$) LN_LENGTH = LEN(LNR_$) - NUM_1 LN_$ = MID$(LNR_$, NUM_2, LN_LENGTH) RETURN NEXT_LINE LINE INPUT #FILE_I, IN_LINE$ IN_LINE_CHAR_COUNTER = NUM_0 LAST_CH = ASC_TILDE DEF_CONSTANT = FALSE DATA_LINE = FALSE VLSTRING_COUNT = NUM_0 ' Let User Know we are still processing IF PASS = NUM_2 THEN PRINT LINE_NUMBER ; I_EOF = EOF(FILE_I) IF I_EOF = NUM_M1 GOTO I_FILE_END I_LINE_LENGTH = LEN(IN_LINE$) IF I_LINE_LENGTH = NUM_0 GOTO BLANK_LINE ''' CHARACTERS IN COLUMN ONE ' "A-Za-z", "_", "0-9" = LINE LABLE ' "#" = Urbane COMMAND ' " " = NO LINE LABLE ' "'" = COMMENT ' any other character = COMMENT COLUMN_ONE GOSUB GET_IN_LINE_CHAR IF IN_LINE_CH = ASC_POUND GOTO URBANE_COMMAND IF IN_LINE_CH = ASC_BLANK GOTO NO_LINE_LABLE IF IN_LINE_CH = ASC_SINGLE_QUOTE GOTO COMMENT IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO LINE_LABEL IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO LINE_LABEL IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_9 GOTO LINE_LABEL IF IN_LINE_CH = ASC_UNDERSCORE GOTO LINE_LABEL COMMENT ON PASS GOTO OUTPUT_LINE, PASS2_CONTINUE URBANE_COMMAND IF INSTR(NUM_2, IN_LINE$, "LIST_ON") <> NUM_0 THEN OUTPUT_LISTING = TRUE IF INSTR(NUM_2, IN_LINE$, "LIST_OFF") <> NUM_0 THEN OUTPUT_LISTING = FALSE IF INSTR(NUM_2, IN_LINE$, "XREF_ON") <> NUM_0 THEN OUTPUT_XREF = TRUE IF INSTR(NUM_2, IN_LINE$, "XREF_OFF") <> NUM_0 THEN OUTPUT_XREF = FALSE IF INSTR(NUM_2, IN_LINE$, "CONSTANT") <> NUM_0 THEN DEF_CONSTANT = TRUE : GOTO NO_LINE_LABLE ' ON PASS GOTO OUTPUT_LINE, PASS2_CONTINUE BLANK_LINE ON PASS GOTO OUTPUT_LINE, PASS2_CONTINUE NO_LINE_LABLE ON PASS GOTO OUTPUT_LINE, PARSE_LINE LINE_LABEL GOSUB GET_VLSTRING VLSTRING_COUNT = NUM_1 IF LAST_CH <> ASC_DOLLAR GOTO LINE_LABEL_GOOD PRINT #FILE_L, "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; VLSTRING$ PRINT "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; VLSTRING$ WARNINGS = WARNINGS + NUM_1 LINE_LABEL_GOOD IF PASS = NUM_2 GOTO PARSE_LINE FOR LINE_LABEL_COUNTER = LINE_LABEL_START TO LINE_LABEL_COUNT IF VLSTRING$ = LINE_LABELS$(LINE_LABEL_COUNTER,LINE_LABELS_NAME) GOTO DUP_LINE_LABEL NEXT LINE_LABEL_COUNTER LINE_LABEL_COUNT = LINE_LABEL_COUNT + NUM_1 IF LINE_LABEL_COUNT > LINE_LABEL_MAX_COUNT THEN PRINT #FILE_L, " LINE_LABEL_MAX_COUNT Exceeded" : STOP LINE_LABELS$(LINE_LABEL_COUNT,LINE_LABELS_NAME) = VLSTRING$ GOSUB PREPARE_LINE_NUMBER LINE_LABELS$(LINE_LABEL_COUNT,LINE_LABELS_NUMBER) = LN_$ IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_LINE_LABEL; " "; LN_$; " "; VLSTRING$ GOTO OUTPUT_LINE DUP_LINE_LABEL PRINT #FILE_L, LINE_NUMBER ; " ERROR - DUPLICATE LINE LABEL = " ; VLSTRING$ ERRORS = ERRORS + NUM_1 GOTO OUTPUT_LINE PARSE_LINE GOSUB PREPARE_LINE_NUMBER OUTPUT_STRING$ = LN_$ CONSTANT_NAME$ = "" CONSTANT_INDEX = NUM_0 EQUALS_FOUND = FALSE PARSE_CONTINUE IF IN_LINE_CH < NUM_0 GOTO OUTPUT_LINE IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO LABEL_OR_VARIABLE IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO LABEL_OR_VARIABLE IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_9 GOTO LABEL_OR_VARIABLE IF IN_LINE_CH = ASC_UNDERSCORE GOTO LABEL_OR_VARIABLE IF IN_LINE_CH = ASC_DOUBLE_QUOTE GOTO HAVE_QUOTED_STRING IF IN_LINE_CH = ASC_AMPERSAND GOTO HEX_OR_OCTAL IF IN_LINE_CH = ASC_EQUALS THEN EQUALS_FOUND = TRUE ' Skip blanks IF IN_LINE_CH = ASC_BLANK AND LAST_CH = ASC_BLANK GOTO PARSE_GET_NEXT_CH OUTPUT_STRING$ = OUTPUT_STRING$ + IN_LINE_CH$ PARSE_GET_NEXT_CH GOSUB GET_IN_LINE_CHAR GOTO PARSE_CONTINUE LABEL_OR_VARIABLE VLSTRING_COUNT = VLSTRING_COUNT + NUM_1 GOSUB GET_VLSTRING GOSUB CHECK_IF_NUMBER IF IS_NUMBER = TRUE GOTO HAVE_NUMBER FOR KEYWORD_TABLE_COUNTER = KEYWORD_TABLE_START TO KEYWORD_TABLE_COUNT IF VLSTRING$ = KEYWORD_TABLE$(KEYWORD_TABLE_COUNTER) GOTO HAVE_KEYWORD NEXT KEYWORD_TABLE_COUNTER FOR LINE_LABEL_COUNTER = LINE_LABEL_START TO LINE_LABEL_COUNT IF VLSTRING$ = LINE_LABELS$(LINE_LABEL_COUNTER,VARIABLE_NAMES_NAME) GOTO HAVE_LINE_LABEL NEXT LINE_LABEL_COUNTER FOR VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_START TO VARIABLE_NAMES_COUNT IF VLSTRING$ = VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_NAME) GOTO HAVE_VARIABLE NEXT VARIABLE_NAMES_COUNTER ' NEW_VARIABLE FOUND VARIABLE_NAMES_COUNT = VARIABLE_NAMES_COUNT + NUM_1 IF VARIABLE_NAMES_COUNT > VARIABLE_NAMES_MAX_COUNT THEN PRINT #FILE_L, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_NAME) = VLSTRING$ VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = "Pending" IF DEF_CONSTANT <> TRUE GOTO GET_NEW_2CH CONSTANT_NAME$ = VLSTRING$ CONSTANT_INDEX = VARIABLE_NAMES_COUNT IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_VARIABLE; " "; LN_$; " "; VLSTRING$ GOTO PARSE_CONTINUE ' Generate new 2 character variable name and put it into variable name table GET_NEW_2CH GOSUB GET_NEW_2CH_VARIABLE VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = NEW_2CH_VARIABLE$ VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_COUNT IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_VARIABLE; " "; LN_$; " "; VLSTRING$ IF LAST_CH <> ASC_DOLLAR GOTO HAVE_VARIABLE VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = NEW_2CH_VARIABLE$ + "$" GOTO HAVE_VARIABLE HAVE_KEYWORD IF OUTPUT_XREF = TRUE AND DATA_LINE = FALSE THEN PRINT #FILE_X, " "; UBN_XRF_KEYWORD_REFERENCE; " "; LN_$; " "; VLSTRING$ ' Add keyword to output string IF DATA_LINE = TRUE GOTO HAVE_DATA_LINE IF VLSTRING$ = "REM" GOTO HAVE_REM IF VLSTRING$ = "LET" GOTO HAVE_LET IF VLSTRING$ = "DATA" THEN DATA_LINE = TRUE IF VLSTRING$ = "CONSTANT" GOTO PARSE_CONTINUE HAVE_DATA_LINE OUTPUT_STRING$ = OUTPUT_STRING$ + VLSTRING$ GOTO PARSE_CONTINUE ' Line with no Line Label and first Keyword "REM" can be removed ' DECB requires the "REM keyword if there is a label on the line HAVE_REM IF VLSTRING_COUNT = NUM_1 GOTO PASS2_CONTINUE OUTPUT_STRING$ = OUTPUT_STRING$ + "REM" GOTO OUTPUT_LINE ' Remove unnecessary "LET" and next Blank HAVE_LET IF IN_LINE_CH = ASC_BLANK GOTO PARSE_GET_NEXT_CH GOTO PARSE_CONTINUE HAVE_LINE_LABEL IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_LINE_REFERENCE; " "; LN_$; " "; LINE_LABELS$(LINE_LABEL_COUNTER,LINE_LABELS_NUMBER) ' Add line number to output string OUTPUT_STRING$ = OUTPUT_STRING$ + LINE_LABELS$(LINE_LABEL_COUNTER,LINE_LABELS_NUMBER) GOTO PARSE_CONTINUE HAVE_NUMBER IF DEF_CONSTANT <> TRUE GOTO ADD_NUMBER IF CONSTANT_INDEX = NUM_0 GOTO ADD_NUMBER IF EQUALS_FOUND <> TRUE GOTO ADD_NUMBER NUM_PREFIX$ = "" IF LAST_CH = ASC_MINUS THEN NUM_PREFIX$ = "-" IF LAST_CH = ASC_PLUS THEN NUM_PREFIX$ = "+" VARIABLE_NAMES$(CONSTANT_INDEX,VARIABLE_NAMES_2CH) = NUM_PREFIX$ + VLSTRING$ GOTO PARSE_CONTINUE ' Add number to output string ADD_NUMBER OUTPUT_STRING$ = OUTPUT_STRING$ + VLSTRING$ GOTO PARSE_CONTINUE HAVE_VARIABLE IF DEF_CONSTANT = TRUE GOTO PARSE_CONTINUE IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_VARIABLE_REFERENCE; " "; LN_$; " "; VLSTRING$ ' Add existing 2ch variable to output string OUTPUT_STRING$ = OUTPUT_STRING$ + VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH) GOTO PARSE_CONTINUE HAVE_QUOTED_STRING GOSUB GET_QSTRING IF DEF_CONSTANT <> TRUE GOTO ADD_QUOTED IF CONSTANT_INDEX = NUM_0 GOTO ADD_QUOTED IF EQUALS_FOUND <> TRUE GOTO ADD_QUOTED VARIABLE_NAMES$(CONSTANT_INDEX,VARIABLE_NAMES_2CH) = QSTRING$ GOTO PARSE_CONTINUE ' Copy Quoted string to output, with double quotes ADD_QUOTED OUTPUT_STRING$ = OUTPUT_STRING$ + QSTRING$ GOTO PARSE_CONTINUE ' On Entry, "ASC_AMPERSAND" is in "IN_LINE_CH$" and "IN_LINE_CH" ' On Exit, "IN_LINE_CH$" and "IN_LINE_CH" have next character. HEX_OR_OCTAL HO_STRING$ = IN_LINE_CH$ GOSUB GET_IN_LINE_CHAR HO_STRING$ = HO_STRING$ + IN_LINE_CH$ HEX = FALSE OCTAL = FALSE IF IN_LINE_CH = ASC_H_U OR IN_LINE_CH = ASC_h_L THEN HEX = TRUE IF IN_LINE_CH = ASC_O_U OR IN_LINE_CH = ASC_o_L THEN OCTAL = TRUE IF HEX = FALSE AND OCTAL = FALSE GOTO BAD_HEX_OR_OCTAL MORE_HEX_OR_OCTAL GOSUB GET_IN_LINE_CHAR IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_F_U GOTO HOSTRING_ADD_UPPER_HEX IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_f_L GOTO HOSTRING_ADD_LOWER_HEX IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_7 GOTO HOSTRING_ADD_OCTAL IF IN_LINE_CH >= ASC_8 AND IN_LINE_CH <= ASC_9 GOTO HOSTRING_ADD_UPPER_HEX ' End of Hex or Octal Number OUTPUT_STRING$ = OUTPUT_STRING$ + HO_STRING$ GOTO PARSE_CONTINUE HOSTRING_ADD_LOWER_HEX IN_LINE_CH = IN_LINE_CH - ( ASC_a_L - ASC_A_U ) IN_LINE_CH$ = CHR$(IN_LINE_CH) HOSTRING_ADD_UPPER_HEX HO_STRING$ = HO_STRING$ + IN_LINE_CH$ IF HEX = TRUE GOTO MORE_HEX_OR_OCTAL PRINT #FILE_L, "WARNING - Invalid Octal Number " ; HO_STRING$ PRINT "WARNING - Invalid Octal Number " ; HO_STRING$ WARNINGS = WARNINGS + NUM_1 GOTO OUTPUT_LINE HOSTRING_ADD_OCTAL HO_STRING$ = HO_STRING$ + IN_LINE_CH$ GOTO MORE_HEX_OR_OCTAL BAD_HEX_OR_OCTAL PRINT #FILE_L, "WARNING - '&' Not followed by 'H' or 'O' " ; HO_STRING$ PRINT "WARNING - '&' Not followed by 'H' or 'O' " ; HO_STRING$ WARNINGS = WARNINGS + NUM_1 ' GOTO OUTPUT_LINE OUTPUT_LINE IF PASS = NUM_1 AND OUTPUT_LISTING = TRUE THEN PRINT #FILE_L, LINE_NUMBER ; IN_LINE$ IF DEF_CONSTANT = TRUE GOTO PASS2_CONTINUE IF PASS = NUM_2 THEN PRINT #FILE_O, OUTPUT_STRING$ PASS2_CONTINUE LINE_NUMBER = LINE_NUMBER + NUM_1 GOTO NEXT_LINE I_FILE_END LINE_COUNT = LINE_NUMBER - NUM_1 PRINT #FILE_L, "Urbane Pass "; PASS; " Done, Lines = "; LINE_COUNT PRINT "Urbane Pass "; PASS; " Done, Lines = "; LINE_COUNT IF PASS = NUM_2 GOTO ALL_DONE ' GOSUB DUMP_LINE_LABELS PRINT #FILE_L, " MEM = " ; MEM PRINT " MEM = " ; MEM LOAD_KEYWORDS DIM KEYWORD_TABLE$(UBN_MEM_KEYWORD_TABLE_MAX_COUNT) KEYWORD_TABLE_MAX_COUNT = UBN_MEM_KEYWORD_TABLE_MAX_COUNT KEYWORD_TABLE_START = NUM_1 KEYWORD_TABLE_COUNT = NUM_0 LOOP_KEYWORDS READ KEYWORD$ IF KEYWORD$ = "\" GOTO END_OF_KEYWORDS KEYWORD_TABLE_COUNT = KEYWORD_TABLE_COUNT + NUM_1 KEYWORD_TABLE$(KEYWORD_TABLE_COUNT) = KEYWORD$ GOTO LOOP_KEYWORDS END_OF_KEYWORDS DIM ILLEGAL_2CH_VARIABLE_TABLE$(UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT) ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT = UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT ILLEGAL_2CH_VARIABLE_TABLE_START = NUM_1 ILLEGAL_2CH_VARIABLE_TABLE_COUNT = NUM_0 LOOP_ILLEGAL_2CH_VARIABLES READ ILLEGAL_2CH_VARIABLE$ IF ILLEGAL_2CH_VARIABLE$ = "\" GOTO END_OF_ILLEGAL_2CH_VARIABLES ILLEGAL_2CH_VARIABLE_TABLE_COUNT = ILLEGAL_2CH_VARIABLE_TABLE_COUNT + NUM_1 ILLEGAL_2CH_VARIABLE_TABLE$(ILLEGAL_2CH_VARIABLE_TABLE_COUNT) = ILLEGAL_2CH_VARIABLE$ GOTO LOOP_ILLEGAL_2CH_VARIABLES END_OF_ILLEGAL_2CH_VARIABLES DIM VARIABLE_NAMES$(UBN_MEM_VARIABLE_NAMES_MAX_COUNT,NUM_2) VARIABLE_NAMES_MAX_COUNT = UBN_MEM_VARIABLE_NAMES_MAX_COUNT VARIABLE_NAMES_START = NUM_1 VARIABLE_NAMES_COUNT = NUM_0 VARIABLE_NAMES_NAME = NUM_1 VARIABLE_NAMES_2CH = NUM_2 HIGH_2CH_VARIABLE = ASC_A_U LOW_2CH_VARIABLE = ASC_A_U PASS = NUM_2 LINE_NUMBER = NUM_1 I_EOF = NUM_0 PRINT #FILE_L, " ---------PASS 2 STARTING------" PRINT " ---------PASS 2 STARTING------" CLOSE FILE_I OPEN "I", #NUM_1, IN_FILE$ GOTO NEXT_LINE ' REM Startup code here so Basic does not have to search it each time it is looking for a line number UBN_START FILES UBN_MEM_FILES_COUNT, UBN_MEM_FILES_SPACE PCLEAR UBN_MEM_PCLEAR CLEAR UBN_MEM_CLEAR PRINT "Urbane Starting - Urbane XUBN~VERSION$ " PRINT " MEM = " ; MEM PASS = NUM_1 LINE_NUMBER = NUM_1 ERRORS = NUM_0 WARNINGS = NUM_0 ASC_DOUBLE_QUOTE$ = CHR$(34) OUTPUT_LISTING = UBN_LIST_LIST_INITIAL OUTPUT_XREF = UBN_XREF_LIST_INITIAL FILE_I = NUM_1 FILE_O = NUM_2 FILE_L = NUM_3 FILE_X = NUM_4 OPEN "I", #NUM_1, IN_FILE$ OPEN "O", #NUM_2, OUT_FILE$ OPEN "O", #NUM_3, LST_FILE$ OPEN "O", #NUM_4, XRF_FILE$ DIM LINE_LABELS$(UBN_MEM_LINE_LABEL_MAX_COUNT,NUM_2) LINE_LABEL_MAX_COUNT = UBN_MEM_LINE_LABEL_MAX_COUNT LINE_LABEL_START = NUM_1 LINE_LABEL_COUNT = NUM_0 LINE_LABELS_NAME = NUM_1 LINE_LABELS_NUMBER = NUM_2 PRINT #FILE_L, " "; UBN_TITLE$ PRINT #FILE_X, " "; UBN_XRF_TITLE; " "; NUM_0; " "; UBN_TITLE$ PRINT #FILE_L, " MEM = " ; MEM GOTO NEXT_LINE ' Keyword Table DATA REM DATA ATTR,AUDIO,BACKUP,CIRCLE,CLEAR,CLOAD,CLOADM,CLOSE,CLS,COLOR,CONSTANT,CONT,COPY,CSAVE DATA CSAVEM,DATA,DEF,DEFUSR,DEL,DIM,DIR,DLOAD,DRAW,DRIVE,DSKI$,DSKINI,DSKO$,EDIT DATA END,EXEC,FIELD,FILES,FN,FOR,GET,GOSUB DATA GOTO,HBUFF,HCIRCLE,HCLS,HCOLOR,HDRAW,HGET,HLINE,HPAINT,HPRINT,HPUT,HRESET DATA HSCREEN,HSET,HSTAT,IF,INPUT,KILL,LET,LINE,LIST,LLIST,LOCATE,LPOKE,LOAD,LOADM,LSET,MERGE DATA MOTOR,NEW,NEXT,OLD,ON,OPEN,PAINT,PALETTE,PCLEAR,PCLS,PCOPY,PLAY,PMODE,POKE,PRESET,PRINT DATA PSET,PUT,READ,RENAME,RENUM,RESET,RSET,RESTORE,RESUME,RETURN,RUN,SAVE,SAVEM,SCREEN DATA SET,SKIPF,SOUND,STOP,TO,TROFF,TRON,WIDTH,WRITE,UNLOAD,VERIFY DATA MEM,TIMER,AND,NOT,OR,ELSE,STEP,FREE,AS,BRK,ERR,CMP,RGB,USING DATA ERROR,FREE,OFF,TAB,USING,THEN,TO,G,BF,B,R,A,"?" DATA AS,BF,OR,PI ' Functions, keywords that require next character to be an open parentheses DATA ABS,ASC,ATN,BUTTON,CHR$,COS,CVN,EOF,ERLIN,ERNO,EXP,FIX,HEX$,HPOINT,INKEY$,INSTR,INT DATA JOYSTK,LEFT$,LEN,LOC,LOF,LOG,LPEEK,MID$,MKN$,PEEK,POINT,POS,PPOINT,RIGHT$,RND,SGN,SIN DATA STRING$,STR$,SQR,TAN,USR,VAL,VARPTR DATA "\" ' Illegal Two Character Variable Table NOTE: "PI" is a variable that is NOT replaced DATA AS,BF,FN,IF,ON,OR,PI,TO,"\" ALL_DONE PRINT #FILE_L, " MEM = " ; MEM PRINT " MEM = " ; MEM ' GOSUB DUMP_VARIABLES PRINT "Urbane Done, Errors = " ; ERRORS ; " Warnings = "; WARNINGS ; " Lines = " ; LINE_COUNT ; "Line Label Count = " ; LINE_LABEL_COUNT ; " Variables Count = " ; VARIABLE_NAMES_COUNT PRINT #FILE_L, "Urbane Done, Errors = " ; ERRORS ; " Warnings = "; WARNINGS ; " Lines = " ; LINE_COUNT ; "Line Label Count = " ; LINE_LABEL_COUNT ; " Variables Count = " ; VARIABLE_NAMES_COUNT CLOSE FILE_I CLOSE FILE_O CLOSE FILE_L CLOSE FILE_X END LINE_COUNT ; "Line Label Count = " ; LINE_LABEL_COUNT ; " Variables Count = " ; VARIABLE_NAMES_COUNT CLOSE FILE_I CLOSE FILE_O CLOSE FILE_L CLOSE FILE_X L 8 631 MEM 8 632 PRINT 8 632 MEM 8 634 PRINT 5 634 ERRORS 5 634 WARNINGS 5 634 LINE_COUNT 5 634 LINE_LABEL_COUNT 5 634 VARIABLE_NAMES_COUNT 8 635 PRINT 5 635 FILE_L 5 635 ERRORS 5 635 WARNINGS 5 635 LINE_COUNT 5 635 LINE_LABEL_COUNT 5 635 VARIABLE_NAMES_COUNT 8 636 CLOSE 5 636 FILE_I 8 637 CLOSE 5 637 FILE_O 8 638 CLOSE 5 638 FILE_L 8 639 CLOSE 5 639 FILE_X 8 641 END 5 FILE_L 5 635 ERRORS 5 635 WARNINGS 5 635 LINE_COUNT 5GOTO 129 120 IF AD = 95 GOTO 130 121 IF AD = 64 GOTO 130 122 IF AD = 36 GOTO 131 124 RETURN 126 AD = AD - ( 97 - 65 ) 127 AE$ = CHR$(AD) 128 REM 129 REM 130 REM 131 REM 132 AI$ = AI$ + AE$ 134 IF AD = 36 THEN AC = AD : GOSUB 89 : RETURN 135 GOTO 115 141 AJ$ = AE$ 142 AK = 0 143 GOSUB 89 145 IF AD <= 0 GOTO 215 146 AJ$ = AJ$ + AE$ 147 IF AD = 32 THEN AK = 0 148 IF AK = 1 GOTO 150 149 IF AD = 88 OR AD = 120 GOTO 155 150 IF AD <> 34 GOTO 143 152 GOSUB 89 153 RETURN 155 GOSUB 89 156 IF AD <= 0 GOTO 215 157 IF AD = 34 GOTO 162 158 IF AD >= 65 AND AD <= 90 GOTO 166 159 IF AD >= 97 AND AD <= 122 GOTO 166 160 IF AD = 95 GOTO 166 161 GOTO 143 162 AJ$ = AJ$ + AE$ 163 GOSUB 89 164 RETURN 166 AL = AA 167 AM$ = AE$ 168 GOSUB 114 170 IF AC <> 36 GOTO 204 171 FOR AN = AO TO AP 172 IF AI$ = AQ$(AN,AR) GOTO 188 173 NEXT AN 177 AP = AP + 1 178 IF AP > AT THEN PRINT #AG, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP 180 AQ$(AP,AR) = AI$ 181 AQ$(AP,AU) = "Pending" 183 GOSUB 218 185 AQ$(AP,AU) = AV$ + "$" 186 AN = AP 188 IF ASC(AQ$(AN,AU)) = 34 GOTO 198 192 AJ$ = AJ$ + AQ$(AN,AU) 193 GOTO 143 198 AW = LEN(AJ$) - 1 199 AJ$ = LEFT$(AJ$,AW) 200 AX = LEN(AQ$(AN,AU)) - 2 201 AJ$ = AJ$ + MID$(AQ$(AN,AU),2,AX) 202 GOTO 143 204 AA = AL 205 AE$ = AM$ 206 AK = 1 207 AJ$ = AJ$ + AE$ 210 GOTO 143 212 GOSUB 89 213 RETURN 215 PRINT #AG, AH ; " ERROR - Missing end of Quoted String " ; AJ$ 216 AY = AY + 1 217 RETURN 218 AV$ = CHR$(AZ) + CHR$(BA) 220 BA = BA + 1 221 IF BA <= 90 GOTO 228 222 BA = 65 224 AZ = AZ + 1 225 IF AZ <= 90 GOTO 228 226 AZ = 65 : REM 228 FOR BB = BC TO BD 229 IF AV$ = BE$(BB) GOTO 218 230 NEXT BB 232 RETURN 236 BG = 0 237 BH = LEN(AI$) 238 FOR BI = 1 TO BH 240 BJ$ = MID$(AI$, BI, 1) 241 BK = ASC(BJ$) 243 IF BK >= 48 AND BK <= 57 GOTO 249 244 IF BK = 46 OR BK = 43 OR BK = 45 GOTO 249 245 IF BK = 69 OR BK = 101 GOTO 249 247 RETURN : REM 249 NEXT BI 250 BG = 1 251 RETURN 254 BL$ = STR$(AH) 256 BM = LEN(BL$) - 1 257 BN$ = MID$(BL$, 2, BM) 258 RETURN 260 LINE INPUT #BO, AF$ 262 AA = 0 263 AC = 64 264 BP = 0 265 BQ = 0 266 BR = 0 268 IF BS = 2 THEN PRINT AH ; 269 BT = EOF(BO) 271 IF BT = -1 GOTO 512 272 AB = LEN(AF$) 273 IF AB = 0 GOTO 304 282 GOSUB 89 283 IF AD = 35 GOTO 294 284 IF AD = 32 GOTO 306 285 IF AD = 39 GOTO 292 287 IF AD >= 65 AND AD <= 90 GOTO 308 288 IF AD >= 97 AND AD <= 122 GOTO 308 289 IF AD >= 48 AND AD <= 57 GOTO 308 290 IF AD = 95 GOTO 308 292 ON BS GOTO 503, 509 294 IF INSTR(2, AF$, "LIST_ON") <> 0 THEN BU = 1 295 IF INSTR(2, AF$, "LIST_OFF") <> 0 THEN BU = 0 297 IF INSTR(2, AF$, "XREF_ON") <> 0 THEN BV = 1 298 IF INSTR(2, AF$, "XREF_OFF") <> 0 THEN BV = 0 300 IF INSTR(2, AF$, "CONSTANT") <> 0 THEN BP = 1 : GOTO 306 304 ON BS GOTO 503, 509 306 ON BS GOTO 503, 335 308 GOSUB 114 309 BR = 1 311 IF AC <> 36 GOTO 316 312 PRINT #AG, "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; AI$ 313 PRINT "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; AI$ 314 BW = BW + 1 316 IF BS = 2 GOTO 335 318 FOR BX = BY TO BZ 319 IF AI$ = CA$(BX,CB) GOTO 331 320 NEXT BX 322 BZ = BZ + 1 323 IF BZ > CC THEN PRINT #AG, " LINE_LABEL_MAX_COUNT Exceeded" : STOP 325 CA$(BZ,CB) = AI$ 326 GOSUB 254 327 CA$(BZ,CD) = BN$ 328 IF BV = 1 THEN PRINT #CE, " "; 2; " "; BN$; " "; AI$ 329 GOTO 503 331 PRINT #AG, AH ; " ERROR - DUPLICATE LINE LABEL = " ; AI$ 332 AY = AY + 1 333 GOTO 503 335 GOSUB 254 336 CF$ = BN$ 337 CG$ = "" 338 CH = 0 339 CI = 0 341 IF AD < 0 GOTO 503 342 IF AD >= 65 AND AD <= 90 GOTO 359 343 IF AD >= 97 AND AD <= 122 GOTO 359 344 IF AD >= 48 AND AD <= 57 GOTO 359 345 IF AD = 95 GOTO 359 346 IF AD = 34 GOTO 447 347 IF AD = 38 GOTO 462 349 IF AD = 61 THEN CI = 1 352 IF AD = 32 AND AC = 32 GOTO 356 354 CF$ = CF$ + AE$ 356 GOSUB 89 357 GOTO 341 359 BR = BR + 1 360 GOSUB 114 362 GOSUB 236 363 IF BG = 1 GOTO 426 365 FOR CJ = CK TO CL 366 IF AI$ = CM$(CJ) GOTO 399 367 NEXT CJ 369 FOR BX = BY TO BZ 370 IF AI$ = CA$(BX,AR) GOTO 421 371 NEXT BX 373 FOR AN = AO TO AP 374 IF AI$ = AQ$(AN,AR) GOTO 441 375 NEXT AN 378 AP = AP + 1 379 IF AP > AT THEN PRINT #AG, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP 381 AQ$(AP,AR) = AI$ 382 AQ$(AP,AU) = "Pending" 383 IF BP < 542 538 8 544 DIM 5 544 VARIABLE_NAMES$ 5 544 UBN_MEM_VARIABLE_NAMES_MAX_COUNT 5 544 NUM_2 5 545 VARIABLE_NAMES_MAX_COUNT 5 545 UBN_MEM_VARIABLE_NAMES_MAX_COUNT 5 546 VARIABLE_NAMES_START 5 546 NUM_1 5 547 VARIABLE_NAMES_COUNT 5 547 NUM_0 5 548 VARIABLE_NAMES_NAME 5 548 NUM_1 5 549 VARIABLE_NAMES_2CH 5 549 NUM_2 5 551 HIGH_2CH_VARIABLE 5 551 ASC_A_U 5 552 LOW_2CH_VARIABLE 5 552 ASC_A_U 5 554 PASS 5 554 NUM_2 5 555 LINE_NUMBER 5 555 NUM_1 5 556 I_EOF 5 556 NUM_0 8 557 PRINT 5 557 FILE_L 8 558 PRINT 8 559 CLOSE 5 559 FILE_I 8 561 OPEN 5 561 NUM_1 5 561 IN_FILE$ 8 563 GOTO 3 563 260 8 566 FILES 5 566 UBN_MEM_FILES_COUNT 5 566 UBN_MEM_FILES_SPACE 8 567 PCLEAR 5 567 UBN_MEM_PCLEAR 8 568 CLEAR 5 568 UBN_MEM_CLEAR 8 569 PRINT 8 570 PRINT 8 570 MEM 5 572 PASS 5 572 NUM_1 5 573 LINE_NUMBER 5 573 NUM_1 5 575 ERRORS 5 575 NUM_0 5 576 WARNINGS 5 576 NUM_0 4 578 ASC_DOUBLE_QUOTE$ 5 578 ASC_DOUBLE_QUOTE$ 8 578 CHR$ 5 580 OUTPUT_LISTING 5 580 UBN_LIST_LIST_INITIAL 5 581 OUTPUT_XREF 5 581 UBN_XREF_LIST_INITIAL 5 582 FILE_I 5 582 NUM_1 5 583 FILE_O 5 583 NUM_2 5 584 FILE_L 5 584 NUM_3 5 585 FILE_X 5 585 NUM_4 8 587 OPEN 5 587 NUM_1 5 587 IN_FILE$ 8 589 OPEN 5 589 NUM_2 5 589 OUT_FILE$ 8 591 OPEN 5 591 NUM_3 5 591 LST_FILE$ 8 593 OPEN 5 593 NUM_4 5 593 XRF_FILE$ 8 595 DIM 5 595 LINE_LABELS$ 5 595 UBN_MEM_LINE_LABEL_MAX_COUNT 5 595 NUM_2 5 596 LINE_LABEL_MAX_COUNT 5 596 UBN_MEM_LINE_LABEL_MAX_COUNT 5 597 LINE_LABEL_START 5 597 NUM_1 5 598 LINE_LABEL_COUNT 5 598 NUM_0 5 599 LINE_LABELS_NAME 5 599 NUM_1 5 600 LINE_LABELS_NUMBER 5 600 NUM_2 8 602 PRINT 5 602 FILE_L 5 602 UBN_TITLE$ 8 603 PRINT 5 603 FILE_X 5 603 UBN_XRF_TITLE 5 603 NUM_0 5 603 UBN_TITLE$ 8 605 PRINT 5 605 FILE_L 8 605 MEM 8 606 GOTO 3 606 260 8 609 DATA 8 610 DATA 8 611 DATA 8 612 DATA 8 613 DATA 8 614 DATA 8 615 DATA 8 616 DATA 8 617 DATA 8 618 DATA 8 619 DATA 8 620 DATA 8 623 DATA 8 624 DATA 8 625 DATA 8 626 DATA 8 629 DATA 8 631 PRINT 5 631 FILE_GHT$,RND,SGN,SIN 625 DATA STRING$,STR$,SQR,TAN,USR,VAL,VARPTR 626 DATA "\" 629 DATA AS,BF,FN,IF,ON,OR,PI,TO,"\" 631 PRINT #AG, " MEM = " ; MEM 632 PRINT " MEM = " ; MEM 634 PRINT "Urbane Done, Errors = " ; AY ; " Warnings = "; BW ; " Lines = " ; CS ; "Line Label Count = " ; BZ ; " Variables Count = " ; AP 635 PRINT #AG, "Urbane Done, Errors = " ; AY ; " Warnings = "; BW ; " Lines = " ; CS ; "Line Label Count = " ; BZ ; " Variables Count = " ; AP 636 CLOSE BO 637 CLOSE CR 638 CLOSE AG 639 CLOSE CE 641 END neTING------" 559 CLOSE BO 561 OPEN "I", #1, "UBN_IN.TXT" 563 GOTO 260 566 FILES 4, 100 567 PCLEAR 1 568 CLEAR 8500 569 PRINT "Urbane Starting - Urbane 1.060202 RC0" 570 PRINT " MEM = " ; MEM 572 BS = 1 573 AH = 1 575 AY = 0 576 BW = 0 578 CX$ = CHR$(34) 580 BU = 0 581 BV = 0 582 BO = 1 583 CR = 2 584 AG = 3 585 CE = 4 587 OPEN "I", #1, "UBN_IN.TXT" 589 OPEN "O", #2, "UBN_OUT.TXT" 591 OPEN "O", #3, "UBN_LST.TXT" 593 OPEN "O", #4, "UBN_XRF.TXT" 595 DIM CA$(100,2) 596 CC = 100 597 BY = 1 598 BZ = 0 599 CB = 1 600 CD = 2 602 PRINT #AG, " "; "Urbane 1.060202 RC0 - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor." 603 PRINT #CE, " "; 1; " "; 0; " "; "Urbane 1.060202 RC0 - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor." 605 PRINT #AG, " MEM = " ; MEM 606 GOTO 260 609 DATA REM 610 DATA ATTR,AUDIO,BACKUP,CIRCLE,CLEAR,CLOAD,CLOADM,CLOSE,CLS,COLOR,CONSTANT,CONT,COPY,CSAVE 611 DATA CSAVEM,DATA,DEF,DEFUSR,DEL,DIM,DIR,DLOAD,DRAW,DRIVE,DSKI$,DSKINI,DSKO$,EDIT 612 DATA END,EXEC,FIELD,FILES,FN,FOR,GET,GOSUB 613 DATA GOTO,HBUFF,HCIRCLE,HCLS,HCOLOR,HDRAW,HGET,HLINE,HPAINT,HPRINT,HPUT,HRESET 614 DATA HSCREEN,HSET,HSTAT,IF,INPUT,KILL,LET,LINE,LIST,LLIST,LOCATE,LPOKE,LOAD,LOADM,LSET,MERGE 615 DATA MOTOR,NEW,NEXT,OLD,ON,OPEN,PAINT,PALETTE,PCLEAR,PCLS,PCOPY,PLAY,PMODE,POKE,PRESET,PRINT 616 DATA PSET,PUT,READ,RENAME,RENUM,RESET,RSET,RESTORE,RESUME,RETURN,RUN,SAVE,SAVEM,SCREEN 617 DATA SET,SKIPF,SOUND,STOP,TO,TROFF,TRON,WIDTH,WRITE,UNLOAD,VERIFY 618 DATA MEM,TIMER,AND,NOT,OR,ELSE,STEP,FREE,AS,BRK,ERR,CMP,RGB,USING 619 DATA ERROR,FREE,OFF,TAB,USING,THEN,TO,G,BF,B,R,A,"?" 620 DATA AS,BF,OR,PI 623 DATA ABS,ASC,ATN,BUTTON,CHR$,COS,CVN,EOF,ERLIN,ERNO,EXP,FIX,HEX$,HPOINT,INKEY$,INSTR,INT 624 DATA JOYSTK,LEFT$,LEN,LOC,LOF,LOG,LPEEK,MID$,MKN$,PEEK,POINT,POS,PPOINT,RI 5 495 HO_STRING$ 5 495 HO_STRING$ 5 495 IN_LINE_CH$ 8 496 GOTO 3 496 473 8 498 PRINT 5 498 FILE_L 5 498 HO_STRING$ 8 499 PRINT 5 499 HO_STRING$ 5 500 WARNINGS 5 500 WARNINGS 5 500 NUM_1 8 503 IF 5 503 PASS 5 503 NUM_1 8 503 AND 5 503 OUTPUT_LISTING 5 503 TRUE 8 503 THEN 8 503 PRINT 5 503 FILE_L 5 503 LINE_NUMBER 5 503 IN_LINE$ 8 505 IF 5 505 DEF_CONSTANT 5 505 TRUE 8 505 GOTO 3 505 509 8 507 IF 5 507 PASS 5 507 NUM_2 8 507 THEN 8 507 PRINT 4 507 FILE_O 5 507 FILE_O 5 507 OUTPUT_STRING$ 5 509 LINE_NUMBER 5 509 LINE_NUMBER 5 509 NUM_1 8 510 GOTO 3 510 260 4 512 LINE_COUNT 5 512 LINE_COUNT 5 512 LINE_NUMBER 5 512 NUM_1 8 513 PRINT 5 513 FILE_L 5 513 PASS 5 513 LINE_COUNT 8 514 PRINT 5 514 PASS 5 514 LINE_COUNT 8 516 IF 5 516 PASS 5 516 NUM_2 8 516 GOTO 3 516 631 8 519 PRINT 5 519 FILE_L 8 519 MEM 8 520 PRINT 8 520 MEM 8 522 DIM 5 522 KEYWORD_TABLE$ 5 522 UBN_MEM_KEYWORD_TABLE_MAX_COUNT 4 523 KEYWORD_TABLE_MAX_COUNT 5 523 KEYWORD_TABLE_MAX_COUNT 5 523 UBN_MEM_KEYWORD_TABLE_MAX_COUNT 5 524 KEYWORD_TABLE_START 5 524 NUM_1 5 525 KEYWORD_TABLE_COUNT 5 525 NUM_0 8 527 READ 4 527 KEYWORD$ 5 527 KEYWORD$ 8 528 IF 5 528 KEYWORD$ 8 528 GOTO 3 528 533 5 529 KEYWORD_TABLE_COUNT 5 529 KEYWORD_TABLE_COUNT 5 529 NUM_1 5 530 KEYWORD_TABLE$ 5 530 KEYWORD_TABLE_COUNT 5 530 KEYWORD$ 8 531 GOTO 3 531 527 8 533 DIM 5 533 ILLEGAL_2CH_VARIABLE_TABLE$ 5 533 UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT 4 534 ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT 5 534 ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT 5 534 UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT 5 535 ILLEGAL_2CH_VARIABLE_TABLE_START 5 535 NUM_1 5 536 ILLEGAL_2CH_VARIABLE_TABLE_COUNT 5 536 NUM_0 8 538 READ 4 538 ILLEGAL_2CH_VARIABLE$ 5 538 ILLEGAL_2CH_VARIABLE$ 8 539 IF 5 539 ILLEGAL_2CH_VARIABLE$ 8 539 GOTO 3 539 544 5 540 ILLEGAL_2CH_VARIABLE_TABLE_COUNT 5 540 ILLEGAL_2CH_VARIABLE_TABLE_COUNT 5 540 NUM_1 5 541 ILLEGAL_2CH_VARIABLE_TABLE$ 5 541 ILLEGAL_2CH_VARIABLE_TABLE_COUNT 5 541 ILLEGAL_2CH_VARIABLE$ 8 542 GOTO 30 PRINT " MEM = " ; MEM 522 DIM CM$(200) 523 CT = 200 524 CK = 1 525 CL = 0 527 READ CU$ 528 IF CU$ = "\" GOTO 533 529 CL = CL + 1 530 CM$(CL) = CU$ 531 GOTO 527 533 DIM BE$(10) 534 CV = 10 535 BC = 1 536 BD = 0 538 READ CW$ 539 IF CW$ = "\" GOTO 544 540 BD = BD + 1 541 BE$(BD) = CW$ 542 GOTO 538 544 DIM AQ$(150,2) 545 AT = 150 546 AO = 1 547 AP = 0 548 AR = 1 549 AU = 2 551 AZ = 65 552 BA = 65 554 BS = 2 555 AH = 1 556 BT = 0 557 PRINT #AG, " ---------PASS 2 STARTING------" 558 PRINT " ---------PASS 2 STARTING------" 559 CLOSE BO 561 OPEN "I", #1, "UBN_IN.TXT" 563 GOTO 260 566 FILES 4, 100 567 PCLEAR 1 568 CLEAR 8500 569 PRINT "Urbane Starting - Urbane 1.060202 RC0" 570 PRINT " MEM = " ; MEM 572 BS = 1 573 AH = 1 575 AY = 0 576 BW = 0 578 CX$ = CHR$(34) 580 BU = 0 581 BV = 0 582 BO = 1 583 CR = 2 584 AG = 3 585 CE = 4 587 OPEN "I", #1, "UBN_IN.TXT" 589 OPEN "O", #2, "UBN_OUT.TXT" 591 OPEN "O", #3, "UBN_LST.TXT" 593 OPEN "O", #4, "UBN_XRF.TXT" 595 DIM CA$(100,2) 596 CC = 100 597 BY = 1 598 BZ = 0 599 CB = 1 600 CD = 2 602 PRINT #AG, " "; "Urbane 1.060202 RC0 - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor." 603 PRINT #CE, " "; 1; " "; 0; " "; "Urbane 1.060202 RC0 - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor." 605 PRINT #AG, " MEM = " ; MEM 606 GOTO 260 609 DATA REM 610 DATA ATTR,AUDIO,BACKUP,CIRCLE,CLEAR,CLOAD,CLOADM,CLOSE,CLS,COLOR,CONSTANT,CONT,COPY,CSAVE 611 DATA CSAVEM,DATA,DEF,DEFUSR,DEL,DIM,DIR,DLOAD,DRAW,DRIVE,DSKI$,DSKINI,DSKO$,EDIT 612 DATA END,EXEC,FIELD,FILES,FN,FOR,GET,GOSUB 613 DATA GOTO,HBUFF,HCIRCLE,HCLS,HCOLOR,HDRAW,HGET,HLINE,HPAINT,HPRINT,HPUT,HRESET 614 DATA HSCREEN,HSET,HSTAT,IF,INPUT,KILL,LET,LINE,LIST,LLIST,LOCATE,LPOKE,LOAD,LOADM,LSET,MERGE 615 DATA MOTOR,NEW,NEXT,OLD,ON,OPEN,PAINT,PALETTE,PCLEAR,PCLS,PCOPY,PLAY,PMODE,POKE,PRESET,PRINT 616 DATA PSET,PUT,READ,RENAME,RENUM,RESET,RSET,RESTORE,RESUME,RETURN,RUN,SAVE,SAVEM,SCREEN 617 DATA SET,SKIPF,SOUND,STOP,TO,TROFF,TRON,WIDTH,WRITE,UNLOAD,VERIFY 618 DATA MEM,TIMER,AND,NOT,OR,ELSE,STEP,FREE,AS,BRK,ERR,CMP,RGB,USING 619 DATA ERROR,FREE,OFF,TAB,USING,THEN,TO,G,BF,B,R,A,"?" 620 DATA AS,BF,OR,PI 623 DATA ABS,ASC,ATN,BUTTON,CHR$,COS,CVN,EOF,ERLIN,ERNO,EXP,FIX,HEX$,HPOINT,INKEY$,INSTR,INT 624 DATA JOYSTK,LEFT$,LEN,LOC,LOF,LOG,LPEEK,MID$,MKN$,PEEK,POINT,POS,PPOINT,RIOTO 3 395 441 5 396 VARIABLE_NAMES$ 5 396 VARIABLE_NAMES_COUNT 5 396 VARIABLE_NAMES_2CH 5 396 NEW_2CH_VARIABLE$ 8 397 GOTO 3 397 441 8 399 IF 5 399 OUTPUT_XREF 5 399 TRUE 8 399 AND 5 399 DATA_LINE 5 399 FALSE 8 399 THEN 8 399 PRINT 5 399 FILE_X 5 399 UBN_XRF_KEYWORD_REFERENCE 5 399 LN_$ 5 399 VLSTRING$ 8 401 IF 5 401 DATA_LINE 5 401 TRUE 8 401 GOTO 3 401 406 8 402 IF 5 402 VLSTRING$ 8 402 GOTO 3 402 413 8 403 IF 5 403 VLSTRING$ 8 403 GOTO 3 403 418 8 404 IF 5 404 VLSTRING$ 8 404 THEN 5 404 DATA_LINE 5 404 TRUE 8 405 IF 5 405 VLSTRING$ 8 405 GOTO 3 405 341 5 406 OUTPUT_STRING$ 5 406 OUTPUT_STRING$ 5 406 VLSTRING$ 8 408 GOTO 3 408 341 8 413 IF 5 413 VLSTRING_COUNT 5 413 NUM_1 8 413 GOTO 3 413 509 5 414 OUTPUT_STRING$ 5 414 OUTPUT_STRING$ 8 415 GOTO 3 415 503 8 418 IF 5 418 IN_LINE_CH 5 418 ASC_BLANK 8 418 GOTO 3 418 356 8 419 GOTO 3 419 341 8 421 IF 5 421 OUTPUT_XREF 5 421 TRUE 8 421 THEN 8 421 PRINT 5 421 FILE_X 5 421 UBN_XRF_LINE_REFERENCE 5 421 LN_$ 5 421 LINE_LABELS$ 5 421 LINE_LABEL_COUNTER 5 421 LINE_LABELS_NUMBER 5 423 OUTPUT_STRING$ 5 423 OUTPUT_STRING$ 5 423 LINE_LABELS$ 5 423 LINE_LABEL_COUNTER 5 423 LINE_LABELS_NUMBER 8 424 GOTO 3 424 341 8 426 IF 5 426 DEF_CONSTANT 5 426 TRUE 8 426 GOTO 3 426 438 8 427 IF 5 427 CONSTANT_INDEX 5 427 NUM_0 8 427 GOTO 3 427 438 8 428 IF 5 428 EQUALS_FOUND 5 428 TRUE 8 428 GOTO 3 428 438 4 430 NUM_PREFIX$ 5 430 NUM_PREFIX$ 8 431 IF 5 431 LAST_CH 5 431 ASC_MINUS 8 431 THEN 5 431 NUM_PREFIX$ 8 432 IF 5 432 LAST_CH 5 432 ASC_PLUS 8 432 THEN 5 432 NUM_PREFIX$ 5 434 VARIABLE_NAMES$ 5 434 CONSTANT_INDEX 5 434 VARIABLE_NAMES_2CH 5 434 NUM_PREFIX$ 5 434 VLSTRING$ 8 435 GOTO 3 435 341 5 438 OUTPUT_STRING$ 5 438 OUTPUT_STRING$ 5 438 VLSTRING$ 8 439 GOTO 3 439 341 8 441 IF 5 441 DEF_CONSTANT 5 441 TRUE 8 441 GOTO 3 441 341 8 442 IF 5 442 OUTPUT_XREF 5 442 TRUE 8 442 THEN 8 442 PRINT 5 442 FILE_X 5 442 UBN_XRF_VARIABLE_REFERENCE 5 442 LN_$ 5 442 VLSTRING$ 5 444 OUTPUT_STRING$ 5 444 OUTPUT_STRING$ 5 444 VARIABLE_NAMES$ 5 444 VARIABLE_NAMES_COUNTER 5 444 VARIABLE_NAMES_2CH 8 445 GOTO 3 445 341 8 447 GOSUB 3 447 141 8 448 IF 5 448 DEF_CONSTANT 5 448 TRUE 8 448 GOTO 3 448 457 8 449 IF 5 449 CONSTANT_INDEX 5 449 NUM_0 8 449 GOTO 3 449 457 8 450 IF 5 450 EQUALS_FOUND 5 450 TRUE 8 450 GOTO 3 450 457 5 452 VARIABLE_NAMES$ 5 452 CONSTANT_INDEX 5 452 VARIABLE_NAMES_2CH 5 452 QSTRING$ 8 453 GOTO 3 453 341 5 457 OUTPUT_STRING$ 5 457 OUTPUT_STRING$ 5 457 QSTRING$ 8 458 GOTO 3 458 341 4 462 HO_STRING$ 5 462 HO_STRING$ 5 462 IN_LINE_CH$ 8 464 GOSUB 3 464 89 5 465 HO_STRING$ 5 465 HO_STRING$ 5 465 IN_LINE_CH$ 4 467 HEX 5 467 HEX 5 467 FALSE 4 468 OCTAL 5 468 OCTAL 5 468 FALSE 8 469 IF 5 469 IN_LINE_CH 5 469 ASC_H_U 8 469 OR 5 469 IN_LINE_CH 5 469 ASC_H_L 8 469 THEN 5 469 HEX 5 469 TRUE 8 470 IF 5 470 IN_LINE_CH 5 470 ASC_O_U 8 470 OR 5 470 IN_LINE_CH 5 470 ASC_O_L 8 470 THEN 5 470 OCTAL 5 470 TRUE 8 471 IF 5 471 HEX 5 471 FALSE 8 471 AND 5 471 OCTAL 5 471 FALSE 8 471 GOTO 3 471 498 8 473 GOSUB 3 473 89 8 475 IF 5 475 IN_LINE_CH 5 475 ASC_A_U 8 475 AND 5 475 IN_LINE_CH 5 475 ASC_F_U 8 475 GOTO 3 475 487 8 476 IF 5 476 IN_LINE_CH 5 476 ASC_A_L 8 476 AND 5 476 IN_LINE_CH 5 476 ASC_F_L 8 476 GOTO 3 476 484 8 477 IF 5 477 IN_LINE_CH 5 477 ASC_0 8 477 AND 5 477 IN_LINE_CH 5 477 ASC_7 8 477 GOTO 3 477 495 8 478 IF 5 478 IN_LINE_CH 5 478 ASC_8 8 478 AND 5 478 IN_LINE_CH 5 478 ASC_9 8 478 GOTO 3 478 487 5 481 OUTPUT_STRING$ 5 481 OUTPUT_STRING$ 5 481 HO_STRING$ 8 482 GOTO 3 482 341 5 484 IN_LINE_CH 5 484 IN_LINE_CH 5 484 ASC_A_L 5 484 ASC_A_U 5 485 IN_LINE_CH$ 8 485 CHR$ 5 485 IN_LINE_CH 5 487 HO_STRING$ 5 487 HO_STRING$ 5 487 IN_LINE_CH$ 8 488 IF 5 488 HEX 5 488 TRUE 8 488 GOTO 3 488 473 8 490 PRINT 5 490 FILE_L 5 490 HO_STRING$ 8 491 PRINT 5 491 HO_STRING$ 5 492 WARNINGS 5 492 WARNINGS 5 492 NUM_1 8 493 GOTO 3 493 503OUNT 5 359 VLSTRING_COUNT 5 359 NUM_1 8 360 GOSUB 3 360 114 8 362 GOSUB 3 362 236 8 363 IF 5 363 IS_NUMBER 5 363 TRUE 8 363 GOTO 3 363 426 8 365 FOR 4 365 KEYWORD_TABLE_COUNTER 5 365 KEYWORD_TABLE_COUNTER 4 365 KEYWORD_TABLE_START 5 365 KEYWORD_TABLE_START 8 365 TO 4 365 KEYWORD_TABLE_COUNT 5 365 KEYWORD_TABLE_COUNT 8 366 IF 5 366 VLSTRING$ 4 366 KEYWORD_TABLE$ 5 366 KEYWORD_TABLE$ 5 366 KEYWORD_TABLE_COUNTER 8 366 GOTO 3 366 399 8 367 NEXT 5 367 KEYWORD_TABLE_COUNTER 8 369 FOR 5 369 LINE_LABEL_COUNTER 5 369 LINE_LABEL_START 8 369 TO 5 369 LINE_LABEL_COUNT 8 370 IF 5 370 VLSTRING$ 5 370 LINE_LABELS$ 5 370 LINE_LABEL_COUNTER 5 370 VARIABLE_NAMES_NAME 8 370 GOTO 3 370 421 8 371 NEXT 5 371 LINE_LABEL_COUNTER 8 373 FOR 5 373 VARIABLE_NAMES_COUNTER 5 373 VARIABLE_NAMES_START 8 373 TO 5 373 VARIABLE_NAMES_COUNT 8 374 IF 5 374 VLSTRING$ 5 374 VARIABLE_NAMES$ 5 374 VARIABLE_NAMES_COUNTER 5 374 VARIABLE_NAMES_NAME 8 374 GOTO 3 374 441 8 375 NEXT 5 375 VARIABLE_NAMES_COUNTER 5 378 VARIABLE_NAMES_COUNT 5 378 VARIABLE_NAMES_COUNT 5 378 NUM_1 8 379 IF 5 379 VARIABLE_NAMES_COUNT 5 379 VARIABLE_NAMES_MAX_COUNT 8 379 THEN 8 379 PRINT 5 379 FILE_L 8 379 STOP 5 381 VARIABLE_NAMES$ 5 381 VARIABLE_NAMES_COUNT 5 381 VARIABLE_NAMES_NAME 5 381 VLSTRING$ 5 382 VARIABLE_NAMES$ 5 382 VARIABLE_NAMES_COUNT 5 382 VARIABLE_NAMES_2CH 8 383 IF 5 383 DEF_CONSTANT 5 383 TRUE 8 383 GOTO 3 383 390 5 384 CONSTANT_NAME$ 5 384 VLSTRING$ 5 385 CONSTANT_INDEX 5 385 VARIABLE_NAMES_COUNT 8 386 IF 5 386 OUTPUT_XREF 5 386 TRUE 8 386 THEN 8 386 PRINT 5 386 FILE_X 5 386 UBN_XRF_VARIABLE 5 386 LN_$ 5 386 VLSTRING$ 8 387 GOTO 3 387 341 8 390 GOSUB 3 390 218 5 392 VARIABLE_NAMES$ 5 392 VARIABLE_NAMES_COUNT 5 392 VARIABLE_NAMES_2CH 5 392 NEW_2CH_VARIABLE$ 5 393 VARIABLE_NAMES_COUNTER 5 393 VARIABLE_NAMES_COUNT 8 394 IF 5 394 OUTPUT_XREF 5 394 TRUE 8 394 THEN 8 394 PRINT 5 394 FILE_X 5 394 UBN_XRF_VARIABLE 5 394 LN_$ 5 394 VLSTRING$ 8 395 IF 5 395 LAST_CH 5 395 ASC_DOLLAR 8 395 G> 1 GOTO 390 384 CG$ = AI$ 385 CH = AP 386 IF BV = 1 THEN PRINT #CE, " "; 4; " "; BN$; " "; AI$ 387 GOTO 341 390 GOSUB 218 392 AQ$(AP,AU) = AV$ 393 AN = AP 394 IF BV = 1 THEN PRINT #CE, " "; 4; " "; BN$; " "; AI$ 395 IF AC <> 36 GOTO 441 396 AQ$(AP,AU) = AV$ + "$" 397 GOTO 441 399 IF BV = 1 AND BQ = 0 THEN PRINT #CE, " "; 8; " "; BN$; " "; AI$ 401 IF BQ = 1 GOTO 406 402 IF AI$ = "REM" GOTO 413 403 IF AI$ = "LET" GOTO 418 404 IF AI$ = "DATA" THEN BQ = 1 405 IF AI$ = "CONSTANT" GOTO 341 406 CF$ = CF$ + AI$ 408 GOTO 341 413 IF BR = 1 GOTO 509 414 CF$ = CF$ + "REM" 415 GOTO 503 418 IF AD = 32 GOTO 356 419 GOTO 341 421 IF BV = 1 THEN PRINT #CE, " "; 3; " "; BN$; " "; CA$(BX,CD) 423 CF$ = CF$ + CA$(BX,CD) 424 GOTO 341 426 IF BP <> 1 GOTO 438 427 IF CH = 0 GOTO 438 428 IF CI <> 1 GOTO 438 430 CN$ = "" 431 IF AC = 45 THEN CN$ = "-" 432 IF AC = 43 THEN CN$ = "+" 434 AQ$(CH,AU) = CN$ + AI$ 435 GOTO 341 438 CF$ = CF$ + AI$ 439 GOTO 341 441 IF BP = 1 GOTO 341 442 IF BV = 1 THEN PRINT #CE, " "; 5; " "; BN$; " "; AI$ 444 CF$ = CF$ + AQ$(AN,AU) 445 GOTO 341 447 GOSUB 141 448 IF BP <> 1 GOTO 457 449 IF CH = 0 GOTO 457 450 IF CI <> 1 GOTO 457 452 AQ$(CH,AU) = AJ$ 453 GOTO 341 457 CF$ = CF$ + AJ$ 458 GOTO 341 462 CO$ = AE$ 464 GOSUB 89 465 CO$ = CO$ + AE$ 467 CP = 0 468 CQ = 0 469 IF AD = 72 OR AD = 104 THEN CP = 1 470 IF AD = 79 OR AD = 111 THEN CQ = 1 471 IF CP = 0 AND CQ = 0 GOTO 498 473 GOSUB 89 475 IF AD >= 65 AND AD <= 70 GOTO 487 476 IF AD >= 97 AND AD <= 102 GOTO 484 477 IF AD >= 48 AND AD <= 55 GOTO 495 478 IF AD >= 56 AND AD <= 57 GOTO 487 481 CF$ = CF$ + CO$ 482 GOTO 341 484 AD = AD - ( 97 - 65 ) 485 AE$ = CHR$(AD) 487 CO$ = CO$ + AE$ 488 IF CP = 1 GOTO 473 490 PRINT #AG, "WARNING - Invalid Octal Number " ; CO$ 491 PRINT "WARNING - Invalid Octal Number " ; CO$ 492 BW = BW + 1 493 GOTO 503 495 CO$ = CO$ + AE$ 496 GOTO 473 498 PRINT #AG, "WARNING - '&' Not followed by 'H' or 'O' " ; CO$ 499 PRINT "WARNING - '&' Not followed by 'H' or 'O' " ; CO$ 500 BW = BW + 1 503 IF BS = 1 AND BU = 1 THEN PRINT #AG, AH ; AF$ 505 IF BP = 1 GOTO 509 507 IF BS = 2 THEN PRINT #CR, CF$ 509 AH = AH + 1 510 GOTO 260 512 CS = AH - 1 513 PRINT #AG, "Urbane Pass "; BS; " Done, Lines = "; CS 514 PRINT "Urbane Pass "; BS; " Done, Lines = "; CS 516 IF BS = 2 GOTO 631 519 PRINT #AG, " MEM = " ; MEM 52 8 273 IF 5 273 I_LINE_LENGTH 5 273 NUM_0 8 273 GOTO 3 273 304 8 282 GOSUB 3 282 89 8 283 IF 5 283 IN_LINE_CH 5 283 ASC_POUND 8 283 GOTO 3 283 294 8 284 IF 5 284 IN_LINE_CH 5 284 ASC_BLANK 8 284 GOTO 3 284 306 8 285 IF 5 285 IN_LINE_CH 5 285 ASC_SINGLE_QUOTE 8 285 GOTO 3 285 292 8 287 IF 5 287 IN_LINE_CH 5 287 ASC_A_U 8 287 AND 5 287 IN_LINE_CH 5 287 ASC_Z_U 8 287 GOTO 3 287 308 8 288 IF 5 288 IN_LINE_CH 5 288 ASC_A_L 8 288 AND 5 288 IN_LINE_CH 5 288 ASC_Z_L 8 288 GOTO 3 288 308 8 289 IF 5 289 IN_LINE_CH 5 289 ASC_0 8 289 AND 5 289 IN_LINE_CH 5 289 ASC_9 8 289 GOTO 3 289 308 8 290 IF 5 290 IN_LINE_CH 5 290 ASC_UNDERSCORE 8 290 GOTO 3 290 308 8 292 ON 5 292 PASS 8 292 GOTO 3 292 503 3 292 509 8 294 IF 8 294 INSTR 5 294 NUM_2 5 294 IN_LINE$ 5 294 NUM_0 8 294 THEN 4 294 OUTPUT_LISTING 5 294 OUTPUT_LISTING 5 294 TRUE 8 295 IF 8 295 INSTR 5 295 NUM_2 5 295 IN_LINE$ 5 295 NUM_0 8 295 THEN 5 295 OUTPUT_LISTING 5 295 FALSE 8 297 IF 8 297 INSTR 5 297 NUM_2 5 297 IN_LINE$ 5 297 NUM_0 8 297 THEN 4 297 OUTPUT_XREF 5 297 OUTPUT_XREF 5 297 TRUE 8 298 IF 8 298 INSTR 5 298 NUM_2 5 298 IN_LINE$ 5 298 NUM_0 8 298 THEN 5 298 OUTPUT_XREF 5 298 FALSE 8 300 IF 8 300 INSTR 5 300 NUM_2 5 300 IN_LINE$ 5 300 NUM_0 8 300 THEN 5 300 DEF_CONSTANT 5 300 TRUE 8 300 GOTO 3 300 306 8 304 ON 5 304 PASS 8 304 GOTO 3 304 503 3 304 509 8 306 ON 5 306 PASS 8 306 GOTO 3 306 503 3 306 335 8 308 GOSUB 3 308 114 5 309 VLSTRING_COUNT 5 309 NUM_1 8 311 IF 5 311 LAST_CH 5 311 ASC_DOLLAR 8 311 GOTO 3 311 316 8 312 PRINT 5 312 FILE_L 5 312 VLSTRING$ 8 313 PRINT 5 313 VLSTRING$ 4 314 WARNINGS 5 314 WARNINGS 5 314 WARNINGS 5 314 NUM_1 8 316 IF 5 316 PASS 5 316 NUM_2 8 316 GOTO 3 316 335 8 318 FOR 4 318 LINE_LABEL_COUNTER 5 318 LINE_LABEL_COUNTER 4 318 LINE_LABEL_START 5 318 LINE_LABEL_START 8 318 TO 4 318 LINE_LABEL_COUNT 5 318 LINE_LABEL_COUNT 8 319 IF 5 319 VLSTRING$ 4 319 LINE_LABELS$ 5 319 LINE_LABELS$ 5 319 LINE_LABEL_COUNTER 4 319 LINE_LABELS_NAME 5 319 LINE_LABELS_NAME 8 319 GOTO 3 319 331 8 320 NEXT 5 320 LINE_LABEL_COUNTER 5 322 LINE_LABEL_COUNT 5 322 LINE_LABEL_COUNT 5 322 NUM_1 8 323 IF 5 323 LINE_LABEL_COUNT 4 323 LINE_LABEL_MAX_COUNT 5 323 LINE_LABEL_MAX_COUNT 8 323 THEN 8 323 PRINT 5 323 FILE_L 8 323 STOP 5 325 LINE_LABELS$ 5 325 LINE_LABEL_COUNT 5 325 LINE_LABELS_NAME 5 325 VLSTRING$ 8 326 GOSUB 3 326 254 5 327 LINE_LABELS$ 5 327 LINE_LABEL_COUNT 4 327 LINE_LABELS_NUMBER 5 327 LINE_LABELS_NUMBER 5 327 LN_$ 8 328 IF 5 328 OUTPUT_XREF 5 328 TRUE 8 328 THEN 8 328 PRINT 4 328 FILE_X 5 328 FILE_X 5 328 UBN_XRF_LINE_LABEL 5 328 LN_$ 5 328 VLSTRING$ 8 329 GOTO 3 329 503 8 331 PRINT 5 331 FILE_L 5 331 LINE_NUMBER 5 331 VLSTRING$ 5 332 ERRORS 5 332 ERRORS 5 332 NUM_1 8 333 GOTO 3 333 503 8 335 GOSUB 3 335 254 4 336 OUTPUT_STRING$ 5 336 OUTPUT_STRING$ 5 336 LN_$ 4 337 CONSTANT_NAME$ 5 337 CONSTANT_NAME$ 4 338 CONSTANT_INDEX 5 338 CONSTANT_INDEX 5 338 NUM_0 4 339 EQUALS_FOUND 5 339 EQUALS_FOUND 5 339 FALSE 8 341 IF 5 341 IN_LINE_CH 5 341 NUM_0 8 341 GOTO 3 341 503 8 342 IF 5 342 IN_LINE_CH 5 342 ASC_A_U 8 342 AND 5 342 IN_LINE_CH 5 342 ASC_Z_U 8 342 GOTO 3 342 359 8 343 IF 5 343 IN_LINE_CH 5 343 ASC_A_L 8 343 AND 5 343 IN_LINE_CH 5 343 ASC_Z_L 8 343 GOTO 3 343 359 8 344 IF 5 344 IN_LINE_CH 5 344 ASC_0 8 344 AND 5 344 IN_LINE_CH 5 344 ASC_9 8 344 GOTO 3 344 359 8 345 IF 5 345 IN_LINE_CH 5 345 ASC_UNDERSCORE 8 345 GOTO 3 345 359 8 346 IF 5 346 IN_LINE_CH 5 346 ASC_DOUBLE_QUOTE 8 346 GOTO 3 346 447 8 347 IF 5 347 IN_LINE_CH 5 347 ASC_AMPERSAND 8 347 GOTO 3 347 462 8 349 IF 5 349 IN_LINE_CH 5 349 ASC_EQUALS 8 349 THEN 5 349 EQUALS_FOUND 5 349 TRUE 8 352 IF 5 352 IN_LINE_CH 5 352 ASC_BLANK 8 352 AND 5 352 LAST_CH 5 352 ASC_BLANK 8 352 GOTO 3 352 356 5 354 OUTPUT_STRING$ 5 354 OUTPUT_STRING$ 5 354 IN_LINE_CH$ 8 356 GOSUB 3 356 89 8 357 GOTO 3 357 341 5 359 VLSTRING_CAL_2CH_VARIABLE_TABLE_COUNTER 4 228 ILLEGAL_2CH_VARIABLE_TABLE_START 5 228 ILLEGAL_2CH_VARIABLE_TABLE_START 8 228 TO 4 228 ILLEGAL_2CH_VARIABLE_TABLE_COUNT 5 228 ILLEGAL_2CH_VARIABLE_TABLE_COUNT 8 229 IF 5 229 NEW_2CH_VARIABLE$ 4 229 ILLEGAL_2CH_VARIABLE_TABLE$ 5 229 ILLEGAL_2CH_VARIABLE_TABLE$ 5 229 ILLEGAL_2CH_VARIABLE_TABLE_COUNTER 8 229 GOTO 3 229 218 8 230 NEXT 5 230 ILLEGAL_2CH_VARIABLE_TABLE_COUNTER 8 232 RETURN 4 236 IS_NUMBER 5 236 IS_NUMBER 5 236 FALSE 4 237 NUMBER_LENGTH 5 237 NUMBER_LENGTH 8 237 LEN 5 237 VLSTRING$ 8 238 FOR 4 238 NUMBER_COUNTER 5 238 NUMBER_COUNTER 5 238 NUM_1 8 238 TO 5 238 NUMBER_LENGTH 4 240 NUMBER_CH$ 5 240 NUMBER_CH$ 8 240 MID$ 5 240 VLSTRING$ 5 240 NUMBER_COUNTER 5 240 NUM_1 4 241 NUMBER_CH 5 241 NUMBER_CH 8 241 ASC 5 241 NUMBER_CH$ 8 243 IF 5 243 NUMBER_CH 5 243 ASC_0 8 243 AND 5 243 NUMBER_CH 5 243 ASC_9 8 243 GOTO 3 243 249 8 244 IF 5 244 NUMBER_CH 5 244 ASC_PERIOD 8 244 OR 5 244 NUMBER_CH 5 244 ASC_PLUS 8 244 OR 5 244 NUMBER_CH 5 244 ASC_MINUS 8 244 GOTO 3 244 249 8 245 IF 5 245 NUMBER_CH 5 245 ASC_E_U 8 245 OR 5 245 NUMBER_CH 5 245 ASC_E_L 8 245 GOTO 3 245 249 8 247 RETURN 8 247 REM 8 249 NEXT 5 249 NUMBER_COUNTER 5 250 IS_NUMBER 5 250 TRUE 8 251 RETURN 4 254 LNR_$ 5 254 LNR_$ 8 254 STR$ 5 254 LINE_NUMBER 4 256 LN_LENGTH 5 256 LN_LENGTH 8 256 LEN 5 256 LNR_$ 5 256 NUM_1 4 257 LN_$ 5 257 LN_$ 8 257 MID$ 5 257 LNR_$ 5 257 NUM_2 5 257 LN_LENGTH 8 258 RETURN 8 260 LINE 8 260 INPUT 4 260 FILE_I 5 260 FILE_I 5 260 IN_LINE$ 5 262 IN_LINE_CHAR_COUNTER 5 262 NUM_0 5 263 LAST_CH 5 263 ASC_TILDE 4 264 DEF_CONSTANT 5 264 DEF_CONSTANT 5 264 FALSE 4 265 DATA_LINE 5 265 DATA_LINE 5 265 FALSE 4 266 VLSTRING_COUNT 5 266 VLSTRING_COUNT 5 266 NUM_0 8 268 IF 4 268 PASS 5 268 PASS 5 268 NUM_2 8 268 THEN 8 268 PRINT 5 268 LINE_NUMBER 4 269 I_EOF 5 269 I_EOF 8 269 EOF 5 269 FILE_I 8 271 IF 5 271 I_EOF 5 271 NUM_M1 8 271 GOTO 3 271 512 5 272 I_LINE_LENGTH 8 272 LEN 5 272 IN_LINE$ 249 245 IF BK = 69 OR BK = 101 GOTO 249 247 RETURN : REM 249 NEXT BI 250 BG = 1 251 RETURN 254 BL$ = STR$(AH) 256 BM = LEN(BL$) - 1 257 BN$ = MID$(BL$, 2, BM) 258 RETURN 260 LINE INPUT #BO, AF$ 262 AA = 0 263 AC = 64 264 BP = 0 265 BQ = 0 266 BR = 0 268 IF BS = 2 THEN PRINT AH ; 269 BT = EOF(BO) 271 IF BT = -1 GOTO 512 272 AB = LEN(AF$) 273 IF AB = 0 GOTO 304 282 GOSUB 89 283 IF AD = 35 GOTO 294 284 IF AD = 32 GOTO 306 285 IF AD = 39 GOTO 292 287 IF AD >= 65 AND AD <= 90 GOTO 308 288 IF AD >= 97 AND AD <= 122 GOTO 308 289 IF AD >= 48 AND AD <= 57 GOTO 308 290 IF AD = 95 GOTO 308 292 ON BS GOTO 503, 509 294 IF INSTR(2, AF$, "LIST_ON") <> 0 THEN BU = 1 295 IF INSTR(2, AF$, "LIST_OFF") <> 0 THEN BU = 0 297 IF INSTR(2, AF$, "XREF_ON") <> 0 THEN BV = 1 298 IF INSTR(2, AF$, "XREF_OFF") <> 0 THEN BV = 0 300 IF INSTR(2, AF$, "CONSTANT") <> 0 THEN BP = 1 : GOTO 306 304 ON BS GOTO 503, 509 306 ON BS GOTO 503, 335 308 GOSUB 114 309 BR = 1 311 IF AC <> 36 GOTO 316 312 PRINT #AG, "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; AI$ 313 PRINT "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; AI$ 314 BW = BW + 1 316 IF BS = 2 GOTO 335 318 FOR BX = BY TO BZ 319 IF AI$ = CA$(BX,CB) GOTO 331 320 NEXT BX 322 BZ = BZ + 1 323 IF BZ > CC THEN PRINT #AG, " LINE_LABEL_MAX_COUNT Exceeded" : STOP 325 CA$(BZ,CB) = AI$ 326 GOSUB 254 327 CA$(BZ,CD) = BN$ 328 IF BV = 1 THEN PRINT #CE, " "; 2; " "; BN$; " "; AI$ 329 GOTO 503 331 PRINT #AG, AH ; " ERROR - DUPLICATE LINE LABEL = " ; AI$ 332 AY = AY + 1 333 GOTO 503 335 GOSUB 254 336 CF$ = BN$ 337 CG$ = "" 338 CH = 0 339 CI = 0 341 IF AD < 0 GOTO 503 342 IF AD >= 65 AND AD <= 90 GOTO 359 343 IF AD >= 97 AND AD <= 122 GOTO 359 344 IF AD >= 48 AND AD <= 57 GOTO 359 345 IF AD = 95 GOTO 359 346 IF AD = 34 GOTO 447 347 IF AD = 38 GOTO 462 349 IF AD = 61 THEN CI = 1 352 IF AD = 32 AND AC = 32 GOTO 356 354 CF$ = CF$ + AE$ 356 GOSUB 89 357 GOTO 341 359 BR = BR + 1 360 GOSUB 114 362 GOSUB 236 363 IF BG = 1 GOTO 426 365 FOR CJ = CK TO CL 366 IF AI$ = CM$(CJ) GOTO 399 367 NEXT CJ 369 FOR BX = BY TO BZ 370 IF AI$ = CA$(BX,AR) GOTO 421 371 NEXT BX 373 FOR AN = AO TO AP 374 IF AI$ = AQ$(AN,AR) GOTO 441 375 NEXT AN 378 AP = AP + 1 379 IF AP > AT THEN PRINT #AG, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP 381 AQ$(AP,AR) = AI$ 382 AQ$(AP,AU) = "Pending" 383 IF BP <3 143 89 8 145 IF 5 145 IN_LINE_CH 5 145 NUM_0 8 145 GOTO 3 145 215 5 146 QSTRING$ 5 146 QSTRING$ 5 146 IN_LINE_CH$ 8 147 IF 5 147 IN_LINE_CH 5 147 ASC_BLANK 8 147 THEN 5 147 QSTRING_SKIP_VARIABLE 5 147 FALSE 8 148 IF 5 148 QSTRING_SKIP_VARIABLE 5 148 TRUE 8 148 GOTO 3 148 150 8 149 IF 5 149 IN_LINE_CH 5 149 ASC_X_U 8 149 OR 5 149 IN_LINE_CH 5 149 ASC_X_L 8 149 GOTO 3 149 155 8 150 IF 5 150 IN_LINE_CH 5 150 ASC_DOUBLE_QUOTE 8 150 GOTO 3 150 143 8 152 GOSUB 3 152 89 8 153 RETURN 8 155 GOSUB 3 155 89 8 156 IF 5 156 IN_LINE_CH 5 156 NUM_0 8 156 GOTO 3 156 215 8 157 IF 5 157 IN_LINE_CH 5 157 ASC_DOUBLE_QUOTE 8 157 GOTO 3 157 162 8 158 IF 5 158 IN_LINE_CH 5 158 ASC_A_U 8 158 AND 5 158 IN_LINE_CH 5 158 ASC_Z_U 8 158 GOTO 3 158 166 8 159 IF 5 159 IN_LINE_CH 5 159 ASC_A_L 8 159 AND 5 159 IN_LINE_CH 5 159 ASC_Z_L 8 159 GOTO 3 159 166 8 160 IF 5 160 IN_LINE_CH 5 160 ASC_UNDERSCORE 8 160 GOTO 3 160 166 8 161 GOTO 3 161 143 5 162 QSTRING$ 5 162 QSTRING$ 5 162 IN_LINE_CH$ 8 163 GOSUB 3 163 89 8 164 RETURN 4 166 QSTRING_CHAR_COUNTER_SAVE 5 166 QSTRING_CHAR_COUNTER_SAVE 5 166 IN_LINE_CHAR_COUNTER 4 167 QSTRING_LAST_CHAR_SAVE$ 5 167 QSTRING_LAST_CHAR_SAVE$ 5 167 IN_LINE_CH$ 8 168 GOSUB 3 168 114 8 170 IF 5 170 LAST_CH 5 170 ASC_DOLLAR 8 170 GOTO 3 170 204 8 171 FOR 4 171 VARIABLE_NAMES_COUNTER 5 171 VARIABLE_NAMES_COUNTER 4 171 VARIABLE_NAMES_START 5 171 VARIABLE_NAMES_START 8 171 TO 4 171 VARIABLE_NAMES_COUNT 5 171 VARIABLE_NAMES_COUNT 8 172 IF 5 172 VLSTRING$ 4 172 VARIABLE_NAMES$ 5 172 VARIABLE_NAMES$ 5 172 VARIABLE_NAMES_COUNTER 4 172 VARIABLE_NAMES_NAME 5 172 VARIABLE_NAMES_NAME 8 172 GOTO 3 172 188 8 173 NEXT 5 173 VARIABLE_NAMES_COUNTER 5 177 VARIABLE_NAMES_COUNT 5 177 VARIABLE_NAMES_COUNT 5 177 NUM_1 8 178 IF 5 178 VARIABLE_NAMES_COUNT 4 178 VARIABLE_NAMES_MAX_COUNT 5 178 VARIABLE_NAMES_MAX_COUNT 8 178 THEN 8 178 PRINT 5 178 FILE_L 8 178 STOP 5 180 VARIABLE_NAMES$ 5 180 VARIABLE_NAMES_COUNT 5 180 VARIABLE_NAMES_NAME 5 180 VLSTRING$ 5 181 VARIABLE_NAMES$ 5 181 VARIABLE_NAMES_COUNT 4 181 VARIABLE_NAMES_2CH 5 181 VARIABLE_NAMES_2CH 8 183 GOSUB 3 183 218 5 185 VARIABLE_NAMES$ 5 185 VARIABLE_NAMES_COUNT 5 185 VARIABLE_NAMES_2CH 4 185 NEW_2CH_VARIABLE$ 5 185 NEW_2CH_VARIABLE$ 5 186 VARIABLE_NAMES_COUNTER 5 186 VARIABLE_NAMES_COUNT 8 188 IF 8 188 ASC 5 188 VARIABLE_NAMES$ 5 188 VARIABLE_NAMES_COUNTER 5 188 VARIABLE_NAMES_2CH 5 188 ASC_DOUBLE_QUOTE 8 188 GOTO 3 188 198 5 192 QSTRING$ 5 192 QSTRING$ 5 192 VARIABLE_NAMES$ 5 192 VARIABLE_NAMES_COUNTER 5 192 VARIABLE_NAMES_2CH 8 193 GOTO 3 193 143 4 198 QSTRING_LENGTH 5 198 QSTRING_LENGTH 8 198 LEN 5 198 QSTRING$ 5 198 NUM_1 5 199 QSTRING$ 8 199 LEFT$ 5 199 QSTRING$ 5 199 QSTRING_LENGTH 4 200 QSTRING_CONSTANT_LENGTH 5 200 QSTRING_CONSTANT_LENGTH 8 200 LEN 5 200 VARIABLE_NAMES$ 5 200 VARIABLE_NAMES_COUNTER 5 200 VARIABLE_NAMES_2CH 5 200 NUM_2 5 201 QSTRING$ 5 201 QSTRING$ 8 201 MID$ 5 201 VARIABLE_NAMES$ 5 201 VARIABLE_NAMES_COUNTER 5 201 VARIABLE_NAMES_2CH 5 201 NUM_2 5 201 QSTRING_CONSTANT_LENGTH 8 202 GOTO 3 202 143 5 204 IN_LINE_CHAR_COUNTER 5 204 QSTRING_CHAR_COUNTER_SAVE 5 205 IN_LINE_CH$ 5 205 QSTRING_LAST_CHAR_SAVE$ 5 206 QSTRING_SKIP_VARIABLE 5 206 TRUE 5 207 QSTRING$ 5 207 QSTRING$ 5 207 IN_LINE_CH$ 8 210 GOTO 3 210 143 8 212 GOSUB 3 212 89 8 213 RETURN 8 215 PRINT 5 215 FILE_L 5 215 LINE_NUMBER 5 215 QSTRING$ 4 216 ERRORS 5 216 ERRORS 5 216 ERRORS 5 216 NUM_1 8 217 RETURN 5 218 NEW_2CH_VARIABLE$ 8 218 CHR$ 4 218 HIGH_2CH_VARIABLE 5 218 HIGH_2CH_VARIABLE 8 218 CHR$ 4 218 LOW_2CH_VARIABLE 5 218 LOW_2CH_VARIABLE 5 220 LOW_2CH_VARIABLE 5 220 LOW_2CH_VARIABLE 5 220 NUM_1 8 221 IF 5 221 LOW_2CH_VARIABLE 5 221 ASC_Z_U 8 221 GOTO 3 221 228 5 222 LOW_2CH_VARIABLE 5 222 ASC_A_U 5 224 HIGH_2CH_VARIABLE 5 224 HIGH_2CH_VARIABLE 5 224 NUM_1 8 225 IF 5 225 HIGH_2CH_VARIABLE 5 225 ASC_Z_U 8 225 GOTO 3 225 228 5 226 HIGH_2CH_VARIABLE 5 226 ASC_A_U 8 226 REM 8 228 FOR 4 228 ILLEGAL_2CH_VARIABLE_TABLE_COUNTER 5 228 ILLEGN_MEM_PCLEAR 8 25 CONSTANT 4 25 UBN_MEM_FILES_COUNT 8 26 CONSTANT 4 26 UBN_MEM_FILES_SPACE 8 27 CONSTANT 4 27 UBN_MEM_CLEAR 8 29 CONSTANT 4 29 UBN_MEM_LINE_LABEL_MAX_COUNT 8 30 CONSTANT 4 30 UBN_MEM_VARIABLE_NAMES_MAX_COUNT 8 31 CONSTANT 4 31 UBN_MEM_KEYWORD_TABLE_MAX_COUNT 8 32 CONSTANT 4 32 UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT 8 34 CONSTANT 4 34 ASC_TAB 8 34 REM 8 36 CONSTANT 4 36 ASC_BLANK 8 36 REM 8 38 CONSTANT 4 38 ASC_DOUBLE_QUOTE 8 38 REM 8 40 CONSTANT 4 40 ASC_POUND 8 40 REM 8 41 CONSTANT 4 41 ASC_DOLLAR 8 41 REM 8 42 CONSTANT 4 42 ASC_PERCENT 8 42 REM 8 43 CONSTANT 4 43 ASC_AMPERSAND 8 43 REM 8 44 CONSTANT 4 44 ASC_SINGLE_QUOTE 8 44 REM 8 46 CONSTANT 4 46 ASC_PLUS 8 46 REM 8 47 CONSTANT 4 47 ASC_MINUS 8 47 REM 8 48 CONSTANT 4 48 ASC_PERIOD 8 48 REM 8 50 CONSTANT 4 50 ASC_0 8 50 REM 8 51 CONSTANT 4 51 ASC_7 8 51 REM 8 52 CONSTANT 4 52 ASC_8 8 52 REM 8 53 CONSTANT 4 53 ASC_9 8 53 REM 8 55 CONSTANT 4 55 ASC_COLON 8 55 REM 8 56 CONSTANT 4 56 ASC_EQUALS 8 56 REM 8 57 CONSTANT 4 57 ASC_TILDE 8 57 REM 8 59 CONSTANT 4 59 ASC_A_U 8 59 REM 8 60 CONSTANT 4 60 ASC_E_U 8 60 REM 8 61 CONSTANT 4 61 ASC_F_U 8 61 REM 8 62 CONSTANT 4 62 ASC_H_U 8 62 REM 8 63 CONSTANT 4 63 ASC_O_U 8 63 REM 8 64 CONSTANT 4 64 ASC_X_U 8 64 REM 8 65 CONSTANT 4 65 ASC_Z_U 8 65 REM 8 67 CONSTANT 4 67 ASC_UNDERSCORE 8 67 REM 8 69 CONSTANT 4 69 ASC_A_L 8 69 REM 8 70 CONSTANT 4 70 ASC_E_L 8 70 REM 8 71 CONSTANT 4 71 ASC_F_L 8 71 REM 8 72 CONSTANT 4 72 ASC_H_L 8 72 REM 8 73 CONSTANT 4 73 ASC_O_L 8 73 REM 8 74 CONSTANT 4 74 ASC_X_L 8 74 REM 8 75 CONSTANT 4 75 ASC_Z_L 8 75 REM 8 77 CONSTANT 4 77 UBN_XRF_TITLE 8 78 CONSTANT 4 78 UBN_XRF_LINE_LABEL 8 79 CONSTANT 4 79 UBN_XRF_LINE_REFERENCE 8 80 CONSTANT 4 80 UBN_XRF_VARIABLE 8 81 CONSTANT 4 81 UBN_XRF_VARIABLE_REFERENCE 8 84 CONSTANT 4 84 UBN_XRF_KEYWORD_REFERENCE 8 87 GOTO 3 87 566 4 89 IN_LINE_CHAR_COUNTER 5 89 IN_LINE_CHAR_COUNTER 5 89 IN_LINE_CHAR_COUNTER 5 89 NUM_1 8 90 IF 5 90 IN_LINE_CHAR_COUNTER 4 90 I_LINE_LENGTH 5 90 I_LINE_LENGTH 8 90 GOTO 3 90 106 4 92 LAST_CH 5 92 LAST_CH 4 92 IN_LINE_CH 5 92 IN_LINE_CH 4 93 IN_LINE_CH$ 5 93 IN_LINE_CH$ 8 93 MID$ 4 93 IN_LINE$ 5 93 IN_LINE$ 5 93 IN_LINE_CHAR_COUNTER 5 93 NUM_1 5 94 IN_LINE_CH 8 94 ASC 5 94 IN_LINE_CH$ 8 95 IF 5 95 IN_LINE_CH 5 95 ASC_BLANK 8 95 THEN 8 95 RETURN 8 96 IF 5 96 IN_LINE_CH 5 96 ASC_TAB 8 96 GOTO 3 96 102 8 98 PRINT 4 98 FILE_L 5 98 FILE_L 4 98 LINE_NUMBER 5 98 LINE_NUMBER 5 98 IN_LINE$ 8 99 PRINT 5 99 FILE_L 5 99 LINE_NUMBER 5 99 IN_LINE_CH 5 99 IN_LINE_CHAR_COUNTER 8 100 RETURN 5 102 IN_LINE_CH$ 8 102 CHR$ 5 102 ASC_BLANK 5 103 IN_LINE_CH 5 103 ASC_BLANK 8 104 RETURN 5 106 IN_LINE_CH 5 106 NUM_M1 5 107 IN_LINE_CH$ 8 107 CHR$ 5 107 ASC_TILDE 8 108 RETURN 4 114 VLSTRING$ 5 114 VLSTRING$ 5 114 IN_LINE_CH$ 8 115 GOSUB 3 115 89 8 116 IF 5 116 IN_LINE_CH 5 116 NUM_0 8 116 THEN 8 116 RETURN 8 117 IF 5 117 IN_LINE_CH 5 117 ASC_A_U 8 117 AND 5 117 IN_LINE_CH 5 117 ASC_Z_U 8 117 GOTO 3 117 128 8 118 IF 5 118 IN_LINE_CH 5 118 ASC_A_L 8 118 AND 5 118 IN_LINE_CH 5 118 ASC_Z_L 8 118 GOTO 3 118 126 8 119 IF 5 119 IN_LINE_CH 5 119 ASC_0 8 119 AND 5 119 IN_LINE_CH 5 119 ASC_9 8 119 GOTO 3 119 129 8 120 IF 5 120 IN_LINE_CH 5 120 ASC_UNDERSCORE 8 120 GOTO 3 120 130 8 121 IF 5 121 IN_LINE_CH 5 121 ASC_TILDE 8 121 GOTO 3 121 130 8 122 IF 5 122 IN_LINE_CH 5 122 ASC_DOLLAR 8 122 GOTO 3 122 131 8 124 RETURN 5 126 IN_LINE_CH 5 126 IN_LINE_CH 5 126 ASC_A_L 5 126 ASC_A_U 5 127 IN_LINE_CH$ 8 127 CHR$ 5 127 IN_LINE_CH 8 128 REM 8 129 REM 8 130 REM 8 131 REM 5 132 VLSTRING$ 5 132 VLSTRING$ 5 132 IN_LINE_CH$ 8 134 IF 5 134 IN_LINE_CH 5 134 ASC_DOLLAR 8 134 THEN 5 134 LAST_CH 5 134 IN_LINE_CH 8 134 GOSUB 3 134 89 8 134 RETURN 8 135 GOTO 3 135 115 4 141 QSTRING$ 5 141 QSTRING$ 5 141 IN_LINE_CH$ 4 142 QSTRING_SKIP_VARIABLE 5 142 QSTRING_SKIP_VARIABLE 5 142 FALSE 8 143 GOSUB 87 GOTO 566 89 AA = AA + 1 90 IF AA > AB GOTO 106 92 AC = AD 93 AE$ = MID$(AF$, AA, 1) 94 AD = ASC(AE$) 95 IF AD >= 32 THEN RETURN 96 IF AD = 09 GOTO 102 98 PRINT #AG, AH; " " ; AF$ 99 PRINT #AG, AH; " Control Character "; AD; " Found in Input Line at "; AA 100 RETURN 102 AE$ = CHR$(32) 103 AD = 32 104 RETURN 106 AD = -1 107 AE$ = CHR$(64) 108 RETURN 114 AI$ = AE$ 115 GOSUB 89 116 IF AD < 0 THEN RETURN 117 IF AD >= 65 AND AD <= 90 GOTO 128 118 IF AD >= 97 AND AD <= 122 GOTO 126 119 IF AD >= 48 AND AD <= 57 GOTO 129 120 IF AD = 95 GOTO 130 121 IF AD = 64 GOTO 130 122 IF AD = 36 GOTO 131 124 RETURN 126 AD = AD - ( 97 - 65 ) 127 AE$ = CHR$(AD) 128 REM 129 REM 130 REM 131 REM 132 AI$ = AI$ + AE$ 134 IF AD = 36 THEN AC = AD : GOSUB 89 : RETURN 135 GOTO 115 141 AJ$ = AE$ 142 AK = 0 143 GOSUB 89 145 IF AD <= 0 GOTO 215 146 AJ$ = AJ$ + AE$ 147 IF AD = 32 THEN AK = 0 148 IF AK = 1 GOTO 150 149 IF AD = 88 OR AD = 120 GOTO 155 150 IF AD <> 34 GOTO 143 152 GOSUB 89 153 RETURN 155 GOSUB 89 156 IF AD <= 0 GOTO 215 157 IF AD = 34 GOTO 162 158 IF AD >= 65 AND AD <= 90 GOTO 166 159 IF AD >= 97 AND AD <= 122 GOTO 166 160 IF AD = 95 GOTO 166 161 GOTO 143 162 AJ$ = AJ$ + AE$ 163 GOSUB 89 164 RETURN 166 AL = AA 167 AM$ = AE$ 168 GOSUB 114 170 IF AC <> 36 GOTO 204 171 FOR AN = AO TO AP 172 IF AI$ = AQ$(AN,AR) GOTO 188 173 NEXT AN 177 AP = AP + 1 178 IF AP > AT THEN PRINT #AG, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP 180 AQ$(AP,AR) = AI$ 181 AQ$(AP,AU) = "Pending" 183 GOSUB 218 185 AQ$(AP,AU) = AV$ + "$" 186 AN = AP 188 IF ASC(AQ$(AN,AU)) = 34 GOTO 198 192 AJ$ = AJ$ + AQ$(AN,AU) 193 GOTO 143 198 AW = LEN(AJ$) - 1 199 AJ$ = LEFT$(AJ$,AW) 200 AX = LEN(AQ$(AN,AU)) - 2 201 AJ$ = AJ$ + MID$(AQ$(AN,AU),2,AX) 202 GOTO 143 204 AA = AL 205 AE$ = AM$ 206 AK = 1 207 AJ$ = AJ$ + AE$ 210 GOTO 143 212 GOSUB 89 213 RETURN 215 PRINT #AG, AH ; " ERROR - Missing end of Quoted String " ; AJ$ 216 AY = AY + 1 217 RETURN 218 AV$ = CHR$(AZ) + CHR$(BA) 220 BA = BA + 1 221 IF BA <= 90 GOTO 228 222 BA = 65 224 AZ = AZ + 1 225 IF AZ <= 90 GOTO 228 226 AZ = 65 : REM 228 FOR BB = BC TO BD 229 IF AV$ = BE$(BB) GOTO 218 230 NEXT BB 232 RETURN 236 BG = 0 237 BH = LEN(AI$) 238 FOR BI = 1 TO BH 240 BJ$ = MID$(AI$, BI, 1) 241 BK = ASC(BJ$) 243 IF BK >= 48 AND BK <= 57 GOTO 249 244 IF BK = 46 OR BK = 43 OR BK = 45 GOTO Urbane 1.060202 RC0 - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor. MEM = 8218 1 # LIST_ON : REM CHANGE TO COMMENT LINE IF NOT WANTED 2 # XREF_ON : REM CHANGE TO COMMENT LINE IF NOT WANTED 3 # CONSTANT UBNVERSION$ = "1.060202 RC0" 4 # CONSTANT UBN_TITLE$ = "Urbane XUBNVERSION$ - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor." 5 ' Original Left Hello A. Nani Mouse Inx. 6 7 # CONSTANT IN_FILE$ = "UBN_IN.TXT" 8 # CONSTANT OUT_FILE$ = "UBN_OUT.TXT" 9 # CONSTANT LST_FILE$ = "UBN_LST.TXT" 10 # CONSTANT XRF_FILE$ = "UBN_XRF.TXT" 11 12 # CONSTANT NUM_M1 = -1 13 # CONSTANT NUM_0 = 0 14 # CONSTANT NUM_1 = 1 15 # CONSTANT NUM_2 = 2 16 # CONSTANT NUM_3 = 3 17 # CONSTANT NUM_4 = 4 18 # CONSTANT TRUE = 1 19 # CONSTANT FALSE = 0 20 21 # CONSTANT UBN_XREF_LIST_INITIAL = 0 : REM ON = 1, OFF = 0 22 # CONSTANT UBN_LIST_LIST_INITIAL = 0 : REM ON = 1, OFF = 0 23 24 # CONSTANT UBN_MEM_PCLEAR = 1 25 # CONSTANT UBN_MEM_FILES_COUNT = 4 26 # CONSTANT UBN_MEM_FILES_SPACE = 100 27 # CONSTANT UBN_MEM_CLEAR = 8500 28 29 # CONSTANT UBN_MEM_LINE_LABEL_MAX_COUNT = 100 30 # CONSTANT UBN_MEM_VARIABLE_NAMES_MAX_COUNT = 150 31 # CONSTANT UBN_MEM_KEYWORD_TABLE_MAX_COUNT = 200 32 # CONSTANT UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT = 10 33 34 # CONSTANT ASC_TAB = 09 : REM TAB 35 36 # CONSTANT ASC_BLANK = 32 : REM ASC(" ") 37 38 # CONSTANT ASC_DOUBLE_QUOTE = 34 : REM ASC(""") 39 ' CONSTANT ASC_DOUBLE_QUOTE$ is Defined as a program value, not a constant! 40 # CONSTANT ASC_POUND = 35 ╞                  └#└$└             345╚              UBN_IN TXT %                UBN_OUT TXT  UBN_LST TXT !UBN_XRF TXT "URBANE BAS2B                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 1 0 Urbane 1.060202 RC0 - Tandy Color Computer 3 Disk Extended Color Basic Preprocessor. 2 89 GET_IN_LINE_CHAR 2 102 SUBSTUTE_SPACE_FOR_TAB 2 106 END_IN_LINE 2 114 GET_VLSTRING 2 115 NEXT_VLSTRING_CH 2 126 VLSTRING_ADD_LOWER_ALPHA 2 128 VLSTRING_ADD_UPPER_ALPHA 2 129 VLSTRING_ADD_NUMBER 2 130 VLSTRING_ADD_SPECIAL 2 131 VLSTRING_ADD_DOLLAR 2 141 GET_QSTRING 2 143 MORE_QSTRING 2 150 SKIP_VARIABLE 2 155 GET_QSTRING_VARIABLE 2 162 NO_QSVARIABLE 2 166 GET_QSTRING_VAR 2 188 HAVE_QSTRING_VARIABLE 2 198 ADD_QSTRING_CONSTANT 2 204 NOT_QSTRING_VAR 2 215 BAD_QSTRING 2 218 GET_NEW_2CH_VARIABLE 2 228 CHECK_NEW_2CH_VARIABLE 2 236 CHECK_IF_NUMBER 2 249 MORE_NUMBERS 2 254 PREPARE_LINE_NUMBER 2 260 NEXT_LINE 2 282 COLUMN_ONE 2 292 COMMENT 2 294 URBANE_COMMAND 2 304 BLANK_LINE 2 306 NO_LINE_LABLE 2 308 LINE_LABEL 2 316 LINE_LABEL_GOOD 2 331 DUP_LINE_LABEL 2 335 PARSE_LINE 2 341 PARSE_CONTINUE 2 356 PARSE_GET_NEXT_CH 2 359 LABEL_OR_VARIABLE 2 390 GET_NEW_2CH 2 399 HAVE_KEYWORD 2 406 HAVE_DATA_LINE 2 413 HAVE_REM 2 418 HAVE_LET 2 421 HAVE_LINE_LABEL 2 426 HAVE_NUMBER 2 438 ADD_NUMBER 2 441 HAVE_VARIABLE 2 447 HAVE_QUOTED_STRING 2 457 ADD_QUOTED 2 462 HEX_OR_OCTAL 2 473 MORE_HEX_OR_OCTAL 2 484 HOSTRING_ADD_LOWER_HEX 2 487 HOSTRING_ADD_UPPER_HEX 2 495 HOSTRING_ADD_OCTAL 2 498 BAD_HEX_OR_OCTAL 2 503 OUTPUT_LINE 2 509 PASS2_CONTINUE 2 512 I_FILE_END 2 522 LOAD_KEYWORDS 2 527 LOOP_KEYWORDS 2 533 END_OF_KEYWORDS 2 538 LOOP_ILLEGAL_2CH_VARIABLES 2 544 END_OF_ILLEGAL_2CH_VARIABLES 2 566 UBN_START 2 631 ALL_DONE 8 3 CONSTANT 4 3 UBNVERSION$ 8 4 CONSTANT 4 4 UBN_TITLE$ 8 7 CONSTANT 4 7 IN_FILE$ 8 8 CONSTANT 4 8 OUT_FILE$ 8 9 CONSTANT 4 9 LST_FILE$ 8 10 CONSTANT 4 10 XRF_FILE$ 8 12 CONSTANT 4 12 NUM_M1 8 13 CONSTANT 4 13 NUM_0 8 14 CONSTANT 4 14 NUM_1 8 15 CONSTANT 4 15 NUM_2 8 16 CONSTANT 4 16 NUM_3 8 17 CONSTANT 4 17 NUM_4 8 18 CONSTANT 4 18 TRUE 8 19 CONSTANT 4 19 FALSE 8 21 CONSTANT 4 21 UBN_XREF_LIST_INITIAL 8 21 REM 8 22 CONSTANT 4 22 UBN_LIST_LIST_INITIAL 8 22 REM 8 24 CONSTANT 4 24 UB : REM ASC("#") 41 # CONSTANT ASC_DOLLAR = 36 : REM ASC("$") 42 # CONSTANT ASC_PERCENT = 37 : REM ASC("%") 43 # CONSTANT ASC_AMPERSAND = 38 : REM ASC("&") 44 # CONSTANT ASC_SINGLE_QUOTE = 39 : REM ASC("'") 45 46 # CONSTANT ASC_PLUS = 43 : REM ASC("+") 47 # CONSTANT ASC_MINUS = 45 : REM ASC("-") 48 # CONSTANT ASC_PERIOD = 46 : REM ASC(".") 49 50 # CONSTANT ASC_0 = 48 : REM ASC("0") 51 # CONSTANT ASC_7 = 55 : REM ASC("7") 52 # CONSTANT ASC_8 = 56 : REM ASC("8") 53 # CONSTANT ASC_9 = 57 : REM ASC("9") 54 55 # CONSTANT ASC_COLON = 58 : REM ASC(":") 56 # CONSTANT ASC_EQUALS = 61 : REM ASC("=") 57 # CONSTANT ASC_TILDE = 64 : REM ASC("") 58 59 # CONSTANT ASC_A_U = 65 : REM ASC("A") 60 # CONSTANT ASC_E_U = 69 : REM ASC("E") 61 # CONSTANT ASC_F_U = 70 : REM ASC("F") 62 # CONSTANT ASC_H_U = 72 : REM ASC("H") 63 # CONSTANT ASC_O_U = 79 : REM ASC("O") 64 # CONSTANT ASC_X_U = 88 : REM ASC("X") 65 # CONSTANT ASC_Z_U = 90 : REM ASC("Z") 66 67 # CONSTANT ASC_UNDERSCORE = 95 : REM ASC("_") 68 69 # CONSTANT ASC_a_L = 97 : REM ASC("a") 70 # CONSTANT ASC_e_L = 101 : REM ASC("e") 71 # CONSTANT ASC_f_L = 102 : REM ASC("f") 72 # CONSTANT ASC_h_L = 104 : REM ASC("h") 73 # CONSTANT ASC_o_L = 111 : REM ASC("o") 74 # CONSTANT ASC_x_L = 120 : REM ASC("x") 75 # CONSTANT ASC_z_L = 122 : REM ASC("z") 76 77 # CONSTANT UBN_XRF_TITLE = 1 78 # CONSTANT UBN_XRF_LINE_LABEL = 2 79 # CONSTANT UBN_XRF_LINE_REFERENCE = 3 80 # CONSTANT UBN_XRF_VARIABLE = 4 81 # CONSTANT UBN_XRF_VARIABLE_REFERENCE = 5 82 ' CONSTANT UBN_XRF_CONSTANT = 6 83 ' CONSTANT UBN_XRF_CONSTANT_REFERENCE = 7 84 # CONSTANT UBN_XRF_KEYWORD_REFERENCE = 8 85 86 ' Start of Executation 87 GOTO UBN_START 88 89 GET_IN_LINE_CHAR IN_LINE_CHAR_COUNTER = IN_LINE_CHAR_COUNTER + NUM_1 90 IF IN_LINE_CHAR_COUNTER > I_LINE_LENGTH GOTO END_IN_LINE 91 92 LAST_CH = IN_LINE_CH 93 IN_LINE_CH$ = MID$(IN_LINE$, IN_LINE_CHAR_COUNTER, NUM_1) 94 IN_LINE_CH = ASC(IN_LINE_CH$) 95 IF IN_LINE_CH >= ASC_BLANK THEN RETURN 96 IF IN_LINE_CH = ASC_TAB GOTO SUBSTUTE_SPACE_FOR_TAB 97 98 PRINT #FILE_L, LINE_NUMBER; " " ; IN_LINE$ 99 PRINT #FILE_L, LINE_NUMBER; " Control Character "; IN_LINE_CH; " Found in Input Line at "; IN_LINE_CHAR_COUNTER 100 RETURN 101 102 SUBSTUTE_SPACE_FOR_TAB IN_LINE_CH$ = CHR$(ASC_BLANK) 103 IN_LINE_CH = ASC_BLANK 104 RETURN 105 106 END_IN_LINE IN_LINE_CH = NUM_M1 107 IN_LINE_CH$ = CHR$(ASC_TILDE) 108 RETURN 109 110 ''' 111 ' On Entry, first character of label or variable is in "IN_LINE_CH$" and "IN_LINE_CH" 112 ' On Exit, "IN_LINE_CH$" and "IN_LINE_CH" have terminating character (next character not part of VLString). 113 114 GET_VLSTRING VLSTRING$ = IN_LINE_CH$ 115 NEXT_VLSTRING_CH GOSUB GET_IN_LINE_CHAR 116 IF IN_LINE_CH < NUM_0 THEN RETURN 117 IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO VLSTRING_ADD_UPPER_ALPHA 118 IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO VLSTRING_ADD_LOWER_ALPHA 119 IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_9 GOTO VLSTRING_ADD_NUMBER 120 IF IN_LINE_CH = ASC_UNDERSCORE GOTO VLSTRING_ADD_SPECIAL 121 IF IN_LINE_CH = ASC_TILDE GOTO VLSTRING_ADD_SPECIAL 122 IF IN_LINE_CH = ASC_DOLLAR GOTO VLSTRING_ADD_DOLLAR 123 ' REM Character Found that cannot be in Variable or line Label 124 RETURN 125 126 VLSTRING_ADD_LOWER_ALPHA IN_LINE_CH = IN_LINE_CH - ( ASC_a_L - ASC_A_U ) 127 IN_LINE_CH$ = CHR$(IN_LINE_CH) 128 VLSTRING_ADD_UPPER_ALPHA REM 129 VLSTRING_ADD_NUMBER REM 130 VLSTRING_ADD_SPECIAL REM 131 VLSTRING_ADD_DOLLAR REM 132 VLSTRING$ = VLSTRING$ + IN_LINE_CH$ 133 ' If an "ASC_DOLLAR" is found, declare label or variable end found 134 IF IN_LINE_CH = ASC_DOLLAR THEN LAST_CH = IN_LINE_CH : GOSUB GET_IN_LINE_CHAR : RETURN 135 GOTO NEXT_VLSTRING_CH 136 137 ''' 138 ' On Entry, "ASC_DOUBLE_QUOTE" is in "IN_LINE_CH$" and "IN_LINE_CH" 139 ' On Exit, "IN_LINE_CH$" and "IN_LINE_CH" have terminating character or next character. 140 141 GET_QSTRING QSTRING$ = IN_LINE_CH$ 142 QSTRING_SKIP_VARIABLE = FALSE 143 MORE_QSTRING GOSUB GET_IN_LINE_CHAR 144 145 IF IN_LINE_CH <= NUM_0 GOTO BAD_QSTRING 146 QSTRING$ = QSTRING$ + IN_LINE_CH$ 147 IF IN_LINE_CH = ASC_BLANK THEN QSTRING_SKIP_VARIABLE = FALSE 148 IF QSTRING_SKIP_VARIABLE = TRUE GOTO SKIP_VARIABLE 149 IF IN_LINE_CH = ASC_X_U OR IN_LINE_CH = ASC_x_L GOTO GET_QSTRING_VARIABLE 150 SKIP_VARIABLE IF IN_LINE_CH <> ASC_DOUBLE_QUOTE GOTO MORE_QSTRING 151 152 GOSUB GET_IN_LINE_CHAR 153 RETURN 154 155 GET_QSTRING_VARIABLE GOSUB GET_IN_LINE_CHAR 156 IF IN_LINE_CH <= NUM_0 GOTO BAD_QSTRING 157 IF IN_LINE_CH = ASC_DOUBLE_QUOTE GOTO NO_QSVARIABLE 158 IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO GET_QSTRING_VAR 159 IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO GET_QSTRING_VAR 160 IF IN_LINE_CH = ASC_UNDERSCORE GOTO GET_QSTRING_VAR 161 GOTO MORE_QSTRING 162 NO_QSVARIABLE QSTRING$ = QSTRING$ + IN_LINE_CH$ 163 GOSUB GET_IN_LINE_CHAR 164 RETURN 165 166 GET_QSTRING_VAR QSTRING_CHAR_COUNTER_SAVE = IN_LINE_CHAR_COUNTER 167 QSTRING_LAST_CHAR_SAVE$ = IN_LINE_CH$ 168 GOSUB GET_VLSTRING 169 170 IF LAST_CH <> ASC_DOLLAR GOTO NOT_QSTRING_VAR 171 FOR VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_START TO VARIABLE_NAMES_COUNT 172 IF VLSTRING$ = VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_NAME) GOTO HAVE_QSTRING_VARIABLE 173 NEXT VARIABLE_NAMES_COUNTER 174 175 ' Have New Variable 176 177 VARIABLE_NAMES_COUNT = VARIABLE_NAMES_COUNT + NUM_1 178 IF VARIABLE_NAMES_COUNT > VARIABLE_NAMES_MAX_COUNT THEN PRINT #FILE_L, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP 179 180 VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_NAME) = VLSTRING$ 181 VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = "Pending" 182 183 GOSUB GET_NEW_2CH_VARIABLE 184 185 VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = NEW_2CH_VARIABLE$ + "$" 186 VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_COUNT 187 188 HAVE_QSTRING_VARIABLE IF ASC(VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH)) = ASC_DOUBLE_QUOTE GOTO ADD_QSTRING_CONSTANT 189 190 ' Add existing 2ch variable to QUOTE string 191 192 QSTRING$ = QSTRING$ + VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH) 193 GOTO MORE_QSTRING 194 195 ' Do Not Include the 'X' 196 ' Add Constant Without Leading and Trailing Quotes 197 198 ADD_QSTRING_CONSTANT QSTRING_LENGTH = LEN(QSTRING$) - NUM_1 199 QSTRING$ = LEFT$(QSTRING$,QSTRING_LENGTH) 200 QSTRING_CONSTANT_LENGTH = LEN(VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH)) - NUM_2 201 QSTRING$ = QSTRING$ + MID$(VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH),NUM_2,QSTRING_CONSTANT_LENGTH) 202 GOTO MORE_QSTRING 203 204 NOT_QSTRING_VAR IN_LINE_CHAR_COUNTER = QSTRING_CHAR_COUNTER_SAVE 205 IN_LINE_CH$ = QSTRING_LAST_CHAR_SAVE$ 206 QSTRING_SKIP_VARIABLE = TRUE 207 QSTRING$ = QSTRING$ + IN_LINE_CH$ 208 ' PRINT #FILE_L, LINE_NUMBER ; " QSTRING$ = "; QSTRING$; ", IN_LINE_CH = "; IN_LINE_CH 209 ' PRINT #FILE_L, LINE_NUMBER ; " VLSTRING$ = "; VLSTRING$ 210 GOTO MORE_QSTRING 211 212 GOSUB GET_IN_LINE_CHAR 213 RETURN 214 215 BAD_QSTRING PRINT #FILE_L, LINE_NUMBER ; " ERROR - Missing end of Quoted String " ; QSTRING$ 216 ERRORS = ERRORS + NUM_1 217 RETURN 218 GET_NEW_2CH_VARIABLE NEW_2CH_VARIABLE$ = CHR$(HIGH_2CH_VARIABLE) + CHR$(LOW_2CH_VARIABLE) 219 220 LOW_2CH_VARIABLE = LOW_2CH_VARIABLE + NUM_1 221 IF LOW_2CH_VARIABLE <= ASC_Z_U GOTO CHECK_NEW_2CH_VARIABLE 222 LOW_2CH_VARIABLE = ASC_A_U 223 224 HIGH_2CH_VARIABLE = HIGH_2CH_VARIABLE + NUM_1 225 IF HIGH_2CH_VARIABLE <= ASC_Z_U GOTO CHECK_NEW_2CH_VARIABLE 226 HIGH_2CH_VARIABLE = ASC_A_U : REM Ignore Possibility of 'ZZ' being exceeded FOR NOW (676 Variables) 227 228 CHECK_NEW_2CH_VARIABLE FOR ILLEGAL_2CH_VARIABLE_TABLE_COUNTER = ILLEGAL_2CH_VARIABLE_TABLE_START TO ILLEGAL_2CH_VARIABLE_TABLE_COUNT 229 IF NEW_2CH_VARIABLE$ = ILLEGAL_2CH_VARIABLE_TABLE$(ILLEGAL_2CH_VARIABLE_TABLE_COUNTER) GOTO GET_NEW_2CH_VARIABLE 230 NEXT ILLEGAL_2CH_VARIABLE_TABLE_COUNTER 231 232 RETURN 233 234 ' This is checking if only allowable characters are present 235 ' It does NOT check for valid number syntax 236 CHECK_IF_NUMBER IS_NUMBER = FALSE 237 NUMBER_LENGTH = LEN(VLSTRING$) 238 FOR NUMBER_COUNTER = NUM_1 TO NUMBER_LENGTH 239 240 NUMBER_CH$ = MID$(VLSTRING$, NUMBER_COUNTER, NUM_1) 241 NUMBER_CH = ASC(NUMBER_CH$) 242 243 IF NUMBER_CH >= ASC_0 AND NUMBER_CH <= ASC_9 GOTO MORE_NUMBERS 244 IF NUMBER_CH = ASC_PERIOD OR NUMBER_CH = ASC_PLUS OR NUMBER_CH = ASC_MINUS GOTO MORE_NUMBERS 245 IF NUMBER_CH = ASC_E_U OR NUMBER_CH = ASC_e_L GOTO MORE_NUMBERS 246 247 RETURN : REM Not a number 248 249 MORE_NUMBERS NEXT NUMBER_COUNTER 250 IS_NUMBER = TRUE 251 RETURN 252 253 ' Prepare line number for output, no leading space, No trailing space 254 PREPARE_LINE_NUMBER LNR_$ = STR$(LINE_NUMBER) 255 ' IF LEN(LNR_$) < 2 THEN PRINT #FILE_L, "LINE NUMBER LENGTH LESS THAN 2 >>" ; LEN(LNR_$) 256 LN_LENGTH = LEN(LNR_$) - NUM_1 257 LN_$ = MID$(LNR_$, NUM_2, LN_LENGTH) 258 RETURN 259 260 NEXT_LINE LINE INPUT #FILE_I, IN_LINE$ 261 262 IN_LINE_CHAR_COUNTER = NUM_0 263 LAST_CH = ASC_TILDE 264 DEF_CONSTANT = FALSE 265 DATA_LINE = FALSE 266 VLSTRING_COUNT = NUM_0 267 ' Let User Know we are still processing 268 IF PASS = NUM_2 THEN PRINT LINE_NUMBER ; 269 I_EOF = EOF(FILE_I) 270 271 IF I_EOF = NUM_M1 GOTO I_FILE_END 272 I_LINE_LENGTH = LEN(IN_LINE$) 273 IF I_LINE_LENGTH = NUM_0 GOTO BLANK_LINE 274 275 ''' CHARACTERS IN COLUMN ONE 276 ' "A-Za-z", "_", "0-9" = LINE LABLE 277 ' "#" = Urbane COMMAND 278 ' " " = NO LINE LABLE 279 ' "'" = COMMENT 280 ' any other character = COMMENT 281 282 COLUMN_ONE GOSUB GET_IN_LINE_CHAR 283 IF IN_LINE_CH = ASC_POUND GOTO URBANE_COMMAND 284 IF IN_LINE_CH = ASC_BLANK GOTO NO_LINE_LABLE 285 IF IN_LINE_CH = ASC_SINGLE_QUOTE GOTO COMMENT 286 287 IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO LINE_LABEL 288 IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO LINE_LABEL 289 IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_9 GOTO LINE_LABEL 290 IF IN_LINE_CH = ASC_UNDERSCORE GOTO LINE_LABEL 291 292 COMMENT ON PASS GOTO OUTPUT_LINE, PASS2_CONTINUE 293 294 URBANE_COMMAND IF INSTR(NUM_2, IN_LINE$, "LIST_ON") <> NUM_0 THEN OUTPUT_LISTING = TRUE 295 IF INSTR(NUM_2, IN_LINE$, "LIST_OFF") <> NUM_0 THEN OUTPUT_LISTING = FALSE 296 297 IF INSTR(NUM_2, IN_LINE$, "XREF_ON") <> NUM_0 THEN OUTPUT_XREF = TRUE 298 IF INSTR(NUM_2, IN_LINE$, "XREF_OFF") <> NUM_0 THEN OUTPUT_XREF = FALSE 299 300 IF INSTR(NUM_2, IN_LINE$, "CONSTANT") <> NUM_0 THEN DEF_CONSTANT = TRUE : GOTO NO_LINE_LABLE 301 302 ' ON PASS GOTO OUTPUT_LINE, PASS2_CONTINUE 303 304 BLANK_LINE ON PASS GOTO OUTPUT_LINE, PASS2_CONTINUE 305 306 NO_LINE_LABLE ON PASS GOTO OUTPUT_LINE, PARSE_LINE 307 308 LINE_LABEL GOSUB GET_VLSTRING 309 VLSTRING_COUNT = NUM_1 310 311 IF LAST_CH <> ASC_DOLLAR GOTO LINE_LABEL_GOOD 312 PRINT #FILE_L, "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; VLSTRING$ 313 PRINT "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; VLSTRING$ 314 WARNINGS = WARNINGS + NUM_1 315 316 LINE_LABEL_GOOD IF PASS = NUM_2 GOTO PARSE_LINE 317 318 FOR LINE_LABEL_COUNTER = LINE_LABEL_START TO LINE_LABEL_COUNT 319 IF VLSTRING$ = LINE_LABELS$(LINE_LABEL_COUNTER,LINE_LABELS_NAME) GOTO DUP_LINE_LABEL 320 NEXT LINE_LABEL_COUNTER 321 322 LINE_LABEL_COUNT = LINE_LABEL_COUNT + NUM_1 323 IF LINE_LABEL_COUNT > LINE_LABEL_MAX_COUNT THEN PRINT #FILE_L, " LINE_LABEL_MAX_COUNT Exceeded" : STOP 324 325 LINE_LABELS$(LINE_LABEL_COUNT,LINE_LABELS_NAME) = VLSTRING$ 326 GOSUB PREPARE_LINE_NUMBER 327 LINE_LABELS$(LINE_LABEL_COUNT,LINE_LABELS_NUMBER) = LN_$ 328 IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_LINE_LABEL; " "; LN_$; " "; VLSTRING$ 329 GOTO OUTPUT_LINE 330 331 DUP_LINE_LABEL PRINT #FILE_L, LINE_NUMBER ; " ERROR - DUPLICATE LINE LABEL = " ; VLSTRING$ 332 ERRORS = ERRORS + NUM_1 333 GOTO OUTPUT_LINE 334 335 PARSE_LINE GOSUB PREPARE_LINE_NUMBER 336 OUTPUT_STRING$ = LN_$ 337 CONSTANT_NAME$ = "" 338 CONSTANT_INDEX = NUM_0 339 EQUALS_FOUND = FALSE 340 341 PARSE_CONTINUE IF IN_LINE_CH < NUM_0 GOTO OUTPUT_LINE 342 IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_Z_U GOTO LABEL_OR_VARIABLE 343 IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_z_L GOTO LABEL_OR_VARIABLE 344 IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_9 GOTO LABEL_OR_VARIABLE 345 IF IN_LINE_CH = ASC_UNDERSCORE GOTO LABEL_OR_VARIABLE 346 IF IN_LINE_CH = ASC_DOUBLE_QUOTE GOTO HAVE_QUOTED_STRING 347 IF IN_LINE_CH = ASC_AMPERSAND GOTO HEX_OR_OCTAL 348 349 IF IN_LINE_CH = ASC_EQUALS THEN EQUALS_FOUND = TRUE 350 351 ' Skip blanks 352 IF IN_LINE_CH = ASC_BLANK AND LAST_CH = ASC_BLANK GOTO PARSE_GET_NEXT_CH 353 354 OUTPUT_STRING$ = OUTPUT_STRING$ + IN_LINE_CH$ 355 356 PARSE_GET_NEXT_CH GOSUB GET_IN_LINE_CHAR 357 GOTO PARSE_CONTINUE 358 359 LABEL_OR_VARIABLE VLSTRING_COUNT = VLSTRING_COUNT + NUM_1 360 GOSUB GET_VLSTRING 361 362 GOSUB CHECK_IF_NUMBER 363 IF IS_NUMBER = TRUE GOTO HAVE_NUMBER 364 365 FOR KEYWORD_TABLE_COUNTER = KEYWORD_TABLE_START TO KEYWORD_TABLE_COUNT 366 IF VLSTRING$ = KEYWORD_TABLE$(KEYWORD_TABLE_COUNTER) GOTO HAVE_KEYWORD 367 NEXT KEYWORD_TABLE_COUNTER 368 369 FOR LINE_LABEL_COUNTER = LINE_LABEL_START TO LINE_LABEL_COUNT 370 IF VLSTRING$ = LINE_LABELS$(LINE_LABEL_COUNTER,VARIABLE_NAMES_NAME) GOTO HAVE_LINE_LABEL 371 NEXT LINE_LABEL_COUNTER 372 373 FOR VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_START TO VARIABLE_NAMES_COUNT 374 IF VLSTRING$ = VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_NAME) GOTO HAVE_VARIABLE 375 NEXT VARIABLE_NAMES_COUNTER 376 377 ' NEW_VARIABLE FOUND 378 VARIABLE_NAMES_COUNT = VARIABLE_NAMES_COUNT + NUM_1 379 IF VARIABLE_NAMES_COUNT > VARIABLE_NAMES_MAX_COUNT THEN PRINT #FILE_L, " VARIABLE_NAMES_MAX_COUNT Exceeded" : STOP 380 381 VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_NAME) = VLSTRING$ 382 VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = "Pending" 383 IF DEF_CONSTANT <> TRUE GOTO GET_NEW_2CH 384 CONSTANT_NAME$ = VLSTRING$ 385 CONSTANT_INDEX = VARIABLE_NAMES_COUNT 386 IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_VARIABLE; " "; LN_$; " "; VLSTRING$ 387 GOTO PARSE_CONTINUE 388 389 ' Generate new 2 character variable name and put it into variable name table 390 GET_NEW_2CH GOSUB GET_NEW_2CH_VARIABLE 391 392 VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = NEW_2CH_VARIABLE$ 393 VARIABLE_NAMES_COUNTER = VARIABLE_NAMES_COUNT 394 IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_VARIABLE; " "; LN_$; " "; VLSTRING$ 395 IF LAST_CH <> ASC_DOLLAR GOTO HAVE_VARIABLE 396 VARIABLE_NAMES$(VARIABLE_NAMES_COUNT,VARIABLE_NAMES_2CH) = NEW_2CH_VARIABLE$ + "$" 397 GOTO HAVE_VARIABLE 398 399 HAVE_KEYWORD IF OUTPUT_XREF = TRUE AND DATA_LINE = FALSE THEN PRINT #FILE_X, " "; UBN_XRF_KEYWORD_REFERENCE; " "; LN_$; " "; VLSTRING$ 400 ' Add keyword to output string 401 IF DATA_LINE = TRUE GOTO HAVE_DATA_LINE 402 IF VLSTRING$ = "REM" GOTO HAVE_REM 403 IF VLSTRING$ = "LET" GOTO HAVE_LET 404 IF VLSTRING$ = "DATA" THEN DATA_LINE = TRUE 405 IF VLSTRING$ = "CONSTANT" GOTO PARSE_CONTINUE 406 HAVE_DATA_LINE OUTPUT_STRING$ = OUTPUT_STRING$ + VLSTRING$ 407 408 GOTO PARSE_CONTINUE 409 410 ' Line with no Line Label and first Keyword "REM" can be removed 411 ' DECB requires the "REM keyword if there is a label on the line 412 413 HAVE_REM IF VLSTRING_COUNT = NUM_1 GOTO PASS2_CONTINUE 414 OUTPUT_STRING$ = OUTPUT_STRING$ + "REM" 415 GOTO OUTPUT_LINE 416 417 ' Remove unnecessary "LET" and next Blank 418 HAVE_LET IF IN_LINE_CH = ASC_BLANK GOTO PARSE_GET_NEXT_CH 419 GOTO PARSE_CONTINUE 420 421 HAVE_LINE_LABEL IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_LINE_REFERENCE; " "; LN_$; " "; LINE_LABELS$(LINE_LABEL_COUNTER,LINE_LABELS_NUMBER) 422 ' Add line number to output string 423 OUTPUT_STRING$ = OUTPUT_STRING$ + LINE_LABELS$(LINE_LABEL_COUNTER,LINE_LABELS_NUMBER) 424 GOTO PARSE_CONTINUE 425 426 HAVE_NUMBER IF DEF_CONSTANT <> TRUE GOTO ADD_NUMBER 427 IF CONSTANT_INDEX = NUM_0 GOTO ADD_NUMBER 428 IF EQUALS_FOUND <> TRUE GOTO ADD_NUMBER 429 430 NUM_PREFIX$ = "" 431 IF LAST_CH = ASC_MINUS THEN NUM_PREFIX$ = "-" 432 IF LAST_CH = ASC_PLUS THEN NUM_PREFIX$ = "+" 433 434 VARIABLE_NAMES$(CONSTANT_INDEX,VARIABLE_NAMES_2CH) = NUM_PREFIX$ + VLSTRING$ 435 GOTO PARSE_CONTINUE 436 437 ' Add number to output string 438 ADD_NUMBER OUTPUT_STRING$ = OUTPUT_STRING$ + VLSTRING$ 439 GOTO PARSE_CONTINUE 440 441 HAVE_VARIABLE IF DEF_CONSTANT = TRUE GOTO PARSE_CONTINUE 442 IF OUTPUT_XREF = TRUE THEN PRINT #FILE_X, " "; UBN_XRF_VARIABLE_REFERENCE; " "; LN_$; " "; VLSTRING$ 443 ' Add existing 2ch variable to output string 444 OUTPUT_STRING$ = OUTPUT_STRING$ + VARIABLE_NAMES$(VARIABLE_NAMES_COUNTER,VARIABLE_NAMES_2CH) 445 GOTO PARSE_CONTINUE 446 447 HAVE_QUOTED_STRING GOSUB GET_QSTRING 448 IF DEF_CONSTANT <> TRUE GOTO ADD_QUOTED 449 IF CONSTANT_INDEX = NUM_0 GOTO ADD_QUOTED 450 IF EQUALS_FOUND <> TRUE GOTO ADD_QUOTED 451 452 VARIABLE_NAMES$(CONSTANT_INDEX,VARIABLE_NAMES_2CH) = QSTRING$ 453 GOTO PARSE_CONTINUE 454 455 ' Copy Quoted string to output, with double quotes 456 457 ADD_QUOTED OUTPUT_STRING$ = OUTPUT_STRING$ + QSTRING$ 458 GOTO PARSE_CONTINUE 459 460 ' On Entry, "ASC_AMPERSAND" is in "IN_LINE_CH$" and "IN_LINE_CH" 461 ' On Exit, "IN_LINE_CH$" and "IN_LINE_CH" have next character. 462 HEX_OR_OCTAL HO_STRING$ = IN_LINE_CH$ 463 464 GOSUB GET_IN_LINE_CHAR 465 HO_STRING$ = HO_STRING$ + IN_LINE_CH$ 466 467 HEX = FALSE 468 OCTAL = FALSE 469 IF IN_LINE_CH = ASC_H_U OR IN_LINE_CH = ASC_h_L THEN HEX = TRUE 470 IF IN_LINE_CH = ASC_O_U OR IN_LINE_CH = ASC_o_L THEN OCTAL = TRUE 471 IF HEX = FALSE AND OCTAL = FALSE GOTO BAD_HEX_OR_OCTAL 472 473 MORE_HEX_OR_OCTAL GOSUB GET_IN_LINE_CHAR 474 475 IF IN_LINE_CH >= ASC_A_U AND IN_LINE_CH <= ASC_F_U GOTO HOSTRING_ADD_UPPER_HEX 476 IF IN_LINE_CH >= ASC_a_L AND IN_LINE_CH <= ASC_f_L GOTO HOSTRING_ADD_LOWER_HEX 477 IF IN_LINE_CH >= ASC_0 AND IN_LINE_CH <= ASC_7 GOTO HOSTRING_ADD_OCTAL 478 IF IN_LINE_CH >= ASC_8 AND IN_LINE_CH <= ASC_9 GOTO HOSTRING_ADD_UPPER_HEX 479 480 ' End of Hex or Octal Number 481 OUTPUT_STRING$ = OUTPUT_STRING$ + HO_STRING$ 482 GOTO PARSE_CONTINUE 483 484 HOSTRING_ADD_LOWER_HEX IN_LINE_CH = IN_LINE_CH - ( ASC_a_L - ASC_A_U ) 485 IN_LINE_CH$ = CHR$(IN_LINE_CH) 486 487 HOSTRING_ADD_UPPER_HEX HO_STRING$ = HO_STRING$ + IN_LINE_CH$ 488 IF HEX = TRUE GOTO MORE_HEX_OR_OCTAL 489 490 PRINT #FILE_L, "WARNING - Invalid Octal Number " ; HO_STRING$ 491 PRINT "WARNING - Invalid Octal Number " ; HO_STRING$ 492 WARNINGS = WARNINGS + NUM_1 493 GOTO OUTPUT_LINE 494 495 HOSTRING_ADD_OCTAL HO_STRING$ = HO_STRING$ + IN_LINE_CH$ 496 GOTO MORE_HEX_OR_OCTAL 497 498 BAD_HEX_OR_OCTAL PRINT #FILE_L, "WARNING - '&' Not followed by 'H' or 'O' " ; HO_STRING$ 499 PRINT "WARNING - '&' Not followed by 'H' or 'O' " ; HO_STRING$ 500 WARNINGS = WARNINGS + NUM_1 501 ' GOTO OUTPUT_LINE 502 503 OUTPUT_LINE IF PASS = NUM_1 AND OUTPUT_LISTING = TRUE THEN PRINT #FILE_L, LINE_NUMBER ; IN_LINE$ 504 505 IF DEF_CONSTANT = TRUE GOTO PASS2_CONTINUE 506 507 IF PASS = NUM_2 THEN PRINT #FILE_O, OUTPUT_STRING$ 508 509 PASS2_CONTINUE LINE_NUMBER = LINE_NUMBER + NUM_1 510 GOTO NEXT_LINE 511 512 I_FILE_END LINE_COUNT = LINE_NUMBER - NUM_1 513 PRINT #FILE_L, "Urbane Pass "; PASS; " Done, Lines = "; LINE_COUNT 514 PRINT "Urbane Pass "; PASS; " Done, Lines = "; LINE_COUNT 515 516 IF PASS = NUM_2 GOTO ALL_DONE 517 ' GOSUB DUMP_LINE_LABELS 518 519 PRINT #FILE_L, " MEM = " ; MEM 520 PRINT " MEM = " ; MEM 521 522 LOAD_KEYWORDS DIM KEYWORD_TABLE$(UBN_MEM_KEYWORD_TABLE_MAX_COUNT) 523 KEYWORD_TABLE_MAX_COUNT = UBN_MEM_KEYWORD_TABLE_MAX_COUNT 524 KEYWORD_TABLE_START = NUM_1 525 KEYWORD_TABLE_COUNT = NUM_0 526 527 LOOP_KEYWORDS READ KEYWORD$ 528 IF KEYWORD$ = "\" GOTO END_OF_KEYWORDS 529 KEYWORD_TABLE_COUNT = KEYWORD_TABLE_COUNT + NUM_1 530 KEYWORD_TABLE$(KEYWORD_TABLE_COUNT) = KEYWORD$ 531 GOTO LOOP_KEYWORDS 532 533 END_OF_KEYWORDS DIM ILLEGAL_2CH_VARIABLE_TABLE$(UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT) 534 ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT = UBN_MEM_ILLEGAL_2CH_VARIABLE_TABLE_MAX_COUNT 535 ILLEGAL_2CH_VARIABLE_TABLE_START = NUM_1 536 ILLEGAL_2CH_VARIABLE_TABLE_COUNT = NUM_0 537 538 LOOP_ILLEGAL_2CH_VARIABLES READ ILLEGAL_2CH_VARIABLE$ 539 IF ILLEGAL_2CH_VARIABLE$ = "\" GOTO END_OF_ILLEGAL_2CH_VARIABLES 540 ILLEGAL_2CH_VARIABLE_TABLE_COUNT = ILLEGAL_2CH_VARIABLE_TABLE_COUNT + NUM_1 541 ILLEGAL_2CH_VARIABLE_TABLE$(ILLEGAL_2CH_VARIABLE_TABLE_COUNT) = ILLEGAL_2CH_VARIABLE$ 542 GOTO LOOP_ILLEGAL_2CH_VARIABLES 543 544 END_OF_ILLEGAL_2CH_VARIABLES DIM VARIABLE_NAMES$(UBN_MEM_VARIABLE_NAMES_MAX_COUNT,NUM_2) 545 VARIABLE_NAMES_MAX_COUNT = UBN_MEM_VARIABLE_NAMES_MAX_COUNT 546 VARIABLE_NAMES_START = NUM_1 547 VARIABLE_NAMES_COUNT = NUM_0 548 VARIABLE_NAMES_NAME = NUM_1 549 VARIABLE_NAMES_2CH = NUM_2 550 551 HIGH_2CH_VARIABLE = ASC_A_U 552 LOW_2CH_VARIABLE = ASC_A_U 553 554 PASS = NUM_2 555 LINE_NUMBER = NUM_1 556 I_EOF = NUM_0 557 PRINT #FILE_L, " ---------PASS 2 STARTING------" 558 PRINT " ---------PASS 2 STARTING------" 559 CLOSE FILE_I 560 561 OPEN "I", #NUM_1, IN_FILE$ 562 563 GOTO NEXT_LINE 564 565 ' REM Startup code here so Basic does not have to search it each time it is looking for a line number 566 UBN_START FILES UBN_MEM_FILES_COUNT, UBN_MEM_FILES_SPACE 567 PCLEAR UBN_MEM_PCLEAR 568 CLEAR UBN_MEM_CLEAR 569 PRINT "Urbane Starting - Urbane XUBNVERSION$ " 570 PRINT " MEM = " ; MEM 571 572 PASS = NUM_1 573 LINE_NUMBER = NUM_1 574 575 ERRORS = NUM_0 576 WARNINGS = NUM_0 577 578 ASC_DOUBLE_QUOTE$ = CHR$(34) 579 580 OUTPUT_LISTING = UBN_LIST_LIST_INITIAL 581 OUTPUT_XREF = UBN_XREF_LIST_INITIAL 582 FILE_I = NUM_1 583 FILE_O = NUM_2 584 FILE_L = NUM_3 585 FILE_X = NUM_4 586 587 OPEN "I", #NUM_1, IN_FILE$ 588 589 OPEN "O", #NUM_2, OUT_FILE$ 590 591 OPEN "O", #NUM_3, LST_FILE$ 592 593 OPEN "O", #NUM_4, XRF_FILE$ 594 595 DIM LINE_LABELS$(UBN_MEM_LINE_LABEL_MAX_COUNT,NUM_2) 596 LINE_LABEL_MAX_COUNT = UBN_MEM_LINE_LABEL_MAX_COUNT 597 LINE_LABEL_START = NUM_1 598 LINE_LABEL_COUNT = NUM_0 599 LINE_LABELS_NAME = NUM_1 600 LINE_LABELS_NUMBER = NUM_2 601 602 PRINT #FILE_L, " "; UBN_TITLE$ 603 PRINT #FILE_X, " "; UBN_XRF_TITLE; " "; NUM_0; " "; UBN_TITLE$ 604 605 PRINT #FILE_L, " MEM = " ; MEM 606 GOTO NEXT_LINE 607 608 ' Keyword Table 609 DATA REM 610 DATA ATTR,AUDIO,BACKUP,CIRCLE,CLEAR,CLOAD,CLOADM,CLOSE,CLS,COLOR,CONSTANT,CONT,COPY,CSAVE 611 DATA CSAVEM,DATA,DEF,DEFUSR,DEL,DIM,DIR,DLOAD,DRAW,DRIVE,DSKI$,DSKINI,DSKO$,EDIT 612 DATA END,EXEC,FIELD,FILES,FN,FOR,GET,GOSUB 613 DATA GOTO,HBUFF,HCIRCLE,HCLS,HCOLOR,HDRAW,HGET,HLINE,HPAINT,HPRINT,HPUT,HRESET 614 DATA HSCREEN,HSET,HSTAT,IF,INPUT,KILL,LET,LINE,LIST,LLIST,LOCATE,LPOKE,LOAD,LOADM,LSET,MERGE 615 DATA MOTOR,NEW,NEXT,OLD,ON,OPEN,PAINT,PALETTE,PCLEAR,PCLS,PCOPY,PLAY,PMODE,POKE,PRESET,PRINT 616 DATA PSET,PUT,READ,RENAME,RENUM,RESET,RSET,RESTORE,RESUME,RETURN,RUN,SAVE,SAVEM,SCREEN 617 DATA SET,SKIPF,SOUND,STOP,TO,TROFF,TRON,WIDTH,WRITE,UNLOAD,VERIFY 618 DATA MEM,TIMER,AND,NOT,OR,ELSE,STEP,FREE,AS,BRK,ERR,CMP,RGB,USING 619 DATA ERROR,FREE,OFF,TAB,USING,THEN,TO,G,BF,B,R,A,"?" 620 DATA AS,BF,OR,PI 621 622 ' Functions, keywords that require next character to be an open parentheses 623 DATA ABS,ASC,ATN,BUTTON,CHR$,COS,CVN,EOF,ERLIN,ERNO,EXP,FIX,HEX$,HPOINT,INKEY$,INSTR,INT 624 DATA JOYSTK,LEFT$,LEN,LOC,LOF,LOG,LPEEK,MID$,MKN$,PEEK,POINT,POS,PPOINT,RIGHT$,RND,SGN,SIN 625 DATA STRING$,STR$,SQR,TAN,USR,VAL,VARPTR 626 DATA "\" 627 628 ' Illegal Two Character Variable Table NOTE: "PI" is a variable that is NOT replaced 629 DATA AS,BF,FN,IF,ON,OR,PI,TO,"\" 630 631 ALL_DONE PRINT #FILE_L, " MEM = " ; MEM 632 PRINT " MEM = " ; MEM 633 ' GOSUB DUMP_VARIABLES 634 PRINT "Urbane Done, Errors = " ; ERRORS ; " Warnings = "; WARNINGS ; " Lines = " ; LINE_COUNT ; "Line Label Count = " ; LINE_LABEL_COUNT ; " Variables Count = " ; VARIABLE_NAMES_COUNT 635 PRINT #FILE_L, "Urbane Done, Errors = " ; ERRORS ; " Warnings = "; WARNINGS ; " Lines = " ; LINE_COUNT ; "Line Label Count = " ; LINE_LABEL_COUNT ; " Variables Count = " ; VARIABLE_NAMES_COUNT 636 CLOSE FILE_I 637 CLOSE FILE_O 638 CLOSE FILE_L 639 CLOSE FILE_X 640 641 END Urbane Pass 1 Done, Lines = 641 MEM = 8106 ---------PASS 2 STARTING------ Urbane Pass 2 Done, Lines = 641 MEM = 4477 Urbane Done, Errors = 0 Warnings = 0 Lines = 641 Line Label Count = 65 Variables Count = 137 1 END Urbane Pass 1 Done, Lines = 641 MEM = 8106 ---------PASS 2 STARTING------ Urbane Pass 2 Done, Lines = 64 "? WБе 566YAA │ AA л 11ZЕ AA ▓ AB Бе 106=\AC │ ADV]AE$ │  Р(AF$, AA, 1)g^AD │  К(AE$)z_Е AD ▓│ 32 з РП`Е AD │ 09 Бе 102иbЗ #AG, AH; " " ; AF$ёcЗ #AG, AH; " Control Character "; AD; " Found in Input Line at "; AAўdРfAE$ │  Л(32)gAD │ 32hР&jAD │ м17kAE$ │  Л(64)=lРKrAI$ │ AE$UsБж 89ftЕ AD ┤ 0 з РЗuЕ AD ▓│ 65 ░ AD ┤│ 90 Бе 128йvЕ AD ▓│ 97 ░ AD ┤│ 122 Бе 126╩wЕ AD ▓│ 48 ░ AD ┤│ 57 Бе 129▀xЕ AD │ 95 Бе 130ЇyЕ AD │ 64 Бе 130 zЕ AD │ 36 Бе 131|Р)~AD │ AD м ( 97 м 65 ):AE$ │  Л(AD)@АВFБВLВВRГВfДAI$ │ AI$ л AE$КЖЕ AD │ 36 з AC │ AD : Бж 89 : РХЗБе 115гНAJ$ │ AE$оОAK │ 0╕ПБж 89═СЕ AD ┤│ 0 Бе 215сТAJ$ │ AJ$ л AE$°УЕ AD │ 32 з AK │ 0 ФЕ AK │ 1 Бе 150,ХЕ AD │ 88 ▒ AD │ 120 Бе 155BЦЕ AD ┤▓ 34 Бе 143LШБж 89RЩР\ЫБж 89qЬЕ AD ┤│ 0 Бе 215ЖЭЕ AD │ 34 Бе 162зЮЕ AD ▓│ 65 ░ AD ┤│ 90 Бе 166╔ЯЕ AD ▓│ 97 ░ AD ┤│ 122 Бе 166▐аЕ AD │ 95 Бе 166щбБе 143¤вAJ$ │ AJ$ л AE$гБж 89 дРжAL │ AA'зAM$ │ AE$2иБж 114HкЕ AC ┤▓ 36 Бе 204[лА AN │ AO е APyмЕ AI$ │ AQ$(AN,AR) Бе 188ВнЛ ANТ▒AP │ AP л 1╥▓Е AP ▓ AT з З #AG, " VARIABLE_NAMES_MAX_COUNT Exceeded" : Сч┤AQ$(AP,AR) │ AI$╡AQ$(AP,AU) │ "Pending" ╖Бж 218(╣AQ$(AP,AU) │ AV$ л "$"4║AN │ APU╝Е  К(AQ$(AN,AU)) │ 34 Бе 198p└AJ$ │ AJ$ л AQ$(AN,AU){┴Бе 143Р╞AW │  З(AJ$) м 1е╟AJ$ │  О(AJ$,AW)┴╚AX │  З(AQ$(AN,AU)) м 2х╔AJ$ │ AJ$ л  Р(AQ$(AN,AU),2,AX)Ё╩Бе 143№╠AA │ AL ═AE$ │ AM$╬AK │ 1)╧AJ$ │ AJ$ л AE$4╥Бе 143>╘Бж 89D╒РГ╫З #AG, AH ; " ERROR - Missing end of Quoted String " ; AJ$У╪AY │ AY л 1Щ┘Р│┌AV$ │  Л(AZ) л  Л(BA)├▄BA │ BA л 1┘▌Е BA ┤│ 90 Бе 228х▐BA │ 65їрAZ │ AZ л 1 сЕ AZ ┤│ 90 Бе 228тAZ │ 65 : В.фА BB │ BC е BDIхЕ AV$ │ BE$(BB) Бе 218RцЛ BBXшРcьBG │ 0tэBH │  З(AI$)ЖюА BI │ 1 е BHЯЁBJ$ │  Р(AI$, BI, 1)░ёBK │  К(BJ$)╤єЕ BK ▓│ 48 ░ BK ┤│ 57 Бе 249·ЇЕ BK │ 46 ▒ BK │ 43 ▒ BK │ 45 Бе 249їЕ BK │ 69 ▒ BK │ 101 Бе 249$ўР : В-∙Л BI8·BG │ 1>√РO■BL$ │  И(AH)dBM │  З(BL$) м 1}BN$ │  Р(BL$, 2, BM)ГРФ╗ Й #BO, AF$ЯAA │ 0лAC │ 64╢BP │ 0┴ BQ │ 0╠ BR │ 0т Е BS │ 2 з З AH ;Є BT │  М(BO)Е BT │ м1 Бе 512AB │  З(AF$),Е AB │ 0 Бе 3046Бж 89KЕ AD │ 35 Бе 294`Е AD │ 32 Бе 306uЕ AD │ 39 Бе 292ЦЕ AD ▓│ 65 ░ AD ┤│ 90 Бе 308╕ Е AD ▓│ 97 ░ AD ┤│ 122 Бе 308┘!Е AD ▓│ 48 ░ AD ┤│ 57 Бе 308ю"Е AD │ 95 Бе 308 $И BS Бе 503, 509 -&Е  Ю(2, AF$, "LIST_ON") ┤▓ 0 з BU │ 1 X'Е  Ю(2, AF$, "LIST_OFF") ┤▓ 0 з BU │ 0 В)Е  Ю(2, AF$, "XREF_ON") ┤▓ 0 з BV │ 1 н*Е  Ю(2, AF$, "XREF_OFF") ┤▓ 0 з BV │ 0 с,Е  Ю(2, AF$, "CONSTANT") ┤▓ 0 з BP │ 1 : Бе 306 Ў0И BS Бе 503, 509! 2И BS Бе 503, 335!4Бж 114!!5BR │ 1!77Е AC ┤▓ 36 Бе 316!v8З #AG, "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; AI$!░9З "WARNING - '$' SHOULD NOT BE USED IN LABELS " ; AI$!└:BW │ BW л 1!╘<Е BS │ 2 Бе 335!ч>А BX │ BY е BZ"?Е AI$ │ CA$(BX,CB) Бе 331"@Л BX"BBZ │ BZ л 1"ZCЕ BZ ▓ CC з З #AG, " LINE_LABEL_MAX_COUNT Exceeded" : С"oECA$(BZ,CB) │ AI$"zFБж 254"ПGCA$(BZ,CD) │ BN$"└HЕ BV │ 1 з З #CE, " "; 2; " "; BN$; " "; AI$"╦IБе 503#KЗ #AG, AH ; " ERROR - DUPLICATE LINE LABEL = " ; AI$#LAY │ AY л 1# MБе 503#+OБж 254#9PCF$ │ BN$#FQCG$ │ ""#QRCH │ 0#\SCI │ 0#pUЕ AD ┤ 0 Бе 503#СVЕ AD ▓│ 65 ░ AD ┤│ 90 Бе 359#│WЕ AD ▓│ 97 ░ AD ┤│ 122 Бе 359#╘XЕ AD ▓│ 48 ░ AD ┤│ 57 Бе 359#щYЕ AD │ 95 Бе 359#■ZЕ AD │ 34 Бе 447$[Е AD │ 38 Бе 462$*]Е AD │ 61 з CI │ 1$I`Е AD │ 32 ░ AC │ 32 Бе 356$]bCF$ │ CF$ л AE$$gdБж 89$reБе 341$ВgBR │ BR л 1$НhБж 114$ШjБж 236$мkЕ BG │ 1 Бе 426$┐mА CJ │ CK е CL$┌nЕ AI$ │ CM$(CJ) Бе 399$уoЛ CJ$ЎqА BX │ BY е BZ%rЕ AI$ │ CA$(BX,AR) Бе 421%sЛ BX%0uА AN │ AO е AP%NvЕ AI$ │ AQ$(AN,AR) Бе 441%WwЛ AN%gzAP │ AP л 1%з{Е AP ▓ AT з З #AG, " VARIABLE_NAMES_MAX_COUNT Exceeded" : С%╝}AQ$(AP,AR) │ AI$%╫~AQ$(AP,AU) │ "Pending"%ьЕ BP ┤▓ 1 Бе 390%·АCG$ │ AI$&БCH │ AP&7ВЕ BV │ 1 з З #CE, " "; 4; " "; BN$; " "; AI$&BГБе 341&MЖБж 218&bИAQ$(AP,AU) │ AV$&nЙAN │ AP&ЯКЕ BV │ 1 з З #CE, " "; 4; " "; BN$; " "; AI$&╡ЛЕ AC ┤▓ 36 Бе 441&╨МAQ$(AP,AU) │ AV$ л "$"&█НБе 441'ПЕ BV │ 1 ░ BQ │ 0 з З #CE, " "; 8; " "; BN$; " "; AI$')СЕ BQ │ 1 Бе 406'BТЕ AI$ │ "REM" Бе 413'[УЕ AI$ │ "LET" Бе 418'wФЕ AI$ │ "DATA" з BQ │ 1'ХХЕ AI$ │ "CONSTANT" Бе 341'йЦCF$ │ CF$ л AI$'┤ШБе 341'╚ЭЕ BR │ 1 Бе 509'▐ЮCF$ │ CF$ л "REM"'щЯБе 503'■вЕ AD │ 32 Бе 356( гБе 341(AеЕ BV │ 1 з З #CE, " "; 3; " "; BN$; " "; CA$(BX,CD)(\зCF$ │ CF$ л CA$(BX,CD)(gиБе 341(|кЕ BP ┤▓ 1 Бе 438(РлЕ CH │ 0 Бе 438(емЕ CI ┤▓ 1 Бе 438(▓оCN$ │ ""(╠пЕ AC │ 45 з CN$ │ "-"(ц░Е AC │ 43 з CN$ │ "+")▓AQ$(CH,AU) │ CN$ л AI$) │Бе 341) ╢CF$ │ CF$ л AI$)+╖Бе 341)?╣Е BP │ 1 Бе 341)p║Е BV │ 1 з З #CE, " "; 5; " "; BN$; " "; AI$)Л╝CF$ │ CF$ л AQ$(AN,AU))Ц╜Бе 341)б┐Бж 141)╢└Е BP ┤▓ 1 Бе 457)╩┴Е CH │ 0 Бе 457)▀┬Е CI ┤▓ 1 Бе 457)Ї─AQ$(CH,AU) │ AJ$) ┼Бе 341*╔CF$ │ CF$ л AJ$*╩Бе 341*,╬CO$ │ AE$*6╨Бж 89*J╤CO$ │ CO$ л AE$*U╙CP │ 0*`╘CQ │ 0*В╒Е AD │ 72 ▒ AD │ 104 з CP │ 1*д╓Е AD │ 79 ▒ AD │ 111 з CQ │ 1*┴╫Е CP │ 0 ░ CQ │ 0 Бе 498*╦┘Бж 89*ь█Е AD ▓│ 65 ░ AD ┤│ 70 Бе 487+▄Е AD ▓│ 97 ░ AD ┤│ 102 Бе 484+/▌Е AD ▓│ 48 ░ AD ┤│ 55 Бе 495+P▐Е AD ▓│ 56 ░ AD ┤│ 57 Бе 487+dсCF$ │ CF$ л CO$+oтБе 341+ЙфAD │ AD м ( 97 м 65 )+ЪхAE$ │  Л(AD)+очCO$ │ CO$ л AE$+┬шЕ CP │ 1 Бе 473+їъЗ #AG, "WARNING - Invalid Octal Number " ; CO$,#ыЗ "WARNING - Invalid Octal Number " ; CO$,3ьBW │ BW л 1,>эБе 503,RяCO$ │ CO$ л AE$,]ЁБе 473,ЪЄЗ #AG, "WARNING - '&' Not followed by 'H' or 'O' " ; CO$,╥єЗ "WARNING - '&' Not followed by 'H' or 'O' " ; CO$,тЇBW │ BW л 1- ўЕ BS │ 1 ░ BU │ 1 з З #AG, AH ; AF$-∙Е BP │ 1 Бе 509-8√Е BS │ 2 з З #CR, CF$-H¤AH │ AH л 1-S■Бе 260-cCS │ AH м 1-ШЗ #AG, "Urbane Pass "; BS; " Done, Lines = "; CS-╚З "Urbane Pass "; BS; " Done, Lines = "; CS-▄Е BS │ 2 Бе 631-ЎЗ #AG, " MEM = " ;  У. З " MEM = " ;  У. М CM$(200).' CT │ 200.2 CK │ 1.= CL │ 0.GН CU$.^Е CU$ │ "\" Бе 533.nCL │ CL л 1.АCM$(CL) │ CU$.ЛБе 527.ЩМ BE$(10).еCV │ 10.░BC │ 1.╗BD │ 0.┼Н CW$.▄Е CW$ │ "\" Бе 544.ьBD │ BD л 1.■BE$(BD) │ CW$/ Бе 538/ М AQ$(150,2)/'!AT │ 150/2"AO │ 1/=#AP │ 0/H$AR │ 1/S%AU │ 2/_'AZ │ 65/k(BA │ 65/v*BS │ 2/Б+AH │ 1/М,BT │ 0/╣-З #AG, " ---------PASS 2 STARTING------"/с.З " ---------PASS 2 STARTING------"/ъ/Ъ BO01Щ "I", #1, "UBN_IN.TXT"03Бе 26006╤ 4, 1000&7└ 1018Х 85000_9З "Urbane Starting - Urbane 1.060202 RC0"0t:З " MEM = " ;  У0