ZX81 Program: MP.P


SYSTEM VARIABLES

PROG  : 16509
D-FILE: 22217
VARS  : 23010
E-LINE: 27079
STKBOT: 27079
STKEND: 27079


LEGEND

[A] means INVERSE A
{A} means GRAPHICS A
PRINT means treat as KEYWORD P


PROGRAM LISTING

   1 REM ****    TABULAR    ****         ****WORD  PROCESSOR****
   2 REM ****BY: STEVEN REID****
   8 FAST
   9 CLS
  10 GOSUB 1000
  15 GOSUB 4000
  20 DIM A$(4,620)
  21 DIM X$(640)
  22 FOR Z=1 TO 4
  24 PRINT AT 21,0;"TEXT PAGE BEING ENTERED IS ";Z;AT 3,11;"TABULAR";AT 5,9;"BY:STEVEN REID";AT 15,0;"ENTER IN TEXT ADDING A SPACE AT THE END OF EACH LINE.(EX:       HELLO ALL YOU BOYS AND GIRLS... )THE TEXT SHOULD START EACH LINEJUST PAST THE QUOTATION."
  25 INPUT X$
  26 FOR S=0 TO 19
  27 LET A$(Z,31*S+1 TO 31*(S+1))=X$(32*S+1 TO 32*(S+1))
  35 NEXT S
  36 NEXT Z
  37 GOSUB 5900
  38 FOR S=1 TO 620 STEP 31
  39 LET S$=A$(Z,S TO S+30)
  40 GOSUB 3000
  50 FOR P=1 TO LEN S$
  60 LET C=CODE S$(P)-37
  61 IF C=-37 OR C=91 THEN LET C=27
  62 IF C=117 THEN LET C=28
  63 IF C=115 THEN LET C=29
  64 IF C=107 THEN LET C=30
  65 IF C=108 THEN LET C=31
  66 IF C=118 THEN LET C=32
  67 IF C=104 THEN LET C=33
  68 IF C=111 THEN LET C=34
  69 IF C=114 THEN LET C=35
  70 IF C=113 THEN LET C=36
  71 IF C=105 THEN LET C=37
  76 IF C>63 THEN LET C=C-63
  77 IF C<1 THEN LET C=C+65
  78 GOSUB 5000
  79 IF INKEY$="S" THEN GOTO 6000
  80 NEXT P
  90 GOSUB 2000
  95 NEXT S
 100 GOTO 6000
 110 LET C=27
 120 GOTO 72
 200 FAST
 210 LET A$(Z,1 TO 610)=""
 220 LET Z=Z-(Z>1)+(Z=1)
 230 GOTO 6000
 500 FAST
 501 CLS
 510 PRINT AT 21,0;"TEXT PAGE BEING ENTERED IS ";Z;AT 3,3;"TABULAR GO OVER MODE...";AT 15,0;"ENTER IN TEXT ADDING A SPACE AT THE END OF EACH LINE.(EX:       HELLO ALL YOU BOYS AND GIRLS... )THE TEXT SHOULD START EACH LINEJUST PAST THE QUOTATION."
 520 INPUT X$
 530 FOR S=0 TO 19
 540 LET A$(Z,31*S+1 TO 31*(S+1))=X$(32*S+1 TO 32*(S+1))
 550 NEXT S
 560 GOTO 6000
