home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / utilsu / vert / vr3a / vr3a.opl < prev   
Text File  |  1994-02-21  |  7KB  |  409 lines

  1. APP Vr3a
  2. TYPE $9003
  3. PATH "\vr"
  4. EXT "txt"
  5. ICON "\opl\vr.pic"
  6. ENDA
  7.  
  8. PROC main:
  9. GLOBAL vWID%(2),vINFO%(3),vHDLR$(8),vMODE%,vN%,vMAP&(64),vBIT%,vTMP%
  10. GLOBAL vrFND$(30),vrFILE$(128),vrSTWIN%,vrFID%,vrSTYLE%,vrLN%,vrHDL%,vrTOP%
  11. LOCAL f$(128),ret%,off%(6)
  12. LOCAL lin$(255)
  13. f$=CMD$(1)
  14. f$=PARSE$("",f$,off%())
  15. f$=left$(f$,off%(4)-1)+"LIB\VPRINT.OPO"
  16. TRAP LOADM f$
  17. IF ERR <> 0
  18.     dINIT
  19.     dTEXT "",f$
  20.     dTEXT "",ERR$(ERR)
  21.     LOCK ON
  22.     DIALOG
  23.     LOCK OFF
  24.     STOP
  25. ENDIF
  26. vHDLR$="handler"
  27. vrFND$=""
  28. system:(CMD$(3)+CMD$(2))
  29. gUPDATE OFF
  30. ONERR catch
  31. catch::
  32. ONERR OFF
  33. vPAGE:(0)
  34. DO
  35.     if TESTEVENT
  36.         ONERR catch
  37.         if handler%: <>0
  38.             if gRANK <> 1
  39.                 vSWITCH:
  40.             endif
  41.         endif
  42.         ONERR OFF
  43.     endif
  44.     ret%=IORead(vrHDL%,ADDR(lin$)+1,255)
  45.     IF ret%>=0
  46.         vrLN%=vrLN%+1
  47.         PokeB ADDR(lin$),ret%
  48.         vPRINT:(ADDR(lin$))
  49.     ELSEIF ret%=-36
  50.         ONERR catch
  51.         if gRANK <>1
  52.             vPAGE:(1)
  53.         endif
  54.         vPAGE:(2)
  55.     ELSE
  56.         dINIT
  57.         dTEXT "",vrFILE$
  58.         dTEXT "",ERR$(ERR)
  59.         LOCK ON
  60.         DIALOG
  61.         LOCK OFF
  62.         procx:(%x)
  63.     ENDIF
  64. UNTIL ret%=-36
  65. ret%=IOCLOSE(vrHDL%)
  66. ENDP
  67.  
  68. PROC handler%:
  69. LOCAL sw%,k%,a$(5),a%(6)
  70.     GETEVENT a%()
  71.     sw%=0
  72.     IF (a%(1) AND $400) <> 0
  73.         IF a%(1) = $404
  74.             system:(GETCMD$) 
  75.             RAISE -114
  76.         ENDIF
  77.     ELSEIF a%(1)=291
  78.         help:
  79.     ELSEIF a%(1)=290 AND((a%(2) AND $0004)=4)
  80.         IF vrSTWIN% = 0
  81.             vrSTWIN%=1
  82.             STATUSWIN ON
  83.         ELSE
  84.             vrSTWIN%=0
  85.             STATUSWIN OFF
  86.         ENDIF
  87.         FONT -$3fff,0
  88.         vFONT:(vrFID%,vrSTYLE%)
  89.         jump:(vrTOP%)
  90.         vPAGE:(0)
  91.         RAISE -114
  92.     elseif a%(1)=290
  93.         mINIT
  94.         mCARD "File","Open",%o,"Review Bookmarks",%b,"About vr3a",%v
  95.         mCARD "Search","Count",%c,"Find text",%f,"Find again",%g,"Jump to Line",%j
  96.         mCARD "Special","Set preferences",%q,"Zoom in",%z,"Zoom out",%Z,"Exit",%x
  97.         k%=MENU
  98.         if k% AND (LOC("bocfgjqzxv",CHR$(k%))<>0)
  99.             a$="proc"+chr$(k%)
  100.             @(a$):(k%)
  101.         endif
  102.     elseif (a%(1) AND $200) <>0 
  103.         k%=a%(1) AND $FF
  104.         if a%(2) AND 2
  105.             k%=k% AND $DF
  106.         ENDIF
  107.         if k% AND (LOC("bocfgjqzxv",CHR$(k%))<>0)
  108.             a$="proc"+chr$(k%)
  109.             @(a$):(k%)
  110.         endif
  111.     elseif a%(1)=$20
  112.         sw%=1
  113.         vrTOP%=vrLN%
  114.     endif 
  115.     return sw%
  116. ENDP
  117.  
  118. PROC procb:(k%)
  119. LOCAL sw%
  120. OPEN "M:\VR\VRINIT.RC",A,file$,top%,fid%,mode%,stwin%
  121. ONERR abort
  122. FIRST
  123. DO
  124.     dINIT "Review Bookmarks"
  125.     dTEXT "",A.file$
  126.     dTEXT "","Line "+num$(A.top%,4)
  127.     dBUTTONS "Next",%n,"Prev",%p,"Delete",8
  128.     LOCK ON
  129.     sw%=DIALOG
  130.     LOCK OFF
  131.     if sw%=%n
  132.         NEXT
  133.         IF EOF
  134.             LAST
  135.         endif
  136.     elseif sw%=%p
  137.         BACK
  138.     elseif sw%=8
  139.         ERASE
  140.     endif
  141. UNTIL sw%=0
  142. abort::
  143. CLOSE 
  144. ENDP
  145.  
  146. PROC procc:(k%)
  147. dINIT
  148. dTEXT "Lines",num$(count%:,5),1
  149. LOCK ON
  150. DIALOG
  151. LOCK OFF
  152. ENDP
  153.  
  154. PROC procf:(k%)
  155. LOCAL sw%
  156. dINIT "Find"
  157. dEDIT vrFND$,"Find text"
  158. dCHOICE sw%,"Direction","Forwards,From Start of File"
  159. LOCK ON
  160. IF DIALOG
  161.     LOCK OFF
  162.     IF sw%=2
  163.         jump:(1)
  164.     ENDIF
  165.     procg:(0)
  166. ENDIF
  167. LOCK OFF
  168. ENDP
  169.  
  170. PROC procg:(k%)
  171. LOCAL ret%,lin$(255)
  172. BUSY "Searching",3
  173. DO
  174.     ret%=IORead(vrHDL%,ADDR(lin$)+1,255)
  175.     IF ret%>=0
  176.         PokeB ADDR(lin$),ret%
  177.         IF LOC(lin$,vrFND$)<>0
  178.             BUSY OFF
  179.             vrTOP%=vrLN%
  180.             vPAGE:(0)
  181.             vPRINT:(ADDR(lin$))
  182.             RAISE -114
  183.         ENDIF
  184.         vrLN%=vrLN%+1
  185.     ENDIF
  186. UNTIL (ret%=-36)
  187. BUSY OFF
  188. GIPRINT "Not Found",3
  189. jump:(vrTOP%) 
  190. RAISE -114
  191. ENDP
  192.  
  193. PROC procj:(k%)
  194. LOCAL ln%,ln&
  195. ln&=vrLN%
  196. dINIT "Jump to line"
  197. dLONG ln&,"Line",1,32000
  198. LOCK ON
  199. IF DIALOG
  200.     LOCK OFF
  201.     ln%=ln&
  202.     jump:(ln%)
  203.     vrTOP%=vrLN%
  204.     if gRANK <> 1 : vSWITCH: : endif
  205.     RAISE -114
  206. ENDIF
  207. LOCK OFF
  208. ENDP
  209.  
  210. PROC proco:(k%)
  211. LOCAL ret%,f$(128)
  212. f$="\VR\*.txt"
  213. if k%<>0
  214.     do
  215.         dInit "Select a file to read"
  216.         dFile f$,"Filename:",72
  217.         LOCK ON
  218.         if Dialog
  219.             LOCK OFF 
  220.         else
  221.             LOCK OFF
  222.             return
  223.         endif
  224.     Until f$<>""
  225.     putinf:
  226.     vrFILE$=f$
  227. endif
  228. if vrHDL% <> 0
  229.     ret%=IOCLOSE(vrHDL%)
  230. endif
  231. ret%=IOOpen(vrHDL%,vrFILE$,$0620)
  232. vrLN%=1
  233. getinf:
  234. vFONT:(vrFID%,vrSTYLE%)
  235. jump:(vrTOP%)
  236. setname vrFILE$
  237. if k% <> 0
  238.     RAISE -114
  239. endif
  240. ENDP
  241.  
  242. PROC procq:(k%)
  243. LOCAL md%,fid%,style%
  244. md%=vMODE%
  245. fid%=(vrFID%-4)
  246. IF vrSTYLE% AND 16
  247.     style%=2
  248. ELSE
  249.     style%=1
  250. ENDIF
  251. dINIT "Set preferences"
  252. dCHOICE fid%,"Font:","Roman 8,Roman 11,Roman 13,Roman 16,Swiss 8,Swiss 11,Swiss 13,Swiss 16"
  253. dCHOICE style%,"Character widths","Proportional,Monospaced"
  254. dCHOICE md%,"Display mode:","Line truncate,Line wrap,Word wrap,Paragraph"
  255. LOCK ON
  256. IF DIALOG
  257.     LOCK OFF
  258.     IF fid%<>(vrFID%-4) or vrSTYLE%<>(16*(style%-1))
  259.         vrSTYLE%= 16*(style%-1)
  260.         vrFID%=fid%+4
  261.         vFONT:(vrFID%,vrSTYLE%)
  262.     ENDIF
  263.     vMODE%=md%
  264.     jump:(vrTOP%)
  265.     RAISE -114
  266. ENDIF
  267. LOCK OFF
  268. ENDP
  269.  
  270. PROC procv:(k%)
  271. dINIT "About vr3a"
  272. dTEXT "","Vertical Reader for Psion Series 3a"
  273. dTEXT "","Version 1.1 - Feb '93"
  274. dTEXT "","by Ewan Paton - paton@vmark.co.uk"
  275. LOCK ON
  276. DIALOG
  277. LOCK OFF
  278. ENDP
  279.  
  280. PROC procx:(k%)
  281.     putinf:
  282.     STOP
  283. ENDP
  284.  
  285. PROC procz:(k%)
  286. IF k%=%z
  287.     vrFID%=(((vrFID%-1) AND (NOT 3)) OR ((vrFID%) AND 3))+1
  288. ELSE
  289.     vrFID%=(((vrFID%-1) AND (NOT 3)) OR ((vrFID%-2) AND 3))+1
  290. ENDIF
  291. vFONT:(vrFID%,vrSTYLE%)
  292. vPAGE:(0)
  293. jump:(vrTOP%)
  294. RAISE -114
  295. ENDP
  296.  
  297. PROC count%:
  298. LOCAL ret%,hdl%,line%,buf$(255)
  299. line%=1
  300. ret%=IOOpen(hdl%,vrFILE$,$0620)
  301. BUSY "Counting",3
  302. WHILE ret%>=0
  303.     ret%=IOREAD(hdl%,ADDR(buf$)+1,255)
  304.     line%=line%+1
  305. ENDWH
  306. ret%=IOCLOSE(hdl%)
  307. BUSY OFF
  308. return line%
  309. ENDP
  310.  
  311. PROC getinf:
  312. TRAP OPEN "M:\VR\VRINIT.RC",A,file$,top%,fid%,mode%,style%,stwin%
  313. if ERR = 0
  314.     if FIND(vrFILE$)<>0
  315.         vrTOP%=A.top%
  316.         vrFID%=A.fid%
  317.         vMODE%=A.mode%
  318.         vrSTYLE%=A.style%
  319.         IF vrSTWIN%<>A.stwin%
  320.             IF vrSTWIN%=0
  321.                 STATUSWIN ON
  322.                 FONT -$3fff,0
  323.             ELSE
  324.                 STATUSWIN OFF
  325.                 FONT -$3fff,0
  326.             ENDIF
  327.             vrSTWIN%=A.stwin%
  328.         ENDIF
  329.     else
  330.         vrTOP%=1
  331.         vrFID%=5
  332.         vMODE%=4
  333.         vrSTYLE%=0
  334.     endif
  335. ELSE
  336.     CREATE "M:\VR\VRINIT.RC",A,file$,top%,fid%,mode%,style%,stwin%
  337.     vrTOP%=1
  338.     vrFID%=5
  339.     vMODE%=4
  340.     vrSTYLE%=0
  341. ENDIF
  342. CLOSE
  343. ENDP
  344.  
  345. PROC help:
  346. dINIT "Help:Vertical Reader"
  347. dTEXT "","Vr3a displays ascii text files in landscape orientation in a choice"
  348. dTEXT "","of 8 builtin proportional fonts. Files in any /VR directories with" 
  349. dTEXT "","a .TXT suffix will appear beneath the application icon."
  350. dTEXT "","The last position and display preferences for any file displayed"
  351. dTEXT "","with Vr3a are saved between invocations in the vrinit.rc file."
  352. dTEXT "","Menu commands should be self explanatory."
  353. dTEXT "","The Enter key scrolls the display one line and the Space key"
  354. dTEXT "","displays the next page."
  355. LOCK ON
  356. DIALOG
  357. LOCK OFF
  358. ENDP
  359.  
  360. PROC jump:(ln%)
  361. LOCAL off&,ret%,buf$(255)
  362. IF ln% < vrLN%
  363.     off&=0
  364.     ret%=IOSEEK(vrHDL%,6,off&)
  365.     vrLN%=1
  366. ENDIF
  367. BUSY "Seeking to line "+num$(ln%,4),3
  368. WHILE vrLN% < ln%
  369.     ret%=IOREAD(vrHDL%,ADDR(buf$)+1,255)
  370.     vrLN%=vrLN%+1
  371. ENDWH
  372. BUSY OFF
  373. ENDP
  374.  
  375. PROC putinf:
  376. OPEN "M:\VR\VRINIT.RC",A,file$,top%,fid%,mode%,style%,stwin%
  377. if FIND(vrFILE$)<>0
  378.     A.top%=vrTOP%
  379.     A.fid%=vrFID%
  380.     A.mode%=vMODE%
  381.     A.style%=vrSTYLE%
  382.     A.stwin%=vrSTWIN%
  383.     UPDATE
  384. else
  385.     A.file$=vrFILE$
  386.     A.top%=vrTOP%
  387.     A.fid%=vrFID%
  388.     A.mode%=vMODE%
  389.     A.style%=vrSTYLE%
  390.     A.stwin%=vrSTWIN%
  391.     APPEND
  392. endif
  393. CLOSE
  394. ENDP
  395.  
  396. PROC system:(msg$)
  397. IF LEFT$(msg$,1)="O"
  398.     vrFILE$=mid$(msg$,2,128)
  399.     proco:(0)
  400. ELSEIF LEFT$(msg$,1)="C"
  401.     putinf:
  402.     vrFILE$=mid$(msg$,2,128)
  403.     proco:(0)
  404. ELSEIF LEFT$(msg$,1)="X"
  405.     procx:
  406. ENDIF
  407. ENDP
  408.  
  409.