Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!ucsd!ucbvax!ndsuhp.UUCP!hernes From: hernes@ndsuhp.UUCP Newsgroups: comp.sys.handhelds Subject: less for the '48 Message-ID: <9005072046.AA15468@plains.NoDak.edu> Date: 7 May 90 20:46:43 GMT Sender: daemon@ucbvax.BERKELEY.EDU Distribution: inet Organization: The Internet Lines: 133 Hi all, The following progs form a simple string viewer for the '48. There are two main progs. One STR->GROB takes a long string, breaks it at either a newline ot at 22 characters, then converts it into a grob. This has the benefit that you can view any of the three different character sizes, or you can upload it and look at it on a pc, or mix it with graphics, etc..... The other program is probably a little more useful, 'Less' takes a string from the stack, breaks it up as described above, then views one 'page' at a time. It was written to be easy to expand. Currently, the only functions supported are page up, page down, line up, line down, quit, go to top, and go to end. The default key-bindings are set for B-F and right shift B & C. The key-bindings can be changed, or added simply by changing the key number in the CASE statement, or by adding a "OVER (new-key-number-here) SAME OR" to the test-clause in the CASE statement. --- Eric L. Hernes I. ======================= Here are the progs: %%HP: T(3)A(D)F(.); STR\->GROB \<< SPLIT DEPTH \->LIST \-> A \<< # 83h A SIZE 8 * R\->B BLANK A 1 SWAP SIZE FOR I A I GET 2 \->GROB # 0h I 1 - 8 * R\->B 2 \->LIST SWAP GOR NEXT \>> \>> %%HP: T(3)A(D)F(.); LL \<< DUP 7 + SUB 1 7 FOR ln DUP ln IFERR GET THEN DROP DROP "~" END ln DISP NEXT 1 FREEZE 2 FREEZE DROP \>> %%HP: T(3)A(D)F(.); SPLIT \<< WHILE DUP SIZE 22 > OVER " " POS OR REPEAT DUP " " POS DUP DUP IF 22 \<= AND THEN OVER SWAP 1 SWAP DUP 4 ROLLD 1 - SUB 3 ROLLD 1 + OVER SIZE SUB ELSE DROP DUP 1 22 SUB SWAP 23 OVER SIZE SUB END END DUP "" == IF THEN DROP END \>> %%HP: T(3)A(D)F(.); Less \<< SPLIT DEPTH \->LIST 1 RCLMENU RCLF \-> A L men FLAG \<< 64 SF -49 -50 CF CF WHILE 64 FS? REPEAT A L LL L 6 + A SIZE / 100 * IP DUP 100 < SWAP \->STR "%" + "END" IFTE { "P\|v" "P\|^" "\|v" "\|^" "QUIT" } + TMENU -1 WAIT CASE DUP 12.1 SAME THEN DROP L DUP 7 + A SIZE < 7 * + 'L' STO END DUP 13.1 SAME THEN DROP L 7 - DUP 1 \>= SWAP 1 IFTE 'L' STO END DUP 14.1 SAME THEN DROP L DUP 1 + A SIZE < + 'L' STO END DUP 15.1 SAME THEN DROP L DUP 1 - 0 > - 'L' STO END DUP 16.1 SAME THEN DROP FLAG STOF 64 CF men MENU END DUP 12.3 SAME THEN DROP A SIZE 6 - 'L' STO END DUP 13.3 SAME THEN DROP 1 'L' STO END END END \>> \>>