1000 ! * PSEUDO.BAC 1005 INTEGER : EXTEND 1010 GOTO 1200 1020 ; '** Pseudo spooler for Lux-net **' 1030 ; ' Ver X.01, 1985-10-01' 1040 ; ' Copyright 1985 Dataindustrier AB' 1050 ; : RETURN 1060 ! * Written by Jan-Erik Claesson 1070 ! ** ** ** ** ** ** ** ** ** ** ** 1080 ! * 1090 ! * Ver date / Ver nb / Sign / Note 1100 ! * 84-09-28 / X.00 / JEC / Main 1110 ! * 85-10-01 / X.01 / BL / New program 1120 ! * 1130 ! ** ** ** ** ** ** ** ** ** ** ** 1140 ! * 1150 ! EJECT 1160 ! ******************************** 1170 ! * 1180 ! * Find out if I'm a pseudospooler or a user 1190 ! * 1200 T=NOT 0 : F=NOT T : DIM A$=200 1210 IF FNGetstat(254) ; "Error on central userstat request!" : CHAIN 'xsmenu0' 1220 IF (Lpriv AND 1)=0 CHAIN 'xsmenu0' ! Not logged in 1230 IF (Lpriv AND 2)=0 CHAIN 'xsmenu0' ! Not group manager 1240 IF Username$<>'PSEUDO ' CHAIN 'xsmenu0' ! Wrong userid 1250 Ctrlcsaver=PEEK2(65413) : POKE 65413,0,0 ! Disable CTRL-C 1260 ! 1270 ON ERROR GOTO 1280 : OPEN 'lfd:pseudo.aut' AS FILE 1 : GOTO 1300 1280 Z=FNLogout : CHAIN 'xsmenu0' ! Can't find lfd:PSEUDO.AUT! 1290 ! 1300 Dnetid$=FNDnetid$ : A$=STRING$(20,194) ! Dummy... 1310 WHILE A$<>STRING$(20,255) : GET #1 A$ COUNT 20 1320 IF MID$(A$,2,3)=Dnetid$ GOTO 1350 ! Found it!!! 1330 WEND : Z=FNLogout : CHAIN 'xsmenu0' ! No, didn't find terminal... 1340 ! 1350 IF ASCII(A$) AND 128 Z=FNLogout : CHAIN 'xsmenu0' ! Sorry, disabled...! 1360 GOSUB 1020 ! At last, say signon!!!! 1370 Pr$=MID$(A$,5,INSTR(5,A$,CHR$(0))-5) 1380 OPEN Pr$ AS FILE 1 ! Open spooler channel 1390 Queue=ASCII(A$) AND 15 1400 ! 1410 ! ********************************** 1420 ! * 1430 ! * Pseudo spooler main loop 1440 ! * 1450 WHILE SYS(5)=0 1460 WHILE FNTalknet(14,7,Queue,0,0,4) 1470 FOR Delay=1 TO 20000 : NEXT Delay ! SLEEP 4 1480 IF SYS(5) GOTO 1690 1490 WEND 1500 ! file found 1510 Pfn=PEEK(64965) 1520 File$="PRINT"+FNTooct$(Pfn)+".QP"+CHR$(48+Queue) 1530 ; "File: " File$ " found in queue " NUM$(Queue) "." 1540 ON ERROR GOTO 1550 : GOTO 1560 1550 ; "Can't open spooler file (" File$ ")" 1560 OPEN 'lfd:'+File$ AS FILE 2 : ; #1 CHR$(12); 1570 ; #1 '*******************************************************' 1580 ; #1 : ; #1 ' Spool pseudo file - ' TIME$ : ; #1 1590 ; #1 '*******************************************************' 1600 ; #1 CHR$(12); 1610 ON ERROR GOTO 1680 1620 INPUT LINE #2 A$ 1630 ; #1 LEFT$(A$,LEN(A$)-1); 1640 GOTO 1620 1650 ! * 1660 ! * Delete file 1670 ! * 1680 CLOSE 2 : IF FNTalknet(14,7,0,Pfn,5,0) ; "Error at spoolfile delete!" 1690 WEND 1700 Z=FNLogout : CHAIN 'xsmenu0' 1720 ! 1730 ! ********************************** 1740 ! * 1750 ! * Convert decimal to octal 1760 ! * 1770 DEF FNTooct$(A) LOCAL A$=3 1780 A$=STRING$(3-LEN(OCT$(A AND 255)),48)+OCT$(A AND 255) 1790 RETURN A$ 1800 FNEND 1810 ! 1820 ! ********************************* 1830 ! * 1840 ! * Get DNET ID for this node 1850 ! * 1860 DEF FNDnetid$ LOCAL A$=3 1870 OUT 1,3,0,64 1880 FOR I=0 TO 2 : A$=A$+CHR$(PEEK(28624+I)) : NEXT I 1890 OUT 0,0 : RETURN A$ 1900 FNEND 1910 ! 1920 ! ****************************************** 1930 ! * 1940 ! * Get status for user 1950 ! * 1960 DEF FNGetstat(Usernr) LOCAL Buff$=0 1970 POKE VAROOT(Buff$),0,1,0,245,0,1 1980 IF FNTalknet(14,0,0,0,0,Usernr) THEN RETURN T 1990 Lpriv=ASCII(MID$(Buff$,51,1)) 2000 IF (Lpriv AND 1)=0 THEN User=-1 : RETURN F ! Logged out 2010 User=ASCII(MID$(Buff$,39,1)) 2020 Username$=MID$(Buff$,40,8) 2030 Group=CVT$%(MID$(Buff$,48,2)) 2040 Lprot=ASCII(MID$(Buff$,50,1)) 2050 Lpriv=ASCII(MID$(Buff$,51,1)) 2060 Fprot=ASCII(MID$(Buff$,52,1)) 2070 Ufdprot=ASCII(MID$(Buff$,66,1)) 2080 Ufdent=CVT$%(MID$(Buff$,67,2)) 2090 Ufdpdn=ASCII(MID$(Buff$,69,1)) 2100 Lfdprot=ASCII(MID$(Buff$,74,1)) 2110 Lfdent=CVT$%(MID$(Buff$,75,2)) 2120 Lfdpdn=ASCII(MID$(Buff$,77,1)) 2130 Pfdprot=ASCII(MID$(Buff$,78,1)) 2140 Pfdent=CVT$%(MID$(Buff$,79,2)) 2150 Pfdpdn=ASCII(MID$(Buff$,81,1)) 2160 ! * 2170 ! * convert user privilegie to string 2180 ! * 2190 Lpriv$='------' 2200 IF Lpriv AND 32 THEN MID$(Lpriv$,1,1)='C' ! Central login 2210 IF Lpriv AND 16 THEN MID$(Lpriv$,2,1)='X' ! Central task 2220 IF Lpriv AND 8 THEN MID$(Lpriv$,3,1)='D' ! Direct access 2230 IF Lpriv AND 4 THEN MID$(Lpriv$,4,1)='S' ! Super user 2240 IF Lpriv AND 2 THEN MID$(Lpriv$,5,1)='G' ! Group master 2250 IF Lpriv AND 1 THEN MID$(Lpriv$,6,1)='U' ! Logged in user 2260 RETURN F 2270 FNEND 2280 ! ********************************* 2290 ! * 2300 ! * Do communication with net central. 2310 ! * 2320 DEF FNTalknet(Fc,Sfc,B,C,D,E) LOCAL Z 2330 IF PEEK(PEEK2(24616))=201 RETURN -1 ! This is not a Lux-net!!! 2340 POKE 64798,255 ! 0FFH -> BSAVE. => TFT. fake (use DOSBUF0). 2350 POKE 64961,Fc ! FC -> MSG.FC (Function code). 2360 POKE 64962,Sfc ! SFC -> MSG.SFC (Subfunction code). 2370 POKE 64963,C,B ! MSG.PDN, MSG.ERRB (BC register to/from central). 2380 POKE 64965,E,D ! Register DE to/from central. 2390 Z=CALL(24615) ! NETCALL => Talk to the central. 2400 RETURN PEEK(64962) 2410 FNEND 2420 ! 2430 ! ***************************************** 2440 ! * 2450 ! * Logout user 2460 ! * 2470 DEF FNLogout LOCAL Buff$=0,Error 2480 POKE VAROOT(Buff$),0,1,0,PEEK(64787),0,1 2490 ! * 2500 ! * Clear ufd/lfd/pfd pointers 2510 ! * 2520 POKE PEEK2(24685),0,0,0 ! Clear UFD pointer. 2530 POKE PEEK2(24695),0,0,0 ! Clear LFD pointer. 2540 POKE PEEK2(24697),0,0,0 ! Clear PFD pointer. 2550 ! * 2560 ! * Clear user/password/group field 2570 ! * 2580 Buff$=SPACE$(32) 2590 Error=FNTalknet(14+64,1,0,0,0,0) 2600 IF Ctrlcsaver POKE 65413,Ctrlcsaver,SWAP%(Ctrlcsaver) 2610 IF Error THEN ; 'Error' Error 'during logout' : RETURN T 2620 RETURN F 2630 FNEND