Listing of file='WSESTART' on disk='vmedia/731-8011A.wvd.zip'
# Sector 1034, program filename = 'WSESTART' 0010 REM WSESTART 10DEC86 REV 2.00 0011 REM % (c) Copyright Wang Laboratories, Inc. 1986 0020 REM PROGRAM NAME - 2258 WORKSTATION EMULATION START 0030 REM DATE OF FIRST CODE - 05 FEBRUARY 1986 0034 REM 0035 REM DATE OF LATEST UPDATE - 10 OCT 86 (changed '45) 0036 REM - 2 SEPT 86 (ADDED RESET COMMAND FOR 2258) 0037 REM - 25 AUG 86 (screen fixes) 0038 REM - 25 JUN 86 0039 REM CHECKS FOR ATTACH BY NO 0040 REM - 18 JUN 86 0041 REM REVISION AND COPYRIGHT ADDED TO 1ST SCREEN 0042 REM 0043 REM - 12 FEB 86 0044 REM CHANGES TO XLATE TABLE FOR ; % 0045 REM - MAR. 03 1988 0046 REM CHANGED T1$(8) AND T5$(6) TO SUPPORT BACKTAB 0050 REM 0060 REM FUNCTION - 0070 REM This module shall request the address of the 2258 to be used. 0080 REM The program shall then set the 2258's - 0090 REM STATUS Address to File ID #1 0100 REM COMMAND Address to File ID #2 0110 REM DATA Address to File ID #3 0120 REM 0130 REM The program shall then determine whether an emulation already 0140 REM exists for this partition. 0150 REM 0160 REM If an emulation exists, then a menu will be displayed giving the 0170 REM user a choice to resume, terminate or restart emulation. Otherwise, 0180 REM a new emulation is attempted to be started. 0190 REM 0200 REM ************* COMMON VARIABLES ****************** 0210 REM 0220 REM A$ - ORDER AREA BYTE 1 = ROW 0221 REM BYTE 2 = WCC 0222 REM BYTE 3 = CURSOR COLUMN (IF BIT 20 OF WCC SET) 0223 REM BYTE 4 = CURSOR ROW (IF BIT 20 OF WCC SET) 0230 REM A$() - COPY OF SCREEN RECEIVED FROM CURRENT INPUT BUFFER 0232 REM A0$ - ADDRESS OF 2258 TO BE USED BY PROGRAM 0235 REM A1$() - SCREEN TAB POSITIONS 0237 REM A3$ - ATTACH TO VS PROGRAM FLAG 0240 REM Q1 - POINTS TO FIRST LINE OF CURRENT INPUT BUFFER (USUALLY 1) 0250 REM Q2 - POINTS TO LAST LINE OF CURRENT INPUT BUFFER (USUALLY 24) 0260 REM T$() - XLATE NORMAL 2200 KEYS TO VS SCAN CODE 0270 REM T1$() - XLATE SF 2200 KEYS TO VS SCAN CODE 0280 REM Q1$() - INPUT BUFFER FROM VS (SCREEN, TABS, ORDER AREA, ETC.) 0290 REM P() - CURSOR POSITION P(1)=COL, P(2)=ROW 0300 REM K9$ - KEYBOARD LOCK FLAG 01 - FUNCTIONS ONLY, 00 - ALL KEYS 0310 REM T5$() - TRANSLATION TABLE USED TO MAP SOME NORMAL KEYS TO OTHERS 0311 REM EX. CURSOR LEFT = BACKSPACE, ETC. 0320 REM T6$() - TRANSLATION TABLE USED TO MAP SOME SF KEYS TO OTHERS 0330 REM 0340 REM ************** LOCAL VARIABLES **************** 0342 REM 0350 REM T$ - HEXPACKED ADDRESS OF 2258, USE IN SELECT # STATEMENT 0360 REM T1$ - TEMPORARY STORAGE OF ORIGINAL T$ 0362 REM E9$ - MESSAGE BUFFER 0365 REM F$ - $GIO REGISTERS 0370 REM F6$ - DMS STATUS 0372 REM F8$ - INPUT BUFFER 0375 REM F9$ - ERROR MESSAGE 0380 REM 0390 REM VARIABLES : COM A0$3, A3$1, A$4, A$(24)80, Q1, Q2, Q3, Q4,T$(16), T1$(16), Q1$(25)80, P(2), K9$1,T5$(6)20, T6$(1)20, A1$(10)1 : DIM T$1,T1$1,A9$3,E9$80,F6$40,F8$3,F9$80 0395 REM %Screen subs : DIM R1,S0,T1(8),S4$80,T1$1 0400 F8$="07C" : PRINT HEX(03) 0410 GOSUB '100(HEX(F218010150F1)," ") : ON R1+3 GOTO 435,435,435,450,,,,450 : GOTO 410 0435 LOAD RUN "@VSMENU" 0450 IF VER(F8$,"0HH")=3 AND STR(F8$,2,1)<>"0" THEN 455 0452 GOSUB '128("Invalid communications address",99,0,20) : GOTO 410 0455 HEXPACK T$ FROM STR(F8$,2,2) : T5$=T$ AND HEX(FC) : IF T5$<>T$ THEN 452 0457 A0$,A9$=F8$ : T1$=T$ 0460 T$ = OR HEX(01) : HEXUNPACK T$ TO STR(A9$,2,2) : SELECT #1 <A9$> : ERRORGOTO 452 : REM STATUS ADDRESS 0465 $OPEN 488,#1 : ERRORGOTO 452 0466 $CLOSE#1 0470 T$ = T1$ : T$ = OR HEX(02) : HEXUNPACK T$ TO STR(A9$,2,2) : SELECT #2 <A9$> : ERRORGOTO 452 : REM COMMAND ADDRESS 0475 $OPEN 488,#2 : ERRORGOTO 452 0476 $CLOSE#2 0480 T$ = T1$ : T$ = OR HEX(03) : HEXUNPACK T$ TO STR(A9$,2,2) : SELECT #3 <A9$> : ERRORGOTO 452 : REM DATA ADDRESS 0482 $OPEN 488,#3 : ERRORGOTO 452 0483 $CLOSE#3 0484 REM /Restore variables from screen subs : MAT REDIM T1$(16) : REM INITIALIZE KEYBOARD TRANSLATION TABLE : GOSUB 580 : GOSUB 920 0485 REM If attach flag set, check if already attached : IF A3$=" " THEN 490 : GOSUB '45 : IF V<0 THEN 489 : IF STR(F6$,1,1)=HEX(00) THEN 490 : GOSUB '128("Controller already attached to DMS/VDISK",99,0,20) : GOTO 410 0488 REM /Problem accessing board : V=-20 0489 IF V=-1 THEN E9$="Invalid communications address" : IF V=-10 THEN E9$="Controller not responding" : IF V=-20 THEN E9$="Controller is being accessed by another partition" : GOSUB '128(E9$,99,0,20) : GOTO 410 0490 REM GET STATUS OF EMULATION 0500 STR(Q$,6,1) = BIN(#PART-1) AND HEX(0F) OR HEX(30) 0510 STR(Q$,7,1) = HEX(32) 0520 $OPEN 488,#2 : $GIO #2 (4660 4270 8701, Q$) : $CLOSE#2 0530 IF STR(Q$,1,1) = HEX(00) THEN LOAD T "STARTWSE" 0540 $PSTAT = ".WSE2" 0550 LOAD T "@VSMENU" 0560 REM % KEYBOARD TRANSLATION TABLE 0570 REM NORMAL (NO ENDI) KEYS 0580 T$(1) = HEX(00010203040506072B090A0B0CC40E0F) 0590 T$(2) = HEX(101112131415161718191A1B1C1D1E1F) 0600 T$(3) = HEX(2CEEC5ECEBEAE845E6E5E7E43893B298) 0610 T$(4) = HEX(656E6D6C6B6A69686766C646B864AAB7) 0620 T$(5) = HEX(EDCFBBBDCDDDCCCBCAD8C9C8C7B9BAD7) 0630 T$(6) = HEX(D6DFDCCEDBD9BCDEBEDABFD55C55E9AF) 0640 T$(7) = HEX(604F3B3D4D5D4C4B4A58494847393A57) 0650 T$(8) = HEX(565F5C4E5B593C5E3E5A3F7B7C7D7E7F) 0660 T$(9) = HEX(808182833685868788898A8B8C8D8E8F) 0670 T$(10) = HEX(909192939495969798999A9B9C9D9E9F) 0680 T$(11) = HEX(A012A2A3A4A5A6A7A8A9AAABACADAEAF) 0690 T$(12) = HEX(B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF) 0700 T$(13) = HEX(C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF) 0710 T$(14) = HEX(D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF) 0720 T$(15) = HEX(E0E1E2E3E49AE6E7E8E9EAEBECEDEEEF) 0730 T$(16) = HEX(F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEAF) 0740 REM KEYS WITH ENDI 0750 T1$(1) = HEX(7E7D7C7B7A7978777675747372717011) 0760 T1$(2) = HEX(FEFDFCFBFA2829F7F6D2E2F32E2DF091) 0770 T1$(3) = HEX(20EE22ECEB25E827E6E5E7E42C2D2E2F) 0780 T1$(4) = HEX(656E6D6C6B6A696867663A3B3C643E3F) 0790 T1$(5) = HEX(40414243442829479AD2E24B2E2D4E4F) 0800 T1$(6) = HEX(505152535428295758D2E25B2E2D5E5F) 0810 T1$(7) = HEX(604F3B3D4D5D4C4B4A58494847393A57) 0820 T1$(8) = HEX(707172737475767778797A7B7C7D6F61) 0830 T1$(9) = HEX(808182838485868788898A8B8C8D8E8F) 0840 T1$(10) = HEX(909192939495969798999A9B9C9D9E9F) 0850 T1$(11) = HEX(A0A1A2A3A4A5A6A7A8A9AAABACADAEAF) 0860 T1$(12) = HEX(B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF) 0870 T1$(13) = HEX(C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF) 0880 T1$(14) = HEX(D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF) 0890 T1$(15) = HEX(E0E1E2E3E49AE6E7E8E9EAEBECEDEEEF) 0900 T1$(16) = HEX(F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF) 0910 RETURN 0920 REM *** Translation for Task to do *** ( Special Keys ) 0925 T5$(1) = HEX(01460245034D044C01560255035D045C06000601) 0930 T5$(2) = HEX(06020603060406050606060706080609060A060B) 0935 T5$(3) = HEX(060C060D060E060F061006110612061306140215) 0940 T5$(4) = HEX(0116061706180A190B1A061B041C031D061E061F) 0945 T5$(5) = HEX(07A0074F075F0742075207430753077C077D087E) 0950 T5$(6) = HEX(0D7F09480A490A590B4A0B5A09E5) 0955 REM *** Translation for Task to do *** ( Normal Keys ) 0960 T6$(1) = HEX(0308060D0C820CA107840C81) 0965 RETURN 1000 DEFFN'100(S9$,S0$) : REM Display and Accept EMULATEV (VER 7.00) 1001 S4=1 : S3=01 : S2=0 : S1=0 : T0$=" " 1002 IF POS(S9$=F2)>0 THEN T0$=STR(S9$,POS(S9$=F2)+1,4) 1003 RESTORE LINE 1017 : GOSUB '129 1007 T9=-1 : T3=S4 1008 ON T3GOSUB 1012 1009 ON R1GOTO ,,,,,1011 : RETURN 1010 IF POS(S9$=F5)>0 AND T3=S3THEN RETURN : T3=MOD(T3+1,S3+1) : IF T3=0 THEN T3=S4 : GOTO 1008 1011 T3=MOD(T3-1,S3+1) : IF T3<S4 THEN GOTO 1011 : GOTO 1008 1012 MAT REDIM T1$(001)003 : GOSUB '130(10,67,3,"X",F8$,S0$," "," ",T0$) : IF R1>0 THEN F8$=S4$ : RETURN 1017 DATA 01,12,00,"*****" 1018 DATA 01,20,00,"E M U L A T E V S W O R K S T A T I O N" 1019 DATA 01,64,00,"*****" 1020 DATA 02,20,00,"(c) Copyright Wang Laboratories Inc. 1990" 1021 DATA 03,34,00,"Revision 2.00" 1022 DATA 10,10,00,"Enter communications address of desired 2258 controller:" 1023 DATA 22,48,00,"EXEC/RUN - Emulate VS Workstation" 1024 DATA 23,45,00,"CANCEL/EDIT - Exit" 1025 DATA 0,0,0," " 2000 REM % **** DEFFN'45 - DMS\A0STATUS -- V<0=err 2010 REM /* Response-F6$,len V1-assignment,2200SRV status,disk addr,VDISK stat us * 2020 DEFFN'45 : V=1 : REM construct command : F6$=ALL(00) : STR(F$,7,1)=HEX(52) : STR(F$,6,1) = BIN(#PART-1) AND HEX(0F) OR HEX(50) : $OPEN 2080,#2,#3 : ERRORV=-1 : GOTO 2090 2030 $GIO#2(4500) : ERRORV=-1 : GOTO 2090 2040 $BREAK : FOR D=1 TO 1200 : $IF ON #2,2050 : NEXT D : V=-10 : GOTO 2090 2050 $IF ON #3,2070 : ERRORV=-1 : GOTO 2090 2060 $GIO#3(4550 405F) : $BREAK : FOR D=1 TO 1200 : $IF ON #3,2070 : NEXT D : V=-10 : GOTO 2090 2070 $GIO #3 (4660 4270 8703 8704 1801 C340, F$)F$;STR(F6$,1,VAL(STR(F$,3,2),2 )) : V1=VAL(STR(F$,3,2),2) : GOTO 2090 2080 V=-20 2090 $CLOSE#2,#3 : RETURN 3800 REM SE.SUBS, RELEASE 7.00, (08/23/82) SCREEN SUBROUTINES 3801 DIM T1(8),T2(2),S1$,S2$124,S3$1,S4$80,T1$1,T2$80,T3$1,T4$3 3802 DEFFN'126(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),T1(7),T1(8),T1$(),S0$,S2$,T 2,T9,T$(),S9) : S3$=S2$ : I=20 : GOSUB 3864 : T2,T5=MIN(MAX(1,T2),T1(6)) : $TRAN(T$(),HEX(202E))R : T$(5)="5" : R1=1 : IF S9>1THEN 3806 : IF T9<0THEN 3803 : T$(5)="5" : T3$=S2$ : GOSUB 3831 : S2$=T3$ : IF T9=0THEN 3805 : T2=T5 3803 GOSUB 3835 : GOSUB '130(T0,T1,T1(3),S3$,T1$(T2),S0$," ",T$(),T0$) : T1$(T2)=S4$ : IF T$(10)=" "THEN 3804 : GOSUB '125 : IF R1=-2THEN 3803 3804 IF R1<5OR R1=11OR R1=14THEN 3805 : IF R1=5THEN T2=T2+1 : IF R1=6THEN T2=T2-1 : IF T2>=1AND T2<=T1(6)THEN 3803 3805 RETURN 3806 S8$=S0$ : SELECT PRINT 205(80) : PRINT HEX(0202020F); : $TRAN(S2$,HEX(8520))R : T2=T2-1 3808 T2=MAX(1,MOD(T2+1,T1(6))) : IF STR(T1$(T2),,1)=HEX(00)THEN 3808 3810 IF T9<0THEN 3814 : T5=T2 : FOR T2=1TO T1(6) : IF S9=2THEN 3811 : T4$=STR(S2$,T2,1)&HEX(0F09) : GOTO 3812 3811 IF T2=T5THEN T4$=HEX(8B0E09) : ELSE T4$=HEX(900F09) 3812 GOSUB 3835 : GOSUB 3824 : NEXT T2 : T2=T5 : IF T9=0THEN 3825 3814 IF S9=3THEN S8$=S8$&"DI" : GOSUB 3835 : PRINT HEX(06);AT(T0-1,T1-1); : T8=1 : GOSUB 3839 : IF S9=2AND R1>08AND R1<15THEN 3825 : IF R1<7THEN 3825 : IF S9=2THEN 3818 : IF POS(HEX(8B85)=STR(S2$,T2,1))=0THEN 3819 : ON R1-8GOTO 3815,3816 : GOTO 3819 3815 STR(S2$,T2,1)=HEX(85) : GOTO 3817 3816 STR(S2$,T2,1)=HEX(8B) 3817 T4$=STR(S2$,T2,1)&HEX(0F09) : GOSUB 3824 : I=1 : GOTO 3822 3818 T4$=HEX(900F09) : GOSUB 3824 3819 ON POS(HEX(2008)=T1$)GOTO 3820,3821 : GOSUB 3826 : GOTO 3823 3820 I=1 : GOTO 3822 3821 I=-1 3822 T2=T2+I : T2=MOD(T2,T1(6)) : IF T2=0THEN T2=T1(6) : IF T1$(T2)=" "OR STR(T1$(T2),,1)=HEX(00)THEN 3822 3823 IF S9=3THEN T4$=STR(S2$,T2,1)&HEX(0F09) : ELSE T4$=HEX(8B0E09) : GOSUB 3835 : GOSUB 3824 : GOTO 3814 3824 PRINT HEX(06);AT(T0-1,T1-1); : IF T1$(T2)>" "THEN PRINT HEX(0E);T4$;STR(T1$(T2)); : ELSE IF STR(T1$(T2),,1)>HEX(00)THEN PRINT TAB(T1-1+2);STR(T1$(T2)); : RETURN 3825 $TRAN(S2$,HEX(2085))R : T0=T2 : PRINT HEX(0F0202000F); : IF S2=2THEN RETURN : MAT REDIM T1$(T1(6))1 : T1$()=S2$ : SELECT PRINT 005(80) : RETURN 3826 T1$=OR HEX(20) : S=-1 : IF T2=T1(6)THEN 3827 : FOR I=T2+1TO T1(6) : T3$=STR(T1$(I),1,1)OR HEX(20) : IF T3$<>T1$THEN NEXT I : ELSE S=I 3827 IF T2=1OR S>0THEN 3828 : FOR I=1TO T2-1 : T3$=STR(T1$(I),1,1)OR HEX(20) : IF T3$<>T1$THEN NEXT I : ELSE S=I 3828 IF S>-1THEN T2=S : RETURN 3830 DEFFN'127(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),T1(7),T1(8),T1$(),T$()) : $TRAN(T$(),HEX(202E))R 3831 SELECT PRINT 405(80) : IF T$(7)=" "THEN PRINT HEX(020402000E06); : ELSE PRINT HEX(0F06) : FOR T2=1TO T1(6) : GOSUB 3835 : S2$=T1$(T2) : IF T$(3)=" "OR S2$=" "THEN 3832 : STR(S2$,,LEN(S2$))=ALL(8B) 3832 IF T$(5)>" "THEN $TRAN(S2$,HEX(8520))R : PRINT AT(T0-1,T1-1); : IF STR(S2$,,1)>HEX(00)THEN PRINT STR(S2$,,T1(3)); : NEXT T2 : SELECT PRINT 005(80) : RETURN 3835 IF T$(4)>" "THEN T0=INT((T2-1)/T1(8))*T1(7)+T1(1) : ELSE T0=MOD((T2-1),T1(4))*T1(7)+T1(1) : IF T$(4)>" "THEN T1=MOD((T2-1),T1(8))*T1(5)+T1(2) : ELSE T1=INT((T2-1)/T1(4))*T1(5)+T1(2) : T0=T0+T2(1) : T1=T1+T2(2) : RETURN 3836 IF T0$<>" "THEN GOSUB 3860 : IF T>0THEN GOSUB 3862 : RETURN 3838 T=1 : PRINT HEX(06070E);AT(23,0,40);" Invalid key ignored";AT(T0-1,T1-2+T8); 3839 R1=99 : IF T$(9)=" "THEN PRINT HEX(02050F); : KEYIN T1$,,3845 : GOSUB 3836 : IF T1$>HEX(82)THEN 3838 : IF T$(9)=" "THEN 3841 : IF POS(HEX(8182)=T1$)=0OR POS(S8$=T1$)=0THEN 3838 3841 IF T1$>HEX(82)THEN 3838 : ON POS(HEX(81820D)=T1$)GOTO 3847,3843,3849 : RETURN 3843 R1=1 : RETURN 3845 GOSUB 3836 : IF T1$>HEX(1F)THEN 3846 : IF POS(S8$=T1$)=0THEN 3846 : R1=4 : S0=VAL(T1$) : RETURN 3846 ON POS(HEX(F01F50)=T1$)GOTO 3847,3847,3848 : IF T$(9)=" "THEN ON POS(HEX(7E7F)=T1$)GOTO 3849,3850 : GOTO 3851 3847 R1=0 : RETURN 3848 R1=-1 : RETURN 3849 R1=5 : RETURN 3850 R1=6 : RETURN 3851 T1$=AND HEX(0F) : IF POS(HEX(0203050608090A0C0D)=T1$)>0THEN 3852 : GOTO 3838 3852 $TRAN(T1$,HEX(0B060E05))R : R1=VAL(T1$) : T2$="*PN****EDIuewd**" : IF POS(S8$=STR(T2$,R1,1))>0THEN RETURN : GOTO 3838 3853 ON POS(HEX(2008)=T1$)GOTO 3854,3855 : GOTO 3856 3854 IF T$(4)>" "THEN R1=12 : ELSE R1=14 : GOTO 3856 3855 IF T$(4)>" "THEN R1=13 : ELSE R1=11 3856 I=T1(6) : IF T$(4)=" "THEN 3857 : IF R1=14THEN T2=MOD(T2+T1(8),I) : IF R1=11THEN T2=MOD(T2-T1(8),I) : GOTO 3858 3857 IF R1=14THEN T2=MOD(T2+1,I) : IF R1=11THEN T2=MOD(T2-1,I) 3858 IF T2=0THEN T2=T1(6) : IF T2>T1(6)THEN 3853 : RETURN 3860 FOR I=1TO VAL(STR(T0$,3)) : PRINT HEX(06);AT(VAL(STR(T0$,1))-2+I+T2(1),VAL(STR(T0$,2))+T2(2),VAL(STR( T0$,4))); : NEXT I : T0$=" " : GOSUB 3898 : RETURN 3862 PRINT HEX(06);AT(23,0,40); : T=0 : GOSUB 3898 : RETURN 3864 S1$=HEX(0204)&BIN(I/10)&BIN(MOD(I,10))&HEX(0E) : PRINT STR(S1$,,5); : RETURN 3866 DEFFN'128(S2$,T0,T1,I) : SELECT PRINT 005(80) : IF T0=99THEN PRINT HEX(07); : IF T1=99THEN T1=40-(LEN(S2$)/2) : T0=MIN(24,T0) : T1=MAX(1,T1) : GOSUB 3864 : I=1 : STR(S2$,LEN(S2$)+1,1)=HEX(AF) : S=POS(S2$=HEX(AF)) 3867 PRINT HEX(06);AT(T0-1,T1-1);STR(S2$,I,S-1); : I=I+S : S=POS(STR(S2$,I)=HEX(AF)) : T0=T0+1 : IF S>0THEN 3867 : PRINT HEX(020402000F06); : RETURN 3869 DEFFN'129 : SELECT PRINT 205(80) 3870 READ T0,T1,I,S4$ : ERRORR1=-2 : RETURN 3871 IF T0=0THEN RETURN : T0=T0+T2(1) : T1=T1+T2(2) : IF I=99THEN 3872 : IF I=0THEN PRINT HEX(0F); : ELSE GOSUB 3864 : PRINT HEX(06);AT(T0-1,T1-1);STR(S4$,,LEN(S4$)); : GOTO 3870 3872 PRINT HEX(06);AT(T0-1,T1-1);BOX(VAL(S4$),VAL(STR(S4$,2))) : GOTO 3870 3874 DEFFN'130(T0,T1,T5,S2$,S4$,S8$,T2$,T$(),T0$) : SELECT PRINT 405(80) : PRINT HEX(0202000F020402000E); : $TRAN(T$(),HEX(202E))R : IF T2$>" "THEN PRINT HEX(060F);AT(T0-1,T1-2-LEN(T2$));T2$;HEX(0E); : S2$=ALL(S2$) : T6=POS("H#X"=S2$) : PRINT HEX(0202020F); : T8=1 : IF T$(9)>" "THEN 3876 : GOSUB 3897 : IF S8$<>" "THEN S8$=S8$&"IDEew" : ELSE S8$="IDEew" 3876 GOSUB 3839 : IF T$(9)>" "THEN 3905 : IF R1<7THEN 3899 : IF R1=11OR R1=14THEN 3899 : ON R1-7GOTO 3880,3884,3882,3876,3886,3890,3876 : IF T1$=HEX(08)THEN 3890 : IF T8<=T5THEN 3878 : PRINT HEX(07); : GOTO 3876 3878 STR(S4$,T8,1)=T1$ : $TRAN(T1$,HEX(8020))R : IF T$(3)=" "THEN PRINT HEX(0E);T1$; : ELSE PRINT HEX(0E8B); : GOTO 3887 3880 IF T5<T8THEN 3876 : STR(S4$,T8)=" " : GOSUB 3897 : GOTO 3876 3882 IF T5<T8THEN 3876 : MAT COPY -S4$<T8,T5-T8>TO -S4$<T8+1,T5-T8> : STR(S4$,T8,1)=" " : GOSUB 3897 : GOTO 3876 3884 IF T5<T8THEN 3876 : MAT COPY S4$<T8+1,T5-T8>TO S4$<T8,T5-T8> : STR(S4$,T5,1)=" " : GOSUB 3897 : GOTO 3876 3886 IF T8<T5+1THEN PRINT HEX(09); 3887 IF T8<>T5THEN 3888 : IF T$(1)=" "THEN 3888 : R1=5 : GOTO 3899 3888 T8=MIN(T5+1,T8+1) : GOTO 3876 3890 IF T8>1THEN 3891 : IF T$(2)=" "THEN 3876 : R1=6 : GOTO 3899 3891 PRINT HEX(08); : T8=T8-1 : IF T1$<>HEX(08)THEN 3876 : STR(S4$,T8,1)=" " : PRINT HEX(8508); : GOTO 3876 3892 PRINT HEX(06070E);AT(23,0,50);T2$; : T=1 : GOSUB 3898 : GOTO 3876 3893 T2$=" Invalid key ignored" : GOTO 3892 3894 T2$=" Information required, please enter" : GOTO 3892 3895 T2$=" Invalid characters in field" : GOTO 3892 3897 PRINT HEX(06);AT(T0-1,T1-1); : T2$=S4$ : IF T$(3)>" "AND T2$>" "THEN STR(T2$,,LEN(T2$))=ALL(8B) : $TRAN(T2$,HEX(8520))R : PRINT STR(T2$,,T5); 3898 PRINT HEX(06);AT(T0-1,T1-2+T8); : RETURN 3899 IF T$(7)=" "OR T$(3)>" "THEN 3900 : PRINT HEX(0F); : GOSUB 3897 3900 $TRAN(S4$,HEX(20802085))R : IF R1<1THEN 3902 : IF S4$=" "AND T$(6)>" "THEN 3894 3902 ON T6GOTO 3904,3903,3905 : GOTO 3904 3903 IF NUM(S4$)<T5THEN 3895 : GOTO 3905 3904 IF S4$>" "AND VER(STR(S4$,,T5),S2$)<T5THEN GOTO 3895 3905 SELECT PRINT 005(80) : PRINT HEX(0F0202000F); : RETURN 3906 % S$="SE.SUBS ": SCRATCH TS$: SAVE <S>T()S$3800,3999: PRINT HEX(0E);S$;H EX(0F);" updated" 9999 DEFFN'31 "SCRATCH T ";HEX(22);"WSESTART";HEX(22);":SAVE T () ";HEX(22);"W SESTART";HEX(22)