home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / utilities / file_view.amos / file_view.amosSourceCode
AMOS Source Code  |  1990-10-09  |  3KB  |  123 lines

  1. '
  2. ' File Viewer
  3. ' (c) 1990 Jason D Banks 
  4. '  
  5. ' I know it's far from perfect, but it can handle any standard ascii text. 
  6. '
  7. NAME$=Fsel$("","","Enter Name of File","To View")
  8.  _GETDATA[NAME$] : LGTH=Param : _LOADFILE[NAME$,LGTH]
  9. Global SIZE,STRT,P_TOP,P_BOT
  10. SIZE=LGTH : STRT=Start(15) : P_TOP=0 : P_BOT=0
  11. _INIT_SCREEN
  12. _INIT_PAGE
  13. DNE=False
  14. While Not DNE
  15.    _GET_OPT[Chr$(28)+Chr$(29)+Chr$(30)+Chr$(31)+Chr$(27)] : OPT$=Param$
  16.    If OPT$=Chr$(27) Then DNE=True
  17.    If OPT$=Chr$(28) Then PAGE_DWN
  18.    If OPT$=Chr$(29) Then PAGE_UP
  19. Wend 
  20. ' Erase 15 : Edit  
  21. '
  22. ' file is now stored in bank 15
  23. '
  24. Procedure PAGE_DWN
  25.    If P_BOT>=SIZE Then Shoot : Pop Proc
  26.    Cls 0 : Locate 0,1
  27.    P_TOP=P_BOT
  28.    LINES=0 : DNE=False : CNT=0 : Cls 0 : Locate 0,1 : 
  29.    While Not DNE
  30.       A=Peek(STRT+P_TOP+CNT)
  31.       If A=10 Then Print : Inc LINES Else Print Chr$(A);
  32.       Inc CNT
  33.       If LINES=20 Then DNE=True
  34.       If CNT+P_TOP>SIZE Then DNE=True
  35.    Wend 
  36.    P_BOT=CNT+P_TOP : If P_BOT>SIZE Then P_BOT=SIZE
  37. End Proc
  38. Procedure PAGE_UP
  39.    If P_TOP=0 Then Shoot : Pop Proc
  40.    _MOVE_UP[20]
  41.    LINES=0 : DNE=False : CNT=0 : Cls 0 : Locate 0,1
  42.    While Not DNE
  43.       A=Peek(STRT+P_TOP+CNT)
  44.       If A=10 Then Print : Inc LINES Else Print Chr$(A);
  45.       Inc CNT
  46.       If LINES=20 Then DNE=True
  47.       If CNT+P_TOP>SIZE Then DNE=True
  48.    Wend 
  49.    P_BOT=CNT+P_TOP : If P_BOT>SIZE Then P_BOT=SIZE
  50. End Proc
  51. Procedure _MOVE_UP[NO]
  52.    Inc NO
  53.    DNE=False : CNT=0
  54.    While Not DNE
  55.       A=Peek(STRT+P_TOP-CNT)
  56.       If A=10 Then Dec NO
  57.       Inc CNT
  58.       If P_TOP-CNT=0 Then DNE=True
  59.       If NO=0 Then DNE=True
  60.    Wend 
  61.    P_TOP=P_TOP-CNT
  62. End Proc
  63. Procedure _GETDATA[NAME$]
  64.    Erase 15
  65.    Reserve As Work 15,260
  66.    Dreg(1)=Varptr(NAME$) : Dreg(2)=-2
  67.    HANDLE=Doscall(-84)
  68.    If HANDLE=0 Then Pop Proc
  69.    Dreg(1)=HANDLE
  70.    Dreg(2)=Start(15)
  71.    WORKS=Doscall(-102)
  72.    If WORKS=0 Then Dreg(1)=HANDLE : DUMMY=Doscall(-90) : Pop Proc
  73.    LGTH=Leek(Start(15)+124)
  74.    Dreg(1)=HANDLE
  75.    DUMMY=Doscall(-90)
  76.    Erase 15
  77.    ' this procedure loads a files information block into bank 15
  78.    ' and then examines it to find out what it's length is.
  79.    ' I don't know if this is better than
  80.    ' OPEN in x,"FILE NAME"
  81.    ' lgth=LOF(x)
  82.    ' close X
  83.    ' but it seems to be a little faster and doesn't take up use of
  84.    ' the meagre supply of files we've been given. 
  85. End Proc[LGTH]
  86. Procedure _LOADFILE[NAME$,LGTH]
  87.    Erase 15
  88.    Reserve As Work 15,LGTH
  89.    Dreg(1)=Varptr(NAME$)
  90.    Dreg(2)=1005
  91.    HANDLE=Doscall(-30)
  92.    ' = open file for reading
  93.    Dreg(1)=HANDLE
  94.    Dreg(2)=Start(15)
  95.    Dreg(3)=LGTH
  96.    RDIN=Doscall(-42)
  97.    ' = read in file contents
  98.    Dreg(1)=HANDLE
  99.    DUMMY=Doscall(-36)
  100.    ' = close file down
  101.    ' this proc loads a file into bank 15, given it's name and length
  102.    ' to get the length, just use the _GETDATA proc. 
  103. End Proc
  104. Procedure _INIT_PAGE
  105.    LINES=0 : DNE=False : CNT=0 : Cls 0 : Locate 0,1 : 
  106.    While Not DNE
  107.       A=Peek(STRT+P_TOP+CNT)
  108.       If A=10 Then Print : Inc LINES Else Print Chr$(A);
  109.       Inc CNT
  110.       If LINES=20 Then DNE=True
  111.       If CNT>SIZE Then DNE=True
  112.    Wend 
  113.    P_BOT=CNT
  114. End Proc
  115. Procedure _INIT_SCREEN
  116.    Screen Open 0,640,256,4,Hires
  117.    Curs Off : Flash Off : Pen 1 : Paper 0 : Palette Colour(1),0
  118.    Cls 0
  119. End Proc
  120. Procedure _GET_OPT[TEST$]
  121.    TEST$=Upper$(TEST$)
  122.    While Instr(TEST$,OUT$)<1 : OUT$=Upper$(Inkey$) : Wend 
  123. End Proc[OUT$]