1000 ! * LINK.BAC 1005 INTEGER : EXTEND 1010 ; '** Link files **' 1020 ; ' Ver X.02, 1985-02-15' 1030 ; ' Copyright 1984 Dataindustrier AB' 1040 ; 1050 ! * Written by G|ran Nordenborg 1060 ! ** ** ** ** ** ** ** ** ** ** ** 1070 ! * 1080 ! * Ver date / Ver nb / Sign / Note 1090 ! * 84-10-12 / X.00 / GN / Main 1100 ! * 84-12-19 / X.01 / GN / Link name may be long filename 1110 ! * 85-02-15 / X.02 / BL / Accessible from DOS, FNStartpar$ handling 1120 ! * 1130 ! ** ** ** ** ** ** ** ** ** ** ** 1140 ! * 1150 ! EJECT 1160 ! ******************************** 1170 ! * 1180 ! * Main routine 1190 ! * 1200 IF FNLink THEN ; 'LINK abort' 1210 ; FNExit 1220 ! EJECT 1230 ! *********************************** 1240 ! * 1250 ! * Link files 1260 ! * 1270 DEF FNLink 1280 IF FNInitialize THEN RETURN T 1290 S$=FNStartpar$ : IF S$="" GOTO 1320 ELSE I=INSTR(1,S$,",") 1300 IF I D$=RIGHT$(S$,I+1) : S$=LEFT$(S$,I-1) 1310 ! 1320 IF S$="" INPUT 'Source file: 'S$ 1330 IF D$="" INPUT 'Link file: 'D$ 1340 ON ERROR GOTO 1420 1350 OPEN S$ AS FILE 1 1360 D$=FNCapstr$(D$) 1370 IF INSTR(1,D$,':')=0 THEN Devnr=255 ELSE IF FNDevnamenr(LEFT$(D$,3)) THEN RETURN T ELSE D$=RIGHT$(D$,5) 1380 Buff$=D$+CHR$(13) 1390 Error=FNTalknet(14+32+64,16,16,Devnr,SWAP%(VARPTR(Buff$)),VARPTR(Buff$)) 1400 IF Error THEN ; 'Error' Error 'during link' : RETURN T 1410 RETURN F 1420 ! * 1430 ! * Error during open of 'S$' 1440 ! * 1450 RESUME 1460 1460 ; 'Error' ERRCODE 'during open of ''' S$ '''' 1470 RETURN T 1480 FNEND 1490 ! ********************************* 1500 ! * 1510 ! * All initialisations 1520 ! * 1530 DEF FNInitialize 1540 F=0 1550 T=NOT F 1560 Buff$=' ' 1570 POKE VAROOT(Buff$),0,1,0,246,0,1 ! Dosbuffer 1 (F600) 1580 RETURN F 1590 FNEND 1600 ! ******************************** 1610 ! * 1620 ! * Do communication with net central. 1630 ! * 1640 DEF FNTalknet(Fc,Sfc,B,C,D,E) LOCAL Z 1650 IF PEEK(PEEK2(24616))=201 RETURN -1 ! This is not a Lux-net!!! 1660 POKE 64961,Fc ! FC -> MSG.FC (Function code). 1670 POKE 64962,Sfc ! SFC -> MSG.SFC (Subfunction code). 1680 POKE 64963,C,B ! MSG.PDN, MSG.ERRB (BC register to/from central). 1690 POKE 64965,E,D ! Register DE to/from central. 1700 POKE 64798,16 ! TFT fake => BSAVE. ! IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!! 1710 Z=CALL(24615) ! NETCALL => Talk to the central. 1720 Z=PEEK(64962) 1730 IF Z=0 THEN RETURN 0 ELSE RETURN Z-93 1740 FNEND 1750 ! 1760 END 1770 ! ****************************************** 1780 ! * 1790 ! * Convert device name to number 1800 ! * 1810 DEF FNDevnamenr(Devname$) 1820 Devpnt=PEEK2(-133) 1830 WHILE FNGetdev=F 1840 IF Dev$=Devname$ THEN Devnr=Devnumber : RETURN F 1850 WEND 1860 ; 'Can''t find device ''' Devname$ '''' 1870 RETURN T 1880 FNEND 1890 ! ******************************** 1900 ! * 1910 ! * Get next device 1920 ! * 1930 DEF FNGetdev 1940 IF Devpnt=0 THEN RETURN T 1950 Dev$=CHR$(PEEK(Devpnt+2),PEEK(Devpnt+3),PEEK(Devpnt+4)) 1960 Devhandler=PEEK2(Devpnt+5) 1970 Devnumber=PEEK(Devpnt+7) 1980 Devpnt=PEEK2(Devpnt) 1990 RETURN F 2000 FNEND 2010 ! ********************************* 2020 ! * 2030 ! * Make string block letters 2040 ! * 2050 DEF FNCapstr$(Str$) 2060 FOR Strpnt=1 TO LEN(Str$) 2070 IF MID$(Str$,Strpnt,1)>=CHR$(97) THEN MID$(Str$,Strpnt,1)=CHR$(ASCII(MID$(Str$,Strpnt,1)) AND 223) 2080 NEXT Strpnt 2090 RETURN Str$ 2100 FNEND 60000 ! 60010 ! ********************************* 60020 ! * 60030 ! * Check if user entered from DOS or BASIC 60040 ! * 60050 DEF FNChkdos LOCAL I 60060 I=PEEK2(65302)-160 60070 WHILE I<160 : IF PEEK2(I)=-212 RETURN -1 60080 IF PEEK(I)<>13 I=I+1 : WEND 60090 RETURN 0 60100 FNEND 60110 ! 60120 ! ********************************** 60130 ! * 60140 ! * Get start parameter string (if any) 60150 ! * 60160 DEF FNStartpar$ LOCAL Cmdsp,I,Cmd$=160 60170 Cmdsp=PEEK2(65302)-160 60180 WHILE I<160 : I=I+1 : IF PEEK(Cmdsp+I-1)=44 GOTO 60210 60190 IF PEEK(Cmdsp+I-1)=13 RETURN '' ! No startpar string 60200 WEND : RETURN '' ! No startpar string 60210 IF PEEK(Cmdsp+I)=255 I=I+1 ! Skip DOS-entry flag 60220 WHILE I<160 : IF PEEK(Cmdsp+I)=13 GOTO 60250 60230 IF PEEK(Cmdsp+I)<32 OR PEEK(Cmdsp+I)>127 RETURN '' 60240 Cmd$=Cmd$+CHR$(PEEK(Cmdsp+I)) : I=I+1 : WEND 60250 RETURN Cmd$ 60260 FNEND 60270 ! 60280 ! ************************************* 60290 ! * 60300 ! * Exit to DOS or BASIC 60310 ! * 60320 DEF FNExit LOCAL A$=21,A 60330 IF FNChkdos=0 GOTO 60380 ELSE CLOSE ! We MUST close ALL files!!! 60340 A$='CMDINT SYS'+CHR$(14,255,205,27,96,216,195,3,193) 60350 A=VARPTR(A$) 60360 IF CALL(A+11,A) ; "Can't load CMDINT.SYS, press any key for RESET!"; 60370 GET A$ : IF CALL(0) REM Just a miracle would get through here... 60380 END ! End to get out of a function is ugly but... 60390 FNEND