home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / p / pps110.zip / PPSSRC.ZIP / SPP.ASM < prev    next >
Assembly Source File  |  1992-07-28  |  9KB  |  406 lines

  1. ;   FILENAME: SPP.ASM
  2. ;
  3. ;   LAST MODIFIED: July 24, 1992
  4.  
  5. jumps      ; Have TASM automatically resolve out of range jumps
  6.  
  7. %tabsize 4
  8.  
  9. ifndef  MDL
  10.     display "Error: This module requires that you provide a memory model"
  11.     display "    definition on the command line. I.E. /dMDL=SMALL."
  12.     err ; Force a fatal error
  13. else
  14.  
  15. model    MDL,pascal           ; Define the memory model
  16. P286
  17.  
  18. Version EQU "1.00"
  19.  
  20. ideal
  21.  
  22. stack   4096           ; Allocate 4K stack
  23.  
  24. dataseg
  25.  
  26. STitle        db    9,"SuperProPlay Advanced v1.0───────────────────────────────────By Joshua C. Jensen",0
  27. BottomLine    db    "`F1`-`~?  `F2`-`~?  `F3`-`~?  `F4`-`~?  `F5`-`~?  `F6`-`~?  `F7`-`~?  `F8`-`~?  `F10`-`HELP",0
  28. TopFileLine    db    " ~═╤~═╤~═╤~═╦~═╗",0
  29. NameLine    db    " ║ `NAME~- EXT ` │ `kbs── ` │ `MODULE NAME~ - ` │ `DRIVE ` ║~ `File `0000 `of `0000 ` ║",0
  30. AfterNameLine    db    " ║~─┼~─┼~─┼~─╠~═╣",0
  31. BlankFileLine   db      " ║~ │~ │~ │~ ║~ ║",0
  32. BottomFileLine    db    " ~═╧~═╧~═╧~═╩~═╝",0
  33. TopBlankLine    db    "O~P ",0
  34.  
  35. db  '\'
  36. HomeDirectory    db    MAX_PATH_LENGTH dup (0)
  37. OldDrive    db    0
  38.  
  39. db  '\'
  40. SPPDirectory    db    MAX_PATH_LENGTH dup (0)
  41. SPPEnv        db    3,"SPP"
  42.  
  43. NoOpenModule    db    "Couldn't load in module...Press a key.",0
  44.  
  45. codeseg
  46.  
  47. SizeOfProg    dw    0
  48.  
  49. include "stdlib.inc"
  50. include "globals.inc"
  51. include "keytask.inc"
  52. include "pps.inc"
  53.  
  54. codeseg
  55.  
  56. proc    WriteStandardInfo
  57.     call    ms_hide
  58.     call    Write,0,0,seg TopBlankLine,offset TopBlankLine
  59.     call    Write,0,23,seg STitle,offset STitle
  60.         call    Write,0,24,seg BottomLine,offset BottomLine
  61.         call    WriteMemLeft,0
  62.         call    ms_show
  63.     ret
  64. endp    WriteStandardInfo
  65.  
  66. proc    MainScreen
  67.     call    ms_hide
  68.     call    WriteStandardInfo
  69.     call    Write,0,1,seg TopFileLine,offset TopFileLine
  70.     call    Write,0,2,seg NameLine,offset NameLine
  71.     call    Write,0,3,seg AfterNameLine,offset AfterNameLine
  72.         mov     cx,4
  73. @@LineLoop:
  74.     call    Write,0,cx,seg BlankFileLine,offset BlankFileLine
  75.     inc    cx
  76.     cmp    cx,22
  77.     jnz    @@LineLoop
  78.     call    Write,0,22,seg BottomFileLine,offset BottomFileLine
  79.     call    ms_show
  80.     ret
  81. endp    MainScreen
  82.  
  83. proc    CheckArrowKeys
  84.     cmp    [Byte bx+k_up],1
  85.         jnz     @@DownKey
  86.         cmp     [Word CurFile],0
  87.         jz      @@Beep
  88.         dec     [Word CurFile]
  89.         mov     bx,[CurFile]
  90.         sub     bx,[TopFile]
  91.         jns     @@PrintIt
  92.         dec     [Word TopFile]
  93.         jmp     @@PrintIt
  94. @@DownKey:
  95.     cmp    [Byte bx+k_down],1
  96.         jnz     @@HomeKey
  97.         mov     bx,[NumFiles]
  98.         dec     bx
  99.         cmp     [CurFile],bx
  100.         jz      @@Beep
  101.         inc     [Word CurFile]
  102.         mov     bx,[CurFile]
  103.         sub     bx,[TopFile]
  104.         cmp     bx,18
  105.         jl      @@PrintIt
  106.         inc     [Word TopFile]
  107.         jmp     @@PrintIt
  108. @@HomeKey:
  109.     cmp    [Byte bx+k_home],1
  110.         jnz     @@EndKey
  111.         cmp     [Word CurFile],0
  112.         jnz     @@SetTop
  113.         cmp     [Word TopFile],0
  114.         jz      @@Beep
  115. @@SetTop:
  116.         mov     [Word CurFile],0
  117.         mov     [Word TopFile],0
  118.         jmp     @@PrintIt
  119. @@EndKey:
  120.     cmp    [Byte bx+k_end],1
  121.         jnz     @@PgUpKey
  122.         mov     bx,[NumFiles]
  123.         dec     bx
  124.         cmp     [CurFile],bx
  125.         jnz     @@SetBottom
  126.         sub     bx,[TopFile]
  127.         cmp     bx,18
  128.         jl      @@Beep
  129. @@SetBottom:
  130.         mov     bx,[NumFiles]
  131.         dec     bx
  132.         mov     [CurFile],bx
  133.         sub     bx,17
  134.         js      @@FixBottom
  135.         mov     [TopFile],bx
  136.         jmp     @@PrintIt
  137. @@FixBottom:
  138.         mov     [Word TopFile],0
  139.         jmp     @@PrintIt
  140. @@PgUpKey:
  141.     cmp    [Byte bx+k_pgup],1
  142.         jnz     @@PgDnKey
  143.         cmp     [Word CurFile],0
  144.         jz      @@Beep
  145.         sub     [Word CurFile],18
  146.         js      @@FixPgUp
  147.         sub     [Word TopFile],18
  148.         js      @@FixPgUp2
  149.         jmp     @@PrintIt
  150. @@FixPgUp:
  151.         mov     [Word CurFile],0
  152. @@FixPgUp2:
  153.         mov     [Word TopFile],0
  154.         jmp     @@PrintIt
  155.  
  156. @@PgDnKey:
  157.     cmp    [Byte bx+k_pgdn],1
  158.         jnz     @@ExitError
  159.         mov     dx,[NumFiles]
  160.         dec     dx
  161.         cmp     [CurFile],dx
  162.         jz      @@Beep
  163.         add     [Word CurFile],18
  164.         cmp     [CurFile],dx
  165.         jg      @@FixPgDn
  166.         add     [Word TopFile],18
  167.         cmp     [Word TopFile],dx
  168.         jg      @@FixPgDn2
  169.         jmp     @@PrintIt
  170. @@FixPgDn:
  171.         mov     [Word CurFile],dx
  172. @@FixPgDn2:
  173.         sub     dx,17
  174.         js      @@FixPgDn3
  175.         mov     [TopFile],dx
  176.         jmp     @@PrintIt
  177. @@FixPgDn3:
  178.         mov     [Word TopFile],0
  179.         jmp     @@PrintIt
  180. @@Beep: clc
  181.     ret
  182. @@PrintIt:
  183.         call    DisplayFiles,[Word FileSeg+2],[Word FileSeg],[Word TopFile]
  184.         call    DisplayFileMax,[Word CurFile],[Word NumFiles]
  185.     clc
  186.     ret
  187. @@ExitError:
  188.     stc
  189.     ret
  190. endp    CheckArrowKeys
  191.  
  192. proc    SelectFile
  193.     uses    ds
  194.     mov    ax,size FStruc
  195.     mul    [CurFile]
  196.         lds     di,[FileSeg]
  197.         add     di,ax
  198.     mov    dx,di
  199.         cmp     [di+FStruc.TypeOfFile],F_Directory
  200.     jnz    @@MustBeAModule
  201.     mov    AH,3Bh
  202.         int     21h             ;2-Change_Directory
  203.         call    ReadFiles
  204.     call    MainScreen
  205.     call    DisplayAll
  206.         ret
  207. @@MustBeAModule:
  208.     push    ds di dx
  209.     call    sd_CloseAllMusic
  210.     pop    dx di ds
  211. @@LoadTheModule:
  212.     call    sd_LoadModule
  213.     jnb    @@ModuleLoadedOK
  214.     call    WriteMemLeft,0
  215.     call    FillBox,1,11,47,3,4F20h
  216.     mov    bx,4Fh
  217.     call    WriteCol,5,12,seg NoOpenModule,offset NoOpenModule
  218. @@WaitForKey:
  219.     call    Keys
  220.     jz    @@WaitForKey
  221.     call    MainScreen
  222.     call    DisplayAll
  223.     ret
  224. @@ModuleLoadedOK:
  225.     call    WriteMemLeft,0
  226.         call    sd_PlayMusic
  227.     ret
  228. endp    SelectFile
  229.  
  230. proc    RunMain
  231. @@TopLoop:
  232.     call    MainScreen
  233.     call    ReadFiles
  234.     call    DisplayAll
  235.     call    ms_show
  236. @@KeyLoop:
  237. ;     mov     cx,0
  238. ;@@TLoop:
  239. ;     loop     @@TLoop
  240.     mov    bx,offset kb
  241.     cmp    [Byte bx+k_esc],1
  242.     jnz    @@ArrowKeys
  243.     call    sd_CloseAllMusic
  244.     ret
  245. @@ArrowKeys:
  246.     call    CheckArrowKeys
  247.     jnb    @@KeyLoop
  248.     cmp    [Byte bx+k_enter],1
  249.         jnz     @@CheckF9
  250.     call    SelectFile
  251.     jmp    @@KeyLoop
  252. @@CheckF9:
  253.     cmp    [Byte bx+k_tab],1
  254.         jnz     @@CheckSt
  255.     call    AltScrn1
  256.     call    MainScreen
  257.     call    DisplayAll
  258.     jmp    @@KeyLoop
  259. @@CheckSt:
  260.     call    CheckStandardKeys
  261.     jmp    @@KeyLoop
  262. endp    RunMain
  263.  
  264.  
  265.  
  266. ;──────────────────────────────────────────────────────────────────────────────┐
  267. ;┌─────────────────────────────────────────────────────────────────────────────┘
  268. ;└─────────────────────────────────────────────────────────────────────────────┐
  269. ;──────────────────────────────────────────────────────────────────────────────┘
  270.  
  271. codeseg
  272. SavedDS     dw    ?    ; For the control-break handler to find the path
  273.             ; variables for restoring the original path and
  274.             ; drive.
  275.  
  276.  
  277. dataseg
  278.  
  279. PspAddress      dw      ?       ; Segment address of Program Segment Prefix(PSP)
  280.  
  281. codeseg
  282.  
  283. proc Main
  284.  
  285. ;************************* Program Entry Point ***************************
  286. ; Execution of the program begins here.
  287.  
  288. EntryPoint:
  289.     mov    ax, @data    ; Initialize ds by moving segment address
  290.     mov    ds, ax        ; of data segment into ds register
  291.  
  292.     call    Initialize    ; Initialize data structures, etc.
  293.  
  294.     call    RunMain
  295. endp    main
  296.  
  297. proc    Terminate
  298.     call    OffKbdTask
  299.     call    sl_FreeAllHeap
  300.  
  301.     mov    ax, [SavedDS]
  302.     mov    ds,ax
  303.  
  304.     mov    ah,0Eh
  305.     mov    dl,[OldDrive]
  306.     int    21h
  307.     mov    ah,3Bh
  308.     mov    dx,offset HomeDirectory - 1
  309.     int    21h
  310.  
  311.     call    RestoreMode
  312.  
  313. ;     mov     dx,[cs:SizeOfProg]
  314. ;     mov     ah,31h
  315. ;     int     21h
  316.     mov    ax, 4C00h
  317.     int    21h
  318. endp    Terminate
  319.  
  320. proc    Initialize
  321.  
  322.     ; Store the PSP address by storing es in the variable PspAddress.
  323.     ; Note that we do it this way instead of using DOS function 62h because
  324.     ; the function is only available on DOS 3.0 or later.
  325.  
  326.     mov    [PspAddress], es
  327.     push    es
  328.     mov    ax, seg PSPAddress
  329.     mov    es, ax
  330.     mov    bx, [es:PSPAddress]
  331.     mov    es, bx
  332.     mov    ax, zzzzzseg
  333.     sub    ax, bx
  334.     mov    bx,ax
  335.     inc    bx            ;Safety margin
  336.     inc    bx
  337.     mov    [cs:SizeOfProg],bx
  338.     mov    ah, 4ah         ;Memory block resize opcode
  339.     int    21h
  340.     pop    es
  341.  
  342.     mov    ax,ds
  343.     mov    [SavedDS],ax
  344.  
  345.     call    DetermineDisplay
  346.     call    SetMode
  347.     call    SetCursor,CursorOff
  348.  
  349.     mov    ah,47h
  350.     mov    dl,0
  351.     mov    si,offset HomeDirectory
  352.     int    21h
  353.     mov    ah,19h
  354.     int    21h
  355.     mov    [OldDrive],al
  356.  
  357.     mov    ax,[PspAddress]
  358.     mov    cx,MAX_PATH_LENGTH
  359.     push    ds
  360.     pop    es
  361.     mov    si,offset SPPEnv
  362.     mov    di,offset SPPDirectory
  363.     call    sl_EnvString
  364.     mov    di,offset SPPDirectory
  365.     cmp    [Byte di],0
  366.     je    @@1
  367.         mov     cx,MAX_PATH_LENGTH
  368. @@LookLoop:
  369.     cmp    [Byte di],0
  370.     je    @@FoundIt
  371.     inc    di
  372.     loop    @@LookLoop
  373. @@FoundIt:
  374.     cmp    [Byte di-01h],'\'
  375.     je    @@1
  376.     mov    [Byte di],'\'
  377.     mov    [Byte di+01h],0
  378.  
  379. @@1:
  380.     call    HowMuchMemory
  381.     mov    bx,255
  382.     call    sd_InitSound
  383.     call    sl_InitHeap
  384.  
  385.     xor    dx,dx
  386.     mov    ax,size FStruc
  387.     mov    bx,[MaxFiles]
  388.     mul    bx
  389.     call    sl_Allocate,ax,seg FileSeg,offset FileSeg
  390.  
  391.     mov    ax,@data
  392.         mov     ds,ax
  393.     call    ms_init
  394.     call    SetKbdTask
  395.     ret
  396. endp    Initialize
  397.  
  398. segment zzzzzseg   ; Dummy final segment for calculating program size
  399.                    ; to release memory back to DOS.
  400. LastBytes    db    16 dup (?)
  401. ends    zzzzzseg
  402.  
  403. endif   ; ifndef MDL
  404.  
  405. end EntryPoint
  406.