β # TITORPOINT VISUAL TEXT DISPLAY SYSTEM
β
β TITORPOINT IS A SIMPLE INTERACTIVE SYSTEM FOR DISPLAYING AND
β EDITING SCREENS OF TEXT. (THINK LESS AND ED ON UNIX SYSTEMS,
β BUT WITH TITORPOINT YOU EDIT EACH SCREEN SEPARATELY.)
β
β TITORPOINT HAS BEEN DESIGNED FOR USE WITH IBM 5100 PORTABLE
β COMPUTERS EQUIPPED WITH APL LANGUAGE SUPPORT AND AT LEAST
β 32 KB OF RAM. THE IBM 5100 HAS A 64Γ16 DISPLAY, BUT OWING TO
β LIMITATIONS ON HOW YOU CAN PRINT TEXT IN APL, TITORPOINT
β TRADES IN 64Γ15 TEXT SCREENS.
β
β ## INSTALLATION
β
β TO LOAD TITORPOINT INTO YOUR IBM 5100 (RUNNING APL), TYPE IN
β THE REMAINDER OF THIS FILE BY HAND, SUBSTITUTING UNDERLINED
β CHARACTERS FOR ANY lowercase LETTERS YOU ENCOUNTER. (THE IBM
β 5100 HAS NO LOWERCASE LATIN CHARACTERS, AS YOU MAY HAVE
β GUESSED BY THE ENTHUSIASM OF THIS DOCUMENTATION; MEANWHILE,
β UNICODE LACKS SINGLE-CODEPOINT UNDERLINED CHARACTERS.)
β
β ALTERNATIVELY, EMAIL STEPLETON@GMAIL.COM FOR INSTRUCTIONS ON
β WHERE TO SEND A DC 300 TAPE CARTRIDGE WITH RETURN POSTAGE. A
β DC 6150 CARTRIDGE MAY ALSO WORK. TAPE CARTRIDGES MUST BE IN
β GOOD WORKING CONDITION.
β
β ## USAGE
β
β TO START TITORPOINT, RUN 'PRESO'. IF YOU HAVE ALREADY CREATED
β TEXT SCREENS IN YOUR WORKSPACE, TITORPOINT WILL RESUME
β WORKING WITH THOSE. OTHERWISE TITORPOINT WILL INITIALISE
β ITSELF WITH A SINGLE BLANK SCREEN.
β
β TITORPOINT STARTS IN DISPLAY MODE, WHERE IT PAGES THROUGH
β EXISTING SCREENS OF TEXT. AFTER EACH SCREEN, PRESS EXECUTE TO
β MOVE TO THE NEXT SCREEN, OR TYPE β AND PRESS EXECUTE TO MOVE
β TO THE PREVIOUS ONE. OTHER COMMAND CHARACTERS AVAILABLE ARE:
β
β - D: RE-DISPLAY THE CURRENT SCREEN.
β - #: SHOW THE CURRENT SCREEN NUMBER.
β - J: JUMP TO A DIFFERENT SCREEN NUMBER.
β - e: EDIT THE CURRENT SCREEN.
β - d: DELETE THE CURRENT SCREEN.
β - i: INSERT A BLANK SCREEN BEFORE THE CURRENT SCREEN.
β - a: INSERT A BLANK SCREEN AFTER THE CURRENT SCREEN.
β - Q: QUIT TITORPOINT.
β - q: QUIT TITORPOINT AND CLEAN UP TEMPORARY VARIABLES.
β - ?: LIST COMMAND CHARACTERS.
β
β NOTE THAT QUITTING TITORPOINT WITH Q MEANS THAT WHEN YOU
β RESTART TITORPOINT, IT WILL RESUME WORKING IN THE SAME PLACE
β WHERE YOU LEFT OFF. IF YOU QUIT WITH q, TITORPOINT WILL
β RESUME AT SCREEN 1.
β
β THE e COMMAND PLACES TITORPOINT INTO EDIT MODE FOR THE,
β CURRENT TEXT SCREEN, WHICH GREETS YOU WITH A '>:' PROMPT.
β HERE YOU ENTER A COMMAND CHARACTER FOLLOWED OPTIONALLY BY
β NUMBERS IDENTIFYING THE ROWS (OR COLUMNS) TO WHICH THE
β COMMAND APPLIES, COUNTING UP FROM 1. WITHOUT NUMBERS, THE
β COMMAND IS ASSUMED TO APPLY TO ALL ROWS (OR COLUMNS). COMMAND
β CHARACTERS ARE:
β
β - P: PRINT SPECIFIED LINES.
β - E: EDIT SPECIFIED LINES, ONE BY ONE. WHEN YOU EDIT A
β LINE, ITS ORIGINAL CONTENTS ARE PRINTED ABOVE THE APL
β EDIT AREA, SO YOU CAN USE THE KEYPAD ARROWS TO BRING
β THOSE CONTENTS DOWN TO THE EDIT AREA AND CHANGE THEM.
β ENTER A COMPLETELY EMPTY LINE TO CANCEL THIS COMMAND.
β - C: COPY A LINE. REQUIRES YOU TO SPECIFY AT LEAST TWO LINE
β NUMBERS. TEXT FROM THE FIRST LINE YOU SPECIFY WILL BE
β COPIED TO ALL SPECIFIED LINES. BEWARE THAT SPECIFYING
β NO LINE NUMBERS IS THE SAME AS SPECIFYING LINE NUMBERS
β 1, 2, 3... 15.
β - R: ROLL TEXT IN SPECIFIED LINES. WILL QUERY YOU FOR HOW
β MANY COLUMNS YOU'D LIKE TO ROLL THE TEXT.
β - Z: CLEAR ALL TEXT IN SPECIFIED LINES. BEWARE THAT
β SPECIFYING NO LINE NUMBERS IS THE SAME AS SPECIFYING
β ALL LINE NUMBERS!
β - c: LIKE C, BUT OPERATES ON COLUMNS.
β - r: LIKE R, BUT OPERATES ON COLUMNS.
β - z: LIKE Z, BUT OPERATES ON COLUMNS.
β - B: DRAW A CHARACTER-ART BOX. ANY ARGUMENTS ARE IGNORED.
β - G: LIKE P, BUT BEFORE PRINTING, THE SCREEN TEXT IS
β SUPERIMPOSED ON A GRID WITH LINES ON EVERY FIFTH ROW
β AND COLUMN.
β - Q: LEAVE EDIT MODE. NOTE THAT THE IBM 5100 WILL TAKE
β AROUND A MINUTE FOR DISPLAY MODE TO BE READY AGAIN.
β - ?: LIST COMMAND CHARACTERS.
β
β ## THEORY OF OPERATION
β
β TITORPOINT STORES SCREEN DATA AS PAIRS OF VARIABLES WITHIN
β THE CURRENT WORKSPACE. THE FIRST SCREEN IS KEPT IN VARIABLES
β I1 AND T1, THE SECOND IN I2 AND T2, AND SO ON. EACH PAIR
β INTENDS TO BE A LIGHTLY COMPRESSED REPRESENTATION OF THE
β SCREEN: FOR SCREEN Γ, TΓ IS ALL OF THE TEXT DATA WITH LONG
β RUNS OF SPACES OMITTED, AND IΓ INDICATES WHERE PORTIONS OF
β THE TEXT DATA APPEARS IN THE UNCOMPRESSED SCREEN.
β
β TITORPOINT KEEPS TEMPORARY STATE IN THREE GLOBAL VARIABLES:
β
β - n: THE TOTAL NUMBER OF SCREENS IN THE WORKSPACE.
β - k: THE NUMBER OF THE CURRENT SCREEN.
β - t: A 3Γ960 TEXT ARRAY; T[1;] IS THE UNCOMPRESSED TEXT OF
β SCREEN k-1, T[2;] IS THE TEXT OF SCREEN k, and T[3;]
β IS THE TEXT OF SCREEN k+1. ADJACENT SCREENS ARE
β 'PRE-DECOMPRESSED' IN THIS WAY FOR A BETTER PAGING
β EXPERIENCE.
β
β ## NOBODY OWNS TITORPOINT
β
β THIS PROGRAM AND ANY SUPPORTING PROGRAMS, SOFTWARE LIBRARIES,
β AND DOCUMENTATION DISTRIBUTED ALONGSIDE IT ARE RELEASED INTO
β THE PUBLIC DOMAIN WITHOUT ANY WARRANTY. SEE THE LICENSE FILE
β FOR DETAILS.
β
β ## ACKNOWLEDGEMENTS
β
β GRATEFUL THANKS TO
β
β - BITSAVERS.ORG AS USUAL, FOR ARCHIVED IBM 5100 TECHNICAL
β DOCUMENTATION.
β - YOUTUBE USER 'CONVERGENT MIGHTYFRAME', FOR VIDEOS ON HOW
β TO REFURBISH DC 300 TAPE CARTRIDGES.
β
β ## WHO, WHERE, WHEN
β
β TOM STEPLETON, LONDON, 2019-10-26
β PRESO
[1] β TITORPOINT DISPLAY SYSTEM
[2] prINI 'PATIENCE...'
[3] UI1:ββ(βk),'/',βn
[4] ββt[2;]
[5] UI2:βUI2+'D# βJedia?Qq'β³Β―1β' ',β
[6] βUI1
[7] βUI2,0β΄ββ(βk),'/',βn
[8] βUI2,0β΄prGO 1,0β΄ββt[3;],0β΄ββ(βnβk+1),'/',βn
[9] βUI2,0β΄prGO Β―1,0β΄ββt[1;],0β΄ββ(β1βk-1),'/',βn
[10] βUI2,0β΄ββ(βprINI kβ1βnββ,0β΄ββ'PAGE?'),'/',βn
[11] βUI1,0β΄k iS t[2;]βEDIT t[2;]
[12] βUI2,0β΄ββ(βk),'/',βnβprINI n prDEL k
[13] βUI2,0β΄ββ(βk),'/',βnβprINI n prINS k
[14] βUI2,0β΄ββ(βk),'/',βnβprINI n prINS kβk+1
[15] βUI2,0β΄(ββ''),ββprHLP
[16] β0
[17] β0,0β΄βEX 3 1 β΄'nkt'
[18] βUI2,0β΄ββ'NO.'
β
β TβEDIT TIN;C;A;a
[1] β TITORPOINT PAGE EDITOR
[2] Tβ 15 64β΄TIN[β³960ββ΄TIN],(0β960-β΄TIN)β΄' '
[3] UI:ββ'>:'
[4] Cβ2ββ
[5] βUIΓβ³0=β΄C
[6] Aβ15 edI 1βC
[7] aβ64 edI 1βC
[8] βJMP+'PECRZcrzBG?Q'β³1βC
[9] JMP:
[10] βUI,0β΄TβT edPRT A
[11] βUI,0β΄TβT edEDT A
[12] βUI,0β΄TβT edCPY A
[13] βUI,0β΄TβT edROL A
[14] βUI,0β΄TβT edZAP A
[15] βUI,0β΄Tββ(βT) edCPY A
[16] βUI,0β΄Tββ(βT) edROL A
[17] βUI,0β΄Tββ(βT) edZAP A
[18] βUI,0β΄TβedBOX T
[19] βUI,0β΄TβT edGPT A
[20] βUI,0β΄(ββ''),ββedHLP
[21] βDONE
[22] βUI
[23] DONE:Tβ,T
β
β MβN prDEL L
[1] β FOR PRESO: DELETE PAGE K
[2] MβN
[3] MOV:βOUTΓβ³Mβ₯N
[4] β'I',(βM),'βI',βM+1
[5] β'T',(βM),'βT',βM+1
[6] MβM+1
[7] βMOV
[8] OUT:MβN-1
[9] KββEX 'I',βN
[10] KββEX 'T',βN
β
β TβprEXP K
[1] β FOR PRESO: eXPANDO PAGE K
[2] Tβ960β΄' '
[3] β0Γβ³n<1
[4] Kβ1βnβK
[5] Tββ'I',(βK),' eXPANDO T',βK
β
β KβprGO D
[1] β FOR PRESO: PAGE FORWARD (D>0) OR BACK (D<0)
[2] Kβk+D
[3] β0Γβ³0=DβΓD
[4] β0Γβ³(1>K)β¨n<K
[5] kβK
[6] tβDβt
[7] t[2+D;]βprEXP k+D
β
β oβprINI O
[1] β FOR PRESO: INITIALISE GLOBAL STATE IF NEEDED
[2] oβO
[3] A:βBΓβ³1βnβprNUM
[4] prNEW nβ1
[5] B:βCΓβ³2=βNC 'k'
[6] kβ1
[7] C:kβ1βkβnβ(,k)[1]
[8] tβ 3 960 β΄(prEXP k-1),(prEXP k),prEXP k+1
β
β MβN prINS K
[1] β FOR PRESO: INSERT A PAGE BEFORE PAGE K
[2] MβN
[3] MOV:βOUTΓβ³M<K
[4] β'I',(βM+1),'βI',βM
[5] β'T',(βM+1),'βT',βM
[6] MβM-1
[7] βMOV
[8] OUT:MβN+1
[9] prNEW K
β
β prNEW K
[1] β FOR PRESO: CREATE/CLEAR PAGE K
[2] β'I',(βK),'β2 0β΄0'
[3] β'T',(βK),'β0β΄'''''
β
β prNUM K
[1] β FOR PRESO: COUNT HOW MANY PAGES ARE DEFINED
[2] NββIO-1
[3] INC:NβN+1
[4] βINCΓβ³1ββNC 'I',βN
[5] NβN-1
β
β N prSWP K;T;I
[1] β FOR PRESO: SWAP PAGES N AND K
[2] NββN
[3] KββK
[4] Tββ'T',K
[5] Iββ'I',K
[6] β'T',K,'βT',N
[7] β'I',K,'βI',N
[8] β'T',N,'βT'
[9] β'I',N,'βI'
β
β TβedBOX TIN;TL;BR;C;CQ
[1] β FOR EDIT: DRAW A BOX WITH A USER-SPECIFIED SHAPE
[2] TβTIN
[3] UI:ββ'TOP LEFT CORNER? (ROWS,COLS)'
[4] TLβqUERYRC
[5] ββ'BOTTOM RIGHT CORNER? (ROWS,COLS)'
[6] BRβqUERYRC
[7] βUIΓβ³β¨/BR<TL
[8] Cβ'Β―β£_β£β£β£β£β£'
[9] ββ'BOX CHARACTERS? (TOP,RIGHT,BOTTOM,LEFT,TL,TR,BR,BL)'
[10] ββC
[11] CQββ
[12] C[β³8ββ΄CQ]βCQ[β³8ββ΄CQ]
[13] T[TL[1];TL[2]+0,β³BR[2]-TL[2]]βC[1]
[14] T[TL[1]+0,β³BR[1]-TL[1];BR[2]]βC[2]
[15] T[BR[1];TL[2]+0,β³BR[2]-TL[2]]βC[3]
[16] T[TL[1]+0,β³BR[1]-TL[1];TL[2]]βC[4]
[17] T[TL[1];TL[2]]βC[5]
[18] T[TL[1];BR[2]]βC[6]
[19] T[BR[1];BR[2]]βC[7]
[20] T[BR[1];TL[2]]βC[8]
β
β TβTIN edCPY I
[1] β FOR EDIT: COPY LINE 1βI to LINES 1βI
[2] TβTIN
[3] β0Γβ³2>β΄I
[4] T[1βI;]β((Β―1+β΄I),1ββ΄T)β΄T[1βI;]
β
β TβTIN edEDT I;K;IN
[1] β FOR EDIT: EDIT SPECIFIED LINES I
[2] Kβ0
[3] TβTIN
[4] LOOP:β0Γβ³(β΄I)<KβK+1
[5] ββT[I[K];]
[6] INββ
[7] β0Γβ³0=β΄IN
[8] T[I[K];]βIN[β³64ββ΄IN],(0β64-β΄IN)β΄' '
[9] βLOOP
β
β TβTIN edGPT I;MAV
[1] β FOR EDIT: PRINT SPECIFIED LINES I ON A 5Γ5 GRID
[2] TβTIN
[3] MAVββAV
[4] MAV[MAVβ³' ']β'β'
[5] MAV[Β―1+(β³26)+MAVβ³'A']ββAV[Β―1+(β³26)+βAVβ³'A']
[6] TIN[5 10 ;]βMAV[βAVβ³TIN[5 10 ;]]
[7] TIN[;5Γβ³12]βMAV[βAVβ³TIN[;5Γβ³12]]
[8] MAVβTIN edPRT I
β
β JβK edI I
[1] β FOR EDIT: COMMAND ARGUMENTS TO NUMBERS; EMPTY MEANS β³K
[2] Jβ1βKβ((-K)ΓKβ β΄IββI,',β³K')βI
β
β TβTIN edPRT I
[1] β FOR EDIT: PRINT SPECIFIED LINES I
[2] ββ(TβTIN)[I;]
[3] β0Γβ³15>β΄I
[4] Iββ
β
β TβTIN edROL I;R
[1] β FOR EDIT: ROLL LINES I TO QUERIED SPECIFICATIONS
[2] TβTIN
[3] UI:ββ'HOW FAR TO ROLL ',(ββ΄I),' ROWS/COLS?'
[4] βUIΓβ³βΌ(β΄Rβ,β)β1,β΄I
[5] T[I;]βRβ½T[I;]
β
β TβTIN edZAP I
[1] β FOR EDIT: CLEAR SPECIFIED LINES I
[2] TβTIN
[3] T[I;]β' '
β
β TβI eXPANDO Z;R;P;IR
[1] β UNSQUEEZE A SQUEEZED TEXT (E.G. AS SAVED BY iS)
[2] β ARGS: Z, T WITH RUNS OF BLANKS REMOVED
[3] β I, THE RESULT OF gETRUNS ON T
[4] β OUT: T, A TEXT UNSQUEEZED INTO 15 SCREEN LINES
[5] Tβ960β΄' '
[6] PβRβ0
[7] LOOP:β0Γβ³(1ββ΄I)<RβR+1
[8] IRββ³I[2;R]
[9] T[I[1;R]+IR]βZ[P+IR]
[10] PβP+I[2;R]
[11] βLOOP
β
β IβgETRUNS M;S;E
[1] β IDENTIFY 'RUNS' (CONTIGUOUS 1S) IN BINARY VECTORS
[2] β ARGS: M, A BINARY VECTOR
[3] β OUT: I, A 2Γ? MATRIX. I[1;K] IS THE INDEX OF THE KTH RUN
[4] β MINUS 1, I[2;K] IS THE LENGTH OF THE KTH RUN
[5] SβΒ―1+(0βM-Β―1β0,M)/β³β΄M
[6] Eβ((0βM-1βM,0)/β³β΄M)-S
[7] IβS,[0.5] E
β
β IβgETMASK T
[1] β GET BINARY MASK FOR TEXT (ALLOWS ONE BLANK BETWEEN WORDS)
[2] β ARGS: T, A TEXT STRING
[3] β OUT: M, A MASK FOR WORD RUNS
[4] Mβ' 'β T
[5] Mβ(Mβ¨1βM,0)β§Mβ¨Β―1β0,M
β
β IβN iS T;M
[1] β SAVE A SQUEEZED TEXT TO GLOBAL VARIABLES
[2] β ARGS: T, A TEXT STRING; N, A NON-NEGATIVE NUMBER
[3] β SETS: T<N>, THE TEXT WITH RUNS OF BLANKS REMOVED
[4] β I<N>, THE RESULT OF gETRUNS ON T
[5] β OUT: IGNORE
[6] MβgETMASK T
[7] iβgETRUNS M
[8] β'T',(βN),'βM/T'
[9] Iβ0β΄β'I',(βN),'βI'
β
β RCβqUERYRC
[1] β GET A SCREEN COORDINATE FROM THE USER
[2] β OUT: RC, A 2-VECTOR, 1β€RC[1]β€15, 1β€RC[2]β€64
[3] UI:RCβ,β
[4] βUIΓβ³2β β΄RC
[5] βUIΓβ³βΌβ§/(0 0 <RC)β§ 15 64 β₯RC
β
prHLPβ' )NEXT β)PREV D)ISPLAY i)NSERT a)PPEND e)DIT d)ELETE #)POSITION J)UMP ?)HELP Q)UIT Q)UIT+'
edHLPβ'P)RINT E)DIT C)OPY R)OLL Z)AP c)OPYV r)OLLV z)APV B)OX G)RIDPRINT ?)HELP Q)UIT'-
Notifications
You must be signed in to change notification settings - Fork 0
A VISUAL TEXT DISPLAY SYSTEM FOR THE IBM 5100 PORTABLE COMPUTER
License
stepleton/TITORPOINT
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Β | Β | |||
Β | Β | |||
Β | Β | |||
Repository files navigation
About
A VISUAL TEXT DISPLAY SYSTEM FOR THE IBM 5100 PORTABLE COMPUTER
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
