home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / utilsu / vr3a100 / vr3a / vr3a.opl < prev    next >
Text File  |  1994-01-09  |  20KB  |  844 lines

  1. REM VR3a - A Vertical Text Reader for the Psion S3a
  2. REM Version 1.00, January 1994
  3. REM Copyright (C) 1994 Robert Boucher
  4. REM
  5. REM    This program is free software; you can redistribute it and/or modify
  6. REM    it under the terms of the GNU General Public License as published by
  7. REM    the Free Software Foundation; either version 2 of the License, or
  8. REM    (at your option) any later version.
  9. REM
  10. REM    This program is distributed in the hope that it will be useful,
  11. REM    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. REM    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. REM    GNU General Public License for more details.
  14. REM
  15. REM    You should have received a copy of the GNU General Public License
  16. REM    along with this program; if not, write to the Free Software
  17. REM    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. REM
  19. REM Author: Robert Boucher <boucher@asimov.ocunix.on.ca>
  20. REM                        <boucher@sofkin.ca>
  21. REM
  22. REM Bugs and Suggestions should be addressed to the author.
  23.  
  24. APP VR3A
  25.     TYPE $9004
  26.     PATH "\TXT"
  27.     EXT  "TXT"
  28.     ICON "\OPD\VR3A.PIC"
  29. ENDA
  30.  
  31. PROC MAIN:
  32.     GLOBAL xpos%, ypos%                                              rem vLIB
  33.     GLOBAL fwidth%(8), fheight%(8), fname$(8,8), maxfont%, spwidth%, fontlst$(255)  rem vLIB
  34.     GLOBAL fontno%, fontid%, vwidth%, vrows%, statfon%               rem vLIB
  35.     GLOBAL maxpag%, pageoff&(500), curpag%, bkmark%(10), fontvpg%    rem VPG file info
  36.  
  37.     LOCAL handle%, offset&                                           REM its handle and offset
  38.     GLOBAL filenam$(128), opafile$(128)                              REM filename from "O" GETCMD$
  39.     LOCAL prevnam$(128)
  40.     LOCAL newpag%
  41.     LOCAL ret%, pageno&
  42.     LOCAL key%, doscan%
  43.  
  44.     vINIT:     rem Initialize vertical text library
  45.   CLRvpg:    rem Clear VerticalPage variables
  46.   
  47.     newpag%=0  rem Do not draw the page
  48.     doscan%=0  rem Do not scan the keyboard
  49.  
  50.     IF CMD$(3)="O"
  51.         opafile$=CMD$(2)
  52.         key%=512+%N        rem OPA "O" Command
  53.     ELSEIF CMD$(3)="C"
  54.         STOP
  55.     ELSE
  56.         key%=512+%o        rem OPEN TEXT FILE
  57.     ENDIF
  58.  
  59.     GIPRINT "VR3a v1.00 ¸1994 Robert Boucher"
  60.     PAUSE -40 :KEY
  61.     
  62.     CACHE $3000,$3000
  63.     WHILE 1
  64.         IF newpag%
  65.             gCLS
  66.             STATUS:
  67.             gUPDATE OFF
  68.             BUSY "Showing page "+GEN$(curpag%, 5),2
  69.             LOCK ON
  70.             offset&=SHOWPG&:(handle%, pageoff&(curpag%))
  71.             LOCK OFF
  72.             CACHETIDY
  73.             BUSY OFF
  74.             IF offset&=-1
  75.                 maxpag%=curpag%
  76.             ELSE
  77.                 pageoff&(curpag%+1)=offset&
  78.             ENDIF
  79.             gUPDATE
  80.             BEEP 5,300
  81.             newpag%=0
  82.         ENDIF
  83.  
  84.         IF doscan%
  85.             DO
  86.                 key%=GETK%:
  87.             UNTIL key%<>0
  88.         ELSE
  89.             doscan%=1
  90.         ENDIF
  91.  
  92.         IF     key%=512+%n OR key%=13 OR key%=256 rem NEXT PAGE
  93.             IF curpag%=maxpag%
  94.                 GIPRINT "On the last page",0
  95.             ELSE
  96.                 curpag%=curpag%+1
  97.                 newpag%=1
  98.             ENDIF
  99.         ELSEIF key%=512+%p OR key%=257 OR key%=8  rem PREV PAGE
  100.             IF curpag%=1
  101.                 GIPRINT "On the first page",0
  102.             ELSE
  103.                 curpag%=curpag%-1
  104.                 newpag%=1
  105.             ENDIF
  106.         ELSEIF key%=512+ASC("-") OR key%=ASC("-") rem FIRST PAGE
  107.             IF curpag%=1
  108.                 GIPRINT "On the first page",0
  109.             ELSE
  110.                 curpag%=1
  111.                 newpag%=1
  112.             ENDIF
  113.         ELSEIF key%=512+ASC("+") OR key%=ASC("+") rem LAST PAGE
  114.             IF maxpag%
  115.                 IF curpag%=maxpag%
  116.                     GIPRINT "On the last page",0
  117.                 ELSE
  118.                     curpag%=maxpag%
  119.                     newpag%=1
  120.                 ENDIF
  121.             ELSE
  122.                 curpag%=curpag%+1
  123.                 newpag%=1
  124.             ENDIF
  125.         ELSEIF key%=512+%j OR key%=ASC("/")       rem JUMP TO PAGE
  126.             pageno&=curpag%
  127.             LOCK ON
  128.             DO
  129.                 dINIT "Jump to page"
  130.                 IF maxpag%
  131.                     dLONG pageno&, "Page:", &1, maxpag%
  132.                 ELSE
  133.                     dLONG pageno&, "Page:", &1, curpag%+1
  134.                 ENDIF
  135.                 dBUTTONS "Cancel", 27, "OK", 13
  136.                 ret%=DIALOG
  137.             UNTIL pageno&<>0
  138.             LOCK OFF
  139.             IF ret%
  140.                 curpag%=pageno&
  141.                 newpag%=1
  142.             ENDIF
  143.         ELSEIF key%=512+ASC("/")                  rem FULL RESCAN
  144.             RESCAN:(handle%, fontno%, 1, &0)
  145.             WRIVPG:(filenam$)
  146.             READVPG:(filenam$)
  147.             vFONT:(fontvpg%)
  148.             STATUS:
  149.             BEEP 5,300
  150.             dINIT "Rescan Completed"
  151.             dBUTTONS "Continue", 13
  152.             DIALOG
  153.         ELSEIF key%=512+%k                        rem SCAN TO END
  154.             RESCAN:(handle%, fontno%, curpag%, offset&)
  155.             WRIVPG:(filenam$)
  156.             READVPG:(filenam$)
  157.             vFONT:(fontvpg%)
  158.             STATUS:
  159.             BEEP 5,300
  160.             dINIT "Scan to End Completed"
  161.             dBUTTONS "Continue", 13
  162.             DIALOG
  163.         ELSEIF key%=512+%f OR key%=ASC("*")       rem SELECT FONT
  164.             newpag%=SELFON%:
  165.         ELSEIF key%=512+%z OR key%=ASC(".")       rem ZOOM IN
  166.             fontvpg%=fontvpg%+1
  167.             IF fontvpg%>maxfont%
  168.                 fontvpg%=1
  169.             ENDIF
  170.             vFONT:(fontvpg%)
  171.             newpag%=1
  172.         ELSEIF key%=512+%Z OR key%=ASC(",")       rem ZOOM OUT
  173.             fontvpg%=fontvpg%-1
  174.             IF fontvpg%<1
  175.                 fontvpg%=maxfont%
  176.             ENDIF
  177.             vFONT:(fontvpg%)
  178.             newpag%=1
  179.         ELSEIF key%=512+%r                        rem DROP BOOKMARK
  180.             DROPBMK:
  181.         ELSEIF key%=512+%g                        rem GOTO BOOKMARK
  182.             ret%=curpag%
  183.             JMPBMK:
  184.             IF curpag%<>ret%
  185.                 newpag%=1
  186.             ENDIF
  187.         ELSEIF key%=512+%N                        rem OPA "O" COMMAND
  188.             IF maxpag%
  189.                 WRIVPG:(filenam$)
  190.             ENDIF
  191.             IF handle%>0
  192.                 ret%=IOCLOSE(handle%)
  193.             ENDIF
  194.             filenam$=opafile$
  195.             SETNAME PARSE$:(opafile$,4)
  196.             GIPRINT "Opening "+PARSE$:(filenam$,4)
  197.             handle%=OPEN%:(filenam$)
  198.             IF handle%=-1
  199.                 doscan%=0
  200.                 key%=512+%o
  201.             ELSE
  202.                 vFONT:(fontvpg%)
  203.                 newpag%=1
  204.             ENDIF
  205.         ELSEIF key%=512+%o                        rem OPEN TEXT FILE
  206.             IF maxpag%
  207.                 WRIVPG:(filenam$)
  208.                 prevnam$=filenam$
  209.             ENDIF
  210.             IF handle%>0
  211.                 ret%=IOCLOSE(handle%)
  212.             ENDIF
  213.             filenam$="\TXT\*.*"
  214.             LOCK ON
  215.             DO
  216.                 dINIT "Select a text file to read"
  217.                 dFILE filenam$,"Filename:",0
  218.                 dBUTTONS "Quit VR", 27, "OK", 13
  219.                 ret%=DIALOG
  220.             UNTIL filenam$ <> ""
  221.             LOCK OFF
  222.             IF ret%=0 rem ESC was pressed
  223.                 doscan%=0
  224.                 key%=27
  225.             ELSE
  226.                 GIPRINT "Opening "+PARSE$:(filenam$,4)
  227.                 handle%=OPEN%:(filenam$)
  228.                 IF handle%=-1
  229.                     newpag%=0
  230.                     doscan%=0
  231.                     key%=512+%o
  232.                 ELSE
  233.                     vFONT:(fontvpg%)
  234.                     newpag%=1
  235.                 ENDIF
  236.             ENDIF
  237.         ELSEIF key%=27                            rem QUIT
  238.             dINIT "Really Quit?"
  239.             dBUTTONS "No", 27, "Yes", 13
  240.             ret%=DIALOG
  241.             IF ret%
  242.                 ret%=IOCLOSE(handle%)
  243.                 STOP
  244.             ENDIF
  245.         ELSEIF key%=512+%x                        rem EXIT
  246.             IF maxpag%
  247.                 WRIVPG:(filenam$)
  248.             ENDIF
  249.             ret%=IOCLOSE(handle%)
  250.             STOP
  251.         ELSEIF key%=512+%v OR key%=291            rem ABOUT VR
  252.             ABOUT:
  253.         ELSEIF key%=290                           rem MENU
  254.           mINIT
  255.             mCARD "File", "Open new text", %o    REM , "Delete text", %d
  256.             mCARD "Page", "Jump to page", %j, "Next page", %n ,"Prev page", %p,"First page", ASC("-"), "Last page", ASC("+")
  257.             mCARD "BookMark", "Drop Bmk", %r, "Goto Bmk", %g
  258.             mCARD "Rescan", "Full rescan", ASC("/"), "Scan to end", %k
  259.             mCARD "Special", "Select font", %f,"Zoom in", %z, "Zoom out", %Z, "About VR", %v, "Exit", %x
  260.             key%=512+MENU
  261.             doscan%=0
  262.         ENDIF
  263.     ENDWH
  264. ENDP rem MAIN:
  265.  
  266. REM **********************************
  267. REM * Vertical Reader Routines
  268. REM **********************************
  269.  
  270. PROC ABOUT:
  271.     dINIT "VR3A"
  272.     dTEXT "","Vertical Text Reader",2
  273.     dTEXT "","for the Series 3a",2
  274.     dTEXT "","Version 1.00, January 1994",2
  275.     dTEXT "","Copyright ¸1994 Robert Boucher",2
  276.     dTEXT "","boucher@asimov.ocunix.on.ca",2
  277.     dBUTTONS "OK", 13
  278.     DIALOG
  279. ENDP rem ABOUT:
  280.  
  281. PROC OPEN%:(filenam$)
  282.     LOCAL ret%, i%, handle%
  283.     LOCAL filevpg$(128)
  284.  
  285.     ret%=IOOPEN(handle%, filenam$, $0200)
  286.     IF ret%<0
  287.         ALERT("Error Opening "+filenam$,"Error: "+ERR$(ret%))
  288.         RETURN -1
  289.     ENDIF
  290.     filevpg$=PARSE$:(filenam$,7)+".VPG"
  291.     IF EXIST(filevpg$)
  292.         READVPG:(filenam$)
  293.     ELSE
  294.         fontvpg%=6
  295.         maxpag%=0
  296.         curpag%=1
  297.         pageoff&(1)=0
  298.         i%=1
  299.         WHILE i%<=10
  300.             bkmark%(i%)=1
  301.             i%=i%+1
  302.         ENDWH
  303.     ENDIF
  304.     RETURN handle%
  305. ENDP rem OPEN%:
  306.  
  307. PROC SELFON%:
  308.     LOCAL ret%, redraw%, showfon%
  309.     LOCAL oldsp%, font&
  310.     oldsp%=spwidth%
  311.     redraw%=0
  312.     showfon%=0
  313.     LOCK ON
  314.     DO
  315.         dINIT "Select Font"
  316.         dLONG font&, "Font:", &1, maxfont%
  317.         dBUTTONS "Cancel", 27, "Show", 32, "OK", 13
  318.         ret%=DIALOG
  319.         IF ret%=0
  320.             RETURN redraw%
  321.         ELSEIF ret%=32 
  322.             IF showfon%
  323.                 GET
  324.             ELSE
  325.                 SHOWFON:
  326.                 showfon%=1
  327.                 redraw%=1
  328.             ENDIF
  329.         ENDIF
  330.     U