Listing of file='SE.SUBS' on disk='vmedia/701-2720C.wvd.zip'
# Sector 691, program filename = 'SE.SUBS'
3800 REM SE.SUBS, RELEASE 5.12, (01/27/82) SCREEN MANAGEMENT ROUTINES
3802 DIM T1(8),S1$8,S2$,S4$80,S3$(32)2,T1$1,T2$80,T3$(48)3,T$(10)1,S5$,T4$2
3806 DEFFN'125(T1)
: T9$=HEX(060204)&BIN(INT(ABS(T1/10)))&BIN(MOD(T1,10))&HEX(0E)
: IF T1<0THEN STR(T9$,5,1)=HEX(0F)
: PRINT STR(T9$,,6);
: RETURN
3810 DEFFN'126(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),T1$(),S0$,S2$,I5,T9,T$())
: IF S2$=HEX(A5)THEN T1(8)=T1(3)
: ELSE T1(8)=1
: $TRAN(T$(),HEX(202E))R
: I5=MAX(1,I5)
: T$(5)="5"
: IF S2$=HEX(A5)THEN 3832
3814 IF T9<0THEN 3816
: T$(5)="5"
: IF POS("+-#"=STR(S2$,1,1))>0THEN T$(10)="#"
: GOSUB '127(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),01,T1$(),T$())
: IF T9=0THEN 3828
3816 S4$=STR(T1$(),(I5-1)*T1(3)+1,T1(3))
: T2=I5
: GOSUB 3868
: IF S2$=HEX(A6)THEN STR(T$(),,3)="123"
: GOSUB '130(T0,T1,T1(3),S2$,S4$,S0$," ",T$())
: IF S<1THEN 3828
: STR(T1$(),(I5-1)*T1(3)+1,T1(3))=S4$
: IF S<5THEN 3828
: IF S<7AND S2$=HEX(A6)THEN 3828
: IF S<>99THEN 3824
: IF T$(1)>" "THEN IF T1$<>HEX(08)THEN S=5
: IF T$(2)>" "THEN IF T1$=HEX(08)THEN S=6
3824 IF S=5THEN I5=I5+1
: ELSE I5=I5-1
: IF S2$<>HEX(A6)THEN 3826
: I5=MOD(I5,T1(6))
: IF I5=0THEN I5=T1(6)
: GOTO 3816
3826 IF I5>=1AND I5<=T1(6)THEN 3816
3828 IF T$(7)>" "AND T9<>0THEN GOSUB '127(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),
01,T1$(),T$())
: R1,U=S
: RETURN
3832 T2=I5
: IF T9<0THEN 3835
: FOR T2=1TO T1(6)
: IF STR(T1$(),(T2-1)*I3+1,I3)=" "THEN 3834
: IF T2=I5THEN T4$=HEX(8B0E)
: ELSE T4$=HEX(900F)
: GOSUB 3868
: GOSUB 3846
3834 NEXT T2
: T2=I5
: IF T9=0THEN 3848
3835 IF STR(T1$(),(T2-1)*I3+1,I3)=" "THEN 3836
: GOSUB 3868
: STR(T$(),,3)="123"
: T4$=HEX(8B0E)
: GOSUB 3846
: GOSUB '130(T0,T1,1,HEX(A5)," ",S0$," ",T$())
: IF S<7THEN 3848
: T4$=HEX(900F)
: GOSUB 3846
3836 ON POS(HEX(2008)=T1$)GOTO 3838,3840
: IF I3>0THEN GOSUB 3850
: GOTO 3835
3838 T2=MOD(T2+1,T1(6))
: GOTO 3842
3840 T2=MOD(T2-1,T1(6))
3842 IF T2=0THEN T2=T1(6)
: GOTO 3835
3846 PRINT HEX(06);AT(T0-1,T1-1);HEX(0E0202020F);T4$;
: IF I3>0THEN PRINT HEX(09);STR(T1$(),(T2-1)*I3+1,I3)
: RETURN
3848 T0=T2
: R1=S
: RETURN
3850 MAT SEARCHT1$(),=T1$TO S3$()STEP I3
: I1=0
3852 I1=I1+1
: I=INT((VAL(S3$(I1),2)+I3-1)/I3)
: IF I=0THEN 3856
: IF I<=T2THEN 3852
: T2=I
: GOTO 3858
3856 I=INT((VAL(S3$(1),2)+I3-1)/I3)
: IF I>0THEN T2=I
3858 RETURN
3862 DEFFN'127(T1(1),T1(2),T1(3),T1(4),T1(5),T1(6),T1(8),T1$(),T$())
: IF T1(8)<1OR T1(8)>10THEN T1(8)=1
: $TRAN(T$(),HEX(202E))R
: IF T$(7)=" "THEN GOSUB '125(20)
: ELSE PRINT HEX(0F);
: SELECT PRINT 205(080)
: PRINT HEX(0202020F);
: FOR T2=1TO T1(6)
: IF T$(3)=" "THEN S4$=STR(T1$(),(T2-1)*T1(3)+1,T1(3))
: ELSE S4$=" "
3865 IF T$(10)>" "THEN GOSUB 3869
: IF T$(5)>" "THEN $TRAN(S4$,HEX(8520))R
: GOSUB 3868
: PRINT AT(T0-1,T1-1);STR(S4$,,T1(3));
: NEXT T2
: PRINT HEX(020402000F);HEX(0202000F);
: $TRAN(T1$(),HEX(2085))R
: SELECT PRINT 005(080)
: RETURN
3868 IF T$(4)>" "THEN T0=INT((T2-1)/T1(4))*T1(8)+T1(1)
: ELSE T0=MOD((T2-1),T1(4))*T1(8)+T1(1)
: IF T$(4)>" "THEN T1=MOD((T2-1),T1(4))*T1(5)+T1(2)
: ELSE T1=INT((T2-1)/T1(4))*T1(5)+T1(2)
: RETURN
3869 I=POS(S2$=".")
: IF I=0THEN I=T1(3)
: I1=POS(S4$>"0")
: IF I1>0THEN I=MIN(I,I1)
: IF I>1THEN $TRAN(STR(S4$,,I-1),HEX(2030))R
: RETURN
3872 DEFFN'128(T1$(),I0,T7,T5)
: T6=0
: IF T7<>99THEN 3874
: T7=40-(LEN(T1$())/2)
: GOTO 3876
3874 IF I0<>99THEN GOTO 3876
: IF T1$()>" "AND T7<>99THEN PRINT HEX(07);
: I0=24
: T7=01
: T6=80
: T=1
3876 GOSUB '125(T5)
: IF T1$()<>" "THEN STR(T1$(),POS(-T1$()>HEX(20))+1,1)=HEX(AF)
3878 PRINT AT(I0-1,T7-1,T6);
: IF T1$()=" "THEN GOTO 3880
: $GIO/005(A000)STR(T1$(),,POS(T1$()=HEX(AF))-1)
: MAT COPY STR(T1$(),POS(T1$()=HEX(AF))+1)TO T1$()
: I0=I0+1
: IF T1$()<>" "THEN GOTO 3878
3880 PRINT HEX(020402000F);
: RETURN
3884 DEFFN'129(S1$,I8)
: SELECT PRINT 005(205)
: R1=0
: S8=1
: IF S1$=" "THEN 3890
: IF S1$="DATA"THEN 3894
: DATA LOAD DC OPEN T#I8,S1$
: ERRORE=ERR
: R1=-2
: GOTO 3900
3886 DSKIP #I8,1S
: DATA LOAD DC #I8,S0$()
: ERRORE=ERR
: R1=-2
: GOTO 3900
3890 IF S1$="DATA"THEN 3894
3892 I7=VAL(STR(S0$(),S8))
: IF I7=0THEN RETURN
: I9=VAL(STR(S0$(),S8+1))
: S5=VAL(STR(S0$(),S8+2))
: T2$=STR(S0$(),S8+3,S5)
: GOSUB 3902
: S8=S8+3+S5
: GOTO 3892
3894 READ I7,I9,T5,T2$
: ERRORGOTO 3900
3896 IF I7=0THEN RETURN
: IF T5=99THEN 3898
: IF T5=0THEN PRINT HEX(0F);
: ELSE GOSUB '125(T5)
: GOSUB 3902
: GOTO 3894
3898 PRINT HEX(06);AT(I7-1,I9-1);BOX(VAL(T2$),VAL(STR(T2$,2)))
: GOTO 3894
3900 PRINT AT(23,0,80);HEX(020404000E);"WARNING: can't read screen image, pres
s (-RETURN-)";HEX(0F);
: KEYIN T1$
: IF POS(HEX(F050)=T1$)=0THEN 3900
: RETURN
3902 PRINT HEX(06);AT(I7-1,I9-1);T2$;
: RETURN
3906 DEFFN'130(I9,I7,I2,S2$,S4$,S0$,T2$,T$())
: SELECT PRINT 005(255)
: PRINT HEX(0202020F);
: T=0
: S=99
: I4=1
: IF S2$=" "THEN S2$="X"
: S9=POS("+-#"=STR(S2$,,1))
: IF S9=0THEN 3912
: GOSUB 3869
: IF I>0THEN I4=I
3912 IF T2$>" "THEN PRINT HEX(060F);AT(I9-1,MAX(0,I7-2-LEN(T2$)));T2$;
: PRINT HEX(06020402000F)
3914 $TRAN(STR(S4$,,I2),HEX(8520))R
: IF T$(3)=" "THEN GOSUB 3952
3918 GOSUB 3954
3920 IF T$(9)=" "THEN PRINT HEX(02050F);
: I=1
: KEYIN T1$,,3956
: I=0
: IF T$(9)>" "THEN 3956
: IF T>0THEN GOSUB 3950
: IF T0$<>" "THEN GOSUB 3948
: ON POS(HEX(81820D0884E5A1)=T1$)GOTO 3964,3966,3974,3936,3920,3920,3920
: IF I4<=I2THEN 3922
: PRINT HEX(07);
: GOTO 3920
3922 IF S2$=HEX(A6)THEN 3978
: STR(S4$,I4,1)=T1$
: $TRAN(S4$,HEX(8020))R
: IF T$(3)=" "THEN PRINT HEX(0E);STR(S4$,I4,1);HEX(08);
: ELSE PRINT HEX(0E8B08);
: IF I4=I2AND T$(1)>" "THEN 3978
: GOTO 3934
3924 IF I2<I4THEN 3918
: STR(S4$,I4)=ALL(85)
: PRINT HEX(0E06);STR(S4$,I4,I2-I4+1);
: GOTO 3918
3926 IF S2$<>HEX(A6)THEN 3928
: S4$=HEX(8B)
: T1$=HEX(20)
: PRINT HEX(060E8B);
: GOTO 3978
3928 IF I2<I4THEN 3918
: MAT COPY -S4$<I4,I2-I4>TO -S4$<I4+1,I2-I4>
: STR(S4$,I4,1)=HEX(85)
: IF T$(3)=" "THEN PRINT HEX(0E06);STR(S4$,I4,I2-I4+1);
: GOTO 3918
3930 IF S2$<>HEX(A6)THEN 3932
: S4$,T1$=" "
: PRINT HEX(060E85);
: GOTO 3978
3932 IF I2<I4THEN 3918
: MAT COPY S4$<I4+1,I2-I4>TO S4$<I4,I2-I4>
: STR(S4$,I2,1)=HEX(85)
: IF T$(3)=" "THEN PRINT HEX(0E06);STR(S4$,I4,I2-I4+1);
: GOTO 3918
3934 IF POS(HEX(A5A6)=S2$)>0THEN 3920
: I4=I4+1
: IF I4<I2+2THEN PRINT HEX(09);
: I4=MIN(I2+1,I4)
: GOTO 3920
3936 I4=I4-1
: IF T$(2)>" "THEN IF I4<1THEN 3978
: IF I4>0THEN PRINT HEX(08);
: I4=MAX(1,I4)
: IF I=1THEN 3920
: STR(S4$,I4,1)=HEX(85)
: PRINT HEX(8508);
: GOTO 3920
3938 PRINT HEX(06070E);AT(23,0,80);" Invalid character in field";
3940 T=1
: GOTO 3914
3942 PRINT HEX(06070E);AT(23,0,80);" Information required, please enter";
: GOTO 3940
3944 PRINT HEX(06070E);AT(23,0,80);" Numeric characters only";
: GOTO 3940
3946 PRINT HEX(06070E);AT(23,0,80);" Number too large";
: GOTO 3940
3948 SELECT PRINT 005(80)
: PRINT HEX(06);AT(VAL(STR(T0$,1))-1,VAL(STR(T0$,2))-1,VAL(STR(T0$,3))*VAL(
STR(T0$,4)));
: T0$=" "
: SELECT PRINT 005(255)
3950 PRINT HEX(06);AT(23,0,80);
: T=0
: GOSUB 3954
: RETURN
3952 PRINT HEX(060E);AT(I9-1,I7-1);STR(S4$,,I2);
: RETURN
3954 PRINT AT(I9-1,I7-2+I4);
: RETURN
3956 $TRAN(T1$,HEX(42054306))R
: IF T>0THEN GOSUB 3950
: IF T0$<>" "THEN GOSUB 3948
: IF POS(S0$=T1$)>0THEN 3972
: IF T$(9)>" "THEN 3959
: IF S2$<>HEX(A6)THEN 3958
: $TRAN(T1$,HEX(08462045))R
: ON POS(HEX(0820)=T1$)GOTO 3978,3978
3958 ON POS(HEX(1F7E7F0C0D090A4D4C4A494808)=T1$)GOTO 3964,3974,3976,3934,3936,
3930,3926,3936,3934,3926,3930,3924,3924
3959 ON POS(HEX(50F0424382)=T1$)GOTO 3962,3964,3968,3970,3966
3960 PRINT HEX(0607020402000E);AT(23,0,80);" Invalid key ignored";
: S=99
: T=1
: GOSUB 3954
: GOTO 3920
3962 S=-1
: GOTO 3978
3964 S=0
: GOTO 3978
3966 IF T$(9)>" "THEN IF POS(S0$="E")=0THEN 3960
: S=1
: GOTO 3978
3968 IF POS(S0$="P")=0THEN 3960
: S=2
: GOTO 3978
3970 IF POS(S0$="N")=0THEN 3960
: S=3
: GOTO 3978
3972 S=4
: S0=VAL(T1$)
: IF S0>31THEN 3960
: GOTO 3978
3974 S=5
: GOTO 3978
3976 S=6
3978 $TRAN(S4$,HEX(20802085))R
: IF S<1OR S=2OR S=3OR S=4THEN 3988
: IF POS(HEX(A5A6)=S2$)>0THEN 3988
: IF S4$=" "AND T$(6)>" "THEN 3942
: IF S9=0THEN 3984
: CONVERT S4$TO I
: ERRORGOTO 3944
3982 S5$=S2$
: $TRAN(S5$,HEX(3923))R
: CONVERT S5$TO J
: IF ABS(INT(I))>ABS(INT(J))THEN 3946
: CONVERT ITO S4$,(S2$)
: GOSUB 3869
: GOSUB 3952
: $TRAN(S4$,HEX(2085))R
: GOTO 3988
3984 IF S4$=" "THEN 3988
: I4=0
: FOR I=1TO I2
: IF STR(S4$,I,1)=" "THEN 3986
: IF VER(STR(S4$,I,1),STR(S2$,,1))>0THEN 3986
: I4=I
: I=I2
3986 NEXT I
: IF I4>0THEN 3938
3988 SELECT PRINT 005(80)
: PRINT HEX(020402000F0202000F06)
: R1,U=S
: RETURN
3990 % ---------------------------
3992 %S$="SE.SUBS": SCRATCH TS$: SAVE <S>T()S$3800,3999: PRINT HEX(0E);S$;HEX(
0F);" updated"