image of READY prompt

Wang2200.org

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)