; ; driver.s ; ; Test driver for Termite script language ; ; © 1995 Straylight ; ;----- Standard Header ------------------------------------------------------ GET libs:header GET libs:swis GET libs:stream ;----- External dependencies ------------------------------------------------ IMPORT |Image$$RW$$Limit| IMPORT |!!!TermScript$$Header$$Base| ;----- Main code ------------------------------------------------------------ AREA |Driver$$Code|,CODE,READONLY ENTRY main ROUT SWI OS_GetEnv MOV R13,R1 SUB R3,R1,#2048 LDR R12,=|Image$$RW$$Limit| ADD R1,R12,#512 SUB R3,R3,R1 MOV R0,#0 SWI OS_Heap STR R1,[R12,#0] ; --- load the file --- SWI OS_GetEnv thingy LDRB R14,[R0],#1 CMP R14,#32 BNE thingy BL loadFile STR R0,[R12,#4] ADR R11,upcalls LDR R10,=|!!!TermScript$$Header$$Base| ; --- Initialise --- ADD R2,R12,#4 MOV R3,R1 MOV R14,PC ADD PC,R10,#8 MOV R9,R0 ; --- The main loop --- testloop MOV R0,R9 CMN R0,#0 MOV R14,PC ADD PC,R10,#12 BVS error CMP R0,#0 BEQ testloop CMP R0,#2 ADRLT R0,end ADREQ R0,chain ADRGT R0,finish SWI OS_Write0 done MOV R0,R9 MOV R14,PC ADD PC,R10,#24 SWI OS_WriteS DCB "+++ Finished!!!",10,13,0 SWI OS_Exit error SWI OS_WriteS DCB "+++ Error: `",0 ADD R0,R0,#4 SWI OS_Write0 SWI OS_WriteI+''' SWI OS_NewLine B done end DCB "+++ End",13,10,0 chain DCB "+++ Chain",13,10,0 finish DCB "+++ Finnish",13,10,0 LTORG loadFile ROUT STMFD R13!,{R0-R5,R14} MOV R1,R0 MOV R0,#17 SWI OS_File MOV R3,R4 STR R4,[R13,#4] LDR R1,[R12,#0] MOV R0,#2 SWI OS_Heap MOV R3,#0 LDR R1,[R13,#0] STR R2,[R13,#0] MOV R0,#16 SWI OS_File LDMFD R13!,{R0-R5,PC}^ upcalls B makeBeep B sendRemote B reportMessage B printMessage B sendLocal B logFileAdd B clearScreen B download B upload B checkCarrier MOVS PC,R14 B readRemote B readLocal MOVS PC,R14 MOVS PC,R14 MOVS PC,R14 MOVS PC,R14 MOVS PC,R14 MOVS PC,R14 MOVS PC,R14 MOVS PC,R14 makeBeep SWI OS_WriteS DCB "+++ Beep!!!",7,10,13,0 MOVS PC,R14 sendRemote STMFD R13!,{R0-R3} SWI OS_WriteS DCB "+++ Sending out `",0 dosod CMP R3,#0 BEQ sodret sodloop LDRB R0,[R2],#1 CMP R0,#127 CMPNE R0,#31 SWIGT OS_WriteC BGT sodendl SWI OS_WriteI+'[' AND R1,R0,#15 MOV R0,R0,LSR #4 CMP R0,#10 ADDCC R0,R0,#'0' ADDCS R0,R0,#'A'-10 SWI OS_WriteC CMP R1,#10 ADDCC R0,R1,#'0' ADDCS R0,R1,#'A'-10 SWI OS_WriteC SWI OS_WriteI+']' sodendl SUBS R3,R3,#1 BGT sodloop sodret SWI OS_WriteI+''' SWI OS_NewLine LDMFD R13!,{R0-R3} MOVS PC,R14 reportMessage STMFD R13!,{R0,R14} SWI OS_WriteS DCB "+++ Reporting: `",0 SWI OS_Write0 SWI OS_WriteI+''' SWI OS_NewLine LDMFD R13!,{R0,PC}^ printMessage STMFD R13!,{R0,R14} SWI OS_WriteS DCB "+++ Printing: `",0 SWI OS_Write0 SWI OS_WriteI+''' SWI OS_NewLine LDMFD R13!,{R0,PC}^ sendLocal STMFD R13!,{R0-R3} SWI OS_WriteS DCB "+++ Sending in: `",0 B dosod logFileAdd STMFD R13!,{R0,R14} SWI OS_WriteS DCB "+++ Adding to log: `",0 SWI OS_Write0 SWI OS_WriteI+''' SWI OS_NewLine LDMFD R13!,{R0,PC}^ clearScreen SWI OS_WriteS DCB "+++ Clear screen",13,10,0 MOVS PC,R14 download STMFD R13!,{R0} SWI OS_WriteS DCB "+++ Download, protocol == `",0 MOV R0,R2 SWI OS_Write0 SWI OS_WriteS DCB "', filename == `",0 CMP R3,#0 ADREQ R0,defname MOVNE R0,R3 SWI OS_Write0 SWI OS_WriteI+''' SWI OS_NewLine LDMFD R13!,{R0} MOVS PC,R14 defname DCB "",0 upload STMFD R13!,{R0,R3,R14} SWI OS_WriteS DCB "+++ Upload, protocol == `",0 MOV R0,R2 SWI OS_Write0 SWI OS_WriteS DCB "', files:",13,10,0 uploop LDRB R0,[R3],#1 CMP R0,#0 LDMEQFD R13!,{R0,R3,PC}^ SWI OS_WriteS DCB "+++ ",0 upotherloop SWI OS_WriteC LDRB R0,[R3],#1 CMP R0,#0 BNE upotherloop SWI OS_NewLine B uploop checkCarrier SWI OS_WriteS DCB "+++ Carrier detect? [yn] ",0 SWI OS_ReadC ORR R0,R0,#&20 CMP R0,#'n' MOVNE R0,#'y' SWI OS_WriteC SWI OS_NewLine SUBS R0,R0,#'n' MOVNE R0,#1 MOVS PC,R14 readLocal SWI OS_ReadC MOVS PC,R14 readRemote SWI OS_ReadC MOVS PC,R14 ;----- Workspace ------------------------------------------------------------ ;----- That's all, folks ---------------------------------------------------- END