home *** CD-ROM | disk | FTP | other *** search
- REM VR3a - A Vertical Text Reader for the Psion S3a
- REM Version 1.00, January 1994
- REM Copyright (C) 1994 Robert Boucher
- REM
- REM This program is free software; you can redistribute it and/or modify
- REM it under the terms of the GNU General Public License as published by
- REM the Free Software Foundation; either version 2 of the License, or
- REM (at your option) any later version.
- REM
- REM This program is distributed in the hope that it will be useful,
- REM but WITHOUT ANY WARRANTY; without even the implied warranty of
- REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- REM GNU General Public License for more details.
- REM
- REM You should have received a copy of the GNU General Public License
- REM along with this program; if not, write to the Free Software
- REM Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- REM
- REM Author: Robert Boucher <boucher@asimov.ocunix.on.ca>
- REM <boucher@sofkin.ca>
- REM
- REM Bugs and Suggestions should be addressed to the author.
-
- APP VR3A
- TYPE $9004
- PATH "\TXT"
- EXT "TXT"
- ICON "\OPD\VR3A.PIC"
- ENDA
-
- PROC MAIN:
- GLOBAL xpos%, ypos% rem vLIB
- GLOBAL fwidth%(8), fheight%(8), fname$(8,8), maxfont%, spwidth%, fontlst$(255) rem vLIB
- GLOBAL fontno%, fontid%, vwidth%, vrows%, statfon% rem vLIB
- GLOBAL maxpag%, pageoff&(500), curpag%, bkmark%(10), fontvpg% rem VPG file info
-
- LOCAL handle%, offset& REM its handle and offset
- GLOBAL filenam$(128), opafile$(128) REM filename from "O" GETCMD$
- LOCAL prevnam$(128)
- LOCAL newpag%
- LOCAL ret%, pageno&
- LOCAL key%, doscan%
-
- vINIT: rem Initialize vertical text library
- CLRvpg: rem Clear VerticalPage variables
-
- newpag%=0 rem Do not draw the page
- doscan%=0 rem Do not scan the keyboard
-
- IF CMD$(3)="O"
- opafile$=CMD$(2)
- key%=512+%N rem OPA "O" Command
- ELSEIF CMD$(3)="C"
- STOP
- ELSE
- key%=512+%o rem OPEN TEXT FILE
- ENDIF
-
- GIPRINT "VR3a v1.00 ╕1994 Robert Boucher"
- PAUSE -40 :KEY
-
- CACHE $3000,$3000
- WHILE 1
- IF newpag%
- gCLS
- STATUS:
- gUPDATE OFF
- BUSY "Showing page "+GEN$(curpag%, 5),2
- LOCK ON
- offset&=SHOWPG&:(handle%, pageoff&(curpag%))
- LOCK OFF
- CACHETIDY
- BUSY OFF
- IF offset&=-1
- maxpag%=curpag%
- ELSE
- pageoff&(curpag%+1)=offset&
- ENDIF
- gUPDATE
- BEEP 5,300
- newpag%=0
- ENDIF
-
- IF doscan%
- DO
- key%=GETK%:
- UNTIL key%<>0
- ELSE
- doscan%=1
- ENDIF
-
- IF key%=512+%n OR key%=13 OR key%=256 rem NEXT PAGE
- IF curpag%=maxpag%
- GIPRINT "On the last page",0
- ELSE
- curpag%=curpag%+1
- newpag%=1
- ENDIF
- ELSEIF key%=512+%p OR key%=257 OR key%=8 rem PREV PAGE
- IF curpag%=1
- GIPRINT "On the first page",0
- ELSE
- curpag%=curpag%-1
- newpag%=1
- ENDIF
- ELSEIF key%=512+ASC("-") OR key%=ASC("-") rem FIRST PAGE
- IF curpag%=1
- GIPRINT "On the first page",0
- ELSE
- curpag%=1
- newpag%=1
- ENDIF
- ELSEIF key%=512+ASC("+") OR key%=ASC("+") rem LAST PAGE
- IF maxpag%
- IF curpag%=maxpag%
- GIPRINT "On the last page",0
- ELSE
- curpag%=maxpag%
- newpag%=1
- ENDIF
- ELSE
- curpag%=curpag%+1
- newpag%=1
- ENDIF
- ELSEIF key%=512+%j OR key%=ASC("/") rem JUMP TO PAGE
- pageno&=curpag%
- LOCK ON
- DO
- dINIT "Jump to page"
- IF maxpag%
- dLONG pageno&, "Page:", &1, maxpag%
- ELSE
- dLONG pageno&, "Page:", &1, curpag%+1
- ENDIF
- dBUTTONS "Cancel", 27, "OK", 13
- ret%=DIALOG
- UNTIL pageno&<>0
- LOCK OFF
- IF ret%
- curpag%=pageno&
- newpag%=1
- ENDIF
- ELSEIF key%=512+ASC("/") rem FULL RESCAN
- RESCAN:(handle%, fontno%, 1, &0)
- WRIVPG:(filenam$)
- READVPG:(filenam$)
- vFONT:(fontvpg%)
- STATUS:
- BEEP 5,300
- dINIT "Rescan Completed"
- dBUTTONS "Continue", 13
- DIALOG
- ELSEIF key%=512+%k rem SCAN TO END
- RESCAN:(handle%, fontno%, curpag%, offset&)
- WRIVPG:(filenam$)
- READVPG:(filenam$)
- vFONT:(fontvpg%)
- STATUS:
- BEEP 5,300
- dINIT "Scan to End Completed"
- dBUTTONS "Continue", 13
- DIALOG
- ELSEIF key%=512+%f OR key%=ASC("*") rem SELECT FONT
- newpag%=SELFON%:
- ELSEIF key%=512+%z OR key%=ASC(".") rem ZOOM IN
- fontvpg%=fontvpg%+1
- IF fontvpg%>maxfont%
- fontvpg%=1
- ENDIF
- vFONT:(fontvpg%)
- newpag%=1
- ELSEIF key%=512+%Z OR key%=ASC(",") rem ZOOM OUT
- fontvpg%=fontvpg%-1
- IF fontvpg%<1
- fontvpg%=maxfont%
- ENDIF
- vFONT:(fontvpg%)
- newpag%=1
- ELSEIF key%=512+%r rem DROP BOOKMARK
- DROPBMK:
- ELSEIF key%=512+%g rem GOTO BOOKMARK
- ret%=curpag%
- JMPBMK:
- IF curpag%<>ret%
- newpag%=1
- ENDIF
- ELSEIF key%=512+%N rem OPA "O" COMMAND
- IF maxpag%
- WRIVPG:(filenam$)
- ENDIF
- IF handle%>0
- ret%=IOCLOSE(handle%)
- ENDIF
- filenam$=opafile$
- SETNAME PARSE$:(opafile$,4)
- GIPRINT "Opening "+PARSE$:(filenam$,4)
- handle%=OPEN%:(filenam$)
- IF handle%=-1
- doscan%=0
- key%=512+%o
- ELSE
- vFONT:(fontvpg%)
- newpag%=1
- ENDIF
- ELSEIF key%=512+%o rem OPEN TEXT FILE
- IF maxpag%
- WRIVPG:(filenam$)
- prevnam$=filenam$
- ENDIF
- IF handle%>0
- ret%=IOCLOSE(handle%)
- ENDIF
- filenam$="\TXT\*.*"
- LOCK ON
- DO
- dINIT "Select a text file to read"
- dFILE filenam$,"Filename:",0
- dBUTTONS "Quit VR", 27, "OK", 13
- ret%=DIALOG
- UNTIL filenam$ <> ""
- LOCK OFF
- IF ret%=0 rem ESC was pressed
- doscan%=0
- key%=27
- ELSE
- GIPRINT "Opening "+PARSE$:(filenam$,4)
- handle%=OPEN%:(filenam$)
- IF handle%=-1
- newpag%=0
- doscan%=0
- key%=512+%o
- ELSE
- vFONT:(fontvpg%)
- newpag%=1
- ENDIF
- ENDIF
- ELSEIF key%=27 rem QUIT
- dINIT "Really Quit?"
- dBUTTONS "No", 27, "Yes", 13
- ret%=DIALOG
- IF ret%
- ret%=IOCLOSE(handle%)
- STOP
- ENDIF
- ELSEIF key%=512+%x rem EXIT
- IF maxpag%
- WRIVPG:(filenam$)
- ENDIF
- ret%=IOCLOSE(handle%)
- STOP
- ELSEIF key%=512+%v OR key%=291 rem ABOUT VR
- ABOUT:
- ELSEIF key%=290 rem MENU
- mINIT
- mCARD "File", "Open new text", %o REM , "Delete text", %d
- mCARD "Page", "Jump to page", %j, "Next page", %n ,"Prev page", %p,"First page", ASC("-"), "Last page", ASC("+")
- mCARD "BookMark", "Drop Bmk", %r, "Goto Bmk", %g
- mCARD "Rescan", "Full rescan", ASC("/"), "Scan to end", %k
- mCARD "Special", "Select font", %f,"Zoom in", %z, "Zoom out", %Z, "About VR", %v, "Exit", %x
- key%=512+MENU
- doscan%=0
- ENDIF
- ENDWH
- ENDP rem MAIN:
-
- REM **********************************
- REM * Vertical Reader Routines
- REM **********************************
-
- PROC ABOUT:
- dINIT "VR3A"
- dTEXT "","Vertical Text Reader",2
- dTEXT "","for the Series 3a",2
- dTEXT "","Version 1.00, January 1994",2
- dTEXT "","Copyright ╕1994 Robert Boucher",2
- dTEXT "","boucher@asimov.ocunix.on.ca",2
- dBUTTONS "OK", 13
- DIALOG
- ENDP rem ABOUT:
-
- PROC OPEN%:(filenam$)
- LOCAL ret%, i%, handle%
- LOCAL filevpg$(128)
-
- ret%=IOOPEN(handle%, filenam$, $0200)
- IF ret%<0
- ALERT("Error Opening "+filenam$,"Error: "+ERR$(ret%))
- RETURN -1
- ENDIF
- filevpg$=PARSE$:(filenam$,7)+".VPG"
- IF EXIST(filevpg$)
- READVPG:(filenam$)
- ELSE
- fontvpg%=6
- maxpag%=0
- curpag%=1
- pageoff&(1)=0
- i%=1
- WHILE i%<=10
- bkmark%(i%)=1
- i%=i%+1
- ENDWH
- ENDIF
- RETURN handle%
- ENDP rem OPEN%:
-
- PROC SELFON%:
- LOCAL ret%, redraw%, showfon%
- LOCAL oldsp%, font&
- oldsp%=spwidth%
- redraw%=0
- showfon%=0
- LOCK ON
- DO
- dINIT "Select Font"
- dLONG font&, "Font:", &1, maxfont%
- dBUTTONS "Cancel", 27, "Show", 32, "OK", 13
- ret%=DIALOG
- IF ret%=0
- RETURN redraw%
- ELSEIF ret%=32
- IF showfon%
- GET
- ELSE
- SHOWFON:
- showfon%=1
- redraw%=1
- ENDIF
- ENDIF
- UNTIL ret%=13
- LOCK OFF
-
- IF font&=fontno%
- RETURN redraw%
- ELSE
- fontvpg%=font&
- vFONT:(fontvpg%)
- maxpag%=0
- RETURN 1
- ENDIF
- ENDP rem SELFON%:
-
- PROC SHOWFON:
- LOCAL i%, str$(21), oldfont%, oldsp%
- oldfont%=fontno%
- oldsp%=spwidth%
-
- gCLS
- vFONT:(statfon%)
- spwidth%=fwidth%(statfon%)
- vAT:(0,0)
- vPRINT:("NO NAME"+CHR$(13)+CHR$(13))
- gUNLOADFONT fontid%
- i%=1
- DO
- gUPDATE OFF
- vFONT:(statfon%)
- spwidth%=fwidth%(statfon%)
- vPRINT:(CHR$(10)+GEN$(i%,-1)+" "+UPPER$(fname$(i%))+CHR$(13)+CHR$(13))
- gUNLOADFONT fontid%
- vFONT:(i%)
- vPRINT:("12345678901234567890"+CHR$(13))
- vPRINT:("abcdefghijABCDEFGHIJ"+CHR$(13))
- gUNLOADFONT fontid%
- i%=i%+1
- UNTIL i%>maxfont%
- gUPDATE
- vFONT:(statfon%)
- spwidth%=fwidth%(statfon%)
- vAT:(0, 479-fheight%(statfon%)-1)
- gSTYLE 4
- str$=" Press any key "
- vPRINT:(str$)
- gSTYLE 0
- spwidth%=oldsp%
- vFONT:(oldfont%)
- GET
- ENDP rem SHOWFON:
-
- PROC STATUS:
- LOCAL str$(21), oldfont%, oldsp%
- oldfont%=fontno%
- oldsp%=spwidth%
- vFONT:(statfon%)
- spwidth%=fwidth%(statfon%)
- REM 1st Status line
- vAT:(0, 479-2*fheight%(fontno%)-3)
- gSTYLE 4
- IF maxpag%=0
- str$="Pag:"+GEN$(curpag%,5)+"/"+GEN$(curpag%+1,5)+" Fnt:"+GEN$(oldfont%,5)
- ELSE
- str$="Pag:"+GEN$(curpag%,5)+"/"+GEN$(maxpag%,5)+" Fnt:"+GEN$(oldfont%,5)
- ENDIF
- str$=str$+REPT$(" ",1+vwidth%-LEN(str$))
- vPRINT:(str$)
- REM 2nd Status line
- vAT:(0, 479-fheight%(fontno%)-1)
- str$="Text: "+LOWER$(PARSE$:(filenam$,6))
- str$=str$+REPT$(" ",1+vwidth%-LEN(str$))
- vPRINT:(str$)
- gSTYLE 0
- spwidth%=oldsp%
- vFONT:(oldfont%)
- ENDP rem STATUS:
-
- PROC SHOWPG&:(handle%, off&)
- LOCAL istream%, ret%, lineout$(255)
- LOCAL tmpstr$(255), c$(1), char$(1), length%
- LOCAL row%, offset&, width%
-
- vAT:(0,0) rem Top-Left Corner
- row%=1
- width%=0
- istream%=handle%
- offset&=off&
- ret%=IOSEEK(istream%,1, offset&)
-
- ret%=IOREAD(istream%, ADDR(c$)+1, 1)
- offset&=offset&+1
- WHILE ret%<>-36 rem EOF
- POKEB ADDR(c$), ret%
-
- IF ASC(c$)=13 rem CR
- c$=""
- ELSEIF ASC(c$)=10 OR ASC(c$)=9 rem NL or TAB
- c$=" "
- ENDIF
-
- IF c$=" "
- IF LEN(lineout$)>1 AND RIGHT$(lineout$,1)<>" "
- lineout$=lineout$+c$
- width%=width%+spwidth%
- ENDIF
- ELSE
- lineout$=lineout$+c$
- width%=width%+fwidth%(fontno%)
- ENDIF
-
- IF width%>160
- tmpstr$=lineout$
- DO
- char$=RIGHT$(tmpstr$, 1)
- tmpstr$=LEFT$(tmpstr$, LEN(tmpstr$)-1)
- IF char$=" "
- BREAK
- ENDIF
- UNTIL tmpstr$=""
-
- length%=LEN(tmpstr$)
- IF length%>0
- vPRINT:(tmpstr$+CHR$(13))
- row%=row%+1
- lineout$=RIGHT$(lineout$, LEN(lineout$)-length%-1)
- width%=vWIDTH%:(lineout$)
- IF row%>vrows%
- RETURN offset&-LEN(lineout$)
- ENDIF
- ENDIF
- ENDIF
- ret%=IOREAD(istream%, ADDR(c$)+1, 1)
- offset&=offset&+1
- ENDWH
-
- IF LEN(lineout$)>0
- vPRINT:(lineout$)
- ENDIF
- RETURN -1
- ENDP rem SHOWPG&:
-
-
- REM **********************************
- REM * BookMark Routines
- REM **********************************
-
- PROC DROPBMK:
- LOCAL ret%, mark&
-
- LOCK ON
- DO
- dINIT "Drop which Bookmark?"
- dLONG mark&, "Bookmark:", &1, &10
- dBUTTONS "Cancel", 27,"Show", 32, "OK", 13
- ret%=DIALOG
- IF ret%=0
- RETURN
- ELSEIF ret%=32
- SHOWBMK:
- ENDIF
- UNTIL ret%=13
- bkmark%(mark&)=curpag%
- LOCK OFF
- ENDP rem DROPBMK:
-
- PROC JMPBMK:
- LOCAL ret%, mark&
- LOCK ON
- DO
- dINIT "Jump to which Bookmark?"
- dLONG mark&, "Bookmark:", &1, &10
- dBUTTONS "Cancel", 27, "Show", 32, "OK", 13
- ret%=DIALOG
- IF ret%=0
- RETURN
- ELSEIF ret%=32
- SHOWBMK:
- ENDIF
- UNTIL ret%=13
- curpag%=bkmark%(mark&)
- LOCK OFF
- ENDP rem JMPBMK:
-
- PROC SHOWBMK:
- LOCAL i%
- LOCK ON
- i%=1
- dINIT "Bookmarks"
- dTEXT "", GEN$(i%,-1)+": Page "+GEN$(bkmark%(i%),-5)+" "+GEN$(i%+5,-2)+": Page "+GEN$(bkmark%(i%+5),-5),0 :i%=i%+1
- dTEXT "", GEN$(i%,-1)+": Page "+GEN$(bkmark%(i%),-5)+" "+GEN$(i%+5,-2)+": Page "+GEN$(bkmark%(i%+5),-5),0 :i%=i%+1
- dTEXT "", GEN$(i%,-1)+": Page "+GEN$(bkmark%(i%),-5)+" "+GEN$(i%+5,-2)+": Page "+GEN$(bkmark%(i%+5),-5),0 :i%=i%+1
- dTEXT "", GEN$(i%,-1)+": Page "+GEN$(bkmark%(i%),-5)+" "+GEN$(i%+5,-2)+": Page "+GEN$(bkmark%(i%+5),-5),0 :i%=i%+1
- dTEXT "", GEN$(i%,-1)+": Page "+GEN$(bkmark%(i%),-5)+" "+GEN$(i%+5,-2)+": Page "+GEN$(bkmark%(i%+5),-5),0 :i%=i%+1
- dBUTTONS "OK", 13
- DIALOG
- LOCK OFF
- ENDP rem SHOWBMK:
-
- REM **********************************
- REM * Vertical Text Library
- REM **********************************
-
- PROC vWIDTH%:(string$)
- LOCAL str$(255), char$(1), width%
- width%=0
- str$=string$
- WHILE LEN(str$)
- char$=LEFT$(str$,1)
- IF ASC(char$)=32
- width%=width%+spwidth%
- ELSE
- width%=width%+fwidth%(fontno%)
- ENDIF
- str$=RIGHT$(str$, LEN(str$)-1)
- ENDWH
- RETURN width%
- ENDP rem vWIDTH%:
-
- PROC vINIT:
- LOCAL i%
- xpos%=0
- ypos%=0
- i%=1
- fwidth%(i%)=4 :fheight%(i%)=5 :fname$(i%)="sman0405" :i%=i%+1
- fwidth%(i%)=4 :fheight%(i%)=6 :fname$(i%)="smxn0406" :i%=i%+1
- fwidth%(i%)=5 :fheight%(i%)=8 :fname$(i%)="sman0508" :i%=i%+1
- fwidth%(i%)=6 :fheight%(i%)=8 :fname$(i%)="smxn0608" :i%=i%+1
- fwidth%(i%)=6 :fheight%(i%)=11 :fname$(i%)="smxn0614" :i%=i%+1
- fwidth%(i%)=8 :fheight%(i%)=8 :fname$(i%)="smxn0808" :i%=i%+1
- fwidth%(i%)=8 :fheight%(i%)=11 :fname$(i%)="smxn0814"
- statfon%=i%
- maxfont%=i%
- i%=2
- fontlst$=fname$(1)
- DO
- fontlst$=fontlst$+","+fname$(i%)
- i%=i%+1
- UNTIL i%>maxfont%
- ENDP rem vINIT:
-
- PROC vFONT:(no%)
- fontno%=no%
- fontid%=gLOADFONT("\VR3A\"+fname$(fontno%))
- gFONT fontid%
- vwidth%=INT(160/fwidth%(fontno%))
- vrows%=INT((480-(2*fheight%(statfon%)-2))/fheight%(fontno%)) rem screen - 2 status lines
- rem vrows%=INT(480/fheight%(fontno%)) rem full screen
- spwidth%=INT(fwidth%(fontno%)/2)
- ENDP rem vFONT:
-
- PROC vAT:(x%,y%)
- LOCAL rx%
- xpos%=x%
- ypos%=y%
- rx%=159-x%
- IF rx%<0
- rx%=0
- ENDIF
- gAT y%,rx%
- ENDP rem vAT
-
- PROC vPRINT:(string$)
- LOCAL str$(255), char$(1), rx%
- str$=string$
- WHILE LEN(str$)
- char$=LEFT$(str$,1)
- rx%=159-xpos%
- IF rx%<0
- rx%=0
- ENDIF
- gAT ypos%,rx%
- IF char$=CHR$(13) rem CR
- xpos%=0
- ypos%=ypos%+fheight%(fontno%)
- ELSEIF char$=CHR$(10) rem LF
- ypos%=ypos%+fheight%(fontno%)
- ELSE
- gPRINT char$
- IF char$=" "
- xpos%=xpos%+spwidth%
- ELSE
- xpos%=xpos%+fwidth%(fontno%)
- ENDIF
- ENDIF
- IF ypos%>479
- ypos%=0
- ENDIF
- str$=RIGHT$(str$, LEN(str$)-1)
- ENDWH
- ENDP rem vPRINT:
-
- REM **********************************
- REM * VPG Library
- REM **********************************
-
- PROC WRIVPG:(filenam$)
- LOCAL filevpg$(128), handvpg%
- LOCAL i%, ret%, longint&
-
- filevpg$=PARSE$:(filenam$,7)+".VPG"
- ret%=IOOPEN(handvpg%, filevpg$, $0322)
- IF ret%<0
- ALERT("VPG: Error Opening "+filevpg$,"Error: "+ERR$(ret%))
- RETURN
- ENDIF
-
- longint&=maxpag%
- ret%=WRITE%:(handvpg%, longint&) rem NO OF PAGES
- i%=1
- WHILE i%<=maxpag%
- ret%=WRITE%:(handvpg%, pageoff&(i%)) rem PAGE OFFSETs
- i%=i%+1
- ENDWH
- longint&=curpag%
- ret%=WRITE%:(handvpg%, longint&) rem CURRENT PAGE
- i%=1
- WHILE i%<=10
- longint&=bkmark%(i%)
- ret%=WRITE%:(handvpg%, longint&) rem BOOKMARKS
- i%=i%+1
- ENDWH
- longint&=fontvpg%
- ret%=WRITE%:(handvpg%, longint&) rem FONT
- ret%=IOCLOSE(handvpg%)
- ENDP rem WRIVPG:
-
- PROC READVPG:(filenam$)
- LOCAL filevpg$(128), handvpg%
- LOCAL i%, ret%
-
- filevpg$=PARSE$:(filenam$,7)+".VPG"
- ret%=IOOPEN(handvpg%, filevpg$, $0320)
- IF ret%<0
- ALERT("VPG: Error Opening "+filevpg$,"Error: "+ERR$(ret%))
- RETURN
- ENDIF
-
- maxpag%=READ&:(handvpg%) rem NO OF PAGES
- i%=1
- WHILE i%<=maxpag%
- pageoff&(i%)=READ&:(handvpg%) rem PAGE OFFSETs
- i%=i%+1
- ENDWH
- curpag%=READ&:(handvpg%) rem CURRENT PAGE
- i%=1
- WHILE i%<=10
- bkmark%(i%)=READ&:(handvpg%) rem BOOKMARKS
- i%=i%+1
- ENDWH
- fontvpg%=READ&:(handvpg%) rem FONTS
- ret%=IOCLOSE(handvpg%)
- ENDP rem READVPG:
-
- PROC CLRvpg:
- REM GLOBAL maxpag%, pageoff&(500), curpag%, bkmark%(10), fontvpg% rem VPG file info
- LOCAL i%
- maxpag%=0
- i%=1
- DO
- pageoff&(i%)=0
- i%=i%+1
- UNTIL i%>500
- curpag%=1
- i%=1
- DO
- bkmark%(i%)=1
- i%=i%+1
- UNTIL i%>10
- fontvpg%=fontno%
- ENDP rem CLRvpg:
-
- PROC RESCAN:(handle%, font%, startpg%, off&)
- LOCAL i%, ret%, offset&
-
- offset&=off&
- vFONT:(font%)
- fontvpg%=font%
- i%=startpg%
- IF startpg%=1
- CLRvpg:
- ENDIF
-
- pageoff&(i%)=offset&
- BUSY "Scanning Page "+GEN$(i%,5),2
- offset&=SCANPG&:(handle%, offset&)
- WHILE offset&<>-1
- i%=i%+1
- pageoff&(i%)=offset&
- BUSY "Scanning Page "+GEN$(i%,5),2
- offset&=SCANPG&:(handle%, offset&)
- ENDWH
- BUSY OFF
- maxpag%=i%
-
- curpag%=startpg%
- ENDP rem RESCAN:
-
- PROC SCANPG&:(handle%, off&)
- LOCAL istream%, ret%, lineout$(255)
- LOCAL tmpstr$(255), c$(1), char$(1), length%
- LOCAL row%, offset&, width%
-
- row%=1
- width%=0
- istream%=handle%
- offset&=off&
- ret%=IOSEEK(istream%, 1, offset&)
-
- ret%=IOREAD(istream%, ADDR(c$)+1, 1)
- offset&=offset&+1
- WHILE ret%<>-36 rem EOF
- POKEB ADDR(c$), ret%
-
- IF ASC(c$)=13 rem CR
- c$=""
- ELSEIF ASC(c$)=10 OR ASC(c$)=9 rem NL or TAB
- c$=" "
- ENDIF
-
- IF c$=" "
- IF LEN(lineout$)>1 AND RIGHT$(lineout$,1)<>" "
- lineout$=lineout$+c$
- width%=width%+spwidth%
- ENDIF
- ELSE
- lineout$=lineout$+c$
- width%=width%+fwidth%(fontno%)
- ENDIF
-
- IF width%>160
- tmpstr$=lineout$
- DO
- char$=RIGHT$(tmpstr$, 1)
- tmpstr$=LEFT$(tmpstr$, LEN(tmpstr$)-1)
- IF char$=" "
- BREAK
- ENDIF
- UNTIL tmpstr$=""
-
- length%=LEN(tmpstr$)
- IF length%>0
- row%=row%+1
- lineout$=RIGHT$(lineout$, LEN(lineout$)-length%-1)
- width%=vWIDTH%:(lineout$)
- IF row%>vrows%
- RETURN offset&-LEN(lineout$)
- ENDIF
- ENDIF
- ENDIF
- ret%=IOREAD(istream%, ADDR(c$)+1, 1)
- offset&=offset&+1
- ENDWH
- RETURN -1
- ENDP rem SCANPG&:
-
- PROC WRITE%:(handle%, longint&)
- LOCAL buffer$(10), stream%, ret%
- buffer$=GEN$(longint&, 10)
- stream%=handle%
- ret%=IOWRITE(stream%, ADDR(buffer$)+1, LEN(buffer$))
- REM PRINT "Wrote:";longint&
- RETURN ret%
- ENDP rem WRITE%:
-
- PROC READ&:(handle%)
- LOCAL buffer$(255), stream%, ret%, longint&
- stream%=handle%
- ret%=IOREAD(stream%, ADDR(buffer$)+1, 255)
- POKEB ADDR(buffer$), ret%
- longint&=VAL(buffer$)
- REM PRINT "Read: ";longint&
- RETURN longint&
- ENDP rem READ&:
-
- REM **********************************
- REM * Misc Routines
- REM **********************************
-
- PROC PARSE$:(fil$,req%)
- REM by Mark Esposito
- REM Pelican Software
- LOCAL b%(6),p$(128),rel$(8),fsys$(8),dev$(2),path$(128),fn$(12),ext$(4)
- p$=PARSE$(fil$,rel$,b%())
- fsys$=MID$(p$,1,b%(2)-1)
- dev$=MID$(p$,b%(2),b%(3)-b%(2))
- path$=MID$(p$,b%(3),b%(4)-b%(3))
- fn$=MID$(p$,b%(4),b%(5)-b%(4))
- ext$=MID$(p$,b%(5),4)
- IF req%=1 :RETURN fsys$
- ELSEIF req%=2 :RETURN dev$
- ELSEIF req%=3 :RETURN path$
- ELSEIF req%=4 :RETURN fn$
- ELSEIF req%=5 :RETURN ext$
- ELSEIF req%=6 :RETURN fn$+ext$
- ELSEIF req%=7 :RETURN fsys$+dev$+path$+fn$
- REM Add your own combinations here
- ENDIF
- ENDP rem PARSE$:
-
- PROC GETK%:
- LOCAL a%(6)
- LOCAL comd$(130)
-
- GETEVENT a%()
- IF a%(1)=$404
- comd$=GETCMD$
- IF LEFT$(comd$,1)="X"
- RETURN 512+%x
- ELSEIF LEFT$(comd$,1)="O"
- opafile$=MID$(comd$,2,128)
- RETURN 512+%N
- ENDIF
- ENDIF
- RETURN a%(1)
- ENDP rem GETK%:
-