1000 REM **INITIAL SETUP**
1001 REM IF PEEK 16388+256*PEEK 16389=31744 THEN GOTO 1030
1010 REM PRINT "MEMORY NOT RESERVED"
1020 REM STOP
1030 FOR I=0 TO 112
1040 POKE 31744+I,PEEK (2161+I)
1050 NEXT I
1060 POKE 31800,63
1070 POKE 31857,201
1080 RETURN
2000 FOR H=0 TO 31
2010 POKE 16444+H,H
2020 NEXT H
2030 LET H=USR 31744
2040 LET L=0
2050 RETURN
3000 FOR I=0 TO 31*8
3010 POKE 32255+I,0
3020 NEXT I
3030 RETURN
4000 DIM L$(91,8)
4010 LET L$(1)="  S{4}W"+CHR$ (68)+"W "
4020 LET L$(2)=" RNDRND"+CHR$ (120)+CHR$ (68)+CHR$ (68)+CHR$ (120)+" "
4030 LET L$(3)="  SRNDRNDRNDS "
4040 LET L$(4)=" {4}{4}W"+CHR$ (68)+CHR$ (68)+"W "
4050 LET L$(5)="  S"+CHR$ (68)+CHR$ (124)+CHR$ (96)+"S "
4060 LET L$(6)=" £(S((( "
4070 LET L$(7)="  S"+CHR$ (68)+CHR$ (68)+"S{4}S"
4080 LET L$(8)=" RNDRND"+CHR$ (120)+CHR$ (72)+CHR$ (72)+CHR$ (72)+" "
4090 LET L$(9)="  ( ((( "
4100 LET L$(10)="  ( ((("+CHR$ (96)
4110 LET L$(11)=" RNDRND"+CHR$ (80)+CHR$ (96)+CHR$ (80)+CHR$ (72)+" "
4120 LET L$(12)=" (((((( "
4130 LET L$(13)="  RND"+CHR$ (104)+CHR$ (84)+CHR$ (84)+CHR$ (84)+" "
4140 LET L$(14)="  RND"+CHR$ (112)+CHR$ (72)+CHR$ (72)+CHR$ (72)+" "
4150 LET L$(15)="  S"+CHR$ (68)+CHR$ (68)+CHR$ (68)+"S "
4160 LET L$(16)="  "+CHR$ (120)+CHR$ (68)+CHR$ (68)+CHR$ (120)+"RNDRND"
4170 LET L$(17)="  S"+CHR$ (68)+CHR$ (68)+"S{A}£"
4180 LET L$(18)="  "+CHR$ (88)+CHR$ (100)+"RNDRNDRND "
4190 LET L$(19)="  SRNDS{4}S "
4200 LET L$(20)=" ((S((( "
4210 LET L$(21)="  "+CHR$ (68)+CHR$ (68)+CHR$ (68)+CHR$ (76)+"O "
4220 LET L$(22)="  "+CHR$ (68)+CHR$ (68)+CHR$ (68)+"C( "
4230 LET L$(23)="  "+CHR$ (84)+CHR$ (84)+CHR$ (84)+CHR$ (84)+"C "
4240 LET L$(24)="  "+CHR$ (68)+"C(C"+CHR$ (68)+" "
4250 LET L$(25)="  "+CHR$ (68)+CHR$ (68)+CHR$ (68)+"C("+CHR$ (96)
4260 LET L$(26)="  "+CHR$ (124)+"{A}(4"+CHR$ (124)+" "
4270 LET L=28
4280 FOR A=0 TO 63
4290 FOR J=0 TO 7
4300 LET P=7688+(A-1)*8
4310 LET L$(L,J+1)=CHR$ (PEEK (P+J))
4320 NEXT J
4330 LET L=L+1
4340 NEXT A
4350 LET L$(28)=" 4RND     "
4360 LET L$(29)=" MO{A}(G"+CHR$ (76)+" "
4370 LET L$(30)=" 0((((0 "
4380 LET L$(31)=" S{A}{A}{A}{A}S "
4390 LET L$(32)=" (((( ( "
4400 LET L$(33)=" {A}0CC0{A} "
4410 LET L$(34)="  C"+CHR$ (124)+"C"+CHR$ (124)+"C "
4420 LET L$(35)=" WPI"+CHR$ (90)+CHR$ (92)+"RNDY "
4430 LET L$(36)="  RND4({A}{4} "
4440 LET L$(37)=" (((((( "
4999 RETURN
5000 FOR I=1 TO 8
5010 POKE 32255+I+P*8,CODE L$(C,I)
5020 NEXT I
5030 RETURN
5900 LET Z=1
6000 GOSUB 7000
6010 PRINT "[F]ORWARD/[B]ACKWARD/[G]O OVER/[R]ESTART"
6015 SLOW
6020 PRINT "[E]DIT/[L]PRINT/[S]AVE/[D]ELETE/[Q]UIT"
6030 PAUSE 4E4
6040 IF INKEY$="" THEN GOTO 6040
6050 LET O$=INKEY$
6060 IF O$="L" THEN FAST
6070 IF O$="L" THEN GOTO 38
6080 IF O$="E" THEN GOTO 8000
6090 IF O$="R" THEN RUN
6091 IF O$="F" THEN LET Z=Z+(Z<4)
6092 IF O$="B" THEN LET Z=Z-(Z>1)
6093 IF O$="B" OR O$="F" THEN FAST
6094 IF O$="B" OR O$="F" THEN GOTO 6000
6100 IF O$="Q" THEN STOP
6101 IF O$="D" THEN GOTO 200
6102 IF O$="G" THEN GOTO 500
6110 IF O$<>"S" THEN GOTO 6040
6120 CLS
6130 PRINT "[D]O YOU WISH TO SAVE JUST THE    PROGRAM/[O]R IT AND ALL ITS DATA?"
6140 IF INKEY$="D" THEN GOTO 6300
6150 IF INKEY$<>"O" THEN GOTO 6140
6155 PAUSE 4E4
6200 PRINT ,,,,,,"PLACE IN TAPE AND PRESS ANY KEY."
6230 IF INKEY$="" THEN GOTO 6230
6240 PRINT "[S][A][V][E][I][N][G][ ][T][A][B][U][L][A][R][(][L][O][A][D][ ][M][P][)]"
6250 PAUSE 100
6260 SAVE "M[P]"
6270 GOTO 6000
6300 CLEAR
6310 PRINT ,,,,,,"PLACE IN TAPE AND PRESS ANY KEY."
6315 PAUSE 4E4
6320 IF INKEY$="" THEN GOTO 6320
6330 PRINT "[S][A][V][E][I][N][G][ ][T][A][B][U][L][A][R][(][L][O][A][D][ ][M][P][)]"
6340 PAUSE 100
6350 SAVE "M[P]"
6360 RUN
7000 CLS
7010 FOR A=1 TO 620 STEP 31
7020 PRINT A$(Z,A TO A+30)
7030 NEXT A
7040 RETURN
8000 FAST
8010 LET X=0
8020 LET Y=0
8025 GOSUB 7000
8026 LET O=CODE A$(Z,X*31+Y+1)
8030 LET O=O+(128 AND O<63)-(128 AND O>63)
8040 LET Z$=CHR$ O
8050 PRINT AT X,Y;Z$;AT 21,0;"[1]RETURN/[0]CORRECT/[5][6][7][8]DIRECTION"
8060 PAUSE 4E4
8070 LET O$=INKEY$
8090 IF O$="1" THEN GOTO 6000
8100 IF O$="0" THEN GOTO 8500
8105 PRINT AT X,Y;A$(Z,X*31+Y+1)
8110 LET X=X+(O$="6" AND X<19)-(O$="7" AND X>0)
8120 LET Y=Y+(O$="8" AND Y<30)-(O$="5" AND Y>0)
8130 GOTO 8025
8500 INPUT O$
8510 LET A$(Z,X*32+Y+1)=O$
8520 GOTO 8025