SUBROUTINE JUMPTO(TYPE,LABEL) C C PURPOSE: SCANS FORWARD FROM CURRENT POSITION IN PROGRAM MEMORY AND C TRANSFERS CONTROL TO PROGRAM STEP IMMEDIATELY C FOLLOWING A LABEL ENTRY MATCHING THE LABEL REQUESTED. TWO LABEL C TYPES ARE CURRENTLY SUPPORTED: ALPHABETIC AND NUMERIC. ALPHA C LABELS ARE PREFIXED BY THE CODE CORRESPONDING TO THE "LBLa" COMMAND C (CURRENTLY TYPE =1 ). NUMERIC LABELS ARE PREFIXED BY CODE CORRESPONDING C TO "LBLn" COMMAND (CURRENTLY TYPE = 2). IT IS THE CALLING ROUTINES C RESPONSIBILTY TO ASK FOR THE CORRECT "TYPE" TO AVOID GETTING C PROGRAM COUNTER ALL CONFUSED. IF NO LABEL OF REQUESTED TYPE C IS PRESENT IN PROGRAM MEMORY, PC REMAINS UNCHANGED AND JUMPTO C CLEARS "TYPE". NOTE: NUMERIC LABELS RANGE FROM C 0-255, BUT ARE INTERNALLY CODED AS AN OFFSET BINARY # IN A SINGLE C BYTE VARIABLE (E.G. LABEL 0 EXTERNAL => -128 INTERNAL; LABEL 255 C EXTERNAL => 127 INTERNAL). CALLING ROUTINE MUST BE SURE TO C REQUEST A NUMERIC LABEL USING THE INTERNAL !! REPRESENTATION. C C VARIABLES: C P -COMMON BYTE ARRAY CONTAINING CURRENT PROGRAM STEPS C PC -COMMON INTEGER VARIABLE POINTING TO NEXT COMMAND (PROGRAM C COUNTER) C NSTEPS -LOCAL INTEGER VARIABLE SET TO CURRENT MAX # PROGRAM STEPS C TYPE -BYTE VARIABLE SET TO TYPE OF LABEL TO SCAN FOR--1=ALPHA, C 2=NUMERIC C LABEL -BYTE VARIABLE SET TO ACTUAL LABEL SCANNING FOR--SEE NOTE C ABOVE REGARDING INTERNAL FORM FOR NUMERIC LABELS. C C SUBROUTINES REQUIRED: C STEPPC -INCREMENTS PROGRAM COUNTER TO POINT TO NEXT SEQUENTIAL COMMAND C ACCORDING TO AN INTERNAL TABLE DEFINING # PROGRAM STEPS C USED BY EACH CODED COMMAND. C C SORENSON, 1/81 C COMMON/MEMORY/PC,P(1000) INTEGER PC BYTE P BYTE TYPE,LABEL DATA NSTEPS/1000/ C C START AT CURRENT PC-SCAN THROUGH MEMORY CHECKING EACH C COMMAND (BYTE POINTED TO BY PC) FOR "TYPE". IF MATCH, CHECK C NEXT SEQUENTIAL BYTE FOR "LABEL". IF MATCH, READJUST PC AND EXIT. C OTHERWISE KEEP STEPPING THROUGH PROGRAM. C WHEN HIT LAST PROGRAM STEP (NSTEPS) SET PC TO 1 AND CONTINUE C UNTIL HIT CURRENT PC. NOTE: LAST STEP CURRENTLY FORCED TO BE C "R/S" COMMAND. C 1 LASTPC=PC 2 IF(P(PC).NE.TYPE)GO TO 5 IF(P(PC+1).EQ.LABEL)GO TO 8 5 CALL STEPPC IF(PC.NE.LASTPC)GO TO 2 C C SIGNAL COULDN'T FIND LABEL BY CLEARING "TYPE" C TYPE=0 GO TO 10 8 PC=PC+2 10 RETURN END