10 REM > View/s
   20 REM Source for SJ Research *VIEW command
   30 REM Note: MODE? error message assumes NFS workspace is at &0E00
   40 
   50 OS_CLI=&FFF7:OSBYTE=&FFF4:OSWORD=&FFF1:OSWRCH=&FFEE
   60 OSWRCR=&FFEC:OSNEWL=&FFE7:OSASCI=&FFE3:OSRDCH=&FFE0
   70 OSFILE=&FFDD:OSARGS=&FFDA:OSBGET=&FFD7:OSBPUT=&FFD4
   80 OSGBPB=&FFD1:OSFIND=&FFCE
   90 
  100 load%=&FFFF0900
  110 DIM mcode% &213
  120 FOR P=0 TO 1
  130   P%=load%:O%=mcode%
  140   [OPT P*3+4
  150   \ Control block, overlapping code
  160   \ Read VDU info returns:
  170   \ L0900-L0901 = Screen display start address
  180   \ L0902-L0911 = 16 palette entries
  190   \ L0912       = remote screen mode
  200   
  210   .L0900
  220   \ Control block for user lookup
  230   EQUB 0:EQUB &14:EQUB 0:EQUB &18
  240   :
  250   .exec%
  260   LDX #&A9:LDY #&00:LDA #&01:JSR OSARGS :\ Get command line address
  270   LDA #&02:LDY #&00:JSR OSARGS          :\ Get NET version
  280   LDY #&00:CMP #&02:BNE L0926           :\ Bugfix not needed
  290   \ Command line bugfix for NetFS<3.60
  300   .L091A
  310   INY:LDA (&A9),Y:CMP #&0D:BEQ L098B
  320   CMP #&20:BNE L091A
  330   :
  340   \ Parse station number from command line
  350   .L0925
  360   INY
  370   .L0926
  380   LDA (&A9),Y
  390   CMP #&20
  400   BEQ L0925  :\ Skip spaces
  410   BCC L098B
  420   LDX #&00
  430   STX &AD
  440   CMP #&30:BCC L0966 :\ Not digit, look for user name
  450   CMP #&3A:BCS L0966 :\ Not digit, look for user name
  460   .L093A
  470   LDX #&00
  480   .L093C
  490   LDA (&A9),Y
  500   INY
  510   CMP #&30
  520   BCC L0956
  530   AND #&0F
  540   CLC
  550   STX &A8
  560   ASL &A8
  570   ADC &A8
  580   ASL &A8
  590   ASL &A8
  600   ADC &A8
  610   TAX
  620   JMP L093C
  630   
  640   .L0956
  650   STX L0AF1
  660   CMP #&2E
  670   BNE L098B
  680   STX L0AF2
  690   BEQ L093A
  700   .L0962
  710   INX
  720   INY
  730   LDA (&A9),Y
  740   .L0966
  750   STA L0907,X
  760   CMP #&0D
  770   BNE L0962
  780   LDX #&00
  790   LDY #&09
  800   LDA #&14
  810   JSR OSWORD
  820   LDA #&00
  830   STA L0900+17
  840   CMP L0900+3
  850   BNE L0900+2
  860   LDY #&01
  870   .L0982
  880   LDA L0905,Y
  890   STA L0AF1,Y
  900   DEY
  910   BPL L0982
  920   :
  930   \ L0AF2=net, L0AF1=stn
  940   .L098B
  950   LDA #&00:LDX #&FF:JSR OSBYTE
  960   CPX #&03:ROR A:STA &AE :\ &AE bit 7=non-Master/Master
  970   LDX #&DB:JSR L0AB3     :\ Ping the remote station
  980   BEQ L09B1              :\ Present, skip forwards
  990   .L099E
 1000   BRK:EQUB &A2:EQUS "Inactive"
 1010   .L09A8
 1020   BRK:EQUB &A2:EQUS "PROTed":BRK
 1030   .L09B1
 1040   LDX L0900
 1050   DEX
 1060   BEQ L09C1
 1070   DEC &AD
 1080   CPX #&0E
 1090   BCS L09FA
 1100   CPX #&04
 1110   BCC L09FA
 1120   .L09C1
 1130   LDX #&DC:JSR L0A98     :\ Read VDU information
 1140   BNE L09A8              :\ Can't read, must be PROTed
 1150   LDX #&E1:JSR L0A98     :\ Read...
 1160   BNE L09A8              :\ Can't read, must be PROTed
 1170   LDA L0900+1:STA L0AEA
 1180   LDX #&E6:JSR L0A98     :\ Read...
 1190   BNE L09A8              :\ Can't read, must be PROTed
 1200   LDA #&87:JSR OSBYTE    :\ Read current screen mode
 1210   LDA L0900+18           :\ Remote station's screen mode
 1220   AND #&07:CMP #&07:PHP
 1230   CMP L0A02,Y:BCS L0A0C  :\ If remote mode same or smaller than my mode, can switch to it
 1240   BIT &AE:BMI L0A0A      :\ If Master, shadow screen present, can use it
 1250   STA &0E09              :\ Store in NFS workspace as MODE error number
 1260   ORA #&30:STA L0A01     :\ Store in MODE? error message
 1270   .L09FA
 1280   BRK:EQUB &AD:EQUS "Mode "
 1290   .L0A01:EQUS "?"        :\ Mode number of remote station
 1300   MODE comparison table, can change modes if same or smaller screen size
 1310   .L0A02
 1320   EQUB 0                 :\ Also terminator of Mode? error message
 1330   EQUB 0
 1340   EQUB 0
 1350   EQUB 3
 1360   EQUB 4
 1370   EQUB 4
 1380   EQUB 6
 1390   EQUB 7
 1400   :
 1410   .L0A0A
 1420   ORA &AE                :\ Add shadow screen bit if present
 1430   .L0A0C
 1440   TAX
 1450   CPY L0912:BEQ L0A1B    :\ If screen mode same, don't change
 1460   LDA #&16:JSR OSWRCH    :\ Change screen mode
 1470   TXA:JSR OSWRCH
 1480   :
 1490   \ Set local palette to match remote palette
 1500   .L0A1B
 1510   LDX #&0F               :\ Start at colour 15
 1520   .L0A1D
 1530   LDA #&13:JSR OSWRCH    :\ VDU 19
 1540   TXA:JSR OSWRCH         :\ Logical colour
 1550   LDA L0900+2,X          :\ Get physical colour from remote VDU info
 1560   LDY #&04               :\ Send it four times to fill VDU 19 command
 1570   .L0A2B
 1580   JSR OSWRCH:DEY:BNE L0A2B
 1590   STY L0AF3
 1600   DEX:BPL L0A1D          :\ Loop for 16 palette entries
 1610   :
 1620   LDY #&0C:STY &FE00     :\ Select CRTC register 12 - start of screen
 1630   LDA L0900+0:STA &0350  :\ CRTC address of top of screen
 1640   LDA L0900+1:STA &0351
 1650   PLP:BNE L0A51               :\ Skip if not MODE 7
 1660   SBC #&74:EOR #&20:BCS L0A5A :\ Correction for MODE 7
 1670   .L0A51
 1680   LDX #&03
 1690   .L0A53
 1700   LSR A:ROR L0900:DEX:BNE L0A53 :\ Correction for MODE <7
 1710   
 1720   .L0A5A
 1730   STA &FE01              :\ Write CRTC start of screen high byte
 1740   INY:STY &FE00          :\ Select CRTC start of screen low byte
 1750   LDA L0900:STA &FE01    :\ Write address low byte
 1760   
 1770   BIT &AE:BPL L0A71 :\ No shadow screen
 1780   DEC L0AF5
 1790   DEC L0AF9
 1800   .L0A71
 1810   BIT &AD
 1820   BPL L0A78
 1830   DEC L0AFD
 1840   .L0A78
 1850   LDA L0900+20
 1860   STA L0AF4
 1870   STA L0AEF
 1880   CLC
 1890   BMI L0A93
 1900   ADC #&04
 1910   STA L0900+20
 1920   STA L0AED
 1930   LDX #&EB
 1940   JSR L0A98
 1950   BEQ L0A78
 1960   .L0A93
 1970   LDA #&0D
 1980   JSR OSWRCH
 1990   .L0A98
 2000   STX &A9
 2010   LDY #&04
 2020   LDA (&A9),Y
 2030   STA L0AF8,Y
 2040   DEY
 2050   LDA (&A9),Y
 2060   STA L0AF8,Y
 2070   DEY
 2080   LDA (&A9),Y
 2090   STA L0AF6,Y
 2100   DEY
 2110   LDA (&A9),Y
 2120   STA L0AF6,Y
 2130   :
 2140   .L0AB3
 2150   STX &A9
 2160   LDX #&0A
 2170   STX &AA
 2180   STX &A8
 2190   .L0ABB
 2200   LDY #&00
 2210   INC &A8
 2220   BMI L0ADA
 2230   LDA (&A9),Y
 2240   STA L0AEF
 2250   LDA #&10
 2260   LDX #&EF
 2270   LDY #&0A
 2280   JSR OSWORD
 2290   .L0ACF
 2300   LDA #&32
 2310   JSR OSBYTE
 2320   TXA
 2330   BMI L0ACF
 2340   ASL A
 2350   BMI L0ABB
 2360   .L0ADA
 2370   RTS
 2380   
 2390   DEY
 2400   STA &02
 2410   ORA #&02
 2420   BRK
 2430   STA (&02,X)
 2440   ORA #&9E
 2450   BRK
 2460   STA (&1E,X)
 2470   ORA #&E9
 2480   .L0AEA
 2490   BRK
 2500   STA (&00,X)
 2510   .L0AED
 2520   BRA L0AEF
 2530   
 2540   .L0AEF
 2550   DEY
 2560   BRK
 2570   .L0AF1
 2580   BRK
 2590   .L0AF2
 2600   BRK
 2610   .L0AF3
 2620   BRK
 2630   .L0AF4
 2640   ORA #&FF
 2650   .L0AF6
 2660   EQUB &FF
 2670   TSB &09
 2680   .L0AF9
 2690   EQUB &FF
 2700   EQUB &FF
 2710   BRK
 2720   ORA #&FF
 2730   EQUB &FF
 2740   JMP (&2B65)
 2750   
 2760 ]NEXT
 2770 PRINT "*SAVE VIEW ";~mcode%;" ";~O%;" ";~exec%;" ";~load%