ERRS: DO; /************************************************************************/ /* */ /* 'Copyright 1981,1983 Intel Corporation'. All rights reserved. */ /* No part of this program or publication may be reproduced, */ /* transmitted, transcribed, stored in a retrievel system, or */ /* translated into any language or computer language, in any */ /* form or by any means, electronic, mechanical, magnetic, */ /* optical, chemical, manual or otherwise, without the prior */ /* written permission of Intel Corporation, 3065 Bowers */ /* Avenue, Santa Clara, California, 95051, Attn: Software */ /* License Administration. */ /* */ /************************************************************************/ $IF XVERSION DECLARE PROPRIETARY(*) BYTE DATA ('INTEL PROPRIETARY SOFTWARE'); DECLARE PROGRAM$VERSION$NUMBER$STRING (*) BYTE DATA ('program_version_number=X104',0); $ELSE DECLARE COPYRIGHT (*) BYTE DATA ('COPYRIGHT 1981,1983 INTEL '); DECLARE PROGRAM$VERSION$NUMBER$STRING (*) BYTE DATA ('program_version_number=V1.1',0); $ENDIF /* PEX */ DECLARE SCANP ADDRESS EXTERNAL; DECLARE SCANBYTE BASED SCANP BYTE; DECLARE TARLEN BYTE EXTERNAL; DECLARE GIVEUP ADDRESS EXTERNAL; CONSOLEIN :PROCEDURE EXTERNAL;END; FMOVE :PROCEDURE (ZZ1,ZZ2,ZZ3) EXTERNAL;DECLARE (ZZ1,ZZ2,ZZ3)ADDRESS;END; PRINT :PROCEDURE (ZZ1) EXTERNAL;DECLARE (ZZ1)ADDRESS;END; SCANWHILEBLANKS :PROCEDURE EXTERNAL;END; SETSC :PROCEDURE (ZZ1) EXTERNAL;DECLARE (ZZ1)ADDRESS;END; SFOUND :PROCEDURE BYTE EXTERNAL;END; DECLARE FATAL BYTE EXTERNAL; DECLARE ACTUAL ADDRESS EXTERNAL; CI :PROCEDURE BYTE EXTERNAL;END; EX :PROCEDURE EXTERNAL;END; MEMCK :PROCEDURE ADDRESS EXTERNAL;END; OPENI :PROCEDURE (ZZ1) EXTERNAL;DECLARE (ZZ1)ADDRESS;END; READI :PROCEDURE (ZZ1,ZZ2) EXTERNAL;DECLARE (ZZ1,ZZ2)ADDRESS;END; WRITEC :PROCEDURE (ZZ1,ZZ2) EXTERNAL;DECLARE (ZZ1,ZZ2)ADDRESS;END; DECLARE FALSE LITERALLY'0'; DECLARE TRUE LITERALLY'255'; DECLARE CONTROL$C LITERALLY '03H'; /* ENDPEX */ DECLARE NOT$FIRST$TIME BYTE INITIAL (FALSE); DECLARE READ$FINISHED BYTE INITIAL (FALSE); DECLARE CLEAR$SCREEN (*) BYTE DATA (1DH,1FH, /* DATAPOINT */ 1BH,'H',1BH,'M', /* OMRON */ 7EH,1CH, /* H-1510 */ 0CH, /* H-1200 & VISITAR */ 1BH,'E', /* BEEHIVE & EMDS */ 0DH,0AH,0); DECLARE LINES BYTE; DECLARE LINE$COUNT BYTE; DECLARE TEMP ADDRESS; DECLARE CAPACITY ADDRESS; DECLARE TARGET(10) BYTE PUBLIC DATA (0AH,'*** ?????'); WAIT: PROCEDURE; IF NOT$FIRST$TIME THEN DO; IF ((CI AND 7FH) = CONTROL$C) THEN DO; CALL PRINT(.CLEAR$SCREEN(11)); /* CRLF */ CALL EX; END; END; NOT$FIRST$TIME = TRUE; END; BUMP$LINES: PROCEDURE; IF ((LINE$COUNT := LINE$COUNT + 1) = 80) OR SCAN$BYTE = 0AH THEN DO; LINE$COUNT = 0; LINES = LINES + 1; END; END; FLUSH: PROCEDURE; TEMP = .MEMORY + GIVEUP - SCAN$P; CALL FMOVE(GIVEUP - SCAN$P, SCAN$P, .MEMORY); CAPACITY = MEMCK - TEMP; CALL READI(TEMP,CAPACITY); READ$FINISHED = (ACTUAL < CAPACITY); SCAN$P = .MEMORY; GIVEUP = TEMP + ACTUAL; END; BACK$PTR: PROCEDURE ADDRESS; CALL SET$SC(SCAN$P); LINES = 0; LINE$COUNT = 0; DO WHILE LINES < 5; IF (SCAN$P := SCAN$P - 1) = .MEMORY THEN RETURN .MEMORY; CALL BUMP$LINES; END; RETURN SCAN$P; END; FORWARD$PTR: PROCEDURE; LINES = 0; LINE$COUNT = 0; DO WHILE LINES < 15; IF (SCAN$P := SCAN$P + 1) = GIVE$UP THEN RETURN; CALL BUMP$LINES; END; END; FATAL = TRUE; CALL CONSOLE$IN; CALL SCAN$WHILE$BLANKS; CALL OPENI(SCAN$P); GIVE$UP = (SCAN$P := .MEMORY); TARLEN = 9; DO WHILE NOT READ$FINISHED; CALL FLUSH; SFOUND$LOOP: IF SFOUND THEN DO; CALL WAIT; CALL PRINT(.CLEAR$SCREEN); TEMP = BACK$PTR; CALL FORWARD$PTR; CALL WRITEC(TEMP, SCAN$P-TEMP); IF READ$FINISHED THEN DO; IF SCAN$P = GIVE$UP THEN CALL EX; END; ELSE IF SCAN$P > GIVE$UP - 2048 THEN CALL FLUSH; GO TO SFOUND$LOOP; END; ELSE SCAN$P = GIVE$UP; END; CALL WAIT; CALL PRINT(.CLEAR$SCREEN); CALL WRITEC(GIVEUP-223,223); CALL EX; END ERRS;