.TITLE FLOW_CHART GENERATION ROUTINE .ENABLE DEBUG MAX_DIRECT_PAGE=3 ;MAX LIMIT TO FLOW LINES IN PAGES ;V2.06 ; ENABLE_DUMP=0 ;ALLOW DEBUG DUMP CODE TO BE ASSEMBLED ; ; THIS MODULE GENERATED AT VERSON V2.00 ; NO VERSION LABELS GENERATED FOR ORIGINAL CODE ; .SUBTITLE IMPURE STORAGE AREA .PSECT IMPURE_DATA,RD,WRT,NOEXE,NOSHR,LONG,CON,GBL .SUBTITLE LABEL QUEUE LABEL_QUEUE:: .LONG 0,0 ; ; EACH LABEL QUEUE ELEMENT IS OF THE FORM ; ; -------------------------- ; ! FORWARD QUEUE POINTER ! 0 ; -------------------------- ; ! BACKWARD QUEUE POINTER! 4 ; -------------------------- ; ! LABEL NUMBER (BINARY) ! 8 ; -------------------------- ; ! DEFINED LINE NUMBER ! 12 ; -------------------------- ; ! POINTER TO PRGM TOKEN ! 16 ; -------------------------- ; ! POINTER TO COMES_FROM ! 20 ; -------------------------- ; ! LABEL FLAG WORD ! 24 ; -------------------------- ; LENGTH IS 28 BYTES LABEL_ELEMENT_Q_QUEUE=0 LABEL_ELEMENT_L_LABEL=8 LABEL_ELEMENT_L_DEFINED=12 LABEL_ELEMENT_L_TOKEN=16 LABEL_ELEMENT_L_COME_FROM=20 ;LIST OF SOURCES LABEL_ELEMENT_L_FLAG=24 LABEL_FLAG_M_LABEL_USED=1 LABEL_FLAG_M_FLOW_CONNECTOR=2 ;V2.06 LABEL_QUEUE_ELEMENT_LENGTH=28 ; ; EXTENTION ELEMENT IS ; -------------------------- ; ! EXTENTION ELEMENT PTR ! 0 ; -------------------------- ; ! LIST OF POINTERS TO ! 4 ; ! PROGRAM ELEMENTS ! ; ! THAT ARE THE START OF ! ; ! A BRANCH TO THIS LABEL! ; ; ! ! 60 ; -------------------------- ; LENGTH IS 64 BYTES LABEL_EXTENTION_L_EXTENTION=0 LABEL_EXTENTION_L_LIST=4 LABEL_QUEUE_EXTENTION_LENGTH=64 .PAGE .SUBTITLE VARIABLE QUEUE VARIABLE_QUEUE:: .LONG 0,0 ; ; ELEMENTS IN THE VARIABLE NAME QUEUE HAVE THE FOLLOWING FORMAT ; ; ------------------------ ; ! FORWARD ELEMENT PTR ! 0 ; ------------------------ ; ! BACKWARD ELEMENT PTR ! 4 ; ------------------------ ; ! VAR NAME-COUNTED STR ! 8 ; ; ! ! 36 ; ------------------------ ; ! EXTENTION POINTER ! 40 ; ------------------------ ; ! COUNT OF LABELS ASS ! 44 ; ------------------------ ; ! LIST OF LABELS ASS. ! 48 ; ; ! ! 60 ; ------------------------ ; LENGTH= 64 BYTES VARIABLE_ELEMENT_Q_QUEUE=0 VARIABLE_ELEMENT_S_NAME=8 VARIABLE_ELEMENT_L_EXTENTION=40 VARIABLE_ELEMENT_L_COUNT=44 VARIABLE_ELEMENT_L_LIST=48 VARIABLE_ELEMENT_LENGTH=64 ; THE EXTENTION ELEMENT HAS THE FORMAT ; ------------------------ ; ! EXTENTION POINTER ! 0 ; ------------------------ ; ! LIST OF LABELS ASS. ! 4 ; ; ! ! 60 ; ------------------------ ; LENGTH=64 BYTES VARIABLE_EXTENTION_L_EXTENTION=0 VARIABLE_EXTENTION_L_LIST=4 VARIABLE_EXTENTION_LENGTH=VARIABLE_ELEMENT_LENGTH ; ; .PAGE .SUBTITLE PROGRAM QUEUE PROGRAM_QUEUE: .LONG 0,0 ; ; ; ELEMENTS IN THE PROGRAM ELEMENT QUEUE HAVE THE FOLLOWING FORMAT ; ; __________________ ; ! ELEMENT QUEUE ! 0 USED ONLY FOR CLEANING UP THE QUEUE ; __________________ ; ! ! 4 ; __________________ ; ! NEST | TYPE ! 8 THIS IS THE SAME AS THE ACTION CODE +CONECTORS ; __________________ ; ! FLAG WORD ! 12 CONNECTOR ACTIONS ; __________________ ; ! FLAG WORD 2 ! 16 SECOND FLAG WORD ;V2.01 ; ------------------ ;V2.01 ; ! LABEL POINTER ! 20 POINTER TO LABEL ATTACHED TO THIS BOX ;V2.01 ; __________________ ; ! LINE NUMBER ! 24 LINE NUMBER ;V2.01 ; ------------------ ; ! X COORD ! 28 X POSTITION IN MATRIX ;V2.01 ; ------------------ ; ! Y COORD ! 32 Y POSITION IN MATRIX ;V2.01 ; ------------------ ; ! LENGTH ! 36 LENGTH OF ELEMENT IN BYTES ;V2.01 ; __________________ ; ! LEFT POINTER ! 40 POINTER TO PROGRAM ELEMENT TO LEFT ;V2.01 ; __________________ ; ! RIGHT POINTER ! 44 POINTER TO PROGRAM ELEMENT TO RIGHT ;V2.01 ; __________________ ; ! UP POINTER ! 48 POINTER TO PROGRAM ELEMENT TO UP ;V2.01 ; __________________ ; ! DOWN POINTER ! 52 POINTER TO PROGRAM ELEMENT TO DOWN ;V2.01 ; __________________ ; ! ! 56 EXPANTION AREA AS NEEDED BY DIFFERENT TYPES ;V2.01 ; ; ! ! NN ; __________________ ; ; ; SUMMARY LIST OF ACTION DEPENDENT OFFSET'S ;V2.02 ; SYMBOL OFFSET ACTION ;V2.02 ; PROGRAM_ELEMENT_L_LEFT_LABEL 56 0 ;V2.02 ; PROGRAM_ELEMENT_L_END 56 2 ;V2.02 ; PROGRAM_ELEMENT_L_LESS_THAN 56 5 ;V2.02 ; PROGRAM_ELEMENT_L_LOOP_LABEL 56 10,11 ;V2.02 ; PROGRAM_ELEMENT_L_DEST_LABEL 56 13 ;V2.02 ; PROGRAM_ELEMENT_L_VAR_POINTER 56 14,16 ;V2.02 ; PROGRAM_ELEMENT_L_COUNT 56 15 ;V2.02 ; PROGRAM_ELEMENT_S_NAME(CNTD STRING 32 BYTES) 56 21,22,24 ;V2.02 ; PROGRAM_ELEMENT_L_FLOW_LABEL 56 25 ;V2.06 ; ;V2.02 ; PROGRAM_ELEMENT_L_RIGHT_LABEL 60 0 ;V2.02 ; PROGRAM_ELEMENT_L_ERR 60 2 ;V2.02 ; PROGRAM_ELEMENT_L_EQUAL 60 5 ;V2.02 ; PROGRAM_ELEMENT_L_LIST 60 15 ;V2.02 ; PROGRAM_ELEMENT_L_LABEL_POINTER 60 16 ;V2.02 ; ;V2.02 ; PROGRAM_ELEMENT_L_UP_LABEL 64 0 ;V2.02 ; PROGRAM_ELEMENT_L_GREATER_THAN 64 5 ;V2.02 ; ;V2.02 ; PROGRAM_ELEMENT_L_DOWN_LABEL 68 0 ;V2.02 ; PROGRAM_ELEMENT_S_TEXT(CNTD STRING 104 BYTES) 68 4,5,6,7,10,11,17, ;V2.02 ; 18,23 ;V2.02 ; ;V2.02 ; PROGRAM_ELEMENT_L_TOP_LEFT 72 0 ;V2.02 ; ;V2.02 ; PROGRAM_ELEMENT_L_TOP_RIGHT 76 0 ;V2.02 ; ;V2.02 ; PROGRAM_ELEMENT_L_L_CALL_COUNT 88 24 ;V2.02 ; ;V2.02 ; ;V2.02 ; PROGRAM_ELEMENT_L_CALL_LIST 92 24 ;V2.02 ; ;V2.02 PROGRAM_ELEMENT_Q_QUEUE=0 PROGRAM_ELEMENT_W_ACTION=8 CHART_ACTION_M_CONNECTOR=0 PROGRAM_ELEMENT_W_NEST=10 ;BLOCK IF/DO NESTING LEVEL PROGRAM_ELEMENT_L_FLAG=12 PROGRAM_FLAG_M_LEFT=^X1 PROGRAM_FLAG_M_RIGHT=^X2 PROGRAM_FLAG_M_UP=^X4 PROGRAM_FLAG_M_DOWN=^X8 PROGRAM_FLAG_M_JUNCTION=^X10 PROGRAM_FLAG_M_LEFT_OUT=^X20 PROGRAM_FLAG_M_RIGHT_OUT=^X40 PROGRAM_FLAG_M_UP_OUT=^X80 PROGRAM_FLAG_M_DOWN_OUT=^X100 PROGRAM_FLAG_M_SPINE=^X200 ; THE FOLLOWING FLAGS ARE INTENDED FOR GOTO LINES WHICH WILL ; TERMINATE NOT IN THE CENTER OF A GIVEN PIXEL BLOCK BUT AT THE ; CONNECTOR LINE AT THE TOP OF THE BLOCK PROGRAM_FLAG_M_TOP_LEFT=^X400 PROGRAM_FLAG_M_TOP_LEFT_OUT=^X800 PROGRAM_FLAG_M_TOP_RIGHT=^X1000 PROGRAM_FLAG_M_TOP_RIGHT_OUT=^X2000 PROGRAM_FLAG_M_TOP_JUNCTION=^X4000 PROGRAM_FLAG_M_RIGHT_LOOP_BACK=^X8000 PROGRAM_FLAG_M_LEFT_LOOP_BACK=^X10000 ; THE FOLLOWING FLAGS ARE INTENDED FOR LOOP BACK LINES FROM ; THE CONDIONAL ACTION CODE OF A LOGICAL IF PROGRAM_FLAG_M_BOTTOM_LEFT_OUT=^X20000 PROGRAM_FLAG_M_BOTTOM_LEFT=^X40000 PROGRAM_FLAG_M_BOTTOM_RIGHT=^X80000 PROGRAM_FLAG_M_BOTTOM_RIGHT_OUT=^X100000 PROGRAM_FLAG_M_BOTTOM_JUNCTION= ^X200000 ; ; THIS ALOWS A GIVEN PROGRAM ELEMENT PIXEL THE FOLLOWING ; INPUT/OUTPUT FLOW LINES ; ; ; --------*---------- ; | | | ; | | | ; --------+---------- ; | ; | ; | ; --------+---------- ; ; ; ; FLAGS TO DENOTE NEST TYPE IF OR DO PROGRAM_FLAG_M_IF_NEST=^X400000 PROGRAM_FLAG_M_DO_NEST=^X800000 PROGRAM_FLAG_M_NO_NEST=0 ; FLAGS FOR INCLUSEION OF SELECTED SYMBOLS IN PIXEL PRINT OUT ;V2.01 PROGRAM_FLAG_M_LOGICAL_TARGET=^X1000000 ;V2.01 PROGRAM_FLAG_M_IO_END=^X2000000 ;V2.01 PROGRAM_FLAG_M_IO_ERR=^X4000000 ;V2.01 PROGRAM_FLAG_M_IF_LT=^X8000000 ;V2.01 PROGRAM_FLAG_M_IF_EQ=^X10000000 ;V2.01 PROGRAM_FLAG_M_IF_GT=^X20000000 ;V2.01 ; DEBUG AID FLAG ;V2.06 PROGRAM_FLAG_M_DEBUG_MARK=^X40000000 ;V2.06 ; SPECIAL REORDERING-LABEL ALREADY ACCOUNTED FOR ;V2.02 ; SPECIAL FLAGS USED IN CHECKS TO SEE IF BLOCK CAN BE MOVED ;V2.02 ; USE PROGRAM_ELEMENT_L_FLAG_2 ;V2.02 PROGRAM_FLAG_M_VISITED=^X1 ;V2.02 PROGRAM_FLAG_M_VISITED_LEFT=^X2 ;V2.02 PROGRAM_FLAG_M_VISITED_RIGHT=^X4 ;V2.02 PROGRAM_FLAG_M_VISITED_UP=^X8 ;V2.02 PROGRAM_FLAG_M_VISITED_DOWN=^X10 ;V2.02 PROGRAM_FLAG_M_MARKED=^X20 ;V2.02 PROGRAM_ELEMENT_L_FLAG_2=16 ;V2.01 PROGRAM_ELEMENT_L_LABEL=20 ;V2.01 PROGRAM_ELEMENT_L_LINE_NUMBER=24 ;V2.01 PROGRAM_ELEMENT_L_X=28 ;DOWN IS POSITIVE-ZERO IS THE FIRST PIXEL ;V2.01 PROGRAM_ELEMENT_L_Y=32 ;RIGHT IS POSITIVE-ZERO IS THE SPINE ;V2.01 PROGRAM_ELEMENT_L_LENGTH=36 ;V2.01 PROGRAM_ELEMENT_L_LEFT_POINTER=40 ;V2.01 PROGRAM_ELEMENT_L_RIGHT_POINTER=44 ;V2.01 PROGRAM_ELEMENT_L_UP_POINTER=48 ;V2.01 PROGRAM_ELEMENT_L_DOWN_POINTER=52 ;V2.01 ; PLUSS FOR EACH SPECIFIC ACTION ; ; ACTION=0 CONNECTOR ELEMENT ONLY PROGRAM_LENGTH_ACTION_0=80 ;V2.01 PROGRAM_ELEMENT_L_LEFT_LABEL=56 ;V2.01 PROGRAM_ELEMENT_L_RIGHT_LABEL=60 ;V2.01 PROGRAM_ELEMENT_L_UP_LABEL=64 ;V2.01 PROGRAM_ELEMENT_L_DOWN_LABEL=68 ;V2.01 PROGRAM_ELEMENT_L_TOP_LEFT=72 ;V2.01 PROGRAM_ELEMENT_L_TOP_RIGHT=76 ;V2.01 ; ; ; ACTION=1,3,8,9,12,19,20 ; NO ADDITIONAL INFORMATION STORED PROGRAM_LENGTH_ACTION_1=56 ;V2.01 PROGRAM_LENGTH_ACTION_3=56 ;V2.01 PROGRAM_LENGTH_ACTION_8=56 ;V2.01 PROGRAM_LENGTH_ACTION_9=56 ;V2.01 PROGRAM_LENGTH_ACTION_12=56 ;V2.01 PROGRAM_LENGTH_ACTION_19=56 ;V2.01 PROGRAM_LENGTH_ACTION_20=56 ;V2.01 ; ; ACTION=2 I/O PROGRAM_LENGTH_ACTION_2=64 ;V2.01 PROGRAM_ELEMENT_L_END=56 ;V2.01 PROGRAM_ELEMENT_L_ERR=60 ;V2.01 ; ;V2.01 ; ACTIONS 6,7,17,18,23 TEXT STRING FOLLOWS ;V2.01 PROGRAM_LENGTH_ACTION_4=172 ;V2.01 PROGRAM_LENGTH_ACTION_6=172 ;V2.01 PROGRAM_LENGTH_ACTION_7=172 ;V2.01 PROGRAM_LENGTH_ACTION_17=172 ;V2.01 PROGRAM_LENGTH_ACTION_18=172 ;V2.01 PROGRAM_LENGTH_ACTION_23=172 ;V2.01 PROGRAM_ELEMENT_S_TEXT=68 ;V2.01 ; ; ACTION=5 ARITHMETIC IF PROGRAM_LENGTH_ACTION_5=68 ;V2.01 PROGRAM_ELEMENT_L_LESS_THAN=56 ;ACTUALLY POINTERS TO THE LABEL ;V2.01 PROGRAM_ELEMENT_L_EQUAL=60 ;SYMBOL TABLE ENTRY ;V2.01 PROGRAM_ELEMENT_L_GREATER_THAN=64 ;V2.01 ; ; ACTION=10,11 DO,DO WHILE PROGRAM_LENGTH_ACTION_10=172 ;V2.01 PROGRAM_LENGTH_ACTION_11=172 ;V2.01 PROGRAM_ELEMENT_L_LOOP_LABEL=56 ;POINTER TO TABLE ENTRY ;V2.01 ; ALSO INCLUDE PROGRAM_ELEMENT_S_TEXT ;V2.01 ; ; ACTION=13 SIMPLE GOTO PROGRAM_LENGTH_ACTION_13=60 ;V2.01 PROGRAM_ELEMENT_L_DEST_LABEL=56 ;POINTER TO TABLE ENTRY ;V2.01 ; ; ACTION=14 ASSIGNED GOTO PROGRAM_LENGTH_ACTION_14=60 ;V2.01 PROGRAM_ELEMENT_L_VAR_POINTER=56 ;POINTS TO ENTRY IN VAR TABLE ;V2.01 ; ACTION=15 COMPUTED GOTO PROGRAM_LENGTH_ACTION_15=60 ;DUMMY LENGTH AS COUNT OF ;V2.01 ;NUMBER OF LABELS VARIES PROGRAM_ELEMENT_L_COUNT=56 ;NUMBER OF DISTINCT LABELS ;V2.01 PROGRAM_ELEMENT_L_LIST=60 ;START OF LIST OF POINTERS ;V2.01 ;TO ENTRIES IN LABEL SYMBOL ;TABLE ; ACTION=16 ASSIGN PROGRAM_LENGTH_ACTION_16=64 ;V2.01 PROGRAM_ELEMENT_L_LABEL_POINTER=60 ;POINTS TO LABEL QUEUE ENTRY ;V2.01 PROGRAM_ELEMENT_L_VAR_POINTER=56 ;POINTS TO VAR QUEUE ENTRY ;V2.01 ; ACTION=21,22 SUBROUTINE/PROGRAM/FUNCTION/BLOCKDATA/ENTRY PROGRAM_LENGTH_ACTION_21=88 ;V2.01 PROGRAM_LENGTH_ACTION_22=88 ;V2.01 PROGRAM_ELEMENT_S_NAME=56 ;COUNTED STRING E.P. NAME ;V2.01 ; ACTION=24 CALL PROGRAM_LENGTH_ACTION_24=92 ;V2.01 ; PROGRAM_ELEMENT_S_NAME ;SAME AS FOR ACTIONS 21,22 PROGRAM_ELEMENT_L_CALL_COUNT=88 ;NUMBER OF ALTERNATE RETURNS ;V2.01 PROGRAM_ELEMENT_L_CALL_LIST=92 ;POINTERS TO LABEL ENTRIES ;V2.01 ; LENGTH IS A DUMMY-ACTUAL LENGTH IS DEPENDENT ON NUMBER OF ; ALTERNATE RETURNS ; ACTION=25 FLOW_CONNECTOR ;V2.06 PROGRAM_LENGTH_ACTION_25=60 ;V2.06 CHART_ACTION_M_FLOW_CONNECTOR=25 ;V2.06 PROGRAM_ELEMENT_L_FLOW_LABEL=56 ;POINTER TO LABEL ELEMENT FOR FLOW CONNECTOR;V2.06 .PAGE .SUBTITLE STORAGE USED FOR ACTUALL PICTURE DRAWING .PSECT PURE_DATA,RD,NOWRT,NOEXE,SHR,CON,GBL ; GENERATE THE TEMPLATES FOR THE VARIOUS PIXELS PIXEL_WIDTH=13 PIXEL_DEPTH=9 S_PIXEL_WIDTH=5 ;V3.23 S_PIXEL_DEPTH=3 ;V3.23 .IF GT, ;V3.23 MAX_DEPTH=PIXEL_DEPTH ;V3.23 .IFF ;V3.23 MAX_DEPTH=S_PIXEL_DEPTH ;V3.23 .ENDC ;V3.23 .MACRO GEN_PIXEL_LINE SYMBOL .NCHR NV,^?SYMBOL? .IIF NE,NV-PIXEL_WIDTH,.ERROR ;GEN_PIXEL_LINE INCORRECT WIDTH .IRPC CHR,^?SYMBOL? .IF IDN,^?CHR?,^? ? .BYTE 0 .IF_FALSE .BYTE ^A?CHR? .ENDC .ENDR .ENDM .MACRO GEN_S_PIXEL_LINE SYMBOL ;V3.23 .NCHR NV,^?SYMBOL? ;V3.23 .IIF NE,NV-S_PIXEL_WIDTH,.ERROR ;GEN_S_PIXEL_LINE INCORRECT WIDTH ;V3.23 .IRPC CHR,^?SYMBOL? ;V3.23 .IF IDN,^?CHR?,^? ? ;V3.23 .BYTE 0 ;V3.23 .IF_FALSE ;V3.23 .BYTE ^A?CHR? ;V3.23 .ENDC ;V3.23 .ENDR ;V3.23 .ENDM ;V3.23 PIXEL_TOP_LEFT: GEN_PIXEL_LINE ^?----->- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_TOP_LEFT: ;V3.23 GEN_S_PIXEL_LINE ^?->- ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_TOP_LEFT_OUT: GEN_PIXEL_LINE ^?-<----- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_TOP_LEFT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^?-<- ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_TOP_RIGHT: GEN_PIXEL_LINE ^? -<-----? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_TOP_RIGHT: ;V3.23 GEN_S_PIXEL_LINE ^? -<-? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_TOP_RIGHT_OUT: GEN_PIXEL_LINE ^? ----->-? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_TOP_RIGHT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ->-? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_LEFT_LOOP_BACK: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^?| ? GEN_PIXEL_LINE ^?| ? GEN_PIXEL_LINE ^?| ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_LEFT_LOOP_BACK: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^?| ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_RIGHT_LOOP_BACK: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? |? GEN_PIXEL_LINE ^? |? GEN_PIXEL_LINE ^? |? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_RIGHT_LOOP_BACK: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? |? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_BOTTOM_LEFT_OUT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^?<-----+ ? S_PIXEL_BOTTOM_LEFT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^?<-+ ? ;V3.23 PIXEL_BOTTOM_LEFT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^?----->+ ? S_PIXEL_BOTTOM_LEFT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^?->+ ? ;V3.23 PIXEL_BOTTOM_RIGHT_OUT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? +----->? S_PIXEL_BOTTOM_RIGHT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? +->? ;V3.23 PIXEL_BOTTOM_RIGHT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? +<-----? S_PIXEL_BOTTOM_RIGHT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? +<-? ;V3.23 PIXEL_LEFT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^?-> ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_LEFT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^?> ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_LEFT_OUT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^?-< ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_LEFT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^?< ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_RIGHT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? <-? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_RIGHT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? -? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_RIGHT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? >? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_UP: GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? V ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_UP: ;V3.23 GEN_S_PIXEL_LINE ^? V ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_UP_OUT: GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? ^ ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_UP_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ^ ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_DOWN: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ^ ? GEN_PIXEL_LINE ^? | ? S_PIXEL_DOWN: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ^ ? ;V3.23 PIXEL_DOWN_OUT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? V ? S_PIXEL_DOWN_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? V ? ;V3.23 PIXEL_FULL_UP: GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? V ? GEN_PIXEL_LINE ^? + ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FULL_UP: ;V3.23 GEN_S_PIXEL_LINE ^? V ? ;V3.23 GEN_S_PIXEL_LINE ^? + ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FULL_UP_OUT: GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? ^ ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? + ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FULL_UP_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ^ ? ;V3.23 GEN_S_PIXEL_LINE ^? + ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FULL_DOWN: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? + ? GEN_PIXEL_LINE ^? ^ ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? S_PIXEL_FULL_DOWN: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? + ? ;V3.23 GEN_S_PIXEL_LINE ^? ^ ? ;V3.23 PIXEL_FULL_DOWN_OUT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? + ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? V ? S_PIXEL_FULL_DOWN_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? + ? ;V3.23 GEN_S_PIXEL_LINE ^? V ? ;V3.23 PIXEL_FULL_LEFT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^?----->+ ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FULL_LEFT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^?->+ ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FULL_LEFT_OUT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^?-<----+ ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FULL_LEFT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^?-<+ ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FULL_RIGHT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? +<-----? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FULL_RIGHT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? +<-? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FULL_RIGHT_OUT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? +---->-? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FULL_RIGHT_OUT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? +>-? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FILL_RIGHT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? +---- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FILL_RIGHT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? +- ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FILL_LEFT: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ----+ ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FILL_LEFT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? -+ ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FILL_UP: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? + ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FILL_UP: ;V3.23 GEN_S_PIXEL_LINE ^? | ? ;V3.23 GEN_S_PIXEL_LINE ^? + ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FILL_DOWN: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? + ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? | ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_FILL_DOWN: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? + ? ;V3.23 GEN_S_PIXEL_LINE ^? | ? ;V3.23 PIXEL_TOP_JUNCTION: GEN_PIXEL_LINE ^? * ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_TOP_JUNCTION: ;V3.23 GEN_S_PIXEL_LINE ^? * ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_BOTTOM_JUNCTION: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? * ? S_PIXEL_BOTTOM_JUNCTION: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? * ? ;V3.23 PIXEL_JUNCTION: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? * ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_JUNCTION: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? * ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_DO: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? --------- ? ;V2.01 GEN_PIXEL_LINE ^? |DO | ? ;V2.01 GEN_PIXEL_LINE ^? | | ? ;V2.01 GEN_PIXEL_LINE ^? | | ? ;V2.01 GEN_PIXEL_LINE ^? --------- ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_DO: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? DO ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_CONTINUE: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? --------- ? ;V2.01 GEN_PIXEL_LINE ^? | CONT- | ? ;V2.01 GEN_PIXEL_LINE ^? | INUE | ? ;V2.01 GEN_PIXEL_LINE ^? | | ? ;V2.01 GEN_PIXEL_LINE ^? --------- ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_CONTINUE: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? CON ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_BOX: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? --------- ? GEN_PIXEL_LINE ^? | | ? GEN_PIXEL_LINE ^? | | ? GEN_PIXEL_LINE ^? | | ? GEN_PIXEL_LINE ^? --------- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_BOX: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? | | ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_CALL: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? --------- ? GEN_PIXEL_LINE ^? || || ? GEN_PIXEL_LINE ^? || || ? GEN_PIXEL_LINE ^? || || ? GEN_PIXEL_LINE ^? --------- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_CALL: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ||| ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IO: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ----- ? GEN_PIXEL_LINE ^? / / ? GEN_PIXEL_LINE ^? / / ? GEN_PIXEL_LINE ^? / / ? GEN_PIXEL_LINE ^? ----- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_IO: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? / / ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IF: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ^ ? GEN_PIXEL_LINE ^? / \ ? GEN_PIXEL_LINE ^? < > ? GEN_PIXEL_LINE ^? \ / ? GEN_PIXEL_LINE ^? V ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_IF: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? < > ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IF_LOGICAL: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ^ ? ;V2.01 GEN_PIXEL_LINE ^? / \ T ? ;V2.01 GEN_PIXEL_LINE ^? < > ? ;V2.01 GEN_PIXEL_LINE ^? \ / ? ;V2.01 GEN_PIXEL_LINE ^? V ? ;V2.01 GEN_PIXEL_LINE ^? F ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_IF_LOGICAL: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? < T ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IF_THEN: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ^ ? ;V2.01 GEN_PIXEL_LINE ^? / \ F ? ;V2.01 GEN_PIXEL_LINE ^? < > ? ;V2.01 GEN_PIXEL_LINE ^? \ / ? ;V2.01 GEN_PIXEL_LINE ^? V ? ;V2.01 GEN_PIXEL_LINE ^? T ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_IF_THEN: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? < F ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_GOTO: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ------- ? GEN_PIXEL_LINE ^? | \ ? GEN_PIXEL_LINE ^? | > ? GEN_PIXEL_LINE ^? | / ? GEN_PIXEL_LINE ^? ------- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_GOTO: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? > ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_ASSIGN: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ----- ? GEN_PIXEL_LINE ^? / \ ? GEN_PIXEL_LINE ^? < > ? GEN_PIXEL_LINE ^? \ / ? GEN_PIXEL_LINE ^? ----- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_ASSIGN: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? / \ ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_ENTRY: GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ----- ? GEN_PIXEL_LINE ^? ( ) ? GEN_PIXEL_LINE ^? ( ) ? GEN_PIXEL_LINE ^? ( ) ? GEN_PIXEL_LINE ^? ----- ? GEN_PIXEL_LINE ^? ? GEN_PIXEL_LINE ^? ? S_PIXEL_ENTRY: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ( ) ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_PAUSE: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? (PAUSE) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_PAUSE: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? (P) ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_STOP: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? ( STOP) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_STOP: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? (S) ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_RETURN: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? (RETURN) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_RETURN: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? (R) ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_END: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? ( END ) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ( ) ? ;V2.01 GEN_PIXEL_LINE ^? ----- ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_END: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? (E) ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_FLOW_CONNECTOR: ;V2.06 GEN_PIXEL_LINE ^? ? ;V2.06 GEN_PIXEL_LINE ^? ? ;V2.06 GEN_PIXEL_LINE ^? - ? ;V2.06 GEN_PIXEL_LINE ^? / \ ? ;V2.06 GEN_PIXEL_LINE ^? | | ? ;V2.06 GEN_PIXEL_LINE ^? \ / ? ;V2.06 GEN_PIXEL_LINE ^? - ? ;V2.06 GEN_PIXEL_LINE ^? ? ;V2.06 GEN_PIXEL_LINE ^? ? ;V2.06 S_PIXEL_FLOW_CONNECTOR: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? >() ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IO_END: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? END= ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_IO_END: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IO_ERR: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ERR= ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_IO_ERR: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IF_LT: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? < ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_IF_LT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IF_EQ: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? = ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_IF_EQ: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 PIXEL_IF_GT: ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? > ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 GEN_PIXEL_LINE ^? ? ;V2.01 S_PIXEL_IF_GT: ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 GEN_S_PIXEL_LINE ^? ? ;V3.23 .PSECT IMPURE_DATA DRAW_ACCROSS: .LONG 0 DRAW_DOWN: .LONG 0 CURRENT_CORNER: .LONG 0 OFFSET_CORNER: .LONG 0 PIXEL_LINES: ;THESE ARE THE LINES INTO WHICH ONE HORIZONTAL SCAN IS DRAWN .REPEAT MAX_DEPTH ;V3.23 .BLKB 132 .ENDR .PAGE .SUBTITLE OTHER IMPURE STORAGE NESTING_LEVEL: .LONG 0 DESCRIPTER: .LONG 0,0 FREE_1: .LONG 0 FREE_2: .LONG 0 ALLOCATE_1: .LONG 0 LABEL_STORAGE: .BLKB 6 STRING: .BLKB 132 ERROR_NUMBER: ;V3.02 .LONG 0 ;V3.02 .PAGE .SUBTITLE PURE STORAGE AREA .PSECT PURE_DATA,RD,NOWRT,NOEXE,SHR,CON,GBL CODE_1: .LONG 1 CODE_2: .LONG 2 CODE_3: .LONG 3 CODE_4: .LONG 4 CODE_5: .LONG 5 ALL_LABEL_ARG: .LONG 1 .ADDRESS 1$ 1$: .LONG LABEL_QUEUE_ELEMENT_LENGTH ALL_VAR_ARG: .LONG 1 .ADDRESS 1$ 1$: .LONG VARIABLE_ELEMENT_LENGTH FREE_ARG: .LONG 2 .ADDRESS FREE_1,FREE_2 ALLOCATE_ARG: .LONG 1 .ADDRESS ALLOCATE_1 CHART_ERROR_MSG: .ASCID /INDEX-F-Error Writeing to Chart Scratch file/ LOGICAL_IF_ERROR_MSG: .ASCID /INDEX-E-Logical IF contains illegal conditional action-line / PHASE_2_LEVEL_0_ERROR_MSG: .ASCID /INDEX-E-Block IF or DO statement out of position-line / PHASE_2_END_ERR_MSG: .ASCID /INDEX-F-End found inside Block IF or DO/ ;V3.16 PHASE_3_NO_DEST_ERR_MSG: .ASCID /INDEX-E-Non-existent label referenced at line / TOKEN_VAL: ;V2.01 .ASCID /%VAL/ ;V2.01 TOKEN_REF: ;V2.01 .ASCID /%REF/ ;V2.01 TOKEN_DESCR: ;V2.01 .ASCID /%DESCR/ ;V2.01 TOKEN_LOC: ;V2.01 .ASCID /%LOC/ ;V2.01 .PAGE .SUBTITLE CODE-STORE DATA FOR LATER FLOW CHART BUILD .PSECT CODE,RD,NOWRT,EXE,SHR,CON,GBL .ENTRY ACCUMULATE_CHART,^M ; ; OUTPUT TO SCRATCH FILE ELEMENTS WITH THE FOLLOWING FORMAT ; ; -------------------- ; ! Line Number ! 0 ; -------------------- ; ! label Number ! 4 ; -------------------- ; ! Action ! 8 ; -------------------- ; ! additional data ! 12 ; ; ; ! ! 60 ; -------------------- ; Length=128 bytes ;V2.01 ; SUMMARY OF ADDITIONAL OFFSETS ;V2.01 ; SYMBOL OFFSET ACTION ;V2.02 ; CHART_ELEMENT_L_END 12 2 ;V2.02 ; CHART_ELEMENT_L_LESS_THAN 12 5 ;V2.02 ; CHART_ELEMENT_L_DEST_LABEL 12 10,11,13,16 ;V2.02 ; CHART_ELEMENT_L_COUNT 12 15 ;V2.02 ; CHART_ELEMENT_S_NAME 12 21,22,24 ;V2.02 ; COUNTED STRING-32 BYTES ;V2.02 ; ;V2.02 ; CHART_ELEMENT_L_ERR 16 2 ;V2.02 ; CHART_ELEMENT_L_EQUAL 16 5 ;V2.02 ; CHART_ELEMENT_S_VARIABLE 16 14,16 ;V2.02 ; COUNTED STRING-32 BYTES ;V2.02 ; ;V2.02 ; CHART_ELEMENT_L_GREATER_THAN 20 5 ;V2.02 ; ;V2.02 ; CHART_ELEMENT_S_TEXT 24 4,5,6,7,10,11,17,18,23 ;V2.02 ; COUNTED STRING-104 BYTES) ;V2.02 ; ;V2.02 ; CHART_ELEMENT_L_CALL_COUNT 48 24 ;V2.02 ; ;V2.02 CHART_ELEMENT_L_LINE_NUMBER=0 ;CONTAINS THE BINARY LINE NUMBER ;OF THE CURRENT ACTION ELEMENT CHART_ELEMENT_L_LABEL_NUMBER=4 ;CONTAINS THE BINARY LABEL DEFINED ;AT THE CURRENT LINE. IF <0 IT IS ;AN INTERNALLY GENRATED LABEL CHART_ELEMENT_L_ACTION=8 ;DEFINE WHAT THIS ELEMENT REPRESENTS CHART_ACTION_M_NON_EXECUTEABLE=1 ;LINE CONTAINS NON EXECUTEABLE CODE ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_I_O=2 ;LINE IS I/O STATEMENT CHART_ELEMENT_L_END=12 ;BINARY LABEL OF END= CHART_ELEMENT_L_ERR=16 ;BINARY LABEL OF ERR= CHART_ACTION_M_CONTINUE=3 ;LINE IS A CONTINUE STATEMENT ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_IF_LOGICAL=4 ;LINE IS A LOGICAL IF ;NO ADDITIONAL DATA THIS ELEMENT ;BUT THE NEXT ELEMENT IS THE LOGICAL ;ACTION TAKEN CHART_ACTION_M_IF_ARITHMETIC=5 ;LINE IS ARITHMETIC IF ;INCLUDES 3 DATA ITEMS CHART_ELEMENT_L_LESS_THAN=12 ;BINARY LABEL OF .LT.BRANCH CHART_ELEMENT_L_EQUAL=16 ;BINARY LABEL OF .EQ. BRANCH CHART_ELEMENT_L_GREATER_THAN=20 ;BINARY LABEL OF .GT. BRANCH CHART_ACTION_M_IF_THEN=6;LINE IS START OF BLOCK IF ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_ELSE_IF=7;LINE IS ELSE IF ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_ELSE=8 ;LINE IS ELSE ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_ENDIF=9 ;LINE IS ENDIF ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_DO=10 ;LINE IS OLD STYLE DO CHART_ELEMENT_L_DEST_LABEL=12 ;DESTINATION LABEL (IF ANY) CHART_ACTION_M_DO_WHILE=11 ;LINE IS DO WHILE ;DESTINATION LABEL IF ANY CHART_ACTION_M_ENDDO=12 ;LINE IS ENDDO ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_GOTO=13 ;LINE IS SIMPLE GOTO ;DESTINATION LABEL CHART_ACTION_M_GOTO_ASSIGN=14 ;LINE IS ASSIGNED GOTO CHART_ELEMENT_S_VARIABLE=16 ;COUNTED STRING 1BYTE COUNT+31 CHRS CHART_ACTION_M_COMPUTED=15 ;LINE IS COMPUTED GOTO CHART_ELEMENT_L_COUNT=12 ;NUMBER OF LABELS IN GOTO ;ALL OF THE REST OF THIS ELEMET ;AND ALL OF AS MANY MORE SUCEEDING ;ELEMENTS ARE AVAILABLE TO HOLD ;SEQUENTIAL BINARY LABEL NUMBERS ;UP TO 12 HERE AND 16 IN NEXT M ELEMNTS CHART_ACTION_M_ASSIGN=16;ASSIGN LABEL TO INTEGER ;PASS LABEL NUMBER AND COUNTED STRING CHART_ACTION_M_STOP=17 ;STOP ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_RETURN=18;RETURN ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_EXECUTEABLE=19 ;EXECUTEABLE CODE STATEMENT ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_END=20 ;END ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_START=21 ;PROGRAM/SUBROUTINE CHART_ELEMENT_S_NAME=16 ;ENTRY POINT NAME CHART_ACTION_M_ENTRY=22 ;ENTRY STATEMENT ;ENTRY POINT NAME CHART_ACTION_M_PAUSE=23 ;PAUSE STATEMENT ;NO ADDITIONAL DATA REQUIRED CHART_ACTION_M_CALL=24 ;CALL STATEMENT ;ENTRY POINT NAME ;USES ;CHART_ELEMENT_S_NAME (32 BYTES LONG) CHART_ELEMENT_L_CALL_COUNT=48 ;COUNT OF NUMBER OF ALT RETURN ;LABELS,FOLLOWRED BY LIST ;CONTINUED ON SUBSEQUENT ;CHART BUFFER ELEMENTS ;AS NEEDED CHART_ELEMENT_S_TEXT=24 ;V2.01 CHART_ELEMENT_LENGTH=128 ;V2.01 ; ZERO THE CHART BUFFER ;V2.01 MOVC5 #0,NULL,#0,#CHART_ELEMENT_LENGTH,CHART_BUFFER ;V2.01 ; ; START BUILDING THE CHART DATA ELEMENT-FIRST THE LINE NUMBER ; MOVL SOURCE_LINE,CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER ;COPY LINE NUMBER MOVAL SOURCE_LINE+4,R11 ;GET START OF LINE TEXT ADDRESS MOVAL LABEL_STORAGE,R10 ;GET ADDR TO STORE LABEL ADDL3 #5,R11,R9 ;GET END OF SCAN ADDR IN COL 6 CLRL R8 ;CLEAR LEADING ZERO FLAG CLRL R7 ;CLEAR COUNTER 1$: CMPB #^A/ /,(R11) ;CHECK FOR BLANK-SKIP IT BEQL 10$ CMPB #9,(R11) ;CHECK FOR TAB-DONE SCAN BEQL 20$ TSTL R8 ;LEADING ZERO FLAG BNEQ 2$ CMPB #^A/0/,(R11) ;SEE IF IT IS A ZERO BEQL 10$ ;SKIP LEADING ZERO 2$: CMPB #^A/0/,(R11) ;SEE IF IT IS A NUMBER BGTR 20$ ;NO NUMBER-DONE CMPB #^A/9/,(R11) ;CHECK OTHER END BLSS 20$ INCL R8 ;SET LEADING ZERO FLAG MOVB (R11),(R10)+ ;SAVE DIGIT INCL R7 ;BUMP CHR COUNT 10$: INCL R11 ;NEXT CHR CMPL R11,R9 ;SEE IF DONE BLSSU 1$ ;NO-GO FOR NEXT CHR 20$: CLRL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER TSTL R7 ;SEE IF LABEL DEFINED BEQL 50$ ;NO-SKIP TO PROCESS TYPE MOVAL LABEL_STORAGE,DESCRIPTER+4 MOVL R7,DESCRIPTER PUSHL #1 ;SET UP TO CONVERT LABEL TO BINARY PUSHL #4 ;LENGTH PUSHAL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT ; CALL ROUTINE TO FIND QUEUE ENTRY WITH LABEL IN R0. ; IF IT DOES NOT EXIST-CREATE ONE AND PUT IT IN QUEUE ; RETURN ADDR OF ELEMENT IN R1 MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- LABEL_ELEMENT_L_DEFINED(R1) 50$: .PAGE .SUBTITLE DISPATCH TO TYPE LINE HANDLEING ROUTINES .SUBTITLE TABLE OF FORTRAN LINE TYPES TO ACTIONS ;V2.02 ; THIS IS A HANDY PLACE TO SUMMARIZE WHAT FORTRAN LINE TYPE EQUATE TO WHAT ACTION ;V2.02 ; TYPES ;V2.02 CASEL EVALUATION_ROUTINE_TOKEN,#5000,# ; ACTION ;V2.02 100$: .WORD CHART_ACCEPT-100$ ; 2-I/O ;V2.02 .WORD CHART_ASSIGN-100$ ; 16-ASSIGN FOR GOTO ;V2.02 .WORD CHART_ARITH-100$ ; 19-EXECUTEABLE STATEMENT ;V2.02 .WORD CHART_BACKSPACE-100$ ; 2-I/O ;V2.02 .WORD CHART_BLOCKDATA-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_BYTE-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_BYTE_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_CALL-100$ ; 24-CALL STATEMENT ;V2.02 .WORD CHART_CALLED_BY_ARG-100$ .WORD CHART_CALLING_ARG-100$ .WORD CHART_CHARACTER-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_CHARACTER_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_CLOSE-100$ ; 2-I/O ;V2.02 .WORD CHART_COMMON-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_COMMON_NAME-100$ .WORD CHART_COMPLEX-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_COMPLEX_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_CONTINUE-100$ ; 3-CONTINUE ;V2.02 .WORD CHART_DATA-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_DECODE-100$ ; 2-I/O ;V2.02 .WORD CHART_DEFINEFILE-100$ ; 2-I/O ;V2.02 .WORD CHART_DELETE_COMPLEX-100$ ; 2-I/O ;V2.02 .WORD CHART_DICTIONARY-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_DIMENSION-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_DO-100$ ; 10/11-DO/DO WHILE ;V2.02 .WORD CHART_DOUBLE_PRECISION-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_DOUBLE_PRECISION_FN-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_DOUBLE_COMPLEX-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_DOUBLE_CPLX_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_EQUIVALENCE-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_ELSE-100$ ; 8-BLOCK ELSE ;V2.02 .WORD CHART_ELSEIF-100$ ; 7-BLOCK ELSE IF ;V2.02 .WORD CHART_ENCODE-100$ ; 2-I/O ;V2.02 .WORD CHART_END-100$ ; 20-PROGRAM END ;V2.02 .WORD CHART_ENDDO-100$ ; 12-BLOCK ENDDO ;V2.02 .WORD CHART_ENDFILE-100$ ; 2-I/O ;V2.02 .WORD CHART_ENDIF-100$ ; 9-BLOCK ENDIF ;V2.02 .WORD CHART_ENDMAP-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_ENDSTRUCTURE-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_ENDUNION-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_ENTRY-100$ ; 22-ALT ENTRY POINT ;V2.02 .WORD CHART_ERROR-100$ ; 19-EXECUTEABLE ;V2.02 .WORD CHART_EXTERNAL-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_FORMAT-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_FIND_COMPLEX-100$ ; 2-I/O ;V2.02 .WORD CHART_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_GOTO-100$ ; 13/14/14-GOTO,ASS. GOTO,COMP.GOTO;V2.02 .WORD CHART_IF-100$ ; 4,5,6-ARITH,LOGICAL,BLOCK IF ;V2.02 .WORD CHART_INQUIRE-100$ ; 2-I/O ;V2.02 .WORD CHART_IMPLICITNONE-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_IMPLICIT-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_INCLUDE-100$ .WORD CHART_INTEGER-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_INTEGER_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_INTRINSIC-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_LABEL-100$ .WORD CHART_LOCAL_FUNCTION-100$ .WORD CHART_LOGICAL-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_LOGICAL_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_MAP-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_NAMELIST-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_NAMELIST_NAME-100$ .WORD CHART_OPEN-100$ ; 2-I/O ;V2.02 .WORD CHART_OPTION-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_PARAMETER-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_PAUSE-100$ ; 23-PAUSE ;V2.02 .WORD CHART_PRINT-100$ ; 2-I/O ;V2.02 .WORD CHART_PROGRAM-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_QUAD-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_QUAD_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_READ_SIMPLE-100$ ; 2-I/O ;V2.02 .WORD CHART_READ_COMPLEX-100$ ; 2-I/O ;V2.02 .WORD CHART_REAL-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_REAL_FUNCTION-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_REWRITE_COMPLEX-100$ ; 2-I/O ;V2.02 .WORD CHART_RECORD-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_RETURN-100$ ; 18-RETURN ;V2.02 .WORD CHART_REWIND-100$ ; 2-I/O ;V2.02 .WORD CHART_SAVE-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_STOP-100$ ; 17-STOP ;V2.02 .WORD CHART_STRUCTURE-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_SUBROUTINE-100$ ; 21-PROG,SUB.,FN ENTRY POINT NAME ;V2.02 .WORD CHART_TYPE-100$ ; 2-I/O ;V2.02 .WORD CHART_UNION-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_UNLOCK-100$ ; 2-I/O ;V2.02 .WORD CHART_USED-100$ .WORD CHART_VIRTUAL-100$ ; 1-NON EXECUTEABLE ;V2.02 .WORD CHART_VOLITILE-100$ ; 1-NON EXECUTEABLE ;V3.00 .WORD CHART_WRITE_SIMPLE-100$ ; 2-I/O ;V2.02 .WORD CHART_WRITE_COMPLEX-100$ ; 2-I/O ;V2.02 .PAGE .SUBTITLE NON EXISTENT STATMENTS OR IGNORED STATEMENTS CHART_CALLED_BY_ARG: CHART_CALLING_ARG: CHART_COMMON_NAME: CHART_LABEL: CHART_LOCAL_FUNCTION: CHART_NAMELIST_NAME: CHART_USED: CHART_INCLUDE: RET .PAGE .SUBTITLE NON EXECUTEABLE STATEMENTS,TYPE=1 CHART_BYTE: CHART_CHARACTER: CHART_COMMON: CHART_COMPLEX: CHART_DATA: CHART_DIMENSION: CHART_DOUBLE_PRECISION: CHART_DOUBLE_COMPLEX: CHART_EQUIVALENCE: CHART_EXTERNAL: CHART_FORMAT: CHART_IMPLICIT: CHART_IMPLICITNONE: CHART_INTEGER: CHART_INTRINSIC: CHART_LOGICAL: CHART_NAMELIST: CHART_OPTION: CHART_PARAMETER: CHART_QUAD: CHART_REAL: CHART_SAVE: CHART_VIRTUAL: CHART_DICTIONARY: ;V3.00 CHART_ENDMAP: ;V3.00 CHART_ENDSTRUCTURE: ;V3.00 CHART_ENDUNION: ;V3.00 CHART_MAP: ;V3.00 CHART_RECORD: ;V3.00 CHART_STRUCTURE: ;V3.00 CHART_UNION: ;V3.00 CHART_VOLITILE: ;V3.00 MOVL #CHART_ACTION_M_NON_EXECUTEABLE,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE I/O STATEMENTS-ACTION=2 CHART_ACCEPT: CHART_BACKSPACE: CHART_CLOSE: CHART_DECODE: CHART_DEFINEFILE: CHART_DELETE_COMPLEX: CHART_ENCODE: CHART_ENDFILE: CHART_FIND_COMPLEX: CHART_INQUIRE: CHART_OPEN: CHART_PRINT: CHART_READ_SIMPLE: CHART_READ_COMPLEX: CHART_REWRITE_COMPLEX: CHART_REWIND: CHART_TYPE: CHART_UNLOCK: CHART_WRITE_SIMPLE: CHART_WRITE_COMPLEX: CLRL CHART_BUFFER+CHART_ELEMENT_L_END CLRL CHART_BUFFER+CHART_ELEMENT_L_ERR MOVAL LINE_TOKEN_QUEUE,R11 ;GET TOKEN LINE MOVL (R11),R10 ;GET FIRST TOKEN-I/O STATEMENT ; LOOP TO END OF TOKEN STRING 1$: MOVL (R10),R10 ;GET NEXT TOKEN CMPL R10,R11 ;SEE IF DONE BNEQ 1001$ BRW 2$ 1001$: CMPW #TOKEN_END_EQUAL,12(R10);IS IT END= BNEQ 3$ MOVL (R10),R10 ;GET NEXT TOKEN WITH LABEL INFO CVTWL 14(R10),R8 ;GET LABEL STRING LENGTH SUBL3 #16,R8,DESCRIPTER MOVAL 16(R10),DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHAL CHART_BUFFER+CHART_ELEMENT_L_END PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL CHART_BUFFER+CHART_ELEMENT_L_END,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) BRB 1$ 3$: CMPW #TOKEN_ERR,12(R10) ;IS IT ERR= BNEQ 1$ MOVL (R10),R10 ;GET NEXT TOKEN WITH LABEL INFO CVTWL 14(R10),R8 ;GET LABEL STRING LENGTH SUBL3 #16,R8,DESCRIPTER MOVAL 16(R10),DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHAL CHART_BUFFER+CHART_ELEMENT_L_ERR PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL CHART_BUFFER+CHART_ELEMENT_L_ERR,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) BRW 1$ 2$: MOVL #CHART_ACTION_M_I_O,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE LINE IS A CONTINUE STATEMENT-ACTION=3 CHART_CONTINUE: MOVL #CHART_ACTION_M_CONTINUE,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE ALL THE IF'S ACTION=4,5,6 CHART_IF: MOVAL LINE_TOKEN_QUEUE,R11 ;GET TOKEN LINE MOVL @(R11),R10 ;GET FIRST TOKEN AFTER "IF" MOVL #1,R9 ;SET THE PARREN LEVEL COUNTER ; LOOP TILL OUT OF LOGICAL EXPRESSION -ZERO LEVEL PARREN FOUND 1$: MOVL (R10),R10 ;NEXT ELEMENT CMPL R10,R11 ;SEE IF ERROR-DONE BNEQ 2$ RET ;IGNORE THIS ENTIRE LINE 2$: CMPW #TOKEN_LEFT_PARREN,12(R10) BNEQ 7$ INCL R9 BRB 1007$ ;V2.01 7$: CMPW #TOKEN_RIGHT_PARREN,12(R10) BNEQ 1007$ ;V2.01 DECL R9 BGTR 1007$ ;V2.01 BRB 2007$ ;V2.01 1007$:; LOAD TEST STRING WITH IF TEST ;V2.01 CALLG NULL,ADD_TOKEN_TO_TEXT ;CONVERT TOKEN TO TEXT AND ADD TO STR ;V2.01 BRB 1$ ;CONTINUE TO NEXT TOKEN ;V2.01 ; HAVE SCANNED TO ACTION PART OF IF STATEMENT-NOW TO SEE WHAT TYPE ; OF IF IT IS 2007$: MOVL (R10),R10 ;GET FIRST ACTION TOKEN ;V2.01 CMPW #TOKEN_THEN,12(R10) ;IF()THEN? BNEQ 3$ ;NO MOVL #CHART_ACTION_M_IF_THEN,CHART_BUFFER+CHART_ELEMENT_L_ACTION CALLG NULL,OUTPUT_TO_CHART RET 3$: CMPW #TOKEN_NUMBER,12(R10) ;IS IT IF()L1,L2,L3 BEQL 4$ ;YES-HANDLE LAST MOVL #CHART_ACTION_M_IF_LOGICAL,CHART_BUFFER+CHART_ELEMENT_L_ACTION CALLG NULL,OUTPUT_TO_CHART RET 4$: MOVL #CHART_ACTION_M_IF_ARITHMETIC,CHART_BUFFER+CHART_ELEMENT_L_ACTION ; EXTRACT EACH OF THE LABELS AND PUT INTO THE CHART_BUFFER ; THE LABELS ARE STORED IN SAME ORDER IN CHART_BUFFER AS THEY OCCOUR ; IN THE SOURCE MOVAL CHART_BUFFER+CHART_ELEMENT_L_LESS_THAN,R9 .REPEAT 3 CVTWL 14(R10),R8 ;GET STRING LENGTH SUBL3 #16,R8,DESCRIPTER MOVAL 16(R10),DESCRIPTER+4 ;GET STRING ADD PUSHL #0 ;CVT STRING TO BINARY PUSHL #4 PUSHL R9 PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL (R9),R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) ADDL2 #4,R9 ;NEXT LABEL MOVL @(R10),R10 ;SKIP COMMA TO NEXT LABEL .ENDR CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE LINE IS ELSEIF ACTION=7 CHART_ELSEIF: MOVL #CHART_ACTION_M_ELSE_IF,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVAL LINE_TOKEN_QUEUE,R11 ;GET TOKEN LINE ;V2.01 MOVL @(R11),R10 ;GET FIRST TOKEN AFTER "ELSEIF" ;V2.01 MOVL #1,R9 ;SET THE PARREN LEVEL COUNTER ;V2.01 ; LOOP TILL OUT OF LOGICAL EXPRESSION -ZERO LEVEL PARREN FOUND ;V2.01 1$: MOVL (R10),R10 ;NEXT ELEMENT ;V2.01 CMPL R10,R11 ;SEE IF ERROR-DONE ;V2.01 BNEQ 2$ ;V2.01 RET ;IGNORE THIS ENTIRE LINE ;V2.01 2$: CMPW #TOKEN_LEFT_PARREN,12(R10) ;V2.01 BNEQ 7$ ;V2.01 INCL R9 ;V2.01 BRB 1007$ ;V2.01 7$: CMPW #TOKEN_RIGHT_PARREN,12(R10) ;V2.01 BNEQ 1007$ ;V2.01 DECL R9 ;V2.01 BGTR 1007$ ;V2.01 BRB 2007$ ;V2.01 1007$:; LOAD TEST STRING WITH ELSEIF TEST ;V2.01 CALLG NULL,ADD_TOKEN_TO_TEXT ;CONVERT TOKEN TO TEXT AND ADD TO STR ;V2.01 BRB 1$ ;CONTINUE TO NEXT TOKEN ;V2.01 ; HAVE SCANNED TO THEN PART OF ELSEIF STATEMENT-DONE ;V2.01 2007$: CALLG NULL,OUTPUT_TO_CHART ;V2.01 RET .PAGE .SUBTITLE LINE IS ELSE-ACTION=8 CHART_ELSE: MOVL #CHART_ACTION_M_ELSE,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE LINE IS ENDIF-ACTION=9 CHART_ENDIF: MOVL #CHART_ACTION_M_ENDIF,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE DO,DO WHILE-ACTION=10,11 CHART_DO: MOVAL LINE_TOKEN_QUEUE,R11 ;GET LINE TOKENS FOR SCANNING MOVL @(R11),R10 ;GET TO POTENTIAL LABEL CLRL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL CMPW #TOKEN_NUMBER,12(R10) ;SEE IF LABEL BNEQ 10$ ;NO-SKIP TO TYPE DO CHECK ; GET THE LABEL CVTWL 14(R10),R9 SUBL3 #16,R9,DESCRIPTER MOVAL 16(R10),DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHAL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) MOVL (R10),R10 ;GET NEXT TOKEN ;V2.01 10$: CMPW #TOKEN_COMMA,12(R10) ;IF IT IS A COMMA-SKIP IT ;V2.01 BNEQ 11$ MOVL (R10),R10 11$: CMPW #TOKEN_WHILE,12(R10) ;SEE IF DO WHILE BNEQ 12$ MOVL #CHART_ACTION_M_DO_WHILE,CHART_BUFFER+CHART_ELEMENT_L_ACTION ; LOAD TEST STRING WITH WHILE TEST ;V2.01 MOVAL LINE_TOKEN_QUEUE,R9 ;GET POINTER TO HEADER OF LINE QUEUE ;V2.01 MOVL (R10),R10 ;SET UP TO SKIP OPENING PARREN ;V2.01 1$: MOVL (R10),R10 ;GET NEXT TOKEN ;V2.01 CMPL R10,R9 ;SEE IF DONE ;V2.01 BEQL 2$ ;FINI ;V2.01 CMPW #TOKEN_RIGHT_PARREN,12(R10) ;SEE IF RIGHT PARREN ;V2.01 BNEQ 3$ ;NO ;V2.01 CMPL (R10),R9 ;IS NEXT TOKEN END OF STRING ;V2.01 BEQL 2$ ;YES-SCAN COMPLETED ;V2.01 3$: CALLG NULL,ADD_TOKEN_TO_TEXT ;CONVERT TOKEN TO TEXT AND ADD TO STR ;V2.01 BRB 1$ ;CONTINUE TO NEXT TOKEN ;V2.01 2$: ;TEXT SCAN COMPLETED ;V2.01 BRB 13$ 12$: MOVL #CHART_ACTION_M_DO,CHART_BUFFER+CHART_ELEMENT_L_ACTION ; LOAD TEST STRING WITH LOOP COMMAND ;V2.01 MOVAL LINE_TOKEN_QUEUE,R9 ;GET POINTER TO HEADER OF LINE QUEUE ;V2.01 2012$: CMPL R10,R9 ;SEE IF DONE ;V2.01 BEQL 1012$ ;FINI ;V2.01 CALLG NULL,ADD_TOKEN_TO_TEXT ;CONVERT TOKEN TO TEXT AND ADD TO STR ;V2.01 MOVL (R10),R10 ;GET NEXT TOKEN ;V2.01 BRB 2012$ ;CONTINUE TO NEXT TOKEN ;V2.01 1012$: ;TEXT SCAN COMPLETED ;V2.01 13$: CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE LINE IS ENDDO-ACTION=12 CHART_ENDDO: MOVL #CHART_ACTION_M_ENDDO,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE GOTO, IMMEDIATE,COMPUTED OR ASSIGNED ACTION=13,14,15 CHART_GOTO: MOVAL LINE_TOKEN_QUEUE,R11 ;GET LINE TO PARSE MOVL @(R11),R10 ;POINT TO SECOND TOKEN CMPW #TOKEN_NUMBER,12(R10) ;SEE IF SIMPLE FORM BNEQ 1$ ;NO MOVL #CHART_ACTION_M_GOTO,CHART_BUFFER+CHART_ELEMENT_L_ACTION ; GET THE LABEL CVTWL 14(R10),R9 SUBL3 #16,R9,DESCRIPTER MOVAL 16(R10),DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHAL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) CALLG NULL,OUTPUT_TO_CHART RET 1$: CMPW #TOKEN_IDENTIFIER,12(R10) ;ASSIGNED GTO TO ? BNEQ 2$ MOVL #CHART_ACTION_M_GOTO_ASSIGN,CHART_BUFFER+CHART_ELEMENT_L_ACTION CVTWL 14(R10),R9 SUBL2 #16,R9 MOVB R9,CHART_BUFFER+CHART_ELEMENT_S_VARIABLE MOVAL 16(R10),R8 MOVC5 R9,(R8),#0,#31,CHART_BUFFER+CHART_ELEMENT_S_VARIABLE+1 MOVL R9,R0 MOVL R8,R1 CALLG NULL,FIND_INSERT_VAR_QUEUE_ELEMENT CALLG NULL,OUTPUT_TO_CHART RET 2$: ;WE HAVE THE BIGGE-COMPUTED GOTO MOVL #CHART_ACTION_M_COMPUTED,CHART_BUFFER+CHART_ELEMENT_L_ACTION CLRL R9 ;CLEAR COUNTER MOVL R10,R8 ;USE COPY OF POINTER TO INCREMENT 3$: MOVL (R8),R8 ;NEXT TOKEN CMPL R8,R11 ;SEE IF DONE-WRONG WAY BEQL 4$ CMPW #TOKEN_RIGHT_PARREN,12(R8) ;SEE IF DONE BEQL 4$ CMPW #TOKEN_NUMBER,12(R8) ;SEE IF LABEL BNEQ 3$ ;NO INCL R9 ;BUMP COUNTER BRB 3$ ;AND CONTINUE 4$: MOVL R9,CHART_BUFFER+CHART_ELEMENT_L_COUNT ;LOAD COUNT ; NOW LOOP THROUGH LIST OF LABELS TO LOAD BUFFER AND LABEL ; COME FROM LIST MOVAL CHART_BUFFER+CHART_ELEMENT_LENGTH,R9 ;SET UP END OF BUFFER POINTER ;V2.01 MOVAL CHART_BUFFER+CHART_ELEMENT_L_COUNT+4,R8 ; ; REGISTER ALLOCATION ; R11 ADDR OF START OF LINE TOKEN QUEUE ; R10 CURRENT TOKEN BEING EXAMINED ; R9 ADDR OF END OF CHART_BUFFER ; R8 ADD OF NEXT LOAD POS IN CHART_BUFFER 5$: MOVL (R10),R10 ;NEXT TOKEN CMPL R10,R11 ;SEE IF DONE-WRONG WAY BEQL 6$ CMPW #TOKEN_RIGHT_PARREN,12(R10) ;SEE IF DONE BEQL 6$ CMPW #TOKEN_NUMBER,12(R10) ;SEE IF LABEL BNEQ 5$ ;NO CVTWL 14(R10),R7 SUBL3 #16,R7,DESCRIPTER MOVAL 16(R10),DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHAL (R8)+ PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL -4(R8),R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) CMPL R8,R9 ;SEE IF BUFFER IS FULL BLSSU 7$ ;NOT YET CALLG NULL,OUTPUT_TO_CHART ;YES-OUTPUT MOVAL CHART_BUFFER,R8 ;AND START ON NEXT ELEMENT 7$: BRW 5$ 6$: CMPL R8,#CHART_BUFFER ;SEE IF NEED TO OUTPUT BUFFER BEQL 8$ CALLG NULL,OUTPUT_TO_CHART 8$: RET .PAGE .SUBTITLE ASSIGN-ACTION=16 CHART_ASSIGN: MOVL #CHART_ACTION_M_ASSIGN,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVAL LINE_TOKEN_QUEUE,R11 ;GET THE QUEUE MOVL @(R11),R10 ;POINT TO TOKEN CONTAINING LABEL NUMBER MOVAL 16(R10),DESCRIPTER+4 ;CREATE DESCRIPTER OF STRING SUBW3 #16,14(R10),DESCRIPTER CLRW DESCRIPTER+2 PUSHL #0 ;CONVERT TO BINARY PUSHL #4 PUSHAL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) MOVL @(R10),R10 ;GET ASSIGNED VARIABLE TOKEN CVTWL 14(R10),R9 ;GET LENGTH SUBL2 #16,R9 CVTLB R9,CHART_BUFFER+CHART_ELEMENT_S_VARIABLE MOVC5 R9,16(R10),#0,#31,CHART_BUFFER+CHART_ELEMENT_S_VARIABLE+1 MOVL R9,R0 MOVAL 16(R10),R1 ; ; CALL FIND_INSERT_VAR_QUEUE_ELEMENT ; SEND R0=COUNT ; R1=ADDR OF STRING ; RETURN R2 ADDR OF VAR QUEUE ELEMENT CALLG NULL,FIND_INSERT_VAR_QUEUE_ELEMENT MOVAL VARIABLE_ELEMENT_L_LIST(R2),R11 MOVAL 64(R2),R8 11$: TSTL (R11) ;LOOK FOR EMPTY SLOT BEQL 2$ ;FOUND ONE CMPL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,(R11)+;LOOK FOR DUP. BEQL 102$ ;FOUND DUPLICATE NO UPDATE CMPL R11,R8 ;SEE IF DONE BLSSU 11$ ;NO-CHECK NEXT ENTRY ; INITIAL LIST IS FULL-GO TO EXTENTIONS TSTL VARIABLE_ELEMENT_L_EXTENTION(R2) ;SEE IF EXTENTION USED BNEQ 1$ ;GO CHECK EXTENTION CALLG ALL_VAR_ARG,ALLOCATE INCL F_C_VAR_EXT ;V2.01 MOVL R0,VARIABLE_ELEMENT_L_EXTENTION(R2) ;LOAD THE EXTENTION ADD INCL VARIABLE_ELEMENT_L_COUNT(R2) ;ADD TO COUNT OF ELEMENTS MOVL R0,R11 MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,- VARIABLE_EXTENTION_L_LIST(R11) CALLG NULL,OUTPUT_TO_CHART RET 2$: MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,(R11) INCL VARIABLE_ELEMENT_L_COUNT(R2) ;ADD TO COUNT OF ELEMENTS 102$: CALLG NULL,OUTPUT_TO_CHART RET 1$: PUSHR #^M ;SAVE POINTER TO 1'ST MOVL VARIABLE_ELEMENT_L_EXTENTION(R2),R2 4$: MOVAL VARIABLE_EXTENTION_L_LIST(R2),R3 MOVAL 64(R2),R4 5$: TSTL (R3) ;SEE IF EMPTY BEQL 10$ CMPL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,(R3)+ BEQL 110$ ;DONT BOTHER ENTERING DUPLICATE BRB 5$ ; ELEMENT IS FULL-GO TO NEXT EXTENTION TSTL VARIABLE_EXTENTION_L_EXTENTION(R2) BEQL 3$ ;NEED NEW EXTENTION MOVL VARIABLE_EXTENTION_L_EXTENTION(R2),(R2) BRB 4$ 3$: CALLG ALL_VAR_ARG,ALLOCATE INCL F_C_VAR_EXT ;V2.01 MOVL R0,VARIABLE_EXTENTION_L_EXTENTION(R2) ;LOAD THE EXTENTION ADD MOVL R0,R11 MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,- VARIABLE_EXTENTION_L_LIST(R11) CALLG NULL,OUTPUT_TO_CHART POPR #^M INCL VARIABLE_ELEMENT_L_COUNT(R2) ;ADD TO COUNT OF ELEMENTS RET 10$: MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,(R3) POPR #^M INCL VARIABLE_ELEMENT_L_COUNT(R2) ;ADD TO COUNT OF ELEMENTS 110$: CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE STOP-ACTION=17 CHART_STOP: MOVL #CHART_ACTION_M_STOP,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVL LINE_TOKEN_QUEUE,R10 ;GET POINTER TO STOP ;V2.01 MOVAL LINE_TOKEN_QUEUE,R9 ;GET POINTER TO HEADER OF LINE QUEUE ;V2.01 1$: MOVL (R10),R10 ;GET NEXT TOKEN ;V2.01 CMPL R10,R9 ;SEE IF DONE ;V2.01 BEQL 2$ ;FINI ;V2.01 CALLG NULL,ADD_TOKEN_TO_TEXT ;CONVERT TOKEN TO TEXT AND ADD TO STR ;V2.01 BRB 1$ ;CONTINUE TO NEXT TOKEN ;V2.01 2$: ;TEXT SCAN COMPLETED ;V2.01 CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE RETURN-ACTION=18 CHART_RETURN: MOVL #CHART_ACTION_M_RETURN,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVL LINE_TOKEN_QUEUE,R10 ;GET POINTER TO RETURN ;V2.01 MOVAL LINE_TOKEN_QUEUE,R9 ;GET POINTER TO HEADER OF LINE QUEUE ;V2.01 1$: MOVL (R10),R10 ;GET NEXT TOKEN ;V2.01 CMPL R10,R9 ;SEE IF DONE ;V2.01 BEQL 2$ ;FINI ;V2.01 CALLG NULL,ADD_TOKEN_TO_TEXT ;CONVERT TOKEN TO TEXT AND ADD TO STR ;V2.01 BRB 1$ ;CONTINUE TO NEXT TOKEN ;V2.01 2$: ;TEXT SCAN COMPLETED ;V2.01 CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE EXECUTEABLE STATEMENTS ACTION=19 CHART_ARITH: CHART_ERROR: MOVL #CHART_ACTION_M_EXECUTEABLE,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE END-ACTION=20 CHART_END: MOVL #CHART_ACTION_M_END,- CHART_ELEMENT_L_ACTION+CHART_BUFFER CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE START OF MODULE ACTION=21 CHART_BLOCKDATA: CHART_BYTE_FUNCTION: CHART_CHARACTER_FUNCTION: CHART_COMPLEX_FUNCTION: CHART_DOUBLE_PRECISION_FN: CHART_DOUBLE_CPLX_FUNCTION: CHART_FUNCTION: CHART_INTEGER_FUNCTION: CHART_LOGICAL_FUNCTION: CHART_PROGRAM: CHART_QUAD_FUNCTION: CHART_REAL_FUNCTION: CHART_SUBROUTINE: MOVL #CHART_ACTION_M_START,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVAL LINE_TOKEN_QUEUE,R11 ;GET START OF LINE QUEUE MOVL @(R11),R10 ;GET ENTRY POINT NAME CLRL R9 3$: CMPL R10,R11 ;SEE IF LOOP AROUND (UNNAMED BLOCKDATA) ;V2.01 BEQL 1$ CMPW #TOKEN_IDENTIFIER,12(R10);MUST BE AN IDENTIFIER BEQL 2$ ;V2.01 MOVL (R10),R10 ;V2.01 BRB 3$ ;V2.01 2$: CVTWL 14(R10),R9 ;GET ID STRING LENGTH SUBL2 #16,R9 1$: MOVB R9,CHART_ELEMENT_S_NAME+CHART_BUFFER MOVC5 R9,16(R10),#0,#31,CHART_BUFFER+CHART_ELEMENT_S_NAME+1 CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE ENTRY ACTION=22 CHART_ENTRY: MOVL #CHART_ACTION_M_ENTRY,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVAL LINE_TOKEN_QUEUE,R11 ;GET START OF LINE QUEUE MOVL @(R11),R10 ;GET ENTRY POINT NAME CLRL R9 CMPL R10,R11 ;SEE IF LOOP AROUND BEQL 1$ CMPW #TOKEN_IDENTIFIER,12(R10);MUST BE AN IDENTIFIER BNEQ 1$ CVTWL 14(R10),R9 ;GET ID STRING LENGTH SUBL2 #16,R9 1$: MOVB R9,CHART_ELEMENT_S_NAME+CHART_BUFFER MOVC5 R9,16(R10),#0,#31,CHART_BUFFER+CHART_ELEMENT_S_NAME+1 CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE PAUSE-ACTION=23 CHART_PAUSE: MOVL #CHART_ACTION_M_PAUSE,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVL LINE_TOKEN_QUEUE,R10 ;GET POINTER TO PAUSE ;V2.01 MOVAL LINE_TOKEN_QUEUE,R9 ;GET POINTER TO HEADER OF LINE QUEUE ;V2.01 1$: MOVL (R10),R10 ;GET NEXT TOKEN ;V2.01 CMPL R10,R9 ;SEE IF DONE ;V2.01 BEQL 2$ ;FINI ;V2.01 CALLG NULL,ADD_TOKEN_TO_TEXT ;CONVERT TOKEN TO TEXT AND ADD TO STR ;V2.01 BRB 1$ ;CONTINUE TO NEXT TOKEN ;V2.01 2$: ;TEXT SCAN COMPLETED ;V2.01 CALLG NULL,OUTPUT_TO_CHART RET .PAGE .SUBTITLE CALL ACTION=24 CHART_CALL: MOVL #CHART_ACTION_M_CALL,- CHART_ELEMENT_L_ACTION+CHART_BUFFER MOVAL LINE_TOKEN_QUEUE,R11 ;GET START OF LINE QUEUE MOVL @(R11),R10 ;GET ENTRY POINT NAME CLRL R9 CMPL R10,R11 ;SEE IF LOOP AROUND BEQL 1$ CMPW #TOKEN_IDENTIFIER,12(R10);MUST BE AN IDENTIFIER BNEQ 1$ CVTWL 14(R10),R9 ;GET ID STRING LENGTH SUBL2 #16,R9 1$: MOVB R9,CHART_ELEMENT_S_NAME+CHART_BUFFER MOVC5 R9,16(R10),#0,#31,CHART_BUFFER+CHART_ELEMENT_S_NAME+1 CLRL CHART_BUFFER+CHART_ELEMENT_L_CALL_COUNT 2$: MOVL (R10),R10 CMPL R10,R11 BEQL 10$ CMPW #TOKEN_COMMA,12(R10) ;SEE IF START OF NEW ARG BEQL 3$ CMPW #TOKEN_LEFT_PARREN,12(R10) BNEQ 2$ 3$: ;THE NEXT TWO TOKENS COULD BE AN ALT RETURN LABEL-CHEK FOR * & MOVL (R10),R10 CMPL R10,R11 BEQL 10$ CMPW #TOKEN_ASTERISK,12(R10) BEQL 4$ CMPW #TOKEN_AMPERSAND,12(R10) BNEQ 2$ 4$:; IF THE NEXT TOKEN IS A NUMBER(SHOULD BE) IT IS A LABEL MOVL (R10),R10 CMPL R10,R11 BEQL 10$ CMPW #TOKEN_NUMBER,12(R10) BNEQ 2$ INCL CHART_BUFFER+CHART_ELEMENT_L_CALL_COUNT BRB 2$ 10$: ;FIRST PASS OVER THE TOKEN STRING IS COMPLETE AND WE HAVE A COUNT ;OF THE NUMBER OF ALT RETURNS TO CONTEND WITH MOVL CHART_BUFFER+CHART_ELEMENT_L_CALL_COUNT,R9 BNEQ 11$ CALLG NULL,OUTPUT_TO_CHART ;NO ALT RETURNS RET ; GET THE ALT RETURNS AND PUT INTO CHART BUFFER(S) AS REQUIRED 11$: MOVL R11,R10 MOVAL CHART_BUFFER+CHART_ELEMENT_L_CALL_COUNT+4,R8 MOVAL CHART_BUFFER+CHART_ELEMENT_LENGTH,R7 ;V2.01 ; REGISTER ALLOCATION ; R11 START OF TOKEN QUEUE ; R10 CURRENT TOKEN BEING EXAMINED ; R9 NUMBER OF ALT RETURNS ; R8 NEXT STORAGE POSITION OF LABEL ; R7 END OF STORAGE IN BUFFER 12$: MOVL (R10),R10 CMPW #TOKEN_COMMA,12(R10) BEQL 13$ CMPW #TOKEN_LEFT_PARREN,12(R10) BNEQ 12$ 13$: MOVL (R10),R10 CMPW #TOKEN_ASTERISK,12(R10) BEQL 14$ CMPW #TOKEN_AMPERSAND,12(R10) BNEQ 12$ 14$: MOVL (R10),R10 CMPW #TOKEN_NUMBER,12(R10) BNEQ 12$ CVTWL 14(R10),R6 SUBL3 #16,R6,DESCRIPTER MOVAL 16(R10),DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHAL (R8)+ PUSHAL DESCRIPTER CALLS #4,G^OTS$CVT_TI_L MOVL -4(R8),R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BISL2 #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1) CMPL R8,R7 BLSSU 15$ CALLG NULL,OUTPUT_TO_CHART MOVAL CHART_BUFFER,R8 15$: DECL R9 BLEQ 16$ BRW 12$ 16$: CMPL R8,#CHART_BUFFER BEQL 17$ CALLG NULL,OUTPUT_TO_CHART 17$: RET .PAGE ;V2.01 .SUBTITLE ADD TOKEN TO TEXT STRING ;V2.01 .ENTRY ADD_TOKEN_TO_TEXT,^M ;V2.01 ; ADD THE TOKEN POINTED TO BY R10 TO THE END OF THE TEXT STRING IN CHART BUFFER ;V2.01 CVTBL CHART_BUFFER+CHART_ELEMENT_S_TEXT,R9 ;GET CURRENT LENGTH OF STRING ;V2.01 MOVAL CHART_BUFFER+CHART_ELEMENT_S_TEXT+1,R8 ;GET STARTING ADDR OF REST OF ST;V2.01 ADDL2 R9,R8 ;STRING FOR STORAGE ;V2.01 MOVAL CHART_BUFFER+CHART_ELEMENT_LENGTH,R7 ;GET POINTER TO END OF STRING ;V2.01 CMPL R7,R8 ;SEE IF FULL ;V2.01 BGTRU 1$ ;IF STILL ROOM CONTINUE ;V2.01 RET ;NO ROOM RETURN ;V2.01 1$: SUBL3 R8,R7,R9 ;REMAINING LENGTH OF TEXT AREA ;V2.01 CVTWL 14(R10),R7 ;GET SIZE OF STRING ;V2.01 SUBL2 #16,R7 ;V2.01 BLEQ 2$ ;TOKEN ONLY-NO STRING IN ELEMENT;V2.01 MOVC5 R7,16(R10),#0,R9,(R8) ;COPY STRING ;V2.01 SUBL2 R0,R7 ;UPDATE NUM OF CHRS IN STR ;V2.01 ADDB2 R7,CHART_BUFFER+CHART_ELEMENT_S_TEXT ;V2.01 RET ;V2.01 2$: ;TRANSLATE TOKEN TO TEXT AND INSERT INTO STRING ;V2.01 CMPW #1000,12(R10) ;IS IT LESS THAN 1000 ;V2.01 BLEQ 3$ ;NO-GO CHECK WHAT TABLE ITS IN ;V2.01 ; TOKEN IS LESS THAN 1000-ONLY POSSABLE VALID INPUT HERE IS TOKEN_PCT_XXX, ALL ;V2.01 ; ALL OTHERS ALREADY CONTAIN STRINGS WHICH HAVE BEEN COPIED OR ARE IGNORED ;V2.01 ; R10 ;TOKEN BEING TRANSLATED ;V2.01 ; R9 ;OUTPUT STRING LENGTH REMAINING ;V2.01 ; R8 ;OUTPUT STRING FIRST EMPTY CHAR LOC ;V2.01 ; R7 ;POINTER TO TOKEN DESCRIPTER ;V2.01 CMPW #TOKEN_PCT_VAL,12(R10) ;V2.01 BNEQ 4$ ;V2.01 MOVAL TOKEN_VAL,R7 ;V2.01 BRW 100$ ;V2.01 4$: CMPW #TOKEN_PCT_REF,12(R10) ;V2.01 BNEQ 5$ ;V2.01 MOVAL TOKEN_REF,R7 ;V2.01 BRW 100$ ;V2.01 5$: CMPW #TOKEN_PCT_DESCR,12(R10) ;V2.01 BNEQ 6$ ;V2.01 MOVAL TOKEN_DESCR,R7 ;V2.01 BRW 100$ ;V2.01 6$: CMPW #TOKEN_PCT_LOC,12(R10) ;V2.01 BNEQ 7$ ;V2.01 MOVAL TOKEN_LOC,R7 ;V2.01 BRW 100$ ;V2.01 7$:; ENTER KEY_WORD_TABLE ;V2.01 CVTWL 12(R10),R0 ;V2.01 MOVAQ KEY_WORD_TABLE[R0],R7 ;V2.01 BRW 100$ ;V2.01 3$: CMPW #2000,12(R10) ;V2.01 BLEQ 10$ ;V2.01 ; TOKEN IS IN TABLE MULTI_CHARACTER_TABLE ;V2.01 CVTWL 12(R10),R0 ;V2.01 SUBL2 #1000,R0 ;V2.01 MOVAQ MULTI_CHARACTER_TABLE[R0],R7 ;V2.01 BRW 100$ ;V2.01 10$: CMPW #3000,12(R10) ;V2.01 BLEQ 11$ ;V2.01 ; TOKEN IS IN TABLE SINGLE_CHARACTER_TABLE ;V2.01 CVTWL 12(R10),R0 ;V2.01 SUBL2 #2000,R0 ;V2.01 MOVAQ SINGLE_CHARACTER_TABLE[R0],R7 ;V2.01 BRW 100$ ;V2.01 11$: CMPW #4000,12(R10) ;V2.01 BLEQ 13$ ;V2.01 ; TOKEN IS IN TABLE LOGICAL_TABLE ;V2.01 CVTWL 12(R10),R0 ;V2.01 SUBL2 #3000,R0 ;V2.01 MOVAQ LOGICAL_TABLE[R0],R7 ;V2.01 BRW 100$ ;V2.01 13$: CMPW #5000,12(R10) ;V2.01 BLEQ 14$ ;V2.01 ; TOKEN IS IN TABLE IO_TABLE ;V2.01 CVTWL 12(R10),R0 ;V2.01 SUBL2 #4000,R0 ;V2.01 MOVAQ IO_TABLE[R0],R7 ;V2.01 BRW 100$ ;V2.01 14$: CMPW #6000,12(R10) ;V2.01 BLEQ 15$ ;V2.01 ; TOKEN IS IN TABLE MNEMONIC_POINTER_TABLE ;V2.01 CVTWL 12(R10),R0 ;V2.01 SUBL2 #5000,R0 ;V2.01 MOVAQ MNEMONIC_POINTER_TABLE[R0],R7 ;V2.01 BRW 100$ ;V2.01 15$: ; ONLY TABLE LEFT IS THE LIBRARY POINTER TABLE ;V2.01 CVTWL 12(R10),R0 ;V2.01 SUBL2 #6000,R0 ;V2.01 MOVAQ LIBRARY_POINTER_TABLE[R0],R7 ;V2.01 100$: ;V2.01 ; R10 ;TOKEN BEING TRANSLATED ;V2.01 ; R9 ;OUTPUT STRING LENGTH REMAINING ;V2.01 ; R8 ;OUTPUT STRING FIRST EMPTY CHAR LOC ;V2.01 ; R7 ;POINTER TO TOKEN DESCRIPTER ;V2.01 CVTBL (R7),R6 ;V2.01 MOVL 4(R7),R7 ;V2.01 MOVC5 R6,(R7),#0,R9,(R8) ;COPY TEXT TO STRING ;V2.01 SUBL2 R0,R6 ;UPDATE STRING COUNT ;V2.01 ADDB2 R6,CHART_BUFFER+CHART_ELEMENT_S_TEXT ;V2.01 RET ;V2.01 .PAGE .SUBTITLE OUTPUT TO CHART FILE .ENTRY OUTPUT_TO_CHART,^M $PUT RAB=CHART_RAB BLBS R0,1$ ; FATAL ERROR IN OUPUT TO CHART SCRATCH FILE MOVL R0,ERROR_NUMBER ;V3.02 PUSHAL CHART_RAB+RAB$L_STV ;V3.02 PUSHAL CHART_ERROR_MSG CALLS #3,SYSTEM_ERROR_MESSAGE ;V3.02 $EXIT_S ;V3.02 1$: INCL SAVE_CHART RET .PAGE .SUBTITLE FIND OR INSERT NEW LABEL QUEUE ELEMENT .ENTRY FIND_INSERT_LABEL_QUEUE_ELEMENT,- ^M ; ; INPUT R0 BINARY VALUE OF LABEL TO LOCATE ; OUTPUT R1 POINTER TO VALUE OF LABEL QUEUE ELEMENT ; ; R0,R2-R11 NOT MODIFIED MOVL R0,R11 MOVAL LABEL_QUEUE,R10 ;GET ADDR OF LABEL QUEUE ; SEE IF EMPTY QUEUE CMPL (R10),R10 BEQL EMPTY_QUEUE MOVL R10,R9 ;GET WORKING COPY OF QUEUE POINTER 1$: MOVL (R9),R9 ;GET NEXT LABEL CMPL R9,R10 ;SEE IF NOT IN QUEUE BEQL ADD_TO_END ;NO-ADD TO END OF QUEUE CMPL R11,LABEL_ELEMENT_L_LABEL(R9) BEQL FOUND_LABEL ;GOT IT BLSSU 1$ ;NOT YET ; HAVE PASSED POSSABLE POSITION-ADD NEW ELEMENT PRECEEDING CALLG ALL_LABEL_ARG,ALLOCATE ;GET AN ELEMENT INCL F_C_LABEL ;V2.01 MOVL R0,R8 MOVL 4(R9),R9 INSQUE (R8),(R9) ;INSERT PRECEEDING MOVL R8,R1 ;SET UP FOR RETURN MOVL R11,R0 MOVL R0,LABEL_ELEMENT_L_LABEL(R1) RET FOUND_LABEL: MOVL R9,R1 ;SET UP RETURN MOVL R11,R0 RET ADD_TO_END: CALLG ALL_LABEL_ARG,ALLOCATE ;GET AN ELEMENT INCL F_C_LABEL ;V2.01 MOVL R0,R8 INSQUE (R8),@LABEL_QUEUE+4 ;INSERT AT TAIL MOVL R8,R1 ;SET UP FOR RETURN MOVL R11,R0 MOVL R0,LABEL_ELEMENT_L_LABEL(R1) RET EMPTY_QUEUE: CALLG ALL_LABEL_ARG,ALLOCATE ;GET AN ELEMENT INCL F_C_LABEL ;V2.01 MOVL R0,R8 INSQUE (R8),LABEL_QUEUE ;INSERT INTO QUEUE MOVL R8,R1 ;SET UP FOR RETURN MOVL R11,R0 MOVL R0,LABEL_ELEMENT_L_LABEL(R1) RET .PAGE .SUBTITLE FIND OR INSERT NEW VAR QUEUE ELEMENT .ENTRY FIND_INSERT_VAR_QUEUE_ELEMENT,- ^M ; ; INPUT R0 VAR STRING LENGTH ; R1 VAR SRING ADDR ; OUTPUT R2 POINTER TO VALUE OF VAR QUEUE ELEMENT ; ; R0,R2-R11 NOT MODIFIED MOVL R0,R11 MOVL R1,R10 MOVAL VARIABLE_QUEUE,R9;GET ADDR OF LABEL QUEUE ; SEE IF EMPTY QUEUE CMPL (R9),R9 BNEQ 101$ BRW EMPTY_VAR_QUEUE 101$: MOVL R9,R8 ;GET WORKING COPY OF QUEUE POINTER 1$: MOVL (R8),R8 ;GET NEXT LABEL CMPL R8,R9 ;SEE IF NOT IN QUEUE BEQL ADD_VAR_TO_END ;NO-ADD TO END OF QUEUE CVTBL VARIABLE_ELEMENT_S_NAME(R8),R7 CMPC5 R11,(R10),#0,R7,VARIABLE_ELEMENT_S_NAME+1(R8) BEQL FOUND_VAR ;GOT IT BLSS 1$ ;NOT YET ; HAVE PASSED POSSABLE POSITION-ADD NEW ELEMENT PRECEEDING CALLG ALL_VAR_ARG,ALLOCATE ;GET AN ELEMENT INCL F_C_VAR ;V2.01 MOVL R0,R7 MOVB R11,VARIABLE_ELEMENT_S_NAME(R7) MOVC5 R11,(R10),#0,#31,VARIABLE_ELEMENT_S_NAME+1(R7) MOVL 4(R8),R8 INSQUE (R7),(R8) ;INSERT PRECEEDING MOVL R7,R2 ;SET UP FOR RETURN MOVL R11,R0 MOVL R10,R1 RET FOUND_VAR: MOVL R8,R2 ;SET UP RETURN MOVL R11,R0 MOVL R10,R1 RET ADD_VAR_TO_END: CALLG ALL_VAR_ARG,ALLOCATE ;GET AN ELEMENT INCL F_C_VAR ;V2.01 MOVL R0,R8 MOVB R11,VARIABLE_ELEMENT_S_NAME(R8) MOVC5 R11,(R10),#0,#31,VARIABLE_ELEMENT_S_NAME+1(R8) INSQUE (R8),@LABEL_QUEUE+4 ;INSERT AT TAIL MOVL R8,R2 ;SET UP FOR RETURN MOVL R11,R0 MOVL R10,R1 RET EMPTY_VAR_QUEUE: CALLG ALL_VAR_ARG,ALLOCATE ;GET AN ELEMENT INCL F_C_VAR ;V2.01 MOVL R0,R8 INSQUE (R8),VARIABLE_QUEUE ;INSERT INTO QUEUE MOVB R11,VARIABLE_ELEMENT_S_NAME(R8) MOVC3 R11,(R10),VARIABLE_ELEMENT_S_NAME+1(R8) MOVL R8,R2 ;SET UP FOR RETURN MOVL R11,R0 MOVL R10,R1 RET .PAGE .SUBTITLE INSERT INTO LABEL QUEUE COMES FROM INFO .ENTRY INSERT_COMES_FROM_LABEL,^M ; ; INPUT R0 PIXEL/PROGRAM ELEMENT COMES FROM ; R1 POINTER TO LABEL QUEUE ENTRY ; R2 DIRECTION LEAVES SOURCE PIXEL FOR DESTINATION EXIT_STAGE_LEFT=1 EXIT_STAGE_RIGHT=2 MOVL R0,R11 MOVL R1,R10 MOVL R2,R9 ; FOUND MATCHING LABEL-SEE WHERE TO INSERT IN LIST OF COME FROMS ; R10,R1 POINTER TO LABEL ENTRY ; R11 SOURCE PIXEL ; R9 DIRECTION LEAVING SOURCE PIXEL ; NOTE THAT NO CHAECK IS MADE TO SEE IF LABEL IS DEFINED AS IT IS ASSUEMD ; THAT BY THE TIME THAT THIS ROUTINE IS CALLED-THAT CHECK HAS ; ALLREADY BEEN MADE AND NEX LABELS DELETED ; CHECK TO SEE WHICH QUADRENT TO PUT DEST-DUE TO THE LINEAR MANNER ; IN WHICH THE SCAN IS MADE IN PHASE_2_D, THE SOURCES WILL BE SUPPLIED ; IN LINE NUMBER ORDER AND DUPLICATES HAVE BEEN ELIMINATED. MOVL LABEL_ELEMENT_L_COME_FROM(R1),R8 ;GET PROPER LIST BNEQ 3$ ;IT EXISTS ;NEW LIST MOVL #LABEL_QUEUE_EXTENTION_LENGTH,ALLOCATE_1 MOVL R1,R2 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_LABEL_EXT ;V2.01 MOVL R0,LABEL_ELEMENT_L_COME_FROM(R2) MOVL R0,R6 MOVL R11,LABEL_EXTENTION_L_LIST(R6) RET 3$: ; SEE IF FURTHER EXTENTIONS EXIST TSTL LABEL_EXTENTION_L_EXTENTION(R8) BEQL 4$ MOVL LABEL_EXTENTION_L_EXTENTION(R8),R8 BRW 3$ 4$: ;FOUND LAST EXTENTION IN QUEUE FIND LOC TO STORE PIXEL ADDR MOVAL LABEL_EXTENTION_L_LIST(R8),R10 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R8),R9 5$: TSTL (R10)+ ;CHECK FOR EMPTY SLOT BEQL 6$ ;FOUND IT CMPL R10,R9 ;CHECK FOR FULL EXTENTION BGEQU 7$ ;EXTENTION IS FULL BRB 5$ ;TRY NEXT SLOT 6$: MOVL R11,-4(R10) ;LOAD SLOT WITH PIXEL ADDR RET 7$: MOVL #LABEL_QUEUE_EXTENTION_LENGTH,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_LABEL_EXT ;V2.01 MOVL R0,LABEL_EXTENTION_L_EXTENTION(R8) MOVL R0,R6 MOVL R11,LABEL_EXTENTION_L_LIST(R6) RET .PAGE .SUBTITLE BUILD AND OUTPUT THE FLOW CHART .ENTRY DO_CHART,^M CLRL LINES_ON_PAGE MOVL #FLOW_CHART_OUTPUT,STATUS_WORD MOVL #132,R0 ;V2.06 BITL #NARROW_FLAG,FLAG_WORD ;V2.06 BEQL 1$ ;V2.06 MOVL #80.,R0 ;V2.06 1$: BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 DIVL2 #PIXEL_WIDTH,R0 ;GET NUMBER OF PIXELS ACCROSS PAGE ;V3.23 BRB 3$ ;V3.23 2$: DIVL2 #S_PIXEL_WIDTH,R0 ;GET NUMBER OF PIXELS ACCROSS PAGE ;V3.23 3$: ;V3.23 MOVL R0,DRAW_ACCROSS ;V2.06 SUBL3 #4,LINES_PER_PAGE,R1 ;V2.06 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 DIVL2 #PIXEL_DEPTH,R1 ;V2.06 BRB 5$ ;V3.23 4$: DIVL2 #S_PIXEL_DEPTH,R1 ;V3.23 5$: ;V3.23 MOVL R1,DRAW_DOWN ;V2.06 .PAGE .SUBTITLE PHASE 1 ; ; IN PHASE 1 DO THE FOLLOWING ; READ SCRATCH FILE AND CONVERT ELEMENTS TO TOKEN ELEMENTS IN ; PROGRAM QUEUE ; ; ; MERGE SUCH PROGRAM ELEMENTS THAT CAN BE LOGICALLY ; COMBINED INTO A SINGLE TOKEN ON THE PROGRAM QUEUE. ; ; SET POINTERS TO PROGRAM TOKENS IN LABEL QUEUE ELEMENTS ; MOVAL PROGRAM_QUEUE,PROGRAM_QUEUE ;INIT THE PROGRAM QUEUE MOVL PROGRAM_QUEUE,PROGRAM_QUEUE+4 $REWIND RAB=CHART_RAB .PAGE .SUBTITLE GET ELEMENT FROM SCRATCH FILE AND TAKE ACTION ROUTINE LOOP_BACK_PHASE_1: 300$: $GET RAB=CHART_RAB BLBS R0,1300$ CMPL #RMS$_EOF,R0 ;V3.02 BEQL 2300$ ;V3.02 MOVL R0,ERROR_NUMBER ;V3.02 PUSHAL CHART_RAB+RAB$L_STV ;V3.02 PUSHAL ERROR_NUMBER ;V3.02 PUSHL #0 ;V3.02 CALLS #3,SYSTEM_ERROR_MESSAGE ;V3.02 2300$: ;V3.02 JMP START_PHASE_2 1300$: CASEL CHART_BUFFER+CHART_ELEMENT_L_ACTION,#1,#24 1$: .WORD PHASE_1_ACTION_1-1$ .WORD PHASE_1_ACTION_2-1$ .WORD PHASE_1_ACTION_3-1$ .WORD PHASE_1_ACTION_4-1$ .WORD PHASE_1_ACTION_5-1$ .WORD PHASE_1_ACTION_6-1$ .WORD PHASE_1_ACTION_7-1$ .WORD PHASE_1_ACTION_8-1$ .WORD PHASE_1_ACTION_9-1$ .WORD PHASE_1_ACTION_10-1$ .WORD PHASE_1_ACTION_11-1$ .WORD PHASE_1_ACTION_12-1$ .WORD PHASE_1_ACTION_13-1$ .WORD PHASE_1_ACTION_14-1$ .WORD PHASE_1_ACTION_15-1$ .WORD PHASE_1_ACTION_16-1$ .WORD PHASE_1_ACTION_17-1$ .WORD PHASE_1_ACTION_18-1$ .WORD PHASE_1_ACTION_19-1$ .WORD PHASE_1_ACTION_20-1$ .WORD PHASE_1_ACTION_21-1$ .WORD PHASE_1_ACTION_22-1$ .WORD PHASE_1_ACTION_23-1$ .WORD PHASE_1_ACTION_24-1$ .PAGE .SUBTITLE ACTION=1,3,19 NON EXE,EXE,CONTINUE PHASE_1_ACTION_1: MOVL #PROGRAM_LENGTH_ACTION_1,ALLOCATE_1 BRB PHASE_1_ACTION_1_CONTINUE PHASE_1_ACTION_3: MOVL #PROGRAM_LENGTH_ACTION_3,ALLOCATE_1 BRB PHASE_1_ACTION_1_CONTINUE PHASE_1_ACTION_19: MOVL #PROGRAM_LENGTH_ACTION_19,ALLOCATE_1 BRB PHASE_1_ACTION_1_CONTINUE PHASE_1_ACTION_1_CONTINUE: TSTL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER ;SEE IF THERE IS A LABEL BEQL 1$ ;NO DO OTHER CHECKS ; SEE IF THIS LABEL IS THE TARGET OF ANY TRANSFERS MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BNEQ 2$ ;YES-NEED NEW ELEMENT ; UNUSED LABEL-CHECK TO SEE IF CAN MERGE 1$: CMPL @PROGRAM_QUEUE,PROGRAM_QUEUE ;EMPTY QUEUE ? BEQL 2$ MOVL PROGRAM_QUEUE+4,R11 ;GET LAST TOKEN ; SEE IF WE CAN MERGE THESE ELEMENTS CMPW #CHART_ACTION_M_NON_EXECUTEABLE,- PROGRAM_ELEMENT_W_ACTION(R11) BEQL 99$ ;YES-MERGED CMPW #CHART_ACTION_M_EXECUTEABLE,- PROGRAM_ELEMENT_W_ACTION(R11) BEQL 99$ ;HERE TOO CMPW #CHART_ACTION_M_CONTINUE,- PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 2$ 99$: BRW 100$ ;HERE TOO ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: MOVL R1,R10 ;SAVE POINTER TO LABEL SYMBOL CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) TSTL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER BEQL 3$ MOVL R10,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R10) 3$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL #,PROGRAM_ELEMENT_L_FLAG(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=2 I/O PHASE_1_ACTION_2: MOVL #PROGRAM_LENGTH_ACTION_2,ALLOCATE_1 TSTL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER ;SEE IF THERE IS A LABEL BEQL 1$ ;NO DO OTHER CHECKS ; SEE IF THIS LABEL IS THE TARGET OF ANY TRANSFERS MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BNEQ 2$ ;YES-NEED NEW ELEMENT ; UNUSED LABEL-CHECK TO SEE IF END=/ERR= EXIST 1$: TSTL CHART_BUFFER+CHART_ELEMENT_L_END BNEQ 2$ TSTL CHART_BUFFER+CHART_ELEMENT_L_ERR BNEQ 2$ ; SEE IF WE CAN MERGE CMPL @PROGRAM_QUEUE,PROGRAM_QUEUE ;EMPTY QUEUE ? BEQL 2$ MOVL PROGRAM_QUEUE+4,R11 ;GET LAST TOKEN ; SEE IF WE CAN MERGE THESE ELEMENTS CMPW #CHART_ACTION_M_I_O,- PROGRAM_ELEMENT_W_ACTION(R11) BEQL 100$ ;YES-MERGED ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: MOVL R1,R10 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) TSTL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER BEQL 3$ MOVL R10,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R10) 3$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL #,PROGRAM_ELEMENT_L_FLAG(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: MOVL CHART_BUFFER+CHART_ELEMENT_L_END,R0 BEQL 101$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R1,PROGRAM_ELEMENT_L_END(R11) BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) 101$: MOVL CHART_BUFFER+CHART_ELEMENT_L_ERR,R0 BEQL 102$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R1,PROGRAM_ELEMENT_L_ERR(R11) BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) 102$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=4,6,7,17,18,23 NO MERGE-TEXT STRING ;V2.01 PHASE_1_ACTION_4: ;V2.01 MOVL #PROGRAM_LENGTH_ACTION_4,ALLOCATE_1 ;V2.01 BRB PHASE_1_ACTION_4_CONTINUE ;V2.01 PHASE_1_ACTION_6: ;V2.01 MOVL #PROGRAM_LENGTH_ACTION_6,ALLOCATE_1 ;V2.01 BRB PHASE_1_ACTION_4_CONTINUE ;V2.01 PHASE_1_ACTION_7: ;V2.01 MOVL #PROGRAM_LENGTH_ACTION_7,ALLOCATE_1 ;V2.01 BRB PHASE_1_ACTION_4_CONTINUE ;V2.01 PHASE_1_ACTION_17: ;V2.01 MOVL #PROGRAM_LENGTH_ACTION_17,ALLOCATE_1 ;V2.01 BRB PHASE_1_ACTION_4_CONTINUE ;V2.01 PHASE_1_ACTION_18: ;V2.01 MOVL #PROGRAM_LENGTH_ACTION_18,ALLOCATE_1 ;V2.01 BRB PHASE_1_ACTION_4_CONTINUE ;V2.01 PHASE_1_ACTION_23: ;V2.01 MOVL #PROGRAM_LENGTH_ACTION_23,ALLOCATE_1 ;V2.01 BRB PHASE_1_ACTION_4_CONTINUE ;V2.01 PHASE_1_ACTION_4_CONTINUE: ;V2.01 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE ;V2.01 CALLG ALLOCATE_ARG,ALLOCATE ;V2.01 INCL F_C_P_E ;V2.01 MOVL R0,R11 ;V2.01 INSQUE (R11),@PROGRAM_QUEUE+4 ;V2.01 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- ;V2.01 PROGRAM_ELEMENT_W_ACTION(R11) ;V2.01 TSTL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER ;V2.01 BEQL 1$ ;V2.01 MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 ;V2.01 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT ;V2.01 BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY ;V2.01 BEQL 1$ ;V2.01 MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) ;V2.01 MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) ;V2.01 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- ;V2.01 PROGRAM_ELEMENT_L_LINE_NUMBER(R11) ;V2.01 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) ;V2.01 CMPW #CHART_ACTION_M_STOP,PROGRAM_ELEMENT_W_ACTION(R11) ;V2.01 BEQL 2$ ;V2.01 CMPW #CHART_ACTION_M_RETURN,PROGRAM_ELEMENT_W_ACTION(R11) ;V2.01 BEQL 2$ ;V2.01 MOVL #,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.01 2$: MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN ;V2.01 CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL ;V2.01 BEQL 100$ ;NO ;V2.01 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) ;V2.01 MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V2.01 BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.01 ;SEE IF IT COMES DOWN TO CURRENT ONE ;V2.01 BEQL 100$ ;NO ;V2.01 BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.01 100$: MOVC5 #,- ;V2.01 CHART_BUFFER+CHART_ELEMENT_S_TEXT,#0,- ;V2.01 #,- ;V2.01 PROGRAM_ELEMENT_S_TEXT(R11) ;V2.01 JMP LOOP_BACK_PHASE_1 ;V2.01 .PAGE ;V2.01 .SUBTITLE ACTION=9,12,20 NO MERGE-NO ADD. DATA ;V2.01 PHASE_1_ACTION_9: MOVL #PROGRAM_LENGTH_ACTION_9,ALLOCATE_1 BRB PHASE_1_ACTION_9_CONTINUE ;V2.01 PHASE_1_ACTION_12: MOVL #PROGRAM_LENGTH_ACTION_12,ALLOCATE_1 BRB PHASE_1_ACTION_9_CONTINUE ;V2.01 PHASE_1_ACTION_20: MOVL #PROGRAM_LENGTH_ACTION_20,ALLOCATE_1 ;V2.01 BRB PHASE_1_ACTION_9_CONTINUE ;V2.01 PHASE_1_ACTION_9_CONTINUE: ;V2.01 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) TSTL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER BEQL 1$ MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) ;V2.01 BEQL 2$ ;V2.01 MOVL #,PROGRAM_ELEMENT_L_FLAG(R11) 2$: MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN ;V2.01 CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=5 ARITHMETIC IF PHASE_1_ACTION_5: MOVL #PROGRAM_LENGTH_ACTION_5,ALLOCATE_1 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 1$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LESS_THAN,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R1,PROGRAM_ELEMENT_L_LESS_THAN(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_EQUAL,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R1,PROGRAM_ELEMENT_L_EQUAL(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_GREATER_THAN,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R1,PROGRAM_ELEMENT_L_GREATER_THAN(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: MOVC5 #,- ;V2.01 CHART_BUFFER+CHART_ELEMENT_S_TEXT,#0,- ;V2.01 #,- ;V2.01 PROGRAM_ELEMENT_S_TEXT(R11) ;V2.01 JMP LOOP_BACK_PHASE_1 ;V2.01 .PAGE .SUBTITLE ACTION=8 ELSE PHASE_1_ACTION_8: MOVL #PROGRAM_LENGTH_ACTION_8,ALLOCATE_1 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) TSTL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER BEQL 1$ MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL #,- PROGRAM_ELEMENT_L_FLAG(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=10,11 DO PHASE_1_ACTION_10: MOVL #PROGRAM_LENGTH_ACTION_10,ALLOCATE_1 BRB PHASE_1_ACTION_10_CONTINUE PHASE_1_ACTION_11: MOVL #PROGRAM_LENGTH_ACTION_11,ALLOCATE_1 PHASE_1_ACTION_10_CONTINUE: ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 1$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,R0 BEQL 3$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R1,PROGRAM_ELEMENT_L_DEST_LABEL(R11) 3$: MOVL #,PROGRAM_ELEMENT_L_FLAG(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: MOVC5 #,- ;V2.01 CHART_BUFFER+CHART_ELEMENT_S_TEXT,#0,- ;V2.01 #,- ;V2.01 PROGRAM_ELEMENT_S_TEXT(R11) ;V2.01 JMP LOOP_BACK_PHASE_1 ;V2.01 .PAGE .SUBTITLE ACTION=13 GOTO PHASE_1_ACTION_13: MOVL #PROGRAM_LENGTH_ACTION_13,ALLOCATE_1 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 1$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R1,PROGRAM_ELEMENT_L_DEST_LABEL(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=14 ASSIGNED GOTO PHASE_1_ACTION_14: MOVL #PROGRAM_LENGTH_ACTION_14,ALLOCATE_1 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 1$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ ;IF IT IS A TARGET OF A BRANCH MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) CVTBL CHART_BUFFER+CHART_ELEMENT_S_VARIABLE,R0 MOVAL CHART_BUFFER+CHART_ELEMENT_S_VARIABLE+1,R1 CALLG NULL,FIND_INSERT_VAR_QUEUE_ELEMENT MOVL R2,PROGRAM_ELEMENT_L_VAR_POINTER(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=15 GOTO COMPUTED PHASE_1_ACTION_15: MULL3 #4,CHART_BUFFER+CHART_ELEMENT_L_COUNT,ALLOCATE_1 ADDL2 #PROGRAM_LENGTH_ACTION_15,ALLOCATE_1 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 1$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: MOVAL PROGRAM_ELEMENT_L_LIST(R11),R10 MOVL R10,R9 MOVAL CHART_BUFFER+CHART_ELEMENT_L_COUNT+4,R8 MOVAL CHART_BUFFER+CHART_ELEMENT_LENGTH,R7 ;V2.01 MOVL CHART_BUFFER+CHART_ELEMENT_L_COUNT,R6 ; R11 ADDR OF PROGRAM ELEMENT ; R10 ADDRESS OF LIST OF POINTERS TO LABEL SYMBOL ENTRIES IN PROGRAM ; ELEMENT ; R9 NEXT LOC TO STORE POINTER TO LABEL SYMBOL ENTRY ; R8 START/NEXT LABEL TO BE PUT INTO PROGRAM ELEMENT ; R7 END OF CHART BUFFER ADDR ; R6 COUNT/NUMBER OF LABELS LEFT 10$: MOVL (R8)+,R0 ;GET THE LABEL CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT ;GET PTR TO ITS ENTRY MOVL R10,R5 ;COPY START ADDR TO PROGRAM ELEMENT LIST 11$: CMPL R5,R9 ;SEE IF DONE SCAN BGEQU 12$ ;YES-NOT HERE-DO ENTER CMPL R1,(R5)+ ;SEE IF ENTRY MATCHES BNEQ 11$ ;NO MATCH-TRY NEXT ENTRY BRW 13$ ;FOUND A MATCH-DO NOT ENTER DUPLICATE 12$: MOVL R1,(R9)+ ;STORE ENTRY INCL PROGRAM_ELEMENT_L_COUNT(R11) ;BUMP COUNT OF UNIQUE LABELS 13$: DECL R6 ;DEC LABELS LEFT BLEQ 14$ ;DONE-TAKE EXIT CMPL R8,R7 ;SEE IF CHART BUFFER EMPTY AND NEEDS A REFILL BLSSU 10$ ;NO-GET NEXT LABEL $GET RAB=CHART_RAB BLBS R0,1013$ ;V3.02 MOVL R0,ERROR_NUMBER ;V3.02 PUSHAL CHART_RAB+RAB$L_STV ;V3.02 PUSHAL ERROR_NUMBER ;V3.02 PUSHL #0 ;V3.02 CALLS #3,SYSTEM_ERROR_MESSAGE ;V3.02 1013$: ;V3.02 MOVAL CHART_BUFFER,R8 BRW 10$ 14$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=16 ASSIGN PHASE_1_ACTION_16: MOVL #PROGRAM_LENGTH_ACTION_16,ALLOCATE_1 ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: MOVL R1,R10 ;SAVE POINTER TO LABEL SYMBOL CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 3$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT ;GET PTR TO ITS ENTRY MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 3$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) MOVL #,PROGRAM_ELEMENT_L_FLAG(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: MOVL CHART_BUFFER+CHART_ELEMENT_L_DEST_LABEL,R0 CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT ;GET PTR TO ITS ENTRY MOVL R1,PROGRAM_ELEMENT_L_LABEL_POINTER(R11) CVTBL CHART_BUFFER+CHART_ELEMENT_S_VARIABLE,R0 MOVAL CHART_BUFFER+CHART_ELEMENT_S_VARIABLE+1,R1 CALLG NULL,FIND_INSERT_VAR_QUEUE_ELEMENT MOVL R2,PROGRAM_ELEMENT_L_VAR_POINTER(R11) JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION=21,22,START,ENTRY PHASE_1_ACTION_21: MOVL #PROGRAM_LENGTH_ACTION_21,ALLOCATE_1 BRB PHASE_1_ACTION_21_CONTINUE PHASE_1_ACTION_22: MOVL #PROGRAM_LENGTH_ACTION_22,ALLOCATE_1 BRB PHASE_1_ACTION_21_CONTINUE PHASE_1_ACTION_21_CONTINUE: ; ADD NEW PROGRAM ELEMENT TO PROGRAM QUEUE 2$: CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 1$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) BISL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: MOVC3 #32,CHART_BUFFER+CHART_ELEMENT_S_NAME,- PROGRAM_ELEMENT_S_NAME(R11) JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE ACTION 24,CALL PHASE_1_ACTION_24: ; CALCULATE THE LENGTH OF THE PROGRAM ELEMENT REQUIRED MULL3 #4,CHART_BUFFER+CHART_ELEMENT_L_CALL_COUNT,ALLOCATE_1 ADDL2 #PROGRAM_LENGTH_ACTION_24,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R11 INSQUE (R11),@PROGRAM_QUEUE+4 MOVW CHART_BUFFER+CHART_ELEMENT_L_ACTION,- PROGRAM_ELEMENT_W_ACTION(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_LABEL_NUMBER,R0 BEQL 1$ CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT BITL #LABEL_FLAG_M_LABEL_USED,LABEL_ELEMENT_L_FLAG(R1);ARE THERE ANY COMES FROM BEQL 1$ MOVL R1,PROGRAM_ELEMENT_L_LABEL(R11) MOVL R11,LABEL_ELEMENT_L_TOKEN(R1) 1$: MOVL CHART_BUFFER+CHART_ELEMENT_L_LINE_NUMBER,- PROGRAM_ELEMENT_L_LINE_NUMBER(R11) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R11) BISL2 #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R11) MOVL 4(R11),R10 ;GET ADDR OF PREVIOUS TOKEN CMPL R10,#PROGRAM_QUEUE ;SEE IF IT IS THERE AT ALL BEQL 100$ ;NO MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;SEE IF IT COMES DOWN TO CURRENT ONE BEQL 100$ ;NO BISL2 #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) 100$: MOVC3 #32,CHART_BUFFER+CHART_ELEMENT_S_NAME,- PROGRAM_ELEMENT_S_NAME(R11) MOVL CHART_BUFFER+CHART_ELEMENT_L_CALL_COUNT,R6 BEQL 300$ MOVAL PROGRAM_ELEMENT_L_CALL_LIST(R11),R10 MOVL R10,R9 MOVAL CHART_BUFFER+CHART_ELEMENT_L_CALL_COUNT+4,R8 MOVAL CHART_BUFFER+CHART_ELEMENT_LENGTH,R7 ;V2.01 ; REGISTER ALLOCATION ; R11 ADDR OF PROGRAM ELEMENT ; R10 TOP OF LIST OF POINTERS TO LABEL ENTRIES ALREADY ENTERED ; R9 NEXT STORAGE LOC FOR SYMBOL ; R8 NEXT LABEL TO BE PUT INTO PIXEL ELEMENT ; R7 END OF CHART BUFFER ; R6 NUMBER OF LABELS LEFT TO BE XFERED 110$: MOVL (R8)+,R0 ;GET LABEL TO BE XFERED CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT MOVL R10,R5 ;COPY START OF SCAN ADDR 111$: CMPL R5,R9 ;SEE IF ONE SCAN BGEQU 112$ ;YES-NOT A DUPLICATE-ENTER IT CMPL R2,(R5)+;SEE IF MATCH BNEQ 111$ ;NO-CHECK NEXT ENTRY BRW 113$ ;FOUND A MATCH-DO NOT ENTER DUPLICATE 112$: MOVL R1,(R9)+;STORE ENTRY INCL PROGRAM_ELEMENT_L_CALL_COUNT(R11) ;BUMP THE COUNT 113$: DECL R6 ;DECL LABELS LEFT BLEQ 300$ ;ALL GONE-DONE CMPL R8,R7 ;SEE IF WE NEED A REFILL BLSSU 110$ $GET RAB=CHART_RAB BLBS R0,1113$ ;V3.02 MOVL R0,ERROR_NUMBER ;V3.02 PUSHAL CHART_RAB+RAB$L_STV ;V3.02 PUSHAL ERROR_NUMBER ;V3.02 PUSHL #0 ;V3.02 CALLS #3,SYSTEM_ERROR_MESSAGE ;V3.02 1113$: ;V3.02 MOVAL CHART_BUFFER,R8 BRW 110$ 300$: JMP LOOP_BACK_PHASE_1 .PAGE .SUBTITLE PHASE 2 ; ; IN THIS PHASE DO THE FOLLOWING ; ; RESOLVE AND SET UP ALL BLOCK'S--LOGICAL AND LOGICAL IF'S ; AND DO'S ; ; EXPAND THE LENGTH OF ALL ASSIGNED AND COMPUTED GOTO'S ; START_PHASE_2: CLRL NESTING_LEVEL MOVAL PROGRAM_QUEUE,R11 ;GET START OF PROGRAM QUEUE PHASE_2_LOOP_BACK: CLRL R10 CALLG NULL,PHASE_2_DISPATCH BLBS R0,PHASE_2_LOOP_BACK BRW PHASE_2_B .PAGE .SUBTITLE PHASE 2 DISPATCH .ENTRY PHASE_2_DISPATCH,^M ; R11 POINTS TO ELEMENT PRECEEDING ONE TO BE DISPATCHED ; R10 NESTING FLAG ; R10=PROGRAM_FLAG_M_NO/DO/IF_NEST ; R9 LOOP LABEL POINTER ; R9=0 LOOK FOR ENDDO ; POINTER TO LABEL SYMBOL ENTRY MOVL (R11),R11 ;GET NEXT ELEMENT MOVW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R11) BISL2 R10,PROGRAM_ELEMENT_L_FLAG(R11) CASEW PROGRAM_ELEMENT_W_ACTION(R11),#0,#24 1$: .WORD PHASE_2_ACTION_0-1$ .WORD PHASE_2_ACTION_1-1$ .WORD PHASE_2_ACTION_2-1$ .WORD PHASE_2_ACTION_3-1$ .WORD PHASE_2_ACTION_4-1$ .WORD PHASE_2_ACTION_5-1$ .WORD PHASE_2_ACTION_6-1$ .WORD PHASE_2_ACTION_7-1$ .WORD PHASE_2_ACTION_8-1$ .WORD PHASE_2_ACTION_9-1$ .WORD PHASE_2_ACTION_10-1$ .WORD PHASE_2_ACTION_11-1$ .WORD PHASE_2_ACTION_12-1$ .WORD PHASE_2_ACTION_13-1$ .WORD PHASE_2_ACTION_14-1$ .WORD PHASE_2_ACTION_15-1$ .WORD PHASE_2_ACTION_16-1$ .WORD PHASE_2_ACTION_17-1$ .WORD PHASE_2_ACTION_18-1$ .WORD PHASE_2_ACTION_19-1$ .WORD PHASE_2_ACTION_20-1$ .WORD PHASE_2_ACTION_21-1$ .WORD PHASE_2_ACTION_22-1$ .WORD PHASE_2_ACTION_23-1$ .WORD PHASE_2_ACTION_24-1$ .PAGE .SUBTITLE PHASE 2 ZERO LEVEL-NO ACTION REQUIRED PHASE_2_ACTION_0: PHASE_2_ACTION_1: PHASE_2_ACTION_3: PHASE_2_ACTION_16: PHASE_2_ACTION_17: PHASE_2_ACTION_18: PHASE_2_ACTION_19: PHASE_2_ACTION_21: PHASE_2_ACTION_22: PHASE_2_ACTION_23: MOVL #1,R0 RET .PAGE .SUBTITLE PHASE 2 I/O PHASE_2_ACTION_2: ; I/O STATEMENT-SEE IF THE END=/ERR= LABELS ARE DEFINED MOVL PROGRAM_ELEMENT_L_END(R11),R10 BNEQ 1000$ BRW 10$ 1000$: BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) TSTL LABEL_ELEMENT_L_DEFINED(R10) BEQL 2000$ BRW 10$ 2000$: ; DOES NOT EXIST-SAY SO CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R10) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT CLRL PROGRAM_ELEMENT_L_END(R11) 10$: MOVL PROGRAM_ELEMENT_L_ERR(R11),R10 ;V2.01 BNEQ 1010$ BRW 20$ 1010$: BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) TSTL LABEL_ELEMENT_L_DEFINED(R10) BEQL 2010$ BRW 20$ 2010$: ; DOES NOT EXIST-SAY SO CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R10) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT CLRL PROGRAM_ELEMENT_L_ERR(R11) 20$: MOVL #1,R0 RET .PAGE .SUBTITLE PHASE 2 LOGICAL IF PHASE_2_ACTION_4: ; THIS IS A LOGICAL IF-NOTHING TO THE RIGHT ; IT WILL BE DISPLAYED IN THE FORM ; ; | ; ^ ----- ; / \ | | ; < >---| | ; \ / | | ; V ----- ; | | ; |-------+ ; MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R10 300$: MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) CLRL PROGRAM_ELEMENT_L_UP_POINTER(R10) BICL2 #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R10) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 BEQL 301$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 301$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R10) MOVL R10,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 301$: MOVL (R10),R9 MOVL R9,PROGRAM_ELEMENT_L_DOWN_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_UP_POINTER(R9) CLRL PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BISL2 #,- ;V2.01 PROGRAM_ELEMENT_L_FLAG(R10) ;V2.01 CLRL PROGRAM_ELEMENT_L_LABEL(R10) ; CHECK FOR LOOP AROUND CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 303$ CMPW #CHART_ACTION_M_GOTO,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 303$ CMPW #CHART_ACTION_M_GOTO_ASSIGN,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 303$ CMPW #CHART_ACTION_M_COMPUTED,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 303$ CMPW #CHART_ACTION_M_RETURN,PROGRAM_ELEMENT_W_ACTION(R10) ;V2.16 BEQL 303$ ;V2.16 CMPW #CHART_ACTION_M_STOP,PROGRAM_ELEMENT_W_ACTION(R10) ;V2.16 BEQL 303$ ;V2.16 BISL2 #,PROGRAM_ELEMENT_L_FLAG(R11) BISL2 #,PROGRAM_ELEMENT_L_FLAG(R10) 303$: ; MAKE SURE THE NEXT ITEM DOWN HAS AN ARROW DOWN FROM ABOVE MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 BISL2 #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R0) ; CHECK FOR ILLEGAL CONSTRUCTS AT THIS POINT CMPW #CHART_ACTION_M_IF_LOGICAL,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_IF_THEN,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_ELSE_IF,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_ELSE,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_ENDIF,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_DO,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_DO_WHILE,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_ENDDO,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_START,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ CMPW #CHART_ACTION_M_ENTRY,PROGRAM_ELEMENT_W_ACTION(R10) BEQL 200$ BRW 400$ ; OUTPUT THE ERROR MESSAGE THEN TREAT AS OTHER NON BLOCK LINE 200$: CVTBL LOGICAL_IF_ERROR_MSG,R9 MOVC5 R9,@LOGICAL_IF_ERROR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R9,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R9,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT 400$: MOVL #PROGRAM_FLAG_M_IF_NEST,R10 INCL NESTING_LEVEL CALLG NULL,PHASE_2_DISPATCH DECL NESTING_LEVEL RET .PAGE .SUBTITLE PHASE_2 ARITHMETIC IF PHASE_2_ACTION_5: ; CHECK EACH LABEL TO SEE IF IT EXISTS AND IF IT DOES- ; PUT INTO COMES FROM LISTS-ALL EXITS ARE COMMON TO THE RIGHT ; THE SAME MANNER AS COMPUTED AND ASSIGNED GOTO'S ; LABEL 1 LESS_THAN ; EXISTENCE OF THE DESTINATION MOVL PROGRAM_ELEMENT_L_LESS_THAN(R11),R10 TSTL LABEL_ELEMENT_L_DEFINED(R10) ;IS IT DEFINED BEQL 3$ BRW 10$ ; DOES NOT EXIST-SAY SO 3$: CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R10) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT CLRL PROGRAM_ELEMENT_L_LESS_THAN(R11) 10$: MOVL PROGRAM_ELEMENT_L_EQUAL(R11),R9 TSTL LABEL_ELEMENT_L_DEFINED(R9) BEQL 13$ BRW 20$ ; DOES NOT EXIST-SAY SO 13$: CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R9) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT CLRL PROGRAM_ELEMENT_L_EQUAL(R11) 20$: MOVL PROGRAM_ELEMENT_L_GREATER_THAN(R11),R8 TSTL LABEL_ELEMENT_L_DEFINED(R8) BEQL 23$ BRW 30$ ; DOES NOT EXIST-SAY SO 23$: CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R8) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT CLRL PROGRAM_ELEMENT_L_GREATER_THAN(R11) 30$: BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) MOVL #1,R0 RET .PAGE .SUBTITLE PHASE_2 IF THEN NESTED LEVEL HERE PHASE_2_ACTION_6: INCL NESTING_LEVEL PUSHR #^M ;SAVE POINTER TO "IF" PROGRAM ELEMENT ; SCAN UNTILL ENDIF FOR THIS LEVEL IS FOUND MOVL #PROGRAM_FLAG_M_IF_NEST,R10 1$: CALLG NULL,PHASE_2_DISPATCH BLBC R0,2$ ;NESTING ERROR-FOUND END ; CHECK FOR DONE WITH NESTED IF CMPW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R11) BNEQ 1$ CMPW #CHART_ACTION_M_ENDIF,PROGRAM_ELEMENT_W_ACTION(R11) BEQL 3$ ;ENDIF FOUND-GO TO NEXT PROCESSING STAGE BRB 1$ ;CONTINUE TO NEXT PROGRAM ELEMENT ; ERROR CONDITION-END FOUND BEFORE ENDIF 2$: PUSHAL PHASE_2_END_ERR_MSG CALLS #1,ERROR_LINE PUSHAL PHASE_2_END_ERR_MSG CALLS #1,G^LIB$PUT_OUTPUT $EXIT_S ;V3.16 3$: .PAGE ; INSIDE OF NESTED IF HAS BEEN SCANNED AND ALL INTERNAL STRUCTURE HAS BEEN ; RESOLVED. ; R11 POINTS TO TERMIATEING PROGRAM ELEMENT. ; (SP) POINTS TO "IF" ; ; STRUCTURE OF THE IF()THEN CONSTRUCT DISPLAY IS AS FOLLOWS ; ; | ; ^ ^ ^ ; / \ / \ / \ ; < >------< >------< >----- ; \ / \ / \ / | ; V V V | ; | | | | ; ----- ----- ----- ----- ; | | | | | | | | ; | | | | | | | | ; ----- ----- ----- ----- ; | | | | ; +----------+----------+------+ ; | ; ; NOW SCAN DOWN TO STATEMENT BLOCK TERMINATOR ; ELSEIF OR ELSE AT CURRENT NESTING LEVEL ; OR ENDIF AT CURRENT NESTING LEVEL-1 TO DETERMINE THE LONGEST SEGMENT. ; .PAGE POPR #^M PUSHR #^M ;SAVE THE IF POSITION ; R11 POINTS TO ENDIF ; R10 POINTS TO IF ; R6 ELSE FOUND FLAG 0=NOT FOUND MOVL R10,R9 MOVL #1,R8 ;LONGEST SEGMENT COUNTER-MIN LENGTH IS ONE CLRL R6 ;CLEAR ELSE FOUND FLAG 10$: CLRL R7 ;CURRENT SEGMENT COUNTER 11$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R9 ;NEXT SEGMENT CMPL R9,R11 ;SEE IF COMPLETED SCAN YET BEQL 14$ ;YES CMPW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R9);AT CURRENT NEST LEVEL BNEQ 12$ ;NO ; CHECK TO SEE IF WE HAVE FOUND END OF CURRENT PROGRAM SEGMENT CMPW #CHART_ACTION_M_ELSE_IF,PROGRAM_ELEMENT_W_ACTION(R9) BEQL 13$ CMPW #CHART_ACTION_M_ELSE,PROGRAM_ELEMENT_W_ACTION(R9) BNEQ 12$ ;NOT FOUND MOVL #1,R6 ;SET ELSE USED FLAG BRB 13$ ; NO-ADD TO LOCAL SEGMENT COUNT AND CONTINUE 12$: INCL R7 BRB 11$ 13$: ;COMPLETED CURRENT PROGRAM SEGMENT LENGTH COUNT-SEE IF MAX LEN CMPL R7,R8 BLEQ 10$ ;NO-START NEW SEGMENT MOVL R7,R8 ;SET NEW MAX BRB 10$ ;AND START NEW SEGMENT 14$: ;COMPLETED SCAN OF BLOCK IF STRUCTURE CMPL R7,R8 ;CHECK FOR MAX LEN UPDATE BLEQ 15$ MOVL R7,R8 15$: TSTL R6 ;SEE IF ELSE WAS USED BEQL 16$ ;NO-NEED TO PUT ONE IN BRW 19$ 16$:; ALLOCATE ONE ELSE AND ONE CONNECTOR JUST BEFORE THE ENDIF MOVL #PROGRAM_LENGTH_ACTION_8,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R7 MOVL 4(R11),R0 INSQUE (R7),(R0) MOVW #CHART_ACTION_M_ELSE,PROGRAM_ELEMENT_W_ACTION(R7) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R7) MOVW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R7) BISL2 #PROGRAM_FLAG_M_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R7) MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),(R7) MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R7) MOVL R7,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R7) MOVL R7,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R11) BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R7) BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 19$: .PAGE ; REPEAT SCAN ONLY THIS TIME EXTEND ALL SEGMENTS WITH CONNECTORS ; SO THAT ALL CONDITONAL CODE SEGMENTS ARE THE SAME LENGTH MOVL R10,R9 20$: MOVL R8,R7 ;SET UP SCAN OF ONE SEGMENT 21$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R9 ;NEXT ELEMENT CMPL R9,R11 ;SEE IF COMPLETED BLOCK IF YET BEQL 23$ ;YES CMPW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R9);AT CURRENT NEST LEVEL BNEQ 22$ ;NO ; CHECK TO SEE IF WE HAVE FOUND END OF CURRENT PROGRAM SEGMENT CMPW #CHART_ACTION_M_ELSE_IF,PROGRAM_ELEMENT_W_ACTION(R9) BEQL 23$ CMPW #CHART_ACTION_M_ELSE,PROGRAM_ELEMENT_W_ACTION(R9) BEQL 23$ ; NO-ADD TO LOCAL SEGMENT COUNT AND CONTINUE 22$: DECL R7 BRB 21$ ; REACHED END OF CURRENT SEGMENT-SEE IF IT NEEDS EXTENDING 23$: TSTL R7 ;SEE ABOUT EXT COUNT BGTR 24$ ;YES EXTEND MOVL PROGRAM_ELEMENT_L_UP_POINTER(R9),R0 CLRL PROGRAM_ELEMENT_L_DOWN_POINTER(R0) CLRL PROGRAM_ELEMENT_L_UP_POINTER(R9) CMPL R9,R11 ;SEE IF LAST SEGMENT BNEQ 20$ ;NO-DO NEXT SEGMENT BRW 30$ ;DONE EXTENTION-GO DO MOVE 24$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R9),R0 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R0) BEQL 25$ MOVL #,- PROGRAM_ELEMENT_L_FLAG(R6) 25$: MOVL R9,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R9) MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) DECL R7 BRW 23$ .PAGE ; START MOVEING SEGMENTS UP INTO VERTICAL PARALLEL LINES ; R11 POINTS TO ENDIF FOR THIS BLOCK IF STRUCTURE ; R10 POINTS TO IF/ELSEIF/ELSE FOR THIS BLOCK IF STRUCTURE ; R9 MAX LENGTH IN PROGRAM ELEMENTS OF PROGRAM SEGMENT IN IF ; 30$: MOVL R8,R9 ;SAVE LENGTH COUNT ; SCAN DOWN CURRENT SEGMENT TO NEXT ELSEIF/ELSE/ENDIF GET MAX WIDTH 37$: CLRL R8 CMPW #CHART_ACTION_M_ELSE,PROGRAM_ELEMENT_W_ACTION(R10);SEE IF DONE BNEQ 130$ BRW 100$ ;DONE 130$: MOVL R10,R7 ;DOWN SLIDER 31$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R0 ;NEXT DOWN BNEQ 1031$ BRW 1036$ 1031$: MOVL R0,R7 32$: CMPL R7,R11 ;END OF BLOCK IF BEQL 34$ CMPW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R7);CHECK CURR NEST LEVEL BNEQ 33$ ; CHECK FOR END OF CURRENT SEGMENT CMPW #CHART_ACTION_M_ELSE_IF,PROGRAM_ELEMENT_W_ACTION(R7) BEQL 34$ CMPW #CHART_ACTION_M_ELSE,PROGRAM_ELEMENT_W_ACTION(R7) BEQL 34$ ; STILL IN SEGMENT-FIND ITS WIDTH 33$: MOVL #1,R6 ;LOCAL COUNTER MOVL R7,R5 35$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R5),R5 BEQL 36$ INCL R6 BRB 35$ 36$: CMPL R6,R8 BLEQ 31$ MOVL R6,R8 BRB 31$ 1036$: MOVL R10,R7 ;MAKE SCAN TO GET START OF NEXT SEGMENT 2036$: MOVL (R7),R7 CMPL R7,R11 ;END OF BLOCK IF BEQL 34$ CMPW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R7) BNEQ 2036$ ; CHECK FOR END OF CURRENT SEGMENT CMPW #CHART_ACTION_M_ELSE_IF,PROGRAM_ELEMENT_W_ACTION(R7) BEQL 34$ CMPW #CHART_ACTION_M_ELSE,PROGRAM_ELEMENT_W_ACTION(R7) BEQL 34$ BRB 2036$ 34$: .PAGE ; R11 POINTS TO ENDIF ; R10 POINTS TO IF/ELSEIF/ELSE ; R9 MAX DEPTH COUNT ; R8 CURRENT SEGMENT MAX WIDTH COUNT ; R7 POINTS TO TERMINATEING ELSEIF/ELSE/ENDIF ; ; MOVE CONDITIONAL ACTION SEGMENT UP PARRALLEL WITH REST OF BLOCK IF ; PUSHR #^M PUSHR #^M MOVL R7,R11 ;SET UP POINTER TO SEGMENT TO BE MOVED PUSHR #^M MOVL R10,R7 ; SET UP THIS SEGMENT IF THE TOP HORIZ. LINE OF IF/ELSEIF/ELSE BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) BICL2 #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R11) BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R11) DECL R8 BLEQ 41$ 45$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL #,- PROGRAM_ELEMENT_L_FLAG(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R7) MOVL R7,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R0 BEQL 46$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 46$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 46$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R0 BEQL 1046$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 1046$ MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) 1046$: MOVL R6,R7 SOBGTR R8,45$ 41$: MOVL R7,PROGRAM_ELEMENT_L_LEFT_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_RIGHT_POINTER(R7) CLRL PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R0 BEQL 47$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 47$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 47$: .PAGE ; TOP LINE IS IN-PUT IN SPACERS AND BRING UP REST OF SEGMENT ; R11 POINTS TO CURR PROGRAM ELEMENT OF SEGMENT BEING MOVED UP ; R10 POINTS TO CURR ELEMENT OF SEGMENT ALREADY IN PLACE ; R9 LENGTH COUNTER ; R8 WIDTH COUNTER ; R7 LAST ADDED SPACER ; R6 NEXT SPACER 52$: TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R11) BNEQ 1052$ BRW 54$ 1052$: TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R10) BNEQ 2052$ BRW 54$ 2052$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 53$: MOVL R10,R7 MOVL (SP),R8 DECL R8 BGTR 48$ ;V2.16 BRW 55$ ;V2.16 48$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7),R6 BEQL 49$ MOVL R6,R7 DECL R8 BLEQ 55$ BRB 48$ 49$: TSTL R8 BLEQ 55$ MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R7) MOVL R7,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R0 BEQL 51$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 51$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 51$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R0 ;V2.16 BEQL 56$ ;V2.16 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.16 BEQL 56$ ;V2.16 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.16 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.16 56$: ;V2.16 MOVL R6,R7 DECL R8 BGEQ 49$ ; THIS ROW HAS ALL ITS SPACERS IN-CONNECT TO ADJ SEGMENT 55$: MOVL R7,PROGRAM_ELEMENT_L_LEFT_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_RIGHT_POINTER(R7) BRW 52$ 54$: POPR #^M POPR #^M POPR #^M BRW 37$ .PAGE 100$: ;CLEAN UP-PUT IN THE LINE BACK DOWN TO ENDIF POPR #^M ; R11 POINTS TO ENDIF ; R10 POINTS TO THE IF DECL NESTING_LEVEL ; SCAN BACK TO END OF FIRST CODE SEGMENT MOVL R10,R9 101$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R8 BEQL 102$ MOVL R8,R9 BRB 101$ 102$: MOVL R9,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R9) ; SCAN BACK-ADDING BLANK CONECTORS SAME ROW AS ENDIF 103$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R8 BEQL 110$ MOVL R8,R9 MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R9,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R9) MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R9),R0 BEQL 103$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 BEQL 103$ MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 BEQL 103$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 103$ MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) BRW 103$ 110$: ;NOW ADD IN AS APPROPRIATE RETURN LINE MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R8 BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R9) BEQL 111$ BITL #PROGRAM_FLAG_M_BOTTOM_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R9) ;V3.11 BEQL 117$ ;V3.11 BITL #PROGRAM_FLAG_M_BOTTOM_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R9) ;V3.11 BNEQ 111$ ;V3.11 117$: ;V3.11 BISL2 #,PROGRAM_ELEMENT_L_FLAG(R8) 111$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R8),R8 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R9),R9 CMPL R8,R11 BEQL 112$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R7 BITL #PROGRAM_FLAG_M_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R7) BEQL 113$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R8) 113$: BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R9) BEQL 111$ BITL #PROGRAM_FLAG_M_BOTTOM_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R9) ;V3.11 BEQL 118$ ;V3.11 BITL #PROGRAM_FLAG_M_BOTTOM_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R9) ;V3.11 BNEQ 111$ ;V3.11 118$: ;V3.11 BISL2 #,PROGRAM_ELEMENT_L_FLAG(R8) BRB 111$ 112$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R7 BITL #PROGRAM_FLAG_M_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R7) BEQL 114$ BISL2 #,PROGRAM_ELEMENT_L_FLAG(R8) 114$: BICL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R8) ;V3.11 BISL2 #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R8) ;V3.11 BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R9) BEQL 115$ BISL2 #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R8) ;V3.11 115$: BITL #,PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 BNEQ 1115$ ;V2.02 BICL2 #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R8),R0 ;V2.02 BEQL 1115$ ;V2.02 BICL2 #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 1115$: MOVL #1,R0 ;V2.02 CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 116$ CLRL R0 116$: RET .PAGE .SUBTITLE PHASE_2 MISC BLOCK IF/DO STATEMENTS PHASE_2_ACTION_7: PHASE_2_ACTION_8: PHASE_2_ACTION_9: MOVL #PROGRAM_FLAG_M_IF_NEST,R8 BRB PHASE_2_ACTION_7_CONTINUE PHASE_2_ACTION_12: MOVL #PROGRAM_FLAG_M_DO_NEST,R8 PHASE_2_ACTION_7_CONTINUE: CMPL R8,R10 ;SEE IF THIS CONSTRUCT FITS HERE BEQL 1$ ;NOPE-IT DOESNT-ONE NASTYGRAM COMEING UP CVTBL PHASE_2_LEVEL_0_ERROR_MSG,R6 MOVL PHASE_2_LEVEL_0_ERROR_MSG+4,R7 MOVC5 R6,(R7),#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT 1$: MOVL #1,R0 RET .PAGE .SUBTITLE PHASE_2 DO/DO_WHILE NESTED LEVEL HERE PHASE_2_ACTION_10: PHASE_2_ACTION_11: PUSHR #^M ;SAVE POINTER TO STARTING DO INCL NESTING_LEVEL ; SCAN UNTILL ENDDO OR LABEL LOOP TERMINATION FOUND MOVL #PROGRAM_FLAG_M_DO_NEST,R10 MOVL PROGRAM_ELEMENT_L_LOOP_LABEL(R11),R9 1$: CALLG NULL,PHASE_2_DISPATCH BLBC R0,100$ ;NESTING ERROR-FOUND END ; CHECK FOR DONE WITH DO LOOP CONDITION ; SEE IF TERMINATION LABEL WAS USED OR WAS ENDDO TSTL R9 BEQL 2$ ; CHECK FOR MATCH OF LABEL CMPL R9,PROGRAM_ELEMENT_L_LABEL(R11) ;CHECK FOR TERMIANTEING LABEL BEQL 200$ ;YES ; THIS COULD ALSO BE A TERMINATION WITH A LOGICAL IF MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 BEQL 1$ CMPW #CHART_ACTION_M_IF_LOGICAL,PROGRAM_ELEMENT_W_ACTION(R0) BNEQ 1$ CMPL R9,PROGRAM_ELEMENT_L_LABEL(R0) BEQL 200$ ;LOGICAL IF TERMINATES BRB 1$ ; CHECK FOR ENDDO TERMINATION-GOOD ONLY FOR CURRENT NESTING LEVEL 2$: CMPW NESTING_LEVEL,PROGRAM_ELEMENT_W_NEST(R11) ;V2.01 BNEQ 1$ ;V2.01 CMPW #CHART_ACTION_M_ENDDO,PROGRAM_ELEMENT_W_ACTION(R11) BEQL 200$ ;ENDDO FOUND BRB 1$ ; NESTING ERROR WAS FOUND-POST NASTY MESSAGE 100$: PUSHAL PHASE_2_END_ERR_MSG CALLS #1,ERROR_LINE PUSHAL PHASE_2_END_ERR_MSG CALLS #1,G^LIB$PUT_OUTPUT $EXIT_S ;V3.16 ; END OF DO LOOP FOUND AND ALL INTERMIDIATE STRUCTURES PUT IN ; NOW SET UP FLOW CHART FOR DO 200$: POPR #^M .PAGE ; ; DO LOOP WILL BE SHOWN IN THE FORM ; ; | ; ------- ; | | ; | |------+ ; | | | ; ------- | ; ^ V ; | | ; | _____ ; | | | ; | | | ; | | | ; | _____ ; | | (TERMINATEING LABEL IS HERE) ; +---------+ ; | ; ; R11 POINTS TO LAST PROGRAM ELEMENT SCANNED IN PHASE 2 ; R10 POINTS TO DO PIXEL ; ; IN THE CASE OF NESTED DO LOOPS SHAREING THE SAME TERMINATEING ; LABEL-HAVE TO DO SPECIAL CASE CHECK AND ADJUSTMENT ; SO THAT R0 POINTS TO THE PROPER PIXEL TO TERMINATE THE DO LOOP PUSHR #^M ;SAVE POINTER TO LAST PIXEL SCANNED MOVL (R11),R11 ;GET POINTER TO PIXEL FOLLOWING TERMINATION ;OF THE DO LOOP ; PUT IN ONE UP CONNECTOR FROM DO TO CONTENTS OF DO LOOP BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R9 ;GET POINTER TO CONNECTOR INSQUE (R9),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R9) MOVL #,PROGRAM_ELEMENT_L_FLAG(R9) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R9) MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R9) MOVL R9,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R0 BEQL 201$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 201$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R9) MOVL R9,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 201$: MOVL (R10),R8 ;GET FIRST PROGRAM ELEMENT PAST DO STATEMENT MOVL R8,PROGRAM_ELEMENT_L_DOWN_POINTER(R9) MOVL R9,PROGRAM_ELEMENT_L_UP_POINTER(R8) ; NOW SLIDE DOWN TO THE END OF THE DO LOOP ; R11 POINTS TO STATEMENT JUST PAST END OF DO LOOP STATEMENT ; R10 POINTS TO DOSTATEMENT/OR LAST UP LINE CONNECTOR GENERATED ; R9 INSIDE LOOP PROGRAM ELEMENT TO RIGHT SIDE OF (R10) ; 202$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R9 ;NEXT LOOP ELE DOWN CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL #,- PROGRAM_ELEMENT_L_FLAG(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R9,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R9) MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) MOVL R6,R10 CMPL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R11;SEE IF AT END OF LOOP YET BNEQ 202$ ; R11 POINTS TO ELEMENT FOLLOWING END OF DO LOOP ; R10 NEW ADDED CONNECTOR BACK UP TO "DO" JUST TO LEFT OF LAST STATEMENT ; R9 LAST STATEMENT IN DO LOOP ; END OF LOOP-PUT ON FINISHING TOUCHES ; SEE IF FINAL ELEMENT IN DO LOOP IS ENDDO OR CONTINUE ;V3.11 ; IF SO HANDLE DIFFERENT ;V3.11 CMPW #CHART_ACTION_M_ENDDO,PROGRAM_ELEMENT_W_ACTION(R9) ;V3.11 BEQL 212$ ;V3.11 CMPW #CHART_ACTION_M_CONTINUE,PROGRAM_ELEMENT_W_ACTION(R9) ;V3.11 BNEQ 217$ ;V3.11 212$: BRW 213$ ;V3.11 217$: ;V3.11 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL #,- PROGRAM_ELEMENT_L_FLAG(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R7 INSQUE (R7),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R7) MOVL #,PROGRAM_ELEMENT_L_FLAG(R7) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R7) MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) MOVL R7,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R7) MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R11) MOVL R9,PROGRAM_ELEMENT_L_UP_POINTER(R7) MOVL R7,PROGRAM_ELEMENT_L_DOWN_POINTER(R9) MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R0 BEQL 210$ MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R7) MOVL R7,PROGRAM_ELEMENT_L_UP_POINTER(R0) 210$: POPR #^M MOVL #1,R0 CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 211$ CLRL R0 211$: DECL NESTING_LEVEL RET ; HANDLE CASE OF ENDDO TERMINATION OF DO LOOP ;V3.11 ; R11 ELEMENT FOLLOWING END OF DO LOOP ;V3.11 ; R10 NEW CONNECTOR TO LEFT OF ENDDO ;V3.11 ; R9 POINTER TO ENDDO ;V3.11 213$: CMPW #CHART_ACTION_M_CONTINUE,PROGRAM_ELEMENT_W_ACTION(R9) ;V3.11 BEQL 218$ ;V3.11 MOVL #,PROGRAM_ELEMENT_L_FLAG(R9) ;V3.11 BRB 219$ ;V3.11 218$: MOVL #- ;V3.11 ,PROGRAM_ELEMENT_L_FLAG(R9) ;V3.11 219$: MOVL #,- ;V3.11 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.11 MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V3.11 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R11) ;V3.11 CLRL PROGRAM_ELEMENT_L_DOWN_POINTER(R9) ;V3.11 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R0 ;V3.11 BEQL 214$ ;V3.11 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R9) ;V3.11 MOVL R9,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V3.11 214$: POPR #^M ;V3.11 MOVL #1,R0 ;V3.11 CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) ;V3.11 BNEQ 215$ ;V3.11 CLRL R0 ;V3.11 215$: DECL NESTING_LEVEL ;V3.11 RET ;V3.11 .PAGE .SUBTITLE PHASE_2 SIMPLE GOTO PHASE_2_ACTION_13: MOVL PROGRAM_ELEMENT_L_DEST_LABEL(R11),R7 TSTL LABEL_ELEMENT_L_DEFINED(R7) BEQL 1$ BRW 2$ 1$: CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R7) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT CLRL PROGRAM_ELEMENT_L_DEST_LABEL(R11) BRB 3$ 2$: BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) 3$: MOVL #1,R0 RET .PAGE .SUBTITLE PHASE_2 ACTION HANDLE END-DONE PHASE 2 PHASE_2_ACTION_20: CLRL R0 RET .PAGE .SUBTITLE PHASE_2 ACTION HANDLE CHECK OF ASSIGNED GOTO PHASE_2_ACTION_14: MOVL PROGRAM_ELEMENT_L_VAR_POINTER(R11),R5 MOVAL VARIABLE_ELEMENT_L_LIST(R5),R4 MOVAL 64(R5),R3 MOVL VARIABLE_ELEMENT_L_COUNT(R5),R8 MOVL VARIABLE_ELEMENT_L_EXTENTION(R5),R5 202$: CMPL R4,R3 BLSS 210$ MOVAL VARIABLE_EXTENTION_L_LIST(R5),R4 MOVAL 64(R5),R3 MOVL VARIABLE_EXTENTION_L_EXTENTION(R5),R5 210$: MOVL (R4),R0 ;GET LABEL BINARY VALUE CALLG NULL,FIND_INSERT_LABEL_QUEUE_ELEMENT TSTL LABEL_ELEMENT_L_DEFINED(R1) BEQL 211$ BRW 212$ 211$: PUSHR #^M MOVL R1,R7 CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R7) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT POPR #^M CLRL (R4)+ BRB 205$ 212$: MOVL R1,(R4)+ 205$: DECL R8 BLEQ 216$ BRW 202$ 216$: MOVL #1,R0 BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) RET .PAGE .SUBTITLE PHASE_2 ACTION HANDLE CHECK OF COMPUTED GOTO PHASE_2_ACTION_15: MOVL PROGRAM_ELEMENT_L_COUNT(R11),R8 MOVAL PROGRAM_ELEMENT_L_LIST(R11),R5 102$: MOVL (R5)+,R4 ;GET POINTER TO LABEL ELEMENT TSTL LABEL_ELEMENT_L_DEFINED(R4) ;SEE IF REALLY DEFINED BEQL 111$ BRW 110$ ; LABEL USED BUT NEVER DEFINED-ERROR CONDITION 111$: PUSHR #^M MOVL R4,R7 CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R7) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT POPR #^M CLRL -4(R5) 110$: DECL R8 BLEQ 115$ BRW 102$ 115$: MOVL #1,R0 BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) RET .PAGE .SUBTITLE PHASE_2 ACTION 24-EXPAND CALL STATEMENTS PHASE_2_ACTION_24: MOVL PROGRAM_ELEMENT_L_CALL_COUNT(R11),R8 ;GET COUNT OF ALT RETURN LABELS BGTR 1$ ;THEY DO EXIST MOVL #1,R0 ;NONE-NO ACTION NEEDED RET 1$: 101$: MOVAL PROGRAM_ELEMENT_L_CALL_LIST(R11),R5 102$: MOVL (R5)+,R4 ;GET POINTER TO LABEL ELEMENT TSTL LABEL_ELEMENT_L_DEFINED(R4) ;SEE IF REALLY DEFINED BEQL 111$ BRW 110$ ; LABEL USED BUT NEVER DEFINED-ERROR CONDITION 111$: PUSHR #^M MOVL R4,R7 CVTBL PHASE_3_NO_DEST_ERR_MSG,R6 MOVC5 R6,@PHASE_3_NO_DEST_ERR_MSG+4,#0,#132,STRING PUSHL #0 PUSHL #4 PUSHL #0 MOVL #5,DESCRIPTER MOVAL STRING+27,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R7) CALLS #5,G^OTS$CVT_L_TI PUSHL #0 PUSHL #4 PUSHL #0 MOVL #10,DESCRIPTER MOVAL STRING,DESCRIPTER+4 ADDL2 R6,DESCRIPTER+4 PUSHAL DESCRIPTER PUSHAL PROGRAM_ELEMENT_L_LINE_NUMBER(R11) CALLS #5,G^OTS$CVT_L_TI ADDL3 #10,R6,DESCRIPTER MOVAL STRING,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,ERROR_LINE PUSHAL DESCRIPTER CALLS #1,G^LIB$PUT_OUTPUT POPR #^M CLRL -4(R5) 110$: DECL R8 BLEQ 115$ BRW 102$ 115$: MOVL #1,R0 BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) RET .PAGE .SUBTITLE PHASE_2_B SQUARE OFF THE RAGGED EDGES OF MATRIX PHASE_2_B: ; FIRST ON THE RIGHT FIND OUT JUST HOW FAR OUT ON THE RIGHT AND LEFT ; IS THE LARGEST EXCERSION MOVL PROGRAM_QUEUE,R11 ;GET STARTING ADDRESS CLRL R10 ;RIGHT MAX COUNTER CLRL R9 ;LEFT MAX COUNTER 1$: CLRL R8 ;SET UP CHECK TO RIGHT MOVL R11,R7 ;WORK WITH COPY 2$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7),R7 ;GET NEXT RIGHT BEQL 3$ ;NONE THERE INCL R8 BRB 2$ 3$: CMPL R8,R10 ;SEE IF NEW MAX BLEQ 4$ ;NOPE MOVL R8,R10 ;UPDATE NEW MAX TO RIGHT 4$: CLRL R8 ;NOW START CHECK TO LEFT MOVL R11,R7 5$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R7),R7 ;GET NEXT LEFT BEQL 6$ INCL R8 BRB 5$ 6$: CMPL R8,R9 BLEQ 7$ MOVL R8,R9 7$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 ;GET NEXT ROW DOWN BEQL 100$ BRW 1$ ;START NEXT ROW CHECK 100$: ;NOW FILL OUT THE MATRIX SO IT IS SQUARE MOVL PROGRAM_QUEUE,R11 ;START AT TOP AGAIN 101$: MOVL R10,R8 ;SET UP FILL TO RIGHT TSTL R10 BNEQ 1101$ ;CHECK FOR NO FILL BRW 110$ 1101$: MOVL R11,R7 102$: TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7) ;ANYTHING TO RIGHT BEQL 103$ ;NO-START FILLING MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7),R7 ;GET NEXT SOBGTR R8,102$ ;LOOP UNTILL DONE BRW 110$ ;GO TO LEFT FILL 103$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R7,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R7) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R5 BEQL 104$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R5),R5 BEQL 104$ MOVL R5,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R5) 104$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R5 BEQL 105$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R5),R5 BEQL 105$ MOVL R5,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R5) 105$: MOVL R6,R7 SOBGTR R8,103$ 110$: ;FILL TO RIGHT COMPLETE-NOW START FILL TO LEFT MOVL R9,R8 ;SET UP FILL TO RIGHT MOVL R11,R7 TSTL R8 ;CHECK FOR NO FILL BNEQ 112$ BRW 120$ 112$: TSTL PROGRAM_ELEMENT_L_LEFT_POINTER(R7) ;ANYTHING TO LEFT BEQL 113$ ;NO-START FILLING MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R7),R7 ;GET NEXT SOBGTR R8,112$ ;LOOP UNTILL DONE BRW 120$ ;GO TO NEXT PHASE 113$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R7,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R7) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R5 BEQL 114$ MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R5),R5 BEQL 114$ MOVL R5,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R5) 114$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R5 BEQL 115$ MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R5),R5 BEQL 115$ MOVL R5,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R5) 115$: MOVL R6,R7 SOBGTR R8,113$ 120$: ;FILL COMPLETE-MATRIX IS NOW RECTANGULAR CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) BEQL 121$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 BRW 101$ 121$: BRW PHASE_2_C ;GO TO NEXT PHASE-FILL IN THE X,Y COORD .PAGE .SUBTITLE PHASE_2_C FILL IN THE X,Y CORRDINATES PHASE_2_C: CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y BRW PHASE_2_D .ENTRY ENTER_PROGRAM_ELEMENTS_X_Y,^M MOVL PROGRAM_QUEUE,R11 ;GET START OF PROGRAM MATRIX CLRL R10 ;X COUNTER 1$: MOVL R10,PROGRAM_ELEMENT_L_X(R11) ;SET UP SPINE COORD CLRL PROGRAM_ELEMENT_L_Y(R11) CLRL R9 MOVL R11,R8 2$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R8 ;NEXT TO RIGHT BEQL 3$ INCL R9 MOVL R10,PROGRAM_ELEMENT_L_X(R8) MOVL R9,PROGRAM_ELEMENT_L_Y(R8) BRB 2$ 3$: CLRL R9 MOVL R11,R8 4$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R8),R8 ;NEXT LEFT BEQL 5$ DECL R9 MOVL R10,PROGRAM_ELEMENT_L_X(R8) MOVL R9,PROGRAM_ELEMENT_L_Y(R8) BRB 4$ 5$: INCL R10 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 BNEQ 1$ RET .PAGE .SUBTITLE PHASE_2_D FILL IN COMES FROM INFORMATION PHASE_2_D: MOVL PROGRAM_QUEUE,R11 1$: CALLG NULL,DISPATCH_PHASE_2_D CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 2$ BRW PHASE_2_E ;V2.02 2$: MOVL (R11),R11 BRB 1$ .ENTRY DISPATCH_PHASE_2_D,^M CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 1$ BRW PHASE_2_D_IF 1$: CMPW #CHART_ACTION_M_GOTO,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 2$ BRW PHASE_2_D_GOTO 2$: CMPW #CHART_ACTION_M_GOTO_ASSIGN,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 3$ BRW PHASE_2_D_ASSIGNED 3$: CMPW #CHART_ACTION_M_COMPUTED,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 4$ BRW PHASE_2_D_COMPUTED 4$: CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 5$ BRW PHASE_2_D_IO 5$: CMPW #CHART_ACTION_M_CALL,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 6$ BRW PHASE_2_D_CALL 6$: RET .PAGE .SUBTITLE PHASE_2_D CALL PHASE_2_D_CALL: MOVL PROGRAM_ELEMENT_L_CALL_COUNT(R11),R10 ;GET NUMBER OF ALT ;RETURN LABELS BNEQ 1$ RET ;NONE-NO ACTION REQUIRED 1$: MOVL R11,R0 MOVAL PROGRAM_ELEMENT_L_CALL_LIST(R11),R9 2$: MOVL (R9)+,R1 BEQL 3$ MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 CALLG NULL,INSERT_COMES_FROM_LABEL 3$: SOBGTR R10,2$ RET .PAGE .SUBTITLE PHASE_2_D I/O PHASE_2_D_IO: ; I/O STATEMENTS CAN HAVE END= AND ERR= BRANCHES MOVL PROGRAM_ELEMENT_L_END(R11),R1 BEQL 1$ MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 CALLG NULL,INSERT_COMES_FROM_LABEL 1$: MOVL PROGRAM_ELEMENT_L_ERR(R11),R1 BEQL 2$ CMPL PROGRAM_ELEMENT_L_END(R11),R1 BEQL 2$ MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 CALLG NULL,INSERT_COMES_FROM_LABEL 2$: RET .PAGE .SUBTITLE PHASE_2_D ARITHMETIC IF PHASE_2_D_IF: ; EXIT LOGIC ; ALL LABELS HAVE COMMON EXIT TO RIGHT MOVL PROGRAM_ELEMENT_L_LESS_THAN(R11),R1 ;GET POINTER TO LABEL BEQL 4$ MOVL R11,R0 ;GET SOURCE PIXEL PTR MOVL #EXIT_STAGE_RIGHT,R2 ;EXIT DIRECTION CALLG NULL,INSERT_COMES_FROM_LABEL 4$: MOVL PROGRAM_ELEMENT_L_EQUAL(R11),R1 BEQL 20$ CMPL R1,PROGRAM_ELEMENT_L_LESS_THAN(R11) BEQL 20$ MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 CALLG NULL,INSERT_COMES_FROM_LABEL 20$: MOVL PROGRAM_ELEMENT_L_GREATER_THAN(R11),R1 BEQL 30$ CMPL R1,PROGRAM_ELEMENT_L_LESS_THAN(R11) BEQL 30$ CMPL R1,PROGRAM_ELEMENT_L_EQUAL(R11) BEQL 30$ MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 ;EXIT DIRECTION CALLG NULL,INSERT_COMES_FROM_LABEL 30$: RET .SUBTITLE PHASE_2_D SIMPLE GOTO PHASE_2_D_GOTO: MOVL PROGRAM_ELEMENT_L_DEST_LABEL(R11),R1 BEQL 1$ MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 CALLG NULL,INSERT_COMES_FROM_LABEL 1$: RET .PAGE .SUBTITLE PHASE_2_D COMPUTED GOTO PHASE_2_D_COMPUTED: MOVL PROGRAM_ELEMENT_L_COUNT(R11),R10 MOVAL PROGRAM_ELEMENT_L_LIST(R11),R9 1$: MOVL (R9)+,R1 BEQL 2$ ;BR TO NEX LABEL MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 CALLG NULL,INSERT_COMES_FROM_LABEL 2$: SOBGTR R10,1$ RET .PAGE .SUBTITLE PHASE_2_D ASSIGNED GOTO PHASE_2_D_ASSIGNED: MOVL PROGRAM_ELEMENT_L_VAR_POINTER(R11),R9 MOVL VARIABLE_ELEMENT_L_COUNT(R9),R10 MOVAL VARIABLE_ELEMENT_L_LIST(R9),R8 MOVAL 64(R9),R7 MOVL VARIABLE_ELEMENT_L_EXTENTION(R9),R9 1$: CMPL R8,R7 BLSSU 2$ MOVAL VARIABLE_EXTENTION_L_LIST(R9),R8 MOVAL 64(R9),R7 MOVL VARIABLE_EXTENTION_L_EXTENTION(R9),R9 2$: MOVL (R8)+,R1 BEQL 3$ MOVL R11,R0 MOVL #EXIT_STAGE_RIGHT,R2 CALLG NULL,INSERT_COMES_FROM_LABEL 3$: SOBGTR R10,1$ RET .PAGE ;V2.02 .SUBTITLE PHASE_2_E MOVE ISOLATED BLOCK WITH 1 SOURCE TO LABEL ;V2.02 PHASE_2_E: ;V2.02 ; ;V2.02 ; THIS PHASE SCANS THE PROGRAM ELEMENT/PIXEL ARRAY FOR A BLOCK OF CODE ;V2.02 ; MEETING THE FOLLOWING CRITERION ;V2.02 ; 1 HAS ONLY ONE ENTRY POINT VIA A TANSFER TO A LABEL ;V2.02 ; AT THE START OF THE BLOCK. NO OTHER WAYS INTO THE BLOCK ;V2.02 ; ARE ACCEPTABLE ;V2.02 ; BRANCHES TO LABEL FROM WITHIN BLOCK OK ;V2.02 ; 2 THERE EXISTS ONE AND ONLY TRANSER STATEMENT TO THE ;V2.02 ; SPECIFIED BLOCK OF CODE(NO AUXILIARY ENTRY POINTS) ;V2.02 ; 3 THE END OF THE BLOCK IS A TRANSFER STATEMENT,RETURN ;V2.02 ; STOP,END. (A CALL EXIT DOES NOT HACK IT HERE) ;V2.02 ; ;V2.02 ; ACTIONS TAKEN WHEN SUCH A BLOCK IS FOUND IS AS FOLLOWS ;V2.02 ; 1 LOCATE THE TRANSFER STATEMENT TO THE BLOCK ;V2.02 ; 2 DETERMINE THE SIZE OF THE CODE BLOCK TO BE MOVED ;V2.02 ; 3 TO THE RIGHT AND BELOW OF XFER STATEMENT AN EMPTY ;V2.02 ; BLOCK OF CONNECTORS THE SAME SIZE AS THE TARGET BLOCK ;V2.02 ; 4 EXCHANGE THE BLOCK FOR THE CONNECTORS ;V2.02 ; 5 SQUEEZE OUT UNEEDED ROWS AND COLUMNS ;V2.02 ; 5 RENUMBER THE PIXEL MATRIX ;V2.02 ; ;V2.02 ; ;V2.02 ; SEE IF THIS PHASE IS WANTED ;V2.06 BITL #NO_MOVE_FLAG,FLAG_WORD+4 ;V2.06 BEQL 1001$ ;V2.06 BRW PHASE_3 ;V2.06 1001$: ;V2.06 ; START SCAN OF LABELS FOR A ONE SOURCE LABEL ;V2.02 MOVAL LABEL_QUEUE,R11 ;GET STARTING ADDR OF QUEUE ;V2.02 MOVL R11,R10 ;WORK ON COPY OF POINTER ;V2.02 1$: MOVL (R10),R10 ;GET NEXT ELEMENT ;V2.02 CMPL R10,R11 ;SEE IF DONE ;V2.02 BNEQ 2$ ;NO ;V2.02 BRW PHASE_3 ;V2.02 2$: MOVL LABEL_ELEMENT_L_TOKEN(R10),R8 ;SEE IF DEFINED ;V2.02 BEQL 1$ ;NO-SKIP TO NEXT ;V2.02 TSTL LABEL_ELEMENT_L_COME_FROM(R10) ;CHECK EXTENTION LIST ;V2.02 BEQL 1$ ;NOT USED-SKIP ;V2.02 ; WE HAVE A CANDIDATE ;V2.02 ; SEE IF IT HAS ANY INPUTS OTHER THAN THE LABEL ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 BNEQ 1$ ;YES-SKIP ;V2.02 ; IS IT IN THE TOP ROW (ENTRY POINT) ;V2.02 TSTL PROGRAM_ELEMENT_L_X(R8) ;V2.02 BEQL 1$ ;YES-SKIP ;V2.02 ; LABELED PIXEL OK SO FAR-NOW CHECK DOWN TO END OF BLOCK AND ALSO ;V2.02 ; OBTAIN ITS LIMITS ;V2.02 ; R11 POINTER TO LABEL QUEUE HEADER ;V2.02 ; R10 POINTER TO CURRENT ENTRY IN LABEL QUEUE ;V2.02 ; R9 POINTER TO SOLE SOURCE ;V2.02 ; R8 POINTER TO DESTINATION ;V2.02 ; ;V2.02 ; THE LABELD PIXEL IS CONSIDEDRED UPPER LEFT HAND CORNER OF BLOCK-SET UP ;V2.02 ; THE X/Y LIMITS FOUND INFO ;V2.02 ; R7 MAX LEFT Y ;V2.02 ; R6 MAX RIGHT Y ;V2.02 ; R5 MAX UP X ;V2.02 ; R4 MAX DOWN X ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R8),R5 ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R8),R4 ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R8),R6 ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R8),R7 ;V2.02 ; FOLLOW ALL POSSABLE PATHS FROM LABEL-MARK ALL PIXELS IN THE BLOCK ;V2.02 CALLG NULL,MARK_THE_BLOCK ;V2.02 ; NEXT IS TO SCANN THE PIXEL MATRIX FOR LABELS IN THE TARGET BLOCK ;V2.02 ; AND TO SEE IF THEY FIT THE ABOVE CRITERION ;V2.02 PUSHR #^M ;V2.02 ; R11 ADDR OF PROGRAM_QUEUE ;V2.02 ; R10 ADD OF CURR PIXEL BEING CHECKED ;V2.02 ; R9 ADD OF LABEL ELEMENT OF CURRENT PIXEL ;V2.02 ; R8 HEAD OF BLOCK CURRENTLY UNDER EXAMINATION ;V2.02 ; R1 POINTER TO SOLE EXTERNAL SOURCE ;V2.02 ; R0 EXTERNAL SOURCE FLAG ;V2.02 MOVAL PROGRAM_QUEUE,R11 ;V2.02 MOVL R11,R10 ;V2.02 CLRL R1 ;V2.02 1002$: MOVL (R10),R10 ;V2.02 CMPL R10,R11 ;V2.02 BNEQ 2002$ ;V2.02 TSTL R1 ;V2.02 BEQL 7002$ ;V2.02 BRW 3$ ;WE HAVE A BLOCK TO XFER ;V2.02 2002$: BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R10) ;V2.02 BEQL 1002$ ;V2.02 CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R10) ;V2.02 BEQL 1002$ ;V2.02 MOVL PROGRAM_ELEMENT_L_LABEL(R10),R9 ;V2.02 BEQL 1002$ ;V2.02 CMPL R10,R8 ;IS THIS THE HEAD OF THE BLOCK ;V2.02 BEQL 3002$ ;YES-CHECK FOR MORE THAN ONE OUTSIDE ENTRY ;V2.02 CLRL R0 ;SET OUTSIDE SOURCE COUNTER ;V2.02 BRB 4002$ ;NO-CHECK FOR ANY OUTSIDE ENTRY ;V2.02 3002$: MOVL #1,R0 ;SET OUTSIDE SOURCE COUNTER ;V2.02 4002$: MOVL LABEL_ELEMENT_L_COME_FROM(R9),R7 ;V2.02 BEQL 1002$ ;UNUSED LABEL-CONTINE TO NEXT PIXEL ;V2.02 MOVAL LABEL_EXTENTION_L_LIST(R7),R6 ;V2.02 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R7),R5 ;V2.02 5002$: MOVL (R6)+,R4 ;V2.02 BEQL 1002$ ;LABEL OK-GO TO NEXT PIXEL ;V2.02 CMPL #-1,R4 ;V2.02 BEQL 6002$ ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R4) ;V2.02 BNEQ 6002$ ;LABEL IS INTERNAL TO BLOCK ;V2.02 DECL R0 ;NO-SEE IF EXTERNAL COUNT IS CLEARED YET ;V2.02 BLSS 7002$ ;EXTERNAL SOURCE DISQUALIFIES-BACK UP AND CONTIUE CHECK ;V2.02 MOVL R4,R1 ;SAVE POINTER TO EXTERNAL SOURCE ;V2.02 6002$: CMPL R6,R5 ;SEE IF DONE THIS ELEMENT ;V2.02 BLSSU 5002$ ;V2.02 MOVL LABEL_EXTENTION_L_EXTENTION(R7),R7 ;V2.02 BNEQ 8002$ ;NOT DONE YET ;V2.02 TSTL R0 ;DONE LABEL-SCAN-IS THERE AN EXTERNAL SOURCE ;V2.02 BGTR 7002$ ;NO EXTERNAL SOURCE-DON'T BOTHER WITH THIS ONE ;V2.02 BRW 1002$ ;LABEL OK-GO TO NEXT PIXEL ;V2.02 8002$: MOVAL LABEL_EXTENTION_L_LIST(R7),R6 ;V2.02 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R7),R5 ;V2.02 BRB 5002$ ;AND CONTINUE ;V2.02 7002$: CALLG NULL,CLEAR_BLOCK ;V2,02 POPR #^M ;V2.02 BRW 1$ ;CONTINUE TO NEXT LABEL ;V2.02 ; OK-WE HAVE A BLOCK TO XFER-HAVE AT IT ;V2.02 3$: ;V2.02 POPR #^M ;V2.02 MOVL R1,R9 ;SAVE POINTER TO EXERANL SOURCE ;V2.02 ; FIRST FIND OUT HOW WIDE AND DEEP AN AREA THE BLOCK TO BE MOVED REQUIRES ;V2.02 ; R11 POINTER TO LABEL QUEUE HEADER ;V2.02 ; R10 POINTER TO CURRENT ENTRY IN LABEL QUEUE ;V2.02 ; R9 POINTER TO SOLE SOURCE ;V2.02 ; R8 POINTER TO DESTINATION ;V2.02 ; R7 MAX LEFT Y ;V2.02 ; R6 MAX RIGHT Y ;V2.02 ; R5 MAX UP X ;V2.02 ; R4 MAX DOWN X ;V2.02 SUBL3 R7,R6,R3 ;CALC WIDTH OF BLOCK ;V2.02 INCL R3 ;V2.02 SUBL3 R5,R4,R2 ;CALC DEPTH OF BLOCK ;V3.11 INCL R2 ;V2.02 PUSHR #^M ;V2.04 ; REMOVE THE BLOCK OF CODE TO BE MOVED FROM THE PIXEL MATRIX AND REPLACE ;V2.02 ; THE REMOVED PIXELS WITH BLANK CONNECTORS ;V2.02 ; THE POINTER (R8) IS TH ONLY LINK TO THE BLOCK ;V2.02 CALLG NULL,REMOVE_BLOCK ;V2.02 ; IF NOT DONE ALREADY ;V2.02 ; ADD SPLIT ROW TO RIGHT OF SOURCE STATEMENT ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R0 ;V2.02 BEQL 7003$ ;V3.11 CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V2.02 BNEQ 6003$ ;V2.02 BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 BNEQ 7003$ ;V2.02 6003$: MOVL PROGRAM_ELEMENT_L_X(R9),R0 ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R9),R1 ;V2.02 CALLG NULL,ADD_ROW_TO_MIDDLE ;V2.02 7003$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R7 ;V2.02 BNEQ 5003$ ;V2.02 CALLG NULL,ADD_TO_RIGHT_SIDE ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R7 ;V2.02 ; DEPENDING ON THE TYPE OF BRANCH (ONE OR MORE BRANCHES LEAVING ; THE PIXEL TO HE LEFT-THE UPPER LEFT CORNER OF THE TARGET AREA ; IS EITHER JUST TO THE RIGHT OF THE OF THE COME FROM OR RIGHT AND DOWN 5003$: CMPW #CHART_ACTION_M_GOTO,PROGRAM_ELEMENT_W_ACTION(R9) ;V2.02 BEQL 1003$ ;V2.02 CMPW #CHART_ACTION_M_CALL,PROGRAM_ELEMENT_W_ACTION(R9) ;V2.06 BNEQ 15003$ ;V2.06 CMPL #1,PROGRAM_ELEMENT_L_CALL_COUNT(R9) ;V2.06 BLSS 2003$ ;V2.06 BRB 1003$ ;V2.06 15003$: CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R9) ;V2.06 BNEQ 2003$ ;V2.02 CMPL PROGRAM_ELEMENT_L_ERR(R9),PROGRAM_ELEMENT_L_END(R9) ;V2.02 BEQL 1003$ ;V2.02 TSTL PROGRAM_ELEMENT_L_ERR(R9) ;V2.02 BEQL 1003$ ;V2.02 TSTL PROGRAM_ELEMENT_L_END(R9) ;V2.02 BEQL 1003$ ;V2.02 2003$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R7 ;V2.02 ; R9 SOLE SOURCE ;V2.02 ; R8 DESTINATION ;V2.02 ; R7 POINTS TO UPPER LEFT CORNER OF TARGET AREA ;V2.02 ; R3 WIDTH OF BLOCK ;V2.02 ; R2 DEPTH OF BLOCK ;V2.02 1003$: ;V2.02 ; MAKE ROOM NEXT TO DEST FOR THE BLOCK ;V2.02 CALLG NULL,CHECK_BLOCK_CLEAR ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R7 ;V2.02 CMPW #CHART_ACTION_M_GOTO,PROGRAM_ELEMENT_W_ACTION(R9) ;V2.02 BEQL 4003$ ;V2.02 CMPW #CHART_ACTION_M_CALL,PROGRAM_ELEMENT_W_ACTION(R9) ;V2.06 BNEQ 16003$ ;V2.06 CMPL #1,PROGRAM_ELEMENT_L_CALL_COUNT(R9) ;V2.06 BLSS 3003$ ;V2.06 BRB 4003$ ;V2.06 16003$: CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R9) ;V2.06 BNEQ 3003$ ;V2.02 CMPL PROGRAM_ELEMENT_L_ERR(R9),PROGRAM_ELEMENT_L_END(R9) ;V2.02 BEQL 4003$ ;V2.02 TSTL PROGRAM_ELEMENT_L_ERR(R9) ;V2.02 BEQL 4003$ ;V2.02 TSTL PROGRAM_ELEMENT_L_END(R9) ;V2.02 BEQL 4003$ ;V2.02 3003$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R7 ;V2.02 4003$: ;V2.02 ;NOW JUST BELOW AND TO THE RIGHT OF SOLE SOURCE-EXCHANCE EMPTY CONNECTORS ;V2.02 ;FOR THE BLOCK POINTED TO BY R8 ;V2.02 ; LOAD STARTING PIXEL IN BLOCK WITH NEW ADDRESS ;V2.02 22$: MOVL PROGRAM_ELEMENT_L_X(R7),PROGRAM_ELEMENT_L_X(R8) ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R7),PROGRAM_ELEMENT_L_Y(R8) ;V2.02 BISL2 #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R8) ;V2.02 CALLG NULL,NUMBER_THE_BLOCK ;V2.02 ; NOW START THE SCAN TO REPLACE THE EMPTY CONNECTORS WITH THE CODE BLOCK ;V2.02 MOVAL PROGRAM_QUEUE,R11 ;V2.02 MOVL R11,R10 ;V2.02 5$: MOVL (R10),R10 ;V2.02 CMPL R10,R11 ;V2.02 BEQL 10$ ;V2.02 BITL #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R10) ;V2.02 BEQL 5$ ;V2.02 CALLG NULL,REPLACE_PIXEL ;V2.02 BRB 5$ ;V2.02 10$: CALLG NULL,CLEAR_BLOCK ;V2.02 POPR #^M ;V2.04 ; R11 POINTER TO HEAD OF LABEL QUEUE ;V2.02 ; R10 POINTER TO LABEL QUEUE ENTRY ;V2.02 ; R9 POINTER TO SOLE SOURCE ;V2.04 ; R8 POINTER TO DEST. ;V2.04 ; MARK IN THE LINE FROM DEST TO OUTSIDE SOURCE ;V2.02 BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R9) ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R0 ;V2.02 CMPL R0,R8 ;V2.02 BNEQ 2010$ ;V2.02 BISL2 #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 MOVL R9,R0 ;V2.02 MOVL R8,R9 ;V2.02 MOVL R0,R8 ;V2.02 BRW 5075$ ;V2.02 2010$: BISL2 #,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 BISL2 #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 MOVL R0,R7 ;V2.04 MOVL PROGRAM_ELEMENT_L_LABEL(R8),PROGRAM_ELEMENT_L_DOWN_LABEL(R0) ;V2.02 MOVL R9,R0 ;V2.02 MOVL R8,R9 ;V2.02 MOVL R0,R8 ;V2.02 CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.02 BNEQ 1075$ ;V2.02 CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_END(R8) ;V2.02 BNEQ 2075$ ;V2.02 BISL2 #PROGRAM_FLAG_M_IO_END,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.02 2075$: CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_ERR(R8) ;V2.02 BNEQ 1075$ ;V2.02 BISL2 #PROGRAM_FLAG_M_IO_ERR,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.02 1075$: CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.02 BNEQ 5075$ ;V2.02 CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_LESS_THAN(R8) ;V2.02 BNEQ 3075$ ;V2.02 BISL2 #PROGRAM_FLAG_M_IF_LT,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.02 3075$: CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_EQUAL(R8) ;V2.02 BNEQ 4075$ ;V2.02 BISL2 #PROGRAM_FLAG_M_IF_EQ,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.02 4075$: CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_GREATER_THAN(R8) ;V2.02 BNEQ 5075$ ;V2.02 BISL2 #PROGRAM_FLAG_M_IF_GT,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.02 5075$:; ZERO OUT ENTRY IN LABEL QUEUE COMES FROM LIST ;V2.02 MOVL LABEL_ELEMENT_L_COME_FROM(R10),R7 ;V2.02 MOVAL LABEL_EXTENTION_L_LIST(R7),R6 ;V2.02 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R7),R5 ;V2.02 13$: CMPL R6,R5 ;V2.02 BGEQU 14$ ;V2.02 TSTL (R6) ;V2.02 BEQL 15$ ;V2.02 CMPL (R6),R8 ;V2.02 BEQL 16$ ;V2.02 ADDL2 #4,R6 ;V2.02 BRB 13$ ;V2.02 14$: MOVL LABEL_EXTENTION_L_EXTENTION(R7),R7 ;V2.02 BEQL 15$ ;V2.02 MOVAL LABEL_EXTENTION_L_LIST(R7),R6 ;V2.02 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R7),R5 ;V2.02 BRB 13$ ;V2.02 16$: MOVL #-1,(R6) ;V2.02 15$: BRW 1$ ;V2.02 .PAGE ;V2.02 .SUBTITLE CHECK BLOCK CLEAR ;V2.02 .ENTRY CHECK_BLOCK_CLEAR,^M ;V2.02 ; R9 POINTER TO SOURCE ;V2.04 ; R7 POINTER OF UPPER LEFT HAND CORNER ;V2.02 ; R3 WIDTH ;V2.02 ; R2 DEPTH ;V2.02 ; R8 FLAG=0 R7 BELOW SOURCE,FLAG<>0 R7 EVEN WITH SOURCE ;V2.04 CLRL R8 ;V2.04 CMPL PROGRAM_ELEMENT_L_X(R7),PROGRAM_ELEMENT_L_X(R9) ;V2.04 BNEQ 1101$ ;V2.04 INCL R8 ;V2.04 1101$: MOVL R7,R11 ;V2.02 101$: MOVL R3,R4 ;V2.02 100$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R7) ;V2.02 BEQL 1$ ;V2.02 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R7),R7 ;V2.02 PUSHR #^M ;V3.11 MOVL PROGRAM_ELEMENT_L_Y(R7),R0 ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R7),R1 ;V2.04 ADDL2 R1,R2 ;V2.04 DECL R2 ;V2.04 TSTL R8 ;V2.04 BNEQ 1100$ ;V2.04 ADDL3 #1,PROGRAM_ELEMENT_L_X(R9),R6 ;V2.04 CMPL R6,PROGRAM_ELEMENT_L_X(R7) ;V2.04 BNEQ 1100$ ;V2.04 DECL R1 ;V2.04 1100$: MOVL PROGRAM_ELEMENT_L_Y(R11),R10 ;V3.11 CALLG NULL,ADD_SPLIT_COLUMN_TO_MIDDLE ;V3.11 CMPL R10,PROGRAM_ELEMENT_L_Y(R11) ;V3.11 BEQL 2100$ ;V3.11 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R11 ;V3.11 2100$: POPR #^M ;V3.11 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7),R7 ;V2.02 ; CHECK FOR HORIZONTAL COMPONENTS ;V2.02 1$: BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R7) ;V2.02 BEQL 10$ ;NONE HERE ;V2.02 ; MUST ADD BLANK ROW ABOVE CURRENT ROW AND MAKE IT THE CURRENT ROW ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R7 ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R7),R0 ;V2.02 MOVL R7,R1 ;V2.02 3$: TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R1) ;V2.02 BEQL 2$ ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R1),R1 ;V2.02 BRB 3$ ;V2.02 2$: MOVL PROGRAM_ELEMENT_L_Y(R1),R1 ;V2.02 PUSHR #^M ;V3.11 MOVL PROGRAM_ELEMENT_L_X(R11),R10 ;V3.11 CALLG NULL,ADD_ROW_TO_MIDDLE ;V2.02 CMPL R10,PROGRAM_ELEMENT_L_X(R11) ;V3.11 BEQL 1002$ ;V3.11 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R11 ;V3.11 1002$: POPR #^M ;V3.11 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R7 ;V2.02 10$: ;NOW TO CHECK FOR ANY VERTICAL COMPONENTS ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R7) ;V2.02 BEQL 20$ ;CLEAR ;V2.02 ; MUST ADD COLUMN HERE-BACKUP AND ADD ;V2.02 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R7),R7 ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R7),R0 ;V2.02 PUSHR #^M ;V3.11 MOVL PROGRAM_ELEMENT_L_X(R7),R1 ;V2.04 ADDL2 R1,R2 ;V2.04 DECL R2 ;V2.04 TSTL R8 ;V2.04 BNEQ 1010$ ;V2.04 ADDL3 #1,PROGRAM_ELEMENT_L_X(R9),R6 ;V2.04 CMPL R6,PROGRAM_ELEMENT_L_X(R7) ;V2.04 BNEQ 1010$ ;V2.04 DECL R1 ;V2.04 1010$: MOVL PROGRAM_ELEMENT_L_Y(R11),R10 ;V3.11 CALLG NULL,ADD_SPLIT_COLUMN_TO_MIDDLE ;V3.11 CMPL R10,PROGRAM_ELEMENT_L_Y(R11) ;V3.11 BEQL 2010$ ;V3.11 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R11 ;V3.11 2010$: POPR #^M ;V3.11 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7),R7 ;V2.02 20$: DECL R4 ;ARE WE DONE THIS ROW ;V2.02 BLEQ 50$ ;YES-SEE IF NEW NEXT ROW REQUIRED ;V2.02 ; GO TO NEXT ELEMENT ACCROSS ;V2.02 TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7) ;V2.02 BNEQ 21$ ;V2.02 CALLG NULL,ADD_TO_RIGHT_SIDE ;V2.02 21$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7),R7 ;V2.02 BRW 100$ ;V2.02 50$: DECL R2 ;V2.02 BGTR 51$ ;V2.02 ; CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y ;V2.07 RET ;V2.02 51$: TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R11) ;V2.02 BNEQ 55$ ;V2.02 CALLG NULL,ADD_TO_BOTTOM ;V2.02 55$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 ;V2.02 MOVL R11,R7 ;V2.02 BRW 101$ ;V2.02 .PAGE ;V2.02 .SUBTITLE REPLACE PIXEL ;V2.02 .ENTRY REPLACE_PIXEL,^M ;V2.02 ; THE PIXEL POINTED TO BY R10 IS IN A CODE BLOCK REMOVED FROM THE ;V2.02 ; PROGRAM ELEMENT ARRAY. ITS TARGET ADDRESS HAS BEEN LOADED BUT IS ;V2.02 ; PRESENTLY HELD BY AN EMPTY CONNECTOR. REPLACE THE CONNECTOR WITH THIS ;V2.02 ; PIXEL AND RELEASE THE EMPTY CONNECTOR ;V2.02 MOVL PROGRAM_QUEUE,R8 ;V2.02 ; MOVE POINTER TO LOCATION TO BE EXCHANGED ;V2.02 1$: CMPL PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_X(R8) ;V2.02 BEQL 10$ ;AT PROPER ROW ;V2.02 BLSS 2$ ;BELOW-MOVE UP ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R8),R8 ;V2.02 BRB 1$ ;V2.02 2$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R8),R8 ;V2.02 BRB 1$ ;V2.02 10$: CMPL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R8) ;V2.02 BEQL 20$ ;AT PROPER COL ;V2.02 BLSS 12$ ;MOVE LEFT ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R8 ;V2.02 BRB 10$ ;V2.02 12$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R8),R8 ;V2.02 BRB 10$ ;V2.02 20$: ;R8 NOW POINTS TO EMPTY CONNECTOR PIXEL TO BE REMOVED ;V2.02 CLRL PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R8),R0 ;V2.02 BEQL 21$ ;V2.02 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V2.02 MOVL R10,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.02 21$: CLRL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R0 ;V2.02 BEQL 22$ ;V2.02 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V2.02 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.02 22$: CLRL PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R8),R0 ;V2.02 BEQL 23$ ;V2.02 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V2.02 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.02 23$: CLRL PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V2.02 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R8),R0 ;V2.02 BEQL 24$ ;V2.02 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V2.02 MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V2.02 24$: REMQUE (R8),R7 ;REMOVE THE NOW UNNNEDED PIXEL FROM THE QUEUE ;V2.02 MOVL PROGRAM_ELEMENT_L_LENGTH(R7),FREE_1 ;V2.02 MOVL R7,FREE_2 ;V2.02 CALLG FREE_ARG,FREE ;V2.02 RET ;V2.02 .PAGE ;V2.02 .SUBTITLE NUMBER THE BLOCK ;V2.02 .ENTRY NUMBER_THE_BLOCK,^M ;V2.02 ; FILL IN THE X/Y ;V2.02 ; R8 CURRENT BLOCK THAT HAS BEEN NUMBERED ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R8),R0 ;V2.02 BEQL 1$ ;V2.02 BITL #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 1$ ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R8),PROGRAM_ELEMENT_L_Y(R0) ;V2.02 SUBL3 #1,PROGRAM_ELEMENT_L_X(R8),PROGRAM_ELEMENT_L_X(R0) ;V2.02 BISL2 #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 MOVL R8,R9 ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,NUMBER_THE_BLOCK ;V2.02 MOVL R9,R8 ;V2.02 1$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R0 ;V2.02 BEQL 2$ ;V2.02 BITL #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 2$ ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R8),PROGRAM_ELEMENT_L_X(R0) ;V2.02 ADDL3 #1,PROGRAM_ELEMENT_L_Y(R8),PROGRAM_ELEMENT_L_Y(R0) ;V2.02 BISL2 #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 MOVL R8,R9 ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,NUMBER_THE_BLOCK ;V2.02 MOVL R9,R8 ;V2.02 2$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R8),R0 ;V2.02 BEQL 3$ ;V2.02 BITL #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 3$ ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R8),PROGRAM_ELEMENT_L_Y(R0) ;V2.02 ADDL3 #1,PROGRAM_ELEMENT_L_X(R8),PROGRAM_ELEMENT_L_X(R0) ;V2.02 BISL2 #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 MOVL R8,R9 ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,NUMBER_THE_BLOCK ;V2.02 MOVL R9,R8 ;V2.02 3$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R8),R0 ;V2.02 BEQL 4$ ;V2.02 BITL #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 4$ ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R8),PROGRAM_ELEMENT_L_X(R0) ;V2.02 SUBL3 #1,PROGRAM_ELEMENT_L_Y(R8),PROGRAM_ELEMENT_L_Y(R0) ;V2.02 BISL2 #PROGRAM_FLAG_M_MARKED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 MOVL R8,R9 ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,NUMBER_THE_BLOCK ;V2.02 MOVL R9,R8 ;V2.02 4$: RET ;V2.02 .PAGE ;V2.02 .SUBTITLE MARK_THE_BLOCK ;V2.02 .ENTRY MARK_THE_BLOCK,^M ;V2.02 ; R8 CURRENT PIXEL OF SEARCH ;V2.02 ; R7 MAX LEFT Y ;V2.02 ; R6 MAX RIGHT Y ;V2.02 ; R5 MAX UP X ;V2.02 ; R4 MAX DOWN X ;V2.02 ; MARK THIS ONE AS BEING VISITED ;V2.02 BISL2 #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R8) ;V2.02 ; CHECK LIMITS ;V2.02 CMPL PROGRAM_ELEMENT_L_X(R8),R5 ;V2.02 BGEQ 1$ ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R8),R5 ;V2.02 1$: CMPL PROGRAM_ELEMENT_L_X(R8),R4 ;V2.02 BLEQ 2$ ;V2.02 MOVL PROGRAM_ELEMENT_L_X(R8),R4 ;V3.11 2$: CMPL PROGRAM_ELEMENT_L_Y(R8),R7 ;V2.02 BGEQ 3$ ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R8),R7 ;V2.02 3$: CMPL PROGRAM_ELEMENT_L_Y(R8),R6 ;V2.02 BLEQ 4$ ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R8),R6 ;V2.02 4$: ;V2.02 ; CHECK FOR TERMINAL TYPE PIXELS ;V2.02 CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.02 BEQL 6$ ;CONNECTOR IS NOT TERMINAL ;V2.02 CMPW #CHART_ACTION_M_RETURN,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.02 BEQL 7$ ;TERMINAL TYPE ;V2.02 CMPW #CHART_ACTION_M_STOP,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.02 BEQL 7$ ;TERMINAL TYPE ;V2.02 CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.02 BEQL 7$ ;TERMINAL TYPE ;V2.02 BRB 6$ ;NOT TERMINAL TYPE-CONTINUE CHECK ;V2.02 7$: RET ;V2.02 6$:; NOW CHECK UP DIR (CAN ONLY BE AN INPUT) ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 BEQL 10$ ;NOTHING UP ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R8),R0 ;V2.02 BEQL 10$ ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 BEQL 10$ ;MUST HAVE A CORRESPONDING DOWN IN ABOVE TO CONNECT ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_DOWN,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_UP,PROGRAM_ELEMENT_L_FLAG_2(R8) ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 10$ ;ALREADY VISITED-DONT BOTHER GOING ;V2.02 PUSHR #^M ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,MARK_THE_BLOCK ;V2.02 POPR #^M ;V2.02 10$: ;V2.02 ; NOW CHECK DOWN (CAN ONLY BE AN OUTPUT) ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 BEQL 20$ ;NOTHING DOWN ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R8),R0 ;V2.02 BEQL 20$ ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 BEQL 20$ ;MUST HAVE A CORRESPONDING UP IN ABOVE TO CONNECT ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_UP,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_DOWN,PROGRAM_ELEMENT_L_FLAG_2(R8) ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 20$ ;ALREADY VISITED-DONT BOTHER GOING ;V2.02 PUSHR #^M ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,MARK_THE_BLOCK ;V2.02 POPR #^M ;V2.02 20$: ;V2.02 ; NOW CHECK LEFT (CAN ONLY BE AN INPUT) ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 BEQL 30$ ;NOTHING LEFT ;V2.02 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R8),R0 ;V2.02 BEQL 30$ ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 BEQL 30$ ;MUST HAVE A CORRESPONDING RIGHT IN LEFT TO CONNECT ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_RIGHT,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_LEFT,PROGRAM_ELEMENT_L_FLAG_2(R8) ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 30$ ;ALREADY VISITED-DONT BOTHER GOING ;V2.02 PUSHR #^M ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,MARK_THE_BLOCK ;V2.02 POPR #^M ;V2.02 30$: ;V2.02 ; NOW CHECK RIGHT (CAN ONLY BE AN OUTPUT) ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R8) ;V2.02 BEQL 40$ ;NOTHING RIGHT ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R0 ;V2.02 BEQL 40$ ;V2.02 BITL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 BEQL 40$ ;MUST HAVE A CORRESPONDING UP IN ABOVE TO CONNECT ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_LEFT,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BISL #PROGRAM_FLAG_M_VISITED_RIGHT,PROGRAM_ELEMENT_L_FLAG_2(R8) ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 40$ ;ALREADY VISITED-DONT BOTHER GOING ;V2.02 PUSHR #^M ;V2.02 MOVL R0,R8 ;V2.02 CALLG NULL,MARK_THE_BLOCK ;V2.02 POPR #^M ;V2.02 40$: RET ;V2.02 .PAGE ;V2.02 .SUBTITLE CLEAR BLOCK ;V2.02 .ENTRY CLEAR_BLOCK,^M ;V2.02 MOVAL PROGRAM_QUEUE,R11 ;V2.02 MOVL R11,R10 ;V2.02 1$: MOVL (R10),R10 ;V2.02 CMPL R10,R11 ;V2.02 BEQL 2$ ;V2.02 BICL #,- ;V2.02 PROGRAM_ELEMENT_L_FLAG_2(R10) ;V2.02 BRB 1$ ;V2.02 2$: RET ;V2.02 .PAGE ;V2.02 .SUBTITLE REMOVE CODE BLOCK ;V2.02 .ENTRY REMOVE_BLOCK,^M ;V2.02 CALLG NULL,ADD_TO_LEFT_SIDE ;MAKE SURE OF CONNECTION OVER WHOLE ;V2.02 CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y ;V2.04 ; ARRAY WHEN BLOCK REMOVED ;V2.02 ; TWO STEP PROCESS-FIRST IS TO SCAN ARRAY AND REMOVE ALL BLOCK PIXELS ;V2.02 ; AND ZERO ANY POINTERS BETWEEN BLOCK AND NON BLOCK POINTERS ;V2.02 ; THEN REPLACE EMPTY AREAS ;V2.02 MOVAL PROGRAM_QUEUE,R11 ;V2.02 MOVL R11,R10 ;V2.02 1$: MOVL (R10),R10 ;V2.02 CMPL R10,R11 ;V2.02 BNEQ 2$ ;V2.02 BRW 10$ ;V2.02 2$: BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R10) ;V2.02 BEQL 1$ ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R0 ;V2.02 BEQL 3$ ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 3$ ;V2.02 CLRL PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V2.02 CLRL PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.02 3$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R0 ;V2.02 BEQL 4$ ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 4$ ;V2.02 CLRL PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V2.02 CLRL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V2.02 4$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R0 ;V2.02 BEQL 5$ ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 5$ ;V2.02 CLRL PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V2.02 CLRL PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.02 5$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;V2.02 BEQL 6$ ;V2.02 BITL #PROGRAM_FLAG_M_VISITED,PROGRAM_ELEMENT_L_FLAG_2(R0) ;V2.02 BNEQ 6$ ;V2.02 CLRL PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.02 CLRL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V2.02 6$: BRW 1$ ;REPEAT NEXT PIXEL ;V2.02 10$: ;V2.02 ; BLOCK IS REMOVED-NOW TO FILL UP HOLE WITH BLANK CONNECTORS ;V2.02 ; IT IS ASSUMED THAT THERE EXISTS A CONTINUOUS COLUMN ON THE LEFT SIDE ;V2.02 ; AND THAT THE TOP ROW IS NOT AFFECTED ;V2.02 MOVL PROGRAM_QUEUE,R11 ;V2.02 11$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 ;V2.02 BEQL 12$ ;V2.02 MOVL R0,R11 ;V2.02 BRB 11$ ;V2.02 12$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V2.02 BEQL 13$ ;V2.02 MOVL R0,R11 ;V2.02 BRB 12$ ;V2.02 13$: ;WE ARE NOW AT THE UPPER LEFT HAND CORNER ;V2.02 ; R11 POINTER TO TOP OF COL KNOWN TO BE GOOD ;V2.02 ; R10 DOWN SLIDER OF KNOWN GOOD COLUMN ;V2.02 ; R9 DOWN SLIDER OF COL TO RIGHT OF GOOD COLUMN ;V2.02 14$: MOVL R11,R10 ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R9 ;V2.02 BNEQ 15$ ;V2.02 ; IF GOT HERE-DONE ;V2.02 ; CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y ;V2.07 RET ;V2.02 15$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R8 ;V2.02 BNEQ 17$ ;V2.02 BRW 20$ ;BOTTOM OF COLUMN FOUND ;V2.02 17$: TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R9) ;V2.02 BEQL 16$ ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10 ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R9 ;V2.02 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R9) ;V2.02 MOVL R9,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V2.02 BRB 15$ ;V2.02 16$: ;V2.02 MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.02 CALLG ALLOCATE_ARG,ALLOCATE ;V2.02 INCL F_C_P_E ;V2.02 MOVL R0,R6 ;V2.02 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.02 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.02 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.02 ADDL3 #1,PROGRAM_ELEMENT_L_X(R9),PROGRAM_ELEMENT_L_X(R6) ;V2.04 MOVL PROGRAM_ELEMENT_L_Y(R9),PROGRAM_ELEMENT_L_Y(R6) ;V2.04 MOVL R8,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.02 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R8) ;V2.02 MOVL R9,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.02 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R9) ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R0 ;V2.04 BEQL 18$ ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 ;V2.04 BEQL 18$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 ;V2.04 BEQL 18$ ;V2.04 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R0 ;V2.04 BEQL 18$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.04 18$: TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 BNEQ 19$ ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R8),R0 ;V2.04 BEQL 19$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 19$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.04 TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 BNEQ 19$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 19$ ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R0 ;V2.04 BEQL 19$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.04 19$: TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 BEQL 21$ ;V2.04 BRW 22$ ;V2.04 21$: ADDL3 #1,PROGRAM_ELEMENT_L_Y(R6),R2 ;V2.04 MOVL PROGRAM_ELEMENT_L_X(R6),R3 ;V2.04 MOVAL PROGRAM_QUEUE,R5 ;V2.04 MOVL R5,R4 ;V2.04 23$: MOVL (R4),R4 ;V2.04 CMPL R4,R5 ;V2.04 BEQL 22$ ;V2.04 CMPL R2,PROGRAM_ELEMENT_L_Y(R4) ;V2.04 BNEQ 23$ ;V2.04 CMPL R3,PROGRAM_ELEMENT_L_X(R4) ;V2.04 BNEQ 23$ ;V2.04 BITL #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG_2(R4) ;V2.04 BNEQ 23$ ;V2.04 MOVL R4,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R4) ;V2.04 TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 BNEQ 22$ ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R4),R4 ;V2.04 BEQL 22$ ;V2.04 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R4),R4 ;V2.04 BEQL 22$ ;V2.04 MOVL R4,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R4) ;V2.04 22$: TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 BEQL 24$ ;V2.04 BRW 15$ ;V2.04 24$: ADDL3 #1,PROGRAM_ELEMENT_L_X(R6),R3 ;V2.04 MOVL PROGRAM_ELEMENT_L_Y(R6),R2 ;V2.04 MOVAL PROGRAM_QUEUE,R5 ;V2.04 MOVL R5,R4 ;V2.04 25$: MOVL (R4),R4 ;V2.04 CMPL R4,R5 ;V2.04 BEQL 26$ ;V2.04 CMPL R2,PROGRAM_ELEMENT_L_Y(R4) ;V2.04 BNEQ 25$ ;V2.04 CMPL R3,PROGRAM_ELEMENT_L_X(R4) ;V2.04 BNEQ 25$ ;V2.04 BITL #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG_2(R4) ;V2.04 BNEQ 25$ ;V2.04 MOVL R4,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R4) ;V2.04 26$: BRW 15$ ;V2.04 20$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.02 BRW 14$ ;V2.02 .PAGE ;V2.02 .SUBTITLE SQUEEZE THE PIXEL MATRIX ;V2.02 .SUBTITLE FIRST THE ROWS ;V2.02 .ENTRY SQUEEZE_PIXEL_MATRIX,^M ;V2.02 ; SQUEEZE OUT ANY UNNEDED ROWS AND COLUMNS FROM THE PIXEL MATRIX ;V2.02 ; ;V2.02 ; FIRST SQUEEZE OUT UNEEDED ROWS. THIS IS DONE BY SCANNING EACH ROW ;V2.02 ; IF THE ROW CONTAINS ONLY CONNECTOR PIXELS AND THOSE ONLY HAVEING ;V2.02 ; FLOW LINES RUNNING UP AND DOWN (NO LEFT/RIGHT) OR ARE EMPTY ;V2.02 ; THEN THAT ROW IS REMOVED ;V2.02 1001$: MOVL PROGRAM_QUEUE,R11 ;GET THE UPPER LEFT HAND CORNER ;V2.02 1$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V2.02 BEQL 2$ ;V2.02 MOVL R0,R11 ;V2.02 BRB 1$ ;V2.02 2$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 ;V2.02 BEQL 1002$ ;V2.02 MOVL R0,R11 ;V2.02 BRB 2$ ;V2.02 1002$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 ;START ROW 2 ;V2.02 3$: ;NOW AT UPPER LEFT CORNER ;V2.02 MOVL R11,R10 ;USE COPY OF POINTER FOR SCAN ;V2.02 ; START SCAN TO RIGHT ;V2.02 4$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R10) ;V2.02 BNEQ 10$ ;NOT A CONNECTOR-KEEP THIS ROW-GO TO NEXT ;V2.02 BITL #,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.02 BNEQ 10$ ;CONNECTOR HAS HORIZ COMPONENTS-TRY NEXT ROW ;V2.02 ; FIRST PIXEL OF POSSABLE ROW HAS BEEN FOUND-START SCAN ACROSS ;V2.02 CALLG NULL,SCAN_ACCROSS ;V2.02 BLBC R0,10$ ;NO DELETE DONE-CONTINUE SCAN DOWN ;V2.02 BRW 1001$ ;DELETE DONE-RESTART ROW SCAN FROM TOP ;V2.02 10$: ;NEXT ROW DOWN-SET UP FOR SCAN ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 ;V2.02 BEQL 20$ ;IF ZERO-DONE ROW SCANS ;V2.02 BRW 3$ ;SCAN NEXT ROW ;V2.02 .PAGE ;V2.02 .SUBTITLE SCAN TO SQUEEZE OUT COLUMNS ;V2.02 20$: ;V2.02 ; EACH COLUMN IS SCANNED FOR POSSABLE REMOVAL. CONDITIONS ARE AS FOLLOWS ;V2.02 ; COLUMN CONSISTS ONLY OF CONNECTORS AND THOSE CONNECTORS ONLY HAVE ;V2.02 ; HORIZONTAL LINES OR ARE EMPTY ;V2.02 1021$: MOVL PROGRAM_QUEUE,R11 ;GET THE UPPER LEFT HAND CORNER ;V2.02 21$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V2.02 BEQL 22$ ;V2.02 MOVL R0,R11 ;V2.02 BRB 21$ ;V2.02 22$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 ;V2.02 BEQL 1022$ ;V2.02 MOVL R0,R11 ;V2.02 BRB 22$ ;V2.02 1022$: ;V2.02 23$: ;NOW AT UPPER LEFT CORNER ;V2.02 MOVL R11,R10 ;USE COPY OF POINTER FOR SCAN ;V2.02 ; START SCAN DOWN ;V2.02 24$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R10) ;V2.02 BNEQ 30$ ;NOT A CONNECTOR-KEEP THIS ROW-GO TO NEXT ;V2.02 BITL #,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.02 BNEQ 30$ ;CONNECTOR HAS VERT COMPONENTS-TRY NEXT COL ;V2.02 ; FIRST PIXEL OF POSSABLE COL HAS BEEN FOUND-START SCAN DOWN ;V2.02 CALLG NULL,SCAN_DOWN ;V2.02 BLBC R0,30$ ;NO DELETE DONE-CONTINUE SCAN DOWN ;V2.02 BRW 1021$ ;DELETE DONE-RESTART ROW SCAN FROM TOP ;V2.02 30$: ;NEXT COL ACCROSS-SET UP FOR SCAN ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.02 BEQL 50$ ;IF ZERO-DONE COL SCANS ;V2.02 BRW 23$ ;SCAN NEXT ROW ;V2.02 50$: CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y ;V2.02 RET ;V2.02 .PAGE ;V2.02 .SUBTITLE SCAN ACCROSS ;V2.02 .ENTRY SCAN_ACCROSS,^M ;V2.02 ; R10 CURRENT PIXEL KNOWN TO BE GOOD ;V2.02 ; R0 RETURN 0 IF NO DELETE, 1 IF DELETE ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;NEXT PIXEL ;V2.02 BNEQ 1$ ;V2.02 BRW 50$ ;SCAN DONE-DO REMOVE ;V2.02 ; SEE IF THIS PIXEL IS OK ;V2.02 1$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V2.02 BEQL 2$ ;V2.02 CLRL R0 ;NO-GOOD SKIP THIS ROW ;V2.02 RET ;V2.02 ; SEE IF CONNECTOR OK ;V2.02 2$: BITL #,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.02 BEQL 3$ ;V2.02 CLRL R0 ;NO-GOOD SKIP THIS ROW ;V2.02 RET ;V2.02 3$: MOVL R10,R11 ;SAVE PIXEL POINTER ;V2.02 MOVL R0,R10 ;SET UP NEXT GOOD PIXEL ;V2.02 CALLG NULL,SCAN_ACCROSS ;V2.02 MOVL R11,R10 ;V2.02 BLBS R0,50$ ;IF REQUIRED-DO DELETE ;V2.02 ; SCAN DONE NO DELETE REQUIRED- ;V2.02 CLRL R0 ;NO-GOOD SKIP THIS ROW ;V2.02 RET ;V2.02 ; DELETE THIS PIXEL,FIX UP POINTERS AND BACK UP ;V2.02 50$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R9 ;POINTER TO ROW BELOW ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R11 ;BACK UP AS PREP FOR ;V2.02 REMQUE (R10),R7 ;REMOVE PIXEL FROM PIXEL QUEUE ;V2.02 MOVL PROGRAM_ELEMENT_L_LENGTH(R7),FREE_1 ;V2.02 MOVL R7,FREE_2 ;V2.02 CALLG FREE_ARG,FREE ;V2.02 TSTL R11 ;V2.02 BEQL 51$ ;V2.02 MOVL R9,PROGRAM_ELEMENT_L_DOWN_POINTER(R11) ;V2.02 51$: TSTL R9 ;V2.02 BEQL 52$ ;V2.02 MOVL R11,PROGRAM_ELEMENT_L_UP_POINTER(R9) ;V2.02 52$: MOVL #1,R0 ;V2.02 RET ;V2.02 .PAGE ;V2.02 .SUBTITLE SCAN DOWN ;V2.02 .ENTRY SCAN_DOWN,^M ;V2.02 ; R10 CURRENT PIXEL KNOWN TO BE GOOD ;V2.02 ; R0 RETURN 0 IF NO DELETE, 1 IF DELETE ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R0 ;NEXT PIXEL ;V2.02 BNEQ 1$ ;V2.02 BRW 50$ ;SCAN DONE-DO REMOVE ;V2.02 1$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V2.02 BEQL 2$ ;V2.02 CLRL R0 ;NO-GOOD SKIP THIS COL ;V2.02 RET ;V2.02 ; SEE IF CONNECTOR OK ;V2.02 2$: BITL #,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.02 BEQL 3$ ;V2.02 CLRL R0 ;NO-GOOD SKIP THIS COL ;V2.02 RET ;V2.02 3$: MOVL R10,R11 ;SAVE PIXEL POINTER ;V2.02 MOVL R0,R10 ;SET UP NEXT GOOD PIXEL ;V2.02 CALLG NULL,SCAN_DOWN ;V2.02 MOVL R11,R10 ;V2.02 BLBS R0,50$ ;IF REQUIRED-DO DELETE ;V2.02 ; SCAN DONE NO DELETE REQUIRED- ;V2.02 CLRL R0 ;NO-GOOD SKIP THIS COL ;V2.02 RET ;V2.02 ; DELETE THIS PIXEL,FIX UP POINTERS AND BACK UP ;V2.02 50$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R9 ;POINTER TO ROW LEFT ;V2.02 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R11;BACK UP AS PREP FOR ;V2.02 REMQUE (R10),R7 ;REMOVE PIXEL FROM PIXEL QUEUE ;V2.02 MOVL PROGRAM_ELEMENT_L_LENGTH(R7),FREE_1 ;V2.02 MOVL R7,FREE_2 ;V2.02 CALLG FREE_ARG,FREE ;V2.02 TSTL R11 ;V2.02 BEQL 51$ ;V2.02 MOVL R9,PROGRAM_ELEMENT_L_LEFT_POINTER(R11) ;V2.02 51$: TSTL R9 ;V2.02 BEQL 52$ ;V2.02 MOVL R11,PROGRAM_ELEMENT_L_RIGHT_POINTER(R9) ;V2.02 52$: MOVL #1,R0 ;V2.02 RET ;V2.02 .PAGE .SUBTITLE PHASE 3 .SUBTITLE BASIC LOOP ; ; IN THIS PHASE DOTHE FOLLOWING ; RESOLVE AND SET UP CONNECTORS FOR ALL GOTOS AND ; ARITHMETIC IF'S,CALL ALT RETURNS, I/O END=/ERR= ; ; EVERYTHING IS TREATED AS A COME FROM ISSUED AT THE LABEL LOCATION ; R8 DESTINATION ;V2.06 PHASE_3: ; MOVE POINTER TO UPPER LEFT HAND CORNER FOR A RASTER SCAN OF THE ; PICTURE ; R11 POINTS TO CURENT PIXEL BEING SCANNED ; R10 POINTS TO PIXEL AT START OF CURRENT LINE MOVL PROGRAM_QUEUE,R11 MOVL R11,R10 1$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 BEQL PHASE_3_LOOP_BACK MOVL R0,R11 MOVL R11,R10 BRB 1$ PHASE_3_LOOP_BACK: CALLG NULL,PHASE_3_DISPATCH MOVL R1,R11 ;UPDATE TO LAST PIXEL/LINE SCANNED MOVL R2,R10 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11;NEXT PIXEL TO BE DONE BNEQ PHASE_3_LOOP_BACK ;EVAL NEXT PIXEL ; CURRENT LINE SCENNED-GO TO NEXT LINE DOWN MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10; NEXT LINE DOWN BEQL 1$ ;NO MORE MOVL R10,R11 ;INIT NEW LINE BRB PHASE_3_LOOP_BACK ;AND CONTINUE EVAL 1$: BRW PHASE_3_A ;GO CHECK END ;V2.02 .PAGE .SUBTITLE PHASE_3_DISPATCH .ENTRY PHASE_3_DISPATCH,^M ; ENTRY ARG IS R11-POINTER TO PIXEL BEING SCANNED ; RETURN IS R0=1 OK ; R0=0 END FOUND ; R1 IS POINTER TO SCAN TERMINATEING PROGRAM ELEMENT/PIXEL ; R2 IS POINTER TO PIXEL AT START OF LINE TERMINATEING SCAN MOVL PROGRAM_ELEMENT_L_LABEL(R11),R2 ;SEE IF THERE IS A LABEL BEQL 1$ ;NO TSTL LABEL_ELEMENT_L_COME_FROM(R2) ;SEE IF IT IS USED ;SPEC. CHECK FOR DO LOOPS BEQL 1$ BRW PHASE_3_COMES_FROM 1$: MOVL #1,R0 CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) BNEQ 2$ CLRL R0 2$: MOVL R11,R1 MOVL R10,R2 RET .PAGE .SUBTITLE PHASE_3_COMES_FROM PHASE_3_COMES_FROM: ; LINES ARE DRAM IN PARTS ; PART ZERO-SCAN SORCES FOR ABOVE AND BELOW MAX'S ; PART ONE-DRAW IN ALL LINES COMEING FROM ABOVE THE DESTINATION ; PART TWO-SCAN ALL RASTER LINES FROM DESTINATON TO AND INCLUDEING ; THE LINE WITH THE FURTHEST DOWN SOURCE ; PUTING IN ALL INTERMEDIATE LINES ; PART THREE-DRAW IN ALL LINES COMEING FROM SOURCES BELOW OR AT ; THE SAME LEVEL AS THE DESTINATION ; .SUBTITLE PERFORM SCAN ; R11 POINTS TO SOURCE PIXEL ; R10 POINTS TO PIXEL AT START OF CURRENT LINE BEING SCANNED ; R9 POINTS TO SOURCE PIXEL ABOVE AND FURTHEST RIGHT ; R8 POINTS TO SOURCE PIXEL FURTHEST ABOVE ; R7 POINTS TO LABEL QUEUE ENTRY FOR DEST LABEL ; R6 POINTS TO TOP OF LIST ELEMENT ; R5 POINTS TO END OF CURRENT COMES FROM LIST ; R4 POINTS TO NEXT ENTRY IN COMES FROM LIST ; R3 POINTS TO CURRENT SOURCE PIXEL BEING SORTED ; R2 POINTS TO SOURCE PIXEL FURTHEST BELOW ; R1 POINTS TO SOURCE PIXEL BELOW AND FURTHEST RIGHT CLRL R9 ;INIT THE POINTERS CLRL R8 CLRL R2 CLRL R1 MOVL PROGRAM_ELEMENT_L_LABEL(R11),R7 MOVL LABEL_ELEMENT_L_COME_FROM(R7),R6 MOVAL LABEL_EXTENTION_L_LIST(R6),R4 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R6),R5 ; START THE SCAN OF COMES FROM 1$: CMPL R4,R5 ;CHECK FOR DONE THIS ELEMENT BLSSU 2$ ;NOT DONE THIS ELEEMNT YET MOVL LABEL_EXTENTION_L_EXTENTION(R6),R6 BNEQ 3$ BRW 10$ ;SCAN DONE 3$: MOVAL LABEL_EXTENTION_L_LIST(R6),R4 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R6),R5 2$: MOVL (R4)+,R3 ;GET POINTER TO NEXT SOURCE BNEQ 2002$ BRW 10$ 2002$: CMPL #-1,R3 ;V2.02 BEQL 1$ ;V2.02 ; CHECK TO SEE IF FLOW CONNECTORS ARE OK ;V2.06 BITL #NO_CONNECTOR_FLAG,FLAG_WORD+4 ;V2.06 BNEQ 3002$ ;NOT WANTED HERE ;V2.06 PUSHR #^M ;V2.06 ; GET PAGE NUMBER OF SOURCE AND DEST AND FIND NUMBER OF PAGES BETWEEN ;V2.06 SUBL3 PROGRAM_ELEMENT_L_X(R3),PROGRAM_ELEMENT_L_X(R11),R1 ;V3.14 BGEQ 4002$ ;V2.06 MNEGL R1,R1 ;ABS VALUE OF NUMBER OF PAGES ;V2.06 4002$: DIVL2 DRAW_DOWN,R1 ;V3.14 CMPL #MAX_DIRECT_PAGE,R1 ;SEE IF FLOW_CONNECTOR NEEDED ;V3.14 BGEQ 5002$ ;NO-PUT IN FLOW LINE ;V2.06 BISL2 #LABEL_FLAG_M_FLOW_CONNECTOR,LABEL_ELEMENT_L_FLAG(R7) ;V2.06 BISL2 #^X10000000,-4(R4) ;V3.14 POPR #^M ;V2.06 BRW 1$ ;V2.06 5002$: POPR #^M ;V2.06 3002$: CMPL PROGRAM_ELEMENT_L_X(R3),PROGRAM_ELEMENT_L_X(R11);SEE IF ABOVE ;V2.06 BGTR 7$ ;NOT ABOVE-CHECK BELOW BLSS 1002$ CMPL PROGRAM_ELEMENT_L_Y(R3),PROGRAM_ELEMENT_L_Y(R11) BGEQ 7$ 1002$: ;CHECK FOR MAX RIGHT TSTL R9 ;DOES R9 EXIST BNEQ 4$ ;YES MOVL R3,R9 ;IF R9 DOES NOT EXIST,NEITHER DOES R8 SO FILL IN BOTH MOVL R3,R8 BRW 1$ 4$: CMPL PROGRAM_ELEMENT_L_Y(R3),PROGRAM_ELEMENT_L_Y(R9) BLEQ 5$ MOVL R3,R9 5$: ;CHECK ON FURTHEST UP CMPL PROGRAM_ELEMENT_L_X(R3),PROGRAM_ELEMENT_L_X(R8) BGEQ 6$ MOVL R3,R8 6$: BRW 1$ ;CHECK FOR MAX RIGHT 7$: TSTL R2 ;DOES R2 EXIST BNEQ 8$ ;YES MOVL R3,R2 ;IF R2 DOES NOT EXIST,NEITHER DOES R1 SO FILL IN BOTH MOVL R3,R1 BRW 1$ 8$: CMPL PROGRAM_ELEMENT_L_Y(R3),PROGRAM_ELEMENT_L_Y(R1) BLEQ 9$ MOVL R3,R1 9$: ;CHECK ON FURTHEST DOWN CMPL PROGRAM_ELEMENT_L_X(R3),PROGRAM_ELEMENT_L_X(R2) BLSS 1009$ MOVL R3,R2 1009$: BRW 1$ .PAGE .SUBTITLE DO ABOVE LINE ; THIS PART IS DONE IN THE FOLLOWING STAGES ; 1 MOVE TO THE RIGHT FROM THE DESTINATION UNTIL ONE PIXEL TO THE ; RIGHT OF THE FURTHEST RIGHT SOURCE. WHERE REQUIRED ADD ; EXTRA HORIZONTAL ROWS OF BLANK CONNECTOR PIXELS AND MOVE ; THE DEST PIXEL INTO THAT ROW TO MAKE A PATH TO CLEAR ; ANY NON CONNECTOR PIXELS. ; CONTINUE OUT TO THE RIGHT UNTILL A CLEAR PATH CAN BE FOUND ; UPWARD TO THE SAME LEVEL AS THE FURTHEST UP SOURCE PIXEL ; THEN FROM THE FURTHEST UP PIXEL ATTEMPT TO DRAW A LINE TO THE ; RIGHT TO THE LINE FROM THE DESTINATION, ADDING A NEW ROW AS ; ABOVE TO GET THERE. ; 2 CONNECT ALL INTERMIDIATE SOURCES ABOVE THE DESTINATION TO ; THE GENERATED LINE. ; ; FIRST SEE IF ANY THING EXISTS ABOVE DESTINATION 10$: TSTL R9 BNEQ 11$ ;YES BRW 100$ ;NO SOURCES EXIST ABOVE THIS DESTINATION-SKIP THIS PART 11$: PUSHR #^M;SAVE BELOW AND SCAN INFORMATION FOR LATER ; R11 POINTER TO DEST ; R10 RIGHT SCANNER POINTER ; R9 MAX RIGHT POINTER ; R8 MAX UP POINTER MOVL R11,R10 ; ATTEMPT TO SCAN TO RIGHT TO AT LEAST 1 GREATER THAN MAX RIGHT 12$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 BNEQ 1012$ ; CAME TO END OF R.H.S. BRW 19$ 1012$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) BNEQ 13$ ;RAN INTO A NON CONNECTOR-GO SEE HOW TO GO MORE RIGHT MOVL R0,R10 ;MAKE STEP TO RIGHT ;SEE IF WE HAVE AT LEAST GOTTEN PAST MAX RIGHT SOURCE CMPL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R9) BLEQ 12$ ;YES-GO CHECK ON SCAN UP TO MAX UP LEVEL ;MAKE SURE THAT THIS CONNECTOR IS NOT ALREADY IN USE BITL #,- PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 12$ BRW 20$ 13$:; HAVE REACHED NON CONNECTOR PIXEL-CHECK ON POSSABLE ACTIONS ; FIRST-IS NON CONNECTOR LABELED TSTL PROGRAM_ELEMENT_L_LABEL(R0) BNEQ 14$ ;YES-IT IS LABEL'D-MUST OPEN UP A PATH 1013$: MOVL R0,R10 ;COMPLETE STEP ;V3.19 ; SEE IF WE ARE IN THE RIGHT COLUMN TO START GOING UP CMPL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R9) BLEQ 12$ ;NO-KEEP SCANNING ; SEE IF THE CONNECTOR PART IS IN USE AT THIS COLUMN BITL #,- PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 12$ ;YES-KEEP GOING ; TIME TO GO UP-BACK UP ONE AND ADD COLUMN TO MIDDLE MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R10 MOVL PROGRAM_ELEMENT_L_Y(R10),R0 MOVL PROGRAM_ELEMENT_L_X(R8),R1 ;V2.05 MOVL PROGRAM_ELEMENT_L_X(R10),R2 ;V2.05 CALLG NULL,ADD_SPLIT_COLUMN_TO_MIDDLE ;V2.05 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 ;UPDATE R10 BRW 20$ 14$: ;SEE IF LABEL IS IN USE ;V3.19 BITL #,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BEQL 1013$ ;NO-IGNORE IT ;V3.19 ;NOT FAR ENOUGH TO RIGHT-MUST OPEN PATH TO RIGHT ;V3.19 MOVL PROGRAM_ELEMENT_L_X(R11),R0 ;MUST PUT IT ABOVE CURRENT DEST MOVL PROGRAM_ELEMENT_L_Y(R10),R1 ;SET SPLIT AFTER LOC CALLG NULL,ADD_ROW_TO_MIDDLE ; SPLIT ROW ADDED-CONTINUE SCAN OUT TO RIGHT BRW 12$ 19$: ;CAME TO END OF PICTURE-ADD COL ON R.H.S. AND GO UP ALONG IT CALLG NULL,ADD_TO_RIGHT_SIDE MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 BRW 20$ ; HAVE REACHED A POINT WHERE THE SLIDER IS AT LEAST ONE COL TO RIGHT ; OF RIGHT MOST SOURCE-NOW ATTEMPT TO GO UP TO LEVEL OF HIGHEST ELEMENT ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT LOWER RIGHT CORNER ; R9 POINTER RIGHT MOST RIGHT ABOVE PIXEL ; R8 POINTER TO MOST UP ABOVE PIXEL ; R7 POINTER TO UP SLIDER PIXEL 20$: MOVL R10,R7 21$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R0 ; CHECK TO SEE IF ABOVE IS A CONNECTOR CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) BEQL 22$ ;YES BRW 12$ ;NO-THIS LINE UP NOT USEABLE-GO BACK AND FIND ANOTHER ; SEE THAT IT IS NOT IN USE 22$: BITL #,- PROGRAM_ELEMENT_L_FLAG(R0) BEQL 23$ ;NOT IN USE DOWN SIDE BRW 12$ ;IN USE-TRY ANOTHER LINE UP 23$: ;BEFORE NEXT PART OF TEST-SEE IF EVEN WITH SOURCE YET CMPL PROGRAM_ELEMENT_L_X(R0),PROGRAM_ELEMENT_L_X(R8) BLEQ 24$ ;YES-EVEN-CHECK NOT NEEDED BITL #,- PROGRAM_ELEMENT_L_FLAG(R0) BEQL 24$ ;PATH CLEAR SO FAR BRW 12$ ;PATH BLOCKED-TRY ANOTHER 24$: MOVL R0,R7 ;STEP COMPLETED ; CHECK TO SEE IF UP SLIDE IS DONE CMPL PROGRAM_ELEMENT_L_X(R7),PROGRAM_ELEMENT_L_X(R8) BGTR 21$ ;NO-CONTINUE SLIDE UP CHECK ; WE ARE EVEN WITH TOP MOST PIXEL SOURCE ; NOW TO CHECK THE LINE FROM TOP SOURCE TO LINE ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT LOWER RIGHT CORNER ; R9 POINTER RIGHT MOST RIGHT ABOVE PIXEL ; R8 POINTER TO MOST UP ABOVE PIXEL ; R7 POINTER TO UP SLIDER PIXEL AT UPPER RIGHT CORNER ; R6 POINTER TO OUT SLIDER FROM TOP SOURCE PIXEL TO LINE MOVL R8,R6 ;INIT SLIDER 25$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R6),R0 ;GET NEXT RIGHT ; IS IT A CONNECTOR CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) BNEQ 26$ ;NO IT ISN'T-NEED TO DO A FIX UP MOVL R0,R6 ;FINSH STEP CMPL R6,R7 ;COME TO LINE YET? BNEQ 25$ ;NO-CONTINUE SLIDE TO RIGHT BRW 50$ ;YES-GO DRAW IN THE LINE 26$: ;WHAT IS REQUIRED AT THIS POINT IS THAT A BLANK LINE OF CONNECTORS BE ;ADDED JUST ABOVE THE ROW BEING CHECKED AND THE SOURCE ;PLUSS ALL CONNECTORS BETWEEN IT AND THE LAST ONE FOUND TO BE ; OK MOVED UP INTO THAT NEW ROW AND ANY LINES LEAVING BE ACCOUNTED ; FOR IN ABOVE AND BELOW PIXELS MOVL PROGRAM_ELEMENT_L_X(R6),R0 MOVL PROGRAM_ELEMENT_L_Y(R6),R1 CALLG NULL,ADD_ROW_TO_MIDDLE MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R7 ;ADJUST UPPER CORNER BRW 25$ ;AND CONTINUE SLIDE TO RIGHT 50$:; THE PATH HAS BEEN FOUND TO THE EXTREAMS-NOW THAT WE KNOW WHERE ; THE CORNER POINTS ARE-DRAW IN THE LINES ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT LOWER RIGHT CORNER ; R8 POINTER TO MOST UP ABOVE PIXEL ; R7 POINTER TO UP SLIDER PIXEL AT UPPER RIGHT CORNER ; ; FIRST LINEFROM DEST TO LINE UP MOVL R11,R0 BISL2 #,PROGRAM_ELEMENT_L_FLAG(R0) 51$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 CMPL R10,R0 BEQL 52$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) BRB 51$ 52$: BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) MOVL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_TOP_LEFT(R0) ;V2.01 ; NOW GO UP TO THE UPPER RIGHT CORNER 53$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R0 CMPL R0,R7 BEQL 54$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) BRW 53$ 54$: BISL2 #,PROGRAM_ELEMENT_L_FLAG(R0) MOVL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_DOWN_LABEL(R0) ;V2.01 CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.01 BNEQ 1054$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_END(R8) ;V2.01 BNEQ 2054$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_END,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 2054$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_ERR(R8) ;V2.01 BNEQ 1054$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_ERR,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 1054$: CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.01 BNEQ 57$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_LESS_THAN(R8) ;V2.01 BNEQ 3054$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_LT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 3054$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_EQUAL(R8) ;V2.01 BNEQ 4054$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_EQ,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 4054$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_GREATER_THAN(R8) ;V2.01 BNEQ 57$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_GT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 ; FINAL LINE IS BACK DOWN TO THE SOURCE 57$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R0 CMPL R0,R8 BEQL 58$ ; CHECKTO SEE IF THIS PART OF LINE AREADY IN FROM PREVIOUS GO AROUNDS BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) BRB 57$ 58$: BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R0) 1060$: ; THE LINE FOR EXTREAM POINTS HAS BEEN DRAWN-NOW IS THE TIME ; TO GO TO ALL OTHER SOURCES THAT ARE ABOVE THE DEST AND TO ; CONNECT THEN TO THIS LINE ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT LOWER RIGHT CORNER ; R9 COLUMN NUMBER OF VERTICAL LINE ; R8 POINTER TO MOST UP ABOVE PIXEL ; R7 POINTER TO UP SLIDER PIXEL AT UPPER RIGHT CORNER MOVL PROGRAM_ELEMENT_L_Y(R7),R9 ; R11 POINTER TO DEST PIXEL ; R10 POINTER TO LABEL QUEUE ; R9 COLUMN NUMBER OF VERT. LINE ; R8 POINTER TO LABEL LIST ELEMENT ; R7 POINTER TO END OF SOURCE LIST ; R6 POINTER TO NEXT ELEMENT TO BE CHECKED AND POSSABLY DRAWN IN MOVL PROGRAM_ELEMENT_L_LABEL(R11),R10 MOVL LABEL_ELEMENT_L_COME_FROM(R10),R8 MOVAL LABEL_EXTENTION_L_LIST(R8),R6 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R8),R7 ; CHECK AND DRAW LOOP 60$: CMPL R6,R7 ;SEE IF AT END OF THIS LIST ELEMENT BLSSU 61$ ;NO MOVL LABEL_EXTENTION_L_EXTENTION(R8),R8 BNEQ 62$ BRW 90$ ;NO MORE-DONE 62$: MOVAL LABEL_EXTENTION_L_LIST(R8),R6 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R8),R7 61$: MOVL (R6)+,R5 ;GET NEXT BNEQ 63$ BRW 90$ ;LIST EMPTY DONE ; SEE IF THIS ONE IS IN RANGE TO BE DRAWN 63$: CMPL #-1,R5 ;V2.02 BEQL 60$ ;V2.02 BITL #^X10000000,R5 ;V3.14 BNEQ 60$ ;V3.14 CMPL PROGRAM_ELEMENT_L_X(R5),PROGRAM_ELEMENT_L_X(R11) BGTR 60$ ;NO-TRY NEXT ONE BNEQ 1063$ CMPL PROGRAM_ELEMENT_L_Y(R5),PROGRAM_ELEMENT_L_Y(R11) BGEQ 60$ ; THIS SOURCE IS IN RANGE TO BE DRAWN-SCAN TO SEE IF WAY IS CLEAR 1063$: MOVL R5,R4 ;V3.14 MOVL #-1,-4(R6) ;V3.14 64$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R3 ;NEXT RIGHT CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R3) BNEQ 65$ ;RAN INTO A ROAD BLOCK-GO HANDLE IT MOVL R3,R4 CMPL R9,PROGRAM_ELEMENT_L_Y(R4) ;THERE YET ?? BGTR 64$ ;NO-CONTINUE SCAN BRW 70$ ;THERE-GO DRAW IN LINE 65$:; NEED TO ADD A SPLIT ROW MOVL PROGRAM_ELEMENT_L_X(R4),R0 MOVL PROGRAM_ELEMENT_L_Y(R4),R1 CALLG NULL,ADD_ROW_TO_MIDDLE BRB 64$ 70$: MOVL R5,R4 BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R4) 71$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R4 CMPL R9,PROGRAM_ELEMENT_L_Y(R4) BLEQ 75$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R4) BRB 71$ 75$: BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R4) MOVL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_DOWN_LABEL(R4) ;V2.02 CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R5) ;V2.06 BNEQ 1075$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_END(R5) ;V2.06 BNEQ 2075$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_END,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 2075$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_ERR(R5) ;V2.06 BNEQ 1075$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_ERR,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 1075$: CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R5) ;V2.06 BNEQ 5075$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_LESS_THAN(R5) ;V2.06 BNEQ 3075$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_LT,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 3075$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_EQUAL(R5) ;V2.06 BNEQ 4075$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_EQ,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 4075$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_GREATER_THAN(R5) ;V2.06 BNEQ 5075$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_GT,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.02 5075$: BRW 60$ ; ALL UPPER LINES DRAWN IN 90$: POPR #^M .PAGE .SUBTITLE DO SCAN AHEAD TO END OF FURTHEST LINE CONT. SRC LBL 100$: ; ENTRY REGESTERS ; R11 POINTS TO PIXEL WITH LABEL CURRENTLY BEING DRAWN IN ; R10 POINTS TO START OF LINE CONTAINING ABOVE PIXEL ; R2 POINTS TO MAX DOWN PIXEL ; R1 POINTS TO MAX RIGHT PIXEL TSTL R2 ;IS THERE ANYTHING TO BE DRAWN IN BELOW CURRENT POS. BNEQ 101$ ;YES MOVL R11,R9 ;V2.06 BRW 500$ ;GO CHECK ON FLOW_CONNECTORS ;V2.06 101$:; MUST DO A RECURSIVE SCAN HEAD TO DO ANY LOWER LEVEL NESTED LOOPS ; SCAN PROCEEDS TO END OF LINE CONTAINING MAX DOWN PIXEL PUSHR #^M MOVL PROGRAM_ELEMENT_L_X(R2),R9 ;GET ROW NUMBER OF END SOURCE BRB 105$ ;UPDATE POINTERS TO NEXT PIXEL 103$: CALLG NULL,PHASE_3_DISPATCH MOVL R1,R11 MOVL R2,R10 ; SEE IF DONE YET CMPL R9,PROGRAM_ELEMENT_L_X(R11) BLSS 104$ ;PAST IT-DONE SCAN BEQL 105$ ;SAME LINE-CHECK LINE PIXEL BRB 106$ ;NOT DONE-CONTINUE 105$: TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) BEQL 104$ 106$: ;NOT DONE-DO UPDATE AND CONTINUE SCAN MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 BNEQ 103$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10 BEQL 104$ ;DONE-THE HARD WAY MOVL R10,R11 BRB 103$ 104$: ;SCAN DOWN HAS BEEN COMPLETED SAVE END POINTS MOVL R11,R9 MOVL R10,R8 POPR #^M ;RESTORE SAVED INFO PUSHR #^M ;SAVE END INFO FOR RETURN MOVL R2,R8 MOVL R1,R9 .PAGE .SUBTITLE DRAW IN LINES BELOW DESTINATION-SAME LEVEL ;V3.19 ; R11 POINTER TO DEST ; R10 RIGHT SCANNER POINTER ; R9 MAX RIGHT POINTER ; R8 MAX DOWN POINTER ; ;V3.19 ; CHECK FOR SPECIAL CASE WHERE SOURCE AND DEST ARE ON SAME LEVEL ;V3.19 ; ;V3.19 CMPL PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_X(R8) ;V3.19 BEQL 92121$ ;V3.19 BRW 2121$ ;V3.19 92121$: ;V3.19 ; MAX DOWN AND MAX RIGHT ARE AT SAME LEVEL AS DEST-DRAW IN BACK ;V3.19 ; POINTING LINE CATCHING ANY OTHER ITEMS THAT JUST MAY BE ON THE ;V3.19 ; SAME LEVEL ;V3.19 MOVL R9,R7 ;SET UP SCANNER POINTER ;V3.19 BISL #,PROGRAM_ELEMENT_L_FLAG(R7) ;V3.19 ; LOOP TO SELF DOUBLE SPECIAL ;V3.19 CMPL PROGRAM_ELEMENT_L_Y(R7),PROGRAM_ELEMENT_L_Y(R11) ;V3.19 BNEQ 12121$ ;V3.19 BISL #,- ;V3.19 PROGRAM_ELEMENT_L_FLAG(R7) ;V3.19 BRW 22121$ ;V3.19 12121$: BISL #,- ;V3.19 PROGRAM_ELEMENT_L_FLAG(R7) ;V3.19 32121$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R7),R7 ;V3.19 BISL #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R7) ;V3.19 CMPL PROGRAM_ELEMENT_L_Y(R7),PROGRAM_ELEMENT_L_Y(R11) ;V3.19 BGTR 12121$ ;V3.19 BISL #,- ;V3.19 PROGRAM_ELEMENT_L_FLAG(R7) ;V3.19 ; CHECK FOR MULT CASES OF SAME LEVEL LOOP BACK ;V3.19 22121$: MOVL PROGRAM_ELEMENT_L_LABEL(R11),R10 ;V3.19 MOVL LABEL_ELEMENT_L_COME_FROM(R10),R8 ;V3.19 MOVAL LABEL_EXTENTION_L_LIST(R8),R6 ;V3.19 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R8),R7 ;V3.19 42121$: CMPL R6,R7 ;SEE IF AT END OF CURRENT LIST ELEMENT ;V3.19 BLSSU 52121$ ;NO ;V3.19 MOVL LABEL_EXTENTION_L_EXTENTION(R8),R8 ;V3.19 BNEQ 62121$ ;V3.19 BRW 290$ ;V3.19 62121$: MOVAL LABEL_EXTENTION_L_LIST(R8),R6 ;V3.19 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R8),R7 ;V3.19 52121$: MOVL (R6)+,R5 ;V3.19 BNEQ 72121$ ;V3.19 BRW 290$ ;V3.19 72121$: CMPL #-1,R5 ;V3.19 BEQL 42121$ ;V3.19 BITL #^X10000000,R5 ;V3.19 BNEQ 42121$ ;V3.19 MOVL #-1,-4(R6) ;V3.19 BISL #,PROGRAM_ELEMENT_L_FLAG(R5) ;V3.19 BRW 42121$ ;V3.19 .PAGE ;V3.19 .SUBTITLE DRAW IN LINES BELOW DESTINATION-NOT SAME LEVEL ;V3.19 2121$: MOVL R11,R10 ;V3.19 ; ATTEMPT TO SCAN TO RIGHT TO AT LEAST 1 GREATER THAN MAX RIGHT 212$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 BNEQ 1212$ ; CAME TO END OF R.H.S. BRW 219$ 1212$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) BNEQ 213$ ;RAN INTO A NON CONNECTOR-GO SEE HOW TO GO MORE RIGHT MOVL R0,R10 ;MAKE STEP TO RIGHT ;SEE IF WE HAVE AT LEAST GOTTEN PAST MAX RIGHT SOURCE CMPL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R9) BLEQ 212$ ;YES-GO CHECK ON SCAN DOWN TO MAX BELOW LEVEL ;MAKE SURE THAT THIS CONNECTOR IS NOT ALREADY IN USE BITL #,- PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 212$ BRW 220$ 213$:; HAVE REACHED NON CONNECTOR PIXEL-CHECK ON POSSABLE ACTIONS ; FIRST-IS NON CONNECTOR LABELED TSTL PROGRAM_ELEMENT_L_LABEL(R0) BNEQ 214$ ;YES-IT IS LABEL'D-MUST OPEN UP A PATH 1213$: MOVL R0,R10 ;COMPLETE STEP ;V3.19 ; SEE IF WE ARE IN THE RIGHT COLUMN TO START GOING DOWN CMPL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R9) BLEQ 212$ ;NO-KEEP SCANNING ;V2.02 ; TIME TO GO UP-BACK UP ONE AND ADD COLUMN TO MIDDLE MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R10 MOVL PROGRAM_ELEMENT_L_Y(R10),R0 MOVL PROGRAM_ELEMENT_L_X(R8),R2 ;V2.05 MOVL PROGRAM_ELEMENT_L_X(R10),R1 ;V2.05 CALLG NULL,ADD_SPLIT_COLUMN_TO_MIDDLE ;V2.05 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 ;UPDATE R10 BRW 220$ 214$: ;SEE IF LABEL IS USED ;V3.19 BITL #,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BEQL 1213$ ;NO-IGNORE IT ;V3.19 ;NOT FAR ENOUGH TO RIGHT-MUST OPEN PATH TO RIGHT ;V3.19 MOVL PROGRAM_ELEMENT_L_X(R11),R0 ;MUST PUT IT ABOVE CURRENT DEST MOVL PROGRAM_ELEMENT_L_Y(R10),R1 ;SET SPLIT AFTER LOC CALLG NULL,ADD_ROW_TO_MIDDLE ; SPLIT ROW ADDED-CONTINUE SCAN OUT TO RIGHT BRW 212$ 219$: ;CAME TO END OF PICTURE-ADD COL ON R.H.S. AND GO DOWN ALONG IT CALLG NULL,ADD_TO_RIGHT_SIDE MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 BRW 220$ ; HAVE REACHED A POINT WHERE THE SLIDER IS AT LEAST ONE COL TO RIGHT ; OF RIGHT MOST SOURCE-NOT ATTEMPT TO GO UP TO LEVEL OF HIGHEST ELEMENT ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT UPPER RIGHT CORNER ; R9 POINTER RIGHT MOST RIGHT BELOW PIXEL ; R8 POINTER TO MOST DOWN BELOW PIXEL ; R7 POINTER TO DOWN SLIDER PIXEL 220$: MOVL R10,R7 221$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R0 ; CHECK TO SEE IF ABOVE IS A CONNECTOR CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) BEQL 222$ ;YES BRW 212$ ;NO-THIS LINE UP NOT USEABLE-GO BACK AND FIND ANOTHER ; SEE THAT IT IS NOT IN USE 222$: BITL #,- PROGRAM_ELEMENT_L_FLAG(R0) BEQL 223$ ;NOT IN USE DOWN SIDE BRW 212$ ;IN USE-TRY ANOTHER LINE DOWN 223$: ;BEFORE NEXT PART OF TEST-SEE IF EVEN WITH SOURCE YET CMPL PROGRAM_ELEMENT_L_X(R0),PROGRAM_ELEMENT_L_X(R8) BGEQ 224$ ;YES-EVEN-CHECK NOT NEEDED BITL #,- PROGRAM_ELEMENT_L_FLAG(R0) BEQL 224$ ;PATH CLEAR SO FAR BRW 212$ ;PATH BLOCKED-TRY ANOTHER 224$: MOVL R0,R7 ;STEP COMPLETED ; CHECK TO SEE IF UP SLIDE IS DONE CMPL PROGRAM_ELEMENT_L_X(R7),PROGRAM_ELEMENT_L_X(R8) BLSS 221$ ;NO-CONTINUE SLIDE DOWN CHECK ; WE ARE EVEN WITH BOTTOM MOST PIXEL SOURCE ; NOW TO CHECK THE LINE FROM BOTTOM SOURCE TO LINE ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT UPPER RIGHT CORNER ; R9 POINTER RIGHT MOST RIGHT BELOW PIXEL ; R8 POINTER TO MOST DOWN BELOW PIXEL ; R7 POINTER TO UP SLIDER PIXEL AT LOWER RIGHT CORNER ; R6 POINTER TO OUT SLIDER FROM BOTTOM SOURCE PIXEL TO LINE MOVL R8,R6 ;INIT SLIDER 225$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R6),R0 ;GET NEXT RIGHT ; IS IT A CONNECTOR CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) BNEQ 226$ ;NO IT ISN'T-NEED TO DO A FIX UP MOVL R0,R6 ;FINSH STEP CMPL R6,R7 ;COME TO LINE YET? BNEQ 225$ ;NO-CONTINUE SLIDE TO RIGHT BRW 250$ ;YES-GO DRAW IN THE LINE 226$: ;WHAT IS REQUIRED AT THIS POINT IS THAT A BLANK LINE OF CONNECTORS BE ;ADDED JUST ABOVE THE ROW BEING CHECKED AND THE SOURCE ;PLUSS ALL CONNECTORS BETWEEN IT AND THE LAST ONE FOUND TO BE ; OK MOVED UP INTO THAT NEW ROW AND ANY LINES LEAVING BE ACCOUNTED ; FOR IN ABOVE AND BELOW PIXELS MOVL PROGRAM_ELEMENT_L_X(R6),R0 MOVL PROGRAM_ELEMENT_L_Y(R6),R1 CALLG NULL,ADD_ROW_TO_MIDDLE MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R7 ;ADJUST UPPER CORNER BRW 225$ ;AND CONTINUE SLIDE TO RIGHT 250$:; THE PATH HAS BEEN FOUND TO THE EXTREAMS-NOW THAT WE KNOW WHERE ; THE CORNER POINTS ARE-DRAW IN THE LINES ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT UPPER RIGHT CORNER ; R8 POINTER TO MOST LOWER BELOW PIXEL ; R7 POINTER TO DOWN SLIDER PIXEL AT LOWER RIGHT CORNER ; ; FIRST LINEFROM DEST TO LINE DOWN MOVL R11,R0 BISL2 #,PROGRAM_ELEMENT_L_FLAG(R0) 251$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 CMPL R10,R0 BEQL 252$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) BRB 251$ 252$: BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) MOVL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_TOP_LEFT(R0) ;V2.01 ; NOW GO DOWN TO THE LOWER RIGHT CORNER 253$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 CMPL R0,R7 BEQL 254$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) BRW 253$ 254$: BISL2 #,PROGRAM_ELEMENT_L_FLAG(R0) MOVL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_UP_LABEL(R0) ;V2.02 CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.01 BNEQ 1254$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_END(R8) ;V2.01 BNEQ 2254$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_END,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 2254$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_ERR(R8) ;V2.01 BNEQ 1254$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_ERR,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 1254$: CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R8) ;V2.01 BNEQ 257$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_LESS_THAN(R8) ;V2.01 BNEQ 3254$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_LT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 3254$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_EQUAL(R8) ;V2.01 BNEQ 4254$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_EQ,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.01 4254$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_GREATER_THAN(R8) ;V2.01 BNEQ 257$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_GT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.02 ; FINAL LINE IS BACK DOWN TO THE SOURCE 257$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R0 CMPL R0,R8 BEQL 258$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R0) BRB 257$ 258$: BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R0) ; THE LINE FOR EXTREAM POINTS HAS BEEN DRAWN-NOW IS THE TIME ; TO GO TO ALL OTHER SOURCES THAT ARE BELOW THE DEST AND TO ; CONNECT THEN TO THIS LINE ; R11 POINTER TO DEST PIXEL ; R10 POINTER SLIDER PIXEL AT LOWER RIGHT CORNER ; R9 COLUMN NUMBER OF VERTICAL LINE ; R8 POINTER TO MOST UP ABOVE PIXEL ; R7 POINTER TO UP SLIDER PIXEL AT UPPER RIGHT CORNER MOVL PROGRAM_ELEMENT_L_Y(R7),R9 ; R11 POINTER TO DEST PIXEL ; R10 POINTER TO LABEL QUEUE ; R9 COLUMN NUMBER OF VERT. LINE ; R8 POINTER TO LABEL LIST ELEMENT ; R7 POINTER TO END OF SOURCE LIST ; R6 POINTER TO NEXT ELEMENT TO BE CHECKED AND POSSABLY DRAWN IN MOVL PROGRAM_ELEMENT_L_LABEL(R11),R10 MOVL LABEL_ELEMENT_L_COME_FROM(R10),R8 MOVAL LABEL_EXTENTION_L_LIST(R8),R6 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R8),R7 ; CHECK AND DRAW LOOP 260$: CMPL R6,R7 ;SEE IF AT END OF THIS LIST ELEMENT BLSSU 261$ ;NO MOVL LABEL_EXTENTION_L_EXTENTION(R8),R8 BNEQ 262$ BRW 290$ ;NO MORE-DONE 262$: MOVAL LABEL_EXTENTION_L_LIST(R8),R6 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R8),R7 261$: MOVL (R6)+,R5 ;GET NEXT BNEQ 263$ BRW 290$ ;LIST EMPTY DONE ; SEE IF THIS ONE IS IN RANGE TO BE DRAWN 263$: CMPL #-1,R5 ;V2.02 BEQL 260$ ;V2.02 BITL #^X10000000,R5 ;V3.14 BNEQ 260$ ;V3.14 ; THIS SOURCE IS IN RANGE TO BE DRAWN-SCAN TO SEE IF WAY IS CLEAR 2263$: MOVL R5,R4 ;V2.06 MOVL #-1,-4(R6) ;V3.14 264$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R3 ;NEXT RIGHT CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R3) BNEQ 265$ ;RAN INTO A ROAD BLOCK-GO HANDLE IT MOVL R3,R4 CMPL R9,PROGRAM_ELEMENT_L_Y(R4) ;THERE YET ?? BGTR 264$ ;NO-CONTINUE SCAN BRW 270$ ;THERE-GO DRAW IN LINE 265$:; NEED TO ADD A SPLIT ROW MOVL PROGRAM_ELEMENT_L_X(R4),R0 MOVL PROGRAM_ELEMENT_L_Y(R4),R1 CALLG NULL,ADD_ROW_TO_MIDDLE BRB 264$ 270$: MOVL R5,R4 BISL2 #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R4) 271$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R4 CMPL R9,PROGRAM_ELEMENT_L_Y(R4) BLEQ 275$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R4) BRB 271$ 275$: BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R4) MOVL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_UP_LABEL(R4) ;V2.02 CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R5) ;V2.06 BNEQ 1275$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_END(R5) ;V2.06 BNEQ 2275$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_END,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 2275$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_ERR(R5) ;V2.06 BNEQ 1275$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IO_ERR,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 1275$: CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R5) ;V2.06 BNEQ 5275$ ;V2.01 CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_LESS_THAN(R5) ;V2.06 BNEQ 3275$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_LT,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 3275$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_EQUAL(R5) ;V2.06 BNEQ 4275$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_EQ,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.01 4275$: CMPL PROGRAM_ELEMENT_L_LABEL(R11),PROGRAM_ELEMENT_L_GREATER_THAN(R5) ;V2.06 BNEQ 5275$ ;V2.01 BISL2 #PROGRAM_FLAG_M_IF_GT,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.02 5275$: BRW 260$ ; ALL LOWER LINES DRAWN IN 290$: MOVL R11,R9 ;MOVE POINTER TO DEST PIXEL ;V2.06 POPR #^M ;RESTORE FINAL SCAN INFO BRW 500$ ;GO DO FLOW_CONNECTOR STUFF ;V2.06 .PAGE ;V2.06 .SUBTITLE ;DO THE FLOW_CONNECTOR STUFF ;V2.06 500$: ;V2.06 ; R10/R11 ;END OF SCAN INFORMATION ;V2.06 ; R9 ;POINTER TO DEST PIXEL ;V2.06 MOVL PROGRAM_ELEMENT_L_LABEL(R9),R8 ;GET POINTER TO LABEL ENTRY ;V2.06 BITL #LABEL_FLAG_M_FLOW_CONNECTOR,LABEL_ELEMENT_L_FLAG(R8) ;V2.06 BNEQ 501$ ;V2.06 MOVL R11,R1 ;V2.06 MOVL R10,R2 ;V2.06 MOVL #1,R0 ;V2.06 CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) ;V2.06 BNEQ 502$ ;V2.06 CLRL R0 ;V2.06 502$: RET ;V2.06 501$:; FLOW_CONNECTORS ARE REQUIRED ;V2.06 MOVL LABEL_ELEMENT_L_COME_FROM(R8),R7 ;V2.06 MOVAL LABEL_EXTENTION_L_LIST(R7),R6 ;V2.06 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R7),R5 ;V2.06 520$: CMPL R6,R5 ;V2.06 BLSSU 521$ ;V2.06 MOVL LABEL_EXTENTION_L_EXTENTION(R7),R7 ;V2.06 BNEQ 1520$ ;V2.06 BRW 600$ ;V2.06 1520$: MOVAL LABEL_EXTENTION_L_LIST(R7),R6 ;V2.06 MOVAL LABEL_QUEUE_EXTENTION_LENGTH(R7),R5 ;V2.06 521$: MOVL (R6)+,R4 ;V2.06 BNEQ 522$ ;V2.06 BRW 600$ ;V2.06 522$: CMPL #-1,R4 ;V2.06 BEQL 520$ ;V2.06 BITL #^X10000000,R4 ;V3.14 BEQL 520$ ;V3.14 BICL #^X10000000,R4 ;V3.14 MOVL #-1,-4(R6) ;V3.14 ; GOT A SOURCE GOING TO A FLOW_CONNECTOR ;V2.06 ; IF NOT DONE ALREADY ;V2.02 ; ADD SPLIT ROW TO RIGHT OF SOURCE STATEMENT ;V2.06 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R0 ;V2.06 BEQL 524$ ;V2.06 CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V2.06 BNEQ 524$ ;V2.06 BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BNEQ 525$ ;V2.06 524$: MOVL PROGRAM_ELEMENT_L_X(R4),R0 ;V2.06 MOVL PROGRAM_ELEMENT_L_Y(R4),R1 ;V2.06 CALLG NULL,ADD_ROW_TO_MIDDLE ;V2.06 525$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R3 ;V2.06 BNEQ 526$ ;V2.06 CALLG NULL,ADD_TO_RIGHT_SIDE ;V2.06 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R3 ;V2.06 526$: CMPW #CHART_ACTION_M_GOTO,PROGRAM_ELEMENT_W_ACTION(R4) ;V2.06 BEQL 527$ ;V2.06 CMPW #CHART_ACTION_M_CALL,PROGRAM_ELEMENT_W_ACTION(R4) ;V2.06 BNEQ 1526$ ;V2.06 CMPL #1,PROGRAM_ELEMENT_L_CALL_COUNT(R4) ;V2.06 BLSS 528$ ;V2.06 BRB 527$ ;V2.06 1526$: CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R4) ;V2.06 BNEQ 528$ ;V2.06 CMPL PROGRAM_ELEMENT_L_ERR(R4),PROGRAM_ELEMENT_L_END(R4) ;V2.06 BEQL 527$ ;V2.06 TSTL PROGRAM_ELEMENT_L_ERR(R4) ;V2.06 BEQL 527$ ;V2.06 TSTL PROGRAM_ELEMENT_L_END(R4) ;V2.06 BEQL 527$ ;V2.06 528$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R3),R3 ;V2.06 527$: ;V2.06 ; R11 POINTER TO END OF SCAN ;V2.06 ; R10 POINTER TO BEGINNING OF ROW OF END OF SCAN ;V2.06 ; R9 DESTINATION ;V2.06 ; R8-R5 SCAN LABEL LIST POINTERS ;V2.06 ; R4 CURRENT SOURCE POINTER ;V2.06 ; R3 UPPER LEFT CORNER POINTER ;V2.06 PUSHR #^M ;V2.06 MOVL R3,R7 ;V2.06 MOVL R4,R9 ;V2.06 MOVL #1,R2 ;V2.06 MOVL R2,R3 ;V2.06 ; R7 POINTS TO UPPER LEFT CORNER OF TARGET AREA ;V2.06 ; R3 WIDTH OF BLOCK ;V2.06 ; R2 DEPTH OF BLOCK ;V2.06 ; MAKE ROOM NEXT TO DEST FOR THE BLOCK ;V2.06 CALLG NULL,CHECK_BLOCK_CLEAR ;V2.06 POPR #^M ;V2.06 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R3 ;V2.06 CMPW #CHART_ACTION_M_GOTO,PROGRAM_ELEMENT_W_ACTION(R4) ;V2.06 BEQL 529$ ;V2.06 CMPW #CHART_ACTION_M_CALL,PROGRAM_ELEMENT_W_ACTION(R4) ;V2.06 BNEQ 10529$ ;V2.06 CMPL #1,PROGRAM_ELEMENT_L_CALL_COUNT(R4) ;V2.06 BLSS 530$ ;V2.06 BRB 529$ ;V2.06 10529$: CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R4) ;V2.06 BNEQ 530$ ;V2.06 CMPL PROGRAM_ELEMENT_L_ERR(R4),PROGRAM_ELEMENT_L_END(R4) ;V2.06 BEQL 529$ ;V2.06 TSTL PROGRAM_ELEMENT_L_ERR(R4) ;V2.06 BEQL 529$ ;V2.06 TSTL PROGRAM_ELEMENT_L_END(R4) ;V2.06 BEQL 529$ ;V2.06 530$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R3),R3 ;V2.06 529$: ;V2.06 PUSHR #^M ;V2.06 ; R4 POINTS TO SOURCE ;V2.06 ; R3 POINTS TO LOC FOR FLOW_CONNECTOR ;V2.06 BISL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.06 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R4 ;V2.06 CMPL R4,R3 ;V2.06 BEQL 531$ ;V2.06 BISL2 #,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.06 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R4),R4 ;V2.06 BISL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.06 BRB 532$ ;V2.06 531$: BISL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R4) ;V2.06 532$: MOVL R3,R7 ;V2.06 MOVL R4,R10 ;V2.06 MOVL #PROGRAM_LENGTH_ACTION_25,ALLOCATE_1 ;V2.06 CALLG ALLOCATE_ARG,ALLOCATE ;V2.06 INCL F_C_P_E ;V2.06 MOVL R0,R6 ;V2.06 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.06 MOVW #CHART_ACTION_M_FLOW_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.06 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.06 MOVL PROGRAM_ELEMENT_L_X(R7),PROGRAM_ELEMENT_L_X(R6) ;V2.06 MOVL PROGRAM_ELEMENT_L_Y(R7),PROGRAM_ELEMENT_L_Y(R6) ;V2.06 BISL2 PROGRAM_ELEMENT_L_FLAG(R7),PROGRAM_ELEMENT_L_FLAG(R6) ;V2.06 MOVL R8,PROGRAM_ELEMENT_L_FLOW_LABEL(R6) ;V2.06 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R7),R0 ;V2.06 BEQL 546$ ;V2.06 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.06 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.06 546$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R7),R0 ;V2.06 BEQL 547$ ;V2.06 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.06 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.06 547$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R7),R0 ;V2.06 BEQL 548$ ;V2.06 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.06 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.06 548$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R7),R0 ;V2.06 BEQL 549$ ;V2.06 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.06 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V2.06 549$: REMQUE (R7),R7 ;V2.06 MOVL PROGRAM_ELEMENT_L_LENGTH(R7),FREE_1 ;V2.06 MOVL R7,FREE_2 ;V2.06 CALLG FREE_ARG,FREE ;V2.06 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R6),R0 ;V2.06 BEQL 550$ ;V2.06 BITL #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BEQL 550$ ;V2.06 BISL #,- ;V2.06 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.06 550$: BITL #PROGRAM_FLAG_M_UP,PROGRAM_ELEMENT_L_FLAG(R6) ;V2.06 BEQL 5550$ ;V2.06 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R6),R7 ;V2.06 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R7),R10 ;V2.06 CMPW #CHART_ACTION_M_I_O,PROGRAM_ELEMENT_W_ACTION(R10) ;V2.06 BNEQ 1550$ ;V2.06 CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_END(R10) ;V2.06 BNEQ 2550$ ;V2.06 BISL2 #PROGRAM_FLAG_M_IO_END,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.06 2550$: CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_ERR(R10) ;V2.06 BNEQ 1550$ ;V2.06 BISL2 #PROGRAM_FLAG_M_IO_ERR,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.06 1550$: CMPW #CHART_ACTION_M_IF_ARITHMETIC,PROGRAM_ELEMENT_W_ACTION(R10) ;V2.06 BNEQ 5550$ ;V2.06 CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_LESS_THAN(R10) ;V2.06 BNEQ 3550$ ;V2.06 BISL2 #PROGRAM_FLAG_M_IF_LT,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.06 3550$: CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_EQUAL(R10) ;V2.06 BNEQ 4550$ ;V2.06 BISL2 #PROGRAM_FLAG_M_IF_EQ,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.06 4550$: CMPL PROGRAM_ELEMENT_L_LABEL(R9),PROGRAM_ELEMENT_L_GREATER_THAN(R10) ;V2.06 BNEQ 5550$ ;V2.06 BISL2 #PROGRAM_FLAG_M_IF_GT,PROGRAM_ELEMENT_L_FLAG(R7) ;V2.06 5550$: POPR #^M ;V2.06 BRW 520$ ;V2.06 600$: MOVL R11,R1 ;V2.06 MOVL R10,R2 ;V2.06 MOVL #1,R0 ;V2.06 CMPW #CHART_ACTION_M_END,PROGRAM_ELEMENT_W_ACTION(R11) ;V2.06 BNEQ 602$ ;V2.06 CLRL R0 ;V2.06 602$: RET ;V2.06 .PAGE .SUBTITLE ADD COLUMN OF EMPTY PIXELS TO R.H.S. .ENTRY ADD_TO_RIGHT_SIDE,^M MOVL PROGRAM_QUEUE,R11 ;GET TOP OF ARRAY 1$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R10 BEQL 2$ MOVL R10,R11 ;SLIDE OVER TO RIGHT HAND SIDE BRB 1$ 2$:; NOW SLIDE DOWN R.H.S ADDING A NEW COLLUMN OF CONNECTORS MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_X(R6) ADDL3 #1,PROGRAM_ELEMENT_L_Y(R11),PROGRAM_ELEMENT_L_Y(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 BEQL 3$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 3$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 3$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 BEQL 4$ BRW 2$ 4$: RET .PAGE .SUBTITLE ADD COLUMN OF EMPTY PIXELS TO L.H.S. .ENTRY ADD_TO_LEFT_SIDE,^M MOVL PROGRAM_QUEUE,R11 ;GET TOP OF ARRAY 1$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R10 BEQL 2$ MOVL R10,R11 ;SLIDE OVER TO LEFT HAND SIDE BRB 1$ 2$:; NOW SLIDE DOWN L.H.S ADDING A NEW COLLUMN OF CONNECTORS MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_X(R6) ADDL3 #1,PROGRAM_ELEMENT_L_Y(R11),PROGRAM_ELEMENT_L_Y(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R11) MOVL R11,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 BEQL 3$ MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R0 BEQL 3$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 3$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 ;V2.02 BEQL 4$ BRW 2$ 4$: RET .PAGE ;V2.02 .SUBTITLE ADD COLUMN OF EMPTY PIXELS TO BOTTOM ;V2.02 .ENTRY ADD_TO_BOTTOM,^M ;V2.02 MOVL PROGRAM_QUEUE,R11 ;GET TOP OF ARRAY ;V2.02 1$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R10 ;V2.02 BEQL 2$ ;V2.02 MOVL R10,R11 ;SLIDE OVER TO LEFT HAND SIDE ;V2.02 BRB 1$ ;V2.02 2$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R10 ;V2.02 BEQL 1002$ ;V2.02 MOVL R10,R11 ;V2.02 BRB 2$ ;V2.02 1002$: ;V2.02 ; NOW SLIDE ACCROSS BOTTOM ADDING A NEW ROW OF CONNECTORS ;V2.02 MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.02 CALLG ALLOCATE_ARG,ALLOCATE ;V2.02 INCL F_C_P_E ;V2.02 MOVL R0,R6 ;V2.02 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.02 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.02 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.02 ADDL3 #1,PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_X(R6) ;V2.02 MOVL PROGRAM_ELEMENT_L_Y(R11),PROGRAM_ELEMENT_L_Y(R6) ;V2.02 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.02 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R11) ;V2.02 MOVL R11,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.02 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V2.02 BEQL 3$ ;V2.02 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 ;V2.02 BEQL 3$ ;V2.02 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.02 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V2.02 3$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.02 BEQL 4$ ;V2.02 BRW 1002$ ;V2.02 4$: RET ;V2.02 .PAGE .SUBTITLE ADD COLUMN OF PIXELS TO MIDDLE .ENTRY ADD_COLUMN_TO_MIDDLE,^M ; ADD A COLUMN OF PIXELS TO MIDDLE OF MATRIX ; ; R0 IS COLUMN NUMBER TO WHICH NEW COLUMN IS TO BE ADDED JUST TO RIGHT ; ASSUME THAT COLL NO IN R0 EXISTS MOVL PROGRAM_QUEUE,R11 MOVL R0,R2 1$: CMPL R2,PROGRAM_ELEMENT_L_Y(R11) BEQL 3$ BGTR 2$ TSTL PROGRAM_ELEMENT_L_LEFT_POINTER(R11) BNEQ 1001$ CALLG NULL,ADD_TO_LEFT_SIDE 1001$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R11 BRB 1$ 2$: TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) BNEQ 1002$ CALLG NULL,ADD_TO_RIGHT_SIDE 1002$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 BRB 1$ ; NOW SLIDE DOWN-ADDING NEW PIXELS 3$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) BITL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 4$ ;SPECIAL CASE TEST FOR GOTO'S NOT IN YET MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R0 BEQL 4$ BITL #PROGRAM_FLAG_M_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R0) BEQL 4$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 4$: BITL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 5$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R0 BEQL 5$ BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R0) BEQL 5$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 5$: BITL #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 6$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 6$: BITL #PROGRAM_FLAG_M_TOP_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 7$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 7$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 8$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 8$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 9$ BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 9$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R0 MOVL R11,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) TSTL R0 BEQL 1009$ MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) 1009$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 BEQL 16$ MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 BEQL 16$ MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) 16$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 BEQL 17$ BRW 3$ 17$: CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y RET .PAGE ;V2.04 .SUBTITLE ADD SPLIT COLUMN OF PIXELS TO MIDDLE ;V2.04 .ENTRY ADD_SPLIT_COLUMN_TO_MIDDLE,^M ;V2.04 ; ADD A SPLIT COLUMN OF PIXELS TO MIDDLE OF MATRIX WITHIN ROWS SELECTED ;V2.04 ; AND AS BEST AS POSSABLE-ON THE R.H.S. ELSEWARE ;V2.04 ; ;V2.04 ; R0 IS COLUMN NUMBER TO WHICH NEW COLUMN IS TO BE ADDED JUST TO RIGHT ;V2.04 ; ASSUME THAT COLL NO IN R0 EXISTS ;V2.04 ; R1 IS THE TOP ROW WHERE THE NEW COLUMN MUST BE ;V2.04 ; R2 IS THE BOTTOM ROW WHERE THE NEW COLUMN MUST BE ;V2.04 CMPL R2,R1 ;R2>=R1 ;V2.04 BGEQ 2001$ ;V2.04 MOVL R1,R11 ;V2.04 MOVL R2,R1 ;V2.04 MOVL R11,R2 ;V2.04 2001$: MOVL PROGRAM_QUEUE,R11 ;V2.04 12001$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R10 ;V2.04 BEQL 3001$ ;V2.04 MOVL R10,R11 ;V2.04 BRB 12001$ ;V2.04 3001$: MOVL R0,R3 ;V2.04 1$: CMPL R3,PROGRAM_ELEMENT_L_Y(R11) ;V2.04 BEQL 22002$ ;V2.04 BGTR 2$ ;V2.04 TSTL PROGRAM_ELEMENT_L_LEFT_POINTER(R11) ;V2.04 BNEQ 1001$ ;V2.04 PUSHR #^M ;V2.04 CALLG NULL,ADD_TO_LEFT_SIDE ;V2.04 POPR #^M ;V2.04 1001$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R11 ;V2.04 BRB 1$ ;V2.04 2$: TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) ;V2.04 BNEQ 1002$ ;V2.04 PUSHR #^M ;V2.04 CALLG NULL,ADD_TO_RIGHT_SIDE ;V2.04 POPR #^M ;V2.04 1002$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.04 BRB 1$ ;V2.04 ; R11 POINTS TO COLUMN WHERE NEW COLL WILL BE TO RIGHT ;V2.04 ; SPECIAL CASE TEST FOR ALREADY AS FAR RIGHT AS POSSBABLE ;V2.04 22002$: TSTL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) ;V2.04 BNEQ 2002$ ;V2.04 CALLG NULL,ADD_TO_RIGHT_SIDE ;V2.04 RET ;V2.04 ; NOW SLIDE DOWN TO STARTING ROW ;V2.04 2002$: CMPL PROGRAM_ELEMENT_L_X(R11),R1 ;V2.04 BGEQ 3002$ ;V2.04 TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R11) ;V2.04 BNEQ 4002$ ;V2.04 PUSHR #^M ;V2.04 CALLG NULL,ADD_TO_BOTTOM ;V2.04 POPR #^M ;V2.04 4002$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 ;V2.04 BRB 2002$ ;V2.04 3002$: MOVL R11,R10 ;V2.04 MOVL R2,R9 ;V2.04 ; AT TOP OF ADD COL REGION ;V2.04 ; R11 POINTER TO TOP PIXEL ;V2.04 ; R10 DOWN SLIDER ;V2.04 ; R9 ROW NUMBER OF BOTTOM ROW ;V2.04 ; NOW SLIDE DOWN-ADDING NEW PIXELS ;V2.04 3$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.04 CALLG ALLOCATE_ARG,ALLOCATE ;V2.04 INCL F_C_P_E ;V2.04 MOVL R0,R6 ;V2.04 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.04 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.04 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.04 BITL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 4$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 4$: BITL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 5$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;V2.04 BEQL 5$ ;V2.04 ;SPECIAL CASE TEST FOR GOTO'S NOT IN YET ;V2.04 BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.04 BEQL 5$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 5$: BITL #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 6$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 6$: BITL #PROGRAM_FLAG_M_TOP_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 7$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 7$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 8$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 8$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 9$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 9$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;V2.04 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 TSTL R0 ;V2.04 BEQL 1009$ ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.04 1009$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R0 ;V2.04 BEQL 16$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 16$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.04 16$: CMPL R9,PROGRAM_ELEMENT_L_X(R10) ;V2.04 BLEQ 17$ ;V2.04 TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V2.04 BNEQ 1016$ ;V2.04 CALLG NULL,ADD_TO_BOTTOM ;V2.04 1016$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10 ;V2.04 BRW 3$ ;V2.04 17$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R0 ;V2.04 BEQL 20$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 20$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.04 ; HAVE REACHED BOTTOM OF MANDITORY PART OF NEW BLANK COL-TAKE CARE ;V2.04 ; OF TOP AND BOTTOM AND TRY TO PUT ON R.H.S. ;V2.04 ; R11 POINTS TO TOP ELEMENT TO LEFT OF NEW COL ;V2.04 ; R10 POINTS TO BOTTOM ELEMENT TO LEFT OF NEW COL ;V2.04 ; START BY GOING UP ;V2.04 20$: TSTL PROGRAM_ELEMENT_L_UP_POINTER(R11) ;SEE IF NEEDED ;V2.04 BNEQ 1020$ ;V2.04 BRW 50$ ;NO-AT TOP OF TABLEAU ;V2.04 1020$: MOVL R11,R9 ;V2.04 ; NOW SCAN TO RIGHT-MUST BE NO VERICAL LINES CONNECTING OVER POTENTIAL ;V2.04 ; SPLIT-AS THE TOP LEFT/RIGHT NOT IN YET ONLY NEED TO CHECK ONE SIDE OF ;V2.04 ; SPLIT FOR UP OR UP_OUT ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R9),R8 ;V2.06 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R9 ;V2.06 21$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R9 ;STEP TO RIGHT ;V2.04 BNEQ 1021$ ;V2.04 BRW 30$ ;STEP TO R.H.S. OK-CAN PUT IN SPLIT HERE ;V2.04 1021$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R8 ;V2.06 BITL #,PROGRAM_ELEMENT_L_FLAG(R9) ;V2.06 BEQL 21$ ;OK-CONTINUE NEXT OVER ;V2.04 BITL #,PROGRAM_ELEMENT_L_FLAG(R8) ;V2.06 BEQL 21$ ;V2.06 ; SPLIT NOT POSSABLE HERE-EXTEND COL UP ONE AND TRY AGAIN ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R11 ;V2.04 MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.04 CALLG ALLOCATE_ARG,ALLOCATE ;V2.04 INCL F_C_P_E ;V2.04 MOVL R0,R6 ;V2.04 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.04 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.04 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.04 BITL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.04 BEQL 24$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 24$: BITL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.04 BEQL 25$ ;V2.04 ;SPECIAL CASE TEST FOR GOTO'S NOT IN YET ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R0 ;V2.04 BEQL 25$ ;V2.04 BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.04 BEQL 25$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 25$: BITL #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.04 BEQL 26$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 26$: BITL #PROGRAM_FLAG_M_TOP_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.04 BEQL 27$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 27$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.04 BEQL 28$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 28$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.04 BEQL 29$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 29$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R0 ;V2.04 MOVL R11,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R11) ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 TSTL R0 ;V2.04 BEQL 1029$ ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.04 1029$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 ;V2.04 BEQL 12016$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 12016$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.04 12016$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 ;V2.04 BEQL 3016$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 3016$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.04 3016$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R6),R0 ;V2.04 BEQL 5016$ ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R6),R1 ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R1),R1 ;V2.04 MOVL R1,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R1) ;V2.04 5016$: BRW 20$ ;TRY NEXT LEVEL UP FOR SPLIT ;V2.04 30$: ;R11 POINTS TO BOTTOM PART OF SPLIT ;V2.04 ; PUT IN NEW CONNECTIONS FOR THE SPLIT ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R9 ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R9 ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.04 31$: MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R9) ;V2.04 MOVL R9,PROGRAM_ELEMENT_L_UP_POINTER(R11) ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R0 ;V2.04 BEQL 32$ ;END OF SPLIT-NOW TO ADD TO R.H.S ;V2.04 MOVL R0,R9 ;V2.04 BRB 31$ ;V2.04 32$: ;R9 POINTS TO LOC WHERE NEW PIXEL GOES TO RIGHT ;V2.04 MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.04 CALLG ALLOCATE_ARG,ALLOCATE ;V2.04 INCL F_C_P_E ;V2.04 MOVL R0,R6 ;V2.04 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.04 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.04 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.04 MOVL R9,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R9) ;V2.04 MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R11) ;V2.04 MOVL R6,R11 ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R9),R9 ;V2.04 BNEQ 32$ ;V2.04 ; TOP PUT IN-JUST HANDLE PUTTING IN THE BOTTOM SPLIT AND R.H.S. ;V2.04 BRW 50$ ;V2.04 50$: ;R10 POINTS TO BOTTOM OF MANDITORY BLANK COLUMN ;V2.04 TSTL PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;SEE IF NEEDED ;V2.04 BNEQ 1050$ ;V2.04 BRW 100$ ;NO-AT BOTTOM OF TABLEAU ;V2.04 1050$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R9 ;V2.04 ; NOW SCAN TO RIGHT-MUST BE NO VERICAL LINES CONNECTING OVER POTENTIAL ;V2.04 ; SPLIT- ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R8 ;V2.04 51$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R9 ;STEP TO RIGHT ;V2.04 BNEQ 3051$ ;V2.04 BRW 60$ ;STEP TO R.H.S. OK-CAN PUT IN SPLIT HERE ;V2.04 3051$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R8),R8 ;V2.04 BNEQ 2051$ ;V2.04 BRW 60$ ;V2.04 2051$: BITL #,PROGRAM_ELEMENT_L_FLAG(R9) ;V2.06 BEQL 51$ ;OK-CONTINUE NEXT OVER ;V2.04 BITL #,PROGRAM_ELEMENT_L_FLAG(R8) ;V2.06 BNEQ 1051$ ;V2.04 BRW 51$ ;V2.04 1051$: ;V2.04 ; SPLIT NOT POSSABLE HERE-EXTEND COL DOWN ONE AND TRY AGAIN ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10 ;V2.04 MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.04 CALLG ALLOCATE_ARG,ALLOCATE ;V2.04 INCL F_C_P_E ;V2.04 MOVL R0,R6 ;V2.04 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.04 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.04 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.04 BITL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 54$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 54$: BITL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 55$ ;V2.04 ;SPECIAL CASE TEST FOR GOTO'S NOT IN YET ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;V2.04 BEQL 55$ ;V2.04 BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.04 BEQL 55$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 55$: BITL #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 56$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 56$: BITL #PROGRAM_FLAG_M_TOP_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 57$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 57$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 58$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 58$: BITL #PROGRAM_FLAG_M_BOTTOM_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.04 BEQL 59$ ;V2.04 BISL2 #,- ;V2.04 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.04 59$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;V2.04 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 TSTL R0 ;V2.04 BEQL 1059$ ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.04 1059$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R0 ;V2.04 BEQL 2046$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 2046$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R6),R1 ;V2.04 BEQL 2046$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 2046$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R1) ;V2.04 MOVL R1,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.04 2046$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R0 ;V2.04 BEQL 3046$ ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R0 ;V2.04 BEQL 3046$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.04 3046$: BRW 50$ ;TRY NEXT LEVEL DOWN FOR SPLIT ;V2.04 60$: ;R10 POINTS TO BOTTOM PART OF SPLIT ;V2.04 ; PUT IN NEW CONNECTIONS FOR THE SPLIT ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R9 ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R9 ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 ;V2.04 61$: MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R9) ;V2.04 MOVL R9,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R0 ;V2.04 BEQL 62$ ;END OF SPLIT-NOW TO ADD TO R.H.S ;V2.04 MOVL R0,R9 ;V2.04 BRB 61$ ;V2.04 62$: ;R9 POINTS TO LOC WHERE NEW PIXEL GOES TO RIGHT ;V2.04 MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.04 CALLG ALLOCATE_ARG,ALLOCATE ;V2.04 INCL F_C_P_E ;V2.04 MOVL R0,R6 ;V2.04 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.04 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.04 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.04 MOVL R9,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R9) ;V2.04 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V2.04 MOVL R6,R10 ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R9 ;V2.04 BNEQ 62$ ;V2.04 BRW 100$ ;V2.04 ; ALL IN JUST RENUMBER IT ;V2.04 100$: CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y ;V2.04 RET ;V2.04 .PAGE .SUBTITLE ADD ROW OF PIXELS TO MIDDLE .ENTRY ADD_ROW_TO_MIDDLE,^M ; ADD A SPLIT ROW OF PIXELS TO MIDDLE OF MATRIX ; ; R0 IS ROW NUMBER TO WHICH NEW COLUMN IS TO BE ADDED JUST BELOW ; R1 IS COLUMN NUMBER AFTER WHICH THE ROW IS SPLIT ; ASSUME THAT ROW NO IN R0 EXISTS ; ; WAS C1 C2 C3 C4 IF GOTO C5 C6 C7 ACT ; ; NOW C1 C2 C3 C4 IF GOTO C8 C9 C10 C11 ; C12 C13 C14 C15 C16 C17 C5 C6 C7 ACT ; ; ; MOVL PROGRAM_QUEUE,R11 MOVL R0,R9 MOVL R1,R10 2$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 BEQL 1001$ ;V2.04 MOVL R0,R11 BRB 2$ 1001$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 ;V2.04 BEQL 1$ ;V2.04 MOVL R0,R11 ;V2.04 BRB 1001$ ;V2.04 1$: CMPL R9,PROGRAM_ELEMENT_L_X(R11) BEQL 3$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 BRB 1$ ; NOW SLIDE ACCROSS-ADDING NEW PIXELS 3$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) BITL #PROGRAM_FLAG_M_DOWN,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 4$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 ;V2.02 BEQL 4$ ;V2.02 BITL #,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BEQL 4$ ;V2.02 BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 4$: BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 5$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 ;V2.02 BEQL 5$ ;V2.02 BITL #,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BEQL 5$ ;V2.02 BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 5$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 MOVL R11,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R11) TSTL R0 ;V2.02 BEQL 1005$ ;V2.02 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) 1005$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V2.02 BEQL 6$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 BEQL 6$ MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) 6$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 BNEQ 1006$ BRW 7$ 1006$: CMPL R10,PROGRAM_ELEMENT_L_Y(R11) ;CHECK FOR THE SPLIT BLSS 10$ BRW 3$ 10$: MOVL R11,R10 TSTL PROGRAM_ELEMENT_L_UP_POINTER(R11) ;V2.02 BNEQ 1010$ ;V2.02 BRW 2016$ ;V2.02 1010$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V3.19 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R11 ;V3.19 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) BITL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BEQL 2010$ ;V3.19 BITL #PROGRAM_FLAG_M_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V3.19 BEQL 12$ ;V3.19 BICL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,- ;V3.19 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,PROGRAM_ELEMENT_L_FLAG(R6) ;V3.19 BRB 12$ ;V3.19 2010$: BITL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BEQL 12$ ;V3.19 BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R10) ;V3.19 BEQL 12$ ;V3.19 BICL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,- ;V3.19 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,PROGRAM_ELEMENT_L_FLAG(R6) ;V3.19 12$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 CALLG ALLOCATE_ARG,ALLOCATE INCL F_C_P_E ;V2.01 MOVL R0,R6 INSQUE (R6),@PROGRAM_QUEUE+4 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) BITL #PROGRAM_FLAG_M_DOWN,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 14$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 ;V2.02 BEQL 14$ ;V2.02 BITL #,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BEQL 14$ ;V2.02 BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 14$: BITL #PROGRAM_FLAG_M_DOWN_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BEQL 15$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 ;V2.02 BEQL 15$ ;V2.02 BITL #,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BEQL 15$ ;V2.02 BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R6) 15$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R0 MOVL R11,PROGRAM_ELEMENT_L_UP_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R11) MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) BEQL 1015$ ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) 1015$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V2.04 BEQL 16$ MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R0 BEQL 16$ MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) 16$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 BNEQ 1016$ BRW 17$ 1016$: BRW 12$ 2016$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R0 ;V3.19 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V3.19 MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.02 BITL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BEQL 12010$ ;V3.19 BITL #PROGRAM_FLAG_M_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) ;V3.19 BEQL 3016$ ;V3.19 BICL #PROGRAM_FLAG_M_RIGHT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,- ;V3.19 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,PROGRAM_ELEMENT_L_FLAG(R6) ;V3.19 BRB 3016$ ;V3.19 12010$: BITL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BEQL 3016$ ;V3.19 BITL #PROGRAM_FLAG_M_LEFT,PROGRAM_ELEMENT_L_FLAG(R10) ;V3.19 BEQL 3016$ ;V3.19 BICL #PROGRAM_FLAG_M_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,- ;V3.19 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.19 BISL #,PROGRAM_ELEMENT_L_FLAG(R6) ;V3.19 3016$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V2.02 CALLG ALLOCATE_ARG,ALLOCATE ;V2.02 INCL F_C_P_E ;V2.02 MOVL R0,R6 ;V2.02 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.02 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.02 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R11),R0 ;V2.02 MOVL R11,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.02 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R11) ;V2.02 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R0 ;V2.02 BEQL 4016$ ;V2.02 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R0 ;V2.02 BEQL 4016$ ;V2.02 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.02 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V2.02 4016$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R6),R0 ;V2.06 BEQL 6016$ ;V2.06 BITL #,- ;V2.06 PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BEQL 6016$ ;V2.06 BITL #,PROGRAM_ELEMENT_L_FLAG(R11) ;V2.06 BEQL 6016$ ;V2.06 BITL #PROGRAM_FLAG_M_DOWN,PROGRAM_ELEMENT_L_FLAG(R0) ;V2.06 BNEQ 7016$ ;V2.06 BISL2 #,- ;V2.06 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.06 BRB 6016$ ;V2.06 7016$: BISL2 #,- ;V2.06 PROGRAM_ELEMENT_L_FLAG(R6) ;V2.06 6016$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.06 BNEQ 5016$ ;V2.02 BRW 17$ ;V2.02 5016$: BRW 3016$ ;V2.02 17$: ;COMPLETED SPLIT ROW ADD-CHECK FOR SPECIAL CASE OF TOP RETURN ;LINE THAT MIGHT EXIST AND NEED TO SPAN THE SPLIT ;R10 POINTS TO OLD LINE PIXEL FOLLOWING SPLIT ; ;CHECK FO LINE GOING RIGHT BITL #,PROGRAM_ELEMENT_L_FLAG(R10) BEQL 18$ ;NO BRW 50$ ;TOP LINE GOES RIGHT ;CHECK FOR LINE GOES LEFT 18$: BITL #,PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 19$ ;LINE GOES LEFT BRW 7$ ;NO LINE-JUST EXIT ; MOVE IN TOP RETURN LINE GOES LEFT 19$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R11 20$: BITL #PROGRAM_FLAG_M_TOP_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 21$ BRW 7$ 21$: BISL2 #PROGRAM_FLAG_M_TOP_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BICL2 #PROGRAM_FLAG_M_TOP_LEFT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) BITL #PROGRAM_FLAG_M_TOP_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R10) BEQL 22$ BISL2 #PROGRAM_FLAG_M_TOP_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R11) BICL2 #PROGRAM_FLAG_M_TOP_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R10) 22$: BITL #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) BEQL 23$ BISL2 #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R11) BICL2 #PROGRAM_FLAG_M_TOP_RIGHT,PROGRAM_ELEMENT_L_FLAG(R10) MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 BNEQ 24$ BRW 7$ 24$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 BRW 20$ 23$: BITL #PROGRAM_FLAG_M_UP_OUT,PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 25$ BRW 7$ 25$: BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R11) BRW 7$ ; LINE GOES RIGHT 50$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R11 120$: BITL #PROGRAM_FLAG_M_TOP_LEFT,PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 121$ BEQL 7$ 121$: BISL2 #PROGRAM_FLAG_M_TOP_LEFT,PROGRAM_ELEMENT_L_FLAG(R11) BICL2 #PROGRAM_FLAG_M_TOP_LEFT,PROGRAM_ELEMENT_L_FLAG(R10) BITL #PROGRAM_FLAG_M_TOP_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R10) BEQL 122$ BISL2 #PROGRAM_FLAG_M_TOP_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R11) BICL2 #PROGRAM_FLAG_M_TOP_JUNCTION,PROGRAM_ELEMENT_L_FLAG(R10) 122$: BITL #PROGRAM_FLAG_M_TOP_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) BEQL 123$ BISL2 #PROGRAM_FLAG_M_TOP_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R11) BICL2 #PROGRAM_FLAG_M_TOP_RIGHT_OUT,PROGRAM_ELEMENT_L_FLAG(R10) MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 BNEQ 124$ BRW 7$ 124$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 BRW 120$ 123$: BITL #PROGRAM_FLAG_M_UP_OUT,PROGRAM_ELEMENT_L_FLAG(R10) BNEQ 125$ BRW 7$ 125$: BISL2 #,- PROGRAM_ELEMENT_L_FLAG(R11) BRW 7$ 7$: CALLG NULL,ENTER_PROGRAM_ELEMENTS_X_Y RET .PAGE ;V2.02 .SUBTITLE MAKE PASS OVER PICTURE TO SEE WHAT CAN BE COMPRESSED ;V3.13 .SUBTITLE SEE IF END CAN BE REMOVED ;V3.13 .SUBTITLE SEE IF SIMPLE GOTO TO CONNECTOR CAN BE RAISED ;V3.13 .SUBTITLE SEE IF ANY NON BRANCH ACTION CAN BE RAISED ;V3.13 PHASE_3_A: ;V2.02 MOVAL PROGRAM_QUEUE,R11 ;V2.02 MOVL R11,R10 ;V2.02 PHASE_3_A_LOOP_BACK: ;V3.13 1$: MOVL (R10),R10 ;V2.02 CMPL R10,R11 ;V2.02 BNEQ 7$ ;V3.13 BRW PHASE_3_B ;V3.13 7$: CASEW PROGRAM_ELEMENT_W_ACTION(R10),#0,#25 ;V3.13 10$: .WORD PHASE_3_A_ACTION_0-10$ ;CONNECTOR ;V3.13 .WORD PHASE_3_A_ACTION_1-10$ ;NON_EXE ;V3.13 .WORD PHASE_3_A_ACTION_2-10$ ;I/O ;V3.13 .WORD PHASE_3_A_ACTION_3-10$ ;CONTINUE ;V3.13 .WORD PHASE_3_A_ACTION_4-10$ ;LOGICAL IF ;V3.13 .WORD PHASE_3_A_ACTION_5-10$ ;ARITH IF ;V3.13 .WORD PHASE_3_A_ACTION_6-10$ ;IF-THEN ;V3.13 .WORD PHASE_3_A_ACTION_7-10$ ;ELSE-IF ;V3.13 .WORD PHASE_3_A_ACTION_8-10$ ;ELSE ;V3.13 .WORD PHASE_3_A_ACTION_9-10$ ;ENDIF ;V3.13 .WORD PHASE_3_A_ACTION_10-10$ ;DO ;V3.13 .WORD PHASE_3_A_ACTION_11-10$ ;DO WHILE ;V3.13 .WORD PHASE_3_A_ACTION_12-10$ ;ENDDO ;V3.13 .WORD PHASE_3_A_ACTION_13-10$ ;GOTO ;V3.13 .WORD PHASE_3_A_ACTION_14-10$ ;GOTO-ASSIGNED ;V3.13 .WORD PHASE_3_A_ACTION_15-10$ ;GOTO-COMPUTED ;V3.13 .WORD PHASE_3_A_ACTION_16-10$ ;ASSIGN ;V3.13 .WORD PHASE_3_A_ACTION_17-10$ ;STOP ;V3.13 .WORD PHASE_3_A_ACTION_18-10$ ;RETURN ;V3.13 .WORD PHASE_3_A_ACTION_19-10$ ;EXEC ;V3.13 .WORD PHASE_3_A_ACTION_20-10$ ;END ;V3.13 .WORD PHASE_3_A_ACTION_21-10$ ;START ;V3.13 .WORD PHASE_3_A_ACTION_22-10$ ;ENTRY ;V3.13 .WORD PHASE_3_A_ACTION_23-10$ ;PAUSE ;V3.13 .WORD PHASE_3_A_ACTION_24-10$ ;CALL ;V3.13 .WORD PHASE_3_A_ACTION_25-10$ ;FLOW CONNECTOR ;V3.13 .PAGE ;V3.13 .SUBTITLE NO ACTION ON THIS TYPE ;V3.13 PHASE_3_A_ACTION_0: ;V3.13 PHASE_3_A_ACTION_4: ;V3.13 PHASE_3_A_ACTION_5: ;V3.13 PHASE_3_A_ACTION_6: ;V3.13 PHASE_3_A_ACTION_7: ;V3.13 PHASE_3_A_ACTION_8: ;V3.13 PHASE_3_A_ACTION_9: ;V3.13 PHASE_3_A_ACTION_10: ;V3.13 PHASE_3_A_ACTION_11: ;V3.13 PHASE_3_A_ACTION_12: ;V3.13 PHASE_3_A_ACTION_14: ;V3.13 PHASE_3_A_ACTION_15: ;V3.13 PHASE_3_A_ACTION_21: ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 .PAGE ;V3.13 .SUBTITLE SIMPLE OPERATOR-SEE IF CAN BE MOVED UP OR LEFT ;V3.13 ; THESE FORMS ARE SIMPLE FLOWIN THE TOP AND OUT THE BOTTOM ;V3.13 PHASE_3_A_ACTION_1: ;V3.13 PHASE_3_A_ACTION_2: ;V3.13 PHASE_3_A_ACTION_3: ;V3.13 PHASE_3_A_ACTION_16: ;V3.13 PHASE_3_A_ACTION_19: ;V3.13 PHASE_3_A_ACTION_22: ;V3.13 PHASE_3_A_ACTION_23: ;V3.13 PHASE_3_A_ACTION_24: ;V3.13 ; FIRST CHECK TO SEE THAT NO HORIZONTAL CONNECTORS EXIST IN THIS PIXEL ;V3.13 BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BEQL 1$ ;V3.13 BRW 30$ ;V3.13 1$: BITL #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BNEQ 11$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; CHECK TO SEE IF PIXEL JUST ABOVE IS A CONNECTOR AND ONLY A FLOW ;V3.13 ; THROUGH-TO WHICH THIS ELEMENT CAN BE MOVED ;V3.13 11$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R0 ;V3.13 BNEQ 12$ ;NOTHING ABOVE ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 12$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V3.13 BEQL 2$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; NOW CHECK TO SEE THAT IT IS ONLY FLOW THROUGH ;V3.13 2$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.13 BEQL 3$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; THE TWO ELEMENTS CAN BE EXCHANGED ;V3.13 3$: ;V3.13 ; EXCHANGE X,Y VALUES ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_X(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_X(R10) ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_Y(R10) ;V3.13 ; ADJUST POINTERS TO SURROUNDING UNMOVED PIXELS ;V3.13 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R2 ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V3.13 BEQL 14$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R2) ;V3.13 14$: MOVL R1,PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V3.13 BEQL 13$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_DOWN_POINTER(R1) ;V3.13 13$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R2 ;V3.13 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R1 ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V3.13 BEQL 15$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R1) ;V3.13 15$: MOVL R2,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V3.13 BEQL 16$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R2) ;V3.13 16$: TSTL R1 ;V3.13 BEQL 17$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R1),R1 ;V3.13 17$: TSTL R2 ;V3.13 BEQL 18$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R2),R2 ;V3.13 18$: MOVL R1,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V3.13 BEQL 19$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R1) ;V3.13 19$: MOVL R2,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V3.13 BEQL 20$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R2) ;V3.13 20$: BRW PHASE_3_A_ACTION_1 ;AND SEE IF IT CAN BE DONE AGAIN ;V3.13 ; NEXT CHECK TO SEE THAT NO VERTICAL CONNECTORS EXIST IN THIS PIXEL ;V3.13 ; AND NO HORIZ CONN OTHER THAN THE CENTER HORZ LINE ;V3.13 30$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BEQL 31$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 31$: BITL #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BNEQ 41$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; CHECK TO SEE IF PIXEL JUST RIGHT OF A CONNECTOR AND ONLY A FLOW ;V3.13 ; THROUGH-TO WHICH THIS ELEMENT CAN BE MOVED ;V3.13 41$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R0 ;V3.13 BNEQ 42$ ;NOTHING ABOVE ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 42$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V3.13 BEQL 32$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; NOW CHECK TO SEE THAT IT IS ONLY FLOW THROUGH ;V3.13 32$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.13 BEQL 33$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; THE TWO ELEMENTS CAN BE EXCHANGED ;V3.13 33$: ;V3.13 ; EXCHANGE X,Y VALUES ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_X(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_X(R10) ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_Y(R10) ;V3.13 ; ADJUST POINTERS TO SURROUNDING UNMOVED PIXELS ;V3.13 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R2 ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V3.13 BEQL 44$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R2) ;V3.13 44$: MOVL R1,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V3.13 BEQL 43$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R1) ;V3.13 43$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R2 ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R1 ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V3.13 BEQL 45$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_DOWN_POINTER(R2) ;V3.13 45$: MOVL R1,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V3.13 BEQL 46$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R1) ;V3.13 46$: TSTL R1 ;V3.13 BEQL 47$ ;V3.13 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R1),R1 ;V3.13 47$: TSTL R2 ;V3.13 BEQL 48$ ;V3.13 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R2),R2 ;V3.13 48$: MOVL R2,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V3.13 BEQL 49$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R2) ;V3.13 49$: MOVL R1,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V3.13 BEQL 50$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R1) ;V3.13 50$: BRW PHASE_3_A_ACTION_1 ;AND SEE IF IT CAN BE DONE AGAIN ;V3.13 .SUBTITLE SIMPLE GOTO ;V3.13 PHASE_3_A_ACTION_13: ;V3.13 ; SEE IF GO IS ENTERED FROM ABOVE ONLY ;V3.13 BITL #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BEQL 4$ ;V3.13 ; NO MATCH-TREAT AS ORDINARY ACTION AND SEE WHAT CAN BE DONE ;V3.13 BRW PHASE_3_A_ACTION_1 ;V3.13 ; ELEMENT TO RIGHT MUST BE FLOW CONNECTOR ;V3.13 4$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;V3.13 BNEQ 1$ ;V3.13 BRW PHASE_3_A_ACTION_1 ;V3.13 1$: CMPW #CHART_ACTION_M_FLOW_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V3.13 BEQL 2$ ;V3.13 BRW PHASE_3_A_ACTION_1 ;V3.13 ; WE HAVE A SIMPLE GOTO TO A FLOW CONNECTOR-SEE IF IT CAN BE MOVED UP ;V3.13 2$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R1 ;V3.13 BNEQ 3$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 3$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R2 ;V3.13 ; CHECK TO SEE THAT ONLY CONNECTORS ARE ABOVE BOTH ELEMENTS ;V3.13 CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R1) ;V3.13 BEQL 5$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 5$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R2) ;V3.13 BEQL 6$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; CONNECTOR ABOVE GOTO CAN ONLY HAVE VERTICAL ELEMENTS GOING DOWN ;V3.13 6$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R1) ;V3.13 BEQL 7$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; CONNECTOR ABOVE FLOW CONNECTOR CAN HAVE NO ACTIVE ELEMENTS ;V3.13 7$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R2) ;V3.13 BEQL 8$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; THIS PAIR OF PIXELS CAN BE MOVED UP ONE LEVEL ;V3.13 ; FIRST SWAP THE X-Y VALUES ;V3.13 8$: MOVL PROGRAM_ELEMENT_L_X(R10),R3 ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R1),PROGRAM_ELEMENT_L_X(R10) ;V3.13 MOVL R3,PROGRAM_ELEMENT_L_X(R1) ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R10),R3 ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R1),PROGRAM_ELEMENT_L_Y(R10) ;V3.13 MOVL R3,PROGRAM_ELEMENT_L_Y(R1) ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R0),R3 ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R2),PROGRAM_ELEMENT_L_X(R0) ;V3.13 MOVL R3,PROGRAM_ELEMENT_L_X(R2) ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R0),R3 ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R2),PROGRAM_ELEMENT_L_Y(R0) ;V3.13 MOVL R3,PROGRAM_ELEMENT_L_Y(R2) ;V3.13 ; THEN RESET THE CONNECTING POINTERS ;V3.13 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R1),R3 ;V3.13 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R2),R4 ;V3.13 MOVL R3,PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V3.13 BEQL 9$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_DOWN_POINTER(R3) ;V3.13 9$: MOVL R4,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V3.13 BEQL 10$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R4) ;V3.13 10$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R3),R3 ;V3.13 BEQL 11$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R3),R3 ;V3.13 11$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R4),R4 ;V3.13 BEQL 12$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R4),R4 ;V3.13 12$: MOVL R3,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V3.13 BEQL 13$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R3) ;V3.13 13$: MOVL R4,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V3.13 BEQL 14$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R4) ;V3.13 14$: TSTL R3 ;V3.13 BEQL 15$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R3),R3 ;V3.13 15$: TSTL R4 ;V3.13 BEQL 16$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R4),R4 ;V3.13 16$: MOVL R3,PROGRAM_ELEMENT_L_LEFT_POINTER(R1) ;V3.13 BEQL 17$ ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_RIGHT_POINTER(R3) ;V3.13 17$: MOVL R4,PROGRAM_ELEMENT_L_RIGHT_POINTER(R2) ;V3.13 BEQL 18$ ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_LEFT_POINTER(R4) ;V3.13 18$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R3 ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R4 ;V3.13 MOVL R3,PROGRAM_ELEMENT_L_DOWN_POINTER(R1) ;V3.13 BEQL 19$ ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_UP_POINTER(R3) ;V3.13 19$: MOVL R4,PROGRAM_ELEMENT_L_DOWN_POINTER(R2) ;V3.13 BEQL 20$ ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_UP_POINTER(R4) ;V3.13 20$: MOVL R1,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R1) ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R2) ;V3.13 ; CLEAN OUT THE UP/DOWN LINES FROM CONNECTOR ;V3.13 BICL2 #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R1) ;V3.13 BRW PHASE_3_A_ACTION_13 ;AND SEE IF IT CAN BE DONE AGAIN ;V3.13 .PAGE ;V3.13 .SUBTITLE CHECK ON LONE END ;V3.13 PHASE_3_A_ACTION_20: ;CHECK FOR DELETE OF END ;V3.13 BITL #,-;V2.02 PROGRAM_ELEMENT_L_FLAG(R10) ;V2.02 BEQL 8$ ;V3.13 ; CAN-NOT DELETE-SEE IF IT CAN BE MOVED UP ;V3.13 BRW PHASE_3_A_ACTION_17 ;V3.13 8$: MOVL #PROGRAM_LENGTH_ACTION_0,ALLOCATE_1 ;V3.13 CALLG ALLOCATE_ARG,ALLOCATE ;V2.04 INCL F_C_P_E ;V2.04 MOVL R0,R6 ;V2.04 INSQUE (R6),@PROGRAM_QUEUE+4 ;V2.04 MOVW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R6) ;V2.04 MOVL ALLOCATE_1,PROGRAM_ELEMENT_L_LENGTH(R6) ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R0 ;V2.04 BEQL 3$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V2.04 3$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R0 ;V2.04 BEQL 4$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V2.04 4$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R0 ;V2.04 BEQL 5$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V2.04 5$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R0 ;V2.04 BEQL 6$ ;V2.04 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R6) ;V2.04 MOVL R6,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V2.04 6$: MOVL PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_X(R6) ;V2.04 MOVL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R6) ;V2.04 MOVL PROGRAM_ELEMENT_L_LENGTH(R10),FREE_1 ;V2.04 MOVL 4(R10),R9 ;V3.13 REMQUE (R10),R0 ;V2.04 MOVL R10,FREE_2 ;V2.04 CALLG FREE_ARG,FREE ;V2.04 MOVL R9,R10 ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 .PAGE ;V3.13 .SUBTITLE ELEMENTS THAT END A FLOW LINE ;V3.13 PHASE_3_A_ACTION_17: ;V3.13 PHASE_3_A_ACTION_18: ;V3.13 PHASE_3_A_ACTION_25: ;V3.13 ; FIRST CHECK TO SEE THAT NO HORIZONTAL CONNECTORS EXIST IN THIS PIXEL ;V3.13 BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BEQL 1$ ;V3.13 BRW 30$ ;V3.13 1$: BITL #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BNEQ 11$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; CHECK TO SEE IF PIXEL JUST ABOVE IS A CONNECTOR AND ONLY A FLOW ;V3.13 ; THROUGH-TO WHICH THIS ELEMENT CAN BE MOVED ;V3.13 11$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R0 ;V3.13 BNEQ 12$ ;NOTHING ABOVE ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 12$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V3.13 BEQL 2$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; NOW CHECK TO SEE THAT IT IS ONLY FLOW THROUGH ;V3.13 2$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.13 BEQL 3$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; THE TWO ELEMENTS CAN BE EXCHANGED ;V3.13 3$: ;V3.13 ; EXCHANGE X,Y VALUES ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_X(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_X(R10) ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_Y(R10) ;V3.13 ; ADJUST POINTERS TO SURROUNDING UNMOVED PIXELS ;V3.13 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R2 ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V3.13 BEQL 14$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R2) ;V3.13 14$: MOVL R1,PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V3.13 BEQL 13$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_DOWN_POINTER(R1) ;V3.13 13$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R0),R2 ;V3.13 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R1 ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V3.13 BEQL 15$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R1) ;V3.13 15$: MOVL R2,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V3.13 BEQL 16$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R2) ;V3.13 16$: TSTL R1 ;V3.13 BEQL 17$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R1),R1 ;V3.13 17$: TSTL R2 ;V3.13 BEQL 18$ ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R2),R2 ;V3.13 18$: MOVL R1,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V3.13 BEQL 19$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R1) ;V3.13 19$: MOVL R2,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V3.13 BEQL 20$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R2) ;V3.13 20$: BICL2 #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.13 BRW PHASE_3_A_ACTION_17 ;AND SEE IF IT CAN BE DONE AGAIN ;V3.13 ; NEXT CHECK TO SEE THAT NO VERTICAL CONNECTORS EXIST IN THIS PIXEL ;V3.13 ; AND NO HORIZ CONN OTHER THAN THE CENTER HORZ LINE ;V3.13 30$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BEQL 31$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 31$: BITL #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R10) ;V3.13 BNEQ 41$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; CHECK TO SEE IF PIXEL JUST RIGHT OF A CONNECTOR AND ONLY A FLOW ;V3.13 ; THROUGH-TO WHICH THIS ELEMENT CAN BE MOVED ;V3.13 41$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R0 ;V3.13 BNEQ 42$ ;NOTHING ABOVE ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 42$: CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R0) ;V3.13 BEQL 32$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; NOW CHECK TO SEE THAT IT IS ONLY FLOW THROUGH ;V3.13 32$: BITL #,-;V3.13 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.13 BEQL 33$ ;V3.13 BRW PHASE_3_A_LOOP_BACK ;V3.13 ; THE TWO ELEMENTS CAN BE EXCHANGED ;V3.13 33$: ;V3.13 ; EXCHANGE X,Y VALUES ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_X(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_X(R10) ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_Y(R10),PROGRAM_ELEMENT_L_Y(R0) ;V3.13 MOVL R1,PROGRAM_ELEMENT_L_Y(R10) ;V3.13 ; ADJUST POINTERS TO SURROUNDING UNMOVED PIXELS ;V3.13 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R0),R1 ;V3.13 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R2 ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_RIGHT_POINTER(R10) ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_LEFT_POINTER(R0) ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_RIGHT_POINTER(R0) ;V3.13 BEQL 44$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_LEFT_POINTER(R2) ;V3.13 44$: MOVL R1,PROGRAM_ELEMENT_L_LEFT_POINTER(R10) ;V3.13 BEQL 43$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_RIGHT_POINTER(R1) ;V3.13 43$: MOVL PROGRAM_ELEMENT_L_UP_POINTER(R0),R2 ;V3.13 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R0),R1 ;V3.13 MOVL R2,PROGRAM_ELEMENT_L_UP_POINTER(R10) ;V3.13 BEQL 45$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_DOWN_POINTER(R2) ;V3.13 45$: MOVL R1,PROGRAM_ELEMENT_L_DOWN_POINTER(R10) ;V3.13 BEQL 46$ ;V3.13 MOVL R10,PROGRAM_ELEMENT_L_UP_POINTER(R1) ;V3.13 46$: TSTL R1 ;V3.13 BEQL 47$ ;V3.13 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R1),R1 ;V3.13 47$: TSTL R2 ;V3.13 BEQL 48$ ;V3.13 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R2),R2 ;V3.13 48$: MOVL R2,PROGRAM_ELEMENT_L_UP_POINTER(R0) ;V3.13 BEQL 49$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_DOWN_POINTER(R2) ;V3.13 49$: MOVL R1,PROGRAM_ELEMENT_L_DOWN_POINTER(R0) ;V3.13 BEQL 50$ ;V3.13 MOVL R0,PROGRAM_ELEMENT_L_UP_POINTER(R1) ;V3.13 50$: BICL2 #,- ;V3.13 PROGRAM_ELEMENT_L_FLAG(R0) ;V3.13 BRW PHASE_3_A_ACTION_17 ;AND SEE IF IT CAN BE DONE AGAIN ;V3.13 .PAGE ;V3.13 PHASE_3_B: ;V3.13 CALLG NULL,SQUEEZE_PIXEL_MATRIX ;V3.13 BRW OUTPUT_FLOW_CHART ;V2.02 .PAGE .SUBTITLE OUTPUT FLOW CHART OUTPUT_FLOW_CHART: PUSHAL TIME_CHART PUSHAL CODE_1 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART+8 PUSHAL CODE_2 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART+12 PUSHAL CODE_3 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART+16 PUSHAL CODE_4 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART+20 PUSHAL CODE_5 CALLS #2,G^LIB$STAT_TIMER CALLG NULL,G^LIB$INIT_TIMER CALLG NULL,DRAW_FLOW_CHART ;V3.11 BRW CLEAN_UP ;V3.11 .ENTRY DRAW_FLOW_CHART,^M ;V3.11 CLRL LINES_ON_PAGE MOVL PROGRAM_QUEUE,R11 ;GET START OF PIXEL QUEUE 2$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R10 ;SLIDE TO LEFT TO UPPER LEFT CORNER OF PICTURE BEQL 3$ MOVL R10,R11 BRB 2$ 3$: MOVL R11,CURRENT_CORNER MOVL R11,OFFSET_CORNER ; ; THE SET OF PAGES/PICTURES GENERATED STARTS IN THE UPPER ; LEFT HAND CORNER AND SCANS DOWN-GENERATEING ONE ;V2.02 ; PAGE AT A TIME- ;V2.02 ; AS A SCAN DOWN COMPLETES-A NEW CAN IS STARTED ONE ;V2.02 ; INCREMENT ACCROSS. SCANS ACCROSS AND DOWN TERMINATE UPON ;V2.02 ; RUNNING OUT OF PIXELS ; 10$: CLRL LINES_ON_PAGE ;MAKE SURE OUTPUT IS TO A NEW PAGE MOVC5 #0,NULL,#^A/ /,#,PIXEL_LINES 20$: ;DRAW THE PAGE WHO'S UPPER LEFT CORNER IS THE PIXEL POINTED ;TO BY OFFSET CORNER MOVL OFFSET_CORNER,R11 MOVL R11,R10 MOVL DRAW_ACCROSS,R9 MOVL DRAW_DOWN,R8 ; REGISTER USEAGE ; R11 POINTS TO LEFT MOST PIXEL OF CURRENT ROW ; R10 POINTS TO CURRENT PIXEL ; R9 COUNTER FOR PIXELS ACCROSS PAGE ; R8 COUNTER FOR ROWS DOWN PAGE ; R7 OFFSET INTO PIXEL_LINES 894$: CLRL R7 897$: CALLG NULL,DRAW_PIXEL BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1897$ ;V3.23 ADDL2 #PIXEL_WIDTH,R7 BRB 2897$ ;V3.23 1897$: ADDL2 #S_PIXEL_WIDTH,R7 ;V3.23 2897$: ;V3.23 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 BEQL 898$ SOBGTR R9,897$ 898$: MOVL #132,DESCRIPTER BITL #NARROW_FLAG,FLAG_WORD BEQL 899$ MOVL #80,DESCRIPTER 899$: MOVAL PIXEL_LINES,DESCRIPTER+4 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1899$ ;V3.23 MOVL #PIXEL_DEPTH,R5 ;V3.23 BRB 2899$ ;V3.23 1899$: MOVL #S_PIXEL_DEPTH,R5 ;V3.23 2899$: PUSHAL DESCRIPTER ;V3.23 CALLS #1,PRINT_LINE ADDL2 #132,DESCRIPTER+4 DECL R5 ;V3.23 BGTR 2899$ ;V3.23 MOVC5 #0,NULL,#^A/ /,#,PIXEL_LINES MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 BEQL 900$ MOVL R11,R10 MOVL DRAW_ACCROSS,R9 DECL R8 BLEQ 900$ BRW 894$ 900$: MOVL OFFSET_CORNER,R10 ;SET UP TO SCANN NEXT PAGE DOWN ;V2.02 MOVL DRAW_DOWN,R9 ;V2.02 901$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10 ;V2.02 BEQL 902$ ;NOTHING MORE BELOW ;V2.02 SOBGTR R9,901$ ;V2.02 MOVL R10,OFFSET_CORNER BRW 10$ ;SCAN NEXT PAGE DOWN ;V2.02 902$: ;OK SCAN DOWN DONE-GO ACCROSS ONE PAGE AND DO NEXT SET ;V2.02 MOVL CURRENT_CORNER,R10 MOVL DRAW_ACCROSS,R9 ;V2.02 903$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 ;V2.02 BEQL 904$ ;LOOKS LIKE WERE DONE SOBGTR R9,903$ MOVL R10,CURRENT_CORNER MOVL R10,OFFSET_CORNER BRW 10$ 904$: ;PICTURE IS COMPLETED-CLEAN UP AND EXIT RET ;V3.11 .PAGE .SUBTITLE DRAW_PIXEL .ENTRY DRAW_PIXEL,^M ; INPUTS ; R10 CURRENT PIXEL BEING DRAWN ; R7 OFFSET INTO PIXEL_LINES TO DRAW THAT PIXEL ; ADD THE COMMON ITEMS-TOP LEFT/RIGHT(_OUT) AND LOOP BACKS,LABEL NUMBER MOVL PROGRAM_ELEMENT_L_LABEL(R10),R4 ;GET PTR TO LABEL ELEMENT BEQL 5$ ;NO LABEL-SKIP NEXT BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 5$ ;V3.23 MOVL #5,DESCRIPTER MOVAL L^PIXEL_LINES+132+1(R7),L^DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHL #0 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R4) CALLS #5,G^OTS$CVT_L_TI 5$: .MACRO ADD_ELEMENT FLAG,ELEMENT,?A,?B,?C BITL #,- PROGRAM_ELEMENT_L_FLAG(R10) BEQL A BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ B ;V3.23 MOVAL ELEMENT,R6 BRB C ;V3.23 B: MOVAL S_'ELEMENT',R6 ;V3.23 C: ;V3.23 CALLG NULL,OVERLAY_ELEMENT A: .ENDM ADD_ELEMENT PROGRAM_FLAG_M_TOP_LEFT,PIXEL_TOP_LEFT ADD_ELEMENT PROGRAM_FLAG_M_TOP_LEFT_OUT,PIXEL_TOP_LEFT_OUT ADD_ELEMENT PROGRAM_FLAG_M_TOP_RIGHT,PIXEL_TOP_RIGHT ADD_ELEMENT PROGRAM_FLAG_M_TOP_RIGHT_OUT,PIXEL_TOP_RIGHT_OUT ADD_ELEMENT PROGRAM_FLAG_M_LEFT_LOOP_BACK,PIXEL_LEFT_LOOP_BACK ADD_ELEMENT PROGRAM_FLAG_M_RIGHT_LOOP_BACK,PIXEL_RIGHT_LOOP_BACK ADD_ELEMENT PROGRAM_FLAG_M_BOTTOM_LEFT,PIXEL_BOTTOM_LEFT ADD_ELEMENT PROGRAM_FLAG_M_BOTTOM_LEFT_OUT,PIXEL_BOTTOM_LEFT_OUT ADD_ELEMENT PROGRAM_FLAG_M_BOTTOM_RIGHT,PIXEL_BOTTOM_RIGHT ADD_ELEMENT PROGRAM_FLAG_M_BOTTOM_RIGHT_OUT,PIXEL_BOTTOM_RIGHT_OUT ;OUTSIDE CONNECTORS DEPEND ON IF PIXEL IS CONNECTOR OR NOT CMPW #CHART_ACTION_M_CONNECTOR,PROGRAM_ELEMENT_W_ACTION(R10) BNEQ 1001$ BRW 2$ ; ELEMENT IS PICTORIAL NOT CONNECTOR-ADD EDGE LINES 1001$: ADD_ELEMENT PROGRAM_FLAG_M_LEFT,PIXEL_LEFT ADD_ELEMENT PROGRAM_FLAG_M_LEFT_OUT,PIXEL_LEFT_OUT ADD_ELEMENT PROGRAM_FLAG_M_RIGHT,PIXEL_RIGHT ADD_ELEMENT PROGRAM_FLAG_M_RIGHT_OUT,PIXEL_RIGHT_OUT ADD_ELEMENT PROGRAM_FLAG_M_UP,PIXEL_UP ADD_ELEMENT PROGRAM_FLAG_M_UP_OUT,PIXEL_UP_OUT ADD_ELEMENT PROGRAM_FLAG_M_DOWN,PIXEL_DOWN ADD_ELEMENT PROGRAM_FLAG_M_DOWN_OUT,PIXEL_DOWN_OUT BRW 3$ ; ELEMENT IS CONNECTOR 2$: ADD_ELEMENT PROGRAM_FLAG_M_LEFT,PIXEL_FULL_LEFT ADD_ELEMENT PROGRAM_FLAG_M_LEFT_OUT,PIXEL_FULL_LEFT_OUT ADD_ELEMENT PROGRAM_FLAG_M_RIGHT,PIXEL_FULL_RIGHT ADD_ELEMENT PROGRAM_FLAG_M_RIGHT_OUT,PIXEL_FULL_RIGHT_OUT ADD_ELEMENT PROGRAM_FLAG_M_UP,PIXEL_FULL_UP ADD_ELEMENT PROGRAM_FLAG_M_UP_OUT,PIXEL_FULL_UP_OUT ADD_ELEMENT PROGRAM_FLAG_M_DOWN,PIXEL_FULL_DOWN ADD_ELEMENT PROGRAM_FLAG_M_DOWN_OUT,PIXEL_FULL_DOWN_OUT ADD_ELEMENT PROGRAM_FLAG_M_JUNCTION,PIXEL_JUNCTION ADD_ELEMENT PROGRAM_FLAG_M_IO_END,PIXEL_IO_END ;V2.01 ADD_ELEMENT PROGRAM_FLAG_M_IO_ERR,PIXEL_IO_ERR ;V2.01 ADD_ELEMENT PROGRAM_FLAG_M_IF_LT,PIXEL_IF_LT ;V2.01 ADD_ELEMENT PROGRAM_FLAG_M_IF_EQ,PIXEL_IF_EQ ;V2.01 ADD_ELEMENT PROGRAM_FLAG_M_IF_GT,PIXEL_IF_GT ;V2.01 3$: ADD_ELEMENT PROGRAM_FLAG_M_TOP_JUNCTION,PIXEL_TOP_JUNCTION ADD_ELEMENT PROGRAM_FLAG_M_BOTTOM_JUNCTION,PIXEL_BOTTOM_JUNCTION CASEW PROGRAM_ELEMENT_W_ACTION(R10),#0,#25 4$: .WORD DRAW_CONNECTOR-4$ ;* .WORD DRAW_NON_EXE-4$ ;* .WORD DRAW_IO-4$ ;* .WORD DRAW_CONTINUE-4$ ;* .WORD DRAW_LOGICAL_IF-4$ ;* .WORD DRAW_ARITH_IF-4$ ;* .WORD DRAW_IF_THEN-4$ ;* .WORD DRAW_ELSE_IF-4$ ;* .WORD DRAW_ELSE-4$ ;* .WORD DRAW_END_IF-4$ ;* .WORD DRAW_DO-4$ ;* .WORD DRAW_DO_WHILE-4$ ;* .WORD DRAW_END_DO-4$ ;* .WORD DRAW_GO_TO-4$ ;* .WORD DRAW_ASSIGN_GO_TO-4$ ;* .WORD DRAW_COMPUTE_GO_TO-4$ ;* .WORD DRAW_ASSIGN-4$ ;* .WORD DRAW_STOP-4$ ;* .WORD DRAW_RETURN-4$ ;* .WORD DRAW_EXE-4$ ;* .WORD DRAW_END-4$ ;* .WORD DRAW_START-4$ ;* .WORD DRAW_ENTRY-4$ ;* .WORD DRAW_PAUSE-4$ ;* .WORD DRAW_CALL-4$ ;* .WORD DRAW_FLOW_CONNECTOR-4$ ;* ;V2.06 .PAGE .SUBTITLE DRAW_CONNECTOR-NO FURTHER ACTION DRAW_CONNECTOR: BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BEQL 1000$ ;V3.23 BRW 3$ ;V3.23 1000$: ;V3.23 MOVL PROGRAM_ELEMENT_L_TOP_LEFT(R10),R4 ;V2.01 BEQL 1$ ;V2.01 MOVL #5,DESCRIPTER ;V2.01 MOVAL L^PIXEL_LINES+132+1(R7),L^DESCRIPTER+4 ;V2.01 PUSHL #0 ;V2.01 PUSHL #4 ;V2.01 PUSHL #0 ;V2.01 PUSHAL DESCRIPTER ;V2.01 PUSHAL LABEL_ELEMENT_L_LABEL(R4) ;V2.01 CALLS #5,G^OTS$CVT_L_TI ;V2.01 1$: ;V2.01 MOVL PROGRAM_ELEMENT_L_UP_LABEL(R10),R4 ;V2.01 BEQL 2$ ;V2.01 MOVL #5,DESCRIPTER ;V2.01 MOVAL L^PIXEL_LINES+132+7(R7),L^DESCRIPTER+4 ;V2.01 PUSHL #0 ;V2.01 PUSHL #4 ;V2.01 PUSHL #0 ;V2.01 PUSHAL DESCRIPTER ;V2.01 PUSHAL LABEL_ELEMENT_L_LABEL(R4) ;V2.01 CALLS #5,G^OTS$CVT_L_TI ;V2.01 2$: ;V2.01 MOVL PROGRAM_ELEMENT_L_DOWN_LABEL(R10),R4 ;V2.01 BEQL 3$ ;V2.01 MOVL #5,DESCRIPTER ;V2.01 MOVAL L^PIXEL_LINES+<7*132>+7(R7),L^DESCRIPTER+4 ;V2.02 PUSHL #0 ;V2.01 PUSHL #4 ;V2.01 PUSHL #0 ;V2.01 PUSHAL DESCRIPTER ;V2.01 PUSHAL LABEL_ELEMENT_L_LABEL(R4) ;V2.01 CALLS #5,G^OTS$CVT_L_TI ;V2.01 3$: ;V2.01 RET .PAGE .SUBTITLE DRAW A BOX-NON_EXE,EXE ;V2.01 DRAW_NON_EXE: ;V2.01 DRAW_EXE: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1$ ;V3.23 MOVL #PIXEL_BOX,R6 ;V2.01 BRB 2$ ;V3.23 1$: MOVL #S_PIXEL_BOX,R6 ;V3.23 2$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 RET ;V2.01 .PAGE ;V2.01 .SUBTITLE DRAW CONTINUE ;V2.01 DRAW_CONTINUE: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1$ ;V3.23 MOVL #PIXEL_CONTINUE,R6 ;V2.01 BRB 2$ ;V3.23 1$: MOVL #S_PIXEL_CONTINUE,R6 ;V3.23 2$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 RET ;V2.01 .PAGE ;V2.01 .SUBTITLE DRAW DO/DO WHILE ;V2.01 DRAW_DO: ;V2.01 DRAW_DO_WHILE: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 3$ ;V3.23 MOVL #PIXEL_DO,R6 ;V2.01 BRB 4$ ;V3.23 3$: MOVL #S_PIXEL_DO,R6 ;V3.23 4$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVL PROGRAM_ELEMENT_L_LOOP_LABEL(R10),R4 ;V2.01 BEQL 1$ ;V2.01 MOVL #5,DESCRIPTER ;V2.01 MOVAL L^PIXEL_LINES+<3*132>+5(R7),L^DESCRIPTER+4 ;V2.01 PUSHL #0 ;V2.01 PUSHL #4 ;V2.01 PUSHL #0 ;V2.01 PUSHAL DESCRIPTER ;V2.01 PUSHAL LABEL_ELEMENT_L_LABEL(R4) ;V2.01 CALLS #5,G^OTS$CVT_L_TI ;V2.01 1$: CVTBL PROGRAM_ELEMENT_S_TEXT(R10),R8 ;V2.01 BEQL 2$ ;V2.01 MOVAL PROGRAM_ELEMENT_S_TEXT+1(R10),R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) ;V2.01 SUBL2 #7,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #7,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<5*132>+3(R7) ;V2.01 2$: RET ;V2.01 .PAGE .SUBTITLE DRAW I/O-I/O STATEMENT DRAW_IO: BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1$ ;V3.23 MOVL #PIXEL_IO,R6 BRB 2$ ;V3.23 1$: MOVL #S_PIXEL_IO,R6 ;V3.23 2$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 RET .PAGE ;V2.01 .SUBTITLE DRAW LOGICAL IF ;V2.01 DRAW_LOGICAL_IF: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1$ ;V3.23 MOVL #PIXEL_IF_LOGICAL,R6 ;V2.01 BRB 3$ ;V3.23 1$: MOVL #S_PIXEL_IF_LOGICAL,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 CVTBL PROGRAM_ELEMENT_S_TEXT(R10),R8 ;V2.01 BEQL 2$ ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVAL PROGRAM_ELEMENT_S_TEXT+1(R10),R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#3,L^PIXEL_LINES+<3*132>+5(R7) ;V2.01 SUBL2 #3,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #3,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) ;V2.01 SUBL2 #7,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #7,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#3,L^PIXEL_LINES+<5*132>+5(R7) ;V2.01 2$: RET ;V2.01 .PAGE ;V2.01 .SUBTITLE DRAW ARITHMETIC IF ;V2.01 DRAW_ARITH_IF: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1$ ;V3.23 MOVL #PIXEL_IF,R6 ;V2.01 BRB 3$ ;V3.23 1$: MOVL #S_PIXEL_IF,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 CVTBL PROGRAM_ELEMENT_S_TEXT(R10),R8 ;V2.01 BEQL 2$ ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVAL PROGRAM_ELEMENT_S_TEXT+1(R10),R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#3,L^PIXEL_LINES+<3*132>+5(R7) ;V2.01 SUBL2 #3,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #3,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) ;V2.01 SUBL2 #7,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #7,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#3,L^PIXEL_LINES+<5*132>+5(R7) ;V2.01 2$: RET ;V2.01 .PAGE ;V2.01 .SUBTITLE DRAW IF THEN AND ELSEIF THEN ;V2.01 DRAW_IF_THEN: ;V2.01 DRAW_ELSE_IF: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1$ ;V3.23 MOVL #PIXEL_IF_THEN,R6 ;V2.01 BRB 3$ ;V3.23 1$: MOVL #S_PIXEL_IF_THEN,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 CVTBL PROGRAM_ELEMENT_S_TEXT(R10),R8 ;V2.01 BEQL 2$ ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVAL PROGRAM_ELEMENT_S_TEXT+1(R10),R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#3,L^PIXEL_LINES+<3*132>+5(R7) ;V2.01 SUBL2 #3,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #3,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) ;V2.01 SUBL2 #7,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #7,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#3,L^PIXEL_LINES+<5*132>+5(R7) ;V2.01 2$: RET ;V2.01 .PAGE .SUBTITLE DRAW CONNECTOR TYPES-ELSE,ENDIF,ENDDO DRAW_ELSE: DRAW_END_IF: DRAW_END_DO: ADD_ELEMENT ,- PIXEL_FILL_DOWN ADD_ELEMENT ,- PIXEL_FILL_UP ADD_ELEMENT ,- PIXEL_FILL_LEFT ADD_ELEMENT ,- PIXEL_FILL_RIGHT ADD_ELEMENT PROGRAM_FLAG_M_JUNCTION,PIXEL_JUNCTION RET .PAGE .SUBTITLE SIMPLE GOTO ;V2.01 DRAW_GO_TO: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVL #PIXEL_GOTO,R6 ;V2.01 BRB 3$ ;V3.23 2$: MOVL #S_PIXEL_GOTO,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 MOVL PROGRAM_ELEMENT_L_DEST_LABEL(R10),R4 ;V2.01 BEQL 1$ ;V3.12 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 1$ ;V3.23 MOVL #5,DESCRIPTER ;V2.01 MOVAL L^PIXEL_LINES+<4*132>+3(R7),L^DESCRIPTER+4 ;V2.01 PUSHL #0 ;V2.01 PUSHL #4 ;V2.01 PUSHL #0 ;V2.01 PUSHAL DESCRIPTER ;V2.01 PUSHAL LABEL_ELEMENT_L_LABEL(R4) ;V2.01 CALLS #5,G^OTS$CVT_L_TI ;V2.01 1$: RET ;V3.12 .PAGE ;V2.01 .SUBTITLE COMPUTED GOTO ;V2.01 DRAW_COMPUTE_GO_TO: BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVL #PIXEL_GOTO,R6 ;V2.01 BRB 3$ ;V3.23 2$: MOVL #S_PIXEL_GOTO,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 RET ;V2.01 .PAGE ;V2.01 .SUBTITLE ASSIGNED GOTO ;V2.02 DRAW_ASSIGN_GO_TO: BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_GOTO,R6 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_GOTO,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 ; THIS ASSIGNED GOTO CODE IS DEPENDENT ON THE FORMAT AND SIZE OF THE ; CURRENT PIXEL DEFINITION 1$: MOVL PROGRAM_ELEMENT_L_VAR_POINTER(R10),R9 CVTBL VARIABLE_ELEMENT_S_NAME(R9),R8 MOVAL VARIABLE_ELEMENT_S_NAME+1(R9),R6 ; GET MAX NO OF CHRS TO INSERT CMPL #19,R8 BGEQ 11$ MOVL #19,R8 11$: MOVC5 R8,(R6),#^A/ /,#6,L^PIXEL_LINES+<3*132>+3(R7) SUBL2 #6,R8 BLEQ 2$ ADDL2 #6,R6 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) SUBL2 #7,R8 BLEQ 2$ ADDL2 #7,R6 MOVC5 R8,(R6),#^A/ /,#6,L^PIXEL_LINES+<5*132>+3(R7) 2$: RET .PAGE .SUBTITLE DRAW ASSIGN LABEL TO VAR DRAW_ASSIGN: ; THIS CODE IS DEPENDENT ON THE CURRENTLY DEFINED ASSIGN FORMAT AND SIZE ; BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_ASSIGN,R6 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_ASSIGN,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 ; INSERT THE LABEL ASSIGNED MOVL PROGRAM_ELEMENT_L_LABEL_POINTER(R10),R4 MOVL #5,DESCRIPTER MOVAL L^PIXEL_LINES+<3*132>+4(R7),L^DESCRIPTER+4 PUSHL #0 PUSHL #4 PUSHL #0 PUSHAL DESCRIPTER PUSHAL LABEL_ELEMENT_L_LABEL(R4) CALLS #5,G^OTS$CVT_L_TI ; INSERT AS MUCH OF THE VAR NAME ASSIGNED TO AS POSSABLE MOVL PROGRAM_ELEMENT_L_VAR_POINTER(R10),R9 CVTBL VARIABLE_ELEMENT_S_NAME(R9),R8 MOVAL VARIABLE_ELEMENT_S_NAME+1(R9),R6 ; GET MAX NO OF CHRS TO INSERT CMPL #12,R8 BGEQ 1$ MOVL #12,R8 1$: MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) SUBL2 #7,R8 BLEQ 2$ ADDL2 #7,R6 MOVC5 R8,(R6),#^A/ /,#5,L^PIXEL_LINES+<5*132>+4(R7) 2$: RET .PAGE ;V2.01 .SUBTITLE STOP ;V2.01 DRAW_STOP: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_STOP,R6 ;V2.01 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_STOP,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 CVTBL PROGRAM_ELEMENT_S_TEXT(R10),R8 ;V2.01 BEQL 2$ ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVAL PROGRAM_ELEMENT_S_TEXT+1(R10),R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) ;V2.01 SUBL2 #7,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #7,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<5*132>+3(R7) ;V2.01 2$: RET ;V2.01 .PAGE ;V2.01 .SUBTITLE RETURN ;V2.01 DRAW_RETURN: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_RETURN,R6 ;V2.01 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_RETURN,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 CVTBL PROGRAM_ELEMENT_S_TEXT(R10),R8 ;V2.01 BEQL 2$ ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVAL PROGRAM_ELEMENT_S_TEXT+1(R10),R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) ;V2.01 SUBL2 #7,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #7,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<5*132>+3(R7) ;V2.01 2$: RET ;V2.01 .PAGE ;V2.01 .SUBTITLE PAUSE ;V2.01 DRAW_PAUSE: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_PAUSE,R6 ;V2.01 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_PAUSE,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 CVTBL PROGRAM_ELEMENT_S_TEXT(R10),R8 ;V2.01 BEQL 2$ ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVAL PROGRAM_ELEMENT_S_TEXT+1(R10),R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) ;V2.01 SUBL2 #7,R8 ;V2.01 BLEQ 2$ ;V2.01 ADDL2 #7,R6 ;V2.01 MOVC5 R8,(R6),#^A/ /,#7,L^PIXEL_LINES+<5*132>+3(R7) ;V2.01 2$: RET ;V2.01 .PAGE ;V2.01 .SUBTITLE END ;V2.01 DRAW_END: ;V2.01 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_END,R6 ;V2.01 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_END,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 RET ;V2.01 .PAGE .SUBTITLE ENTRY POINTS START/ENTRY DRAW_START: DRAW_ENTRY: BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_ENTRY,R6 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_ENTRY,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 ; THE FOLLOWING CODE IS DEPENDENT ON THE CURRENT PIXEL SIZE AND CONFIGURATION CVTBL PROGRAM_ELEMENT_S_NAME(R10),R9 MOVAL PROGRAM_ELEMENT_S_NAME+1(R10),R8 CMPL #17,R9 BGEQ 1$ MOVL #17,R9 1$: MOVC5 R9,(R8),#^A/ /,#5,L^PIXEL_LINES+<3*132>+4(R7) SUBL2 #5,R9 BLEQ 2$ ADDL2 #5,R8 MOVC5 R9,(R8),#^A/ /,#7,L^PIXEL_LINES+<4*132>+3(R7) SUBL2 #7,R9 BLEQ 2$ ADDL2 #7,R8 MOVC5 R9,(R8),#^A/ /,#5,L^PIXEL_LINES+<5*132>+4(R7) 2$: RET .PAGE .SUBTITLE SUBROUTINE CALL DRAW_CALL: BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_CALL,R6 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_CALL,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 ; THE FOLLOWING CODE IS DEPENDENT ON THE CURRENT PIXEL SIZE AND CONFIGURATION CVTBL PROGRAM_ELEMENT_S_NAME(R10),R9 MOVAL PROGRAM_ELEMENT_S_NAME+1(R10),R8 CMPL #15,R9 BGEQ 1$ MOVL #15,R9 1$: MOVC5 R9,(R8),#^A/ /,#5,L^PIXEL_LINES+<3*132>+4(R7) SUBL2 #5,R9 BLEQ 2$ ADDL2 #5,R8 MOVC5 R9,(R8),#^A/ /,#5,L^PIXEL_LINES+<4*132>+4(R7) SUBL2 #5,R9 BLEQ 2$ ADDL2 #5,R8 MOVC5 R9,(R8),#^A/ /,#5,L^PIXEL_LINES+<5*132>+4(R7) 2$: RET .PAGE ;V2.06 .SUBTITLE DRAW FLOW_CONNECTOR ;V2.06 DRAW_FLOW_CONNECTOR: ;V2.06 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_FLOW_CONNECTOR,R6 ;V2.06 BRB 3$ ;V3.23 4$: MOVL #S_PIXEL_FLOW_CONNECTOR,R6 ;V3.23 3$: CALLG NULL,OVERLAY_ELEMENT ;V3.23 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 2$ ;V3.23 MOVL PROGRAM_ELEMENT_L_FLOW_LABEL(R10),R4 ;V2.06 MOVL #5,DESCRIPTER ;V2.06 MOVAL L^PIXEL_LINES+<4*132>+4(R7),L^DESCRIPTER+4 ;V2.06 PUSHL #0 ;V2.06 PUSHL #4 ;V2.06 PUSHL #0 ;V2.06 PUSHAL DESCRIPTER ;V2.06 PUSHAL LABEL_ELEMENT_L_LABEL(R4) ;V2.06 CALLS #5,G^OTS$CVT_L_TI ;V2.06 2$: RET ;V3.23 .PAGE .SUBTITLE OVERLAY ELEMENT .ENTRY OVERLAY_ELEMENT,^M ; R6 POINTS TO PIXEL PICTURE TO OVERLAY OVER OFFSET LOC IN PIXEL LINE ; R7 OFFSET INTO PIXEL LINE TO OVERLAY PIXEL BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 6$ ;V3.23 MOVL #PIXEL_DEPTH,R3 ;V3.23 BRB 2$ ;V3.23 6$: MOVL #S_PIXEL_DEPTH,R3 ;V3.23 2$: MOVL R7,R5 BITL #FLOW_SMALL_FLAG,FLAG_WORD+4 ;V3.23 BNEQ 4$ ;V3.23 MOVL #PIXEL_WIDTH,R4 ;V3.23 BRB 5$ ;V3.23 4$: MOVL #S_PIXEL_WIDTH,R4 ;V3.23 5$: ;V3.23 1$: MOVB (R6)+,R0 BEQL 3$ MOVB R0,L^PIXEL_LINES(R5) 3$: INCL R5 SOBGTR R4,1$ ADDL2 #132,R7 SOBGTR R3,2$ RET .PAGE .SUBTITLE START OF CLEAN UP-FIRST SCRATCH FILE CLEAN_UP: PUSHAL TIME_CHART_OUT PUSHAL CODE_1 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_OUT+8 PUSHAL CODE_2 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_OUT+12 PUSHAL CODE_3 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_OUT+16 PUSHAL CODE_4 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_OUT+20 PUSHAL CODE_5 CALLS #2,G^LIB$STAT_TIMER CALLG NULL,G^LIB$INIT_TIMER CLRL LINES_ON_PAGE CALLG NULL,CLOSE_CHART_SCRATCH CALLG NULL,OPEN_CHART_SCRATCH .PAGE .SUBTITLE CLEANUP VARIABLE QUEUE 1$: REMQUE @VARIABLE_QUEUE,R11 BVS 2$ 4$: TSTL VARIABLE_ELEMENT_L_EXTENTION(R11);SEE IF EXTENTIONS NEED REMOVAL BEQL 3$ ;NO MOVL VARIABLE_ELEMENT_L_EXTENTION(R11),R10 ;GET ADDR OF EXT MOVL VARIABLE_EXTENTION_L_EXTENTION(R10),- VARIABLE_ELEMENT_L_EXTENTION(R11) MOVL #VARIABLE_EXTENTION_LENGTH,FREE_1 MOVL R10,FREE_2 CALLG FREE_ARG,FREE BRB 4$ 3$: MOVL #VARIABLE_ELEMENT_LENGTH,FREE_1 MOVL R11,FREE_2 CALLG FREE_ARG,FREE BRB 1$ .PAGE .SUBTITLE NEXT THE LABEL QUEUE 2$: REMQUE @LABEL_QUEUE,R11 BVC 7$ BRW 5$ 7$: TSTL LABEL_ELEMENT_L_COME_FROM(R11) ;SEE IF ANY COMES_FROM BEQL 10$ MOVL LABEL_ELEMENT_L_COME_FROM(R11),R10 MOVL LABEL_EXTENTION_L_EXTENTION(R10),- LABEL_ELEMENT_L_COME_FROM(R11) MOVL #LABEL_QUEUE_EXTENTION_LENGTH,FREE_1 MOVL R10,FREE_2 CALLG FREE_ARG,FREE BRB 7$ 10$: 6$: MOVL #LABEL_QUEUE_ELEMENT_LENGTH,FREE_1 MOVL R11,FREE_2 CALLG FREE_ARG,FREE BRW 2$ 5$: .PAGE .SUBTITLE FINALLY THE PROGRAM QUEUE 8$: REMQUE @PROGRAM_QUEUE,R11 BVS 9$ MOVL PROGRAM_ELEMENT_L_LENGTH(R11),FREE_1 MOVL R11,FREE_2 CALLG FREE_ARG,FREE BRW 8$ 9$: .PAGE .SUBTITLE COLLECT STATS PUSHAL TIME_CHART_CLEAN PUSHAL CODE_1 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_CLEAN+8 PUSHAL CODE_2 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_CLEAN+12 PUSHAL CODE_3 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_CLEAN+16 PUSHAL CODE_4 CALLS #2,G^LIB$STAT_TIMER PUSHAL TIME_CHART_CLEAN+20 PUSHAL CODE_5 CALLS #2,G^LIB$STAT_TIMER CALLG NULL,G^LIB$INIT_TIMER RET .PAGE .SUBTITLE TEMP CODE TO DUMP ALL INTERNAL TABLES .IF DF ENABLE_DUMP .ENTRY DUMP_TABLES,^M ; FIRST THE LABEL QUEUE PUSHAL LABEL_1 CALLS #1,PRINT_LINE MOVAL LABEL_QUEUE,R11 MOVL R11,R10 1$: MOVL (R10),R10 CMPL R10,R11 BNEQ 2$ BRW 100$ 2$: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #10,DESCRIPTER $FAO_S ADDR_DES,,DESCRIPTER,R10 MOVAL DUMP_LINE+11,DESCRIPTER+4 MOVL #<132-11>,DESCRIPTER $FAOL_S LABEL_DES,,DESCRIPTER,(R10) MOVL #72,DESCRIPTER MOVAL DUMP_LINE,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,PRINT_LINE .MACRO OUTPUT_LABEL_EXT PRT_LBL,?AAA,?BBB .IF NB,PRT_LBL PUSHAL PRT_LBL CALLS #1,PRINT_LINE .ENDC AAA: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #10,DESCRIPTER $FAO_S ADDR_DES,,DESCRIPTER,R9 MOVAL DUMP_LINE+11,DESCRIPTER+4 MOVL #<160-11>,DESCRIPTER $FAOL_S LABEL_EXT_DES,,DESCRIPTER,(R9) MOVL #160,DESCRIPTER MOVAL DUMP_LINE,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,PRINT_LINE MOVL LABEL_EXTENTION_L_EXTENTION(R9),R9 BEQL BBB BRW AAA BBB: .ENDM MOVL LABEL_ELEMENT_L_COME_FROM(R10),R9 BNEQ 13$ BRW 3$ 13$: OUTPUT_LABEL_EXT 3$: PUSHAL BLANK_LINE CALLS #1,PRINT_LINE BRW 1$ 100$:; NEXT THE VARIABLE QUEUE PUSHAL VAR_1 CALLS #1,PRINT_LINE MOVAL VARIABLE_QUEUE,R11 MOVL R11,R10 101$: MOVL (R10),R10 CMPL R10,R11 BNEQ 104$ BRW 200$ 104$: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #10,DESCRIPTER $FAO_S ADDR_DES,,DESCRIPTER,R10 MOVAL DUMP_LINE+11,DESCRIPTER+4 MOVL #<160-11>,DESCRIPTER $FAOL_S VAR_DES_1,,DESCRIPTER,(R10) CVTBL VARIABLE_ELEMENT_S_NAME(R10),R9 MOVC3 R9,VARIABLE_ELEMENT_S_NAME+1(R10),DUMP_LINE+32 MOVL #<160-64>,DESCRIPTER MOVAL DUMP_LINE+64,DESCRIPTER+4 MOVAL VARIABLE_ELEMENT_L_EXTENTION(R10),R9 $FAOL_S VAR_DES_2,,DESCRIPTER,(R9) MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #120,DESCRIPTER PUSHAL DESCRIPTER CALLS #1,PRINT_LINE MOVL VARIABLE_ELEMENT_L_EXTENTION(R10),R9 BNEQ 102$ BRW 103$ 102$: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #10,DESCRIPTER $FAOL_S ADDR_DES,,DESCRIPTER,(R9) MOVAL DUMP_LINE+11,DESCRIPTER+4 MOVL #<160-11>,DESCRIPTER $FAOL_S LABEL_EXT_DES,,DESCRIPTER,(R9) MOVL #160,DESCRIPTER MOVAL DUMP_LINE,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,PRINT_LINE MOVL VARIABLE_EXTENTION_L_EXTENTION(R9),R9 BEQL 103$ BRW 102$ 103$: PUSHAL BLANK_LINE CALLS #1,PRINT_LINE BRW 101$ 200$: ;PROGRAM QUEUE PUSHAL PROG_1 CALLS #1,PRINT_LINE MOVAL PROGRAM_QUEUE,R11 MOVL R11,R10 DUMP_LOOP: MOVL (R10),R10 CMPL R10,R11 BNEQ 202$ RET 202$: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #10,DESCRIPTER $FAO_S ADDR_DES,,DESCRIPTER,R10 MOVAL DUMP_LINE+11,DESCRIPTER+4 MOVL #<160-11>,DESCRIPTER $FAOL_S PROG_DES,,DESCRIPTER,(R10) MOVL #<160-33>,DESCRIPTER MOVAL DUMP_LINE+33,DESCRIPTER+4 CVTBL PROGRAM_ELEMENT_W_NEST(R10),R9 $FAO_S PROG_A_DES,,DESCRIPTER,R9 MOVL #<160-36>,DESCRIPTER MOVAL DUMP_LINE+36,DESCRIPTER+4 $FAOL_S PROG_B_DES,,DESCRIPTER,PROGRAM_ELEMENT_L_FLAG(R10) MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #124,DESCRIPTER PUSHAL DESCRIPTER CALLS #1,PRINT_LINE MOVW PROGRAM_ELEMENT_W_ACTION(R10),R9 CASEW R9,#0,#24 203$: .WORD DUMP_0-203$ .WORD DUMP_1-203$ .WORD DUMP_2-203$ .WORD DUMP_3-203$ .WORD DUMP_4-203$ .WORD DUMP_5-203$ .WORD DUMP_6-203$ .WORD DUMP_7-203$ .WORD DUMP_8-203$ .WORD DUMP_9-203$ .WORD DUMP_10-203$ .WORD DUMP_11-203$ .WORD DUMP_12-203$ .WORD DUMP_13-203$ .WORD DUMP_14-203$ .WORD DUMP_15-203$ .WORD DUMP_16-203$ .WORD DUMP_17-203$ .WORD DUMP_18-203$ .WORD DUMP_19-203$ .WORD DUMP_20-203$ .WORD DUMP_21-203$ .WORD DUMP_22-203$ .WORD DUMP_23-203$ .WORD DUMP_24-203$ DUMP_0: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #57,DESCRIPTER MOVAL PROGRAM_ELEMENT_L_LEFT_LABEL(R10),R9 $FAOL_S PROG_0_DES,,DESCRIPTER,(R9) PUSHAL DESCRIPTER CALLS #1,PRINT_LINE BRW DUMP_LOOP DUMP_1: DUMP_3: DUMP_4: DUMP_6: DUMP_7: DUMP_8: DUMP_9: DUMP_12: DUMP_17: DUMP_18: DUMP_19: DUMP_20: DUMP_23:BRW DUMP_LOOP DUMP_2: DUMP_16:MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #20,DESCRIPTER MOVAL PROGRAM_ELEMENT_L_END(R10),R9 $FAOL_S PROG_2_DES,,DESCRIPTER,(R9) PUSHAL DESCRIPTER CALLS #1,PRINT_LINE BRW DUMP_LOOP DUMP_5: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #29,DESCRIPTER MOVAL PROGRAM_ELEMENT_L_LESS_THAN(R10),R9 $FAOL_S PROG_5_DES,,DESCRIPTER,(R9) PUSHAL DESCRIPTER CALLS #1,PRINT_LINE BRW DUMP_LOOP DUMP_10: DUMP_11: DUMP_13: DUMP_14: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #11,DESCRIPTER MOVAL PROGRAM_ELEMENT_L_LOOP_LABEL(R10),R9 $FAOL_S PROG_0_DES,,DESCRIPTER,(R9) PUSHAL DESCRIPTER CALLS #1,PRINT_LINE BRW DUMP_LOOP DUMP_15: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #11,DESCRIPTER MOVAL PROGRAM_ELEMENT_L_COUNT(R10),R9 $FAOL_S PROG_15_DES,,DESCRIPTER,(R9) PUSHAL DESCRIPTER CALLS #1,PRINT_LINE MOVL PROGRAM_ELEMENT_L_COUNT(R10),R8 MOVAL PROGRAM_ELEMENT_L_LIST(R10),R9 1$: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #11,DESCRIPTER $FAOL_S PROG_10_DES,,DESCRIPTER,(R9) PUSHAL DESCRIPTER CALLS #1,PRINT_LINE ADDL2 #4,R9 SOBGTR R8,1$ BRW DUMP_LOOP DUMP_21: DUMP_22: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVL #34,DESCRIPTER MOVAL DUMP_LINE,DESCRIPTER+4 CVTBL PROGRAM_ELEMENT_S_NAME(R10),R9 MOVC3 R9,PROGRAM_ELEMENT_S_NAME+1(R10),DUMP_LINE PUSHAL DESCRIPTER CALLS #1,PRINT_LINE BRW DUMP_LOOP DUMP_24: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE+34,DESCRIPTER+4 MOVL #<160-34>,DESCRIPTER CVTBL PROGRAM_ELEMENT_S_NAME(R10),R9 MOVC3 R9,PROGRAM_ELEMENT_S_NAME+1(R10),DUMP_LINE MOVAL PROGRAM_ELEMENT_L_CALL_COUNT(R10),R9 $FAOL_S PROG_10_DES,,DESCRIPTER,(R9) MOVL #<34+20>,DESCRIPTER MOVAL DUMP_LINE,DESCRIPTER+4 PUSHAL DESCRIPTER CALLS #1,PRINT_LINE MOVL PROGRAM_ELEMENT_L_CALL_COUNT(R10),R8 MOVAL PROGRAM_ELEMENT_L_CALL_LIST(R10),R9 1$: MOVC5 #0,NULL,#^A/ /,#160,DUMP_LINE MOVAL DUMP_LINE,DESCRIPTER+4 MOVL #11,DESCRIPTER $FAOL_S PROG_10_DES,,DESCRIPTER,(R9) PUSHAL DESCRIPTER CALLS #1,PRINT_LINE ADDL2 #4,R9 SOBGTR R8,1$ BRW DUMP_LOOP .PSECT PURE_DATA LABEL_1: .ASCID /Label Queue/ VAR_1: .ASCID /Variable Queue/ PROG_1: .ASCID /Program Queue/ BLANK_LINE: .ASCID / / ADDR_DES: .ASCID /(!XL)/ LABEL_DES: .ASCID /!8XL !8XL !5ZL !5ZL !8XL !8XL !8XL/ LABEL_EXT_DES: .ASCID /!8XL !8XL !8XL !8XL !8XL !8XL !8XL !8XL !8XL !8XL /- ?!/!_ !8XL !8XL !8XL !8XL !8XL !8XL? VAR_DES_1: .ASCID /!8XL !8XL !2ZB / VAR_DES_2: .ASCID /!8XL !8ZL !8XL !8XL !8XL !8XL/ PROG_DES: .ASCID /!8XL !8XL !2ZW / PROG_A_DES: .ASCID /!2ZW / PROG_B_DES: .ASCID /!8XL !8XL !8XL !6ZL !6SL !6SL !3ZL !8XL/- / !8XL !8XL !8XL/ PROG_0_DES: .ASCID /!_ !8XL !8XL !8XL !8XL !8XL !8XL/ PROG_2_DES: .ASCID /!_ !8XL !8XL/ PROG_5_DES: .ASCID /!_ !8XL !8XL !8XL/ PROG_10_DES: .ASCID /!_ !8XL/ PROG_15_DES: .ASCID /!_ !8ZL/ .PSECT IMPURE_DATA DUMP_LINE: .BLKB 160 PARAM_LIST: .BLKL 128 .PSECT CODE ;V2.04 .SUBTITLE TABLEAU CONSISTENCY CHECK ;V2.04 .ENTRY CHECK_TABLEAU,^M ;V2.04 MOVAL PROGRAM_QUEUE,R11 ;V2.04 MOVL R11,R10 ;V2.04 5$: MOVL (R10),R10 ;V2.06 CMPL R10,R11 ;V2.06 BEQL 4$ ;V2.06 BISL2 #PROGRAM_FLAG_M_DEBUG_MARK,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.06 BRB 5$ ;V2.06 4$: MOVL R11,R10 ;V2.06 CLRL R6 ;V2.04 1$: MOVL (R10),R10 ;V2.04 CMPL R10,R11 ;V2.04 BNEQ 2$ ;V2.04 MOVL R6,R0 ;V2.04 BEQL 3$ ;V2.04 ; BPT ;V2.04 3$: MOVL R11,R10 ;V2.04 6$: MOVL (R10),R10 ;V2.06 CMPL R10,R11 ;V2.06 BEQL 7$ ;V2.06 BICL #PROGRAM_FLAG_M_DEBUG_MARK,PROGRAM_ELEMENT_L_FLAG(R10) ;V2.06 BRB 6$ ;V2.06 7$: BRW 10$ ;V2.16 2$: CALLG NULL,CHECK_PIXEL ;V2.04 BISL2 R0,R6 ;V2.04 BRB 1$ ;V2.04 10$: MOVL PROGRAM_QUEUE,R11 ;V2.16 1010$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R10 ;V2.16 BEQL 11$ ;V2.16 MOVL R10,R11 ;V2.16 BRB 1010$ ;V2.16 11$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R10 ;V2.16 12$: CALLG NULL,CHECK_HORIZONTAL_LINE ;V2.16 MOVL R10,R11 ;V2.16 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R10 ;V2.16 BNEQ 12$ ;V2.16 MOVL PROGRAM_QUEUE,R11 ;V2.16 13$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R11),R10 ;V2.16 BEQL 14$ ;V2.16 MOVL R10,R11 ;V2.16 BRB 13$ ;V2.16 14$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R10 ;V2.16 BEQL 15$ ;V2.16 CALLG NULL,CHECK_VERTICAL_LINE ;V2.16 MOVL R10,R11 ;V2.16 BRB 14$ ;V2.16 15$: RET ;V2.16 .ENTRY CHECK_HORIZONTAL_LINE,^M ;V2.16 ; R10 IS UPPER LINE ;V2.16 ; R11 IS LOWER LINE ;V2.16 1$: CMPL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R10 ;V2.16 BEQL 10$ ;V2.16 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R9 ;V2.16 BNEQ 2$ ;V2.16 MOVAL NULL_ELEMENT,R9 ;V2.16 2$: MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.16 MOVL #113,DESCRIPTER ;V2.16 $FAO_S LINE_ACCROSS_CK_DOWN,,DESCRIPTER,- ;V2.16 R11,PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_Y(R11),- ;V2.16 R10,PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_Y(R10),- ;V2.16 R9,PROGRAM_ELEMENT_L_X(R9),PROGRAM_ELEMENT_L_Y(R9) ;V2.16 PUSHAL DESCRIPTER ;V2.16 CALLS #1,G^LIB$PUT_OUTPUT ;V2.16 10$: CMPL PROGRAM_ELEMENT_L_UP_POINTER(R10),R11 ;V2.16 BEQL 20$ ;V2.16 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R9 ;V2.16 BNEQ 12$ ;V2.16 MOVAL NULL_ELEMENT,R9 ;V2.16 12$: MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.16 MOVL #113,DESCRIPTER ;V2.16 $FAO_S LINE_ACCROSS_CK_UP,,DESCRIPTER,- ;V2.16 R10,PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_Y(R10),- ;V2.16 R11,PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_Y(R11),- ;V2.16 R9,PROGRAM_ELEMENT_L_X(R9),PROGRAM_ELEMENT_L_Y(R9) ;V2.16 PUSHAL DESCRIPTER ;V2.16 CALLS #1,G^LIB$PUT_OUTPUT ;V2.16 20$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R11 ;V2.16 BEQL 30$ ;V2.16 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R10 ;V2.16 BEQL 30$ ;V2.16 BRW 1$ ;V2.16 30$: RET ;V2.16 .ENTRY CHECK_VERTICAL_LINE,^M ;V2.16 ; R10 IS LEFT LINE ;V2.16 ; R11 IS RIGHT LINE ;V2.16 1$: CMPL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R10 ;V2.16 BEQL 10$ ;V2.16 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R11),R9 ;V2.16 BNEQ 2$ ;V2.16 MOVAL NULL_ELEMENT,R9 ;V2.16 2$: MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.16 MOVL #115,DESCRIPTER ;V2.16 $FAO_S LINE_DOWN_CK_RIGHT,,DESCRIPTER,- ;V2.16 R11,PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_Y(R11),- ;V2.16 R10,PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_Y(R10),- ;V2.16 R9,PROGRAM_ELEMENT_L_X(R9),PROGRAM_ELEMENT_L_Y(R9) ;V2.16 PUSHAL DESCRIPTER ;V2.16 CALLS #1,G^LIB$PUT_OUTPUT ;V2.16 10$: CMPL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R11 ;V2.16 BEQL 20$ ;V2.16 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R9 ;V2.16 BNEQ 12$ ;V2.16 MOVAL NULL_ELEMENT,R9 ;V2.16 12$: MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.16 MOVL #116,DESCRIPTER ;V2.16 $FAO_S LINE_DOWN_CK_LEFT,,DESCRIPTER,- ;V2.16 R10,PROGRAM_ELEMENT_L_X(R10),PROGRAM_ELEMENT_L_Y(R10),- ;V2.16 R11,PROGRAM_ELEMENT_L_X(R11),PROGRAM_ELEMENT_L_Y(R11),- ;V2.16 R9,PROGRAM_ELEMENT_L_X(R9),PROGRAM_ELEMENT_L_Y(R9) ;V2.16 PUSHAL DESCRIPTER ;V2.16 CALLS #1,G^LIB$PUT_OUTPUT ;V2.16 20$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R11),R11 ;V2.16 BEQL 30$ ;V2.16 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R10 ;V2.16 BEQL 30$ ;V2.16 BRW 1$ ;V2.16 30$: RET ;V2.16 .ENTRY CHECK_PIXEL,^M ;V2.04 CLRL R7 ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R10),R9 ;V2.04 BEQL 1$ ;V2.04 BITL #PROGRAM_FLAG_M_DEBUG_MARK,PROGRAM_ELEMENT_L_FLAG(R9) ;V2.06 BNEQ 2003$ ;V2.06 PUSHAL NOT_IN_QUEUE_ERR ;V2.06 CALLS #1,G^LIB$PUT_OUTPUT ;V2.06 BRB 3003$ ;V2.06 2003$: CMPL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R10 ;V2.06 BEQL 1$ ;V2.04 3003$: MOVL #1,R7 ;V2.06 MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.04 MOVL #121,DESCRIPTER ;V2.04 MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R9),R8 ;V2.04 BNEQ 1002$ ;V2.06 MOVAL NULL_ELEMENT,R8 ;V2.06 1002$: ;V2.06 $FAO_S CHECK_UP,,DESCRIPTER,R10,PROGRAM_ELEMENT_L_X(R10),- ;V2.04 PROGRAM_ELEMENT_L_Y(R10),R9,PROGRAM_ELEMENT_L_X(R9),- ;V2.04 PROGRAM_ELEMENT_L_Y(R9),R8,PROGRAM_ELEMENT_L_X(R8),- ;V2.04 PROGRAM_ELEMENT_L_Y(R8) ;V2.04 PUSHAL DESCRIPTER ;V2.04 CALLS #1,G^LIB$PUT_OUTPUT ;V2.04 1$: MOVL PROGRAM_ELEMENT_L_DOWN_POINTER(R10),R9 ;V2.04 BEQL 2$ ;V2.04 BITL #PROGRAM_FLAG_M_DEBUG_MARK,PROGRAM_ELEMENT_L_FLAG(R9) ;V2.06 BNEQ 4003$ ;V2.06 PUSHAL NOT_IN_QUEUE_ERR ;V2.06 CALLS #1,G^LIB$PUT_OUTPUT ;V2.06 BRB 5003$ ;V2.06 4003$: CMPL PROGRAM_ELEMENT_L_UP_POINTER(R9),R10 ;V2.06 BEQL 2$ ;V2.04 5003$: MOVL #1,R7 ;V2.06 MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.04 MOVL #121,DESCRIPTER ;V2.04 MOVL PROGRAM_ELEMENT_L_UP_POINTER(R9),R8 ;V2.04 BNEQ 2002$ ;V2.06 MOVAL NULL_ELEMENT,R8 ;V2.06 2002$: ;V2.06 $FAO_S CHECK_DOWN,,DESCRIPTER,R10,PROGRAM_ELEMENT_L_X(R10),- ;V2.04 PROGRAM_ELEMENT_L_Y(R10),R9,PROGRAM_ELEMENT_L_X(R9),- ;V2.04 PROGRAM_ELEMENT_L_Y(R9),R8,PROGRAM_ELEMENT_L_X(R8),- ;V2.04 PROGRAM_ELEMENT_L_Y(R8) ;V2.04 PUSHAL DESCRIPTER ;V2.04 CALLS #1,G^LIB$PUT_OUTPUT ;V2.04 2$: MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R10),R9 ;V2.04 BEQL 3$ ;V2.04 BITL #PROGRAM_FLAG_M_DEBUG_MARK,PROGRAM_ELEMENT_L_FLAG(R9) ;V2.06 BNEQ 6003$ ;V2.06 PUSHAL NOT_IN_QUEUE_ERR ;V2.06 CALLS #1,G^LIB$PUT_OUTPUT ;V2.06 BRB 7003$ ;V2.06 6003$: CMPL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R10 ;V2.06 BEQL 3$ ;V2.04 7003$: MOVL #1,R7 ;V2.06 MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.04 MOVL #121,DESCRIPTER ;V2.04 MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R9),R8 ;V2.04 BNEQ 3002$ ;V2.06 MOVAL NULL_ELEMENT,R8 ;V2.06 3002$: ;V2.06 $FAO_S CHECK_LEFT,,DESCRIPTER,R10,PROGRAM_ELEMENT_L_X(R10),- ;V2.04 PROGRAM_ELEMENT_L_Y(R10),R9,PROGRAM_ELEMENT_L_X(R9),- ;V2.04 PROGRAM_ELEMENT_L_Y(R9),R8,PROGRAM_ELEMENT_L_X(R8),- ;V2.04 PROGRAM_ELEMENT_L_Y(R8) ;V2.04 PUSHAL DESCRIPTER ;V2.04 CALLS #1,G^LIB$PUT_OUTPUT ;V2.04 3$: MOVL PROGRAM_ELEMENT_L_RIGHT_POINTER(R10),R9 ;V2.04 BEQL 4$ ;V2.04 BITL #PROGRAM_FLAG_M_DEBUG_MARK,PROGRAM_ELEMENT_L_FLAG(R9) ;V2.06 BNEQ 8003$ ;V2.06 PUSHAL NOT_IN_QUEUE_ERR ;V2.06 CALLS #1,G^LIB$PUT_OUTPUT ;V2.06 BRB 9003$ ;V2.06 8003$: CMPL PROGRAM_ELEMENT_L_LEFT_POINTER(R9),R10 ;V2.06 BEQL 4$ ;V2.04 9003$: MOVL #1,R7 ;V2.04 MOVAL DUMP_LINE,DESCRIPTER+4 ;V2.04 MOVL #121,DESCRIPTER ;V2.04 MOVL PROGRAM_ELEMENT_L_LEFT_POINTER(R9),R8 ;V2.04 BNEQ 4002$ ;V2.06 MOVAL NULL_ELEMENT,R8 ;V2.06 4002$: ;V2.06 $FAO_S CHECK_RIGHT,,DESCRIPTER,R10,PROGRAM_ELEMENT_L_X(R10),- ;V2.04 PROGRAM_ELEMENT_L_Y(R10),R9,PROGRAM_ELEMENT_L_X(R9),- ;V2.04 PROGRAM_ELEMENT_L_Y(R9),R8,PROGRAM_ELEMENT_L_X(R8),- ;V2.04 PROGRAM_ELEMENT_L_Y(R8) ;V2.04 PUSHAL DESCRIPTER ;V2.04 CALLS #1,G^LIB$PUT_OUTPUT ;V2.04 4$: MOVL R7,R0 ;V2.04 RET ;V2.04 .PSECT PURE_DATA ;V2.04 NULL_ELEMENT: ;V2.06 .REPT 64 ;V2.06 .BLKB 0 ;V2.06 .ENDR ;V2.06 NOT_IN_QUEUE_ERR: ;V2.06 .ASCID /Target Element of Pointer Not in Program Queue/ ;V2.06 CHECK_UP: ;V2.04 .ASCID /Pixel !8XL X=!4SL Y=!4SL Points Up to Pixel !8XL X=!4SL Y=!4SL/-;V.204 / Return Pointer to Pixel !8XL X=!4SL Y=!4SL/ ;V2.04 CHECK_DOWN: ;V2.04 .ASCID /Pixel !8XL X=!4SL Y=!4SL Points Down to Pixel !8XL X=!4SL Y=!4SL/-;V.204 / Return Pointer to Pixel !8XL X=!4SL Y=!4SL/ ;V2.04 CHECK_LEFT: ;V2.04 .ASCID /Pixel !8XL X=!4SL Y=!4SL Points Left to Pixel !8XL X=!4SL Y=!4SL/-;V.204 / Return Pointer to Pixel !8XL X=!4SL Y=!4SL/ ;V2.04 CHECK_RIGHT: ;V2.04 .ASCID /Pixel !8XL X=!4SL Y=!4SL Points Right to Pixel !8XL X=!4SL Y=!4SL/-;V.204 / Return Pointer to Pixel !8XL X=!4SL Y=!4SL/ ;V2.04 LINE_ACCROSS_CK_DOWN: ;V2.16 .ASCID /Pixel !8XL X=!4SL Y=!4SL is above Pixel !8XL X=!4SL Y=!4SL but /- ;V2.16 /Points to Pixel !8XL X=!4SL Y=!4SL/ ;V2.16 LINE_ACCROSS_CK_UP: ;V2.16 .ASCID /Pixel !8XL X=!4SL Y=!4SL is below Pixel !8XL X=!4SL Y=!4SL but /- ;V2.16 /Points to Pixel !8XL X=!4SL Y=!4SL/ ;V2.16 LINE_DOWN_CK_RIGHT: ;V2.16 .ASCID /Pixel !8XL X=!4SL Y=!4SL is left of Pixel !8XL X=!4SL Y=!4SL but /-;V2.16 /Points to Pixel !8XL X=!4SL Y=!4SL/ ;V2.16 LINE_DOWN_CK_LEFT: ;V2.16 .ASCID /Pixel !8XL X=!4SL Y=!4SL is right of Pixel !8XL X=!4SL Y=!4SL but/-;V2.16 / Points to Pixel !8XL X=!4SL Y=!4SL / ;V2.16 .ENDC .END