.DATA EXTRN _AllocExch FWORD EXTRN _DeAllocExch FWORD EXTRN _GetTSSExch FWORD EXTRN _SetPriority FWORD EXTRN _NewTask FWORD EXTRN _SpawnTask FWORD EXTRN _SendMsg FWORD EXTRN _ISendMsg FWORD EXTRN _WaitMsg FWORD EXTRN _CheckMsg FWORD EXTRN _Request FWORD EXTRN _MoveRequest FWORD EXTRN _Respond FWORD EXTRN _GetpJCB FWORD EXTRN _GetJobNum FWORD EXTRN _LoadNewJob FWORD EXTRN _Chain FWORD EXTRN _ExitJob FWORD EXTRN _KillJob FWORD EXTRN _SetUserName FWORD EXTRN _GetUserName FWORD EXTRN _SetCmdLine FWORD EXTRN _GetCmdLine FWORD EXTRN _SetPath FWORD EXTRN _GetPath FWORD EXTRN _SetExitJob FWORD EXTRN _GetExitJob FWORD EXTRN _SetSysIn FWORD EXTRN _GetSysIn FWORD EXTRN _SetSysOut FWORD EXTRN _GetSysOut FWORD EXTRN _SetJobName FWORD EXTRN _RegisterSvc FWORD EXTRN _UnRegisterSvc FWORD EXTRN _GetSystemDisk FWORD EXTRN _SetVidOwner FWORD EXTRN _SetNormVid FWORD EXTRN _GetNormVid FWORD EXTRN _ClrScr FWORD EXTRN _GetVidChar FWORD EXTRN _SetXY FWORD EXTRN _PutVidAttrs FWORD EXTRN _PutVidChars FWORD EXTRN _GetVidOwner FWORD EXTRN _GetXY FWORD EXTRN _ScrollVid FWORD EXTRN _TTYOut FWORD EXTRN _EditLine FWORD PUBLIC _NextNumber DD 0 L_lit DB 78,85,77,66,69,82,83,32,0,78,85,77,66,69,82,83 DB 32,83,101,114,118,105,99,101,32,73,110,115,116,97,108,108 DB 101,100,46,13,10,0,65,78,89,32,118,97,108,105,100,32 DB 107,101,121,115,116,114,111,107,101,32,119,105,108,108,32,116 DB 101,114,109,105,110,97,116,101,32,116,104,101,32,115,101,114 DB 118,105,99,101,46,13,10,0,75,69,89,66,79,65,82,68 DB 0,69,114,114,111,114,32,111,110,32,75,101,121,98,111,97 DB 114,100,32,82,101,113,117,101,115,116,58,13,10,0,78,85 DB 77,66,69,82,83,32,0,78,85,77,66,69,82,83,32,83 DB 101,114,118,105,99,101,32,103,97,118,101,32,111,117,116,32 DB 110,117,109,98,101,114,58,32,37,100,46,13,10,0 PUBLIC _pRqBlk DD 0h PUBLIC _MainExch DD 0h PUBLIC _Message DD 2 DUP(0) PUBLIC _rqHndl DD 0h .CODE EXTRN _fopen: NEAR EXTRN _fclose: NEAR EXTRN _remove: NEAR EXTRN _rename: NEAR EXTRN _fgetc: NEAR EXTRN _fgets: NEAR EXTRN _fputs: NEAR EXTRN _fputc: NEAR EXTRN _printf: NEAR EXTRN _sprintf: NEAR EXTRN _fprintf: NEAR EXTRN _ftell: NEAR EXTRN _rewind: NEAR EXTRN _fseek: NEAR EXTRN _fread: NEAR EXTRN _fwrite: NEAR PUBLIC _main: PUSH EBP MOV EBP,ESP SUB ESP,16 PUSH OFFSET _MainExch CALL FWORD PTR _AllocExch MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JZ L_1 PUSH DWORD PTR [EBP-4] CALL FWORD PTR _ExitJob L_1: PUSH OFFSET L_lit+0 PUSH _MainExch CALL FWORD PTR _RegisterSvc MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JZ L_2 PUSH DWORD PTR [EBP-4] CALL FWORD PTR _ExitJob L_2: PUSH 7 CALL FWORD PTR _SetNormVid CALL FWORD PTR _ClrScr PUSH OFFSET L_lit+9 MOV EDI, 0 CALL _printf ADD ESP,4 PUSH OFFSET L_lit+38 MOV EDI, 0 CALL _printf ADD ESP,4 PUSH OFFSET L_lit+88 PUSH 1 PUSH _MainExch PUSH OFFSET _rqHndl XOR EAX,EAX PUSH EAX LEA EAX,DWORD PTR [EBP-12] PUSH EAX PUSH 4 XOR EAX,EAX PUSH EAX XOR EAX,EAX PUSH EAX PUSH 1 XOR EAX,EAX PUSH EAX XOR EAX,EAX PUSH EAX CALL FWORD PTR _Request MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JZ L_3 PUSH OFFSET L_lit+97 PUSH DWORD PTR [EBP-4] MOV EDI, 4 CALL _printf ADD ESP,8 L_3: L_4: MOV EAX,1 AND EAX,EAX JZ L_5 PUSH _MainExch PUSH OFFSET _Message CALL FWORD PTR _WaitMsg MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_6 MOV ESI,OFFSET _Message MOV EAX,DWORD PTR [ESI] CMP EAX,_rqHndl SETE AL AND AL,AL JZ L_7 PUSH OFFSET L_lit+126 CALL FWORD PTR _UnRegisterSvc L_8: PUSH _MainExch PUSH OFFSET _Message CALL FWORD PTR _CheckMsg AND EAX,EAX JNZ L_9 MOV ESI,OFFSET _Message MOV EAX,DWORD PTR [ESI] MOV _pRqBlk, EAX PUSH _pRqBlk PUSH 30 CALL FWORD PTR _Respond JMP L_8 L_9: PUSH _MainExch CALL FWORD PTR _DeAllocExch PUSH 4 CALL FWORD PTR _ExitJob L_7: MOV ESI,OFFSET _Message MOV EAX,DWORD PTR [ESI] MOV _pRqBlk, EAX MOV ESI,_pRqBlk MOVSX EAX,WORD PTR [ESI+32] XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_10 XOR EAX,EAX MOV DWORD PTR [EBP-8], EAX JMP L_11 L_10: MOV ESI,_pRqBlk MOVSX EAX,WORD PTR [ESI+32] CMP EAX,1 SETE AL AND AL,AL JZ L_12 MOV ESI,_pRqBlk MOV EAX,DWORD PTR [ESI+36] MOV DWORD PTR [EBP-16], EAX MOV ESI,DWORD PTR [EBP-16] MOV EAX,_NextNumber INC _NextNumber MOV DWORD PTR [ESI], EAX XOR EAX,EAX MOV DWORD PTR [EBP-8], EAX PUSH OFFSET L_lit+135 MOV EAX,_NextNumber SUB EAX,1 PUSH EAX MOV EDI, 4 CALL _printf ADD ESP,8 JMP L_13 L_12: MOV EAX,32 MOV DWORD PTR [EBP-8], EAX L_13: L_11: PUSH _pRqBlk PUSH DWORD PTR [EBP-8] CALL FWORD PTR _Respond MOV DWORD PTR [EBP-4], EAX L_6: JMP L_4 L_5: MOV ESP,EBP POP EBP RETN